aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/develop/xhtml_epub2.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/develop/xhtml_epub2.rb')
-rw-r--r--lib/sisu/develop/xhtml_epub2.rb890
1 files changed, 0 insertions, 890 deletions
diff --git a/lib/sisu/develop/xhtml_epub2.rb b/lib/sisu/develop/xhtml_epub2.rb
deleted file mode 100644
index 0c4e6245..00000000
--- a/lib/sisu/develop/xhtml_epub2.rb
+++ /dev/null
@@ -1,890 +0,0 @@
-# encoding: utf-8
-=begin
-
-* Name: SiSU
-
-** Description: documents, structuring, processing, publishing, search
-*** epub generation, processing
-
-** Author: Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
-** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
- All Rights Reserved.
-
-** License: GPL 3 or later:
-
- SiSU, a framework for document structuring, publishing and search
-
- Copyright (C) Ralph Amissah
-
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
- You should have received a copy of the GNU General Public License along with
- this program. If not, see <http://www.gnu.org/licenses/>.
-
- If you have Internet connection, the latest version of the GPL should be
- available at these locations:
- <http://www.fsf.org/licensing/licenses/gpl.html>
- <http://www.gnu.org/licenses/gpl.html>
-
- <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
-
-** SiSU uses:
- * Standard SiSU markup syntax,
- * Standard SiSU meta-markup syntax, and the
- * Standard SiSU object citation numbering and system
-
-** Hompages:
- <http://www.jus.uio.no/sisu>
- <http://www.sisudoc.org>
-
-** Git
- <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/xhtml_epub2.rb;hb=HEAD>
-
-=end
-module SiSU_XHTML_EPUB2
- begin
- require 'pstore'
- rescue LoadError
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
- error('pstore NOT FOUND (LoadError)')
- end
- require_relative 'se_hub_particulars' # se_hub_particulars.rb
- include SiSU_Particulars
- require_relative 'xml_shared' # xml_shared.rb
- include SiSU_XML_Munge
- require_relative 'xhtml_table' # xhtml_table.rb
- require_relative 'xhtml_epub2_format' # xhtml_epub2_format.rb
- include SiSU_XHTML_EPUB2_Format
- require_relative 'xhtml_epub2_segments' # xhtml_epub2_segments.rb
- include SiSU_XHTML_EPUB2_Seg
- require_relative 'xhtml_epub2_tune' # xhtml_epub2_tune.rb
- include SiSU_XHTML_EPUB2_Tune
- require_relative 'xhtml_epub2_concordance' # xhtml_epub2_concordance.rb
- require_relative 'xhtml_epub2_persist' # xhtml_epub2_persist.rb
- class Source
- def initialize(opt)
- @opt=opt
- @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
- end
- def read
- begin
- songsheet
- ensure
- Dir.chdir(@opt.f_pth[:pth])
- end
- end
- def songsheet
- begin
- @md=@particulars.md
- @fnb=@md.fnb
- @env=@particulars.env
- unless @opt.act[:quiet][:set]==:on
- tool=(@opt.act[:verbose][:set]==:on \
- || @opt.act[:verbose_plus][:set]==:on \
- || @opt.act[:maintenance][:set]==:on) \
- ? "#{@env.program.epub_viewer} #{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}"
- : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}"
- (@opt.act[:verbose][:set]==:on \
- || @opt.act[:verbose_plus][:set]==:on \
- || @opt.act[:maintenance][:set]==:on) \
- ? SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- 'EPUB',
- tool
- ).green_hi_blue
- : SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- 'EPUB',
- tool
- ).green_title_hi
- if (@opt.act[:verbose_plus][:set]==:on \
- || @opt.act[:maintenance][:set]==:on)
- SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- @opt.fns,
- "#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}"
- ).flow
- end
- end
- @env.processing_path.epub_bld #(@md)
- @env.processing_path.epub_cp_images(@md)
- data=nil
- SiSU_Env::FileOp.new(@md).mkdir.output.epub
- @tuned_file_array=SiSU_XHTML_EPUB2::Source::XHTML_Environment.new(@particulars).tuned_file_instructions
- data=@tuned_file_array
- per=SiSU_XHTML_EPUB2::Source::Toc.new(@md,data).songsheet
- data=@tuned_file_array
- SiSU_XHTML_EPUB2::Source::ScrollHeadAndSegToc.new(@md,per).in_common #watch
- SiSU_XHTML_EPUB2::Source::Seg.new(@md,data).songsheet
- SiSU_XHTML_EPUB2::Source::Output.new(@md).songsheet
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- unless (@opt.act[:verbose_plus][:set]==:on \
- || @opt.act[:maintenance][:set]==:on)
- texfiles=Dir["#{@env.processing_path.tune}/#{@opt.fns}*"]
- texfiles.each do |f|
- if FileTest.file?(f)
- File.unlink(f)
- end
- end
- end
- SiSU_Env::Clear.new(@opt.selections.str,@opt.fns).param_instantiate
- @@flag,@@scr,@@seg,@@seg_endnotes,@@seg_subtoc={},{},{},{},{}
- @@tracker=0
- @@seg_name,@@seg_name_html,@@seg_subtoc_array,@@seg_endnotes_array,@@tablefoot=Array.new(5){[]}
- @@filename_seg,@@seg_url,@@to_lev4,@@get_hash_to,@@get_hash_fn='','','','',''
- end
- end
- private
- class XHTML_Environment
- def initialize(particulars)
- @particulars=particulars
- @md,@env=particulars.md,particulars.env
- @env,@css=particulars.env,SiSU_Style::CSS.new
- end
- def directories
- SiSU_Env::FileOp.new(@md).mkdir.output.epub
- end
- def tuned_file_instructions
- @tell=SiSU_Screen::Ansi.new(@md.opt.act[:color_state][:set])
- directories
- ao_array=@particulars.ao_array # ao file drawn here
- @tuned_file_array=SiSU_XHTML_EPUB2_Tune::Tune.new(ao_array,@md).songsheet
- @tuned_file_array
- end
- end
- class Endnotes
- include SiSU_XHTML_EPUB2_Format
- def initialize(md,data)
- @md,@data=md,data
- end
- def scroll
- @scr_endnotes=[]
- @data.each do |dob|
- pg=dob.dup
- unless pg.is ==:code
- if pg.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[\d*+]+ /
- endnote_array=[]
- if pg.obj=~/#{Mx[:en_a_o]}[\d*+].+?#{Mx[:en_a_c]}/m
- endnote_array = pg.obj.scan(/#{Mx[:en_a_o]}[\d*+]+(.+?)#{Mx[:en_a_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d*]+\s.+?#{Mx[:en_b_c]}/m
- endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d*]+(.+?)#{Mx[:en_b_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d+]+\s.+?#{Mx[:en_b_c]}/m
- endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d+]+(.+?)#{Mx[:en_b_c]}/m)
- end
- endnote_array.flatten.each do |note|
- txt_obj={ txt: note }
- format_scroll=SiSU_XHTML_EPUB2_Format::FormatScroll.new(@md,txt_obj)
- @scr_endnotes << format_scroll.endnote_body
- end
- end
- end
- end
- @scr_endnotes
- end
- end
- class Toc
- @@seg_url=''
- @@firstseg=nil
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- end
- class ScrollHeadAndSegToc < Toc
- def initialize(md='',per='',links_guide_toc='')
- @md,@per,@links_guide_toc=md,per,links_guide_toc
- end
- def in_common
- toc_shared=[]
- segtoc=[]
- 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],
- 'Scroll & Segtoc'
- ).txt_grey
- end
- format_head_toc=SiSU_XHTML_EPUB2_Format::HeadToc.new(@md)
- dochead=format_head_toc.head
- dochead=dochead.gsub(/toc\.(html)/,'doc.\1') #kludge
- toc_shared << dochead #<< ads.div.major
- segtoc << format_head_toc.head #<< ads.div.major
- if defined? @md.rights.all \
- and @md.rights.all
- rights=format_head_toc.rights.all
- rights=SiSU_XHTML_EPUB2_Tune::CleanXHTML.new(rights).clean
- end
- if defined? @md.notes.prefix_b \
- and @md.notes.prefix_b
- prefix_b=format_head_toc.prefix_b
- prefix_b=SiSU_XHTML_EPUB2_Tune::CleanXHTML.new(prefix_b).clean
- end
- tmp_head=nil
- doc_title_endnote=@md.title.full.gsub(/(\*+)/,'<sup><a href="#endnotes">\1</a></sup>')
- tmp_head=doc_title_endnote + "\n"
- txt_obj={ txt: tmp_head }
- format_txt_obj=SiSU_XHTML_EPUB2_Format::FormatTextObject.new(@md,txt_obj)
- toc_shared << format_txt_obj.center_bold
- segtoc << format_txt_obj.center_bold
- if defined? @md.creator.author \
- and @md.creator.author
- creator_endnote=@md.creator.author.gsub(/(\*+)/,%{#{$ep[:hsp]}<sup><a href="#notes">\\1</a></sup>})
- tmp_head=creator_endnote + "\n"
- txt_obj={ txt: tmp_head }
- format_txt_obj=SiSU_XHTML_EPUB2_Format::FormatTextObject.new(@md,txt_obj)
- toc_shared << format_txt_obj.center_bold
- segtoc << format_txt_obj.center_bold
- end
- tmp_head=nil
- if defined? @md.prefix_a \
- and @md.prefix_a
- tmp_head ||= %{#{@md.prefix_a}\n}
- toc_shared << tmp_head.dup
- segtoc << tmp_head.dup
- end
- tmp_head=nil
- toc_shared << @links_guide_toc
- if defined? @md.rights.all \
- and @md.rights.all
- toc_shared << rights
- end
- if defined? @md.prefix_b \
- and @md.prefix_b
- toc_shared << prefix_b
- end
- #Table of Contents added/appended here
- toc_shared << @per.scr
- segtoc << @links_guide_toc
- segtoc << @per.seg
- if defined? @md.rights.all \
- and @md.rights.all
- segtoc << rights
- end
- if defined? @md.prefix_b \
- and @md.prefix_b
- segtoc << prefix_b
- end
- #Segtoc tail added here
- segtoc << format_head_toc.xhtml_close
- segtoc=segtoc.flatten.compact #watch
- SiSU_XHTML_EPUB2::Source::Output.new(@md).make_cover_image
- SiSU_XHTML_EPUB2::Source::Output.new(@md,segtoc).make_segtoc
- segtoc=[]
- @per.scr,@per.seg=[],[]
- toc_shared
- end
- end
- class Table < SiSU_XHTML_Table::TableXHTML
- end
- class Seg < SiSU_XHTML_EPUB2_Seg::Seg
- end
- class Output
- def initialize(md,output='')
- @md,@output=md,output
- @epub_doc="#{@md.fnb}.epub"
- @epub_header=SiSU_XHTML_EPUB2_Format::HeadInformation.new(@md)
- @make=SiSU_Env::ProcessingSettings.new(@md)
- @make_file=SiSU_Env::CreateFile.new(@md.fns)
- end
- def songsheet
- mimetype
- metainf_container
- css
- images if @md.ec[:image]
- #concordance #uncomment to enable inclusion of concordance file
- output_zip
- end
- def mimetype
- out=@make_file.epub.mimetype
- out<<@epub_header.mimetype
- out.close
- end
- def metainf_container #container.xml file in META-INF directory
- out=@make_file.epub.metainf_cont
- out<<@epub_header.metainf_container
- out.close
- end
- def css
- out=@make_file.epub.xhtml_css
- out << SiSU_XHTML_EPUB2_Format::CSS.new.css_epub_xhtml
- out.close
- end
- def epub_toc_ncx
- begin
- out=@make_file.epub.toc_ncx
- @output.each do |para|
- unless para =~/\A\s*\Z/
- out.puts para
- end
- end
- out.close
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def epub_metadata_opf
- begin
- out=@make_file.epub.metadata
- @output.each do |para|
- unless para =~/\A\s*\Z/
- out.puts para
- end
- end
- out.close
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def images
- img_pth=@md.env.path.image_source_include
- img_src_pth=unless @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/
- @md.file.output_path.epub.rel_image
- else
- pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1]
- pt + '/image'
- end
- @md.ec[:image].each do |x|
- if FileTest.directory?("#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") \
- && FileTest.file?("#{img_src_pth}/#{x}")
- FileUtils::cp("#{img_src_pth}/#{x}","#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image")
- elsif FileTest.directory?("#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") \
- && FileTest.file?("#{img_pth}/#{x}")
- FileUtils::cp("#{img_pth}/#{x}","#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image")
- else STDERR.puts %{\t*WARN* did not find image - "#{x}" in #{img_src_pth} or #{img_pth} [#{__FILE__}:#{__LINE__}]}
- end
- end
- end
- def concordance
- SiSU_XHTML_EPUB2_Concordance::Source.new(@md.opt).read
- end
- def output_zip
- FileUtils::mkdir_p(@md.file.output_path.epub.dir) unless FileTest.directory?(@md.file.output_path.epub.dir)
- if FileTest.directory?(@md.env.processing_path.epub) \
- and SiSU_Env::SystemCall.new.zip
- pwd=Dir.pwd
- Dir.chdir(@md.env.processing_path.epub)
- system("
- zip -qXr9D #{@epub_doc} *
- ")
- FileUtils::mv(@epub_doc, @md.file.place_file.epub.dir)
- Dir.chdir(pwd)
- unless @md.opt.act[:maintenance][:set]==:on
- FileUtils::rm_r(@md.env.processing_path.epub)
- end
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark('*EXITED epub* zip program not found') unless SiSU_Env::SystemCall.new.zip
- end
- end
- def make_cover_image
- begin
- if @md.make.cover_image? \
- and @md.make.cover_image.is_a?(Hash) \
- and @md.make.cover_image[:cover] =~/\S+/
- filename_xhtml=@make_file.epub.xhtml_cover_image
- cover_image=<<WOK
-<?xml version='1.0' encoding='utf-8'?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>Cover</title>
- <meta http-equiv="Content-Type" content='text/html; charset=utf-8' />
- <link rel="stylesheet" href="css/xhtml.css" type="text/css" />
- <style type="text/css"> img { max-width: 100%; } </style>
- </head>
- <body xml:lang="en">
- <div class="svg_outer">
- <div class="svg_inner">
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 #{@md.make.cover_image[:w]} #{@md.make.cover_image[:h]}" preserveAspectRatio="xMidYMid meet">
- <image width="#{@md.make.cover_image[:w]}" height="#{@md.make.cover_image[:h]}" xl:href="image/#{@md.make.cover_image[:cover]}" />
- </svg>
- </div>
- </div>
- </body>
-</html>
-WOK
- filename_xhtml.puts cover_image,"\n"
- filename_xhtml.close
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def make_segtoc
- begin
- if @make.build.toc?
- filename_xhtml=@make_file.epub.xhtml_index
- @output.each do |para|
- para=para.strip
- unless para =~/\A\s*\Z/
- filename_xhtml.puts para,"\n"
- end
- end
- filename_xhtml.close
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
- end
-end
-__END__