class SiSU_XHTML_EPUB2::Source::Toc
Public Class Methods
new(md=nil,data='')
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 205 def initialize(md=nil,data='') @md,@data=md,data @epub=SiSU_XHTML_EPUB2_Format::HeadInformation.new(@md) @tell=SiSU_Screen::Ansi.new(@md.opt.act[:color_state][:set]) if @md @make=SiSU_Env::ProcessingSettings.new(@md) @per=SiSU_XHTML_EPUB2_Persist::PersistTOC.new end
Public Instance Methods
songsheet()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 212 def songsheet #extracts toc for scroll & seg begin if (@md.opt.act[:verbose][:set]==:on \ || @md.opt.act[:verbose_plus][:set]==:on \ || @md.opt.act[:maintenance][:set]==:on) SiSU_Screen::Ansi.new( @md.opt.act[:color_state][:set], 'Toc' ).txt_grey end toc=nil @@firstseg=nil SiSU_XHTML_EPUB2_Persist::PersistTOC.new.persist_init md_opf_a_content,md_opf_a_spine,md_opf_a_guide=[],[],[] @nav_no=0 @s_a_no,@s_b_no,@s_c_no,@s_d_no,@lv5_no,@lv6_no=0,0,0,0,0,0 @per.ncx << @epub.toc_ncx.open #epub ncx navmap @per.ncx << @epub.toc_ncx.head_open << @epub.toc_ncx.head << @epub.toc_ncx.head_close @per.ncx << @epub.toc_ncx.doc_title << @epub.toc_ncx.doc_author @per.ncx << @epub.toc_ncx.navmap_open @per.opf << @epub.metadata_opf.package_open @per.opf << @epub.metadata_opf.metadata @per.opf << @epub.metadata_opf.manifest_open @per.seg << %{<div class="content">\n<div class="substance">} @per.scr << %{<div class="content">\n<div class="substance">} if defined? @md.make.cover_image \ and @md.make.cover_image.is_a?(Hash) \ and @md.make.cover_image[:cover] =~/\S+/ md_opf_a_content << @epub.metadata_opf.manifest_cover_image_information(@md) md_opf_a_spine << @epub.metadata_opf.spine_cover_image md_opf_a_guide << @epub.metadata_opf.guide_cover_image end md_opf_a_content << @epub.metadata_opf.manifest_content_sisu_toc if @make.build.toc? md_opf_a_spine << @epub.metadata_opf.spine_sisu_toc md_opf_a_guide << @epub.metadata_opf.guide_sisu_toc end @ncxo=[false,false,false,false,false,false,false] @dob_toc2,@dob_toc3=nil,nil @ncx_cls=[] @level_a_first_occurrence=true @data.each do |dob| if dob.is==:heading \ || dob.is==:heading_insert dob_toc=dob.dup toc=case dob_toc.ln when 0 @s_a_no +=1 lv_name='section_a' + @s_a_no.to_s @nav_no+=1 @nav_no2=@nav_no @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[3] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[2] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[1] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[0] @ncxo[0],@ncxo[1],@ncxo[2],@ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6],@ncxo[7]= true, false, false, false, false, false, false, false @epub.sections(dob_toc,lv_name) if @level_a_first_occurrence \ && @make.build.toc? @per.ncx << @epub.toc_ncx.navmap_sisu_toc(@nav_no) #epub ncx navmap, toc @nav_no+=1 @level_a_first_occurrence=false end @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_0 when 1 @s_b_no +=1 lv_name='section_b' + @s_b_no.to_s @nav_no+=1 @nav_no2=@nav_no @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[3] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[2] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[1] @ncxo[1],@ncxo[2],@ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6],@ncxo[7]= true, false, false, false, false, false, false @epub.sections(dob_toc,lv_name) @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_1 when 2 @s_c_no +=1 lv_name='section_c' + @s_c_no.to_s @nav_no+=1 @nav_no2=@nav_no @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[3] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[2] @ncxo[2],@ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6],@ncxo[7]= true, false, false, false, false, false @epub.sections(dob_toc,lv_name) @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_2 when 3 @s_d_no +=1 lv_name='section_d' + @s_d_no.to_s @nav_no+=1 @nav_no3=@nav_no @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[3] @ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6],@ncxo[7]= true, false, false, false, false @epub.sections(dob_toc,lv_name) @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_3 when 4 @ncx_cls=[] lv_name=dob_toc.name @nav_no+=1 @dob_name=dob.name @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @ncxo[4],@ncxo[5],@ncxo[6],@ncxo[7]= true, false, false, false @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_4 when 5 @ncx_cls=[] hashtag='#o' + dob_toc.ocn.to_s lv_name=@dob_name @nav_no+=1 @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @ncxo[5],@ncxo[6],@ncxo[7]= true, false, false @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name,hashtag) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name,hashtag) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name,hashtag) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name,hashtag) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_5 when 6 @ncx_cls=[] hashtag='#o' + dob_toc.ocn.to_s lv_name=@dob_name @nav_no+=1 @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @ncxo[6],@ncxo[7]= true, false @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name,hashtag) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name,hashtag) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name,hashtag) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name,hashtag) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_6 when 7 @ncx_cls=[] hashtag='#o' + dob_toc.ocn.to_s lv_name=@dob_name @nav_no+=1 @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[7] @ncxo[7]=true @per.ncx << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name,hashtag) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name,hashtag) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name,hashtag) md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name,hashtag) SiSU_XHTML_EPUB2::Source::Toc.new(@md,dob_toc).level_7 else nil end toc.each do |k,d| d.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') end if toc if @@firstseg.nil? \ and dob.ln==4 \ and dob.name =~/\S+/ @@firstseg=dob.name end if toc begin @per.seg << toc[:seg] @per.scr << toc[:seg] rescue SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do __LINE__.to_s + ':' + __FILE__ end end end end end @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[6] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[5] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[4] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[3] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[2] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[1] @per.ncx << @epub.toc_ncx.navpoint_close if @ncxo[0] @ncxo[0],@ncxo[1],@ncxo[2],@ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6]=false,false,false,false,false,false,false md_opf_a_content << @epub.metadata_opf.manifest_images(@md.ec[:image]) @per.seg << "</div>\n</div>" @per.scr << "</div>\n</div>" @per.ncx << @epub.toc_ncx.navmap_close @per.ncx << @epub.toc_ncx.close @per.opf << md_opf_a_content << @epub.metadata_opf.manifest_close @per.opf << @epub.metadata_opf.spine_open << md_opf_a_spine << @epub.metadata_opf.spine_close @per.opf << @epub.metadata_opf.guide_open << md_opf_a_guide << @epub.metadata_opf.guide_close @per.opf << @epub.metadata_opf.package_close @per.opf=@per.opf.flatten SiSU_XHTML_EPUB2::Source::Output.new(@md,@per.opf).epub_metadata_opf SiSU_XHTML_EPUB2::Source::Output.new(@md,@per.ncx).epub_toc_ncx @md.firstseg=@@firstseg @per ensure SiSU_XHTML_EPUB2_Persist::Persist.new.persist_init end end
Protected Instance Methods
level_0()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 448 def level_0 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip link=dob.ocn title=linkname toc={} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev1 title=if dob.ocn ==0 then linkname else @per.scr << '<br />' link=(dob.ln) \ ? dob.ln : '' %{<b><a href="##{link}">#{linkname}</a></b>} end txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev1 toc end
level_1()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 470 def level_1 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip link=dob.ocn title=if dob.obj !~/Document Information/ linkname else link='metadata' %{<b><a href="#{link}#{Sfx[:epub_xhtml]}">#{linkname}</a></b>} end toc={} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:seg]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ #check format_toc.lev0 else format_toc.lev1 end title=if dob.ocn ==0 if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ %{<a href="#docinfo">#{linkname}</a>} else linkname end else @per.scr << '<br />' link=(dob.ln) \ ? dob.ln : '' %{<b><a href="##{link}">#{linkname}</a></b>} end txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ format_toc.lev0 else format_toc.lev1 end toc end
level_2()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 510 def level_2 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn if ocn \ and ocn !~/#/ p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) end txt_obj={ txt: linkname } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev2 if p_num title=%{#{p_num.goto}#{linkname}</a>} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev2 end toc end
level_3()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 530 def level_3 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn if ocn \ and ocn !~/#/ p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) end txt_obj={ txt: linkname } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev3 if p_num title=%{#{p_num.goto}#{linkname}</a>} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev3 end toc end
level_4()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 550 def level_4 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) if ocn if dob.ln==4 seg_link=%{ <a href="#{dob.name}#{Sfx[:epub_xhtml]}"> #{dob.obj} </a> } @@seg_url=dob.name elsif dob.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/ seg_link=dob.obj.gsub(/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/, %{<a href="\\1#{Sfx[:epub_xhtml]}">} + %{\\1 \\2</a> }) end p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) if ocn txt_obj={ txt: seg_link } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev4 title=%{#{p_num.goto}#{linkname}</a>} if p_num txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev4 toc end
level_5()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 576 def level_5 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn toc={} if ocn \ and ocn !~/#/ p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) lnk_n_txt=%{ <a href="#{@@seg_url}#{Sfx[:epub_xhtml]}#o#{ocn}"> #{linkname} </a>} txt_obj={ txt: lnk_n_txt } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev5 title=%{#{p_num.goto}#{linkname}</a>} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev5 end toc end
level_6()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 597 def level_6 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn toc={} if ocn \ and ocn !~/#/ p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) lnk_n_txt=%{ <a href="#{@@seg_url}#{Sfx[:epub_xhtml]}#o#{ocn}"> #{linkname} </a>} txt_obj={ txt: lnk_n_txt } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev6 title=%{#{p_num.goto}#{linkname}</a>} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev6 end toc end
level_7()
click to toggle source
# File lib/sisu/xhtml_epub2.rb, line 618 def level_7 dob=@data linkname=dob.obj.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'').strip ocn=dob.ocn toc={} if ocn \ and ocn !~/#/ p_num=SiSU_XHTML_EPUB2_Format::ParagraphNumber.new(@md,ocn) lnk_n_txt=%{ <a href="#{@@seg_url}#{Sfx[:epub_xhtml]}#o#{ocn}"> #{linkname} </a>} txt_obj={ txt: lnk_n_txt } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev7 title=%{#{p_num.goto}#{linkname}</a>} txt_obj={ txt: title } format_toc=SiSU_XHTML_EPUB2_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev7 end toc end