aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v5/ao_numbering.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v5/ao_numbering.rb')
-rw-r--r--lib/sisu/v5/ao_numbering.rb55
1 files changed, 48 insertions, 7 deletions
diff --git a/lib/sisu/v5/ao_numbering.rb b/lib/sisu/v5/ao_numbering.rb
index cd631796..c4b6558f 100644
--- a/lib/sisu/v5/ao_numbering.rb
+++ b/lib/sisu/v5/ao_numbering.rb
@@ -63,10 +63,23 @@
module SiSU_AO_Numbering
class Numbering
attr_accessor :obj,:osp,:ocn,:lv,:name,:index,:comment
+ @@segments_count=0
def initialize(md,data)
@md,@data=md,data
@obj=@type=@ocn=@lv=@name=@index=@comment=nil
end
+ def number_of_segments?
+ if @@segments_count==0
+ @data.each do |dob|
+ if dob.is == :heading \
+ and dob.lv == '1'
+ @@segments_count += 1
+ end
+ end
+ @@segments_count
+ else @@segments_count
+ end
+ end
def numbering_song
data=@data
data=number_plaintext_para(data)
@@ -152,7 +165,6 @@ module SiSU_AO_Numbering
data=data.compact
data.each do |dob| #@md.seg_names << [additions to segment names]
title_no=nil
- dob=SiSU_AO_DocumentStructureExtract::Structure.new(@md,dob).structure_markup #must happen earlier, node info etc. require
if dob.is ==:heading \
&& dob.autonum_ \
and defined? @md.make.num_top \
@@ -280,6 +292,33 @@ module SiSU_AO_Numbering
end
@tuned_file=@tuned_file.flatten
end
+ def leading_zeros_fixed_width_number(possible_seg_name)
+ if possible_seg_name =~/^([\d]+?\.|[\d]+)$/m #!~/[.,:-]+/
+ possible_seg_name=possible_seg_name.
+ gsub(/\.$/,'')
+ nl=possible_seg_name.to_s.length
+ zero='0'
+ zeros_fixed_width=number_of_segments?.to_s.length
+ zero_width=(zeros_fixed_width - nl)
+ zero_width == 0 \
+ ? Mx[:auto_seg_prefix] +
+ possible_seg_name.to_s
+ : Mx[:auto_seg_prefix] +
+ zero*zero_width +
+ possible_seg_name.to_s
+ end
+ end
+ def auto_seg_name(possible_seg_name)
+ if possible_seg_name =~/^([\d]+?\.|[\d]+)$/m #!~/[.,:-]+/
+ leading_zeros_fixed_width_number(possible_seg_name)
+ elsif possible_seg_name =~/^[\d.,:-]+$/m
+ possible_seg_name=possible_seg_name.
+ gsub(/(?:[:,-]|\W)/,'.').
+ gsub(/\.$/,'')
+ #Mx[:auto_seg_prefix] + possible_seg_name
+ else possible_seg_name
+ end
+ end
def name_para_seg_filename(data) #segment naming, remaining
# paragraph name/numbering rules
# manual naming overrides, manual naming may be
@@ -314,8 +353,10 @@ module SiSU_AO_Numbering
@md.set_heading_seg=true
end
if dob.name !~/^\S+/ \
- and dob.obj =~/^\s*(?:\S+\s+)?([\d.,:-]+)/m #heading starts with a recognised numeric or word followed by a recognised numerical construct, use that as name
+ and dob.obj =~/^\s*(?:\S+\s+)?([\d.,:-]+)/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)
possible_seg_name=possible_seg_name.
gsub(/(?:[:,-]|\W)/,'.').
gsub(/\.$/,'')
@@ -339,13 +380,13 @@ module SiSU_AO_Numbering
end
if dob.ln==4 \
and not dob.name #if still no segment name, provide a numerical one
- pf='_' #pg='' #may use e.g. '' or '~' or '_'
- segn_auto="#{pf}#{art_filename_auto.to_s}"
+ possible_seg_name=
+ auto_seg_name(art_filename_auto)
if @md.seg_names.is_a?(Array) \
- and not @md.seg_names.include?(segn_auto)
- dob.name=segn_auto
+ 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 << segn_auto
+ @md.seg_names << possible_seg_name
else puts 'segment name (numbering) error'
end
art_filename_auto+=1