From f74de438d030629eec66eeb1f7275ed62bc5c370 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 1 Jul 2014 00:54:37 -0400 Subject: v5 v6: ao, segment numbering, fixed width, leading zeros * alphanumeric sorting --- lib/sisu/v5/ao_numbering.rb | 55 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 7 deletions(-) (limited to 'lib/sisu/v5/ao_numbering.rb') 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 -- cgit v1.2.3