diff options
| author | Ralph Amissah <ralph@amissah.com> | 2014-11-23 01:01:27 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2014-12-08 00:18:16 -0500 | 
| commit | 5803430358cff957f500fa2dcf1e290eae95a748 (patch) | |
| tree | 84dd6e41fed63f913673e8600712b6a3ac5ebf35 /lib | |
| parent | d: epub, reorganize, introduce new file (diff) | |
d: xmls, reorganize, introduce new file
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sisu/develop/xhtml.rb | 98 | ||||
| -rw-r--r-- | lib/sisu/develop/xhtml_table.rb | 1 | ||||
| -rw-r--r-- | lib/sisu/develop/xml_dom.rb | 94 | ||||
| -rw-r--r-- | lib/sisu/develop/xml_odf_odt.rb | 47 | ||||
| -rw-r--r-- | lib/sisu/develop/xml_odf_odt_format.rb | 2 | ||||
| -rw-r--r-- | lib/sisu/develop/xml_persist.rb | 126 | ||||
| -rw-r--r-- | lib/sisu/develop/xml_sax.rb | 123 | 
7 files changed, 309 insertions, 182 deletions
| diff --git a/lib/sisu/develop/xhtml.rb b/lib/sisu/develop/xhtml.rb index bb5db51b..9e06d7b2 100644 --- a/lib/sisu/develop/xhtml.rb +++ b/lib/sisu/develop/xhtml.rb @@ -63,10 +63,11 @@ module SiSU_XHTML      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) @@ -144,12 +145,12 @@ module SiSU_XHTML        require_relative 'txt_shared'                     # txt_shared.rb          include SiSU_TextUtils        require_relative 'css'                            # css.rb -      @@xml={ body: [], sisu: [], open: [], close: [], head: [] }        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        def songsheet          pre @@ -202,7 +203,7 @@ WOK        end        def xml_head          metadata=SiSU_Metadata::Summary.new(@md).xhtml_scroll.metadata -        @@xml[:head] << metadata +        @per.head << metadata        end        def name_tags(dob)          tags='' @@ -228,15 +229,15 @@ WOK              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 -          @@xml[:body] << if defined? 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}<text class="#{type}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} unless lv  # main text, contents, body KEEP -          @@xml[: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 -          @@xml[:body] << @endnotes.compact.join if @endnotes.length > 0 # main text, endnotes KEEP -          @@xml[:body] << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn -          @@xml[:body] << "#{Ax[:tab]*0}</object>" +          @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 @@ -246,12 +247,12 @@ WOK          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 -        @@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">#{named}#{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="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        def group_structure(dob)          named=name_tags(dob) @@ -259,42 +260,42 @@ WOK          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 -        @@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">#{named}#{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="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        def poem_structure(dob)          named=name_tags(dob)          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="verse">#{named}#{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">#{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        def code_structure(dob)          named=name_tags(dob)          dob=@trans.markup_group(dob)          dob.obj=dob.obj.gsub(/\s\s/,'  ').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">#{named}#{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">#{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        def table_structure(dob)          named=name_tags(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]*2}#{named}#{table.table.obj}} -        @@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]*2}#{named}#{table.table.obj}} +        @per.body << "#{Ax[:tab]*0}</object>"        end        def markup(data)          @endnotes=[] @@ -370,39 +371,38 @@ WOK          end          6.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        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,'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"?>' -        @@xml[:open] =<<WOK +        @per.open =<<WOK  #{encoding}  #{stylesheet.css_head_xml}  #{rdf.comment_xml}  <document>  WOK -        @@xml[:head] << %{<head>\n\t<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />} -        @@xml[:body] << '<body>' +        @per.head << %{<head>\n\t<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />} +        @per.body << '<body>'        end        def post -        @@xml[:head] << '</head>' -        @@xml[:body] << '</body>' -        @@xml[:close] = '</document>' +        @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.tail << @per.close          content=content.flatten.compact          Output.new(content,@md).xhtml          @@xml={} diff --git a/lib/sisu/develop/xhtml_table.rb b/lib/sisu/develop/xhtml_table.rb index df5a2822..9c3618c5 100644 --- a/lib/sisu/develop/xhtml_table.rb +++ b/lib/sisu/develop/xhtml_table.rb @@ -58,7 +58,6 @@ module SiSU_XHTML_Table    require_relative 'xhtml_parts'                         # xhtml_parts.rb    class TableXHTML      include SiSU_Parts_XHTML -    @@tablehead=0      @@tablefoot=[] #watch      def initialize(table)        @table_obj=table diff --git a/lib/sisu/develop/xml_dom.rb b/lib/sisu/develop/xml_dom.rb index 3664820d..b3d3adde 100644 --- a/lib/sisu/develop/xml_dom.rb +++ b/lib/sisu/develop/xml_dom.rb @@ -64,10 +64,11 @@ module SiSU_XML_DOM      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) @@ -158,12 +159,12 @@ module SiSU_XML_DOM        require_relative 'txt_shared'                     # txt_shared.rb          include SiSU_TextUtils        require_relative 'xhtml_shared'                   # decide use, whether xml rather than xhtml -      @@xml={ body: [], open: [], close: [], head: [], sc: [] }        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 @@ -182,7 +183,7 @@ module SiSU_XML_DOM        end        def xml_head          metadata=SiSU_Metadata::Summary.new(@md).xml_dom.metadata -        @@xml[:head] << metadata +        @per.head << metadata        end        def xml_sc(md='')          sc=if @md.sc_info @@ -204,7 +205,7 @@ module SiSU_XML_DOM  WOK          else ''          end -        @@xml[:sc]=sc +        @per.sc=sc        end        def xml_element(dob,xml_el='',xml_content='',type='norm')          n=n1=n2=n3=0 @@ -221,7 +222,7 @@ WOK          else ''          end          xml_el ||='' -        @@xml[:body] <<<<WOK +        @per.body <<<<WOK  #{Ax[:tab]*n}#{xml_el}  #{Ax[:tab]*n1}<heading>  #{Ax[:tab]*n2}<object id="#{dob.ocn}"> @@ -262,26 +263,26 @@ WOK              if @cont[1] \              or @cont[2] \              or @cont[3] -              @@xml[:body] << "#{Ax[:tab]*5}</content>" +              @per.body << "#{Ax[:tab]*5}</content>"              end              @cont[1]=false if @cont[1]              @cont[2]=false if @cont[2]              @cont[3]=false if @cont[3]              ####### attempt to close contents              if @copen[4] # 4~ -              [4,3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [4,3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }                @copen[1]=@copen[2]=@copen[3]=@copen[4]=false              elsif @copen[3] # 3~ -              [3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }                @copen[1]=@copen[2]=@copen[3]=false              elsif @copen[2] # 2~ -              [2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }                @copen[1]=@copen[2]=@copen[3]=false              elsif @copen[1] # 1~ -              [1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }                @copen[1]=@copen[2]=@copen[3]=false              end -            @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x] +            @per.body << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]              @level[x]=false            end          when 4..7 @@ -295,29 +296,29 @@ WOK            xml_content="\n#{Ax[:tab]*5}<content>"            case lv            when 4 -            @@xml[:body] << "#{Ax[:tab]*5}</content>" if @cont[1] +            @per.body << "#{Ax[:tab]*5}</content>" if @cont[1]              if @copen[4]==true # 4~ -              [4,3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [4,3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[3]==true # 3~ -              [3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [3,2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[2]==true # 2~ -              [2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [2,1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[1]==true # 1~ -              [1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [1].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              end              @cont[1]=true            when 5              if @cont[3] \              or @cont[2] \              or @cont[1] -              @@xml[:body] << "#{Ax[:tab]*5}</content>" +              @per.body << "#{Ax[:tab]*5}</content>"              end              if @copen[4]==true  #4~ -              [4,3,2].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [4,3,2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[3]==true  #3~ -              [3,2].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [3,2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[2]==true #2~ -              [2].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [2].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              end              @cont[2]=true            when 6 @@ -325,12 +326,12 @@ WOK              or @cont[3] \              or @cont[2] \              or @cont[1] -              @@xml[:body] << "#{Ax[:tab]*5}</content>" +              @per.body << "#{Ax[:tab]*5}</content>"              end              if @copen[4] #4~ -              [4,3].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [4,3].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              elsif @copen[3] #3~ -              [3].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [3].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              end              @cont[3]=true            when 7 @@ -338,10 +339,10 @@ WOK              or @cont[3] \              or @cont[2] \              or @cont[1] -              @@xml[:body] << "#{Ax[:tab]*5}</content>" +              @per.body << "#{Ax[:tab]*5}</content>"              end              if @copen[4] #4~ -              [4].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" } +              [4].each { |v| @per.body << "#{Ax[:tab]*n}</contents#{v}>" }              end              @cont[4]=true            end @@ -357,15 +358,15 @@ WOK          if defined? dob.obj # main text, contents, body KEEP            if defined? dob.ocn \            and dob.ocn -            @@xml[:body] << %{#{Ax[:tab]*6}<object id="#{dob.ocn}">} -            @@xml[:body] << %{#{Ax[:tab]*7}<ocn>#{dob.ocn}</ocn>} if defined? dob.ocn +            @per.body << %{#{Ax[:tab]*6}<object id="#{dob.ocn}">} +            @per.body << %{#{Ax[:tab]*7}<ocn>#{dob.ocn}</ocn>} if defined? dob.ocn            end -          #@@xml[:body] << %{#{Ax[:tab]*7}<text class="#{type}">#{dob.obj}</text>} -          #@@xml[:body] << %{#{Ax[:tab]*7}<text class="#{dob.is}">#{Ax[:tab]*1}} -          @@xml[:body] << %{#{Ax[:tab]*7}<text class="#{type}">#{Ax[:tab]*1}} -          @@xml[:body] << %{#{Ax[:tab]*8}#{dob.obj}#{Ax[:tab]*1}} -          @@xml[:body] << %{#{Ax[:tab]*7}</text>} -          @@xml[:body] << %{#{Ax[:tab]*6}</object>} +          #@per.body << %{#{Ax[:tab]*7}<text class="#{type}">#{dob.obj}</text>} +          #@per.body << %{#{Ax[:tab]*7}<text class="#{dob.is}">#{Ax[:tab]*1}} +          @per.body << %{#{Ax[:tab]*7}<text class="#{type}">#{Ax[:tab]*1}} +          @per.body << %{#{Ax[:tab]*8}#{dob.obj}#{Ax[:tab]*1}} +          @per.body << %{#{Ax[:tab]*7}</text>} +          @per.body << %{#{Ax[:tab]*6}</object>}          end        end        def block_structure(dob) @@ -523,16 +524,16 @@ WOK            y=x - 1; v=x - 3            if @level[x]==true #2004w36 bug fix? watch/test previous logic broke on free.for.all @coontent_flag introduced              if @content_flag==true -              @@xml[:body] << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" +              @per.body << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>"                @content_flag=false              else -              @@xml[:body] << "\n#{Ax[:tab]*y}</contents#{v}>" +              @per.body << "\n#{Ax[:tab]*y}</contents#{v}>"              end            end          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        end        def pre @@ -541,29 +542,28 @@ WOK          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.tail << @per.close          content=content.flatten.compact          Output.new(content,@md).xml -        @@xml[:head],@@xml[:body],@@xml[:tail]=[],[],[] # check whether should be nil +        @per.head,@per.body,@per.tail=[],[],[] # check whether should be nil        end      end      class Output diff --git a/lib/sisu/develop/xml_odf_odt.rb b/lib/sisu/develop/xml_odf_odt.rb index de1dde96..16a77e7a 100644 --- a/lib/sisu/develop/xml_odf_odt.rb +++ b/lib/sisu/develop/xml_odf_odt.rb @@ -67,7 +67,8 @@ module SiSU_XML_ODF_ODT    require_relative 'txt_shared'                         # txt_shared.rb    require_relative 'xml_shared'                         # xml_shared.rb      include SiSU_XML_Munge -  @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 +  require_relative 'xml_persist'                        # xml_persist.rb +  @@alt_id_count,@@alt_id_count=0,0    class Source      begin        require 'zlib' @@ -128,7 +129,6 @@ module SiSU_XML_ODF_ODT        require_relative 'txt_shared'                     # txt_shared.rb        include SiSU_Parts_XML        @@img_count=0 -      @@odf={ body: [], head: [], toc: [],  metadata: [], tail: [], book_idx: [], endnotes: [] }        @@docstart=true        @@fns=nil        def initialize(particulars) @@ -140,6 +140,7 @@ module SiSU_XML_ODF_ODT        end        def songsheet          begin +          @per=SiSU_XML_Persist::Persist.new            pre            @data=markup(@ao_array)            publish @@ -187,18 +188,18 @@ module SiSU_XML_ODF_ODT            end            idx_arr << x.strip if x.is_a?(String)          end -        @@odf[:book_idx]=idx_arr.join +        @per.book_idx=idx_arr.join        end        end        def odf_metadata -        @@odf[:metadata]=SiSU_Metadata::Summary.new(@md). +        @per.metadata=SiSU_Metadata::Summary.new(@md).            odf.metadata        end        def odf_tail          manifest="#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}" -        @@odf[:tail] << %{<text:p text:style-name="P_normal">Available document outputs: <br /> <<text:a xl:type="simple" xl:href="#{manifest}">#{manifest}</text:a>></text:p>} -        @@odf[:tail] << %{\n<text:p text:style-name="P_normal">SiSU: <<text:a xl:type="simple" xl:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>} -        @@odf[:tail] << "\n</office:text></office:body></office:document-content>" +        @per.tail << %{<text:p text:style-name="P_normal">Available document outputs: <br /> <<text:a xl:type="simple" xl:href="#{manifest}">#{manifest}</text:a>></text:p>} +        @per.tail << %{\n<text:p text:style-name="P_normal">SiSU: <<text:a xl:type="simple" xl:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>} +        @per.tail << "\n</office:text></office:body></office:document-content>"        end        def set_bookmark_tag(dob)          SiSU_XML_ODF_ODT_Format::Tags.new.set_bookmark_tag(dob) @@ -616,26 +617,26 @@ module SiSU_XML_ODF_ODT            end          end          if dob.is==:heading -          @@odf[:body] << heading(dob,p_num).obj << break_line*2 +          @per.body << heading(dob,p_num).obj << break_line*2            if SiSU_Env::ProcessingSettings.new(md).build.toc?              if dob.lv =~/[A-D1]/i -              @@odf[:toc] << toc(dob,p_num).obj +              @per.toc << toc(dob,p_num).obj              end            end          elsif dob.is ==:verse -          @@odf[:body] << poem(dob,p_num).obj << break_line*2 +          @per.body << poem(dob,p_num).obj << break_line*2          elsif dob.is==:group -          @@odf[:body] << group(dob,p_num).obj << break_line*2 +          @per.body << group(dob,p_num).obj << break_line*2          elsif dob.is==:block -          @@odf[:body] << block(dob,p_num).obj << break_line*2 +          @per.body << block(dob,p_num).obj << break_line*2          elsif dob.is==:code -          @@odf[:body] << code(dob,p_num).obj << break_line*2 +          @per.body << code(dob,p_num).obj << break_line*2          elsif dob.is==:table #elsif dob.obj =~ /<!Th?ยก/u -          @@odf[:body] << table(dob,p_num).obj << break_line*2 +          @per.body << table(dob,p_num).obj << break_line*2          elsif dob.is==:break -          @@odf[:body] << obj_break(dob).obj << break_line*2 +          @per.body << obj_break(dob).obj << break_line*2          else -          @@odf[:body] << normal(dob,p_num).obj << break_line*2 # main text, contents, body KEEP +          @per.body << normal(dob,p_num).obj << break_line*2 # main text, contents, body KEEP          end          @@endnotes_para=[]        end @@ -803,20 +804,20 @@ WOK  WOK          x=x.strip          x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on -        @@odf[:head] << x +        @per.head << x        end        def publish          content=[]          br_pg='<text:p text:style-name="P_normal_page_new"> </text:p>'          content << -          @@odf[:head] << -          @@odf[:toc] << +          @per.head << +          @per.toc <<            br_pg << -          @@odf[:body] << -          @@odf[:book_idx] << +          @per.body << +          @per.book_idx <<            br_pg << -          @@odf[:metadata] << -          @@odf[:tail] +          @per.metadata << +          @per.tail          SiSU_XML_ODF_ODT::Source::Output.new(content,@md,@env).odf          @@odf={ head: [], toc: [], body: [], tail: [], book_idx: [], metadata: [] }        end diff --git a/lib/sisu/develop/xml_odf_odt_format.rb b/lib/sisu/develop/xml_odf_odt_format.rb index 8bd83e09..efe5e733 100644 --- a/lib/sisu/develop/xml_odf_odt_format.rb +++ b/lib/sisu/develop/xml_odf_odt_format.rb @@ -162,7 +162,7 @@ module SiSU_XML_ODF_ODT_Format      end    end    class Table -    @@tablehead,@@table_counter=0,0 #reinitialise on new file +    @@table_counter=0      @@tablefoot=[] #watch      @@fns=''      def initialize(md,dob,p_num) diff --git a/lib/sisu/develop/xml_persist.rb b/lib/sisu/develop/xml_persist.rb new file mode 100644 index 00000000..6fb52eba --- /dev/null +++ b/lib/sisu/develop/xml_persist.rb @@ -0,0 +1,126 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** html segment generation, processing + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +  2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah, +  All Rights Reserved. + +** License: GPL 3 or later: + +  SiSU, a framework for document structuring, publishing and search + +  Copyright (C) Ralph Amissah + +  This program is free software: you can redistribute it and/or modify it +  under the terms of the GNU General Public License as published by the Free +  Software Foundation, either version 3 of the License, or (at your option) +  any later version. + +  This program is distributed in the hope that it will be useful, but WITHOUT +  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +  more details. + +  You should have received a copy of the GNU General Public License along with +  this program. If not, see <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/xml_persist.rb;hb=HEAD> + +=end +module SiSU_XML_Persist +  class Persist +    @@persist=nil +    attr_accessor :head,:toc,:body,:tail,:open,:close,:sc,:endnotes,:book_idx,:metadata +    #attr_accessor :head,:body,:tail,:open,:close,:sc +#@@odf={ body: [], head: [], toc: [],  metadata: [], tail: [], book_idx: [], endnotes: [] } +    def initialize(args=nil) +      @@persist=args=(args ? args : (@@persist || persist_init_hash_values)) +      @head=args[:head] +      @toc=args[:toc] +      @body=args[:body] +      @tail=args[:tail] +      @open=args[:open] +      @close=args[:close] +      @sc=args[:sc] +      @endnotes=args[:endnotes] +      @book_idx=args[:book_idx] +      @metadata=args[:metadata] +    end +    def head +      @head +    end +    def toc +      @toc +    end +    def body +      @body +    end +    def tail +      @tail +    end +    def open +      @open +    end +    def close +      @close +    end +    def sc +      @sc +    end +    def endnotes +      @endnotes +    end +    def book_idx +      @book_idx +    end +    def metadata +      @metadata +    end +    def persist_init_hash_values +      { +        head: [], +        toc: [], +        body: [], +        tail: [], +        open: [], +        close: [], +        sc: [], +        endnotes: [], +        book_idx: [], +        metadata: [], +      } +    end +    def persist_init +      @@persist=nil +      Persist.new(persist_init_hash_values) +    end +  end +end +__END__ diff --git a/lib/sisu/develop/xml_sax.rb b/lib/sisu/develop/xml_sax.rb index 3a193a6a..81e2423d 100644 --- a/lib/sisu/develop/xml_sax.rb +++ b/lib/sisu/develop/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,12 +160,12 @@ 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 @@ -219,7 +220,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 +242,7 @@ WOK  WOK          else ''          end -        @@xml[:sc]=sc +        @per.sc=sc        end        def xml_structure(dob,type='norm')          if dob.is==:heading @@ -257,16 +258,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 +276,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 +291,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/,'  ')          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/,'  ').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 +404,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 +425,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={} | 
