class SiSU_TexInfo::TeXinfoMake

Public Class Methods

new(md,data) click to toggle source
# File lib/sisu/texinfo.rb, line 143
def initialize(md,data)
  @md,@data=md,data
  @env=SiSU_Env::InfoEnv.new(@md.fns)
  @f=SiSU_Env::FileOp.new(@md)
end

Public Instance Methods

code_lines() click to toggle source
# File lib/sisu/texinfo.rb, line 234
def code_lines
  data,data_new=@data,[]
  data.each do |line|
    if (line =~ /\S/) \
    && (line !~ /#{Mx[:gr_o]}(code|verse).+/) #fix
      line=if @@flag['code']
        line.gsub(/^\s*(.+)/m,"\\noindent \\marginpar\[left-text\]{\\begin{tiny}#{@@counting}\\end{tiny}}\\1\\")
        @@counting+=1 if @@flag['code']
      else line.gsub(/(.+)/m,'\noindent\1')
      end
    end
    data_new << line
  end
end
endnote(data) click to toggle source
# File lib/sisu/texinfo.rb, line 180
def endnote(data)
  data_new=[]
  data.each do |dob|
    if dob.of==:para \
    || dob.of==:block
      dob.obj=dob.obj.gsub(/\s*#{Mx[:en_a_o]}(?:\d+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} ').
        gsub(/\s*#{Mx[:en_a_o]}(\*+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} ')
    end
    data_new << dob
  end
  data_new
end
makeinfo() click to toggle source
# File lib/sisu/texinfo.rb, line 402
def makeinfo
  if @md.fns =~/\.(?:-|ssm\.)?sst$/
    m=/(.+?)\.((?:-|ssm\.)?sst)$/.match(@md.fns)
    fnb,sfx=m[1],m[2]
    pwd=Dir.pwd
    case sfx
    when /(?:-|ssm\.)?sst$/
      @env=SiSU_Env::InfoEnv.new(@md.fns,@md.opt.selections.str)
      Dir.chdir(@env.processing_path.texi)
      texinfo=SiSU_Env::SystemCall.new("#{fnb}.texinfo")
      texinfo.makeinfo
    end
    Dir.chdir(pwd)
  end
  def place_info
    unless FileTest.directory?(@f.output_path.texinfo.dir)
      FileUtils::mkdir_p(@f.output_path.texinfo.dir)
    end
    info_src=%{#{@env.processing_path.texi}/#{@md.fnb}.info}
    Dir.glob("#{info_src}*").sort.each do |f|
      FileUtils::cp(f, File.dirname(@f.place_file.info.dir)) # bug should provide dir without need to extract it!
    end
  end
end
markup(data) click to toggle source
# File lib/sisu/texinfo.rb, line 262
def markup(data)
  data_new=[]
  @tex_file=[]
  @row_break='\\\\\\'
  @break_page="#{@row_break}\n#{@row_break} \n"
  @tex_file << SiSU_TexInfoFormat::Texinfo.new(@md).head
  mono=SiSU_TexInfoFormat::Texinfo.new(@md)
  @tex_file << mono.topnode(@md.title.full)
  texinfo_menu=[]
  n_menu,n_submenu=0,0
  @submenu,@subsubmenu={},{}
  data.each do |dob|
    if dob.is ==:heading \
    && (dob.ln.to_s =~ /^[0-3]$/)
      toc=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
      texinfo_menu << toc.menu
    elsif dob.is ==:heading \
    && (dob.ln.to_s =~ /^[4-6]$/)
      toc=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
      texinfo_menu << toc.menu
      case dob.ln
      when 4
        n_menu+=1
        @submenu[n_menu]=[]
      when 5
        n_submenu+=1
        @subsubmenu[n_menu]=[]
        @submenu[n_menu] << toc.menu
      when 6
        n_submenu+=1
        @subsubmenu[n_submenu]=[]
        @subsubmenu[n_submenu] << toc.menu
      end
    else
      dob.obj=dob.obj.gsub(/\s*(?:<:?br>|<br \/>)\s*/,"\n\n")
    end
    data_new << dob
  end
  data=data_new
  texinfo_menu=texinfo_menu.compact
  texinfo_menu << "* Dublin Core::"
  @tex_file << texinfo_menu
  @tex_file << "* Index::\n" +
    "@end menu\n\n" +
    "@c %% 5\n\n"
  n_menu,n_submenu=0,0
  @@do_submenu,@@do_subsubmenu=1,1
  data_new=[]
  data.each do |dob|
    unless defined? dob.ln and dob.ln == (5..6)
      mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
    end
    if dob.is==:heading
      case dob.ln
      when 0 then dob=mono.level0
      when 1 then dob=mono.level1
      when 2 then dob=mono.level2
      when 3 then dob=mono.level3
      when 4;
        @@n4_txt=dob.obj
        dob=mono.level4
        n_menu+=1
        @@do_submenu,@@do_subsubmenu=1,1
      when 5;
        n_submenu+=1
        @@do_subsubmenu=1
        @@n5_txt=dob.obj
        if @@do_submenu==1
          menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu])
          dob.obj="#{menu.submenu}#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n4_txt).level5.obj}"
          @@do_submenu=0
        else dob.obj="#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n4_txt).level5.obj}"
        end
      when 6;
        if @@do_submenu==1
          menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu])
          dob.obj="#{menu.submenu}#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n5_txt).level6.obj}"
          dob.obj="#{menu.subsubmenu}#{mono.level6.obj}"
          @@do_subsubmenu=0
        else dob.obj="#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n5_txt).level6.obj}"
        end
      end
    else
      if dob.obj !~/\S/
        dob.obj=nil
      else
        if dob.is==:para \
        && (dob.obj !~/#{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}/)
          dob.obj=dob.ocn.is_a?(Fixnum) \
          ? "#{dob.obj} #{Dx[:ocn_o]}#{dob.ocn}#{Dx[:ocn_c]}\n\n" : "#{dob.obj}\n\n"
        end
      end
    end
    #%case with endnotes
    dob.obj=dob.obj.gsub(/\s*[0-8]\\+(\S+)?\s+/,' ') if dob.obj
    data_new << dob
  end
  [data_new, @tex_file]
end
number_titles() click to toggle source
# File lib/sisu/texinfo.rb, line 361
def number_titles
  data,data_new=@data,[]
  @tex_file=[]
  data.each do |dob|
    if (@md.markup =~ /num_top/i) \
    && (dob.obj !~ /#{Rx[:meta]}/)
      if (dob.obj =~ /^[1-6]\\+(?:~\S+)?\s*<!h-.+?-!>/) \
      && (dob.obj !~ /<:\d-endnotes>/)
        header=dob.obj[/<!h-(.+?)-!>/m, 1].gsub(/-/m,'.')
        dob.obj=dob.obj.gsub(/^(?:[1-6]\\+(?:~\S+)|<:([12356]|4-.+?-)>)\s*<!h-.+?-!>/,
          "\\1 #{header} ")
      end
    elsif dob.obj=~ /<!h!>|<!h\d!>|<!h.+?!>|<!!h.+?!>/
      if dob.obj=~ /<!h-.+?-!>/
        dob.obj=dob.obj.gsub(/<!h-(.+?)-!>/,'\1 ')
      end
    end
    @tex_file << dob.obj
  end
  data_new << dob
end
output(data) click to toggle source
# File lib/sisu/texinfo.rb, line 395
def output(data)
  filename_texinfo=%{#{@env.processing_path.texi}/#{@md.fnb}.texinfo}
  file_texinfo=File.new(filename_texinfo,'w+')
  puts filename_texinfo if @md.opt.act[:maintenance][:set]==:on
  data.each {|s| (file_texinfo.puts s,"\n") if s}
  file_texinfo.close
end
place_info() click to toggle source
# File lib/sisu/texinfo.rb, line 416
def place_info
  unless FileTest.directory?(@f.output_path.texinfo.dir)
    FileUtils::mkdir_p(@f.output_path.texinfo.dir)
  end
  info_src=%{#{@env.processing_path.texi}/#{@md.fnb}.info}
  Dir.glob("#{info_src}*").sort.each do |f|
    FileUtils::cp(f, File.dirname(@f.place_file.info.dir)) # bug should provide dir without need to extract it!
  end
end
poem() click to toggle source
# File lib/sisu/texinfo.rb, line 192
def poem
  data,data_new=@data,[]
  @tex_file=[]
  @@counting=0
  data.each do |dob|
    if dob.is ==:code
      @@flag['code']=true
      @@counting=1
    end
    if dob.is ==:verse
      @@flag['poem']=1
    end
    if @@flag['code']
      if @@flag['code'] \
      && (dob.obj =~ /#{Mx[:gr_o]}code[-_](?:end|close)#{Mx[:gr_c]}/) #watch change not tested 200501 #fix
        @@flag['code']=false
      end
      if @@flag['code'] \
      && (dob.obj =~ /\S/)
        sub_array=dob.obj.dup
        @@line_mode=sub_array.scan(/.+/)
        Tune.code_lines(@@line_mode)
        dob.obj=@@line_mode.join
      end
    elsif @@flag['poem']==1
      if @@flag['poem']==1 \
      && (dob.obj =~ /#{Mx[:gr_o]}verse[-_](?:end|close)#{Mx[:gr_c]}/) #watch change not tested 200501 #fix
        @@flag['poem']=0
      end
      if @@flag['poem']==1 \
      && (dob.obj =~ /\S/)
        sub_array=dob.obj.dup
        @@line_mode=sub_array.scan(/.+/)
        Tune.code_lines(@@line_mode)
        dob.obj=@@line_mode.join
      end
    end
    @tex_file << dob.obj
    data_new << dob
  end
  data_new
end
pre(data) click to toggle source
# File lib/sisu/texinfo.rb, line 163
def pre(data)
  data_new=[]
  data.each do |dob|
    # DEBUG 2003w16 this is a kludge, because i could not get parameters
    # from param, Sort out ... revert to more elegant solution
    if dob.is =='table'
      @@flag['tables']='y' # KLUDGE get from param
    end
    dob.obj=dob.obj.gsub(/<:p[bn]>/,'').
      gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1(\2 [linked to:] \3)').
      gsub(/(^|#{Mx[:gl_c]}|\s)\{(.+?)\}((?:https?|file):\/\/\S+)/,'\1(\2 [linked to:] \3)')
    do_mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
    dob.obj=do_mono.spec_char(dob.obj)
    data_new << dob
  end
  data_new
end
songsheet() click to toggle source
# File lib/sisu/texinfo.rb, line 148
def songsheet
  begin
    data=@data
    data=pre(data)
    data=endnote(data)
    data,head=markup(data)
    objs_txt=tail(data)
    doc_txt=[head,objs_txt]
    output(doc_txt)
    makeinfo #KEEP reinstate when fixed #%
    place_info
  rescue; STDERR.puts SiSU_Screen::Ansi.new(@md.opt.act[:color_state][:set],$!,$@).rescue
  ensure
  end
end
tables() click to toggle source
# File lib/sisu/texinfo.rb, line 248
def tables
  data,data_new=@data,[]
  @tex_file=[]
  @@tableheader=0
  data.each do |dob|
    if dob.obj =~ /#{Mx[:tc_p]}|#{Mx[:gr_o]}T/ui #fix
      do_mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
      dob.obj=do_mono.longtable # using longtable latex package
    end
    @tex_file << dob.obj
    data_new << dob
  end
  data_new
end
tail(data) click to toggle source
# File lib/sisu/texinfo.rb, line 382
def tail(data)
  tex=SiSU_TexInfoFormat::Texinfo.new(@md)
  objs_txt=[]
  data.each do |dob|
    if dob.obj \
    && (dob.is !=:structure \
    && dob.is !=:comment)
       objs_txt << dob.obj if dob.obj
    end
  end
  objs_txt << tex.dublincore << tex.tail
  objs_txt
end