From 0013ec9d66de5341a419585909d722009fc33381 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 15 Apr 2012 00:26:26 -0400 Subject: v3: param, dal_syntax, document header (simple regex) substitution list * $ and curly braces are escaped (within sisu) to allow the following: @make:\n :substitute: /${linux-distro}/,'Debian' /${stable}/,'Squeeze' \ /${testing}/,'Wheezy' * changes are not made within text object types: code-blocks, tables or metadata (document headers). Marked up document remains self-referential. * Note: the substitution list must be written on a single line, without line-breaks. * [Substitutions possibility requested by Debian-live, live-manual (Ben Armstrong & Daniel Baumann)] --- lib/sisu/v3/dal_syntax.rb | 65 +++++++++++++++++++++++++++++++++++++++-------- lib/sisu/v3/hub.rb | 2 +- lib/sisu/v3/param.rb | 20 +++++++++++++++ 3 files changed, 76 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/sisu/v3/dal_syntax.rb b/lib/sisu/v3/dal_syntax.rb index 73bb6a64..102e44cd 100644 --- a/lib/sisu/v3/dal_syntax.rb +++ b/lib/sisu/v3/dal_syntax.rb @@ -124,6 +124,9 @@ module SiSU_DAL_Syntax @data.each do |dob| dob=breaks(dob) dob=if @md.sem_tag then sem(dob) else dob end #revisit + dob=line_actions(dob) + dob=paragraph_set(dob) + dob=substitutions(dob) dob=wordlist_italics(dob) dob=wordlist_bold(dob) dob=bodymarkup(dob) @@ -203,6 +206,57 @@ module SiSU_DAL_Syntax gsub(/^\/_\s+(.*)?\s*$/, "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") end + def line_actions(dob) + dob.obj=if (dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:comment \ + && dob.is !=:meta) \ + and dob.obj =~ /^!_\s+/ + embolden(dob.obj) + elsif dob.obj =~ /^\/_\s+/ + italicise(dob.obj) + else dob.obj + end + dob + end + def paragraph_set(dob) + dob.obj=if dob.is !=:meta \ + && dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment \ + && dob.is !=:table + dob.obj.gsub(/\n/m,' '). + gsub(/ \s+/m,' ') + else dob.obj + end + dob + end + def substitutions(dob) + dob=dob.dup + dob=if defined? @md.make.substitute[:match_and_replace] \ + and @md.make.substitute[:match_and_replace].class == Array + dob=if dob.is !=:meta \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment \ + && dob.is !=:table + if dob.obj =~/#{@md.make.substitute[:matches]}/ + @md.make.substitute[:match_and_replace].each do |x| + dob.obj=if x[:case_s]==:i + dob.obj.gsub(/#{x[:match]}/mi,x[:replace]) + else + dob.obj.gsub(/#{x[:match]}/m,x[:replace]) + end + end + end + dob + else dob + end + dob + else dob + end + end def wordlist_bold(dob) dob=dob.dup if (defined? @md.make.bold[:str] \ @@ -239,20 +293,11 @@ module SiSU_DAL_Syntax else dob.obj end else - dob.obj=if (dob.is !=:heading \ - && dob.is !=:heading_insert \ - && dob.is !=:comment \ - && dob.is !=:meta) \ - and dob.obj =~ /^!_\s+/ - embolden(dob.obj) - elsif dob.is==:heading \ + dob.obj=if dob.is==:heading \ and dob.ln.to_s =~/[7-9]/ embolden(dob.obj) else dob.obj end - if dob.obj =~ /\/_\s+/ - dob.obj=italicise(dob.obj) - end end dob end diff --git a/lib/sisu/v3/hub.rb b/lib/sisu/v3/hub.rb index 5f256314..7466efde 100644 --- a/lib/sisu/v3/hub.rb +++ b/lib/sisu/v3/hub.rb @@ -173,7 +173,7 @@ module SiSU Dir.chdir(@opt.pth) #watch env=SiSU_Env::InfoEnv.new(fns) if @req !~/(?:urls|remote)$/ - if @opt.cmd.inspect =~/-P/\ + if @opt.cmd.inspect =~/-P/ \ and @req =~ /^po4a$/ require_relative 'composite' # composite.rb #pre-processing SiSU_Po4a::Source.new(@opt).read # -P po4a.rb diff --git a/lib/sisu/v3/param.rb b/lib/sisu/v3/param.rb index 5563f780..60f5345b 100644 --- a/lib/sisu/v3/param.rb +++ b/lib/sisu/v3/param.rb @@ -803,6 +803,26 @@ module SiSU_Param else nil end end + def substitute + m=@h['substitute'] + z=if m + w=m.scan(/\/(.+?)\/(i?,)\s*'(.+?)'(?:\s+|\s*;\s*|$)/) + arr_hash=[] + matches='' + w.each do |x| + c=(x[1] =~/[i],/) ? :i : :s + matches=matches + x[0].gsub(/([${}])/,'\\\\\1') + '|' + arr_hash << { + match: x[0].gsub(/([${}])/,'\\\\\1'), + replace: x[2], + case_s: c + } + end + matches.chop! + { match_and_replace: arr_hash, matches: matches } + else nil + end + end def plaintext_wrap if @h['plaintext_wrap'].to_s =~/\d\d+/ \ and @h['plaintext_wrap'].to_i > 19 \ -- cgit v1.2.3