diff options
Diffstat (limited to 'lib/sisu/v6/ao_numbering.rb')
-rw-r--r-- | lib/sisu/v6/ao_numbering.rb | 98 |
1 files changed, 81 insertions, 17 deletions
diff --git a/lib/sisu/v6/ao_numbering.rb b/lib/sisu/v6/ao_numbering.rb index 0dbb1a71..d6faf3a6 100644 --- a/lib/sisu/v6/ao_numbering.rb +++ b/lib/sisu/v6/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) @@ -121,7 +134,8 @@ module SiSU_AO_Numbering dob end def heading_tag_clean(heading_tag) - heading_tag=heading_tag.gsub(/[ ]+/,'_'). + heading_tag=heading_tag. + gsub(/[ ]+/,'_'). gsub(/["']/,''). gsub(/[\/]/,'-'). gsub(/#{Mx[:fa_bold_o]}|#{Mx[:fa_bold_c]}/,''). @@ -151,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 \ @@ -279,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 @@ -313,9 +353,12 @@ 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=possible_seg_name.gsub(/(?:[:,-]|\W)/,'.'). + possible_seg_name= + auto_seg_name(possible_seg_name) + 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) @@ -337,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 @@ -363,11 +406,17 @@ module SiSU_AO_Numbering m=dob.ln.to_s dob_tmp=[] if @md.pagenew.inspect =~/#{m}/ - dob_tmp << SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) << dob + dob_tmp << + SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) << + dob elsif @md.pagebreak.inspect =~/#{m}/ - dob_tmp << SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) << dob + dob_tmp << + SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) << + dob elsif @md.pageline.inspect =~/#{m}/ - dob_tmp << SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_line]) << dob + dob_tmp << + SiSU_AO_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_line]) << + dob end unless dob_tmp.length > 0; dob else dob_tmp @@ -381,11 +430,23 @@ module SiSU_AO_Numbering : @segname tags["#{dob.ocn}"]={ segname: @segname } ocn_html_seg[dob.ocn]=if (dob.is==:heading || dob.is==:heading_insert) - if dob.ln =~/[0-3]/ then { seg: nil, level: dob.ln } + if dob.ln =~/[0-3]/ + { + seg: nil, + level: dob.ln, + } #elsif dob.ln =~/[4-6]/ - else { seg: @seg, level: dob.ln } + else + { + seg: @seg, + level: dob.ln, + } end - else { seg: @seg, level: nil } + else + { + seg: @seg, + level: nil, + } end end dob.tags=dob.tags.uniq if defined? dob.tags @@ -434,7 +495,9 @@ module SiSU_AO_Numbering and defined? @md.title.full \ and defined? @md.creator \ and @md.creator - head=@md.title.main ? ([@lv='1',@obj=@md.title.main]) : ([@lv='1',@obj='[no title provided]']) + head=@md.title.main \ + ? ([@lv='1',@obj=@md.title.main]) + : ([@lv='1',@obj='[no title provided]']) @tuned_file << head end end @@ -479,7 +542,8 @@ module SiSU_AO_Numbering unless @md.set_header_title if t_o !~/^%{1,2}\s/m \ and t_o !~/\A\s*\Z/m - @tuned_file << "#{Mx[:meta_o]}title#{Mx[:meta_c]} #{@md.heading_seg_first}" + @tuned_file << + "#{Mx[:meta_o]}title#{Mx[:meta_c]} #{@md.heading_seg_first}" @md.title.main=@md.heading_seg_first @md.set_header_title=true end |