From d6b596f0108ce66d563e6ea7d2f6bbb8ead27b52 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Tue, 5 Nov 2013 23:16:33 -0500
Subject: v5: xml, scaffold, re-activated, split into sisu structure &
 collapsed structure

* --xml-scaffold-sisu (--xml-scaffold)
* --xml-scaffold-collapse
* output currently to terminal only
---
 lib/sisu/v5/constants.rb                        |  31 ++--
 lib/sisu/v5/dal_doc_str.rb                      |  12 +-
 lib/sisu/v5/hub.rb                              |  10 ++
 lib/sisu/v5/manifest.rb                         |  14 ++
 lib/sisu/v5/options.rb                          |  14 +-
 lib/sisu/v5/sysenv.rb                           | 146 +++++++++++++++++
 lib/sisu/v5/urls.rb                             |  16 ++
 lib/sisu/v5/xml_scaffold.rb                     | 206 ------------------------
 lib/sisu/v5/xml_scaffold_structure_collapsed.rb | 202 +++++++++++++++++++++++
 lib/sisu/v5/xml_scaffold_structure_sisu.rb      | 205 +++++++++++++++++++++++
 10 files changed, 628 insertions(+), 228 deletions(-)
 delete mode 100644 lib/sisu/v5/xml_scaffold.rb
 create mode 100644 lib/sisu/v5/xml_scaffold_structure_collapsed.rb
 create mode 100644 lib/sisu/v5/xml_scaffold_structure_sisu.rb

(limited to 'lib')

diff --git a/lib/sisu/v5/constants.rb b/lib/sisu/v5/constants.rb
index 26130506..a21f01b7 100644
--- a/lib/sisu/v5/constants.rb
+++ b/lib/sisu/v5/constants.rb
@@ -63,20 +63,23 @@
 #Ax,Xx,Mx,Rx,Hx,Dx,Px,Ep,Db,Gt,Tex=Array.new(11){{}}
 YEAR='2013'
 Sfx={
-  txt:        '.txt',
-  html:       '.html',
-  xhtml:      '.xhtml',
-  xml:        '.xml',
-  xml_sax:    '.sax.xml',
-  xml_dom:    '.dom.xml',
-  epub:       '.epub',
-  epub_xhtml: '.xhtml',
-  odt:        '.odt',
-  pdf:        '.pdf',
-  manpage:    '.1',
-  info:       '.info',
-  texinfo:    '.texinfo',
-  sql:        '.sql.db',
+  txt:                       '.txt',
+  html:                      '.html',
+  xhtml:                     '.xhtml',
+  xml:                       '.xml',
+  xml_sax:                   '.sax.xml',
+  xml_dom:                   '.dom.xml',
+  xml_scaffold:              '.scaffold.xml',
+  xml_scaffold_structure_sisu:     '.scaffold.sisu.xml',
+  xml_scaffold_structure_collapse: '.scaffold.collapse.xml',
+  epub:                      '.epub',
+  epub_xhtml:                '.xhtml',
+  odt:                       '.odt',
+  pdf:                       '.pdf',
+  manpage:                   '.1',
+  info:                      '.info',
+  texinfo:                   '.texinfo',
+  sql:                       '.sql.db',
 }
 Ax={
   tab:                       "\t",
diff --git a/lib/sisu/v5/dal_doc_str.rb b/lib/sisu/v5/dal_doc_str.rb
index 409c28ab..203bc988 100644
--- a/lib/sisu/v5/dal_doc_str.rb
+++ b/lib/sisu/v5/dal_doc_str.rb
@@ -690,24 +690,24 @@ module SiSU_DAL_DocumentStructureExtract
       end
       if @md.flag_endnotes
         tuned_file << @pb
-        h={ ln: 2, obj: 'Endnotes', autonum_: false }
+        h={ ln: 2, lc: 2, obj: 'Endnotes', autonum_: false }
         tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
-        h={ ln: 4, obj: 'Endnotes', name: 'endnotes', autonum_: false }
+        h={ ln: 4, lc: 3, obj: 'Endnotes', name: 'endnotes', autonum_: false }
         tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
         h={ obj: 'Endnotes' }
       end
       if @md.book_idx
         tuned_file << @pb
-        h={ ln: 2, obj: 'Index', autonum_: false }
+        h={ ln: 2, lc: 2, obj: 'Index', autonum_: false }
         tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
-        h={ ln: 4, obj: 'Index', name: 'book_index', autonum_: false }
+        h={ ln: 4, lc: 3, obj: 'Index', name: 'book_index', autonum_: false }
         tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
         h={ obj: 'Index' }
       end
       tuned_file << @pb
-      h={ ln: 2, obj: 'Metadata', autonum_: false, ocn_: false }
+      h={ ln: 2, lc: 2, obj: 'Metadata', autonum_: false, ocn_: false }
       tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
-      h={ ln: 4, obj: 'SiSU Metadata, document information', name: 'metadata', autonum_: false, ocn_: false }
+      h={ ln: 4, lc: 3, obj: 'SiSU Metadata, document information', name: 'metadata', autonum_: false, ocn_: false }
       tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h)
       h={ obj: 'eof' }
       meta=SiSU_DAL_DocumentStructure::ObjectMetadata.new.metadata(@metadata)
