diff options
| author | Ralph Amissah <ralph@amissah.com> | 2012-04-15 00:26:26 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2012-04-15 00:32:15 -0400 | 
| commit | 0013ec9d66de5341a419585909d722009fc33381 (patch) | |
| tree | 2c2802282f2733f0912e59379e107c2fc7bfd8d4 | |
| parent | v3: 3.2.3 version & changelog "opened" (diff) | |
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)]
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v3 | 11 | ||||
| -rw-r--r-- | lib/sisu/v3/dal_syntax.rb | 65 | ||||
| -rw-r--r-- | lib/sisu/v3/hub.rb | 2 | ||||
| -rw-r--r-- | lib/sisu/v3/param.rb | 20 | 
4 files changed, 87 insertions, 11 deletions
| diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3 index c328ee3e..7c1dccca 100644 --- a/data/doc/sisu/CHANGELOG_v3 +++ b/data/doc/sisu/CHANGELOG_v3 @@ -21,6 +21,17 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_3.2.3.orig.tar.xz    sisu_3.2.3-1.dsc    sisu_3.2.3-1.debian.tar.gz +* v3: param, dal_syntax, document header (simple regex) substitution list +  added, note $ and curly braces are escaped 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)] +  %% 3.2.2.orig.tar.xz (2012-04-05:14/4)  http://git.sisudoc.org/?p=code/sisu.git;a=log;h=refs/tags/sisu_3.2.2  http://git.sisudoc.org/?p=code/sisu.git;a=log;h=refs/tags/debian/sisu_3.2.2-1 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 \ | 
