class SiSU_XML_SAX::Source::Scroll

Public Class Methods

new(particulars) click to toggle source
# File lib/sisu/xml_sax.rb, line 161
def initialize(particulars)
  @env,             @md,           @ao_arr=
    particulars.env,particulars.md,particulars.ao_array
  @trans=SiSU_XML_Munge::Trans.new(@md)
  @sys=SiSU_Env::SystemCall.new
  @per=SiSU_XML_Persist::Persist.new
end

Public Instance Methods

songsheet() click to toggle source
# File lib/sisu/xml_sax.rb, line 168
def songsheet
  begin
    pre
    @data=markup(@ao_arr)
    post
    publish
  ensure
    SiSU_XML_Persist::Persist.new.persist_init
  end
end

Protected Instance Methods

block_structure(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 275
def block_structure(dob='')
  extract_endnotes(dob)
  dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
    gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean
  dob=@trans.markup_block(dob)
  dob.obj=dob.obj.strip
  @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
  @per.body << %{#{Ax[:tab]*1}<text class="block">#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*1}</text>}
  @per.body << "#{Ax[:tab]*0}</object>"
  @per.body << @endnotes if @endnotes
  @endnotes=[]
end
code_structure(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 316
def code_structure(dob='')
  dob=@trans.markup_group(dob)
  dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
  @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
  @per.body << %{#{Ax[:tab]*1}<text class="code">#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*1}</text>}
  @per.body << "#{Ax[:tab]*0}</object>"
end
embedded_endnotes(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 179
def embedded_endnotes(dob='')
  dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,
      '<endnote><number>\1</number><note>\2</note></endnote> ').
    gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/,
      '<endnote><symbol>\1</symbol><note>\2</note></endnote> ').
    gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/,
      '<endnote><symbol>\1</symbol><note>\2</note></endnote> ')
end
extract_endnotes(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 187
      def extract_endnotes(dob='')
        notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
        notes.flatten.each do |e|
          s=e.to_s
          util=SiSU_TextUtils::Wrap.new(s,70)
          wrap=util.line_wrap
          wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK
#{Ax[:tab]*1}<endnote notenumber="\\1">
#{Ax[:tab]*2}<number>\\1</number>
#{Ax[:tab]*2}<note>
#{Ax[:tab]*3}\\2
#{Ax[:tab]*2}</note>
#{Ax[:tab]*1}</endnote>
WOK
).
            gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK
#{Ax[:tab]*1}<endnote symbol="\\1">
#{Ax[:tab]*2}<symbol>\\1</symbol>
#{Ax[:tab]*2}<note>
#{Ax[:tab]*3}\\2
#{Ax[:tab]*2}</note>
#{Ax[:tab]*1}</endnote>
WOK
).
            gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK
#{Ax[:tab]*1}<endnote symbol="\\1.length">
#{Ax[:tab]*2}<symbol>\\1</symbol>
#{Ax[:tab]*2}<note>
#{Ax[:tab]*3}\\2
#{Ax[:tab]*2}</note>
#{Ax[:tab]*1}</endnote>
WOK
)
          @endnotes << wrap
        end
      end
