diff options
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v5 | 1 | ||||
| -rw-r--r-- | lib/sisu/v5/constants.rb | 1 | ||||
| -rw-r--r-- | lib/sisu/v5/hub.rb | 5 | ||||
| -rw-r--r-- | lib/sisu/v5/manifest.rb | 7 | ||||
| -rw-r--r-- | lib/sisu/v5/options.rb | 6 | ||||
| -rw-r--r-- | lib/sisu/v5/sysenv.rb | 99 | ||||
| -rw-r--r-- | lib/sisu/v5/urls.rb | 8 | ||||
| -rw-r--r-- | lib/sisu/v5/xml_fictionbook2.rb | 366 | ||||
| -rw-r--r-- | lib/sisu/v5/xml_shared.rb | 8 | 
9 files changed, 497 insertions, 4 deletions
| diff --git a/data/doc/sisu/CHANGELOG_v5 b/data/doc/sisu/CHANGELOG_v5 index 742a6e70..7a09c091 100644 --- a/data/doc/sisu/CHANGELOG_v5 +++ b/data/doc/sisu/CHANGELOG_v5 @@ -60,6 +60,7 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_5.1.0.orig.tar.xz      * rst    * xml      * docbook, book +    * fictionbook  * sisu.gemspec diff --git a/lib/sisu/v5/constants.rb b/lib/sisu/v5/constants.rb index 1f96f0aa..da9858f2 100644 --- a/lib/sisu/v5/constants.rb +++ b/lib/sisu/v5/constants.rb @@ -79,6 +79,7 @@ Sfx={    xml_docbook:               '.docbook.xml',    xml_docbook_article:       '.article.docbook.xml',    xml_docbook_book:          '.book.docbook.xml', +  xml_fictionbook:           '.fb2',    epub:                      '.epub',    epub_xhtml:                '.xhtml',    odt:                       '.odt', diff --git a/lib/sisu/v5/hub.rb b/lib/sisu/v5/hub.rb index 08147d96..f09bd832 100644 --- a/lib/sisu/v5/hub.rb +++ b/lib/sisu/v5/hub.rb @@ -359,6 +359,10 @@ module SiSU            require_relative 'xml_docbook5'              # xml_docbook5.rb            SiSU_XML_Docbook_Book::Source.new(@opt).read          end +        if @opt.act[:xml_fictionbook][:set]==:on       #% --xml-fictionbook +          require_relative 'xml_fictionbook2'          # xml_fictionbook2.rb +          SiSU_XML_Fictionbook::Source.new(@opt).read +        end          if @opt.act[:xml_sax][:set]==:on               #% --xml-sax, -x xml sax type            require_relative 'xml_sax'                   #  xml_sax.rb            SiSU_XML_SAX::Source.new(@opt).read @@ -673,6 +677,7 @@ module SiSU          || @opt.act[:xml_scaffold_structure_sisu][:set]==:on \          || @opt.act[:xml_scaffold_structure_collapse][:set]==:on \          || @opt.act[:xml_docbook_book][:set]==:on \ +        || @opt.act[:xml_fictionbook][:set]==:on \          || @opt.act[:pdf][:set]==:on \          || @opt.act[:pdf_p][:set]==:on \          || @opt.act[:pdf_l][:set]==:on \ diff --git a/lib/sisu/v5/manifest.rb b/lib/sisu/v5/manifest.rb index 42755151..fb3064e7 100644 --- a/lib/sisu/v5/manifest.rb +++ b/lib/sisu/v5/manifest.rb @@ -410,6 +410,13 @@ module SiSU_Manifest            id,file='XML Docbook Book',@f.base_filename.xml_docbook_book            summarize(id,file,pth,rel,url)          end +        if FileTest.file?(@f.place_file.xml_fictionbook.dir)==true +          pth=@f.output_path.xml_fictionbook.dir +          rel=@f.output_path.xml_fictionbook.rel_sm +          url=@f.output_path.xml_fictionbook.url +          id,file='XML Fictionbook',@f.base_filename.xml_fictionbook +          summarize(id,file,pth,rel,url) +        end          if FileTest.file?(@f.place_file.xml_scaffold_structure_sisu.dir)==true            pth=@f.output_path.xml_scaffold_structure_sisu.dir            rel=@f.output_path.xml_scaffold_structure_sisu.rel_sm diff --git a/lib/sisu/v5/options.rb b/lib/sisu/v5/options.rb index 1e11b711..f410e61f 100644 --- a/lib/sisu/v5/options.rb +++ b/lib/sisu/v5/options.rb @@ -864,6 +864,10 @@ module SiSU_Commandline          act[:xml_docbook_book]=mod.inspect =~/"--docbook"|"--docbook-book"|"--xml-docbook"|"--xml-docbook_book"/ \          ? { bool: true, set: :on }          : { bool: false, set: :na } +        act[:xml_fictionbook]=(cmd =~/f/ \ +        || mod.inspect =~/"--fictionbook"|"--xml-fictionbook"/) \ +        ? { bool: true, set: :on } +        : { bool: false, set: :na }          act[:xml_scaffold_structure_sisu]=mod.inspect =~/"--xml-scaffold"|"--xml-scaffold-sisu"/ \          ? { bool: true, set: :on }          : { bool: false, set: :na } @@ -1002,6 +1006,7 @@ module SiSU_Commandline          || act[:xml_dom][:set]==:on \          || act[:xml_sax][:set]==:on \          || act[:xml_docbook_book][:set]==:on \ +        || act[:xml_fictionbook][:set]==:on \          || act[:xml_scaffold_structure_sisu][:set]==:on \          || act[:xml_scaffold_structure_collapse][:set]==:on )            { bool: true, set: :on } @@ -1051,6 +1056,7 @@ module SiSU_Commandline          || act[:xml_dom][:set]==:on \          || act[:xml_sax][:set]==:on \          || act[:xml_docbook_book][:set]==:on \ +        || act[:xml_fictionbook][:set]==:on \          || act[:xml_scaffold_structure_sisu][:set]==:on \          || act[:xml_scaffold_structure_collapse][:set]==:on )            { bool: true, set: :on } diff --git a/lib/sisu/v5/sysenv.rb b/lib/sisu/v5/sysenv.rb index f25cd027..1f5d7d3a 100644 --- a/lib/sisu/v5/sysenv.rb +++ b/lib/sisu/v5/sysenv.rb @@ -1484,6 +1484,12 @@ module SiSU_Env        ? @rc['xml_docbook']['ocn']        : true      end +    def xml_fictionbook_ocn? +      ((defined? @rc['xml_fictionbook']['ocn']) \ +      && @rc['xml_fictionbook']['ocn']==false) \ +      ? @rc['xml_fictionbook']['ocn'] +      : true +    end      def xml_scaffold_ocn?        ((defined? @rc['xml_scaffold']['ocn']) \        && @rc['xml_scaffold']['ocn']==false) \ @@ -2772,6 +2778,12 @@ WOK          ? @rc['program_select']['xml_viewer']          : text_editor        end +      def fictionbook_viewer +        ((defined? @rc['program_select']['xml_viewer']) \ +        && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ +        ? @rc['program_select']['xml_viewer'] +        : text_editor +      end        def xml_editor          xml_viewer        end @@ -3076,6 +3088,9 @@ WOK            if @md.opt.act[:xml_docbook_book][:set]==:on     #% --xml-docbook-book              ft << @md.fn[:xml_docbook_book]            end +          if @md.opt.act[:xml_fictionbook][:set]==:on      #% --xml-fictionbook +            ft << @md.fn[:xml_fictionbook] +          end            if @md.opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu              ft << @md.fn[:xml_scaffold_structure_sisu]            end @@ -3141,6 +3156,9 @@ WOK            if @opt.act[:xml_docbook_book][:set]==:on        #% --xml-docbook-book              ft << 'docbook.xml' << '??.docbook.xml' << 'docbook.??.xml'            end +          if @opt.act[:xml_fictionbook][:set]==:on         #% --xml-fictionbook +            ft << 'fictionbook.xml' << '??.fictionbook.xml' << 'fictionbook.??.xml' +          end            if @opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu              ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml'            end @@ -4511,6 +4529,12 @@ WOK          fn=base_filename.xml_docbook_book          make_file(path,fn)        end +      def xml_fictionbook +        path=output_path.xml_fictionbook.dir +        make_path(path) +        fn=base_filename.xml_fictionbook +        make_file(path,fn) +      end        def xml_scaffold_structure_sisu          path=output_path.xml_scaffold_structure_sisu.dir          make_path(path) @@ -4730,6 +4754,15 @@ WOK          end          self        end +      def xml_fictionbook +        def dir +          output_path.xml_fictionbook.dir + '/' + base_filename.xml_fictionbook +        end +        def rel +          output_path.xml_fictionbook.rel + '/' + base_filename.xml_fictionbook +        end +        self +      end        def xml_scaffold_structure_sisu          def dir            output_path.xml.dir + '/' + base_filename.xml_scaffold_structure_sisu @@ -5183,6 +5216,24 @@ WOK          end          i18n(fnh)        end +      def xml_fictionbook(fh=nil) +        fh=default_hash_build(fh,Sfx[:xml_fictionbook]) +        fh[:lng]=lang_code?(fh[:lng]) +        fnh=if output_dir_structure.by_filename? +          { +            fn: 'scroll', +            ft: fh[:ft], +            lng: fh[:lng], +          } +        else +          { +            fn: fh[:fn], +            ft: fh[:ft], +            lng: fh[:lng], +          } +        end +        i18n(fnh) +      end        def xml_scaffold_structure_sisu(fh=nil)          fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_sisu])          fh[:lng]=lang_code?(fh[:lng]) @@ -6098,6 +6149,30 @@ WOK          end          self        end +      def xml_docbook_article +        def ft +         'docbook' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end        def xml_docbook_book          def ft           'docbook_CONSTRUCTION_ZONE' @@ -6122,6 +6197,30 @@ WOK          end          self        end +      def xml_fictionbook +        def ft +         'fictionbook_CONSTRUCTION_ZONE' +        end +        def dir +          set_path(ft).dir.abc +        end +        def url +          set_path(ft).url.abc +        end +        def rel +          set_path(ft).rel.abc +        end +        def rcp +          set_path(ft).rcp.abc +        end +        def rel_sm +          set_path(ft).rel_sm.ab +        end +        def rel_image +          '../../_sisu/image' +        end +        self +      end        def xml_scaffold_structure_sisu          def ft           'sisu.scaffold.xml' diff --git a/lib/sisu/v5/urls.rb b/lib/sisu/v5/urls.rb index bdd66a59..ce3be66b 100644 --- a/lib/sisu/v5/urls.rb +++ b/lib/sisu/v5/urls.rb @@ -119,6 +119,7 @@ module SiSU_Urls          '  --markdown (markdown txt)'=>@fn[:txt_markdown],          '  --rst (rST restructured-text)'=>@fn[:txt_rst],          '  --docbook-book (DocBook Book)'=>@fn[:xml_docbook_book], +        '  --fictionbook (Fictionbook)'=>@fn[:xml_fictionbook],          'x --xml-sax (XML sax type)'=>@fn[:sax],          'X --xml-dom (XML dom type)'=>@fn[:dom],          '  --xml-scaffold-sisu (XML scaffold)'=>@fn[:xml_scaffold_structure_sisu], @@ -231,6 +232,9 @@ module SiSU_Urls          def docbook_book(x)            SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_docbook_book.dir}/#{@md.file.base_filename.xml_docbook_book}").result          end +        def fictionbook(x) +          SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}").result +        end          def scaffold_structure_sisu(x)            SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_scaffold_structure_sisu.dir}/#{@md.file.base_filename.xml_scaffold_structure_sisu}").result          end @@ -446,6 +450,10 @@ module SiSU_Urls                and @opt.act[:xml_docbook_book][:set]==:on                  show.xml.docbook_book(x)                end +              if x=~/--fictionbook\b/ \ +              and @opt.act[:xml_fictionbook][:set]==:on +                show.xml.fictionbook(x) +              end                if x=~/--xml-scaffold-sisu\b/ \                and @opt.act[:xml_scaffold_structure_sisu][:set]==:on                  show.xml.scaffold_structure_sisu(x) diff --git a/lib/sisu/v5/xml_fictionbook2.rb b/lib/sisu/v5/xml_fictionbook2.rb new file mode 100644 index 00000000..8ee2fb89 --- /dev/null +++ b/lib/sisu/v5/xml_fictionbook2.rb @@ -0,0 +1,366 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +   2007, 2008, 2009, 2010, 2011, 2012, 2013 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> + + * Download: +   <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Git +   <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +   <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/xml_fictionbook.rb;hb=HEAD> + + * Ralph Amissah +   <ralph@amissah.com> +   <ralph.amissah@gmail.com> + + ** Description: Fictionbook XML rendition + +=end +module SiSU_XML_Fictionbook +  require_relative 'particulars'                        # particulars.rb +    include SiSU_Particulars +  require_relative 'ao'                                 # ao.rb +  require_relative 'sysenv'                             # sysenv.rb +    include SiSU_Env +  require_relative 'txt_shared'                         # txt_shared.rb +    include SiSU_TextUtils +  require_relative 'xml_shared'                         # xml_shared.rb +    include SiSU_XML_Munge +  class Source +    def initialize(opt) +      @opt=opt +      @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) +    end +    def read +      begin +        @md,@ao_array=@particulars.md,@particulars.ao_array +        @env=@particulars.env +        report +        SiSU_XML_Fictionbook::Source::Scroll.new(@ao_array,@md).songsheet +      rescue +        SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do +          __LINE__.to_s + ':' + __FILE__ +        end +      ensure +      end +    end +    private +    def report +      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.fictionbook_viewer} #{@md.file.output_path.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}" +        : "[#{@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],'Fictionbook',tool).green_hi_blue +        : SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Fictionbook',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.xml_fictionbook.dir}/#{@md.file.base_filename.xml_fictionbook}").flow +        end +      end +    end +    class Scroll <Source +      def initialize(data='',md='') +        @data,@md=data,md +        @trans=SiSU_XML_Munge::Trans.new(@md) +        @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(md.opt) +        @env=@particulars.env +      end +      def songsheet +        @t='sisu' +        data=@data +        if @md.opt.act[:verbose_plus][:set]==:on +          structure_collapsed(data) +        end +        head +        endnotes=extract_endnotes +        images_base64=extract_images +        data=markup_text(data) +        structure_build_collapsed(data,endnotes,images_base64) +      end +      def space +        '  ' +      end +      def tags +        # collapsed --> +        def collapsed +          %w[ 0 1 2 3 4 5 6 ] +        end +        def fictionbook +          [ 'section', +            'section', +            'section', +            'section', +            'section', +            'section', +            'section' +          ] +        end +        self +      end +      def put(line) +        puts line if @md.opt.act[:verbose_plus][:set]==:on +      end +      def head +        version=SiSU_Env::InfoVersion.instance.get_version +        rb_ver=SiSU_Env::InfoVersion.instance.rbversion +        date_available=if defined? @md.date.available; "\n     <p>#{@md.date.available} Initial version</p>" +        else '' +        end +        date_modified=if defined? @md.date.modified; "\n      <p>#{@md.date.modified} Last Modified</p>" +        else '' +        end +        coverpageimage=if defined? @md.make.cover_image[:cover] +          %{\n    <coverpage><image href="##{@md.make.cover_image[:cover]}" /></coverpage>} +        else '' +        end +        if defined? @md.authors \ +        and @md.authors.length > 0 +          authors=[] +          @md.authors.each do |author| +            authors << '    <author>' +            if not author[:others].empty? +              authors << %{      <first-name>#{author[:others]}</first-name>} +            end +            if not author[:the].empty? +              authors << %{      <last-name>#{author[:the]}</last-name>} +            end +            authors << '    </author>' +          end +          authors=authors.join("\n") +        end +        <<-WOK +<?xml version="1.0" encoding="UTF-8"?> +<FictionBook xmlns:xl="http://www.w3.org/1999/xlink" + xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"> +<description> +  <title-info> +    <genre match="100">***</genre> +#{authors} +    <book-title>#{@md.title.full}</book-title>#{coverpageimage} +    <annotation> +    </annotation> +    <date value="#{@md.date.published}">#{@md.date.published}</date> +  </title-info> +     <document-info> +    <author> +      <first-name/> +      <last-name/> +      <nickname/> +    </author> +    <program-used>#{version[:project]} #{version[:version]} and #{rb_ver}</program-used> +    <date value="#{version[:date]}">#{version[:date]}</date> +    <src-url>#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}</src-url> +    <id></id> +    <version>1.0</version> +    <history>#{date_available}#{date_modified} +    </history> +  </document-info> +</description> +<body> +        WOK +      end +      def extract_endnotes                                #work on +        endnotes,endnotes_raw,endnotes_b=[],[],[] +        @data.each do |para| +          endnotes_raw << para.obj.scan(/#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m) +          endnotes_b << para.obj.scan(/#{Mx[:en_b_o]}(.+?)#{Mx[:en_b_c]}/m) +        end +        endnotes_raw.flatten.each do |en| +          en=@trans.markup_fictionbook(en) +          endnotes << en.gsub(/([\d+*]+)\s+(.+)/m, +            %{<section id="footnote\\1">\n +<title><p>\\1.</p></title>\n +<p>\\2</p>\n +</section>}) +        end +        endnotes_raw=[] +        endnotes +      end +      def extract_images                                #work on +        require "base64" +        images_raw,images_base64_fb2=[],[] +        images_base64={} +        if defined? @md.make.cover_image[:cover] +          images_raw << @md.make.cover_image[:cover] +        end +        @data.each do |para| +          images_raw << para.obj.scan(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m) +        end +        images_raw.flatten.sort.each do |img| +          imgpth=@env.url.images_local + '/' + img +          open(imgpth) +          if FileTest.file?(imgpth) +            images_base64[img]=Base64.encode64(File.read(imgpth)) +          end +        end +        images_raw=[] +        images_base64.each_key do |k| +          imgtype=case k +          when /\.jpg/ then 'jpeg' +          when /\.png/ then 'png' +          when /\.gif/ then 'gif' +          else              'jpeg' +          end +          images_base64_fb2 << %{<binary content-type="image/#{imgtype}" id="#{k}">#{images_base64[k]} +</binary> +} +        end +        images_base64_fb2.join("\n") +      end +      def markup_text(data) +        data.each_with_index do |o,i| +          if o.is ==:heading || o.is ==:para +            o.obj=@trans.markup_fictionbook(o.obj,o.is) #unless o.obj==nil +          end +        end +        data +      end +      def tail(images_base64_fb2) +        <<-WOK +</body> +#{images_base64_fb2} +</FictionBook> +        WOK +      end +      def output(o,lev=nil,comment='') +         puts lev == 0..6 \ +         ? "#{space*lev}<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}" +         : "<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}" +      end +      def structure_collapsed(data) +        puts "\ncollapsed structure, heading outline --->\n\n" +        data.each_with_index do |o,i| +          if  (o.is ==:heading || o.is ==:heading_insert) +            output(o,o.lc) +          end +        end +      end +      def endnotes_build(endnotes,filename_fictionbook) +        if endnotes.length > 0 +          filename_fictionbook.puts %{</body><body name="notes">} +          endnotes.each do |en| +            filename_fictionbook.puts SiSU_TextUtils::Wrap.new(en,80,6).line_wrap +          end +        end +      end +      def structure_build_collapsed(data,endnotes,images_base64) +        file=SiSU_Env::FileOp.new(@md) +        filename_fictionbook=file.write_file.xml_fictionbook +        h=0 +        doc_position=:head +        filename_fictionbook.puts head +        data.each_with_index do |o,i| +          ocn=(defined? o.ocn and not o.ocn.nil?) ? "\n#{Dx[:ocn_o]}#{o.ocn}#{Dx[:ocn_c]}" : '' +          if  o.is ==:heading +            lev=o.lc +            chlv=(o.lv.to_i == 1) \ +            ? @chlv=o.lc.to_i +            : 0 +            unless doc_position==:head +              filename_fictionbook.puts structure_build_tag_close(lev,h) +            end +            doc_position=:body_and_tail +            filename_fictionbook.puts %{#{space*lev}<#{tags.fictionbook[lev]}> +#{space*lev}<title> +} +            filename_fictionbook.puts SiSU_TextUtils::Wrap.new("<p>#{o.obj}#{ocn}</p>",80,(lev*2+2)).line_wrap +            filename_fictionbook.puts %{#{space*lev}</title>} +            h=lev +          elsif  o.is ==:heading_insert \ +          and o.obj =~/Endnotes/ \ +          and o.ln == 2 +            break +          elsif (o.of ==:para or o.of ==:block) +            filename_fictionbook.puts SiSU_TextUtils::Wrap.new("<p>#{o.obj}#{ocn}</p>",80,6).line_wrap +          end +        end +        filename_fictionbook.puts structure_build_tag_close(0,h) +        endnotes_build(endnotes,filename_fictionbook) +        filename_fictionbook.puts tail(images_base64) +        filename_fictionbook.close +      end +      def structure_build_tag_close(lev,h) +        x=[] +        case h +        when 1 +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        when 2 +          x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2) +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        when 3 +          x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3) +          x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2) +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        when 4 +          x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4) +          x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3) +          x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2) +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        when 5 +          x << "#{space*5}</#{tags.fictionbook[5]}>" if (lev <= 5) +          x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4) +          x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3) +          x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2) +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        when 6 +          x << "#{space*6}</#{tags.fictionbook[6]}>" if (lev <= 6) +          x << "#{space*5}</#{tags.fictionbook[5]}>" if (lev <= 5) +          x << "#{space*4}</#{tags.fictionbook[4]}>" if (lev <= 4) +          x << "#{space*3}</#{tags.fictionbook[3]}>" if (lev <= 3) +          x << "#{space*2}</#{tags.fictionbook[2]}>" if (lev <= 2) +          x << "#{space*1}</#{tags.fictionbook[1]}>" if (lev <= 1) +        end +        x.join("\n") +      end +    end +  end +end +__END__ diff --git a/lib/sisu/v5/xml_shared.rb b/lib/sisu/v5/xml_shared.rb index 688e34c3..a6092559 100644 --- a/lib/sisu/v5/xml_shared.rb +++ b/lib/sisu/v5/xml_shared.rb @@ -435,7 +435,7 @@ module SiSU_XML_Munge          gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;')      end      def markup_fictionbook(str='',is='') -      str=str.gsub(/#{Mx[:en_a_o]}([\d+*]+).+?#{Mx[:en_a_c]}/m,'<a xlink:href="#footnote\1" type="note">[\1]</a>'). +      str=str.gsub(/#{Mx[:en_a_o]}([\d+*]+).+?#{Mx[:en_a_c]}/m,'<a xl:href="#footnote\1" type="note">[\1]</a>').          gsub(/&/,'&'). #sort          gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;').          gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& '). #sort @@ -450,11 +450,11 @@ module SiSU_XML_Munge          gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>').          gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>').          gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd -        gsub(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m,'<image xlink:href="#\1" />'). +        gsub(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/m,'<image xl:href="#\1" />').          gsub(/#{Mx[:url_o]}(.+?)#{Mx[:url_c]}/,"#{Dx[:url_o]}\\1#{Dx[:url_c]}").          gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'<a name="\1"></a>'). -        gsub(/#{Mx[:gl_bullet]}/m,'●  '). -        gsub(/#{Mx[:nbsp]}/,' '). +        gsub(/#{Mx[:gl_bullet]}/m,'● '). #  not available +        gsub(/#{Mx[:nbsp]}/,' '). #  not available          gsub(/<(p|br)>/,'<\1 />')        clean(str)      end | 
