class SiSU_JSON::Source::Scroll

Public Class Methods

new(particulars) click to toggle source
# File lib/sisu/json.rb, line 146
def initialize(particulars)
  @env,@md,@ao_array=particulars.env,particulars.md,particulars.ao_array
  @tab="\t"
  @trans=SiSU_JSON_Munge::Trans.new(@md)
  @sys=SiSU_Env::SystemCall.new
  @per=SiSU_JSON_Persist::Persist.new
end

Public Instance Methods

songsheet() click to toggle source
# File lib/sisu/json.rb, line 153
def songsheet
  begin
    pre
    @data=markup(@ao_array)
    post
    publish
  ensure
    SiSU_JSON_Persist::Persist.new.persist_init
  end
end

Protected Instance Methods

block_structure(dob) click to toggle source
# File lib/sisu/json.rb, line 250
def block_structure(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]*1 + '{'
  if defined? dob.ocn and dob.ocn
    @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
  end
  @per.body <<
    Ax[:tab]*2 + '"object": "' + dob.obj + '"'
    #((@endnotes.length > 0) ? '",' : '"')
  @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
end
code_structure(dob) click to toggle source
# File lib/sisu/json.rb, line 290
def code_structure(dob)
  dob=@trans.markup_group(dob)
  dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
  @per.body << Ax[:tab]*1 + '{'
  if defined? dob.ocn and dob.ocn
    @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
  end
  @per.body <<
    Ax[:tab]*2 + '"object": "' + dob.obj + '"'
    #((@endnotes.length > 0) ? '",' : '"')
  @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
end
embedded_endnotes(dob='') click to toggle source
# File lib/sisu/json.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/json.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_JSONutils::Clean.new(s)
          wrap=util.line_json_clean
          wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<-WOK
\\n[\\1.] \\2
              WOK
            ).
            gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<-WOK
\\n[\\1.] \\2
              WOK
            ).
            gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<-WOK
\\n[\\1.] \\2
              WOK
            ).strip
#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/json.rb, line 264
def group_structure(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]*1 + '{'
  if defined? dob.ocn and dob.ocn
    @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
  end
  @per.body <<
    Ax[:tab]*2 + '"object": "' + dob.obj + '"'
    #((@endnotes.length > 0) ? '",' : '"')
  @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
end
json_head() click to toggle source
# File lib/sisu/json.rb, line 200
def json_head
  #metadata=SiSU_Metadata::Summary.new(@md).json.metadata
  #@per.head << metadata
end
json_structure(dob,attrib=nil) click to toggle source
# File lib/sisu/json.rb, line 214
def json_structure(dob,attrib=nil)
  if dob.is ==:para \
  || dob.is ==:heading
    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_JSONutils::Clean.new(dob.obj)
    wrapped=util.line_json_clean
    @per.body << Ax[:tab]*1 + '{'
    if defined? dob.ocn and dob.ocn
      @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
    end
    if lv                                                                 # main text, contents, body KEEP
      @per.body <<
        Ax[:tab]*2 + %{"object": "<h#{lv}>} + wrapped + %{</h#{lv}>} +
        ((@endnotes.length > 0) ? '",' : '"')
    else
      @per.body <<
        Ax[:tab]*2 + '"object": "' + wrapped +
        ((@endnotes.length > 0) ? '",' : '"')
    end
    if @endnotes.length > 0                                               # main text, endnotes KEEP
      @per.body <<
        Ax[:tab]*2 + '"endnotes": "' +
        @endnotes.compact.join.strip + '"'
    end
    @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
    @endnotes=[]
  end
end
markup(data) click to toggle source
# File lib/sisu/json.rb, line 313
def markup(data)
  @endnotes=[]
  @rcdc=false
  @level,@cont,@copen,@json_contents_close=[],[],[],[]
  json_head
  (0..7).each { |x| @cont[x]=@level[x]=false }
  (4..7).each { |x| @json_contents_close[x]='' }
  data.each_with_index do |dob,i|
    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 not @rcdc
        x=SiSU_JSON_Format::FormatTextObject.new(@md,dob)
        if dob.is==:heading
          json_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
            json_structure(dob,"indent_bullet#{dob.indent}")
          elsif dob.is ==:para \
          and dob.indent.to_s =~/[1-9]/ \
          and dob.indent == dob.hang
            json_structure(dob,"indent#{dob.indent}")
          elsif dob.is==:para \
          and dob.hang.to_s =~/[0-9]/ \
          and dob.indent != dob.hang
            json_structure(dob,"hang#{dob.hang.to_s}_indent#{dob.indent.to_s}")
          else json_structure(dob)
          end
        end
      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/json.rb, line 204
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/json.rb, line 278
def poem_structure(dob)
  dob=@trans.markup_group(dob)
  dob.obj=dob.obj.strip
  @per.body << Ax[:tab]*1 + '{'
  if defined? dob.ocn and dob.ocn
    @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
  end
  @per.body <<
    Ax[:tab]*2 + '"object": "' + dob.obj + '"'
    #((@endnotes.length > 0) ? '",' : '"')
  @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
end
post() click to toggle source
# File lib/sisu/json.rb, line 386
def post
  @per.close = '}'
end
pre() click to toggle source
# File lib/sisu/json.rb, line 382
def pre
  @per.head,@per.body=[],[]
  @per.open = '{'
end
publish() click to toggle source
# File lib/sisu/json.rb, line 389
def publish
  content=[]
  @per.body[-1] = @per.body[-1].gsub(/,$/, '') #= Ax[:tab]*1 + '}'
  content << @per.open << @per.head << @per.body << @per.metadata
  content << @per.tail << @per.close
  content=content.flatten.compact
  Output.new(content,@md).json
end
table_structure(dob) click to toggle source
# File lib/sisu/json.rb, line 302
def table_structure(dob)
  table=SiSU_JSON_Shared::TableJSON.new(dob)
  @per.body << Ax[:tab]*1 + '{'
  if defined? dob.ocn and dob.ocn
    @per.body << Ax[:tab]*2 + '"ocn": ' + dob.ocn.to_s + '",'
  end
  @per.body <<
    Ax[:tab]*2 + '"object": "' + table.table.obj + '"'
  #((@endnotes.length > 0) ? '",' : '"')
  @per.body << Ax[:tab]*1 + '},' # unless is last object then '}'
end