Class: XSD::XMLParser::XMLScanner

Inherits:
Parser
  • Object
show all
Includes:
XMLScan::Visitor
Defined in:
lib/xsd/xmlparser/xmlscanner.rb

Constant Summary collapse

ENTITY_REF_MAP =
{
  'lt' => '<',
  'gt' => '>',
  'amp' => '&',
  'quot' => '"',
  'apos' => '\''
}

Instance Attribute Summary

Attributes inherited from Parser

#charset

Instance Method Summary collapse

Methods inherited from Parser

add_factory, create_parser, factory, #initialize, #parse

Constructor Details

This class inherits a constructor from XSD::XMLParser::Parser

Instance Method Details

#do_parse(string_or_readable) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 20

def do_parse(string_or_readable)
  @attrs = {}
  @curattr = nil
  @scanner = XMLScan::XMLScanner.new(self)
  @scanner.kcode = XSD::Charset.charset_str(charset) if charset
  @scanner.parse(string_or_readable)
end

#on_attr_charref(code) ⇒ Object



123
124
125
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 123

def on_attr_charref(code)
  @curattr << [code].pack('U')
end

#on_attr_charref_hex(code) ⇒ Object



127
128
129
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 127

def on_attr_charref_hex(code)
  on_attr_charref(code)
end

#on_attr_entityref(ref) ⇒ Object



119
120
121
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 119

def on_attr_entityref(ref)
  @curattr << ENTITY_REF_MAP[ref]
end

#on_attr_value(str) ⇒ Object



115
116
117
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 115

def on_attr_value(str)
  @curattr << str
end

#on_attribute(name) ⇒ Object



111
112
113
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 111

def on_attribute(name)
  @attrs[name] = @curattr = ''
end

#on_chardata(str) ⇒ Object

def on_pi(target, pi); end



81
82
83
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 81

def on_chardata(str)
  characters(str)
end

#on_charref(code) ⇒ Object



95
96
97
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 95

def on_charref(code)
  characters([code].pack('U'))
end

#on_charref_hex(code) ⇒ Object



99
100
101
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 99

def on_charref_hex(code)
  on_charref(code)
end

#on_entityref(ref) ⇒ Object



91
92
93
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 91

def on_entityref(ref)
  characters(ENTITY_REF_MAP[ref])
end

#on_etag(name) ⇒ Object

def on_cdata(str); end



87
88
89
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 87

def on_etag(name)
  end_element(name)
end

#on_stag(name) ⇒ Object

def on_end_document; end



107
108
109
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 107

def on_stag(name)
  @attrs = {}
end

#on_stag_end(name) ⇒ Object



138
139
140
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 138

def on_stag_end(name)
  start_element(name, @attrs)
end

#on_stag_end_empty(name) ⇒ Object

def on_attribute_end(name); end



133
134
135
136
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 133

def on_stag_end_empty(name)
  on_stag_end(name)
  on_etag(name)
end

#on_xmldecl_encoding(str) ⇒ Object



63
64
65
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 63

def on_xmldecl_encoding(str)
  self.scanner_kcode = str
end

#on_xmldecl_version(str) ⇒ Object

def on_xmldecl; end



59
60
61
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 59

def on_xmldecl_version(str)
  # 1.0 expected.
end

#parse_error(msg) ⇒ Object

Raises:



41
42
43
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 41

def parse_error(msg)
  raise ParseError.new(msg)
end

#scanner_kcode=(charset) ⇒ Object



28
29
30
31
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 28

def scanner_kcode=(charset)
  @scanner.kcode = XSD::Charset.charset_str(charset) if charset
  self.xmldecl_encoding = charset
end

#valid_error(msg) ⇒ Object

Raises:

  • (NotValidError)


49
50
51
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 49

def valid_error(msg)
  raise NotValidError.new(msg)
end

#warning(msg) ⇒ Object



53
54
55
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 53

def warning(msg)
  p msg if $DEBUG
end

#wellformed_error(msg) ⇒ Object

Raises:

  • (NotWellFormedError)


45
46
47
# File 'lib/xsd/xmlparser/xmlscanner.rb', line 45

def wellformed_error(msg)
  raise NotWellFormedError.new(msg)
end