# 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, 2014 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 . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Git * Ralph Amissah ** Description: document abstraction =end module SiSU_AO_DocumentStructure class Extract def extract(h,o) h ? h : o end end class ObjectMetadata attr_accessor :is,:of,:tags,:obj,:digest def initialize @tags={} @is=@tmp=@digest=nil @of=:meta end def metadata(tags) of = @of #Symbol, classification - group is = :meta #Symbol, classification - specific type tags = tags || ((defined? o.tags) ? o.tags : {}) #String, metadata type/tag obj = nil @of,@is,@tags,@obj=of,is,tags,obj self end end class ObjectMeta attr_accessor :obj,:is,:of,:tag,:digest,:tmp def initialize @is=@obj=@tag=@digest=@digest=@tmp=nil @of=:meta end def metadata(h,o=nil) of = @of #Symbol, classification - group is = :meta #Symbol, classification - specific type tag = h[:tag] || ((defined? o.tag) ? o.tag : nil) #String, metadata type/tag obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 @of,@is,@tag,@obj,@digest,@tmp=of,is,tag,obj,digest,tmp self end end class ObjectHeading attr_accessor :obj,:is,:tags,:of,:lv,:ln,:lc,:use_,:name,:idx,:ocn,:odv,:osp,:node,:parent,:ocn_,:note_,:autonum_,:digest,:tmp def initialize @of=:para @is=@obj=@lv=@ln=@lc=@use_=@name=@idx=@size=@ocn=@odv=@osp=@node=@parent=@ocn_=@note_=@autonum_=@digest=@tmp=nil @tags=[] end def heading_ln(lv) case lv when /A/ then 0 when /B/ then 1 when /C/ then 2 when /D/ then 3 when /1/ then 4 when /2/ then 5 when /3/ then 6 when /4/ then 7 when /5/ then 8 when /6/ then 9 end end def heading_lv(ln) case ln.to_s when /0/ then 'A' when /1/ then 'B' when /2/ then 'C' when /3/ then 'D' when /4/ then '1' when /5/ then '2' when /6/ then '3' when /7/ then '4' when /8/ then '5' when /9/ then '6' end end def heading(h,o=nil) if not h[:ln] \ and (h[:lv] and h[:lv]=~/[1-6A-D]/) h[:ln]=heading_ln(h[:lv]) elsif not h[:lv] \ and (h[:ln] and h[:ln].to_s=~/[0-9]/) h[:lv]=heading_lv(h[:ln]) end of = @of #Symbol, classification - group is = :heading #Symbol, classification - specific type name = h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) node = h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] lv = h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-D then 1-6 ln = h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 lc = h[:lc] || ((defined? o.lc) ? o.lc : nil) #Integer, document structure collapsed level, convenience (collapse sisu's dual level document structure for markup with simple linear structure) use_ = if lv \ and lv == '1' h[:use_] || ((defined? o.use_) ? o.use_ : :ok) elsif not lv.empty? \ and lv =~ /[A-D2-3]/ :ok else h[:use_] || ((defined? o.use_) ? o.use_ : :ok) end ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end autonum_ = if h[:autonum_].nil? ((defined? o.autonum_) ? o.autonum_ : true) #Bool? auto-numbering if requested default on, false suppresses else h[:autonum_] end note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@lv,@ln,@lc,@name,@tags,@obj,@idx,@ocn,@odv,@osp,@node,@parent,@use_,@ocn_,@note_,@autonum_,@digest,@tmp= of, is, lv, ln, lc, name, tags, obj, idx, ocn, odv, osp, node, parent, use_, ocn_, note_, autonum_, digest, tmp self end def heading_insert(h,o=nil) heading(h,o=nil) @is = :heading_insert #String, classification - specific type self end end class ObjectPara attr_accessor :obj,:is,:tags,:of,:name,:idx,:quote_,:bullet_,:indent,:hang,:ocn,:odv,:osp,:parent,:note_,:image_,:ocn_,:digest,:tmp def initialize @of=:para @is=@obj=@name=@idx=@quote_=@bullet_=@indent=@hang=@size=@ocn=@odv=@osp=@parent=@note_=@image_=@ocn_=@digest=@tmp=nil @tags=[] end def paragraph(h,o=nil) of = @of #Symbol, classification - group is = :para #Symbol, classification - specific type name = h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] indent = h[:indent].to_s || ((defined? o.indent) ? o.indent.to_s : nil) #Integer, indent level hang = h[:hang].to_s || ((defined? o.hang) ? o.hang.to_s : nil) #Integer, hanging indent level bullet_ = h[:bullet_] || ((defined? o.bullet_) ? o.bullet_ : false) #Bool, bulleted? quote_ = h[:quote_] || ((defined? o.quote_) ? o.quote_ : false) #Bool, quote (blockquote)? note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) image_ = h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@quote_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp= of, is, name, tags, obj, indent, hang, bullet_, quote_, idx, ocn, odv, osp, parent, image_, note_, ocn_, digest, tmp self end def docinfo(h,o=nil) of = @of #String, classification - group is = :docinfo #String, classification - specific type name = h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? tags = h[:tags] || ((defined? o.tags) ? o.tags : nil) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = nil #String, book index provided? ocn = nil #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] indent = nil #Integer, indent level hang = nil #Integer, indent level bullet_ = false #Bool, bulleted? note_ = false #Bool, endnotes/footnotes? (processing optimization) image_ = h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp= of, is, name, tags, obj, indent, hang, bullet_, idx, ocn, odv, osp, parent, image_, note_, ocn_, digest, tmp self end end class ObjectBlockTxt attr_accessor :obj,:is,:of,:tags,:lngsyn,:idx,:ocn,:odv,:osp,:parent,:note_,:number_,:ocn_,:digest,:tmp def initialize @of=:block @is=@obj=@lngsyn=@idx=@ocn=@odv=@osp=@parent=@note_=@number_=@ocn_=@digest=@tmp=nil @tags=[] end def code(h,o=nil) of = @of #Symbol, classification - group #alt 'code' is = :code #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content lngsyn = h[:lngsyn] || ((defined? o.lngsyn) ? o.lngsyn : :txt) #symbol, code lngsyn idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] number_ = h[:number_] || ((defined? o.number_) ? o.number_ : false) #Bool, numbered or not? note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@lngsyn,@idx,@ocn,@odv,@osp,@parent,@number_,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, lngsyn, idx, ocn, odv, osp, parent, number_, note_, ocn_, num, digest, tmp self end def box(h,o=nil) of = @of #Symbol, classification - group is = :box #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, idx, ocn, odv, osp, parent, note_, ocn_, num, digest, tmp self end def block(h,o=nil) of = @of #Symbol, classification - group is = :block #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, idx, ocn, odv, osp, parent, note_, ocn_, num, digest, tmp self end def group(h,o=nil) of = @of #Symbol, classification - group is = :group #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, idx, ocn, odv, osp, parent, note_, ocn_, num, digest, tmp self end def alt(h,o=nil) #see block of = @of #Symbol, classification - group is = :alt #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, idx, ocn, odv, osp, parent, note_, ocn_, num, digest, tmp self end def verse(h,o=nil) #part of poem decide how you deal with this of = @of #Symbol, classification - group is = :verse #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, obj, idx, ocn, odv, osp, parent, note_, ocn_, num, digest, tmp @h=nil self end end class ObjectTable attr_accessor :obj,:is,:of,:lv,:tags,:name,:idx,:indent,:hang,:size,:ocn,:num,:head_,:cols,:widths,:odv,:osp,:parent,:note_,:ocn_,:digest,:tmp def initialize @of=:block @is=@obj=@lv=@name=@idx=@indent=@hang=@size=@ocn,@num,@head_,@cols,@widths=@odv=@osp=@parent=@note_=@ocn_=@num=@digest=@tmp=nil @tags=[] end def table(h,o=nil) of = @of #Symbol, classification - group is = :table #Symbol, classification - specific type tags = h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any cols = h[:cols] || ((defined? o.cols) ? o.cols : nil) widths = h[:widths] || ((defined? o.widths) ? o.widths : nil) obj = h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content idx = h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn = h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv = h[:odv] || ((defined? o.odv) ? o.odv : nil) osp = h[:osp] || ((defined? o.osp) ? o.osp : nil) parent = h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] head_ = h[:head_] || ((defined? o.head_) ? o.head_ : false) note_ = h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_ = if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end num = h[:num] || ((defined? o.num) ? o.num : nil) digest = h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp = h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@cols,@widths,@obj,@idx,@ocn,@odv,@osp,@parent,@head_,@note_,@ocn_,@num,@digest,@tmp= of, is, tags, cols, widths, obj, idx, ocn, odv, osp, parent, head_, note_, ocn_, num, digest, tmp self end end class ObjectImage attr_accessor :obj,:is,:of,:lv,:idx,:size,:ocn,:parent,:note_,:ocn_,:digest,:tmp def initialize @of=:image @is=@obj=@lv=@idx=@size=@ocn=@parent=@note_=@ocn_=@tmp=@digest=nil @tags=[] end def image(h,o=nil) #not yet used, and what of a paragraph containing several images, consider of= @of #Symbol, classification - group is= :image #Symbol, classification - specific type tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content size= h[:size] || ((defined? o.size) ? o.size : nil) idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) ocn_=if h[:ocn_].nil? ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider else h[:ocn_] end digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, sha512, sha256 or md5 tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@tags,@obj,@size,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,size,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp self end end class ObjectStructure attr_accessor :obj,:tag,:node,:lv,:ln,:lc,:status,:is,:of,:tmp def initialize @of=:structure @is=@obj=@node=@lv=@ln=@lc=@status=@tmp=nil end def xml_dom(h,o=nil) of= @of #Symbol, classification - group is= :xml_dom #Symbol, classification - specific type obj= h[:obj] || ((defined? o.obj) ? o.obj : '') #String, text content lv= h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-D then 1-6 ln= h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 lc= h[:lc] || ((defined? o.lc) ? o.lc : nil) #Integer, document structure collapsed level, convenience (collapse sisu's dual level document structure for markup with simple linear structure) node= h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] status= h[:status] || ((defined? o.status) ? o.status : nil) #tag status Symbol :open or :close tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@obj,@status,@node,@lv,@ln,@lc,@tmp=of,is,obj,status,node,lv,ln,lc,tmp self end end class ObjectFlag attr_accessor :obj,:is,:of,:flag,:mod,:tmp def initialize @of=:flag @is=@obj=@flag=@mod=@tmp=nil end def flag(h,o=nil) of= @of #Symbol, classification - group is= :flag #Symbol, classification - specific type obj= nil #String, text content flag= h[:flag] || ((defined? o.flag) ? o.flag : nil) #String, text content mod= h[:mod] || ((defined? o.mod) ? o.mod : nil) #String, text content tmp= h[:flag] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@obj,@flag,@mod,@tmp=of,is,obj,flag,mod,tmp self end def flag_ocn(h,o=nil) of= @of #Symbol, classification - group is= :flag_ocn #Symbol, classification - specific type obj= nil #String, text content flag= h[:flag] || ((defined? o.flag) ? o.flag : nil) #String, text content mod= h[:mod] || ((defined? o.mod) ? o.mod : nil) #String, text content tmp= h[:flag] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@obj,@flag,@mod,@tmp=of,is,obj,flag,mod,tmp self end end class ObjectLayout attr_accessor :obj,:sym,:attr,:is,:is_for,:of,:from,:tmp,:num def initialize @of=:layout @is=@is_for=@obj=@from=@tmp=@num=nil end def break(h,f=nil) #decide how to deal with of= @of #Symbol, classification - group is= :break #Symbol, classification - specific type obj= h[:obj] #String, text content from= f tmp= h[:tmp] #available for processing, empty after use @of,@is,@obj,@from,@tmp=of,is,obj,from,tmp self end def insert(h,o=nil) #decide how to deal with, could mimic paragraph? of= @of #Symbol, classification - group is= :insert #Symbol, classification - specific type obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@obj,@tmp=of,is,obj,tmp self end def open_close(h,o=nil) #useful for poem & quote of= @of #Symbol, classification - group is= :open_close_tags #Symbol, classification - specific type is_for= h[:is_for] || ((defined? o.is_for) ? o.is_for : nil) #String, text content obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content sym= h[:sym] || ((defined? o.sym) ? o.sym : nil) #Symbol tag_open, tag_close attr= h[:attr] || ((defined? o.attr) ? o.attr : nil) #String, text content tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use num= h[:num] || ((defined? o.num) ? o.num : nil) @of,@is,@is_for,@obj,@sym,@attr,@tmp,@num= of, is, is_for, obj, sym, attr, tmp, num self end end class ObjectComment attr_accessor :obj,:is,:of,:tmp def initialize @of=:comment @is=@obj=@tmp=nil end def comment(h,o=nil) of= @of #Symbol, classification - group is= :comment #Symbol, classification - specific type obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use @of,@is,@obj,@tmp=of,is,obj,tmp self end end end __END__ # ~# |-# no paragraph number # -# not included in toc