Class: HTML2FB::StateMachine
- Inherits:
-
Object
- Object
- HTML2FB::StateMachine
- Defined in:
- lib/Html2Feedbooks/parser.rb
Instance Method Summary collapse
- #add_level(tab) ⇒ Object
- #close_section(lvl) ⇒ Object
- #create_fbsection(title, fblevel) ⇒ Object
- #create_textNode(txt) ⇒ Object
- #feed(el) ⇒ Object
- #finish(doc) ⇒ Object
-
#initialize ⇒ StateMachine
constructor
A new instance of StateMachine.
- #inspect ⇒ Object
- #open_section(obj, lvl, el) ⇒ Object
- #reset(doc) ⇒ Object
Constructor Details
#initialize ⇒ StateMachine
Returns a new instance of StateMachine.
130 131 132 133 134 135 136 137 |
# File 'lib/Html2Feedbooks/parser.rb', line 130 def initialize @levels=[] @current_level=0 @starts=[] @done=[] @max_level=0 @content=nil end |
Instance Method Details
#add_level(tab) ⇒ Object
139 140 141 142 143 |
# File 'lib/Html2Feedbooks/parser.rb', line 139 def add_level(tab) tab=[tab] unless tab.is_a?Array @levels.push tab @current_level+=1 end |
#close_section(lvl) ⇒ Object
203 204 205 206 207 208 209 |
# File 'lib/Html2Feedbooks/parser.rb', line 203 def close_section(lvl) return if @starts[lvl].nil? llvl=lvl-1 llvl=llvl-1 until !@starts[llvl].nil? @starts[llvl].content.push @starts[lvl] @starts[lvl]=nil end |
#create_fbsection(title, fblevel) ⇒ Object
156 157 158 159 160 161 |
# File 'lib/Html2Feedbooks/parser.rb', line 156 def create_fbsection(title,fblevel) s=Section.new s.fblevel=fblevel s.title = title s end |
#create_textNode(txt) ⇒ Object
163 164 165 |
# File 'lib/Html2Feedbooks/parser.rb', line 163 def create_textNode(txt) Text.new(txt) end |
#feed(el) ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/Html2Feedbooks/parser.rb', line 211 def feed(el) return if el.text? @done=[[]*@levels.size] @levels.each_with_index do |lvl,i| lvl.each do |expr| #puts i.to_s+" "+el.inspect if el.in_search?(expr['expr']) if el.in_search?(expr['expr']) open_section({:xpath => el.path, :fblevel => expr['fblevel']},i+1,el) break end end end end |
#finish(doc) ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/Html2Feedbooks/parser.rb', line 167 def finish(doc) unless @content.nil? # t=create_textNode(doc.root.search(@content...doc.children.last.xpath)) t=create_textNode(doc.at(@content).following.to_html) @starts[@current_level].content.push(t) end (1..@max_level).to_a.reverse.each do |l| close_section(l) end @starts[0] end |
#inspect ⇒ Object
152 153 154 |
# File 'lib/Html2Feedbooks/parser.rb', line 152 def inspect @levels.inspect+"\n"+@current_level.to_s+"\n\n"+@done.inspect end |
#open_section(obj, lvl, el) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/Html2Feedbooks/parser.rb', line 179 def open_section(obj,lvl,el) if @content=='body' tmp=el.preceding[0..-1] else tmp=el.root.between(@content,(el.path),true)[1..-1] end if tmp.blank? #search can'find between siblins tmp=el.root.deep_between(@content,(el.path)) end unless tmp.blank? tmph=tmp.to_html unless tmph.blank? t=create_textNode(tmph) @starts[@current_level].content.push(t) end end (lvl..@max_level).to_a.reverse.each do |l| close_section(l) end @starts[lvl]=create_fbsection(el.root.at_xpath(obj[:xpath]).text,obj[:fblevel]) @content=obj[:xpath] @current_level=lvl end |
#reset(doc) ⇒ Object
145 146 147 148 149 150 |
# File 'lib/Html2Feedbooks/parser.rb', line 145 def reset(doc) @current_level=0 @max_level=@levels.size @starts[0]=doc @content='body' end |