aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--data/doc/sisu/CHANGELOG_v65
-rw-r--r--lib/sisu/v6/ao_doc_objects.rb16
-rw-r--r--lib/sisu/v6/ao_doc_str.rb80
-rw-r--r--lib/sisu/v6/ao_numbering.rb2
-rw-r--r--lib/sisu/v6/texpdf_format.rb22
-rw-r--r--lib/sisu/v6/txt_plain.rb5
-rw-r--r--lib/sisu/v6/xml_odf_odt.rb7
-rw-r--r--sisu.org2
8 files changed, 80 insertions, 59 deletions
diff --git a/data/doc/sisu/CHANGELOG_v6 b/data/doc/sisu/CHANGELOG_v6
index 1d3a5c6e..a103a9ed 100644
--- a/data/doc/sisu/CHANGELOG_v6
+++ b/data/doc/sisu/CHANGELOG_v6
@@ -35,6 +35,11 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_6.0.5.orig.tar.xz
* ao_syntax, address possible manual use of url delimiters「」
+* ao, heading with no ocn, distinguish ~# from -#
+ * ~# is general & means no ocn (for any object to which it is applied)
+ * -# is relevant only for 1~ dummy headings & instructs that they should be
+ removed from output where possible, applied so far to pdf, odt & plaintext
+
* composite, fix includes, provide extra newline after inserted comment
(Closes: #744360) "includes do not work properly"
diff --git a/lib/sisu/v6/ao_doc_objects.rb b/lib/sisu/v6/ao_doc_objects.rb
index 8dbdedc3..9555ab5e 100644
--- a/lib/sisu/v6/ao_doc_objects.rb
+++ b/lib/sisu/v6/ao_doc_objects.rb
@@ -100,10 +100,10 @@ module SiSU_AO_DocumentStructure
end
end
class ObjectHeading
- attr_accessor :obj,:is,:tags,:of,:lv,:ln,:lc,:toc_,:name,:idx,:ocn,:odv,:osp,:node,:parent,:ocn_,:note_,:autonum_,:digest,:tmp
+ 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=@toc_=@name=@idx=@size=@ocn=@odv=@osp=@node=@parent=@ocn_=@note_=@autonum_=@digest=@tmp=nil
+ @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)
@@ -156,7 +156,15 @@ module SiSU_AO_DocumentStructure
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)
- toc_= h[:toc_] || ((defined? o.toc_) ? o.toc_ : false) #Bool, do not include in toc, (relevant to headings)
+ 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? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider
else h[:ocn_]
end
@@ -166,7 +174,7 @@ module SiSU_AO_DocumentStructure
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,@toc_,@ocn_,@note_,@autonum_,@digest,@tmp=of,is,lv,ln,lc,name,tags,obj,idx,ocn,odv,osp,node,parent,toc_,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=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)
diff --git a/lib/sisu/v6/ao_doc_str.rb b/lib/sisu/v6/ao_doc_str.rb
index 3eb4a804..d060d89c 100644
--- a/lib/sisu/v6/ao_doc_str.rb
+++ b/lib/sisu/v6/ao_doc_str.rb
@@ -234,10 +234,10 @@ module SiSU_AO_DocumentStructureExtract
@@flag[:ocn]=:on
{flag: :ocn_on}
when /[~]/
- @@flag[:ocn]=:off_headings_substantive
- {flag: :ocn_off, mod: :headings_substantive}
- when /[-]/
- @@flag[:ocn]=:off_headings_exclude
+ @@flag[:ocn]=:ocn_off_headings_keep
+ {flag: :ocn_off, mod: :headings_keep}
+ when /[-]/ #of particular relevance with level 1~ which is required to precede substantive text & used e.g. in html segmented text
+ @@flag[:ocn]=:ocn_off_headings_dummy_lev1
{flag: :ocn_off, mod: :headings_exclude}
else
@@flag[:ocn]=:on
@@ -286,12 +286,14 @@ module SiSU_AO_DocumentStructureExtract
obj=$1
note=endnote_test?(obj)
obj,tags=extract_tags(obj)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ and t_o =~/^1\~\S*\s+/m
obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
+ elsif @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
obj << ' ~#'
end
end
@@ -302,12 +304,14 @@ module SiSU_AO_DocumentStructureExtract
name,obj=$1,$2
note=endnote_test?(obj)
obj,tags=extract_tags(obj)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ and t_o =~/^1\~\S*\s+/m
obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
+ elsif @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
obj << ' ~#'
end
end
@@ -318,12 +322,14 @@ module SiSU_AO_DocumentStructureExtract
name,obj=$1,$2
note=endnote_test?(obj)
obj,tags=extract_tags(obj,name)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ and t_o =~/^1\~\S*\s+/m
obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
+ elsif @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
obj << ' ~#'
end
end
@@ -345,8 +351,8 @@ module SiSU_AO_DocumentStructureExtract
note=endnote_test?(obj)
obj,tags=extract_tags(obj)
unless obj=~/\A\s*\Z/m
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
obj << ' ~#'
end
@@ -368,8 +374,8 @@ module SiSU_AO_DocumentStructureExtract
note=endnote_test?(obj)
obj,tags=extract_tags(obj)
unless obj=~/\A\s*\Z/m
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
obj << ' ~#'
end
@@ -391,8 +397,8 @@ module SiSU_AO_DocumentStructureExtract
image=image_test(t_o)
note=endnote_test?(t_o)
obj,tags=extract_tags(t_o)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
+ if @@flag[:ocn]==:ocn_off_headings_dummy_lev1 \
+ or @@flag[:ocn]==:ocn_off_headings_keep
unless obj =~ /[~-][#]\s*$/
obj << ' ~#'
end
@@ -1193,9 +1199,15 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
dob.ln,dob.node,dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,ocn,ocn_flag,ocn_dv,ocn_sp,parent,collapsed_level
else
ocnu+=1
- dob.obj=dob.obj.gsub(/#{Mx[:fa_o]}[~-]##{Mx[:fa_c]}/,'') if dob.obj
- ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}"
- dob.ln,dob.node,dob.ocn,dob.ocn_,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,nil,ocn_flag,ocn_dv,ocn_sp,parent,collapsed_level
+ heading_use=:ok
+ if dob.obj=~/#{Mx[:pa_non_object_no_heading]}/
+ dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_no_heading]}/,'')
+ heading_use=:ok
+ elsif dob.obj=~/#{Mx[:pa_non_object_dummy_heading]}/
+ dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_dummy_heading]}/,'')
+ heading_use=:dummy
+ end
+ dob.ln,dob.node,dob.ocn,dob.ocn_,dob.use_,dob.odv,dob.osp,dob.parent,dob.lc=ln,node,nil,ocn_flag,heading_use,ocn_dv,ocn_sp,parent,collapsed_level
end
else
if dob.of !=:meta \
@@ -1212,24 +1224,6 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
end
end
h
- elsif dob.obj=~/#{Mx[:pa_non_object_no_heading]}/
- dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_no_heading]}/,'')
- if dob.is==:para
- h={ obj: dob.obj, ocn_: false, ocn: nil, hang: dob.hang, indent: dob.indent, bullet_: dob.bullet_, tags: dob.tags, parent: dob.parent }
- dob=SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h,dob)
- elsif dob.is==:heading
- h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: true, parent: dob.parent }
- dob=SiSU_AO_DocumentStructure::ObjectHeading.new.heading(h,dob)
- end
- elsif dob.obj=~/#{Mx[:pa_non_object_dummy_heading]}/
- dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_dummy_heading]}/,'')
- if dob.is==:para
- h={ obj: dob.obj, ocn_: false, ocn: nil, hang: dob.hang, indent: dob.indent, bullet_: dob.bullet_, tags: dob.tags, parent: dob.parent }
- dob=SiSU_AO_DocumentStructure::ObjectPara.new.paragraph(h,dob)
- elsif dob.is==:heading
- h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: false, parent: dob.parent }
- dob=SiSU_AO_DocumentStructure::ObjectHeading.new.heading(h,dob)
- end
else dob
end
if dob.is==:code \
diff --git a/lib/sisu/v6/ao_numbering.rb b/lib/sisu/v6/ao_numbering.rb
index acb2351a..e04befb0 100644
--- a/lib/sisu/v6/ao_numbering.rb
+++ b/lib/sisu/v6/ao_numbering.rb
@@ -167,7 +167,7 @@ module SiSU_AO_Numbering
@subnumber=0 if dob.ln==no1
end
if dob.ln.to_s =~/^[0-6]/ \
- and not dob.toc_ \
+ and not dob.use_ ==:dummy \
and dob.obj !~/#{Mx[:fa_o]}(?:~#|-#)#{Mx[:fa_c]}/ # <-- fix
if dob.ln==no1
t_no1+=1; t_no2=0; t_no3=0
diff --git a/lib/sisu/v6/texpdf_format.rb b/lib/sisu/v6/texpdf_format.rb
index e680bc00..ce027718 100644
--- a/lib/sisu/v6/texpdf_format.rb
+++ b/lib/sisu/v6/texpdf_format.rb
@@ -258,20 +258,24 @@ module SiSU_TeX_Pdf
\\markboth{#{@md.title.full}}\n")
dob
end
- def heading_sublevels(dob,sublev)
- if sublev==:lev1
+ def heading_dev_null(dob)
+ dob.tmp,dob.obj='',''
+ dob
+ end
+ def heading_sublevels(dob)
+ if dob.lv=='1'
sect='section'
tocadd=%{\\addcontentsline{toc}{section}}
pre=''
post=''
headadd=%{\n\\markright{#{@md.title.full}}}
- elsif sublev==:lev2
+ elsif dob.lv=='2'
sect='subsection'
tocadd=%{\\addcontentsline{toc}{subsection}}
pre=''
post=" \\\\\n"
headadd=''
- elsif sublev==:lev3
+ elsif dob.lv=='3'
sect='subsubsection'
tocadd=%{\\addcontentsline{toc}{subsubsection}}
pre='' #pre='~~~~'
@@ -307,13 +311,17 @@ module SiSU_TeX_Pdf
section_heading_level(@dob)
end
def heading_level_1
- heading_sublevels(@dob,:lev1)
+ if not @dob.use_ == :dummy
+ heading_sublevels(@dob)
+ else
+ heading_dev_null(@dob)
+ end
end
def heading_level_2
- heading_sublevels(@dob,:lev2)
+ heading_sublevels(@dob)
end
def heading_level_3
- heading_sublevels(@dob,:lev3)
+ heading_sublevels(@dob)
end
def hang
case @dob.indent
diff --git a/lib/sisu/v6/txt_plain.rb b/lib/sisu/v6/txt_plain.rb
index 1aa08f0e..a56f5ac9 100644
--- a/lib/sisu/v6/txt_plain.rb
+++ b/lib/sisu/v6/txt_plain.rb
@@ -384,7 +384,10 @@ WOK
when 1 then wrapped.upcase << break_line << decorate.heading_underscore.l1*times + p_num << break_line*2
when 2 then wrapped.upcase << break_line << decorate.heading_underscore.l2*times + p_num << break_line*2
when 3 then wrapped.upcase << break_line << decorate.heading_underscore.l3*times + p_num << break_line*2
- when 4 then wrapped.upcase << break_line << decorate.heading_underscore.l4*times + p_num << break_line*2
+ when 4
+ unless dob.use_ == :dummy
+ wrapped.upcase << break_line << decorate.heading_underscore.l4*times + p_num << break_line*2
+ end
when 5 then wrapped.upcase << break_line << decorate.heading_underscore.l5*times + p_num << break_line*2
when 6 then wrapped.upcase << break_line << decorate.heading_underscore.l6*times + p_num << break_line*2
end
diff --git a/lib/sisu/v6/xml_odf_odt.rb b/lib/sisu/v6/xml_odf_odt.rb
index 0457ad7d..0fe880c0 100644
--- a/lib/sisu/v6/xml_odf_odt.rb
+++ b/lib/sisu/v6/xml_odf_odt.rb
@@ -209,8 +209,11 @@ module SiSU_XML_ODF_ODT
end
end
@@docstart=false
- dob.tmp=dob.obj
- dob.obj=%{#{breakpage}<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:h>}
+ if dob.use_ != :dummy
+ dob.tmp=dob.obj
+ dob.obj=%{#{breakpage}<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:h>}
+ else dob.tmp,dob.obj='',''
+ end
dob
end
def toc(dob,p_num)
diff --git a/sisu.org b/sisu.org
index 9ba0f8be..ff348dea 100644
--- a/sisu.org
+++ b/sisu.org
@@ -995,7 +995,7 @@ revisit,
**** DONE (5.3.5::6.0.5) [#B] victory chals discussed parsing problem caused by use of open-close markers around url
-**** TODO [#B] exclude heading where possible marker '-#' not distinguished from unnumbered heading '~#'
+**** TODO UNDERWAY (6.0.5) [#B] exclude heading where possible marker '-#' not distinguished from unnumbered heading '~#'
* ~# is general & means no ocn (for any object to which it is applied)
* -# is relevant only for 1~ dummy headings & instructs that they should be