diff --git a/lib/sisu/v5/hub.rb b/lib/sisu/v5/hub.rb
index 6893e2ad..2e9092ff 100644
--- a/lib/sisu/v5/hub.rb
+++ b/lib/sisu/v5/hub.rb
@@ -331,6 +331,14 @@ module SiSU
           require_relative 'xhtml'                     #  xhtml.rb
           SiSU_XHTML::Source.new(@opt).read
         end
+        if @opt.act[:xml_scaffold_structure_sisu][:set]==:on #% --xml-scaffold --xml-scaffold-sisu
+          require_relative 'xml_scaffold_structure_sisu' #  xml_scaffold_structure_sisu.rb
+          SiSU_XML_Scaffold_Structure_Sisu::Source.new(@opt).read
+        end
+        if @opt.act[:xml_scaffold_structure_collapse][:set]==:on #% --xml-scaffold-collapse
+          require_relative 'xml_scaffold_structure_collapsed' # xml_scaffold_structure_collapsed.rb
+          SiSU_XML_Scaffold_Structure_Collapse::Source.new(@opt).read
+        end
         if @opt.act[:xml_sax][:set]==:on               #% --xml-sax, -x xml sax type
           require_relative 'xml'                       #  xml.rb
           SiSU_XML_SAX::Source.new(@opt).read
@@ -633,6 +641,8 @@ module SiSU
         || @opt.act[:odt][:set]==:on \
         || @opt.act[:xml_sax][:set]==:on \
         || @opt.act[:xml_dom][:set]==:on \
+        || @opt.act[:xml_scaffold_structure_sisu][:set]==:on \
+        || @opt.act[:xml_scaffold_structure_collapse][:set]==:on \
         || @opt.act[:pdf][:set]==:on \
         || @opt.act[:pdf_p][:set]==:on \
         || @opt.act[:pdf_l][:set]==:on \
diff --git a/lib/sisu/v5/manifest.rb b/lib/sisu/v5/manifest.rb
index 3d6a5835..fc4bd5b9 100644
--- a/lib/sisu/v5/manifest.rb
+++ b/lib/sisu/v5/manifest.rb
@@ -396,6 +396,20 @@ module SiSU_Manifest
           id,file='XML DOM',@f.base_filename.xml_dom
           summarize(id,file,pth,rel,url)
         end
+        if FileTest.file?(@f.place_file.xml_scaffold_structure_sisu.dir)==true
+          pth=@f.output_path.xml_scaffold_structure_sisu.dir
+          rel=@f.output_path.xml_scaffold_structure_sisu.rel_sm
+          url=@f.output_path.xml_scaffold_structure_sisu.url
+          id,file='XML Scaffold sisu structure',@f.base_filename.xml_scaffold_structure_sisu
+          summarize(id,file,pth,rel,url)
+        end
+        if FileTest.file?(@f.place_file.xml_scaffold_structure_collapse.dir)==true
+          pth=@f.output_path.xml_scaffold_structure_collapse.dir
+          rel=@f.output_path.xml_scaffold_structure_collapse.rel_sm
+          url=@f.output_path.xml_scaffold_structure_collapse.url
+          id,file='XML Scaffold collapsed structure',@f.base_filename.xml_scaffold_structure_collapse
+          summarize(id,file,pth,rel,url)
+        end
         if FileTest.file?(@f.place_file.info.dir)==true
           pth=@f.output_path.texinfo.dir
           rel=@f.output_path.texinfo.rel_sm