group_structure(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 290
def group_structure(dob='')
  extract_endnotes(dob)
  dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
    gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean
  dob=@trans.markup_group(dob)
  dob.obj=dob.obj.strip
  @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
  @per.body << %{#{Ax[:tab]*1}<text class="group">#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*1}</text>}
  @per.body << "#{Ax[:tab]*0}</object>"
  @per.body << @endnotes if @endnotes
  @endnotes=[]
end
markup(data) click to toggle source
# File lib/sisu/xml_sax.rb, line 340
      def markup(data)
        xml_sc(@md)
        @endnotes,@level,@cont,@copen,@xml_contents_close=[],[],[],[],[]
        @rcdc=false
        xml_head
        (0..7).each { |x| @cont[x]=@level[x]=false }
        (4..7).each { |x| @xml_contents_close[x]='' }
        data.each do |dob|
          @trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8
          dob=@trans.markup(dob)
          if @rcdc==false \
          and (dob.is ==:meta \
          and dob.obj =~/Document Information/)
            @rcdc=true
          end
          if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
            if defined? dob.ocn #look to move to format section
              ocn=((dob.ocn.to_s =~/\d+/) ? dob.ocn : nil)
              @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,ocn)
            end
            if not @rcdc
              if defined? dob.ocn \
              and dob.ocn.to_s =~/\d+/
                x=SiSU_XML_Format::FormatSeg.new(@md,dob)
                if dob.is==:heading
                  xml_structure(dob)
                  dob.obj=case dob.ln
                  when 1 then x.heading_body1
                  when 2 then x.heading_body2
                  when 3 then x.heading_body3
                  when 4 then x.heading_body4
                  when 5 then x.heading_body5
                  when 6 then x.heading_body6
                  when 7 then x.heading_body7
                  end
                else
                  if dob.is==:verse
                    poem_structure(dob)
                  elsif dob.is==:group
                    group_structure(dob)
                  elsif dob.is==:block
                    block_structure(dob)
                  elsif dob.is==:code
                    code_structure(dob)
                  elsif dob.is==:table # FIX, check css, will need to modify
                    table_structure(dob)
                  elsif dob.is ==:para \
                  and dob.indent.to_s =~/[1-9]/ \
                  and dob.bullet_==true
                    xml_structure(dob,"indent_bullet#{dob.indent}")
                  elsif dob.is ==:para \
                  and dob.indent.to_s =~/[1-9]/ \
                  and dob.indent == dob.hang
                    xml_structure(dob,"indent#{dob.indent}")
                  elsif dob.is ==:para \
                  and dob.hang.to_s =~/[0-9]/ \
                  and dob.indent != dob.hang
                    xml_structure(dob,"hang#{dob.hang.to_s}_indent#{dob.indent.to_s}")
                  else xml_structure(dob)
                  end
                end
              elsif dob.obj =~/(#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
              elsif dob.obj =~/MetaData/
                txt_obj={ txt: '<br /><a name="metadata">MetaData</a>' }
                format_scroll=FormatScroll.new(@md,txt_obj)
                dob.obj=format_scroll.bold_para
              elsif dob.obj =~/(Owner Details)/
#               txt_obj={ txt: '<br /><a name="owner.details">Owner Details</a>' }
#               format_scroll=FormatScroll.new(@md,txt_obj)
#               @per.owner_details=format_scroll.bold_para
                dob.obj=''
              end
              if dob.obj =~/<a name="n\d+">/ \
              and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
                dob.obj=''
              end
              if dob.obj =~/.*<:#>.*$/ #investigate removal
                dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/
                  txt_obj={ txt: dob }
                  format_text=FormatTextObject.new(@md,txt_obj)
                  format_text.scr_inden_ocn_e_no_paranum
                end
              end
            else #
            end
            dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
          end
        end
        7.downto(4) do |x|
          y=x - 1; v=x - 3
          @per.body << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" if @level[x]==true
        end
        3.downto(1) do |x|
          y=x - 1
          @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
        end
        #7.downto(1) { |x| y=x - 1; @per.body << "#{Ax[:tab]*y}</level #{x}>" if @level[x]==true }
      end
poem_structure(dob='') click to toggle source
# File lib/sisu/xml_sax.rb, line 305
def poem_structure(dob='')
  dob=@trans.markup_group(dob)
  #dob.obj.gsub(/\s\s/,'&#160;&#160;')
  dob.obj=dob.obj.strip
  @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
  @per.body << %{#{Ax[:tab]*1}<text class="verse">#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*1}</text>}
  @per.body << %{#{Ax[:tab]*0}</object>}
end
post() click to toggle source
# File lib/sisu/xml_sax.rb, line 454
def post
  @per.head << @per.sc
  @per.head << '</head>'
  @per.body << '</body>'
  @per.close = '</document>'
end
pre() click to toggle source
# File lib/sisu/xml_sax.rb, line 438
      def pre
        rdf=SiSU_XML_Tags::RDF.new(@md)
        @per.head,@per.body=[],[]
        stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xml_sax').stylesheet
        encoding=if @sys.locale =~/utf-?8/i then '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
        else                                     '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>'
        end
        @per.open =<<WOK
#{encoding}
#{stylesheet.css_head_xml}
#{rdf.comment_xml}
<document>
WOK
        @per.head << '<head>'
        @per.body << '<body>'
      end
publish() click to toggle source
# File lib/sisu/xml_sax.rb, line 460
def publish
  content=[]
  content << @per.open << @per.head << @per.body #<< @per.metadata
  #content << @per.owner_details if @md.stmp =~/\w\w/
  content << @per.tail << @per.close
  content=content.flatten.compact
  Output.new(content,@md).xml
  @@xml={}
end
table_structure(dob) click to toggle source
# File lib/sisu/xml_sax.rb, line 326
def table_structure(dob)
  table=SiSU_XHTML_Shared::TableXHTML.new(dob)
  @per.body << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  @per.body << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
  @per.body << %{#{Ax[:tab]*1}<text class="table">#{Ax[:tab]*1}}
  @per.body << %{#{Ax[:tab]*2}#{table.table.obj}}
  @per.body << %{#{Ax[:tab]*1}</text>}
  #@per.body << %{#{tab*1}</text>}
  @per.body << "#{Ax[:tab]*0}</object>"
 #@per.body << %{#{Ax[:tab]*0}<object id="#{ocn}">}
 #@per.body << %{#{Ax[:tab]*1}#{table}\n#{Ax[:tab]*1}} # unless lv  # main text, contents, body KEEP
 #@per.body << "#{Ax[:tab]*0}</object>"
 #@endnotes=[]
end
xml_head() click to toggle source
# File lib/sisu/xml_sax.rb, line 223
def xml_head
  metadata=SiSU_Metadata::Summary.new(@md).xml_sax.metadata
  @per.head << metadata
end
xml_sc(md='') click to toggle source
# File lib/sisu/xml_sax.rb, line 227
      def xml_sc(md='')
        sc=if @md.sc_info
          <<WOK
    <source_control>
      <meta>filename:</meta>
      <sc class="sourcefile">
        #{@md.sc_filename}
      </sc><br />
      <meta>version number:</meta>
      <sc class="number">
        #{@md.sc_number}
      </sc><br />
      <meta>version date:</meta>
      <sc class="date">
        #{@md.sc_date}
      </sc><br />
    </source_control>
WOK
        else ''
        end
        @per.sc=sc
      end
xml_structure(dob,type='norm') click to toggle source
# File lib/sisu/xml_sax.rb, line 249
def xml_structure(dob,type='norm')
  if dob.is==:heading
    lv=dob.ln
    dob.ln + 2
  else lv=nil
  end
  extract_endnotes(dob)
  dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean
    gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean
  #if defined? dob.obj
  #t_ograph="#{dob.obj}"
  util=SiSU_TextUtils::Wrap.new(dob.obj,70)
  wrapped=util.line_wrap
  #end
  @per.body << if defined? dob.ocn; %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
  else                              "#{Ax[:tab]*0}<object>"
  end
  @per.body << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
  @per.body << if lv; %{#{Ax[:tab]*1}<text class="h#{lv}">\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>}
  else                   %{#{Ax[:tab]*1}<text class="#{type}">\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} # main text, contents, body KEEP
  end
  @per.body << @endnotes if @endnotes
  ##@per.body << "#{Ax[:tab]*1}<text>#{dob[@regx,2]}</text>" if dob[@regx,2] # old unwrapped main text, contents, body KEEP
  @per.body << "#{Ax[:tab]*0}</object>"
  @endnotes=[]
end