aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2014-09-12 21:38:22 -0400
committerRalph Amissah <ralph@amissah.com>2014-09-12 21:38:22 -0400
commit247f6048cb2a590dde53a1401dc5c325f632e2b6 (patch)
tree5d98471f62f3f91ac67001dd7194d73df2e00152 /lib
parentdebian/changelog (5.6.5-1) (diff)
parentv5 v6: ao, auto naming (segment & tag), exceptions, avoidance of name collisions (diff)
Merge tag 'sisu_5.6.6' into debian/sid
SiSU 5.6.6
Diffstat (limited to 'lib')
-rw-r--r--lib/sisu/v5/ao_doc_str.rb39
-rw-r--r--lib/sisu/v5/ao_expand_insertions.rb56
-rw-r--r--lib/sisu/v5/ao_numbering.rb247
-rw-r--r--lib/sisu/v5/hub.rb2
-rw-r--r--lib/sisu/v5/se_envcall.rb13
-rw-r--r--lib/sisu/v5/se_processing.rb20
-rw-r--r--lib/sisu/v6/ao_doc_str.rb39
-rw-r--r--lib/sisu/v6/ao_expand_insertions.rb56
-rw-r--r--lib/sisu/v6/ao_numbering.rb247
-rw-r--r--lib/sisu/v6/hub.rb2
-rw-r--r--lib/sisu/v6/se_envcall.rb13
-rw-r--r--lib/sisu/v6/se_processing.rb20
12 files changed, 542 insertions, 212 deletions
diff --git a/lib/sisu/v5/ao_doc_str.rb b/lib/sisu/v5/ao_doc_str.rb
index 49c9bdf1..f7884b31 100644
--- a/lib/sisu/v5/ao_doc_str.rb
+++ b/lib/sisu/v5/ao_doc_str.rb
@@ -1307,7 +1307,8 @@ module SiSU_AO_DocumentStructureExtract
node_parent_ln=/^([0-7])/.match(node_parent)[1].to_i
STDERR.puts %{current level: #{structure_info.lv[node_ln]} (possible parent levels: #{structure_info.possible_parents(structure_info.lv[node_ln])})
parent level: #{structure_info.lv[node_parent_ln]} (possible child levels: #{structure_info.possible_children(structure_info.lv[node_parent_ln])})
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
@@ -1328,7 +1329,8 @@ has incorrect level and/or parent level
STDERR.puts %{required header missing:
@title:
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"
}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1341,7 +1343,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
@creator:
:author: anonymous?
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"
}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1578,9 +1581,9 @@ or this level should be level :B~ rather than #{dob.lv}}
node5
elsif node4
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 4~ & this level #{dob.lv}
-either parent should be level 5~
-or this level should be 5~ rather #{dob.lv}"
+ puts "parent is level #4 (1~) & this level ##{dob.ln} (#{dob.lv}~)
+either parent should be level #5 (2~)
+or this level should be #5 (2~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node6,node4,:error)
@collapsed_lv6=@collapsed_lv4+1
node4
@@ -1623,17 +1626,17 @@ or this level should be 5~ rather #{dob.lv}"
node5
elsif node5
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 5~ & this level #{dob.lv}
-either parent should be level 6~
-or this level should be 6~ rather #{dob.lv}"
+ puts "parent is level #5 (2~) & this level ##{dob.ln} (#{dob.lv}~)
+either parent should be level #6 (3~)
+or this level should be #6 (3~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node7,node5,:error)
@collapsed_lv6=@collapsed_lv5+1
node5
elsif node4
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 4~ & this level #{dob.lv}
+ puts "parent is level #4 (1~) & this level ##{dob.ln} (#{dob.lv}~)
either parent should be level 6~
-or this level should be 6~ rather #{dob.lv}"
+or this level should be #6 (3~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node7,node4,:error)
@collapsed_lv6=@collapsed_lv4+1
node4
@@ -1663,7 +1666,10 @@ or this level should be 6~ rather #{dob.lv}"
else
unless @lev_occurences[:l1] > 0
STDERR.puts %{Substantive text objects must follow a level 1~ heading and there are none at this point in processing: #{@lev_occurences[:l1]}
-}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
+ puts dob.obj #.gsub(/^(.{1,80})/,'"\1"')
+ exit
end
unless @ln >= 4
lev=case @ln
@@ -1679,7 +1685,8 @@ or this level should be 6~ rather #{dob.lv}"
when 9 then '6'
end
STDERR.puts %{Substantive text objects must follow a level 1~ 2~ or 3~ heading: #{lev}~
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
puts dob.obj.gsub(/^(.{1,80})/,'"\1"')
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1762,7 +1769,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
unless @lev_occurences[:a] == 1
STDERR.puts %{The number of level A~ in this document: #{@lev_occurences[:a]}
There must be one level A~ (no more and no less)
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
@@ -1771,7 +1779,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
unless @lev_occurences[:l1] > 0
STDERR.puts %{The number of level 1~ in this document: #{@lev_occurences[:l1]}
There must be at least one level 1~ (and as many as required)
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
diff --git a/lib/sisu/v5/ao_expand_insertions.rb b/lib/sisu/v5/ao_expand_insertions.rb
index 483e9fdb..4f4f7ae5 100644
--- a/lib/sisu/v5/ao_expand_insertions.rb
+++ b/lib/sisu/v5/ao_expand_insertions.rb
@@ -81,52 +81,61 @@ module SiSU_AO_Insertions
end
file_type_names={}
file_type_names[:gen],file_type_names[:src]=[],[]
- file_type_names[:gen] <<= if cmd_list =~ /y/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--manifest\b/
"~^ { document manifest }#{lnk[:manifest]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /h/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--html\b/
[
" { html, segmented text }#{lnk[:html_toc]}",
" { html, scroll, document in one }#{lnk[:html_doc]}",
]
end
- file_type_names[:gen] <<= if cmd_list =~ /e/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--epub\b/
[" { epub }#{lnk[:epub]}"]
end
- file_type_names[:gen] <<= if cmd_list =~ /p/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--pdf\b/ \
+ or cmd_list =~ /--pdf-landscape/
[
" { pdf, landscape }#{lnk[:pdf_landscape]}",
+ ]
+ end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--pdf\b/ \
+ or cmd_list =~ /--pdf-portrait/
+ [
" { pdf, portrait }#{lnk[:pdf_portrait]}",
]
end
- file_type_names[:gen] <<= if cmd_list =~ /o/
+ file_type_names[:gen] <<= if cmd_list =~ /\b(?:--odt|--odf)\b/
" { odf:odt, open document text }#{lnk[:odt]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /b/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xhtml\b/
" { xhtml scroll }#{lnk[:xhtml]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /x/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--docbook\b/
+ " { docbook }#{lnk[:docbook]}" #CHECK
+ end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xml-sax\b/
" { xml, sax }#{lnk[:xml_sax]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /X/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xml-dom\b/
" { xml, dom }#{lnk[:xml_dom]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /a/
+ file_type_names[:gen] <<= if cmd_list =~ /\b(?:--txt|--text|--plaintext)\b/
" { plain text utf-8 }#{lnk[:txt]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /g/
- 'wiki.txt'
- end
- file_type_names[:gen] <<= if cmd_list =~ /w/
+ #file_type_names[:gen] <<= if cmd_list =~ /g/
+ # 'wiki.txt'
+ #end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--concordance\b/
" { concordance }#{lnk[:html_concordance]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /N/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--digest\b/
" { dcc, document content certificate (digests) }#{lnk[:digest]}"
end
- file_type_names[:src] <<= if source and cmd_shortcut =~ /s/
+ file_type_names[:src] <<= if source and cmd_shortcut =~ /\b--source\b/
" { markup source text }#{lnk[:source]}"
end
- file_type_names[:src] <<= if cmd_shortcut =~ /S/
+ file_type_names[:src] <<= if cmd_shortcut =~ /\b--sisupod\b/
" { markup source (zipped) pod }#{lnk[:sisupod]}"
end
file_type_names[:gen]=file_type_names[:gen].flatten
@@ -180,6 +189,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn,'xhtml')
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn,'docbook')
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn,'xml_sax')
@@ -254,6 +267,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn,'xhtml')
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn,'docbook')
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn,'xml_sax')
@@ -329,6 +346,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn)
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn)
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn)
@@ -418,6 +439,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_language(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_language(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_language(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_language(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_language(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_language(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_language(m_linked_doc,m_linked_doc_lang).txt,
@@ -436,6 +458,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_filetype(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_filetype(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_filetype(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_filetype(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_filetype(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_filetype(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_filetype(m_linked_doc,m_linked_doc_lang).txt,
@@ -454,6 +477,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_filename(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_filename(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_filename(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_filename(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_filename(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_filename(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_filename(m_linked_doc,m_linked_doc_lang).txt,
diff --git a/lib/sisu/v5/ao_numbering.rb b/lib/sisu/v5/ao_numbering.rb
index f9257e6a..6954a286 100644
--- a/lib/sisu/v5/ao_numbering.rb
+++ b/lib/sisu/v5/ao_numbering.rb
@@ -69,6 +69,27 @@ module SiSU_AO_Numbering
@obj=@type=@ocn=@lv=@name=@index=@comment=nil
@chosen_seg_names=[]
end
+ def chosen_seg_names(chosen,chosen_seg_name,dob,md,type)
+ @chosen_seg_names=if chosen.compact.uniq.length \
+ == chosen.compact.length
+ chosen
+ else
+ if md.opt.act[:maintenance][:set]==:on
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
+ mark(
+ "duplicated auto segment name: #{type} #{chosen}\n" \
+ + "#{chosen}\n" \
+ + " manually name level 1 segments '1~given_name'\n" \
+ + 'filename: ' + md.fns + "\n" \
+ + 'heading text: "' + dob.obj + '"' + "\n" \
+ + 'duplication: "' + chosen_seg_name + '" (level: ' + dob.lv + '; numbering type: ' + type.to_s + ')'
+ )
+ end
+ chosen=chosen[0..-2]
+ chosen_seg_name=auto_numbering_exceptions(chosen,md,dob)
+ chosen << chosen_seg_name
+ end
+ end
def number_of_segments?
if @@segments_count==0
@data.each do |dob|
@@ -314,6 +335,78 @@ module SiSU_AO_Numbering
possible_seg_name.to_s
end
end
+ def auto_numbering_exceptions(chosen_seg_names_,md,dob)
+ number_make=case dob.lv.to_i
+ when 1
+ @num_exc={
+ t1: @num_exc[:t1] += 1,
+ t2: 0,
+ t3: 0,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s
+ when 2
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2] += 1,
+ t3: 0,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s
+ when 3
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2],
+ t3: @num_exc[:t3] += 1,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s + '_' \
+ + @num_exc[:t3].to_s
+ when 4
+ @num_exc[:t4] += 1
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2],
+ t3: @num_exc[:t3],
+ t4: @num_exc[:t4] += 1
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s + '_' \
+ + @num_exc[:t3].to_s + '_' \
+ + @num_exc[:t4].to_s
+ end
+ end
+ def check_that_seg_names_are_unique(chosen_seg_names_,chosen_seg_name,type,md,dob)
+ begin
+ chosen_seg_names_ << chosen_seg_name
+ chosen_seg_names_=chosen_seg_names(chosen_seg_names_,chosen_seg_name,dob,md,type)
+ if chosen_seg_names_.compact.uniq.length \
+ == chosen_seg_names_.compact.length
+ #check that all auto given seg names are unique
+ chosen_seg_names_=chosen_seg_names(chosen_seg_names_,chosen_seg_name,dob,md,type)
+ chosen_seg_name
+ else
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
+ mark(
+ "duplicated auto segment name: #{type} #{chosen_seg_name}\n" \
+ + "#{chosen_seg_names_}\n" \
+ + " manually name level 1 segments '1~given_name'\n" \
+ + 'filename: ' + md.fns + "\n" \
+ + 'heading text: "' + dob.obj + '"' + "\n" \
+ + 'duplication: "' + chosen_seg_name + '" (level: ' + dob.lv + '; numbering type: ' + type.to_s + ')'
+ )
+ chosen_seg_name=auto_numbering_exceptions(chosen_seg_names_,md,dob)
+ check_that_seg_names_are_unique(chosen_seg_names_,chosen_seg_name,:exception,md,dob)
+ end
+ rescue
+ end
+ end
def auto_seg_name(possible_seg_name,heading_num_is,dob,type)
prefix=case type
when :auto then Mx[:segname_prefix_auto_num_provide]
@@ -324,41 +417,49 @@ module SiSU_AO_Numbering
possible_seg_name=possible_seg_name.
gsub(/\.$/,'')
end
- chosen_seg_name=if possible_seg_name.to_s =~/^[0-9]+[.]?$/m \
- and possible_seg_name.to_i <= heading_num_is.to_i \
- and dob.lv == '1'
- prefix + leading_zeros_fixed_width_number(possible_seg_name)
- elsif possible_seg_name.to_s =~/^[0-9]+[.,:-]*$/m \
- and dob.lv == '1'
+ @chosen_seg_name=
+ if dob.lv=='4' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){3}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
- elsif possible_seg_name.to_s =~
- /^[0-9]+[.,:-][0-9]+[.,:-]*$/m \
- and dob.lv == '2'
+ elsif dob.lv=='3' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){2}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
- elsif possible_seg_name.to_s =~
- /^[0-9]+[.,:-][0-9]+[.,:-][0-9][\d.,:-]*$/m \
- and dob.lv == '3'
+ elsif dob.lv=='2' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){1}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
+ elsif dob.lv=='1' \
+ and possible_seg_name.to_s =~/^[0-9]+[:,-]?$/m
+ if possible_seg_name.to_i <= heading_num_is.to_i
+ prefix + leading_zeros_fixed_width_number(possible_seg_name)
+ else
+ possible_seg_name=possible_seg_name.to_s.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ prefix + possible_seg_name
+ end
else
- Mx[:segname_prefix_auto_num_other]*dob.lv.to_i \
- + possible_seg_name.to_s
+ @chosen_seg_name=auto_numbering_exceptions(@chosen_seg_names,md,dob)
end
- @chosen_seg_names << chosen_seg_name
- if @chosen_seg_names.compact.uniq.length == @chosen_seg_names.compact.length #checks that all auto given seg names are unique
- chosen_seg_name
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
- mark("duplicated auto segment name: #{type} #{chosen_seg_name} - #{@chosen_seg_names}; manually name level 1 segments '1~given_name'\n #{@md.fns}\n #{dob.obj}")
- exit
+ check_that_seg_names_are_unique(@chosen_seg_names,@chosen_seg_name,type,@md,dob)
+ end
+ def set_name_and_tags(dob,possible_seg_name)
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(possible_seg_name)
+ dob.name=possible_seg_name
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << possible_seg_name
+ elsif (@md.opt.act[:verbose_plus][:set]==:on \
+ or @md.opt.act[:maintenance][:set]==:on)
+ puts 'warn, there may be a conflicting numbering scheme'
end
end
def name_para_seg_filename(data) #segment naming, remaining
@@ -377,7 +478,7 @@ module SiSU_AO_Numbering
# if there is none a sequential number is designated, preceded by an underscore
@tuned_file,@unique_auto_name=[],[]
tags={}
- art_filename_auto=1
+ @art_filename_auto=0
@counter=1
if not @md.seg_autoname_safe \
and (@md.opt.act[:verbose_plus][:set]==:on \
@@ -385,10 +486,11 @@ module SiSU_AO_Numbering
puts 'manual segment names, numbers used as names, risk warning (segmented html)'
end
ocn_html_seg=[]
+ @num_exc={ t1: 0, t2: 0, t3: 0, t4: 0 }
data.each do |dob|
if dob.is==:heading \
&& dob.ln \
- and dob.ln.to_s =~/^[456]/
+ and dob.ln.to_s =~/^[4-7]/
heading_num_is=/^\d+:(\d+);\d/m.match(dob.node)[1]
if dob.ln==4 \
and not dob.name \
@@ -396,47 +498,72 @@ module SiSU_AO_Numbering
@md.set_heading_seg=true
end
if dob.name !~/^\S+/ \
- and dob.obj =~/^\s*(?:\S+\s+)?([0-9][0-9.,:-]*)/m #heading starts with a recognised numeric or word followed by a recognised numeric construct, use that as name
- possible_seg_name=$1
- possible_seg_name=
- auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
- possible_seg_name=possible_seg_name.
- gsub(/(?:[:,-]|\W)/,'.').
- gsub(/\.$/,'')
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(possible_seg_name)
- dob.name=possible_seg_name
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << possible_seg_name
- elsif (@md.opt.act[:verbose_plus][:set]==:on \
- or @md.opt.act[:maintenance][:set]==:on)
- puts 'warn, there may be a conflicting numbering scheme'
+ and dob.ln.to_s =~/^[5-7]/ \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9])+)/m
+ #heading starts with a recognised numeric
+ #or word followed by a recognised numeric construct,
+ #use that as name
+ if dob.ln==7 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){3})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
+ elsif dob.ln==6 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){2})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
+ elsif dob.ln==5 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){1})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
end
end
- if dob.ln==4 \
- and dob.name #extract segment name from embedded document structure info
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(dob.name)
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << dob.name
+ if dob.ln==4
+ if dob.name !~/^\S+/ \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+)/m
+ #heading starts with a recognised numeric
+ #or word followed by a recognised numeric construct,
+ #use that as name
+ possible_seg_name=$1
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
end
- end
- if dob.ln==4 \
- and not dob.name #if still no segment name, provide a numerical one
- possible_seg_name=
- auto_seg_name(art_filename_auto,heading_num_is,dob,:auto)
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(possible_seg_name)
- dob.name=possible_seg_name
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << possible_seg_name
- else puts 'segment name (numbering) error'
+ if dob.name
+ #extract segment name from embedded document structure info
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(dob.name)
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << dob.name
+ end
+ else
+ #if no segment name,
+ #provide a numerical one
+ @art_filename_auto+=1
+ possible_seg_name=
+ auto_seg_name(@art_filename_auto,heading_num_is,dob,:auto)
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(possible_seg_name)
+ dob.name=possible_seg_name
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << possible_seg_name
+ else puts 'segment name (numbering) error'
+ end
+ end
+ if not dob.name #should not occur
+ puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}"
end
- art_filename_auto+=1
- end
- if dob.ln==4 \
- and not dob.name #should not occur
- puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}"
end
end
if (dob.is ==:heading \
diff --git a/lib/sisu/v5/hub.rb b/lib/sisu/v5/hub.rb
index eda98084..0e90f21a 100644
--- a/lib/sisu/v5/hub.rb
+++ b/lib/sisu/v5/hub.rb
@@ -266,6 +266,8 @@ module SiSU
rescue
ensure
if FileTest.directory?(@env.processing_path.processing) \
+ and FileTest.directory?(@env.processing_path.processing_base_tmp) \
+ and @env.processing_path.processing_base_tmp =~/#{@env.processing_path.processing}/ \
and @env.processing_path.processing_base_tmp =~/^\/tmp\/\S+/
FileUtils::cd(@env.processing_path.processing_base_tmp) do
FileUtils::rm_rf('.')
diff --git a/lib/sisu/v5/se_envcall.rb b/lib/sisu/v5/se_envcall.rb
index defc51e4..cd0bda7d 100644
--- a/lib/sisu/v5/se_envcall.rb
+++ b/lib/sisu/v5/se_envcall.rb
@@ -111,13 +111,16 @@ module SiSU_Env_Call
end
def mono_multi_lingual?
if @rc \
- && defined? @rc['lingual']
- if (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/mono(?:lingual)?/)
+ && defined? @rc['output_dir_structure_by']
+ if @rc['output_dir_structure_by'] \
+ =~/dump/
:mono
- elsif (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/multi(?:lingual)?/)
+ elsif @rc['output_dir_structure_by'] \
+ =~/language|redirect/
:multi
+ elsif @rc['output_dir_structure_by'] \
+ =~/monolingual|filetype_mono|filenaneme_mono/
+ :mono
else :multi
end
else :multi
diff --git a/lib/sisu/v5/se_processing.rb b/lib/sisu/v5/se_processing.rb
index 33b4a4ed..3789f884 100644
--- a/lib/sisu/v5/se_processing.rb
+++ b/lib/sisu/v5/se_processing.rb
@@ -483,7 +483,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['default'].is_a?(String)
@rc['flag']['default']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest --verbose'
+ '--manifest --digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --verbose'
end
end
def arr
@@ -500,7 +500,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['i'].is_a?(String)
@rc['flag']['i']
else
- '--digest --text --html --manifest'
+ '--manifest --text --html'
end
end
def arr
@@ -517,7 +517,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['ii'].is_a?(String)
@rc['flag']['ii']
else
- '--digest --text --html --epub --pdf --manifest'
+ '--manifest --text --html --epub --pdf'
end
end
def arr
@@ -534,7 +534,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['iii'].is_a?(String)
@rc['flag']['iii']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode'
end
end
def arr
@@ -551,7 +551,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['iv'].is_a?(String)
@rc['flag']['iv']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook'
end
end
def arr
@@ -568,7 +568,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['v'].is_a?(String)
@rc['flag']['v']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --sqlite --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite'
end
end
def arr
@@ -582,7 +582,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act6'].is_a?(String)
@rc['flag']['act6']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom'
end
end
def arr
@@ -596,7 +596,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act7'].is_a?(String)
@rc['flag']['act7']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --source --sisupod --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom --source --sisupod'
end
end
def arr
@@ -610,7 +610,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act8'].is_a?(String)
@rc['flag']['act8']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update'
end
end
def arr
@@ -624,7 +624,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act9'].is_a?(String)
@rc['flag']['act9']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod'
end
end
def arr
diff --git a/lib/sisu/v6/ao_doc_str.rb b/lib/sisu/v6/ao_doc_str.rb
index 6be0e068..73c2ff7b 100644
--- a/lib/sisu/v6/ao_doc_str.rb
+++ b/lib/sisu/v6/ao_doc_str.rb
@@ -1307,7 +1307,8 @@ module SiSU_AO_DocumentStructureExtract
node_parent_ln=/^([0-7])/.match(node_parent)[1].to_i
STDERR.puts %{current level: #{structure_info.lv[node_ln]} (possible parent levels: #{structure_info.possible_parents(structure_info.lv[node_ln])})
parent level: #{structure_info.lv[node_parent_ln]} (possible child levels: #{structure_info.possible_children(structure_info.lv[node_parent_ln])})
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
@@ -1328,7 +1329,8 @@ has incorrect level and/or parent level
STDERR.puts %{required header missing:
@title:
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"
}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1341,7 +1343,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
@creator:
:author: anonymous?
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"
}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1578,9 +1581,9 @@ or this level should be level :B~ rather than #{dob.lv}}
node5
elsif node4
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 4~ & this level #{dob.lv}
-either parent should be level 5~
-or this level should be 5~ rather #{dob.lv}"
+ puts "parent is level #4 (1~) & this level ##{dob.ln} (#{dob.lv}~)
+either parent should be level #5 (2~)
+or this level should be #5 (2~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node6,node4,:error)
@collapsed_lv6=@collapsed_lv4+1
node4
@@ -1623,17 +1626,17 @@ or this level should be 5~ rather #{dob.lv}"
node5
elsif node5
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 5~ & this level #{dob.lv}
-either parent should be level 6~
-or this level should be 6~ rather #{dob.lv}"
+ puts "parent is level #5 (2~) & this level ##{dob.ln} (#{dob.lv}~)
+either parent should be level #6 (3~)
+or this level should be #6 (3~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node7,node5,:error)
@collapsed_lv6=@collapsed_lv5+1
node5
elsif node4
warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 4~ & this level #{dob.lv}
+ puts "parent is level #4 (1~) & this level ##{dob.ln} (#{dob.lv}~)
either parent should be level 6~
-or this level should be 6~ rather #{dob.lv}"
+or this level should be #6 (3~) rather ##{dob.ln} (#{dob.lv}~)"
document_structure_check_info(node7,node4,:error)
@collapsed_lv6=@collapsed_lv4+1
node4
@@ -1663,7 +1666,10 @@ or this level should be 6~ rather #{dob.lv}"
else
unless @lev_occurences[:l1] > 0
STDERR.puts %{Substantive text objects must follow a level 1~ heading and there are none at this point in processing: #{@lev_occurences[:l1]}
-}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
+ puts dob.obj #.gsub(/^(.{1,80})/,'"\1"')
+ exit
end
unless @ln >= 4
lev=case @ln
@@ -1679,7 +1685,8 @@ or this level should be 6~ rather #{dob.lv}"
when 9 then '6'
end
STDERR.puts %{Substantive text objects must follow a level 1~ 2~ or 3~ heading: #{lev}~
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
puts dob.obj.gsub(/^(.{1,80})/,'"\1"')
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
@@ -1762,7 +1769,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
unless @lev_occurences[:a] == 1
STDERR.puts %{The number of level A~ in this document: #{@lev_occurences[:a]}
There must be one level A~ (no more and no less)
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
@@ -1771,7 +1779,8 @@ SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
unless @lev_occurences[:l1] > 0
STDERR.puts %{The number of level 1~ in this document: #{@lev_occurences[:l1]}
There must be at least one level 1~ (and as many as required)
-SKIPPED processing file: [#{@md.opt.lng}] "#{@md.fns}"}
+SKIPPED processing file:
+[#{@md.opt.lng}] "#{@md.fns}"}
if @md.opt.act[:no_stop][:set]==:on
$process_document = :skip
else exit
diff --git a/lib/sisu/v6/ao_expand_insertions.rb b/lib/sisu/v6/ao_expand_insertions.rb
index 8eb0e5c4..bcbec588 100644
--- a/lib/sisu/v6/ao_expand_insertions.rb
+++ b/lib/sisu/v6/ao_expand_insertions.rb
@@ -81,52 +81,61 @@ module SiSU_AO_Insertions
end
file_type_names={}
file_type_names[:gen],file_type_names[:src]=[],[]
- file_type_names[:gen] <<= if cmd_list =~ /y/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--manifest\b/
"~^ { document manifest }#{lnk[:manifest]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /h/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--html\b/
[
" { html, segmented text }#{lnk[:html_toc]}",
" { html, scroll, document in one }#{lnk[:html_doc]}",
]
end
- file_type_names[:gen] <<= if cmd_list =~ /e/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--epub\b/
[" { epub }#{lnk[:epub]}"]
end
- file_type_names[:gen] <<= if cmd_list =~ /p/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--pdf\b/ \
+ or cmd_list =~ /--pdf-landscape/
[
" { pdf, landscape }#{lnk[:pdf_landscape]}",
+ ]
+ end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--pdf\b/ \
+ or cmd_list =~ /--pdf-portrait/
+ [
" { pdf, portrait }#{lnk[:pdf_portrait]}",
]
end
- file_type_names[:gen] <<= if cmd_list =~ /o/
+ file_type_names[:gen] <<= if cmd_list =~ /\b(?:--odt|--odf)\b/
" { odf:odt, open document text }#{lnk[:odt]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /b/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xhtml\b/
" { xhtml scroll }#{lnk[:xhtml]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /x/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--docbook\b/
+ " { docbook }#{lnk[:docbook]}" #CHECK
+ end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xml-sax\b/
" { xml, sax }#{lnk[:xml_sax]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /X/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--xml-dom\b/
" { xml, dom }#{lnk[:xml_dom]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /a/
+ file_type_names[:gen] <<= if cmd_list =~ /\b(?:--txt|--text|--plaintext)\b/
" { plain text utf-8 }#{lnk[:txt]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /g/
- 'wiki.txt'
- end
- file_type_names[:gen] <<= if cmd_list =~ /w/
+ #file_type_names[:gen] <<= if cmd_list =~ /g/
+ # 'wiki.txt'
+ #end
+ file_type_names[:gen] <<= if cmd_list =~ /\b--concordance\b/
" { concordance }#{lnk[:html_concordance]}"
end
- file_type_names[:gen] <<= if cmd_list =~ /N/
+ file_type_names[:gen] <<= if cmd_list =~ /\b--digest\b/
" { dcc, document content certificate (digests) }#{lnk[:digest]}"
end
- file_type_names[:src] <<= if source and cmd_shortcut =~ /s/
+ file_type_names[:src] <<= if source and cmd_shortcut =~ /\b--source\b/
" { markup source text }#{lnk[:source]}"
end
- file_type_names[:src] <<= if cmd_shortcut =~ /S/
+ file_type_names[:src] <<= if cmd_shortcut =~ /\b--sisupod\b/
" { markup source (zipped) pod }#{lnk[:sisupod]}"
end
file_type_names[:gen]=file_type_names[:gen].flatten
@@ -180,6 +189,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn,'xhtml')
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn,'docbook')
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn,'xml_sax')
@@ -254,6 +267,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn,'xhtml')
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn,'docbook')
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn,'xml_sax')
@@ -329,6 +346,10 @@ module SiSU_AO_Insertions
fn=@md.file.base_filename.xhtml(fnh)
path_and_file(fn)
end
+ def docbook
+ fn=@md.file.base_filename.xml_docbook_book(fnh)
+ path_and_file(fn)
+ end
def xml_sax
fn=@md.file.base_filename.xml_sax(fnh)
path_and_file(fn)
@@ -418,6 +439,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_language(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_language(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_language(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_language(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_language(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_language(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_language(m_linked_doc,m_linked_doc_lang).txt,
@@ -436,6 +458,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_filetype(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_filetype(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_filetype(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_filetype(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_filetype(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_filetype(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_filetype(m_linked_doc,m_linked_doc_lang).txt,
@@ -454,6 +477,7 @@ module SiSU_AO_Insertions
pdf_portrait: by_filename(m_linked_doc,m_linked_doc_lang).pdf_landscape,
odt: by_filename(m_linked_doc,m_linked_doc_lang).odt,
xhtml: by_filename(m_linked_doc,m_linked_doc_lang).xhtml,
+ docbook: by_filename(m_linked_doc,m_linked_doc_lang).docbook,
xml_sax: by_filename(m_linked_doc,m_linked_doc_lang).xml_sax,
xml_dom: by_filename(m_linked_doc,m_linked_doc_lang).xml_dom,
txt: by_filename(m_linked_doc,m_linked_doc_lang).txt,
diff --git a/lib/sisu/v6/ao_numbering.rb b/lib/sisu/v6/ao_numbering.rb
index 7a4e4cee..2ee8c30e 100644
--- a/lib/sisu/v6/ao_numbering.rb
+++ b/lib/sisu/v6/ao_numbering.rb
@@ -69,6 +69,27 @@ module SiSU_AO_Numbering
@obj=@type=@ocn=@lv=@name=@index=@comment=nil
@chosen_seg_names=[]
end
+ def chosen_seg_names(chosen,chosen_seg_name,dob,md,type)
+ @chosen_seg_names=if chosen.compact.uniq.length \
+ == chosen.compact.length
+ chosen
+ else
+ if md.opt.act[:maintenance][:set]==:on
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
+ mark(
+ "duplicated auto segment name: #{type} #{chosen}\n" \
+ + "#{chosen}\n" \
+ + " manually name level 1 segments '1~given_name'\n" \
+ + 'filename: ' + md.fns + "\n" \
+ + 'heading text: "' + dob.obj + '"' + "\n" \
+ + 'duplication: "' + chosen_seg_name + '" (level: ' + dob.lv + '; numbering type: ' + type.to_s + ')'
+ )
+ end
+ chosen=chosen[0..-2]
+ chosen_seg_name=auto_numbering_exceptions(chosen,md,dob)
+ chosen << chosen_seg_name
+ end
+ end
def number_of_segments?
if @@segments_count==0
@data.each do |dob|
@@ -314,6 +335,78 @@ module SiSU_AO_Numbering
possible_seg_name.to_s
end
end
+ def auto_numbering_exceptions(chosen_seg_names_,md,dob)
+ number_make=case dob.lv.to_i
+ when 1
+ @num_exc={
+ t1: @num_exc[:t1] += 1,
+ t2: 0,
+ t3: 0,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s
+ when 2
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2] += 1,
+ t3: 0,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s
+ when 3
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2],
+ t3: @num_exc[:t3] += 1,
+ t4: 0
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s + '_' \
+ + @num_exc[:t3].to_s
+ when 4
+ @num_exc[:t4] += 1
+ @num_exc={
+ t1: @num_exc[:t1],
+ t2: @num_exc[:t2],
+ t3: @num_exc[:t3],
+ t4: @num_exc[:t4] += 1
+ }
+ Mx[:segname_prefix_auto_num_other] + '_' \
+ + @num_exc[:t1].to_s + '_' \
+ + @num_exc[:t2].to_s + '_' \
+ + @num_exc[:t3].to_s + '_' \
+ + @num_exc[:t4].to_s
+ end
+ end
+ def check_that_seg_names_are_unique(chosen_seg_names_,chosen_seg_name,type,md,dob)
+ begin
+ chosen_seg_names_ << chosen_seg_name
+ chosen_seg_names_=chosen_seg_names(chosen_seg_names_,chosen_seg_name,dob,md,type)
+ if chosen_seg_names_.compact.uniq.length \
+ == chosen_seg_names_.compact.length
+ #check that all auto given seg names are unique
+ chosen_seg_names_=chosen_seg_names(chosen_seg_names_,chosen_seg_name,dob,md,type)
+ chosen_seg_name
+ else
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
+ mark(
+ "duplicated auto segment name: #{type} #{chosen_seg_name}\n" \
+ + "#{chosen_seg_names_}\n" \
+ + " manually name level 1 segments '1~given_name'\n" \
+ + 'filename: ' + md.fns + "\n" \
+ + 'heading text: "' + dob.obj + '"' + "\n" \
+ + 'duplication: "' + chosen_seg_name + '" (level: ' + dob.lv + '; numbering type: ' + type.to_s + ')'
+ )
+ chosen_seg_name=auto_numbering_exceptions(chosen_seg_names_,md,dob)
+ check_that_seg_names_are_unique(chosen_seg_names_,chosen_seg_name,:exception,md,dob)
+ end
+ rescue
+ end
+ end
def auto_seg_name(possible_seg_name,heading_num_is,dob,type)
prefix=case type
when :auto then Mx[:segname_prefix_auto_num_provide]
@@ -324,41 +417,49 @@ module SiSU_AO_Numbering
possible_seg_name=possible_seg_name.
gsub(/\.$/,'')
end
- chosen_seg_name=if possible_seg_name.to_s =~/^[0-9]+[.]?$/m \
- and possible_seg_name.to_i <= heading_num_is.to_i \
- and dob.lv == '1'
- prefix + leading_zeros_fixed_width_number(possible_seg_name)
- elsif possible_seg_name.to_s =~/^[0-9]+[.,:-]*$/m \
- and dob.lv == '1'
+ @chosen_seg_name=
+ if dob.lv=='4' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){3}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
- elsif possible_seg_name.to_s =~
- /^[0-9]+[.,:-][0-9]+[.,:-]*$/m \
- and dob.lv == '2'
+ elsif dob.lv=='3' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){2}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
- elsif possible_seg_name.to_s =~
- /^[0-9]+[.,:-][0-9]+[.,:-][0-9][\d.,:-]*$/m \
- and dob.lv == '3'
+ elsif dob.lv=='2' \
+ and possible_seg_name.to_s =~/^[0-9]+(?:[.,:-][0-9]){1}/m
possible_seg_name=possible_seg_name.to_s.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
prefix + possible_seg_name
+ elsif dob.lv=='1' \
+ and possible_seg_name.to_s =~/^[0-9]+[:,-]?$/m
+ if possible_seg_name.to_i <= heading_num_is.to_i
+ prefix + leading_zeros_fixed_width_number(possible_seg_name)
+ else
+ possible_seg_name=possible_seg_name.to_s.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ prefix + possible_seg_name
+ end
else
- Mx[:segname_prefix_auto_num_other]*dob.lv.to_i \
- + possible_seg_name.to_s
+ @chosen_seg_name=auto_numbering_exceptions(@chosen_seg_names,md,dob)
end
- @chosen_seg_names << chosen_seg_name
- if @chosen_seg_names.compact.uniq.length == @chosen_seg_names.compact.length #checks that all auto given seg names are unique
- chosen_seg_name
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).
- mark("duplicated auto segment name: #{type} #{chosen_seg_name} - #{@chosen_seg_names}; manually name level 1 segments '1~given_name'\n #{@md.fns}\n #{dob.obj}")
- exit
+ check_that_seg_names_are_unique(@chosen_seg_names,@chosen_seg_name,type,@md,dob)
+ end
+ def set_name_and_tags(dob,possible_seg_name)
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(possible_seg_name)
+ dob.name=possible_seg_name
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << possible_seg_name
+ elsif (@md.opt.act[:verbose_plus][:set]==:on \
+ or @md.opt.act[:maintenance][:set]==:on)
+ puts 'warn, there may be a conflicting numbering scheme'
end
end
def name_para_seg_filename(data) #segment naming, remaining
@@ -377,7 +478,7 @@ module SiSU_AO_Numbering
# if there is none a sequential number is designated, preceded by an underscore
@tuned_file,@unique_auto_name=[],[]
tags={}
- art_filename_auto=1
+ @art_filename_auto=0
@counter=1
if not @md.seg_autoname_safe \
and (@md.opt.act[:verbose_plus][:set]==:on \
@@ -385,10 +486,11 @@ module SiSU_AO_Numbering
puts 'manual segment names, numbers used as names, risk warning (segmented html)'
end
ocn_html_seg=[]
+ @num_exc={ t1: 0, t2: 0, t3: 0, t4: 0 }
data.each do |dob|
if dob.is==:heading \
&& dob.ln \
- and dob.ln.to_s =~/^[456]/
+ and dob.ln.to_s =~/^[4-7]/
heading_num_is=/^\d+:(\d+);\d/m.match(dob.node)[1]
if dob.ln==4 \
and not dob.name \
@@ -396,47 +498,72 @@ module SiSU_AO_Numbering
@md.set_heading_seg=true
end
if dob.name !~/^\S+/ \
- and dob.obj =~/^\s*(?:\S+\s+)?([0-9][0-9.,:-]*)/m #heading starts with a recognised numeric or word followed by a recognised numeric construct, use that as name
- possible_seg_name=$1
- possible_seg_name=
- auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
- possible_seg_name=possible_seg_name.
- gsub(/(?:[:,-]|\W)/,'.').
- gsub(/\.$/,'')
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(possible_seg_name)
- dob.name=possible_seg_name
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << possible_seg_name
- elsif (@md.opt.act[:verbose_plus][:set]==:on \
- or @md.opt.act[:maintenance][:set]==:on)
- puts 'warn, there may be a conflicting numbering scheme'
+ and dob.ln.to_s =~/^[5-7]/ \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9])+)/m
+ #heading starts with a recognised numeric
+ #or word followed by a recognised numeric construct,
+ #use that as name
+ if dob.ln==7 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){3})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
+ elsif dob.ln==6 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){2})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
+ elsif dob.ln==5 \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+(?:[.,:-][0-9]){1})/m
+ possible_seg_name=$1.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
end
end
- if dob.ln==4 \
- and dob.name #extract segment name from embedded document structure info
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(dob.name)
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << dob.name
+ if dob.ln==4
+ if dob.name !~/^\S+/ \
+ and dob.obj =~/^\s*(?:\S+\s+)?([0-9]+)/m
+ #heading starts with a recognised numeric
+ #or word followed by a recognised numeric construct,
+ #use that as name
+ possible_seg_name=$1
+ possible_seg_name=
+ auto_seg_name(possible_seg_name,heading_num_is,dob,:extract)
+ set_name_and_tags(dob,possible_seg_name)
end
- end
- if dob.ln==4 \
- and not dob.name #if still no segment name, provide a numerical one
- possible_seg_name=
- auto_seg_name(art_filename_auto,heading_num_is,dob,:auto)
- if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(possible_seg_name)
- dob.name=possible_seg_name
- dob.tags=set_tags(dob.tags,dob.name)
- @md.seg_names << possible_seg_name
- else puts 'segment name (numbering) error'
+ if dob.name
+ #extract segment name from embedded document structure info
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(dob.name)
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << dob.name
+ end
+ else
+ #if no segment name,
+ #provide a numerical one
+ @art_filename_auto+=1
+ possible_seg_name=
+ auto_seg_name(@art_filename_auto,heading_num_is,dob,:auto)
+ if @md.seg_names.is_a?(Array) \
+ and not @md.seg_names.include?(possible_seg_name)
+ dob.name=possible_seg_name
+ dob.tags=set_tags(dob.tags,dob.name)
+ @md.seg_names << possible_seg_name
+ else puts 'segment name (numbering) error'
+ end
+ end
+ if not dob.name #should not occur
+ puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}"
end
- art_filename_auto+=1
- end
- if dob.ln==4 \
- and not dob.name #should not occur
- puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}"
end
end
if (dob.is ==:heading \
diff --git a/lib/sisu/v6/hub.rb b/lib/sisu/v6/hub.rb
index 2558a9db..41f8e930 100644
--- a/lib/sisu/v6/hub.rb
+++ b/lib/sisu/v6/hub.rb
@@ -266,6 +266,8 @@ module SiSU
rescue
ensure
if FileTest.directory?(@env.processing_path.processing) \
+ and FileTest.directory?(@env.processing_path.processing_base_tmp) \
+ and @env.processing_path.processing_base_tmp =~/#{@env.processing_path.processing}/ \
and @env.processing_path.processing_base_tmp =~/^\/tmp\/\S+/
FileUtils::cd(@env.processing_path.processing_base_tmp) do
FileUtils::rm_rf('.')
diff --git a/lib/sisu/v6/se_envcall.rb b/lib/sisu/v6/se_envcall.rb
index 3727baf6..bb918786 100644
--- a/lib/sisu/v6/se_envcall.rb
+++ b/lib/sisu/v6/se_envcall.rb
@@ -111,13 +111,16 @@ module SiSU_Env_Call
end
def mono_multi_lingual?
if @rc \
- && defined? @rc['lingual']
- if (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/mono(?:lingual)?/)
+ && defined? @rc['output_dir_structure_by']
+ if @rc['output_dir_structure_by'] \
+ =~/dump/
:mono
- elsif (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/multi(?:lingual)?/)
+ elsif @rc['output_dir_structure_by'] \
+ =~/language|redirect/
:multi
+ elsif @rc['output_dir_structure_by'] \
+ =~/monolingual|filetype_mono|filenaneme_mono/
+ :mono
else :multi
end
else :multi
diff --git a/lib/sisu/v6/se_processing.rb b/lib/sisu/v6/se_processing.rb
index 15db8cff..23e5c420 100644
--- a/lib/sisu/v6/se_processing.rb
+++ b/lib/sisu/v6/se_processing.rb
@@ -483,7 +483,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['default'].is_a?(String)
@rc['flag']['default']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest --verbose'
+ '--manifest --digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --verbose'
end
end
def arr
@@ -500,7 +500,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['i'].is_a?(String)
@rc['flag']['i']
else
- '--digest --text --html --manifest'
+ '--manifest --text --html'
end
end
def arr
@@ -517,7 +517,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['ii'].is_a?(String)
@rc['flag']['ii']
else
- '--digest --text --html --epub --pdf --manifest'
+ '--manifest --text --html --epub --pdf'
end
end
def arr
@@ -534,7 +534,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['iii'].is_a?(String)
@rc['flag']['iii']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode'
end
end
def arr
@@ -551,7 +551,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['iv'].is_a?(String)
@rc['flag']['iv']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook'
end
end
def arr
@@ -568,7 +568,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['v'].is_a?(String)
@rc['flag']['v']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --sqlite --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite'
end
end
def arr
@@ -582,7 +582,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act6'].is_a?(String)
@rc['flag']['act6']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom'
end
end
def arr
@@ -596,7 +596,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act7'].is_a?(String)
@rc['flag']['act7']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --source --sisupod --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --sqlite --xhtml --xml-sax --xml-dom --source --sisupod'
end
end
def arr
@@ -610,7 +610,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act8'].is_a?(String)
@rc['flag']['act8']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update'
end
end
def arr
@@ -624,7 +624,7 @@ module SiSU_Info_Processing_Flag
and @rc['flag']['act9'].is_a?(String)
@rc['flag']['act9']
else
- '--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod --manifest'
+ '--manifest --text --html --epub --pdf --concordance --qrcode --digest --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod'
end
end
def arr