diff --git a/lib/sisu/v5/options.rb b/lib/sisu/v5/options.rb
index 5bf851e3..7203f8b2 100644
--- a/lib/sisu/v5/options.rb
+++ b/lib/sisu/v5/options.rb
@@ -861,6 +861,12 @@ module SiSU_Commandline
         || mod.inspect =~/"--xml-dom"/) \
         ? { bool: true, set: :on }
         : { bool: false, set: :na }
+        act[:xml_scaffold_structure_sisu]=mod.inspect =~/"--xml-scaffold"|"--xml-scaffold-sisu"/ \
+        ? { bool: true, set: :on }
+        : { bool: false, set: :na }
+        act[:xml_scaffold_structure_collapse]=mod.inspect =~/"--xml-scaffold-collapse"/ \
+        ? { bool: true, set: :on }
+        : { bool: false, set: :na }
         act[:xhtml]=(cmd =~/b/ \
         || mod.inspect =~/"--xhtml"/) \
         ? { bool: true, set: :on }
@@ -979,7 +985,9 @@ module SiSU_Commandline
         || act[:sisupod][:set]==:on \
         || act[:concordance][:set]==:on \
         || act[:xml_dom][:set]==:on \
-        || act[:xml_sax][:set]==:on )
+        || act[:xml_sax][:set]==:on \
+        || act[:xml_scaffold_structure_sisu][:set]==:on \
+        || act[:xml_scaffold_structure_collapse][:set]==:on )
           { bool: true, set: :on }
           #if cmd !~/[mn]/
           #  extra+=if cmd =~/[abegHhIiLNOoPpQTtwXxyz]/ \
@@ -1021,7 +1029,9 @@ module SiSU_Commandline
         || act[:sisupod][:set]==:on \
         || act[:concordance][:set]==:on \
         || act[:xml_dom][:set]==:on \
-        || act[:xml_sax][:set]==:on )
+        || act[:xml_sax][:set]==:on \
+        || act[:xml_scaffold_structure_sisu][:set]==:on \
+        || act[:xml_scaffold_structure_collapse][:set]==:on )
           { bool: true, set: :on }
           ##      if cmd !~/y/
           ##        extra+=if cmd =~/[abeHhIiNopQSstwXxz]/ \
diff --git a/lib/sisu/v5/sysenv.rb b/lib/sisu/v5/sysenv.rb
index f1076c68..d4079f8c 100644
--- a/lib/sisu/v5/sysenv.rb
+++ b/lib/sisu/v5/sysenv.rb
@@ -1478,6 +1478,12 @@ module SiSU_Env
       ? @rc['odt']['ocn']
       : true
     end
+    def xml_scaffold_ocn?
+      ((defined? @rc['xml_scaffold']['ocn']) \
+      && @rc['xml_scaffold']['ocn']==false) \
+      ? @rc['xml_scaffold']['ocn']
+      : true
+    end
     def plaintext_ocn?
       ((defined? @rc['plaintext']['ocn']) \
       && @rc['plaintext']['ocn']==false) \
@@ -3019,6 +3025,12 @@ WOK
           if @md.opt.act[:xml_dom][:set]==:on               #% --xml-dom, -X xml dom type
             ft << @md.fn[:dom]
           end
+          if @md.opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu
+            ft << @md.fn[:xml_scaffold_structure_sisu]
+          end
+          if @md.opt.act[:xml_scaffold_structure_collapse][:set]==:on      #% --xml-scaffold-collapse
+            ft << @md.fn[:xml_scaffold_structure_collapse]
+          end
           @fnb=@md.fnb
         else                                                                     # still needed where/when param is not parsed
           if @opt.act[:html][:set]==:on                  #% --html, -h -H
@@ -3063,6 +3075,12 @@ WOK
           if @opt.act[:xml_dom][:set]==:on               #% --xml-dom, -X xml dom type
             ft << 'dom.xml' << '??.dom.xml' << 'dom.??.xml'
           end
+          if @opt.act[:xml_scaffold_structure_sisu][:set]==:on          #% --xml-scaffold --xml-scaffold-sisu
+            ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml'
+          end
+          if @opt.act[:xml_scaffold_structure_collapse][:set]==:on      #% --xml-scaffold-collapse
+            ft << 'scaffold.xml' << '??.scaffold.xml' << 'scaffold.??.xml'
+          end
         end
         ft=ft.uniq
         filetypes=ft.join(',')
