Class HTML5::Filters::InjectMetaCharset
In: lib/feed_tools/vendor/html5/lib/html5/filters/inject_meta_charset.rb
Parent: Base
Phase XmlElementPhase InTablePhase RootElementPhase AfterHeadPhase InHeadPhase AfterFramesetPhase XmlRootPhase InitialPhase InFramesetPhase InColumnGroupPhase InTableBodyPhase InCaptionPhase BeforeHeadPhase TrailingEndPhase InSelectPhase InCellPhase AfterBodyPhase InBodyPhase InRowPhase Exception SerializeError EOF AssertionError ParseError HTMLSanitizer HTMLTokenizer XhmlRootPhase String EncodingBytes XMLParser XHTMLParser HTMLParser HTMLSerializer XHTMLSerializer TreeWalkers::Base NonRecursiveTreeWalker TreeWalker TreeWalker Base TreeWalker Element DocumentFragment Node CommentNode DocumentType TextNode Document Base::Node Node Node Base::TreeBuilder TreeBuilder TreeBuilder TreeBuilder Element DocumentFragment CommentNode DocumentType TextNode Document Element DocumentFragment CommentNode DocumentType TextNode Document Base OptionalTagFilter InjectMetaCharset WhitespaceFilter HTMLSanitizeFilter HTMLSanitizeModule Enumerable TestData SimpleDelegator HTMLInputStream EncodingParser ContentAttrParser Node TreeBuilder lib/feed_tools/vendor/html5/lib/html5/html5parser/trailing_end_phase.rb lib/feed_tools/vendor/html5/lib/html5/constants.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/after_frameset_phase.rb lib/feed_tools/vendor/html5/lib/html5/liberalxmlparser.rb lib/feed_tools/vendor/html5/lib/html5/serializer/xhtmlserializer.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_caption_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_table_body_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_frameset_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/initial_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/root_element_phase.rb lib/feed_tools/vendor/html5/lib/html5/serializer/htmlserializer.rb lib/feed_tools/vendor/html5/lib/html5/tokenizer.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_select_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/before_head_phase.rb lib/feed_tools/vendor/html5/lib/html5/inputstream.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_table_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_row_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_cell_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_body_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_head_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/after_body_phase.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/after_head_phase.rb lib/feed_tools/vendor/html5/lib/html5/sanitizer.rb lib/feed_tools/vendor/html5/lib/html5/html5parser/in_column_group_phase.rb lib/feed_tools/vendor/html5/lib/html5/treewalkers/base.rb lib/feed_tools/vendor/html5/lib/html5/treewalkers/hpricot.rb Hpricot TokenConstructor lib/feed_tools/vendor/html5/lib/html5/treewalkers/rexml.rb REXML lib/feed_tools/vendor/html5/lib/html5/treewalkers/simpletree.rb SimpleTree TreeWalkers HTMLSanitizeModule lib/feed_tools/vendor/html5/lib/html5/treebuilders/hpricot.rb Hpricot lib/feed_tools/vendor/html5/lib/html5/treebuilders/base.rb Base lib/feed_tools/vendor/html5/lib/html5/treebuilders/rexml.rb REXML lib/feed_tools/vendor/html5/lib/html5/treebuilders/simpletree.rb SimpleTree TreeBuilders lib/feed_tools/vendor/html5/lib/html5/filters/whitespace.rb lib/feed_tools/vendor/html5/lib/html5/filters/optionaltags.rb lib/feed_tools/vendor/html5/lib/html5/filters/base.rb lib/feed_tools/vendor/html5/lib/html5/filters/inject_meta_charset.rb lib/feed_tools/vendor/html5/lib/html5/filters/sanitizer.rb Filters Sniffer lib/feed_tools/vendor/html5/tests/preamble.rb TestSupport HTML5 dot/m_75_0.png

Methods

each   new  

Public Class methods

[Source]

   # File lib/feed_tools/vendor/html5/lib/html5/filters/inject_meta_charset.rb, line 6
6:       def initialize(source, encoding)
7:         super(source)
8:         @encoding = encoding
9:       end

Public Instance methods

[Source]

    # File lib/feed_tools/vendor/html5/lib/html5/filters/inject_meta_charset.rb, line 11
11:       def each
12:         state = :pre_head
13:         meta_found = @encoding.nil?
14:         pending = []
15: 
16:         __getobj__.each do |token|
17:           case token[:type]
18:           when :StartTag
19:             state = :in_head if token[:name].downcase == "head"
20: 
21:           when :EmptyTag
22:             if token[:name].downcase == "meta"
23:               # replace charset with actual encoding
24:               token[:data].each_with_index do |(name, value), index|
25:                 if name == 'charset'
26:                   token[:data][index][1] = @encoding
27:                   meta_found = true
28:                 end
29:               end
30: 
31:               # replace charset with actual encoding
32:               has_http_equiv_content_type = false
33:               content_index = -1
34:               token[:data].each_with_index do |(name, value), i|
35:                 if name.downcase == 'charset'
36:                   token[:data][i] = ['charset', @encoding]
37:                   meta_found = true
38:                   break
39:                 elsif name == 'http-equiv' and value.downcase == 'content-type'
40:                   has_http_equiv_content_type = true
41:                 elsif name == 'content'
42:                   content_index = i
43:                 end
44:               end
45: 
46:               if !meta_found
47:                 if has_http_equiv_content_type && content_index >= 0
48:                   token[:data][content_index][1] = 'text/html; charset=%s' % @encoding
49:                   meta_found = true
50:                 end
51:               end
52: 
53:             elsif token[:name].downcase == "head" && !meta_found
54:               # insert meta into empty head
55:               yield :type => :StartTag, :name => "head", :data => token[:data]
56:               yield :type => :EmptyTag, :name => "meta", :data => [["charset", @encoding]]
57:               yield :type => :EndTag,   :name => "head"
58:               meta_found = true
59:               next
60:             end
61: 
62:           when :EndTag
63:             if token[:name].downcase == "head" && pending.any?
64:               # insert meta into head (if necessary) and flush pending queue
65:               yield pending.shift
66:               yield :type => :EmptyTag, :name => "meta", :data => [["charset", @encoding]] if !meta_found
67:               yield pending.shift while pending.any?
68:               meta_found = true
69:               state = :post_head
70:             end
71:           end
72: 
73:           if state == :in_head
74:             pending << token
75:           else
76:             yield token
77:           end
78:         end
79:       end

[Validate]