diff options
| -rw-r--r-- | CHANGELOG | 2 | ||||
| -rw-r--r-- | conf/sisu/version.yml | 4 | ||||
| -rw-r--r-- | lib/sisu/v0/concordance.rb | 22 | ||||
| -rw-r--r-- | lib/sisu/v0/constants.rb | 2 | ||||
| -rw-r--r-- | lib/sisu/v0/dal.rb | 56 | ||||
| -rw-r--r-- | lib/sisu/v0/dal_idx.rb | 157 | ||||
| -rw-r--r-- | lib/sisu/v0/dal_syntax.rb | 1 | ||||
| -rw-r--r-- | lib/sisu/v0/html.rb | 3 | ||||
| -rw-r--r-- | lib/sisu/v0/html_segments.rb | 86 | ||||
| -rw-r--r-- | lib/sisu/v0/odf.rb | 1 | ||||
| -rw-r--r-- | lib/sisu/v0/particulars.rb | 13 | ||||
| -rw-r--r-- | lib/sisu/v0/plaintext.rb | 1 | ||||
| -rw-r--r-- | lib/sisu/v0/shared_xml.rb | 4 | ||||
| -rw-r--r-- | lib/sisu/v0/sysenv.rb | 6 | ||||
| -rw-r--r-- | lib/sisu/v0/texpdf.rb | 1 | 
15 files changed, 214 insertions, 145 deletions
| @@ -9,7 +9,7 @@ Reverse Chronological:  %% STABLE MANIFEST -%% sisu_0.69.0.orig.tar.gz (2008-09-08:36/1) +%% sisu_0.69.0.orig.tar.gz (2008-09-10:36/3)  http://www.jus.uio.no/sisu/pkg/src/sisu_0.69.0.orig.tar.gz    sisu_0.69.0.orig.tar.gz    sisu_0.69.0-1.dsc diff --git a/conf/sisu/version.yml b/conf/sisu/version.yml index d3ddf9f7..913d5a5f 100644 --- a/conf/sisu/version.yml +++ b/conf/sisu/version.yml @@ -1,5 +1,5 @@  ---   :version: 0.69.0-beta -:date_stamp: 2008w35/7 -:date: "2008-09-07" +:date_stamp: 2008w36/3 +:date: "2008-09-10"  :project: SiSU diff --git a/lib/sisu/v0/concordance.rb b/lib/sisu/v0/concordance.rb index 485f3df5..fad91d14 100644 --- a/lib/sisu/v0/concordance.rb +++ b/lib/sisu/v0/concordance.rb @@ -121,8 +121,8 @@ WOK        end        def create          head_banner=SiSU_HTML_Format::Head_toc.new(@md) -minitoc=SiSU_HTML_minitoc::Toc_mini.new(@md,@data).songsheet -toc='<div class="toc">' + minitoc.to_s + '</div>' +        minitoc=SiSU_HTML_minitoc::Toc_mini.new(@md,@data).songsheet +        toc='<div class="toc">' + minitoc.to_s + '</div>'          <<WOK  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html> @@ -199,7 +199,8 @@ WOK            @rxp_t3=Regexp.new('^T3')            @rxp_excluded1=/(?:https?|file|ftp):\/\/\S+/            @rxp_excluded0=/^(?:#{Mx[:fa_bold_o]}|#{Mx[:fa_italics_o]})?(?:to\d+|\d+| |#{Mx[:br_endnotes]}|EOF|#{Mx[:br_eof]}|thumb_\S+|snap_\S+|_+|-+|[(]?(?:ii+|iv|vi+|ix|xi+|xiv|xv|xvi+|xix|xx)[).]?|\S+?_\S+|[\d_]+\w\S+|[\w\d]{1,2}|\d{1,3}\w?|#@dp|[0-9a-f]{16,64}|\d{2,3}x\d{2,3}|\S{0,2}sha\d|\S{0,3}\d{4}w\d\d|\b\w\d+|\d_all\b|e\.?g\.?)(?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})?$/mi #this regex causes and cures a stack dump in ruby 1.9 !!! -          @rgx_scanlist=%r{#{Mx[:fa_italics_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_italics_c]}|#{Mx[:fa_bold_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_bold_c]}|(?:https?|file)://\S+|#{Mx[:gr_o]}code#{Mx[:gr_o]}.+?#{Mx[:gr_o]}code-end#{Mx[:gr_o]}|<\S+?>|#{Mx[:id_o]}\S+?#{Mx[:id_c]}|\w+|[a-zA-Z]+}mi +          @rgx_splitlist=%r{[—.,;:-]|#{Mx[:id_o]}\S+?#{Mx[:id_c]}}mi +          @rgx_scanlist=%r{#{Mx[:fa_italics_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_italics_c]}|#{Mx[:fa_bold_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_bold_c]}|(?:https?|file)://\S+|#{Mx[:gr_o]}code#{Mx[:gr_o]}.+?#{Mx[:gr_o]}code-end#{Mx[:gr_o]}|<\S+?>|\w+|[a-zA-Z]+}mi          rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error          end        end @@ -223,13 +224,13 @@ WOK          @sfx='.html' #used for hardlinks, previous setting @sfx='', web server takes care of suffix          @word_location_seg=wordlocation.gsub(/(.+?)\#(\d+)/,"#{@md.fnl[:pre]}\\1#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}#\\2") unless wordlocation.nil?          case @wordlocation -          when @rxp_t1 -            %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } -          when @rxp_t2 -            %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } -          when @rxp_t3 -            %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } -          else %{<a href="#@word_location_seg">#@show</a>,  } +        when @rxp_t1 +          %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } +        when @rxp_t2 +          %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } +        when @rxp_t3 +          %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#@sfx#{@md.fnl[:post]}##@show">H</a>]#@show,  } +        else %{<a href="#@word_location_seg">#@show</a>,  }          end        end        def map_para @@ -243,6 +244,7 @@ WOK              end              if toy =~/\d+/ \              and toy !~/^0$/ +              line=line.split(@rgx_splitlist).join(' ') #%take in word or other match                for word in line.scan(@rgx_scanlist) #%take in word or other match                  #word.gsub!(@rxp_clean,'')                  word.gsub!(/#{Mx[:lnk_o]}|#{Mx[:lnk_c]}(?:http)?/,'') diff --git a/lib/sisu/v0/constants.rb b/lib/sisu/v0/constants.rb index 3f050df7..414732e1 100644 --- a/lib/sisu/v0/constants.rb +++ b/lib/sisu/v0/constants.rb @@ -91,7 +91,7 @@ Mx[:gl_bullet]=       "#{Mx[:gl_o]}●#{Mx[:gl_c]}"    Mx[:pa_non_object_dummy_heading]="#{Mx[:pa_o]}-##{Mx[:pa_c]}" #unnumbered paragraph, delete when not required [used in dummy headings, eg. for segmented html] (place marker at end of paragraph)    Mx[:pa_non_object_no_heading]="#{Mx[:pa_o]}~##{Mx[:pa_c]}" #unnumbered paragraph (place marker at end of paragraph)  Mx[:idx_o]='▢ ';                                         Mx[:idx_c]='▢ ' # -Mx[:nbsp]=            '▭ ' +Mx[:nbsp]=            '░' #'▭ '  Mx[:br_line]=         "#{Mx[:mk_o]}br#{Mx[:mk_c]}"  Mx[:br_paragraph]=    "#{Mx[:mk_o]}br#{Mx[:mk_c]}"  Mx[:br_nl]=           "#{Mx[:mk_o]}nl#{Mx[:mk_c]}" diff --git a/lib/sisu/v0/dal.rb b/lib/sisu/v0/dal.rb index a00d307b..c01c2d0a 100644 --- a/lib/sisu/v0/dal.rb +++ b/lib/sisu/v0/dal.rb @@ -87,13 +87,14 @@ module SiSU_DAL      end    end    class Source <Instantiate -    @@dal_array=[] +    @@dal_array,@@html_idx_array=[],[]      @@fns=nil      def initialize(opt)        @opt=opt        @@fns||@opt.fns        @my_make_fns=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns)        @fnm=@my_make_fns.marshal_meta +      @fnm_idx_html=@my_make_fns.marshal_meta_idx_html        SiSU_Env::Create_system_link.new.images        @env=SiSU_Env::Info_env.new      end @@ -123,6 +124,21 @@ module SiSU_DAL          Instantiate.new        end      end +    def get_idx_html                                                             #reads dal idx.html, #unless does not exist then creates first +      begin +        dal=[] +        unless @@fns==@opt.fns +          @@fns=@opt.fns +          @@html_idx_array=[] +        end +        dal=if @@html_idx_array.empty?; read_fnm_idx_html +        else @@html_idx_array.dup #check +        end +      rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error +      ensure +        Instantiate.new +      end +    end    protected      def create_dal        dal_array=[] @@ -154,32 +170,56 @@ module SiSU_DAL        else SiSU_DAL::Source.new(@opt).create_dal        end      end +    def read_fnm_idx_html +      dal=[] +      dal=if FileTest.file?(@fnm_idx_html) +        if RUBY_VERSION < '1.9' +          File.open(@fnm_idx_html){ |f| dal=Marshal.load(f)} +        else File.open(@fnm_idx_html,'r:utf-8'){ |f| dal=Marshal.load(f)} +        end +      else nil +        #SiSU_DAL::Source.new(@opt).create_dal +      end +#p dal; dal +    end    end    class Output      def initialize(md,data)        @md,@data=md,data        @my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) -      dir=SiSU_Env::Info_env.new(@md.fns) -      @hard="#{dir.path.dal}/#{@md.fns}.meta" +      @dir=SiSU_Env::Info_env.new(@md.fns)      end      def hard_output        if @md.cmd =~/M/          filename_meta=@my_make.file_meta          @data.each {|s| filename_meta.puts s.strip + "\n\n" unless s.strip.empty?} -      else File.unlink(@hard) if FileTest.file?(@hard) +      else +        hard="#{@dir.path.dal}/#{@md.fns}.meta" +        File.unlink(hard) if FileTest.file?(hard)        end      end      def marshal        marshal_meta=@my_make.marshal_meta        File.open(marshal_meta,'w'){|f| Marshal.dump(@data.to_a,f)}      end +    def idx_html_hard_output +      if @md.book_index and @md.cmd =~/M/ +        filename_meta=@my_make.file_meta_idx_html +        @data.each {|s| filename_meta.puts s.strip + "\n" unless s.strip.empty?} +      else +        hard_idx_html="#{@dir.path.dal}/#{@md.fns}.idx.html" +        File.unlink(hard_idx_html) if FileTest.file?(hard_idx_html) +      end +    end +    def idx_html_marshal +      marshal_meta=@my_make.marshal_meta_idx_html +      File.open(marshal_meta,'w'){|f| Marshal.dump(@data.to_a,f)} +    end    end    class Make -    #@@comment='%'      @@dp=nil      def initialize(md,data)        @md,@data=md,data -      #@@word_mode=[]        @env=SiSU_Env::Info_env.new(@md.fns)        @skin=SiSU_Env::Info_skin.new(@md)        @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern @@ -209,7 +249,7 @@ module SiSU_DAL        data=SiSU_images::Images.new(@md,data).images        data=SiSU_document_structure::Tables.new(@md,data).tables        data=SiSU_numbering::Numbering.new(@md,data).numbering_song -      data=SiSU_book_index::Book_index.new(@md,data,@env).indexing_song if @md.book_index +      data,book_index,html_idx=SiSU_book_index::Book_index.new(@md,data,@env).indexing_song if @md.book_index        data=SiSU_endnotes::Endnotes.new(@md,data,endnote_array).endnotes        data=SiSU_hash::Object_digest.new(@md,data,@env).object_digest        meta=SiSU_metadata::Metadata.new(@md,data).metadata @@ -218,6 +258,8 @@ module SiSU_DAL        if @md.cmd =~/[mM]/          SiSU_DAL::Output.new(@md,outputdata).hard_output          SiSU_DAL::Output.new(@md,outputdata).marshal +        SiSU_DAL::Output.new(@md,html_idx).idx_html_hard_output +        SiSU_DAL::Output.new(@md,html_idx).idx_html_marshal        end        reset        outputdata diff --git a/lib/sisu/v0/dal_idx.rb b/lib/sisu/v0/dal_idx.rb index 26fc66b6..74ec0d15 100644 --- a/lib/sisu/v0/dal_idx.rb +++ b/lib/sisu/v0/dal_idx.rb @@ -76,9 +76,10 @@ module SiSU_book_index        @env ||=SiSU_Env::Info_env.new(@md.fns)      end      def indexing_song -      @data=extract_book_index(@data) -      @data=clean_index(@data) -      @data +      data=@data +      data,sisu_markup_idx,html_idx=extract_book_index(data) +      data=clean_and_insert_index(data,sisu_markup_idx) +      [data,sisu_markup_idx,html_idx]      end      def extract_book_index(data)        tuned_file=[] @@ -89,24 +90,30 @@ module SiSU_book_index          idx_array << @rgx_idx_ocn_init.match(para)[0].gsub(@rgx_idx_ocn_init,"\\1~\\2~#{@seg}") if para =~ @rgx_idx_ocn_init          tuned_file << para if para        end -      #idx_array.each do |i| -      #  i.gsub!(@rgx_idx_ocn_init,'\1~\2') -      #end        idx_array=construct_idx_array(idx_array) if idx_array.length > 0        if idx_array.length > 0 -        if @md.cmd.inspect =~/M/ -          the_idx=construct_book_index(idx_array) -          screen_print(the_idx) if @md.cmd.inspect =~/M/ -        puts "\n---" -          path="#{@env.path.output}/#{@md.fnb}" -          @file_index_all=File.open("#{path}/#{@md.fn[:book_index]}",'w') -          screen_html(the_idx) -          @file_index_all.close -        puts "\n---" -          screen_sisu_markup(the_idx) +        the_idx=construct_book_index(idx_array) +        #screen_print(the_idx) if @md.cmd.inspect =~/V/ +        sisu_markup_idx,html_idx=nil,nil +        if @md.book_index +          idx=index(the_idx) +          output_html_idx(idx[:html]) +          html_idx=idx[:html] +          sisu_markup_idx=idx[:sst]          end        end -      tuned_file +      [tuned_file,sisu_markup_idx,html_idx] +    end +    def output_html_idx(html_idx) +      if @md.book_index +        path="#{@env.path.output}/#{@md.fnb}" +        Dir.mkdir(path) unless FileTest.directory?(path) +        html_index_file=File.new("#{path}/#{@md.fn[:book_index]}",'w') +        puts "#{path}/#{@md.fn[:book_index]}" +        #html_file(the_idx) +        html_idx.each {|x| html_index_file << x } +        html_index_file.close +      end      end      def construct_idx_array(idx_array)        idx_lst=[] @@ -163,11 +170,22 @@ module SiSU_book_index        #p the_idx; p '-----'        the_idx      end -    def screen_print(the_idx) +    def index(the_idx) +      @x=1 +      @idx={} +      @idx[:sst],@idx[:html]=[],[] +      @idx[:sst] << "\n\n#{Mx[:br_page_new]}" +      @idx[:sst] << "\n\n#{Mx[:lv_o]}2:#{Mx[:lv_c]}Index #{Mx[:id_o]}~0;0:0;x0#{Mx[:id_c]}" +      @idx[:sst] << "\n\n#{Mx[:lv_o]}4:idx#{Mx[:lv_c]} [Index] #{Mx[:pa_non_object_dummy_heading]} #{Mx[:id_o]}~0;0:0;x0#{Mx[:id_c]}"        the_idx.each do |i|          i.each do |x|            if x.class == String -            print "\n" + x + ', ' +            @idx[:sst] << %{\n\n#{Mx[:fa_bold_o]}#{x},#{Mx[:fa_bold_c]} } +            aname=x.gsub(/\s+/,'_') +            @idx[:html] << %{\n<p class="book_index_lev1"><a name="##{aname}"><b>#{x}</b></a>, } +            @o=@idx[:sst].index(@idx[:sst].last) #@o=@idx[:sst].length - 1 +            @q=@idx[:html].index(@idx[:html].last) #@o=@idx[:html].length - 1 +            print "\n" + x + ', ' if @md.cmd =~/V/            elsif x.class == Array              p 'array error? -->'              print x @@ -175,43 +193,55 @@ module SiSU_book_index              if x['a1'].class == Array                x['a1'].each do |a|                  if a[:range] -                  print a[:range] + ', ' +                  @idx[:sst][@o]=@idx[:sst][@o] + %{#{Mx[:lnk_o]}#{a[:range]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{a[:seg]}.html##{a[:ocn]}, } +                  @idx[:html][@q]=@idx[:html][@q] + %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:range]}</a>, } +                  print a[:range] + ', ' if @md.cmd =~/V/                  elsif a[:ocn] -                  print a[:ocn] + ', ' +                  @idx[:sst][@o]=@idx[:sst][@o] + %{#{Mx[:lnk_o]}#{a[:ocn]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{a[:seg]}.html##{a[:ocn]}, } +                  @idx[:html][@q]=@idx[:html][@q] + %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:ocn]}</a>, } +                  print a[:ocn] + ', ' if @md.cmd =~/V/                  else p 'error'                  end                end +              @idx[:html][@q]=@idx[:html][@q] + '</p>'              end              if x['b1']                m=x['b1']                m=m.sort                m.each do |k,y|                  if k !~/a1/ -                  print "\n\t" + k + ', ' -                  #p y +                  @idx[:sst][@o]=@idx[:sst][@o] + %{#{k}, } +                  @idx[:html][@q]=@idx[:html][@q] + %{\n<p class="book_index_lev2">#{k}, } +                  print "\n\t" + k + ', ' if @md.cmd =~/V/                    y.each do |z|                      if z[:range] -                      print z[:range] + ', ' +                      @idx[:sst][@o]=@idx[:sst][@o] + %{#{Mx[:lnk_o]}#{z[:range]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{z[:seg]}.html##{z[:ocn]}, } +                      @idx[:html][@q]=@idx[:html][@q] + %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:range]}</a>, } +                      print z[:range] + ', ' if @md.cmd =~/V/                      elsif z[:ocn] -                      print z[:ocn] + ', ' +                      @idx[:sst][@o]=@idx[:sst][@o] + %{#{Mx[:lnk_o]}#{z[:ocn]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{z[:seg]}.html##{z[:ocn]}, } +                      @idx[:html][@q]=@idx[:html][@q] + %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:ocn]}</a>, } +                      print z[:ocn] + ', ' if @md.cmd =~/V/                      else p 'error'                      end                    end +                  @idx[:html][@q]=@idx[:html][@q] + '</p>'                  end                end              end +            @idx[:sst][@o]=@idx[:sst][@o] + " #{Mx[:id_o]}~0;0:0;x#{@x}#{Mx[:id_c]}" +            @x +=1            end          end        end +      print "\n" if @md.cmd =~/V/ +      @idx      end -    def screen_html(the_idx) -      @file_index_all << %{\n <link rel="stylesheet" href="../_sisu/css/html.css" type="text/css" />} +    def screen_print(the_idx)        the_idx.each do |i|          i.each do |x|            if x.class == String -            @file_index_all << %{\n<p class="book_index_lev1"><b>#{x}</b>, } -            #@file_index_all << %{<br />\n<b>#{x}</b>, } -            print %{<br />\n<b>#{x}</b>, } +            print "\n" + x + ', '            elsif x.class == Array              p 'array error? -->'              print x @@ -219,36 +249,28 @@ module SiSU_book_index              if x['a1'].class == Array                x['a1'].each do |a|                  if a[:range] -                  @file_index_all << %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:range]}</a>, } -                  print %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:range]}</a>, } +                  print a[:range] + ', '                  elsif a[:ocn] -                  @file_index_all << %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:ocn]}</a>, } -                  print %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:ocn]}</a>, } +                  print a[:ocn] + ', '                  else p 'error'                  end                end -              @file_index_all << '</p>'              end              if x['b1']                m=x['b1']                m=m.sort                m.each do |k,y|                  if k !~/a1/ -                  @file_index_all << %{\n<p class="book_index_lev2">#{k}, } -                  #@file_index_all << %{<br />\n\t#{k}, } -                  print %{<br />\n\t#{k}, } +                  print "\n\t" + k + ', '                    #p y                    y.each do |z|                      if z[:range] -                      @file_index_all << %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:range]}</a>, } -                      print %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:range]}</a>, } +                      print z[:range] + ', '                      elsif z[:ocn] -                      @file_index_all << %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:ocn]}</a>, } -                      print %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:ocn]}</a>, } +                      print z[:ocn] + ', '                      else p 'error'                      end                    end -                  @file_index_all << '</p>'                  end                end              end @@ -256,49 +278,18 @@ module SiSU_book_index          end        end      end -    def screen_sisu_markup(the_idx) -      the_idx.each do |i| -        i.each do |x| -          if x.class == String -            print %{\n\n#{Mx[:fa_bold_o]}#{x}#{Mx[:fa_bold_c]}, } -            #print %{\n\n#{Mx[:gr_o]}\n#{Mx[:fa_bold_o]}#{x}#{Mx[:fa_bold_c]}, } -            #print "\n" + x + ', ' -          elsif x.class == Array -            p 'array error? -->' -            print x -          elsif x.class == Hash -            if x['a1'].class == Array -              x['a1'].each do |a| -                if a[:range] -                  print %{#{Mx[:lnk_o]}#{a[:range]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{a[:seg]}.html##{a[:ocn]}, } -                elsif a[:ocn] -                  print %{#{Mx[:lnk_o]}#{a[:ocn]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{a[:seg]}.html##{a[:ocn]}, } -                else p 'error' -                end -              end -            end -            if x['b1'] -              m=x['b1'] -              m=m.sort -              m.each do |k,y| -                if k !~/a1/ -                  print %{\n    #{k}, } -                  #print "\n\t" + k + ', ' -                  y.each do |z| -                    if z[:range] -                      print %{#{Mx[:lnk_o]}#{z[:range]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{z[:seg]}.html##{z[:ocn]}, } -                    elsif z[:ocn] -                      print %{#{Mx[:lnk_o]}#{z[:ocn]}#{Mx[:lnk_c]}#{@env.url.root}/#{@md.fnb}/#{z[:seg]}.html##{z[:ocn]}, } -                    else p 'error' -                    end -                  end -                  puts " #{Mx[:id_o]}~0;0:0;u0#{Mx[:id_c]}" -                end -              end -            end +    def clean_and_insert_index(data,sisu_markup_idx) +      tuned_file=[] +      data.each do |para| +        para.gsub!(/\n*#{@rgx_idx}/m,'') +        tuned_file << para +        if para =~/#{Mx[:br_endnotes]}/ and sisu_markup_idx +          sisu_markup_idx.each do |idx| +            tuned_file << idx            end          end        end +      tuned_file      end      def clean_index(data)        tuned_file=[] diff --git a/lib/sisu/v0/dal_syntax.rb b/lib/sisu/v0/dal_syntax.rb index 80635f36..cbcd42f9 100644 --- a/lib/sisu/v0/dal_syntax.rb +++ b/lib/sisu/v0/dal_syntax.rb @@ -357,6 +357,7 @@ module SiSU_Syntax          line.gsub!(/_<(br(?: \/)?)_>/,'<\1>') #convert <br> <br /> back, clumsy          line.gsub!(/(^|#{Mx[:gl_c]}|\s)<(br(?: \/)?)>([\s,.]|$)/,'\1<\2>\3') #convert <br> <br /> back, clumsy          line.gsub!(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}/,"\n#{Mx[:nbsp]}#{Mx[:nbsp]}") #temporary fix, prefer: #line.gsub!(/<:codeline>/,"\n") +        line        else # 0~        end        line diff --git a/lib/sisu/v0/html.rb b/lib/sisu/v0/html.rb index e73157bd..df53d1b7 100644 --- a/lib/sisu/v0/html.rb +++ b/lib/sisu/v0/html.rb @@ -173,9 +173,6 @@ module SiSU_HTML          @md.file_type='html' if @md.cmd =~/[hon]/          directories          newfilename=%{#{@env.path.output}/#{@md.fnb}/#{@md.fn[:index]}} if @md.file_type =~/html/ -        my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) -        @fnm=my_make_source_file.marshal_meta -        @tune_verse_marshal=my_make_source_file.marshal_tune          dal_array=@particulars.dal_array # dal file drawn here          @tuned_file_array=SiSU_Tune::Tune.new(dal_array,@md).songsheet          @tuned_file_array diff --git a/lib/sisu/v0/html_segments.rb b/lib/sisu/v0/html_segments.rb index 8d89de28..796c3939 100644 --- a/lib/sisu/v0/html_segments.rb +++ b/lib/sisu/v0/html_segments.rb @@ -62,14 +62,43 @@ module SiSU_HTML_seg    require "#{SiSU_lib}/shared_html"    require "#{SiSU_lib}/html"    require "#{SiSU_lib}/html_promo" +  class Seg_output +    def initialize(outputfile,seg,minitoc,type='') +      @output_seg_file,@seg,@minitoc,@type=outputfile,seg,minitoc,type +    end +    def output #CONSIDER +      if @seg[:title] =~/\S/ #kludge (for exception file better.ways, how ironic) get a real ruby test, e.g. test that not array or... +        filename_seg=[] +        filename_seg << @seg[:title] << @seg[:tocband_banner] +        if @type =~/endnote/ +#p  @seg[:headers] #FIX endnote header +          filename_seg << @seg[:header_endnotes] << @minitoc << @seg[:headers] << %{\n<div class="content">\n} << @seg[:endnote_all] << '</div>' # << '</div>' +        elsif @type =~/idx/ +#p  @seg[:headers] #FIX inserted index header +          filename_seg << @seg[:header_idx] << @minitoc << @seg[:headers] << %{\n<div class="content">\n} << @seg[:idx] << '</div>' # << '</div>' +        else +          filename_seg << @minitoc <<  @seg[:headers] << @seg[:main] << "\n</div>\n" +        end +        filename_seg << @seg[:tail] << @seg[:tocband_bannerless] << @seg[:credits] +        filename_seg.flatten!.compact! +        filename_seg.each do |para| +          unless para =~/\A\s*\Z/ +            para.strip! +            @output_seg_file << para +          end +        end +        @output_seg_file.close +      end +    end +  end    class Seg      @@seg,@@seg_subtoc,@@seg_endnotes,@@seg_ad={},{},{},{} -    @@seg_name,@@seg_name_html,@@seg_name_php=[],[],[] -    @@filename_seg=@@filename_segphp=@@seg_url=@@fn=@@to_lev4=@@get_hash_to=@@get_hash_fn='' +    @@seg_name,@@seg_name_html=[],[] +    @@seg_url=@@fn=@@to_lev4=@@get_hash_to=@@get_hash_fn=''      @@loop_count=@@seg_total=@@tracker=0      @@is4=@@is3=@@is2=@@is1=0      @@header1=@@header2=@@header3=@@header4=0 -    @@seg[:tocband_banner],@@seg[:tocband_bannerless],@@seg[:title],@@seg[:headers],@@seg[:main],@@seg[:tail],@@seg[:credits],@@seg_subtoc_array,@@seg_endnotes_array,@@seg[:endnote_all]=Array.new(10){[]} +    @@seg[:tocband_banner],@@seg[:tocband_bannerless],@@seg[:title],@@seg[:headers],@@seg[:main],@@seg[:idx],@@seg[:tail],@@seg[:credits],@@seg_subtoc_array,@@seg_endnotes_array,@@seg[:endnote_all]=Array.new(11){[]}      @@seg[:header_endnotes]=''      @@tablehead,@@number_of_cols=0,0      @@flag_alt=false @@ -85,7 +114,7 @@ module SiSU_HTML_seg      end      def songsheet        begin -        @@minitoc=SiSU_HTML::Source::Toc.new(@data,@md).minitoc +        @minitoc=SiSU_HTML::Source::Toc.new(@data,@md).minitoc          data=get_subtoc_endnotes(@data)          data=articles(data)          Seg.new.cleanup # (((( added )))) @@ -103,6 +132,13 @@ module SiSU_HTML_seg        @h_sfx='.php' if @md.file_type =~/php/        @h_sfx=@md.sfx if @md.file_type =~/html/        @h_sfx='.html' if @md.file_type =~/html/ #used in creating file, not to be omitted. +      idx_html=nil +      if @md.book_index +        my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) +        idx_html=SiSU_Particulars::Combined_singleton.instance.get_html_idx(@md.opt).html_idx +        idx_html.each {|x| @@seg[:idx] << x } +        @@seg[:header_idx]='' +      end        data.each do |para|          if para =~/^#{Mx[:lv_o]}4:/            @@seg_name << para[/^#{Mx[:lv_o]}4:(\S+?)#{Mx[:lv_c]}/,1] @@ -153,20 +189,24 @@ module SiSU_HTML_seg                  mkdir_p(@md.dir_out) unless FileTest.directory?(@md.dir_out) #bug - added specifically for nav! not needed by regular seg, check !!!                  Seg.new('',@md).tail                  segfilename="#{@md.dir_out}/#{@md.fnl[:pre]}#{@@seg_name_html[tracking-1]}#{@md.fnl[:mid]}#@h_sfx#{@md.fnl[:post]}" -                @@filename_seg=File.new(segfilename,'w') if @@seg_name_html[tracking-1] -                unless (@@seg_name_html[tracking-1] =~/endnotes/) -                  Seg.new.output -                else Seg.new.output('endnotes') +                @output_seg_file=File.new(segfilename,'w') if @@seg_name_html[tracking-1] +                if @@seg_name_html[tracking-1] !~/endnotes|idx/ +                  Seg_output.new(@output_seg_file,@@seg,@minitoc).output +                elsif @@seg_name_html[tracking-1] =~/endnotes/ +                  Seg_output.new(@output_seg_file,@@seg,@minitoc,'endnotes').output +                elsif @@seg_name_html[tracking-1] =~/idx/ +                  Seg_output.new(@output_seg_file,@@seg,@minitoc,'idx').output +                else p 'check'                  end                  Seg.new.reinitialise                  header_art(para)                  head(para)                  if @@seg_name_html[tracking] =~/metadata/ # this is for metadata                    segfilename="#{@md.dir_out}/#{@md.fnl[:pre]}#{@@seg_name_html[tracking]}#{@md.fnl[:mid]}#@h_sfx#{@md.fnl[:post]}" -                  @@filename_seg=File.new(segfilename,'w') -                  Seg.new.reinitialise +                  @output_seg_file=File.new(segfilename,'w') +                  Seg.new.reinitialise #BUG with items following endnote, and occurring before metadata, this becomes a bug ... work area for book index, FIX                    flagend="x" -                  @@filename_seg.close                                         #%(((( EOF )))) --> +                  @output_seg_file.close                                         #%(((( EOF )))) -->                  end                end                if  tracking == 0 @@ -391,26 +431,6 @@ module SiSU_HTML_seg        ads=SiSU_HTML_promo::Ad.new(@md)        @@seg[:credits] << format_head_seg.credit << ads.div.close << ads.display << format_head_seg.html_close      end -    def output(type='') -      if @@seg[:title] =~/\S/ #kludge (for exception file better.ways, how ironic) get a real ruby test, e.g. test that not array or... -        filename_seg=[] -        filename_seg << @@seg[:title] << @@seg[:tocband_banner] -        if type !~/endnote/ -          filename_seg << @@minitoc <<  @@seg[:headers] << @@seg[:main] << "\n</div>\n" -        else -          filename_seg << @@seg[:header_endnotes] << @@minitoc << @@seg[:headers] << %{\n<div class="content">\n} << @@seg[:endnote_all] << '</div>' -        end -        filename_seg << @@seg[:tail] << @@seg[:tocband_bannerless] << @@seg[:credits] -        filename_seg.flatten!.compact! -        filename_seg.each do |para| -          unless para =~/\A\s*\Z/ -            para.strip! -            @@filename_seg << para -          end -        end -        @@filename_seg.close -      end -    end      def reinitialise        @@seg[:title],@@seg[:dot_nav],@@seg[:tocband_banner],@@seg[:tocband_bannerless],@@seg[:headers],@@seg[:main],@@seg[:tail],@@seg[:credits]=Array.new(8){[]}        @@segtocband=nil @@ -433,11 +453,9 @@ module SiSU_HTML_seg              @@seg_endnotes_array=[] if para=~/^#{Mx[:lv_o]}4:/              @@fns_previous=@md.fns if para=~/^#{Mx[:lv_o]}1:meta#{Mx[:lv_c]}/            end -          if para =~/^#{Mx[:lv_o]}4:/                                              #% EXTRACTION OF SUB-TOCs +          if para =~/^#{Mx[:lv_o]}4:/                                              #%  EXTRACTION OF SUB-TOCs & SEGMENT NAME, after EXTRACTION OF ENDNOTES & SUB-TOCs              @@seg_subtoc[@@fn]=@@seg_subtoc_array              @@seg_subtoc_array=[] -          end -          if para =~/^#{Mx[:lv_o]}4:/                                              #% SEGMENT NAME, after EXTRACTION OF ENDNOTES & SUB-TOCs              if para !~/^#{Mx[:lv_o]}4:metadata#{Mx[:lv_c]}/                m=para[/^#{Mx[:lv_o]}4:(\S+?)#{Mx[:lv_c]}.+?#{Mx[:id_o]}~(\d+);(?:[oh]|4:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}$/]              end diff --git a/lib/sisu/v0/odf.rb b/lib/sisu/v0/odf.rb index d6558634..05a6272c 100644 --- a/lib/sisu/v0/odf.rb +++ b/lib/sisu/v0/odf.rb @@ -439,6 +439,7 @@ module SiSU_ODF          bullet=image_src('bullet_09.png')          cp("#{bullet}/bullet_09.png","#{@env.path.odf}/Pictures/.") #if image_src('bullet_09.png')          data.each do |para| +          para.gsub!(/#{Mx[:id_o]}~0;0:0;x\d+#{Mx[:id_c]}/,'') # if book index? remove            #p para if para =~safe_characters and @md.cmd =~/V/ #KEEP            #para.gsub!(/<(~\d+;(?:\w|[0-6]:)\d+;\w\d+)><(#@dp:#@dp)>/,'<\1><\2>')            para='' if para =~/#{Mx[:lv_o]}\d+:.*?#{Mx[:lv_c]}.+?#{Mx[:pa_non_object_dummy_heading]}/ diff --git a/lib/sisu/v0/particulars.rb b/lib/sisu/v0/particulars.rb index 8ae4f66e..59b8956b 100644 --- a/lib/sisu/v0/particulars.rb +++ b/lib/sisu/v0/particulars.rb @@ -92,7 +92,11 @@ module SiSU_Particulars        set_env        set_md      end -    attr_accessor :opt,:md +    def get_html_idx(opt) +      @opt=opt +      set_html_idx +    end +    attr_accessor :opt,:md,:html_idx      def set_md        begin          @md=SiSU_Param::Parameters.new(@opt).get @@ -116,6 +120,13 @@ module SiSU_Particulars        rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error        end      end +    def set_html_idx +      begin +        @html_idx=SiSU_DAL::Source.new(@md).get_idx_html +        self +      rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error +      end +    end    end  end  __END__ diff --git a/lib/sisu/v0/plaintext.rb b/lib/sisu/v0/plaintext.rb index fb4b1115..754e366d 100644 --- a/lib/sisu/v0/plaintext.rb +++ b/lib/sisu/v0/plaintext.rb @@ -275,6 +275,7 @@ WOK          table_message='[table omitted, see other document formats]'          fix=[]          data.each do |para| +          para.gsub!(/#{Mx[:id_o]}~0;0:0;x\d+#{Mx[:id_c]}/,'') # if book index? remove            para.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#@br#{table_message}")            para.gsub!(/.+?#{Mx[:gl_o]}-##{Mx[:gl_c]}/,'')                                           # remove dummy headings (used by html) #check            para.gsub!(/#{Mx[:gl_bullet]}\s*/,'* ')                                          # bullet markup, marked down diff --git a/lib/sisu/v0/shared_xml.rb b/lib/sisu/v0/shared_xml.rb index bf59830f..41e8c393 100644 --- a/lib/sisu/v0/shared_xml.rb +++ b/lib/sisu/v0/shared_xml.rb @@ -423,13 +423,11 @@ module SiSU_XML_munge            %{\\1#{@url_brace.xml_open}<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\\2">\\2</link>#{@url_brace.xml_close}\\3})          para.gsub!(/\b[_\\]((?:https?|file|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?:\s|$))/,            '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\1">\1</link>\2') #escaped urls not linked, deal with later -        para.gsub!(/ |#{Mx[:nbsp]}/,' ') -        #para.gsub!(/ /,' ') #clean        else          para.gsub!(/(^|[^}])_</m,'\1<'); para.gsub!(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters          para.gsub!(/(^|[^}])_</m,'\1<'); para.gsub!(/(^|[^}])_>/m,'\1>') -        para.gsub!(/ |#{Mx[:nbsp]}/,' ')        end +      para.gsub!(/ |#{Mx[:nbsp]}/m,' ')        para      end      def markup_light(para='') diff --git a/lib/sisu/v0/sysenv.rb b/lib/sisu/v0/sysenv.rb index 93e6ea8e..25cf90ec 100644 --- a/lib/sisu/v0/sysenv.rb +++ b/lib/sisu/v0/sysenv.rb @@ -3033,12 +3033,18 @@ WOK      def file_meta        File.new("#{@env.path.dal}/#@fns.meta",'w+')      end +    def file_meta_idx_html +      File.new("#{@env.path.dal}/#@fns.idx.html",'w+') +    end      def file_note        File.new("#{Dir.pwd}/#@fns.fn",'w+')      end      def marshal_meta        "#{@env.path.dal}/#@fns.meta.rbm"      end +    def marshal_meta_idx_html +      "#{@env.path.dal}/#@fns.idx_html.rbm" +    end      def meta        "#{@env.path.dal}/#@fns.meta"      end diff --git a/lib/sisu/v0/texpdf.rb b/lib/sisu/v0/texpdf.rb index 3cf560c4..885643cf 100644 --- a/lib/sisu/v0/texpdf.rb +++ b/lib/sisu/v0/texpdf.rb @@ -693,6 +693,7 @@ WOK            paranum=if ocn; para[m,2]            else ''            end +          paranum = '' if paranum.to_i == 0            txt_obj={:txt =>parablock,:ocn =>paranum}            do_duo=SiSU_TeX_Pdf::Format_text_object.new(@md,txt_obj)            para=do_duo.para_num if parablock | 