@@ -3154,6 +3172,8 @@ WOK
         deletion(f.place_file.xhtml.dir)
         deletion(f.place_file.xml_sax.dir)
         deletion(f.place_file.xml_dom.dir)
+        deletion(f.place_file.xml_scaffold_structure_sisu.dir)
+        deletion(f.place_file.xml_scaffold_structure_collapse.dir)
         deletion(f.place_file.info.dir)
         deletion(f.place_file.manpage.dir)
         deletion(f.place_file.sqlite_discrete.dir)
@@ -3413,6 +3433,16 @@ WOK
               && FileTest.file?(f.place_file.xml_dom.dir)
                 inp << f.place_file.xml_dom.rel
               end
+              if (@opt.act[:xml_scaffold_structure_sisu][:set]==:on \
+              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \
+              && FileTest.file?(f.place_file.xml_scaffold_structure_sisu.dir)
+                inp << f.place_file.xml_scaffold_structure_sisu.rel
+              end
+              if (@opt.act[:xml_scaffold_structure_collapse][:set]==:on \
+              || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \
+              && FileTest.file?(f.place_file.xml_scaffold_structure_collapse.dir)
+                inp << f.place_file.xml_scaffold_structure_collapse.rel
+              end
               if (@opt.act[:txt][:set]==:on \
               || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \
               && FileTest.file?(f.place_file.txt.dir)
@@ -4385,6 +4415,18 @@ WOK
         fn=base_filename.xml_dom
         make_file(path,fn)
       end
+      def xml_scaffold_structure_sisu
+        path=output_path.xml_scaffold_structure_sisu.dir
+        make_path(path)
+        fn=base_filename.xml_scaffold_structure_sisu
+        make_file(path,fn)
+      end
+      def xml_scaffold_structure_collapse
+        path=output_path.xml_scaffold_structure_collapse.dir
+        make_path(path)
+        fn=base_filename.xml_scaffold_structure_collapse
+        make_file(path,fn)
+      end
       def manpage
         path=output_path.manpage.dir
         make_path(path)
@@ -4547,6 +4589,24 @@ WOK
         end
         self
       end
+      def xml_scaffold_structure_sisu
+        def dir
+          output_path.xml.dir + '/' + base_filename.xml_scaffold_structure_sisu
+        end
+        def rel
+          output_path.xml.rel + '/' + base_filename.xml_scaffold_structure_sisu
+        end
+        self
+      end
+      def xml_scaffold_structure_collapse
+        def dir
+          output_path.xml.dir + '/' + base_filename.xml_scaffold_structure_collapse
+        end
+        def rel
+          output_path.xml.rel + '/' + base_filename.xml_scaffold_structure_collapse
+        end
+        self
+      end
       def sqlite_discrete
         def dir
           output_path.sqlite_discrete.dir + '/' + base_filename.sqlite_discrete
@@ -4892,6 +4952,42 @@ WOK
         end
         i18n(fnh)
       end
+      def xml_scaffold_structure_sisu(fh=nil)
+        fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_sisu])
+        fh[:lng]=lang_code?(fh[:lng])
+        fnh=if output_dir_structure.by_filename?
+          {
+            fn: 'scroll',
+            ft: fh[:ft],
+            lng: fh[:lng],
+          }
+        else
+          {
+            fn: fh[:fn],
+            ft: fh[:ft],
+            lng: fh[:lng],
+          }
+        end
+        i18n(fnh)
+      end
+      def xml_scaffold_structure_collapse(fh=nil)
+        fh=default_hash_build(fh,Sfx[:xml_scaffold_structure_collapse])
+        fh[:lng]=lang_code?(fh[:lng])
+        fnh=if output_dir_structure.by_filename?
+          {
+            fn: 'scroll',
+            ft: fh[:ft],
+            lng: fh[:lng],
+          }
+        else
+          {
+            fn: fh[:fn],
+            ft: fh[:ft],
+            lng: fh[:lng],
+          }
+        end
+        i18n(fnh)
+      end
       def pdf_p(fh=nil)
         fh=default_hash_build(fh,Sfx[:pdf])
         fh[:lng]=lang_code?(fh[:lng])
@@ -5663,6 +5759,56 @@ WOK
         xml
         self
       end
+      def xml_scaffold_structure_sisu
+        def ft
+         'sisu.scaffold.xml'
+         #'xml'
+        end
+        def dir
+          set_path(ft).dir.abc
+        end
+        def url
+          set_path(ft).url.abc
+        end
+        def rel
+          set_path(ft).rel.abc
+        end
+        def rcp
+          set_path(ft).rcp.abc
+        end
+        def rel_sm
+          set_path(ft).rel_sm.ab
+        end
+        def rel_image
+          '../../_sisu/image'
+        end
+        self
+      end
+      def xml_scaffold_structure_collapse
+        def ft
+         'collapsed.scaffold.xml'
+         #'xml'
+        end
+        def dir
+          set_path(ft).dir.abc
+        end
+        def url
+          set_path(ft).url.abc
+        end
+        def rel
+          set_path(ft).rel.abc
+        end
+        def rcp
+          set_path(ft).rcp.abc
+        end
+        def rel_sm
+          set_path(ft).rel_sm.ab
+        end
+        def rel_image
+          '../../_sisu/image'
+        end
+        self
+      end
       def pdf
         def ft
          'pdf'
diff --git a/lib/sisu/v5/urls.rb b/lib/sisu/v5/urls.rb
index 9f8c9a75..a7b53985 100644
--- a/lib/sisu/v5/urls.rb
+++ b/lib/sisu/v5/urls.rb
@@ -116,6 +116,8 @@ module SiSU_Urls
         't --txt (Plain-text (endnotes))'=>@fn[:plain],
         'x --xml-sax (XML sax type)'=>@fn[:sax],
         'X --xml-dom (XML dom type)'=>@fn[:dom],
+        '  --xml-scaffold-sisu (XML scaffold)'=>@fn[:xml_scaffold_structure_sisu],
+        '  --xml-scaffold-collapse (XML scaffold)'=>@fn[:xml_scaffold_structure_collapse],
         'Q --qrcode (QR Code jpg)'=>@fn[:qrcode],
         'y --manifest (Manifest, html)'=>@fn[:manifest],
         'Y (Sitemap, xml)'=>@fn[:sitemap],
@@ -209,6 +211,12 @@ module SiSU_Urls
         def dom(x)
           SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}").result
         end
