aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/current/xml_sax.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/current/xml_sax.rb')
-rw-r--r--lib/sisu/current/xml_sax.rb145
1 files changed, 75 insertions, 70 deletions
diff --git a/lib/sisu/current/xml_sax.rb b/lib/sisu/current/xml_sax.rb
index 21455628..21e5d50d 100644
--- a/lib/sisu/current/xml_sax.rb
+++ b/lib/sisu/current/xml_sax.rb
@@ -63,10 +63,11 @@ module SiSU_XML_SAX
include SiSU_XML_Munge
require_relative 'xml_format' # xml_format.rb
include SiSU_XML_Format
+ require_relative 'xml_persist' # xml_persist.rb
require_relative 'rexml' # rexml.rb
include SiSU_Rexml
require_relative 'shared_metadata' # shared_metadata.rb
- @@alt_id_count,@@tablehead,@@number_of_cols=0,0,0
+ @@alt_id_count=0
@@tablefoot=''
class Source
def initialize(opt)
@@ -159,18 +160,22 @@ module SiSU_XML_SAX
include SiSU_TextUtils
require_relative 'css' # css.rb
require_relative 'xhtml_shared' # decide use, whether xml rather than xhtml
- @@xml={ body: [], open: [], close: [], head: [] }
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
def songsheet
- pre
- @data=markup(@ao_arr)
- post
- publish
+ begin
+ pre
+ @data=markup(@ao_arr)
+ post
+ publish
+ ensure
+ SiSU_XML_Persist::Persist.new.persist_init
+ end
end
protected
def embedded_endnotes(dob='')
@@ -219,7 +224,7 @@ WOK
end
def xml_head
metadata=SiSU_Metadata::Summary.new(@md).xml_sax.metadata
- @@xml[:head] << metadata
+ @per.head << metadata
end
def xml_sc(md='')
sc=if @md.sc_info
@@ -241,7 +246,7 @@ WOK
WOK
else ''
end
- @@xml[:sc]=sc
+ @per.sc=sc
end
def xml_structure(dob,type='norm')
if dob.is==:heading
@@ -257,16 +262,16 @@ WOK
util=SiSU_TextUtils::Wrap.new(dob.obj,70)
wrapped=util.line_wrap
#end
- @@xml[:body] << if defined? dob.ocn; %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
+ @per.body << if defined? dob.ocn; %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
else "#{Ax[:tab]*0}<object>"
end
- @@xml[:body] << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
- @@xml[:body] << if lv; %{#{Ax[:tab]*1}<text class="h#{lv}">\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>}
+ @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
- @@xml[:body] << @endnotes if @endnotes
- ##@@xml[:body] << "#{Ax[:tab]*1}<text>#{dob[@regx,2]}</text>" if dob[@regx,2] # old unwrapped main text, contents, body KEEP
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
+ @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
def block_structure(dob='')
@@ -275,13 +280,13 @@ WOK
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
- @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="block">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- @@xml[:body] << @endnotes if @endnotes
+ @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
def group_structure(dob='')
@@ -290,48 +295,48 @@ WOK
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
- @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="group">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- @@xml[:body] << @endnotes if @endnotes
+ @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
def poem_structure(dob='')
dob=@trans.markup_group(dob)
#dob.obj.gsub(/\s\s/,'&#160;&#160;')
dob.obj=dob.obj.strip
- @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="verse">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << %{#{Ax[:tab]*0}</object>}
+ @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
def code_structure(dob='')
dob=@trans.markup_group(dob)
dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
- @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="code">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
+ @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
def table_structure(dob)
table=SiSU_XHTML_Shared::TableXHTML.new(dob)
- @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>}
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="table">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{table.table.obj}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- #@@xml[:body] << %{#{tab*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- #@@xml[:body] << %{#{Ax[:tab]*0}<object id="#{ocn}">}
- #@@xml[:body] << %{#{Ax[:tab]*1}#{table}\n#{Ax[:tab]*1}} # unless lv # main text, contents, body KEEP
- #@@xml[:body] << "#{Ax[:tab]*0}</object>"
+ @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
def markup(data)
@@ -403,7 +408,7 @@ WOK
elsif dob.obj =~/(Owner Details)/
# txt_obj={ txt: '<br /><a name="owner.details">Owner Details</a>' }
# format_scroll=FormatScroll.new(@md,txt_obj)
-# @@xml[:owner_details]=format_scroll.bold_para
+# @per.owner_details=format_scroll.bold_para
dob.obj=''
end
if dob.obj =~/<a name="n\d+">/ \
@@ -424,41 +429,41 @@ WOK
end
7.downto(4) do |x|
y=x - 1; v=x - 3
- @@xml[:body] << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" if @level[x]==true
+ @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
- @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
+ @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
end
- #7.downto(1) { |x| y=x - 1; @@xml[:body] << "#{Ax[:tab]*y}</level #{x}>" if @level[x]==true }
+ #7.downto(1) { |x| y=x - 1; @per.body << "#{Ax[:tab]*y}</level #{x}>" if @level[x]==true }
end
def pre
rdf=SiSU_XML_Tags::RDF.new(@md)
- @@xml[:head],@@xml[:body]=[],[]
+ @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
- @@xml[:open] =<<WOK
+ @per.open =<<WOK
#{encoding}
#{stylesheet.css_head_xml}
#{rdf.comment_xml}
<document>
WOK
- @@xml[:head] << '<head>'
- @@xml[:body] << '<body>'
+ @per.head << '<head>'
+ @per.body << '<body>'
end
def post
- @@xml[:head] << @@xml[:sc]
- @@xml[:head] << '</head>'
- @@xml[:body] << '</body>'
- @@xml[:close] = '</document>'
+ @per.head << @per.sc
+ @per.head << '</head>'
+ @per.body << '</body>'
+ @per.close = '</document>'
end
def publish
content=[]
- content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
- content << @@xml[:owner_details] if @md.stmp =~/\w\w/
- content << @@xml[:tail] << @@xml[:close]
+ 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={}
@@ -496,11 +501,11 @@ WOK
'check document structure'
).colorize
tell=SiSU_Screen::Ansi.new(
- @md.opt.act[:color_state][:set],
- 'invert',
- '',
- ''
- )
+ @md.opt.act[:color_state][:set],
+ 'invert',
+ '',
+ ''
+ )
tell.grey_open
end
tidyfile='/dev/null' #don't want one or screen output, check for alternative flags