class SiSU_Po4a::Source::Scroll

Public Class Methods

new(fn,data_src,data_trn,md_src,md_trn,wrap_width) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 208
def initialize(fn,data_src,data_trn,md_src,md_trn,wrap_width)
  @fn,@data_src,@data_trn,@md_src,@md_trn,@wrap_width=
   fn, data_src, data_trn, md_src, md_trn, wrap_width
  @md=(md_trn.nil?) \
  ? md_src
  : md_trn
  @tab="\t"
  @@endnotes_=(@md.opt.selections.str =~/--endnote/) \
  ? true
  : false    # --footnote
  @pot={
    body: [],
    open: [],
    close: [],
    head: [],
    metadata: [],
    tail: []
  }
end

Public Instance Methods

auto_translate?(set_to=nil) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 551
def auto_translate?(set_to=nil)
  @@auto_translation_=
  if @md.opt.act[:po4a_lang_trans][:set]==:on
    set_to \
    ? set_to
    : @@auto_translation_
  else :skip
  end
end
auto_translation(src_txt,markup=:src) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 560
def auto_translation(src_txt,markup=:src) # check for an appropriate request flag
  auto_translate?(:skip)
  begin
    src_txt_clean=clean_text(src_txt,markup)
    src_txt_clean=src_txt_clean.
      gsub(/\n/,' ').
      gsub(/"/,'\"').
      gsub(/([()])/,'\\\\\1')
    trans=''
    unless auto_translate? == :skip
      require 'timeout'
      Timeout::timeout(60) {
        trans=`trans -b -no-ansi en:#{@md.opt.f_pth[:lng_is]} #{src_txt_clean}`.strip
        unless trans.empty?
          trans + ' {[G.Tr]}http://translate.google.com'
        end
      }
    end
    trans
  rescue
    auto_translate?(:skip)
    p 'timeout issues with translation, skip remaining'
  end
end
block(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 744
def block(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
  mark="block{\\n\\n...\\n\\n}block"
  d=dob_src.is.to_s
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# block text is a text block with an opening and closing marker, } \
    + %{the content of which may be wrapped}
    s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig=dob_src.obj
  trans=((dob_trn=='') \
  || (dob_src.obj == dob_trn.obj)) \
  ? ''
  : "#{s_mark}#{dob_trn.obj}"
  if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
  and trans.empty? \
  and auto_translate?
    trans=auto_translation(dob_src.obj,:src)
  end
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
br() click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 227
def br
  (@md.opt.selections.str =~/--dos/) ? "\r\n" : "\n"  # --unix
end
code(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 810
def code(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document
  mark="code{\\n\\n...\\n\\n}code"
  d=dob_src.is.to_s
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# codeblocks are a text block with an opening and closing marker, } \
    + %{the content of which should remain unwrapped}
    s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig=dob_src.obj
  trans=(dob_trn=='') ? '' : dob_trn.obj
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
group(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 768
def group(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
  mark="group{\\n\\n...\\n\\n}group"
  d=dob_src.is.to_s
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# group text is a text block with an opening and closing marker, } \
    + %{the content of which may be wrapped}
    s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig=dob_src.obj
  trans=((dob_trn=='') \
  || (dob_src.obj == dob_trn.obj)) \
  ? ''
  : "#{s_mark}#{dob_trn.obj}"
  if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
  and trans.empty? \
  and auto_translate?
    trans=auto_translation(dob_src.obj,:src)
  end
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
heading(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 585
def heading(dob_src='',notes_s='',dob_trn='',notes_t='')   #% used to extract the structure of a document
  lv=n=n3=nil
  lv=dob_src.ln
  n=lv - 1
  n3=lv + 2
  util=nil
  fn=(dob_src.name=~/[a-z\d]/i) ? dob_src.name : ''
  mark="#{dob_src.lv}~#{fn} "
  d="#{dob_src.is.to_s} (level #{dob_src.lv})"
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# markup for headings is marker at the start of the line/object, } \
    + %{indicating the heading level, and if provided an associated name tag, } \
    + %{this heading is "#{mark}"}
    s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig="#{s_mark}#{dob_src.obj}"
  trans=((dob_trn=='') \
  || (dob_src.obj == dob_trn.obj)) \
  ? ''
  : "#{s_mark}#{dob_trn.obj}"
  if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
  and trans.empty? \
  and auto_translate?
    trans=auto_translation(dob_src.obj,:src)
  end
  util=pot_structure_wrap(desc,orig,trans)
  wrapped=util.line_wrap
  @pot[:body] << wrapped << br # main text, contents, body KEEP
  if @@endnotes[:para] \
  and notes_s.length > 0 \
  and not @@endnotes_
    @pot[:body] << br
    wrap_endnotes(notes_s,notes_t)
  elsif @@endnotes[:para] \
  and @@endnotes_
    @pot[:body] << br*2
  end
end
idx(dob_src='',dob_trn='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 883
def idx(dob_src='',dob_trn='')                             #% used for book index but broken as original markup lost, already abstracted, fix
  mark="={ ... }"
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# the book index should be attached unwrapped to the preceding text block } \
    + %{(there should be a new line, but no empty line)}
    s_mark="\n# " + %{"\\n#{mark}\\n\\n"}
  end
  d='book-idx'
  desc="#{d}#{s_mark}#{instruct}"
  orig=pot_structure.idx_markup(dob_src.idx) #'={' + dob_src.idx + '}'
  trans=if defined? dob_trn.idx \
  and not dob_trn.idx.nil? \
  and not dob_trn.idx.empty?
    pot_structure.idx_markup(dob_trn.idx) #'={' + dob_trn.idx + '}'
  else ''
  end
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
idx_markup(idx) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 844
def idx_markup(idx)
  struct=['={']
  idx.sort.each do |x|
    x.each_with_index do |y,i0|
      case y
      when String
        struct << ';' unless struct[-1] =~/=\{/
        struct << y
        if x[i0+1].class == Hash \
        and x[i0+1][:sub].length > 0
          struct << ':'
        end
      when Hash
        if y[:plus].to_i > 0
          struct << '+' + y[:plus].to_s
        end
        if y[:sub].length > 0
          y[:sub].each_with_index do |z,i1|
            z.each_with_index do |a,i2|
              #p a
              if z.length > 0
                struct << a[0]
                if a[1][:plus].to_i > 0
                  struct << '+' + a[1][:plus].to_s
                end
                if (i1 + 1) < y[:sub].length
                  struct << '|'
                end
              end
            end
          end
        end
      end
    end
  end
  struct << '}'
  #puts struct.join
  struct.join
end
markup(dob) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 1053
def markup(dob)
  dob,notes=objects.textface_marks_po4a(dob,:separate)
  [dob,notes]
end
para(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 625
def para(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document
  util=nil
  wrapped=if dob_src.indent =~/[1-9]/ \
  and dob_src.indent == dob_src.hang
    s_mark=desc=orig=trans=''
    if dob_src.bullet_
      mark="_#{dob_src.indent}* "
      d="#{dob_src.is.to_s}: indent #{dob_src.indent}, bullet"
      instruct=s_mark=''
      if @md.opt.act[:maintenance][:set]==:on
        instruct=%{\n# markup for indented bullet text is at the start of the line/object, } \
        + %{an underscore followed by the indent level and an asterisk "#{mark}"}
        s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
      end
      desc="#{d}#{s_mark}#{instruct}"
    else
      mark="_#{dob_src.indent} "
      d="#{dob_src.is.to_s}: indent #{dob_src.indent}"
      instruct=s_mark=''
      if @md.opt.act[:maintenance][:set]==:on
        instruct=%{\n# markup for indented text is at the start of the line/object, } \
        + %{an underscore followed by the indent level "#{mark}"}
        s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
      end
      desc="#{d}#{s_mark}#{instruct}"
    end
    orig="#{s_mark}#{dob_src.obj}"
    trans=((dob_trn=='') \
    || (dob_src.obj == dob_trn.obj)) \
    ? ''
    : "#{s_mark}#{dob_trn.obj}"
    if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
    and trans.empty? \
    and auto_translate?
      trans=auto_translation(dob_src.obj,:src)
    end
    util=pot_structure_wrap(desc,orig,trans)
  elsif dob_src.hang =~/[0-9]/ \
  and dob_src.indent != dob_src.hang
    s_mark=desc=orig=trans=''
    mark="_#{dob_src.hang}_#{dob_src.indent} "
    d="#{dob_src.is.to_s}: hang #{dob_src.hang} indent #{dob_src.indent}"
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# markup for indented text with a first line indented } \
      + %{to a different level from the rest of the paragraph, } \
      + %{is at the start of the line/object, } \
      + %{an underscore and the first indent level } \
      + %{a second underscore and the indent level for the rest of the paragraph, "#{mark1}"}
      s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig="#{s_mark}#{dob_src.obj}"
    trans=((dob_trn=='') \
    || (dob_src.obj == dob_trn.obj)) \
    ? ''
    : "#{s_mark}#{dob_trn.obj}"
    if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
    and trans.empty? \
    and auto_translate?
      trans=auto_translation(dob_src.obj,:src)
    end
    util=pot_structure_wrap(desc,orig,trans)
  else
    s_mark=desc=orig=trans=''
    if dob_src.bullet_
      mark='_* '
      d="#{dob_src.is.to_s}: bullet"
      instruct=s_mark=''
      if @md.opt.act[:maintenance][:set]==:on
        instruct=%{\n# markup for indented text is at the start of the line/object, } \
        + %{an underscore followed by an asterisk "#{mark}"}
        s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
      end
      desc="#{d}#{s_mark}#{instruct}"
      orig="#{s_mark}#{dob_src.obj}"
      trans=((dob_trn=='') \
      || (dob_src.obj == dob_trn.obj)) \
      ? ''
      : "#{s_mark}#{dob_trn.obj}"
      if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
      and trans.empty? \
      and auto_translate?
        trans=auto_translation(dob_src.obj,:src)
      end
    else
      mark=''
      d=dob_src.is.to_s
      instruct=%{\n# regular paragraph, no special markup}
      if @md.opt.act[:maintenance][:set]==:on
        instruct="\n# "
        s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
      end
      desc="#{d}#{s_mark}#{instruct}"
      orig=dob_src.obj
      trans=((dob_trn=='') \
      || (dob_src.obj == dob_trn.obj)) \
      ? ''
      : "#{s_mark}#{dob_trn.obj}"
      if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
      and trans.empty? \
      and auto_translate?
        trans=auto_translation(dob_src.obj,:src)
      end
    end
    util=pot_structure_wrap(desc,orig,trans)
  end
  wrapped=util.line_wrap
  @pot[:body] << wrapped << br # main text, contents, body KEEP
  if @@endnotes[:para] \
  and notes_s.length > 0 \
  and not @@endnotes_
    @pot[:body] << br
    wrap_endnotes(notes_s,notes_t)
  elsif @@endnotes[:para] \
  and @@endnotes_
    @pot[:body] << br*2
  end
end
pot_data(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 1016
def pot_data(dob_src='',notes_s='',dob_trn='',notes_t='')
  if dob_src.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
    if defined? dob_src.ocn \
    and dob_src.ocn.to_s =~/\d+/
      paranum=dob_src.ocn.to_s
      @p_num=SiSU_Po4aUtils::ParagraphNumber.new(paranum)
    end
    case dob_src.is
    when :heading
      pot_structure.heading(dob_src,notes_s,dob_trn,notes_t)
    when :para
      pot_structure.para(dob_src,notes_s,dob_trn,notes_t)
    when :group
      pot_structure.group(dob_src,notes_s,dob_trn,notes_t)
    when :block
      pot_structure.block(dob_src,notes_s,dob_trn,notes_t)
    when :verse
      pot_structure.verse(dob_src,notes_s,dob_trn,notes_t)
    when :code
      pot_structure.code(dob_src,notes_s,dob_trn,notes_t)
    when :table
      pot_structure.table(dob_src,notes_s,dob_trn,notes_t)
    end
    if defined? dob_src.idx \
    and not dob_src.idx.nil? \
    and not dob_src.idx.empty?
      pot_structure.idx(dob_src,dob_trn)
    end
    dob_src='' if (dob_src.obj =~/<a name="n\d+">/ \
    and dob_src.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote
    if dob_src ## Clean Prepared Text
      dob_src.obj=dob_src.obj.gsub(/<!.+!>/,' ').
        gsub(/<:\S+>/,' ') if dob_src ## Clean Prepared Text
    end
  end
  #[dob_src,dob_trn]
end
pot_markup(data_src,data_trn) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 906
def pot_markup(data_src,data_trn)
  #@endnotes,@copen,@pot_contents_close=Array.new(3){[]}
  a_l=if data_trn
  a_l=(data_src.length >= data_trn.length) \
  ? data_src.length
  : data_trn.length
  else
    data_src.length
  end
  s,t=0,0
  if @md.fns =~ /\.(?:(?:-|ssm\.)?sst|ssm)$/
    (data_trn.nil?) \
    ? pot_metadata_src
    : pot_metadata_src_trn
  end
  0.upto(a_l-1) do |i|
    if data_trn
      unless data_src[s] \
      and data_trn[t]
        break
      end
      if data_src[s].of == :comment \
      and data_trn[t].of == :comment \
      and (data_src[s].is == data_trn[t].is)
        s+=1;t+=1
        next
      end
      if ((data_src[s].is == :comment) \
      || (data_trn[t].is == :comment)) \
      and (data_src[s].is != data_trn[t].is)
        if data_src[s].is == :comment
          if @md.opt.act[:maintenance][:set]==:on
            puts "src (comment):\n\t" \
            + data_src[s].obj
          end
          s+=1
          #next if data_src[s].is == :comment
        elsif data_trn[t].is == :comment
          if @md.opt.act[:maintenance][:set]==:on
            puts "trans (comment):\n\t" \
            + data_trn[t].obj
          end
          t+=1
          #next if data_trn[t].is == :comment
        end
      end
      if ((defined? data_src[s].ocn) \
      && (data_src[s].ocn.is_a?(Fixnum))) \
      and ((defined? data_trn[t].ocn) \
      && (data_trn[t].ocn.is_a?(Fixnum))) \
      and (data_src[s].ocn == data_trn[t].ocn)
        @m_s,@m_t=s,t
      elsif ((defined? data_src[s].ocn) \
      && (data_src[s].ocn.is_a?(Fixnum))) \
      and ((defined? data_trn[t].ocn) \
      && (data_trn[t].ocn.is_a?(Fixnum))) \
      and (data_src[s].ocn != data_trn[t].ocn)
        p '--- OCN ---'
        p 'mis-match'
        p data_src[s].ocn
        p data_src[s].obj
        p data_trn[t].ocn
        p data_trn[t].obj
        p '---'
        p 'previous match'
        p data_src[@m_s].ocn
        p data_src[@m_s].obj
        p data_trn[@m_t].ocn
        p data_trn[@m_t].obj
        exit
      elsif (((defined? data_src[s].ocn) \
      && (defined? data_trn[t].ocn)) \
      and data_src[s].ocn.class != data_trn[t].ocn.class)
        p '--- OCN class ---'
        p 'mis-match'
        p data_src[s].ocn if defined? data_src[s].ocn
        p data_src[s].obj
        p data_trn[t].ocn if defined? data_trn[t].ocn
        p data_trn[t].obj
        #p '---'
        #p 'previous match'
        #p data_src[@m_s].ocn
        #p data_src[@m_s].obj
        #p data_trn[@m_t].ocn
        #p data_trn[@m_t].obj
      #elsif (defined? data_src[s].ocn != defined? data_trn[t].ocn) \
      #and (data_src[s].ocn.nil? != data_trn[t].ocn.nil?)
      #  p '--- missing OCN? ---'
      #  p 'mis-match'
      #  p data_src[s].ocn if defined? data_src[s].ocn
      #  p data_src[s].obj
      #  p data_trn[t].ocn if defined? data_trn[t].ocn
      #  p data_trn[t].obj
      else
      end
    end
    notes_s,notes_t='',''
    data_src[s],notes_s=markup(data_src[s])
    if data_trn
      data_trn[t],notes_t=markup(data_trn[t])
      #data_src[s],data_trn[t]=pot_data(data_src[s],notes_s,data_trn[t],notes_t)
      pot_data(data_src[s],notes_s,data_trn[t],notes_t)
    else
      #data_src[s],nul=pot_data(data_src[s],notes_s)
      pot_data(data_src[s],notes_s)
    end
    s+=1;t+=1
  end
  @pot #watch
end
pot_metadata_src() click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 296
def pot_metadata_src
  @po4a_identify_type='type: SiSU doc' #'type: Plain text'
  meta_src=SiSU_Metadata::Summary.new(@md_src)
  w=[]
  w << [
    "#. #{@po4a_identify_type} - metadata: title",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.title.main,
    meta_src.metadata_tags.title.sub,
    meta_src.metadata_tags.title.edition,
    meta_src.metadata_tags.title.note,
    meta_src.metadata_tags.title.short,
    meta_src.metadata_tags.title.language,
    meta_src.metadata_tags.title.language_char,
    'msgstr ""',
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: creator",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.creator.head,
    meta_src.metadata_tags.creator.author,
    meta_src.metadata_tags.creator.contributor,
    meta_src.metadata_tags.creator.illustrator,
    meta_src.metadata_tags.creator.photographer,
    meta_src.metadata_tags.creator.translator,
    meta_src.metadata_tags.creator.audio,
    meta_src.metadata_tags.creator.digitized_by,
    meta_src.metadata_tags.creator.prepared_by,
    'msgstr ""',
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: rights",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.rights.head,
    meta_src.metadata_tags.rights.copyright.text,
    meta_src.metadata_tags.rights.copyright.translation,
    meta_src.metadata_tags.rights.copyright.illustrations,
    meta_src.metadata_tags.rights.copyright.photographs,
    meta_src.metadata_tags.rights.copyright.digitization,
    meta_src.metadata_tags.rights.copyright.audio,
    meta_src.metadata_tags.rights.license,
    'msgstr ""',
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: classify",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.classify.head,
    meta_src.metadata_tags.classify.subject,
    meta_src.metadata_tags.classify.topic_register,
    meta_src.metadata_tags.classify.loc,
    meta_src.metadata_tags.classify.dewey,
    #meta_src.metadata_tags.notes.relation,
    #meta_src.metadata_tags.notes.type,
    #meta_src.metadata_tags.identifier.oclc,
    #meta_src.metadata_tags.identifier.isbn,
    'msgstr ""',
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: date",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.date.head,
    meta_src.metadata_tags.date.added_to_site,
    meta_src.metadata_tags.date.available,
    meta_src.metadata_tags.date.created,
    meta_src.metadata_tags.date.issued,
    meta_src.metadata_tags.date.modified,
    meta_src.metadata_tags.date.published,
    meta_src.metadata_tags.date.valid,
    'msgstr ""',
  ]
  w << [
    "#. #{@po4a_identify_type} - processing, make instruction",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.processing_tags.make.language,
    meta_src.processing_tags.make.headings,
    meta_src.processing_tags.make.num_top,
    meta_src.processing_tags.make.breaks,
    meta_src.processing_tags.make.emphasis,
    meta_src.processing_tags.make.bold,
    meta_src.processing_tags.make.italics,
    meta_src.processing_tags.make.texpdf_font,
    'msgstr ""',
  ]
  w.each do |y|
    z=''
    y.each do |x|
      if x
        z += x + "\n" if x =~/^#|^msg(?:id|str)/
        z += %{"#{x}"\n} if x =~/^@\S+?:(?: |$)/
        z += %{"#{x}"\n} if x =~/^\s+:\S+?: /
      end
    end
    @pot[:metadata] << z << br
    #puts z unless z.empty?
  end
end
pot_metadata_src_trn() click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 398
def pot_metadata_src_trn
  @po4a_identify_type='type: SiSU doc'
  #@po4a_identify_type='type: Plain text'
  meta_src=SiSU_Metadata::Summary.new(@md_src)
  meta_trn=SiSU_Metadata::Summary.new(@md_trn)
  w=[]
  w << [
    "#. #{@po4a_identify_type} - metadata: title",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.title.main,
    meta_src.metadata_tags.title.sub,
    meta_src.metadata_tags.title.edition,
    meta_src.metadata_tags.title.note,
    meta_src.metadata_tags.title.short,
    meta_src.metadata_tags.title.language,
    meta_src.metadata_tags.title.language_char,
    'msgstr ""',
    meta_trn.metadata_tags.title.main,
    meta_trn.metadata_tags.title.sub,
    meta_trn.metadata_tags.title.edition,
    meta_trn.metadata_tags.title.note,
    meta_trn.metadata_tags.title.short,
    meta_trn.metadata_tags.title.language,
    meta_trn.metadata_tags.title.language_char,
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: creator",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.creator.head,
    meta_src.metadata_tags.creator.author,
    meta_src.metadata_tags.creator.contributor,
    meta_src.metadata_tags.creator.illustrator,
    meta_src.metadata_tags.creator.photographer,
    meta_src.metadata_tags.creator.translator,
    meta_src.metadata_tags.creator.audio,
    meta_src.metadata_tags.creator.digitized_by,
    meta_src.metadata_tags.creator.prepared_by,
    'msgstr ""',
    meta_trn.metadata_tags.creator.head,
    meta_trn.metadata_tags.creator.author,
    meta_trn.metadata_tags.creator.contributor,
    meta_trn.metadata_tags.creator.illustrator,
    meta_trn.metadata_tags.creator.photographer,
    meta_trn.metadata_tags.creator.translator,
    meta_trn.metadata_tags.creator.audio,
    meta_trn.metadata_tags.creator.digitized_by,
    meta_trn.metadata_tags.creator.prepared_by,
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: rights",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.rights.head,
    meta_src.metadata_tags.rights.copyright.text,
    meta_src.metadata_tags.rights.copyright.translation,
    meta_src.metadata_tags.rights.copyright.illustrations,
    meta_src.metadata_tags.rights.copyright.photographs,
    meta_src.metadata_tags.rights.copyright.digitization,
    meta_src.metadata_tags.rights.copyright.audio,
    meta_src.metadata_tags.rights.license,
    'msgstr ""',
    meta_trn.metadata_tags.rights.head,
    meta_trn.metadata_tags.rights.copyright.text,
    meta_trn.metadata_tags.rights.copyright.translation,
    meta_trn.metadata_tags.rights.copyright.illustrations,
    meta_trn.metadata_tags.rights.copyright.photographs,
    meta_trn.metadata_tags.rights.copyright.digitization,
    meta_trn.metadata_tags.rights.copyright.audio,
    meta_trn.metadata_tags.rights.license,
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: classify",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.classify.head,
    meta_src.metadata_tags.classify.subject,
    meta_src.metadata_tags.classify.topic_register,
    meta_src.metadata_tags.classify.loc,
    meta_src.metadata_tags.classify.dewey,
    #meta_src.metadata_tags.notes.relation,
    #meta_src.metadata_tags.notes.type,
    #meta_src.metadata_tags.identifier.oclc,
    #meta_src.metadata_tags.identifier.isbn,
    'msgstr ""',
    meta_trn.metadata_tags.classify.head,
    meta_trn.metadata_tags.classify.subject,
    meta_trn.metadata_tags.classify.topic_register,
    meta_trn.metadata_tags.classify.loc,
    meta_trn.metadata_tags.classify.dewey,
    #meta_trn.metadata_tags.notes.relation,
    #meta_trn.metadata_tags.notes.type,
    #meta_trn.metadata_tags.identifier.oclc,
    #meta_trn.metadata_tags.identifier.isbn,
  ]
  w << [
    "#. #{@po4a_identify_type} - metadata: date",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.metadata_tags.date.head,
    meta_src.metadata_tags.date.added_to_site,
    meta_src.metadata_tags.date.available,
    meta_src.metadata_tags.date.created,
    meta_src.metadata_tags.date.issued,
    meta_src.metadata_tags.date.modified,
    meta_src.metadata_tags.date.published,
    meta_src.metadata_tags.date.valid,
    'msgstr ""',
    meta_trn.metadata_tags.date.head,
    meta_trn.metadata_tags.date.added_to_site,
    meta_trn.metadata_tags.date.available,
    meta_trn.metadata_tags.date.created,
    meta_trn.metadata_tags.date.issued,
    meta_trn.metadata_tags.date.modified,
    meta_trn.metadata_tags.date.published,
    meta_trn.metadata_tags.date.valid,
  ]
  w << [
    "#. #{@po4a_identify_type} - processing, make instruction",
    "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}",
    'msgid ""',
    meta_src.processing_tags.make.language,
    meta_src.processing_tags.make.headings,
    meta_src.processing_tags.make.num_top,
    meta_src.processing_tags.make.breaks,
    meta_src.processing_tags.make.emphasis,
    meta_src.processing_tags.make.bold,
    meta_src.processing_tags.make.italics,
    meta_src.processing_tags.make.texpdf_font,
    'msgstr ""',
    meta_trn.processing_tags.make.language,
    meta_trn.processing_tags.make.headings,
    meta_trn.processing_tags.make.num_top,
    meta_trn.processing_tags.make.breaks,
    meta_trn.processing_tags.make.emphasis,
    meta_trn.processing_tags.make.bold,
    meta_trn.processing_tags.make.italics,
    meta_trn.processing_tags.make.texpdf_font,
  ]
  w.each do |y|
    z=''
    y.each do |x|
      if x
        z += x + "\n" if x =~/^#|^msg(?:id|str)/
        z += %{"#{x}"\n} if x =~/^@\S+?:(?: |$)/
        z += %{"#{x}"\n} if x =~/^\s+:\S+?: /
      end
    end
    @pot[:metadata] << z << br
    #puts z unless z.empty?
  end
end
pot_structure() click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 584
def pot_structure
  def heading(dob_src='',notes_s='',dob_trn='',notes_t='')   #% used to extract the structure of a document
    lv=n=n3=nil
    lv=dob_src.ln
    n=lv - 1
    n3=lv + 2
    util=nil
    fn=(dob_src.name=~/[a-z\d]/i) ? dob_src.name : ''
    mark="#{dob_src.lv}~#{fn} "
    d="#{dob_src.is.to_s} (level #{dob_src.lv})"
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# markup for headings is marker at the start of the line/object, } \
      + %{indicating the heading level, and if provided an associated name tag, } \
      + %{this heading is "#{mark}"}
      s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig="#{s_mark}#{dob_src.obj}"
    trans=((dob_trn=='') \
    || (dob_src.obj == dob_trn.obj)) \
    ? ''
    : "#{s_mark}#{dob_trn.obj}"
    if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
    and trans.empty? \
    and auto_translate?
      trans=auto_translation(dob_src.obj,:src)
    end
    util=pot_structure_wrap(desc,orig,trans)
    wrapped=util.line_wrap
    @pot[:body] << wrapped << br # main text, contents, body KEEP
    if @@endnotes[:para] \
    and notes_s.length > 0 \
    and not @@endnotes_
      @pot[:body] << br
      wrap_endnotes(notes_s,notes_t)
    elsif @@endnotes[:para] \
    and @@endnotes_
      @pot[:body] << br*2
    end
  end
  def para(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document
    util=nil
    wrapped=if dob_src.indent =~/[1-9]/ \
    and dob_src.indent == dob_src.hang
      s_mark=desc=orig=trans=''
      if dob_src.bullet_
        mark="_#{dob_src.indent}* "
        d="#{dob_src.is.to_s}: indent #{dob_src.indent}, bullet"
        instruct=s_mark=''
        if @md.opt.act[:maintenance][:set]==:on
          instruct=%{\n# markup for indented bullet text is at the start of the line/object, } \
          + %{an underscore followed by the indent level and an asterisk "#{mark}"}
          s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
        end
        desc="#{d}#{s_mark}#{instruct}"
      else
        mark="_#{dob_src.indent} "
        d="#{dob_src.is.to_s}: indent #{dob_src.indent}"
        instruct=s_mark=''
        if @md.opt.act[:maintenance][:set]==:on
          instruct=%{\n# markup for indented text is at the start of the line/object, } \
          + %{an underscore followed by the indent level "#{mark}"}
          s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
        end
        desc="#{d}#{s_mark}#{instruct}"
      end
      orig="#{s_mark}#{dob_src.obj}"
      trans=((dob_trn=='') \
      || (dob_src.obj == dob_trn.obj)) \
      ? ''
      : "#{s_mark}#{dob_trn.obj}"
      if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
      and trans.empty? \
      and auto_translate?
        trans=auto_translation(dob_src.obj,:src)
      end
      util=pot_structure_wrap(desc,orig,trans)
    elsif dob_src.hang =~/[0-9]/ \
    and dob_src.indent != dob_src.hang
      s_mark=desc=orig=trans=''
      mark="_#{dob_src.hang}_#{dob_src.indent} "
      d="#{dob_src.is.to_s}: hang #{dob_src.hang} indent #{dob_src.indent}"
      instruct=s_mark=''
      if @md.opt.act[:maintenance][:set]==:on
        instruct=%{\n# markup for indented text with a first line indented } \
        + %{to a different level from the rest of the paragraph, } \
        + %{is at the start of the line/object, } \
        + %{an underscore and the first indent level } \
        + %{a second underscore and the indent level for the rest of the paragraph, "#{mark1}"}
        s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
      end
      desc="#{d}#{s_mark}#{instruct}"
      orig="#{s_mark}#{dob_src.obj}"
      trans=((dob_trn=='') \
      || (dob_src.obj == dob_trn.obj)) \
      ? ''
      : "#{s_mark}#{dob_trn.obj}"
      if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
      and trans.empty? \
      and auto_translate?
        trans=auto_translation(dob_src.obj,:src)
      end
      util=pot_structure_wrap(desc,orig,trans)
    else
      s_mark=desc=orig=trans=''
      if dob_src.bullet_
        mark='_* '
        d="#{dob_src.is.to_s}: bullet"
        instruct=s_mark=''
        if @md.opt.act[:maintenance][:set]==:on
          instruct=%{\n# markup for indented text is at the start of the line/object, } \
          + %{an underscore followed by an asterisk "#{mark}"}
          s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
        end
        desc="#{d}#{s_mark}#{instruct}"
        orig="#{s_mark}#{dob_src.obj}"
        trans=((dob_trn=='') \
        || (dob_src.obj == dob_trn.obj)) \
        ? ''
        : "#{s_mark}#{dob_trn.obj}"
        if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
        and trans.empty? \
        and auto_translate?
          trans=auto_translation(dob_src.obj,:src)
        end
      else
        mark=''
        d=dob_src.is.to_s
        instruct=%{\n# regular paragraph, no special markup}
        if @md.opt.act[:maintenance][:set]==:on
          instruct="\n# "
          s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
        end
        desc="#{d}#{s_mark}#{instruct}"
        orig=dob_src.obj
        trans=((dob_trn=='') \
        || (dob_src.obj == dob_trn.obj)) \
        ? ''
        : "#{s_mark}#{dob_trn.obj}"
        if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
        and trans.empty? \
        and auto_translate?
          trans=auto_translation(dob_src.obj,:src)
        end
      end
      util=pot_structure_wrap(desc,orig,trans)
    end
    wrapped=util.line_wrap
    @pot[:body] << wrapped << br # main text, contents, body KEEP
    if @@endnotes[:para] \
    and notes_s.length > 0 \
    and not @@endnotes_
      @pot[:body] << br
      wrap_endnotes(notes_s,notes_t)
    elsif @@endnotes[:para] \
    and @@endnotes_
      @pot[:body] << br*2
    end
  end
  def block(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
    mark="block{\\n\\n...\\n\\n}block"
    d=dob_src.is.to_s
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# block text is a text block with an opening and closing marker, } \
      + %{the content of which may be wrapped}
      s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig=dob_src.obj
    trans=((dob_trn=='') \
    || (dob_src.obj == dob_trn.obj)) \
    ? ''
    : "#{s_mark}#{dob_trn.obj}"
    if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
    and trans.empty? \
    and auto_translate?
      trans=auto_translation(dob_src.obj,:src)
    end
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  def group(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
    mark="group{\\n\\n...\\n\\n}group"
    d=dob_src.is.to_s
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# group text is a text block with an opening and closing marker, } \
      + %{the content of which may be wrapped}
      s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig=dob_src.obj
    trans=((dob_trn=='') \
    || (dob_src.obj == dob_trn.obj)) \
    ? ''
    : "#{s_mark}#{dob_trn.obj}"
    if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
    and trans.empty? \
    and auto_translate?
      trans=auto_translation(dob_src.obj,:src)
    end
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  def verse(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
    mark="poem{\n\nverse\n\nverse\n\n...\n\n}poem"
    d=dob_src.is.to_s
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# verse are part of the text block described as a poem, } \
      + %{the first verse is preceeded by an opening marker, } \
      + %{and the last verse by a closing marker, } \
      + %{the content of which should remain unwrapped}
      s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig=dob_src.obj
    trans=(dob_trn=='') ? '' : dob_trn.obj
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  def code(dob_src='',notes_s='',dob_trn='',notes_t='')      #% used to extract the structure of a document
    mark="code{\\n\\n...\\n\\n}code"
    d=dob_src.is.to_s
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# codeblocks are a text block with an opening and closing marker, } \
      + %{the content of which should remain unwrapped}
      s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig=dob_src.obj
    trans=(dob_trn=='') ? '' : dob_trn.obj
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  def table(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
    mark="table{\\n\\n...\\n\\n}table"
    d=dob_src.is.to_s
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# tables are a text block with an opening and closing marker, } \
      + %{the content of which should remain unwrapped}
      s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
    end
    desc="#{d}#{s_mark}#{instruct}"
    orig=dob_src.obj
    orig=orig.gsub(/#{Mx[:tc_c]}/,"\n")
    trans=(dob_trn=='') ? '' : dob_trn.obj
    trans=trans.gsub(/#{Mx[:tc_c]}/,"\n")
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  def idx_markup(idx)
    struct=['={']
    idx.sort.each do |x|
      x.each_with_index do |y,i0|
        case y
        when String
          struct << ';' unless struct[-1] =~/=\{/
          struct << y
          if x[i0+1].class == Hash \
          and x[i0+1][:sub].length > 0
            struct << ':'
          end
        when Hash
          if y[:plus].to_i > 0
            struct << '+' + y[:plus].to_s
          end
          if y[:sub].length > 0
            y[:sub].each_with_index do |z,i1|
              z.each_with_index do |a,i2|
                #p a
                if z.length > 0
                  struct << a[0]
                  if a[1][:plus].to_i > 0
                    struct << '+' + a[1][:plus].to_s
                  end
                  if (i1 + 1) < y[:sub].length
                    struct << '|'
                  end
                end
              end
            end
          end
        end
      end
    end
    struct << '}'
    #puts struct.join
    struct.join
  end
  def idx(dob_src='',dob_trn='')                             #% used for book index but broken as original markup lost, already abstracted, fix
    mark="={ ... }"
    instruct=s_mark=''
    if @md.opt.act[:maintenance][:set]==:on
      instruct=%{\n# the book index should be attached unwrapped to the preceding text block } \
      + %{(there should be a new line, but no empty line)}
      s_mark="\n# " + %{"\\n#{mark}\\n\\n"}
    end
    d='book-idx'
    desc="#{d}#{s_mark}#{instruct}"
    orig=pot_structure.idx_markup(dob_src.idx) #'={' + dob_src.idx + '}'
    trans=if defined? dob_trn.idx \
    and not dob_trn.idx.nil? \
    and not dob_trn.idx.empty?
      pot_structure.idx_markup(dob_trn.idx) #'={' + dob_trn.idx + '}'
    else ''
    end
    util=pot_structure_wrap(desc,orig,trans)
    unwrapped=util.no_line_wrap_block
    @pot[:body] << unwrapped << br
  end
  self
end
pot_structure_wrap(desc,orig,trans,indent=0,hang=0) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 235
def pot_structure_wrap(desc,orig,trans,indent=0,hang=0)
  SiSU_Po4aUtils::Wrap.new(
    @md,
    orig,
    trans,
    desc,
    @wrap_width,
    indent,
    hang
  )
end
publish(fn,pot) click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 1057
def publish(fn,pot)
  content=[]
  content << pot[:open]
  content << pot[:head]
  content << pot[:metadata]
  content << pot[:body]
  content << @@endnotes[:end] if @@endnotes_
  Output.new(fn,content,@md,@process).po4a
  @@endnotes={ para: [], end: [] }
end
songsheet() click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 230
def songsheet
  fn=@fn
  pot=pot_markup(@data_src,@data_trn)
  publish(fn,pot)
end
table(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 826
def table(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
  mark="table{\\n\\n...\\n\\n}table"
  d=dob_src.is.to_s
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# tables are a text block with an opening and closing marker, } \
    + %{the content of which should remain unwrapped}
    s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig=dob_src.obj
  orig=orig.gsub(/#{Mx[:tc_c]}/,"\n")
  trans=(dob_trn=='') ? '' : dob_trn.obj
  trans=trans.gsub(/#{Mx[:tc_c]}/,"\n")
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
verse(dob_src='',notes_s='',dob_trn='',notes_t='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 792
def verse(dob_src='',notes_s='',dob_trn='',notes_t='')     #% used to extract the structure of a document
  mark="poem{\n\nverse\n\nverse\n\n...\n\n}poem"
  d=dob_src.is.to_s
  instruct=s_mark=''
  if @md.opt.act[:maintenance][:set]==:on
    instruct=%{\n# verse are part of the text block described as a poem, } \
    + %{the first verse is preceeded by an opening marker, } \
    + %{and the last verse by a closing marker, } \
    + %{the content of which should remain unwrapped}
    s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
  end
  desc="#{d}#{s_mark}#{instruct}"
  orig=dob_src.obj
  trans=(dob_trn=='') ? '' : dob_trn.obj
  util=pot_structure_wrap(desc,orig,trans)
  unwrapped=util.no_line_wrap_block
  @pot[:body] << unwrapped << br
end
wrap_endnotes(orig_notes='',trn_notes='') click to toggle source
# File lib/sisu/src_po4a_shelf.rb, line 246
      def wrap_endnotes(orig_notes='',trn_notes='')
        nt=@@endnotes_ ? 'endnote' : 'footnote'
        @fn=0
        a_l=orig_notes.length
        0.upto(a_l-1) do |i|
          @fn=if orig_notes[i].to_s =~/^\^~([\d*+]+)/ # provides endnote number within paragraph
            @fn += 1
          else @fn
          end
          d="#{nt} #{@fn}"
          mark="^~ "
          instruct=s_mark=''
          if @md.opt.act[:maintenance][:set]==:on
            instruct=%{\n# footnotes, the preferred sisu markup for a footnote is~{this is a footnote}~ } \
            + %{however, for translation a footnote reference marker in the text~^ } \
            + %{with a set of notes following the paragraph starting on a newline with "^~ this is a footnote", } \
            + %{is easier to deal with, if possible these should be converted back to~{inline notes}~}
            s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"}
          end
          desc="#{d}#{s_mark}#{instruct}"
          orig=(orig_notes[i].to_s =~/^\^~[\d*+]+/) \
          ? (orig_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~'))
          : orig_notes[i].to_s
          trans=if trn_notes.is_a?(Array) \
          and trn_notes.length==orig_notes.length
            (trn_notes[i].to_s =~/^\^~[\d*+]+/) \
            ? (trn_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~'))
            : trn_notes[i].to_s
          else ''
          end
          util=pot_structure_wrap(desc,orig,trans)
          wrap=util.line_wrap
          wrap=if wrap =~ /^\s*\^~[\d*+]+\s+.+?\s*\Z/m
            wrap.gsub(/^\s*(\^~[\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB
\\1 \\2
GSUB
                      )
          else
            wrap.gsub(/^(.+)\Z/m, <<GSUB
\\1
GSUB
                      )
          end
          @@endnotes[:para] << wrap
          @@endnotes[:end] << '' << wrap
        end
        @@endnotes[:para].each {|e| @pot[:body] << e << br}
        @@endnotes[:para]=[]
        @@endnotes
      end