+        def scaffold_structure_sisu(x)
+          SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_scaffold_structure_sisu.dir}/#{@md.file.base_filename.xml_scaffold_structure_sisu}").result
+        end
+        def scaffold_structure_collapse(x)
+          SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_scaffold_structure_collapse.dir}/#{@md.file.base_filename.xml_scaffold_structure_collapse}").result
+        end
         def sitemap(x) #BROKEN
           SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.sitemaps.dir}/#{@md.file.base_filename.sitemap}").result
         end
@@ -398,6 +406,14 @@ module SiSU_Urls
               and @opt.act[:xml_sax][:set]==:on
                 show.xml.sax(x)
               end
+              if x=~/--xml-scaffold-sisu\b/ \
+              and @opt.act[:xml_scaffold_structure_sisu][:set]==:on
+                show.xml.scaffold_structure_sisu(x)
+              end
+              if x=~/--xml-scaffold-collapse\b/ \
+              and @opt.act[:xml_scaffold_structure_collapse][:set]==:on
+                show.xml.scaffold_structure_collapse(x)
+              end
               if x=~/--qrcode\b/ \
               and @opt.act[:qrcode][:set]==:on
                 show.qrcode(x)
diff --git a/lib/sisu/v5/xml_scaffold.rb b/lib/sisu/v5/xml_scaffold.rb
deleted file mode 100644
index 10a1aee8..00000000
--- a/lib/sisu/v5/xml_scaffold.rb
+++ /dev/null
@@ -1,206 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-   2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Download:
-   <http://www.sisudoc.org/sisu/en/SiSU/download.html>
-
- * Git
-   <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
-   <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/xml_scaffold.rb;hb=HEAD>
-
- * Ralph Amissah
-   <ralph@amissah.com>
-   <ralph.amissah@gmail.com>
-
- ** Description: extract and print an XML rendition of document structure to screen
-
-=end
-module SiSU_XML_Scaffold
-  require_relative 'particulars'                        # particulars.rb
-    include SiSU_Particulars
-  require_relative 'dal'                                # dal.rb
-  require_relative 'sysenv'                             # sysenv.rb
-    include SiSU_Env
-  class Source
-    def initialize(opt)
-      @opt=opt
-      @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
-      @sp='  '
-    end
-    def read
-      begin
-        @md,@dal_array=@particulars.md,@particulars.dal_array
-        SiSU_XML_Scaffold::Source::Scroll.new(@dal_array,@md).songsheet
-      rescue
-        SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
-          __LINE__.to_s + ':' + __FILE__
-        end
-      ensure
-      end
-    end
-    private
-    class Scroll <Source
-      def initialize(data='',md='')
-        @data,@md=data,md
-        @sp='  '
-      end
-      def songsheet
-        @t='sisu'
-        @s=['0',
-          'A',
-          'B',
-          'C',
-          '1',
-          '2',
-          '3'
-        ]
-        #@t='docbook'         #@t='fictionbook'
-        #@s=['book',          #@s=['body',
-        #  'part',            #  'section',
-        #  'subpart N/A',     #  'section',
-        #  'sub-subpart N/A', #  'section',
-        #  'chapter',         #  'section',
-        #  'sect1',           #  'section',
-        #  'sect2'            #  'section'
-        #]                    #]
-        data=@data
-        if @md.opt.act[:verbose_plus][:set]==:on
-          structure_outline(data)
-          structure_simple(data)
-        end
-        structure_build(data)
-      end
-      def structure_outline(data)
-        puts "\ninfo outline --->\n\n"
-        data.each do |o|
-          puts "#{o.ocn} #{o.ln} #{o.obj}" if (o.is ==:heading || o.is ==:heading_insert)
-        end
-      end
-      def structure_simple(data)
-        puts "\nheading outline --->\n\n"
-        data.each_with_index do |o,i|
-          if  (o.is ==:heading || o.is ==:heading_insert); puts "<#{@s[o.ln]}>#{o.ocn} #{o.ln} #{o.obj}</#{@s[o.ln]}>"
-          end
-        end
-      end
-      def structure_build(data)
-        puts "\nXML [#{@t} type] structure outline --->\n\n"
-        h=[0,false,false,false]
-        puts "<#{@s[0]}>"
-        data.each_with_index do |o,i|
-          if  (o.is ==:heading || o.is ==:heading_insert)
-            case o.ln
-            when 1
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*1}<#{@s[1]}>\n#{@sp*1}  #{o.ocn} #{o.ln} #{o.node}"
-              h=[1,true,false,false]
-            when 2
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*2}<#{@s[2]}>\n#{@sp*2}  #{o.ocn} #{o.ln} #{o.node}"
-              h=[2,true,true,false]
-            when 3
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*3}<#{@s[3]}>\n#{@sp*3}  #{o.ocn} #{o.ln} #{o.node}"
-              h=[3,true,true,true]
-            when 4
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*4}<#{@s[4]}>\n#{@sp*4}  #{o.ocn} #{o.ln} #{o.node}"
-              h[0]=4
-            when 5
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*5}<#{@s[5]}>\n#{@sp*5}  #{o.ocn} #{o.ln} #{o.node}"
-              h[0]=5
-            when 6
-              structure_build_tag_close(o.ln,h)
-              puts "#{@sp*6}<#{@s[6]}>\n#{@sp*6}  #{o.ocn} #{o.ln} #{o.node}"
-              h[0]=6
-            end
-          end
-        end
-        structure_build_tag_close(0,h)
-      end
-      def structure_build_tag_close(lev,h)
-        case h[0]
-        when 1
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        when 2
-          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        when 3
-          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and h[3]
-          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        when 4
-          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
-          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and h[3]
-          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        when 5
-          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
-          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
-          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and h[3]
-          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        when 6
-          puts "#{@sp*6}</#{@s[6]}>" if (lev <= 6)
-          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
-          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
-          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and h[3]
-          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
-          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
-          puts "</#{@s[0]}>"         if (lev==0)
-        end
-      end
-    end
-  end
-end
-__END__
diff --git a/lib/sisu/v5/xml_scaffold_structure_collapsed.rb b/lib/sisu/v5/xml_scaffold_structure_collapsed.rb
new file mode 100644
index 00000000..a90207ff
--- /dev/null
+++ b/lib/sisu/v5/xml_scaffold_structure_collapsed.rb
@@ -0,0 +1,202 @@
+# encoding: utf-8
+=begin
+
+ * Name: SiSU
+
+ * Description: a framework for document structuring, publishing and search
+
+ * Author: Ralph Amissah
+
+ * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
+
+ * Download:
+   <http://www.sisudoc.org/sisu/en/SiSU/download.html>
+
+ * Git
+   <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+   <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/xml_scaffold.rb;hb=HEAD>
+
+ * Ralph Amissah
+   <ralph@amissah.com>
+   <ralph.amissah@gmail.com>
+
+ ** Description: extract and print an XML rendition of document structure to screen
+
+=end
+module SiSU_XML_Scaffold_Structure_Collapse
+  require_relative 'particulars'                        # particulars.rb
+    include SiSU_Particulars
+  require_relative 'dal'                                # dal.rb
+  require_relative 'sysenv'                             # sysenv.rb
+    include SiSU_Env
+  class Source
+    def initialize(opt)
+      @opt=opt
+      @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
+      @sp='  '
+    end
+    def read
+      begin
+        @md,@dal_array=@particulars.md,@particulars.dal_array
+        SiSU_XML_Scaffold_Structure_Collapse::Source::Scroll.new(@dal_array,@md).songsheet
+      rescue
+        SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
+          __LINE__.to_s + ':' + __FILE__
+        end
+      ensure
+      end
+    end
+    private
+    class Scroll <Source
+      def initialize(data='',md='')
+        @data,@md=data,md
+        @sp='  '
+      end
+      def songsheet
+        @t='sisu'
+        data=@data
+        if @md.opt.act[:verbose_plus][:set]==:on
+          structure_collapsed(data)
+        end
+        structure_build_collapsed(data)
+      end
+      def tags
+        # collapsed -->
+        def collapsed
+          [ '0',
+            '1',
+            '2',
+            '3',
+            '4',
+            '5',
+            '6'
+          ]
+        end
+        def docbook
+        end
+        def fictionbook
+        end
+        self
+      end
+      def output(o,lev=nil,comment='')
+         puts lev == 0..6 \
+         ? "#{@sp*lev}<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+         : "<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+      end
+      def structure_collapsed(data)
+        puts "\ncollapsed structure, heading outline --->\n\n"
+        data.each_with_index do |o,i|
+          if  (o.is ==:heading || o.is ==:heading_insert)
+            output(o,o.lc)
+          end
+        end
+      end
+      def structure_build_collapsed(data)
+        @s=tags.collapsed
+        puts "\nXML [#{@t} type] structure outline --->\n\n"
+        h=[0,false,false,false]
+        puts "<#{@s[0]}>"
+        data.each_with_index do |o,i|
+          if  (o.is ==:heading || o.is ==:heading_insert)
+            lev=o.lc
+            structure_build_tag_close(lev,h)
+            puts "#{@sp*lev}<#{@s[lev]}>\n#{@sp*lev}  [#{o.ocn}] #{lev} {#{o.node}}"
+            h[0]=lev
+          end
+        end
+        structure_build_tag_close(0,h)
+      end
+      def structure_build_tag_close(lev,h)
+        case h[0]
+        when 1
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 2
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2)
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 3
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3)
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2)
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 4
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3)
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2)
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 5
+          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3)
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2)
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 6
+          puts "#{@sp*6}</#{@s[6]}>" if (lev <= 6)
+          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3)
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2)
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1)
+          puts "</#{@s[0]}>"         if (lev==0)
+        end
+      end
+    end
+  end
+end
+__END__
+@s=['0',
+  'A',
+  'B',
+  'C',
+  '1',
+  '2',
+  '3'
+]
+#@t='docbook'         #@t='fictionbook'
+#@s=['book',          #@s=['body',
+#  'part',            #  'section',
+#  'subpart N/A',     #  'section',
+#  'sub-subpart N/A', #  'section',
+#  'chapter',         #  'section',
+#  'sect1',           #  'section',
+#  'sect2'            #  'section'
+#]                    #]
diff --git a/lib/sisu/v5/xml_scaffold_structure_sisu.rb b/lib/sisu/v5/xml_scaffold_structure_sisu.rb
new file mode 100644
index 00000000..64173566
--- /dev/null
+++ b/lib/sisu/v5/xml_scaffold_structure_sisu.rb
@@ -0,0 +1,205 @@
+# encoding: utf-8
+=begin
+
+ * Name: SiSU
+
+ * Description: a framework for document structuring, publishing and search
+
+ * Author: Ralph Amissah
+
+ * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+   2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
+
+ * Download:
+   <http://www.sisudoc.org/sisu/en/SiSU/download.html>
+
+ * Git
+   <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+   <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/xml_scaffold.rb;hb=HEAD>
+
+ * Ralph Amissah
+   <ralph@amissah.com>
+   <ralph.amissah@gmail.com>
+
+ ** Description: extract and print an XML rendition of document structure to screen
+
+=end
+module SiSU_XML_Scaffold_Structure_Sisu
+  require_relative 'particulars'                        # particulars.rb
+    include SiSU_Particulars
+  require_relative 'dal'                                # dal.rb
+  require_relative 'sysenv'                             # sysenv.rb
+    include SiSU_Env
+  class Source
+    def initialize(opt)
+      @opt=opt
+      @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
+      @sp='  '
+    end
+    def read
+      begin
+        @md,@dal_array=@particulars.md,@particulars.dal_array
+        SiSU_XML_Scaffold_Structure_Sisu::Source::Scroll.new(@dal_array,@md).songsheet
+      rescue
+        SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
+          __LINE__.to_s + ':' + __FILE__
+        end
+      ensure
+      end
+    end
+    private
+    class Scroll <Source
+      def initialize(data='',md='')
+        @data,@md=data,md
+        @sp='  '
+      end
+      def songsheet
+        @t='sisu'
+        data=@data
+        if @md.opt.act[:verbose_plus][:set]==:on
+          structure_sisu_simple(data)
+        end
+        structure_build_sisu(data)
+      end
+      def tags
+        def sisu
+          [ '0',
+            'A',
+            'B',
+            'C',
+            '1',
+            '2',
+            '3'
+          ]
+        end
+        self
+      end
+      def structure_sisu_simple(data)
+        puts "\nsisu structure, heading outline --->\n\n"
+        data.each_with_index do |o,i|
+          if  (o.is ==:heading || o.is ==:heading_insert)
+            puts "#{@sp*o.ln}<#{tags.sisu[o.ln]}>[#{o.ocn}] #{o.ln} #{o.obj}</#{tags.sisu[o.ln]}>"
+          end
+        end
+      end
+      def output(o,lev=nil,comment='')
+         puts lev == 0..6 \
+         ? "#{@sp*lev}<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+         : "<#{lev}>[#{o.ocn}] #{o.ln} #{o.obj}</#{lev}>#{comment}"
+      end
+      def structure_build_sisu(data)
+        @s=tags.sisu
+        puts "\nXML [#{@t} type] structure outline --->\n\n"
+        h=[0,false,false,false]
+        puts "<#{@s[0]}>"
+        data.each_with_index do |o,i|
+          if  (o.is ==:heading || o.is ==:heading_insert)
+            structure_build_tag_close(o.ln,h)
+            puts "#{@sp*o.ln}<#{@s[o.ln]}>\n#{@sp*o.ln}  [#{o.ocn}] #{o.ln} {#{o.node}}"
+            case o.ln
+            when 1
+              h=[o.ln,true,false,false]
+            when 2
+              h=[o.ln,true,true,false]
+            when 3
+              h=[o.ln,true,true,true]
+            when 4..6
+              h[0]=o.ln
+            end
+          end
+        end
+        structure_build_tag_close(0,h)
+      end
+      def structure_build_tag_close(lev,h)
+        case h[0]
+        when 1
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 2
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) && h[2]
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 3
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) && h[3]
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) && h[2]
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 4
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) && h[3]
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) && h[2]
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 5
+          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) && h[3]
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) && h[2]
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        when 6
+          puts "#{@sp*6}</#{@s[6]}>" if (lev <= 6)
+          puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5)
+          puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4)
+          puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) && h[3]
+          puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) && h[2]
+          puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) && h[1]
+          puts "</#{@s[0]}>"         if (lev==0)
+        end
+      end
+    end
+  end
+end
+__END__
+@s=['0',
+  'A',
+  'B',
+  'C',
+  '1',
+  '2',
+  '3'
+]
+#@t='docbook'         #@t='fictionbook'
+#@s=['book',          #@s=['body',
+#  'part',            #  'section',
+#  'subpart N/A',     #  'section',
+#  'sub-subpart N/A', #  'section',
+#  'chapter',         #  'section',
+#  'sect1',           #  'section',
+#  'sect2'            #  'section'
+#]                    #]
-- 
cgit v1.2.3