class SiSU_XHTML::Source::Scroll

Public Class Methods

new(particulars) click to toggle source
# File lib/sisu/xhtml.rb, line 146
def initialize(particulars)
  @env,@md,@ao_array=particulars.env,particulars.md,particulars.ao_array
  @tab="\t"
  @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/xhtml.rb, line 153
def songsheet
  begin
    pre
    @data=markup(@ao_array)
    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/xhtml.rb, line 246
def block_structure(dob)
  named=name_tags(dob)
  dob=@trans.markup_block(dob)
  dob.obj=dob.obj.strip.
    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
  @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">#{named}#{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
code_structure(dob) click to toggle source
# File lib/sisu/xhtml.rb, line 283
def code_structure(dob)
  named=name_tags(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">#{named}#{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/xhtml.rb, line 164
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/xhtml.rb, line 172
      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}\\1. \\2
#{Ax[:tab]*1}</endnote>
WOK
).
            gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK
#{Ax[:tab]*1}<endnote symbol="\\1">
#{Ax[:tab]*2}\\1 \\2
#{Ax[:tab]*1}</endnote>
WOK
).
            gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK
#{Ax[:tab]*1}<endnote symbol="\\1.length">
#{Ax[:tab]*2}\\1 \\2
#{Ax[:tab]*1}</endnote>
WOK
)
#KEEP alternative presentation of endnotes
#        wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK
##{Ax[:tab]*1}<p class="endnote" notenumber="\\1">
##{Ax[:tab]*2}\\1. \\2
##{Ax[:tab]*1}</p>
#WOK
#)
          @endnotes << wrap
        end
      end
group_structure(dob) click to toggle source
# File lib/sisu/xhtml.rb, line 259
def group_structure(dob)
  named=name_tags(dob)
  dob=@trans.markup_group(dob)
  dob.obj=dob.obj.strip.
    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
  @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">#{named}#{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
markup(data) click to toggle source
# File lib/sisu/xhtml.rb, line 302
def markup(data)
  @endnotes=[]
  @rcdc=false
  @level,@cont,@copen,@xml_contents_close=[],[],[],[]
  xml_head
  (0..7).each { |x| @cont[x]=@level[x]=false }
  (4..7).each { |x| @xml_contents_close[x]='' }
  data.each do |dob|
    dob=@trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8
    dob=@trans.markup(dob)
    if @rcdc==false \
    and (dob.obj =~/~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
        x=SiSU_XML_Format::FormatSeg.new(@md,dob)
        if dob.is==:heading
          xml_structure(dob)
          dob.obj=case dob.ln
          when 0 then x.heading_body0
          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
            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
        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
  6.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
end
name_tags(dob) click to toggle source
# File lib/sisu/xhtml.rb, line 210
def name_tags(dob)
  tags=''
  if defined? dob.tags \
  and dob.tags.length > 0 # insert tags "hypertargets"
    dob.tags.each do |t|
      tags=tags << %{<named id="#{t}" />}
    end
  end
  tags
end
poem_structure(dob) click to toggle source
# File lib/sisu/xhtml.rb, line 272
def poem_structure(dob)
  named=name_tags(dob)
  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="verse">#{named}#{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/xhtml.rb, line 399
def post
  @per.head << '</head>'
  @per.body << '</body>'
  @per.close = '</document>'
end
pre() click to toggle source
# File lib/sisu/xhtml.rb, line 383
      def pre
        rdf=SiSU_XML_Tags::RDF.new(@md)
        @per.head,@per.body=[],[]
        stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xhtml').stylesheet
        encoding=(@sys.locale =~/utf-?8/i) \
        ? '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'
        : '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>'
        @per.open =<<WOK
#{encoding}
#{stylesheet.css_head_xml}
#{rdf.comment_xml}
<document>
WOK
        @per.head << %{<head>\n\t<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />}
        @per.body << '<body>'
      end
publish() click to toggle source
# File lib/sisu/xhtml.rb, line 404
def publish
  content=[]
  content << @per.open << @per.head << @per.body << @per.metadata
  content << @per.tail << @per.close
  content=content.flatten.compact
  Output.new(content,@md).xhtml
  @@xml={}
end
table_structure(dob) click to toggle source
# File lib/sisu/xhtml.rb, line 294
def table_structure(dob)
  named=name_tags(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]*2}#{named}#{table.table.obj}}
  @per.body << "#{Ax[:tab]*0}</object>"
end
xml_head() click to toggle source
# File lib/sisu/xhtml.rb, line 206
def xml_head
  metadata=SiSU_Metadata::Summary.new(@md).xhtml_scroll.metadata
  @per.head << metadata
end
xml_structure(dob,type='norm') click to toggle source
# File lib/sisu/xhtml.rb, line 220
def xml_structure(dob,type='norm')
  if dob.is ==:para \
  || dob.is ==:heading
    named=name_tags(dob)
    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>')
    util=SiSU_TextUtils::Wrap.new(dob.obj,70)
    wrapped=util.line_wrap
    @per.body << if defined? dob.ocn
      %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
    else                        "#{Ax[:tab]*0}<object>"
    end
    @per.body << %{#{Ax[:tab]*1}<text class="#{type}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} unless lv  # main text, contents, body KEEP
    @per.body << %{#{Ax[:tab]*1}<text class="h#{lv}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} if lv # main text, contents, body KEEP
    @per.body << @endnotes.compact.join if @endnotes.length > 0 # main text, endnotes KEEP
    @per.body << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
    @per.body << "#{Ax[:tab]*0}</object>"
    @endnotes=[]
  end
end