class Gammo::Parser::Initial
Section 12.2.6.4.1
Constants
- QUIRKY_IDS
Public Instance Methods
comment_token(token)
click to toggle source
# File lib/gammo/parser/insertion_mode/initial.rb, line 13 def comment_token(token) parser.document.append_child(Node::Comment.new(data: token.data)) halt true end
default(_)
click to toggle source
# File lib/gammo/parser/insertion_mode/initial.rb, line 26 def default(_) parser.quirks = true parser.insertion_mode = BeforeHTML halt false end
doctype_token(token)
click to toggle source
# File lib/gammo/parser/insertion_mode/initial.rb, line 18 def doctype_token(token) n, quirks = parse_doctype(token.data) parser.document.append_child(n) parser.quirks = quirks parser.insertion_mode = BeforeHTML halt true end
text_token(token)
click to toggle source
# File lib/gammo/parser/insertion_mode/initial.rb, line 7 def text_token(token) token.data = token.data.lstrip # it's all whitespace so ignore it. halt true if token.data.length.zero? end
Private Instance Methods
parse_doctype(s)
click to toggle source
# File lib/gammo/parser/insertion_mode/initial.rb, line 90 def parse_doctype(s) node = Node::Doctype.new pos = s.index(?\s) pos = s.length unless pos node.data = s.slice(0, pos) quirks = false quirks = true if node.data != 'html' node.data = node.data.downcase s = s.slice(pos..-1).lstrip return [node, quirks || s != ''] if s.length < 6 key = s.slice(0, 6).downcase s = s.slice(6..-1) while key == 'public' || key == 'system' s = s.lstrip break if s.empty? quote = s[0] break if quote != ?" && quote != ?' s = s.slice(1..-1) id = '' q = s.index(quote) if q id = s.slice(0, q) s = s.slice((q + 1)..-1) else id = s s = '' end node.attributes << Attribute.new(key: key, value: id) key = key == 'public' ? 'system' : '' if key != '' || s != '' quirks = true elsif node.attributes.length > 0 if node.attributes.first.key == 'public' pub = node.attributes.first.value.downcase case pub when '-//w3o//dtd w3 html strict 3.0//en//', '-/w3d/dtd html 4.0 transitional/en', 'html' quirks = true else QUIRKY_IDS.each do |quirky| if pub.start_with?(quirky) quirks = true break end end end if node.attributes.length == 1 && pub.start_with?('-//w3c//dtd html 4.01 frameset//') || pub.start_with?('-//w3c//dtd html 4.01 transitional//') quirks = true end end last = node.attributes.last if last.key == 'system' && last.value.downcase == 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd' quirks = true end end end [node, quirks] end