diff options
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v4 | 5 | ||||
| -rw-r--r-- | lib/sisu/v4/dal_syntax.rb | 55 | ||||
| -rw-r--r-- | lib/sisu/v4/options.rb | 80 | ||||
| -rw-r--r-- | lib/sisu/v4/param.rb | 522 | ||||
| -rw-r--r-- | lib/sisu/v4/param_make.rb | 636 | ||||
| -rw-r--r-- | lib/sisu/v4/sysenv.rb | 43 | 
6 files changed, 861 insertions, 480 deletions
| diff --git a/data/doc/sisu/CHANGELOG_v4 b/data/doc/sisu/CHANGELOG_v4 index a9174dce..5af16f53 100644 --- a/data/doc/sisu/CHANGELOG_v4 +++ b/data/doc/sisu/CHANGELOG_v4 @@ -54,3 +54,8 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_4.0.0.orig.tar.xz      * text button      * image/icon button    * pdf, footer + +* v4: param_make, options, read common make instruction header for documents, +  _sisu/v4/sisu_document_make +  * @make: +  * @links: diff --git a/lib/sisu/v4/dal_syntax.rb b/lib/sisu/v4/dal_syntax.rb index fba2e765..b62fbad8 100644 --- a/lib/sisu/v4/dal_syntax.rb +++ b/lib/sisu/v4/dal_syntax.rb @@ -63,15 +63,15 @@ module SiSU_DAL_Syntax    end    class Markup      def initialize(md='',data='') -      @data,@md=data,md +      @md,@data=md,data        @vz=SiSU_Viz::Defaults.new        @data_new=[]        url_and_stub=SiSU_Env::InfoEnv.new.url        @output_url="#{url_and_stub.remote}"        @env=SiSU_Env::InfoEnv.new -      emph_set=if defined? @md.make.emphasis \ -      and not @md.make.emphasis.nil? -        @md.make.emphasis +      emph_set=if defined? @md.emphasis_set_to \ +      and not @md.emphasis_set_to.nil? +        @md.emphasis_set_to        else @env.markup_emphasis        end        @emph=case emph_set @@ -94,25 +94,22 @@ module SiSU_DAL_Syntax        tail_m_bold=%{(?:(?:#{Mx[:fa_italics_c]})?(?:\s|[.,;:?!'")]|~\^|~\\\{\s|$))?}        bold_line=%{^!_\s.+?(?:#{Mx[:br_line]}|\n|$)}        ital_line=%{^/_\s.+?(?:#{Mx[:br_line]}|\n|$)} -      @line_scan_ital=if defined? @md.make.italics[:str] \ -      and defined? @vz.markup_make_italic[:str] -        /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|(?:#{@md.make.italics[:str]}|#{@vz.markup_make_italic[:str]})#{tail_m_ital}|\S+|\n/i -      elsif defined? @md.make.italics[:str] -        /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@md.make.italics[:str]}#{tail_m_ital}|\S+|\n/i +      @line_scan_ital=if defined? @md.italics_match_list[:str] +        /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@md.italics_match_list[:str]}#{tail_m_ital}|\S+|\n/i        elsif defined? @vz.markup_make_italic[:str]          /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@vz.markup_make_italic[:str]}#{tail_m_ital}|\S+|\n/i        end        @manmkp_bold=emph_italics \        ? '^!_\s.+?(?:\n|$)|[!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[!]'        : '^!_\s.+?(?:\n|$)|[*!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[*!]' -      @line_scan_bold=if (defined? @md.make.bold[:str] \ -      and @md.make.bold[:str]) \ +      @line_scan_bold=if (defined? @md.bold_match_list[:str] \ +      and @md.bold_match_list[:str]) \        and (defined? @vz.markup_make_bold[:str] \        and @vz.markup_make_bold[:str]) -        /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i -      elsif defined? @md.make.bold[:str] \ -      and @md.make.bold[:str] -        /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]})#{tail_m_bold}|\S+|\n/i +        /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.bold_match_list[:str]}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i +      elsif defined? @md.bold_match_list[:str] \ +      and @md.bold_match_list[:str] +        /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.bold_match_list[:str]})#{tail_m_bold}|\S+|\n/i        elsif defined? @vz.markup_make_bold[:str] \        and @vz.markup_make_bold[:str]          /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i @@ -152,8 +149,8 @@ module SiSU_DAL_Syntax      end      def wordlist_italics(dob)        dob=dob.dup -      if (defined? @md.make.italics[:str] \ -      and @md.make.italics[:str]) \ +      if (defined? @md.italics_match_list[:str] \ +      and @md.italics_match_list[:str]) \        or (defined? @vz.markup_make_italic[:str] \        and @vz.markup_make_italic[:str])          dob.obj=if dob.is !=:meta \ @@ -166,9 +163,9 @@ module SiSU_DAL_Syntax            line_array=[]            word.each do |w|              unless /#{@manmkp_ital}|#{@http_m}/.match(w) -              if defined? @md.make.italics[:regx] \ -              and @md.make.italics[:regx] -                w=w.gsub(@md.make.italics[:regx], +              if defined? @md.italics_match_list[:regx] \ +              and @md.italics_match_list[:regx] +                w=w.gsub(@md.italics_match_list[:regx],                    "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}")                elsif defined? @vz.markup_make_italic \                and @vz.markup_make_italic @@ -237,15 +234,15 @@ module SiSU_DAL_Syntax      end      def substitutions(dob)        dob=dob.dup -      dob=if defined? @md.make.substitute[:match_and_replace] \ -      and @md.make.substitute[:match_and_replace].is_a?(Array) +      dob=if defined? @md.substitution_match_list[:match_and_replace] \ +      and @md.substitution_match_list[:match_and_replace].is_a?(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| +          if dob.obj =~/#{@md.substitution_match_list[:matches]}/ +            @md.substitution_match_list[:match_and_replace].each do |x|                dob.obj=if x[:case_s]==:i                  dob.obj.gsub(/#{x[:match]}/mi,x[:replace])                else @@ -262,8 +259,8 @@ module SiSU_DAL_Syntax      end      def wordlist_bold(dob)        dob=dob.dup -      if (defined? @md.make.bold[:str] \ -      and @md.make.bold[:str]) \ +      if (defined? @md.bold_match_list[:str] \ +      and @md.bold_match_list[:str]) \        or (defined? @vz.markup_make_bold[:str] \        and @vz.markup_make_bold[:str])          dob.obj=if dob.is !=:meta \ @@ -277,9 +274,9 @@ module SiSU_DAL_Syntax            word=word.flatten.compact            word.each do |w|              unless /#{@manmkp_bold}|#{@http_m}/.match(w) -              if defined? @md.make.bold[:regx] \ -              and @md.make.bold[:regx]                                                   #document header: @bold: [bold word list] -                w=w.gsub(@md.make.bold[:regx],"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") +              if defined? @md.bold_match_list[:regx] \ +              and @md.bold_match_list[:regx]                                                   #document header: @bold: [bold word list] +                w=w.gsub(@md.bold_match_list[:regx],"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}")                elsif defined? @vz.markup_make_bold \                and @vz.markup_make_bold                                                   #defaults adjusted bold word list                  w=w.gsub(@vz.markup_make_bold,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") diff --git a/lib/sisu/v4/options.rb b/lib/sisu/v4/options.rb index d2898bfd..ddf9737b 100644 --- a/lib/sisu/v4/options.rb +++ b/lib/sisu/v4/options.rb @@ -59,9 +59,77 @@  module SiSU_Commandline    require 'pathname'    require_relative 'sysenv'                             # sysenv.rb +  require_relative 'param_make'                         # param_make.rb    @@sisu_call_origin_path=nil +  class HeaderCommon +    def sisu_document_make_instructions +      @pagenew=@pagebreak=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@num_top=@i18n=@man_section=@emphasis_set_to=@bold_match_list=@italics_match_list=@substitution_match_list=@footer_links=@home_button_links=@links=nil +      @makeset=false +      make_instruct_array=SiSU_Env::GetInit.new.sisu_document_make.makefile +      if make_instruct_array +        make_instruct_array.each do |para|                                               #% scan document +          if para =~/^(?:@make:|@links:)[+-]?\s/ +            case para +            when /^@make:(.+)/m                                                #% * header processing - make +              @env=SiSU_Env::InfoEnv.new +              @make=SiSU_Param_Make::MdMake.new($1.strip,@opt,@env).make +              makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct +              @makeset=true +              @pagenew=makes[:pagenew] +              @pagebreak=makes[:pagenew] +              @toc=makes[:toc] +              @lv1=makes[:lv1] +              @lv2=makes[:lv2] +              @lv3=makes[:lv3] +              @lv4=makes[:lv4] +              @lv5=makes[:lv5] +              @lv6=makes[:lv6] +              @num_top=makes[:num_top] +              @i18n=makes[:i18n] +              @man_section=makes[:man_section] +              @emphasis_set_to=makes[:emphasis_set_to] +              @bold_match_list=makes[:bold_match_list] +              @italics_match_list=makes[:italics_match_list] +              @substitution_match_list=makes[:substitution_match_list] +              @footer_links=makes[:footer_links] +              @home_button_links=makes[:home_button_links] +              @home_button_image=makes[:home_button_image] +              @cover_image=makes[:cover_image] +            when /^@links:(.+)/m                                                #% header processing - make +              make_links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links +              @links,@links_append=make_links.links,make_links.append? +            end +          end +        end                                                                    #% here endeth the common header loop +      end +      { makeset: @makeset, +        pagenew: @pagenew, +        pagebreak: @pagebreak, +        toc: @toc, +        lv1: @lv1, +        lv2: @lv2, +        lv3: @lv3, +        lv4: @lv4, +        lv5: @lv5, +        lv6: @lv6, +        num_top: @num_top, +        i18n: @i18n, +        man_section: @man_section, +        emphasis_set_to: @emphasis_set_to, +        bold_match_list: @bold_match_list, +        italics_match_list: @italics_match_list, +        substitution_match_list: @substitution_match_list, +        footer_links: @footer_links, +        home_button_links: @home_button_links, +        home_button_image: @home_button_image, +        cover_image: @cover_image, +        links: @links, +        links_append: @links_append +      } +    end +  end    class Options -    attr_accessor :cmd,:mod,:act,:dir_structure_by,:f_pths,:files,:files_mod,:base_path,:base_stub,:sub_location,:paths,:lngs,:f_pth,:pth,:fno,:fns,:fnb,:fnc,:fng,:fncb,:lng,:lng_base,:what +    attr_accessor :cmd,:mod,:act,:dir_structure_by,:f_pths,:files,:files_mod,:base_path,:base_stub,:sub_location,:paths,:lngs,:f_pth,:pth,:fno,:fns,:fnb,:fnc,:fng,:fncb,:lng,:lng_base,:what,:make_instructions      @@act=nil      def initialize(a)        @cmd,@f_pth,@pth,@fno,@fns,@fnb,@fnc,@fng,@fncb,@what,@lng,@lng_base,@base_path,@base_stub,@sub_location='','','','','','','','','','','','','','' @@ -76,6 +144,7 @@ module SiSU_Commandline        @base_stub=@base_path.gsub(u,'\1')        @a=sisu_glob_rules(a)        @a.freeze +      @make_instructions=HeaderCommon.new.sisu_document_make_instructions        init      end      def find_all(find_flag,opt) @@ -868,9 +937,6 @@ module SiSU_Commandline    end  end  __END__ -note usually named @opt -is carried in Param usually as @md -@opt is a subset of @md -where @md is passed, contents of @opt are available -passing @opt as well is duplication -check for fns & fnb +note usually named @opt is carried in Param usually as @md @opt is a subset of +@md where @md is passed, contents of @opt are available as @md.opt passing @opt +as well is duplication check for fns & fnb diff --git a/lib/sisu/v4/param.rb b/lib/sisu/v4/param.rb index f9607df2..925723f8 100644 --- a/lib/sisu/v4/param.rb +++ b/lib/sisu/v4/param.rb @@ -60,6 +60,7 @@ module SiSU_Param    require 'pstore'    require_relative 'sysenv'                             # sysenv.rb      include SiSU_Env +  require_relative 'param_make'                         # param_make.rb    require_relative 'param_identify_markup'              # param_identify_markup.rb    require_relative 'help'                               # help.rb      include SiSU_Help @@ -159,6 +160,8 @@ module SiSU_Param          self        end      end +    class MdMake < SiSU_Param_Make::MdMake +    end      class Md        def initialize(str,opt,env)          @s,@opt,@env=str,opt,env @@ -736,349 +739,6 @@ module SiSU_Param        #  end        #  self        #end -      def make -        a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) -        @h=build_hash(a) -        def headings -          lv=[] -          x=@h['headings'] -          x=((x =~/;/) ? (x.split(/;\s*/)) : [ x ]) -          lv[0]=x -          lv1=x[0] ||='1~ '                                                                                     #some arbitrary changes made -          lv[1]=/^#{lv1}/ -          lv2=x[1] ||='2~ ' -          lv[2]=/^#{lv2}/ -          lv3=x[2] ||='3~ ' -          lv[3]=/^#{lv3}/ -          lv4=x[3] ||='4~ ' -          lv[4]=/^#{lv4}/ -          lv5=x[4] ||='5~ ' -          lv[5]=/^#{lv5}/ -          lv6=x[5] ||='6~ ' -          lv[6]=/^#{lv6}/ -          lv -        end -        def num_top -          @h['num_top'] -        end -        def breaks -          pagebreaks=((@h['breaks'] =~/;/) \ -          ? (@h['breaks'].split(/;\s*/)) -          : [ @h['breaks'] ]) -          page_new,page_break=nil,nil -          pagebreaks.each do |x| -            page_new=x[/(:?[\dA-C],?)+/] if x=~/new|clear/ -            page_break=x[/(:?[\dA-C],?)+/] if x =~/break/ -          end -          { page_new: page_new, page_break: page_break } -        end -        def language -          l=if @h['language'] && (@h['language']=~/\S{2,}/) -            ((@h['language'] =~/,/) \ -            ? (@h['language'].split(/,\s*/)) -            : [ @h['language'] ]) -          else [ 'en' ] -          end -        end -        def bold -          m=@h['bold'] -          i=(m=~/\/i$/)? 'i' : '' -          z=if m -            x=m.gsub(/^\/(.+?)\/i?/,'\1'). -              gsub(/\((?:\?:)?/,'(?:')                                         # avoid need to escape use of brackets within regex provided -            rgx='\b(' + x + ')\b' -            y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) -            { str: '\b(?:' + x + ')\b', regx: y, i: i } -          else nil -          end -        end -        def italics -          m=@h['italics'] -          i=((m=~/\/i$/) ? 'i' : '') -          z=if m -            x=m.gsub(/^\/(.+?)\/i?/,'\1'). -              gsub(/\((?:\?:)?/,'(?:')                                         # avoid need to escape use of brackets within regex provided -            rgx='\b(' + x + ')\b' -            y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) -            { str: '\b(?:' + x + ')\b', regx: y, i: i } -          else nil -          end -        end -        def emphasis -          if @h['emphasis'] =~/bold/                   then 'bold' -          elsif @h['emphasis'] =~/italics?/            then 'italics' -          elsif @h['emphasis'] =~/under(?:line|score)/ then 'underscore' -          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 \ -          and @h['plaintext_wrap'].to_i < 201 -            @h['plaintext_wrap'].to_i -          else nil -          end -        end -        def omit -          m=@h['omit'] -          @m=m ? (m.split(/,\s+/)) : nil -          def list -            @m -          end -          self -        end -        def ocn? -          (omit.list.inspect =~/"ocn"/) \ -          ? :off -          : :na -        end -        def toc? -          (omit.list.inspect =~/"toc"/) \ -          ? :off -          : :na -        end -        def manifest? -          (omit.list.inspect =~/"manifest"/) \ -          ? :off -          : :na -        end -        def links_to_manifest? -          (omit.list.inspect =~/"manifest_links"|"links_to_manifest"/) \ -          ? :off -          : :na -        end -        def metadata? -          (omit.list.inspect =~/"metadata"/) \ -          ? :off -          : :na -        end -        def minitoc? -          (omit.list.inspect =~/"minitoc"/) \ -          ? :off -          : :na -        end -        def html_minitoc? -          (omit.list.inspect =~/"html_minitoc"/) \ -          ? :off -          : :na -        end -        def html_top_band? -          (omit.list.inspect =~/"html_top_band"/) \ -          ? :off -          : :na -        end -        def html_navigation? -          (omit.list.inspect =~/"html_navigation"/) \ -          ? :off -          : :na -        end -        def html_navigation_bar? -          (omit.list.inspect =~/"html_navigation_bar"/) \ -          ? :off -          : :na -        end -        def segsubtoc? -          (omit.list.inspect =~/"segsubtoc"/) \ -          ? :off -          : :na -        end -        def search_form? -          (omit.list.inspect =~/"search_form"/) \ -          ? :off -          : :na -        end -        def html_search_form? -          (omit.list.inspect =~/"html_search_form"/) \ -          ? :off -          : :na -        end -        def html_right_pane? -          (omit.list.inspect =~/"html_right_column"|"html_right_pane"/) \ -          ? :off -          : :na -        end -        def manifest_minitoc? -          (omit.list.inspect =~/"manifest_minitoc"/) \ -          ? :off -          : :na -        end -        def cover_image? -          (omit.list.inspect =~/"cover_image"/) \ -          ? :off -          : :na -        end -        def home_button_image? -          (omit.list.inspect =~/"home_button_image"/) \ -          ? :off -          : :na -        end -        def texpdf_font -          def main -            @h['texpdf_font'] \ -            && (@h['texpdf_font']=~/\S{3,}/) \ -            ? @h['texpdf_font'] -            : @env.font.texpdf.main -          end -          def sans                                                             # not used -            @h['texpdf_font_sans'] \ -            && (@h['texpdf_font_sans']=~/\S{3,}/) \ -            ? @h['texpdf_font_sans'] -            : @env.font.texpdf.sans -          end -          def serif                                                            # not used -            @h['texpdf_font_serif'] \ -            && (@h['texpdf_font_serif']=~/\S{3,}/) \ -            ? @h['texpdf_font_serif'] -            : @env.font.texpdf.serif -          end -          def mono -            @h['texpdf_font_mono'] \ -            && (@h['texpdf_font_mono']=~/\S{3,}/) \ -            ? @h['texpdf_font_mono'] -            : @env.font.texpdf.mono -          end -          self -        end -        def promo -          @h['promo'] -        end -        def ad -          @h['ad'] -        end -        def manpage -          manpage={} -          if @h['manpage'] -            if @h['manpage'] =~/;/m -              man=@h['manpage'].split(/;/m) -              man.each do |x| -                m=(x=~/=/m) ? x.split(/=/m) : nil -                if m -                  manpage[m[0].strip] = m[1].split(/ \. /) -                end -              end -            end -          end -          if manpage['name'] -            manpage['name']=manpage['name'].join("\n.br\n"). -              gsub(/(-)/m,"\\\\\\1"). -              gsub(/\A/,"\n.br\n.SH NAME\n.br\n") -          else -            manpage['name']='man page "name/whatis" information not provided, set in header @man: name=[whatis information]' -          end -          if manpage['synopsis'] -            manpage['synopsis']=manpage['synopsis'].join("\n\n.br\n"). -              gsub(/(-)/m,"\\\\\\1"). -              gsub(/\A/,"\n.br\n.SH SYNOPSIS\n.br\n") -          else -            manpage['synopsis']='' -          end -          unless manpage['section'] -            manpage['section']=1 -          end -          manpage -        end -        def get_image_dimentions(img) -          imgk=SiSU_Env::SystemCall.new.imagemagick -          gmgk=SiSU_Env::SystemCall.new.graphicksmagick -          if imgk or gmgk -            img_pth=@env.path.image_source_include -            if imgk -              imgsys=`identify #{img_pth}/#{img}`.strip                           #system call -            elsif gmgk -              imgsys=`gm identify #{img_pth}/#{img}`.strip                        #system call -            end -            w,h=/(\d+)x(\d+)/m.match(imgsys)[1,2] -          else -            w,h='600','800' -          end -          {w: w, h: h} -        end -        def home_button_text -          s=if @h['home_button_text'] -            @h['home_button_text'].split(/\s*;\s*/) -          else nil -          end -          #l,n=Db[:home_button],'make.home_button_text' -          #validate_length(s,l,n) -        end -        def home_button_image -          s=nil -          s=if @h['home_button_image'] -            s=@h['home_button_image'].split(/\s*;\s*/) -            s0=s[0] #if -            image={} -            s=if s0 =~/{(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?\s*}(?:(http:\/\/\S+)|image)/ -              image[:home_button]=$1 -              if $2 -                image[:dimentions]=$2 -                image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimentions])[1,2] -              else -                d=get_image_dimentions(image[:home_button]) -                image[:w],image[:h]=d[:w],d[:h] -                image[:dimentions]="#{d[:w]}x#{d[:h]}" -              end -              image[:link]=$3 -              image -            end -          else nil -          end -        end -        def cover_image -          s=nil -          if @h['cover_image'] -            s=@h['cover_image'].split(/\s*;\s*/) -            s=s[0] #if -            image={} -            if s =~/{(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?\s+(?:"(.+?)")?\s*}image/ -              image[:cover]=$1 -              if $2 -                image[:dimentions]=$2 -                image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimentions])[1,2] -              else -                d=get_image_dimentions(image[:cover]) -                image[:w],image[:h]=d[:w],d[:h] -                image[:dimentions]="#{d[:w]}x#{d[:h]}" -              end -              image[:note]=$3 -            elsif s =~/(\S+\.(?:jpg|png|gif))/ -              image[:cover]=$1 -              d=get_image_dimentions(image[:cover]) -              image[:w],image[:h]=d[:w],d[:h] -              image[:dimentions]="#{d[:w]}x#{d[:h]}" -              image[:note]=nil -            end -            image -          else nil -          end -        end -        def footer -          s=if @h['footer'] -            @h['footer'].split(/\s*;\s*/) -          else nil -          end -        end -        self -      end        def current_publisher          @s        end @@ -1117,9 +777,6 @@ module SiSU_Param          end          self        end -      def links -        a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) -      end        def notes          a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)          @h=build_hash(a) @@ -1145,9 +802,9 @@ module SiSU_Param        @doc={ lv: [] }        @doc[:fns],@doc[:fnb],@doc[:scr_suffix]='','',''        @@publisher='SiSU scribe' -      attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:sisu,:sisu_version,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:num_top,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:markup_version,:markup_declared,:flag_tables,:vocabulary,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section +      attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:sisu,:sisu_version,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:num_top,:bold_match_list,:italics_match_list,:substitution_match_list,:emphasis_set_to,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:markup_version,:markup_declared,:flag_tables,:vocabulary,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section        def initialize(fns_array,opt) -        @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@sisu=@sisu_version=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@num_top=@toc_lev_limit=@flag_tables=@vocabulary=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=nil +        @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@sisu=@sisu_version=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@num_top=@bold_match_list=@italics_match_list=@substitution_match_list=@emphasis_set_to=@toc_lev_limit=@flag_tables=@vocabulary=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=nil          @data,@path,@fns,@fno,@opt=fns_array,opt.pth,opt.fns,opt.fno,opt #@data used as data          @flag_tables,@set_header_title,@set_heading_top,@set_heading_seg,@heading_seg_first_flag,@flag_promo,@book_idx=false,false,false,false,false,false,false          @seg_autoname_safe=true @@ -1158,6 +815,7 @@ module SiSU_Param          @flv,@lang,@seg_names,@tags,@tag_array,@tag_a,@ec[:image],@ec[:audio],@ec[:multimedia]=Array.new(9){[]}          @authors,@topic_register_array,@papersize_array=[],[],[]          @lvs=[nil,0,0,0,0,0,0] +        @emphasis_set_to='bold'          @lang_code_insert=if @opt.act[:output_by][:set]==:language            ''          elsif @opt.act[:output_by][:set]==:filetype \ @@ -1180,6 +838,32 @@ module SiSU_Param            end          ensure          end +        @header_make_links_append=:no +        common_makes=@opt.make_instructions +        if common_makes[:makeset] +          @pagenew=common_makes[:pagenew] +          @pagebreak=common_makes[:pagenew] +          @toc=common_makes[:toc] +          @lv1=common_makes[:lv1] +          @lv2=common_makes[:lv2] +          @lv3=common_makes[:lv3] +          @lv4=common_makes[:lv4] +          @lv5=common_makes[:lv5] +          @lv6=common_makes[:lv6] +          @num_top=common_makes[:num_top] +          @i18n=common_makes[:i18n] +          @man_section=common_makes[:man_section] +          @emphasis_set_to=common_makes[:emphasis_set_to] +          @bold_match_list=common_makes[:bold_match_list] +          @italics_match_list=common_makes[:italics_match_list] +          @substitution_match_list=common_makes[:substitution_match_list] +          @footer_links=common_makes[:footer_links] +          @home_button_links=common_makes[:home_button_links] +          @home_button_image=common_makes[:home_button_image] +          @cover_image=common_makes[:cover_image] +          @lnk=@links=common_makes[:links] +          @header_make_links_append=common_makes[:links_append] +        end        end        #protected        def determine_papersize(l) @@ -1323,91 +1007,65 @@ module SiSU_Param              when /^@notes?:\s(.+)\Z/m                                          #% * header metadata - notes                @notes=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).notes              when /^@links:\s+(.+?)\Z/m                                         #% * header metadata - links -              doc_links=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).links -              a_idx=0 -              @links=[] -              doc_links.each do |doc_link| -                if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ -                  @links[a_idx]={} -                  @links[a_idx][:say],@links[a_idx][:url]=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] -                  a_idx +=1 -                end +              links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links.links +              @lnk=@links=if @header_make_links_append == :yes +                (links) \ +                  ? (links + @links) +                  : @links +              else +                (links) \ +                  ? (links) +                  : @links                end -              @lnk=@links              when /^@make:(.+)/m                                                #% * header processing - make -              @make=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).make -              if defined? @make.breaks \ -              and @make.breaks[:page_new]                  #clearpage -                @pagenew=@make.breaks[:page_new] -              end -              if defined? @make.breaks \ -              and @make.breaks[:page_break]                #newpage -                @pagebreak=@make.breaks[:page_break] -              end -              if defined? @make.headings \ -              and @make.headings -                @toc=@make.headings[0] -                @lv1=@make.headings[1] -                @lv2=@make.headings[2] -                @lv3=@make.headings[3] -                @lv4=@make.headings[4] -                @lv5=@make.headings[5] -                @lv6=@make.headings[6] -              end -              if defined? @make.num_top \ -              and @make.num_top -                @num_top=@make.num_top # remove @num_top -              end -              if defined? @make.language \ -              and @make.language[0] -                @i18n=@make.language -              end -              if defined? @make.manpage \ -              and @make.manpage -                @man_section=(defined? @make.manpage.section) \ -                ? @make.manpage.section -                : 1 -              end -              if defined? @make.footer \ -              and @make.footer.is_a?(Array) -                @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } } #already set -                @footer_links[:left]=if @make.footer[0]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ -                  say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[0])[1,2] -                  { say: say, url: url } -                else -                  { say: '', url: '' } -                end -                @footer_links[:center]=if @make.footer[1]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ -                  say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[1])[1,2] -                  { say: say, url: url } -                else -                  { say: '', url: '' } -                end -                @footer_links -              else #already set -                @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } } -              end -              if defined? @make.home_button_text \ -              and @make.home_button_text.is_a?(Array) -                a_idx=0 -                @home_button_links=[] -                @make.home_button_text.each do |doc_link| -                  if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ -                    @home_button_links[a_idx]={} -                    @home_button_links[a_idx][:say],@home_button_links[a_idx][:url]=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] -                    a_idx +=1 -                  end -                end -                @home_button_links -              end -              if defined? @make.home_button_image \ -              and @make.home_button_image.is_a?(Hash) -                @home_button_image=@make.home_button_image -              end -              if defined? @make.cover_image \ -              and @make.cover_image.is_a?(Hash) -                @cover_image=@make.cover_image -              end +              @make=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make +              makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct +              @pagenew=(makes[:pagenew]) \ +                ? (makes[:pagenew]) \ +                : @pagenew +              @pagebreak=(makes[:pagebreak]) \ +                ? (makes[:pagebreak]) \ +                : @pagebreak +              @toc=(makes[:toc]) ? (makes[:toc]) : @toc +              @lv1=(makes[:lv1]) ? (makes[:lv1]) : @lv1 +              @lv2=(makes[:lv2]) ? (makes[:lv2]) : @lv2 +              @lv3=(makes[:lv3]) ? (makes[:lv3]) : @lv3 +              @lv4=(makes[:lv4]) ? (makes[:lv4]) : @lv4 +              @lv5=(makes[:lv5]) ? (makes[:lv5]) : @lv5 +              @lv6=(makes[:lv6]) ? (makes[:lv6]) : @lv6 +              @num_top=(makes[:num_top]) \ +                ? (makes[:num_top]) \ +                : @num_top +              @substitution_match_list=(makes[:substitution_match_list]) \ +                ? (makes[:substitution_match_list]) \ +                : @substitution_match_list +              @bold_match_list=(makes[:bold_match_list]) \ +                ? (makes[:bold_match_list]) \ +                : @bold_match_list +              @italics_match_list=(makes[:italics_match_list]) \ +                ? (makes[:italics_match_list]) \ +                : @italics_match_list +              @emphasis_set_to=(makes[:emphasis_set_to]) \ +                ? (makes[:emphasis_set_to]) \ +                : @emphasis_set_to +              @i18n=(makes[:i18n]) \ +                ? (makes[:i18n]) \ +                : @i18n +              @man_section=(makes[:man_section]) \ +                ? (makes[:man_section]) \ +                : @man_section +              @footer_links=(makes[:footer_links]) \ +                ? (makes[:footer_links]) \ +                : @footer_links +              @home_button_links=(makes[:home_button_links]) \ +                ? (makes[:home_button_links]) \ +                : @home_button_links +              @home_button_image=(makes[:home_button_image]) \ +                ? (makes[:home_button_image]) \ +                : @home_button_image +              @cover_image=(makes[:cover_image]) \ +                ? (makes[:cover_image]) \ +                : @cover_image              end              @lv1 ||=/^1~/              @lv2 ||=/^2~/ @@ -1531,7 +1189,7 @@ module SiSU_Param            if @opt.cmd =~/[VM]/              SiSU_Screen::Ansi.new(@opt.cmd,'@make:','header absent').warn            end -          @make=SiSU_Param::Parameters::Md.new('@make: ',@opt,@env).make +          @make=SiSU_Param::Parameters::MdMake.new('@make: ',@opt,@env).make          end          if @cover_image \          and @cover_image.is_a?(Hash) \ diff --git a/lib/sisu/v4/param_make.rb b/lib/sisu/v4/param_make.rb new file mode 100644 index 00000000..a1bda002 --- /dev/null +++ b/lib/sisu/v4/param_make.rb @@ -0,0 +1,636 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +   2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + +   SiSU, a framework for document structuring, publishing and search + +   Copyright (C) Ralph Amissah + +   This program is free software: you can redistribute it and/or modify it +   under the terms of the GNU General Public License as published by the Free +   Software Foundation, either version 3 of the License, or (at your option) +   any later version. + +   This program is distributed in the hope that it will be useful, but WITHOUT +   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +   FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public Lic/home/ralph/live-manual/build/manual/manifest/live-manual.ca.htmlense for +   more details. + +   You should have received a copy of the GNU General Public License along with +   this program. If not, see <http://www.gnu.org/licenses/>. + +   If you have Internet connection, the latest version of the GPL should be +   available at these locations: +   <http://www.fsf.org/licensing/licenses/gpl.html> +   <http://www.gnu.org/licenses/gpl.html> + +   <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: +   * Standard SiSU markup syntax, +   * Standard SiSU meta-markup syntax, and the +   * Standard SiSU object citation numbering and system + + * Hompages: +   <http://www.jus.uio.no/sisu> +   <http://www.sisudoc.org> + + * Download: +   <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah +   <ralph@amissah.com> +   <ralph.amissah@gmail.com> + + ** Description: make parameters extracted for program use + +=end + +module SiSU_Param_Make +  class MdMake +    def initialize(str,opt,env) +      @s,@opt,@env=str,opt,env +    end +    def validate_length(s,l,n) +      #s=(s.length <= l) ? s : nil +      s=if s.is_a?(String) \ +      and s.length <= l +        s +      elsif s.is_a?(NilClass) +        nil +      elsif s.class !=String +        STDERR.puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}" +        s +      else +        SiSU_Screen::Ansi.new('v',"*WARN* #{n} length #{s.length} exceeds set db field length #{l}, metadata dropped",@opt.fns).warn unless @opt.cmd =~/q/ +        nil +      end +    end +    def name_format(name) +      if name +        name=name.strip +        @name_a_h=[] +        authors=name.scan(/[^;]+/) +        authors.each_with_index do |a,i| +          b=((a =~/\s*\|\s*/) ? (a.split(/\|/)) : [a]) +          if b[0] =~/"(.+?)"/ +            @name_a_h << { the: $1 } +          else +            x=b[0].scan(/[^,]+/) +            if x.length==1 +              @name_a_h << { the: x[0].strip } +            elsif x.length==2 +              @name_a_h << { the: x[0].strip, others: x[1].strip } +            else #p x.length +            end +          end +          b.delete_at(0) +          b.each do |d| +            k,c=nil +            k,c=/^(\S+)\s+(.*)/.match(d)[1,2] if d +            @name_a_h[i][:hon]=c.strip if k=='hon' +            @name_a_h[i][:affiliation]=c.strip if k=='affiliation' +            @name_a_h[i][:nationality]=c.strip if k=='nationality' +          end +        end +        l=@name_a_h.length +        name_str='' +        @name_a_h.each_with_index do |a,i| +          name_str += if a[:others] +            z=(((l - i) > 1) ? ', ' : '') +            "#{a[:others].strip} #{a[:the].strip}" + z +          else +            z=(((l - i) > 2) ? ', ' : '') +            "#{a[:the].strip}" + z +          end +        end +        { name_a_h: @name_a_h, name_str: name_str } +      else nil +      end +    end +    def build_hash(arr) +      @h={} +      arr.each_with_index do |x,i| +        a,b=nil,nil +        if x =~/^%[:\s]/ #ignore comment +        elsif x =~/:(\S+?):\s+(.+)/ +          a,b=/:(\S+?):\s+(.+)\Z/m.match(x)[1,2] +        elsif i == 0 +          a='main' +          b=x +        else +        end +        @h[a]=b +      end +      @h +    end +    def make +      a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) +      @h=build_hash(a) +      def headings +        lv=[] +        x=@h['headings'] +        x=((x =~/;/) ? (x.split(/;\s*/)) : [ x ]) +        lv[0]=x +        lv1=x[0] ||='1~ '                                                                                     #some arbitrary changes made +        lv[1]=/^#{lv1}/ +        lv2=x[1] ||='2~ ' +        lv[2]=/^#{lv2}/ +        lv3=x[2] ||='3~ ' +        lv[3]=/^#{lv3}/ +        lv4=x[3] ||='4~ ' +        lv[4]=/^#{lv4}/ +        lv5=x[4] ||='5~ ' +        lv[5]=/^#{lv5}/ +        lv6=x[5] ||='6~ ' +        lv[6]=/^#{lv6}/ +        lv +      end +      def num_top +        @h['num_top'] +      end +      def breaks +        pagebreaks=((@h['breaks'] =~/;/) \ +        ? (@h['breaks'].split(/;\s*/)) +        : [ @h['breaks'] ]) +        page_new,page_break=nil,nil +        pagebreaks.each do |x| +          page_new=x[/(:?[\dA-C],?)+/] if x=~/new|clear/ +          page_break=x[/(:?[\dA-C],?)+/] if x =~/break/ +        end +        { page_new: page_new, page_break: page_break } +      end +      def language +        l=if @h['language'] && (@h['language']=~/\S{2,}/) +          ((@h['language'] =~/,/) \ +          ? (@h['language'].split(/,\s*/)) +          : [ @h['language'] ]) +        else [ 'en' ] +        end +      end +      def bold +        m=@h['bold'] +        i=(m=~/\/i$/)? 'i' : '' +        z=if m +          x=m.gsub(/^\/(.+?)\/i?/,'\1'). +            gsub(/\((?:\?:)?/,'(?:')                                         # avoid need to escape use of brackets within regex provided +          rgx='\b(' + x + ')\b' +          y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) +          { str: '\b(?:' + x + ')\b', regx: y, i: i } +        else nil +        end +      end +      def italics +        m=@h['italics'] +        i=((m=~/\/i$/) ? 'i' : '') +        z=if m +          x=m.gsub(/^\/(.+?)\/i?/,'\1'). +            gsub(/\((?:\?:)?/,'(?:')                                         # avoid need to escape use of brackets within regex provided +          rgx='\b(' + x + ')\b' +          y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) +          { str: '\b(?:' + x + ')\b', regx: y, i: i } +        else nil +        end +      end +      def emphasis +        if @h['emphasis'] =~/bold/                   then 'bold' +        elsif @h['emphasis'] =~/italics?/            then 'italics' +        elsif @h['emphasis'] =~/under(?:line|score)/ then 'underscore' +        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 \ +        and @h['plaintext_wrap'].to_i < 201 +          @h['plaintext_wrap'].to_i +        else nil +        end +      end +      def omit +        m=@h['omit'] +        @m=m ? (m.split(/,\s+/)) : nil +        def list +          @m +        end +        self +      end +      def ocn? +        (omit.list.inspect =~/"ocn"/) \ +        ? :off +        : :na +      end +      def toc? +        (omit.list.inspect =~/"toc"/) \ +        ? :off +        : :na +      end +      def manifest? +        (omit.list.inspect =~/"manifest"/) \ +        ? :off +        : :na +      end +      def links_to_manifest? +        (omit.list.inspect =~/"manifest_links"|"links_to_manifest"/) \ +        ? :off +        : :na +      end +      def metadata? +        (omit.list.inspect =~/"metadata"/) \ +        ? :off +        : :na +      end +      def minitoc? +        (omit.list.inspect =~/"minitoc"/) \ +        ? :off +        : :na +      end +      def html_minitoc? +        (omit.list.inspect =~/"html_minitoc"/) \ +        ? :off +        : :na +      end +      def html_top_band? +        (omit.list.inspect =~/"html_top_band"/) \ +        ? :off +        : :na +      end +      def html_navigation? +        (omit.list.inspect =~/"html_navigation"/) \ +        ? :off +        : :na +      end +      def html_navigation_bar? +        (omit.list.inspect =~/"html_navigation_bar"/) \ +        ? :off +        : :na +      end +      def segsubtoc? +        (omit.list.inspect =~/"segsubtoc"/) \ +        ? :off +        : :na +      end +      def search_form? +        (omit.list.inspect =~/"search_form"/) \ +        ? :off +        : :na +      end +      def html_search_form? +        (omit.list.inspect =~/"html_search_form"/) \ +        ? :off +        : :na +      end +      def html_right_pane? +        (omit.list.inspect =~/"html_right_column"|"html_right_pane"/) \ +        ? :off +        : :na +      end +      def manifest_minitoc? +        (omit.list.inspect =~/"manifest_minitoc"/) \ +        ? :off +        : :na +      end +      def cover_image? +        (omit.list.inspect =~/"cover_image"/) \ +        ? :off +        : :na +      end +      def home_button_image? +        (omit.list.inspect =~/"home_button_image"/) \ +        ? :off +        : :na +      end +      def texpdf_font +        def main +          @h['texpdf_font'] \ +          && (@h['texpdf_font']=~/\S{3,}/) \ +          ? @h['texpdf_font'] +          : @env.font.texpdf.main +        end +        def sans                                                             # not used +          @h['texpdf_font_sans'] \ +          && (@h['texpdf_font_sans']=~/\S{3,}/) \ +          ? @h['texpdf_font_sans'] +          : @env.font.texpdf.sans +        end +        def serif                                                            # not used +          @h['texpdf_font_serif'] \ +          && (@h['texpdf_font_serif']=~/\S{3,}/) \ +          ? @h['texpdf_font_serif'] +          : @env.font.texpdf.serif +        end +        def mono +          @h['texpdf_font_mono'] \ +          && (@h['texpdf_font_mono']=~/\S{3,}/) \ +          ? @h['texpdf_font_mono'] +          : @env.font.texpdf.mono +        end +        self +      end +      def promo +        @h['promo'] +      end +      def ad +        @h['ad'] +      end +      def manpage +        manpage={} +        if @h['manpage'] +          if @h['manpage'] =~/;/m +            man=@h['manpage'].split(/;/m) +            man.each do |x| +              m=(x=~/=/m) ? x.split(/=/m) : nil +              if m +                manpage[m[0].strip] = m[1].split(/ \. /) +              end +            end +          end +        end +        if manpage['name'] +          manpage['name']=manpage['name'].join("\n.br\n"). +            gsub(/(-)/m,"\\\\\\1"). +            gsub(/\A/,"\n.br\n.SH NAME\n.br\n") +        else +          manpage['name']='man page "name/whatis" information not provided, set in header @man: name=[whatis information]' +        end +        if manpage['synopsis'] +          manpage['synopsis']=manpage['synopsis'].join("\n\n.br\n"). +            gsub(/(-)/m,"\\\\\\1"). +            gsub(/\A/,"\n.br\n.SH SYNOPSIS\n.br\n") +        else +          manpage['synopsis']='' +        end +        unless manpage['section'] +          manpage['section']=1 +        end +        manpage +      end +      def get_image_dimensions(img) +        imgk=SiSU_Env::SystemCall.new.imagemagick +        gmgk=SiSU_Env::SystemCall.new.graphicksmagick +        img_pth={ +          sst: @env.path.image_source_include, +          pod: File.expand_path("../../../sisupod/image" ) +        } +        path_img=if FileTest.file?("#{img_pth[:pod]}/#{img}") +          "#{img_pth[:pod]}/#{img}" +        elsif FileTest.file?("#{img_pth[:sst]}/#{img}") +          "#{img_pth[:sst]}/#{img}" +        else nil +        end +        if path_img +          if imgk or gmgk +            if imgk +              imgsys=`identify #{path_img}`.strip                           #system call +            elsif gmgk +              imgsys=`gm identify #{path_img}`.strip                        #system call +            end +            w,h=/(\d+)x(\d+)/m.match(imgsys)[1,2] +          else +            w,h='600','800' +          end +        else +          w,h=nil,nil +        end +        {w: w, h: h} +      end +      def home_button_text +        s=if @h['home_button_text'] +          @h['home_button_text'].split(/\s*;\s*/) +        else nil +        end +        #l,n=Db[:home_button],'make.home_button_text' +        #validate_length(s,l,n) +      end +      def home_button_image +        s=nil +        s=if @h['home_button_image'] +          s=@h['home_button_image'].split(/\s*;\s*/) +          s0=s[0] #if +          image={} +          s=if s0 =~/{(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?\s*}(?:(http:\/\/\S+)|image)/ +            image[:home_button]=$1 +            if $2 +              image[:dimensions]=$2 +              image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimensions])[1,2] +            else +              d=get_image_dimensions(image[:home_button]) +              image[:w],image[:h]=d[:w],d[:h] +              image[:dimensions]="#{d[:w]}x#{d[:h]}" +            end +            image[:link]=$3 +            image +          end +        else nil +        end +      end +      def cover_image +        s=nil +        if @h['cover_image'] +          s=@h['cover_image'].split(/\s*;\s*/) +          s=s[0] #if +          image={} +          if s =~/{(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?\s+(?:"(.+?)")?\s*}image/ +            image[:cover]=$1 +            if $2 +              image[:dimensions]=$2 +              image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimensions])[1,2] +            else +              d=get_image_dimensions(image[:cover]) +              image[:w],image[:h]=d[:w],d[:h] +              image[:dimensions]="#{d[:w]}x#{d[:h]}" +            end +            image[:note]=$3 +          elsif s =~/(\S+\.(?:jpg|png|gif))/ +            image[:cover]=$1 +            d=get_image_dimensions(image[:cover]) +            image[:w],image[:h]=d[:w],d[:h] +            image[:dimensions]="#{d[:w]}x#{d[:h]}" +            image[:note]=nil +          end +          image +        else nil +        end +      end +      def footer +        s=if @h['footer'] +          @h['footer'].split(/\s*;\s*/) +        else nil +        end +      end +      self +    end +    def make_links +      @doc_links=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) +      def links +        lnks,a_idx=[],0 +        @doc_links.each do |doc_link| +          if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ +            say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] +            lnks[a_idx]={ say: say, url: url  } +            a_idx +=1 +          end +        end +        lnks +      end +      def append? +        (@doc_links[0]=='+') \ +          ? :yes +          : :no +      end +      self +    end +  end +  class MakeHead +    attr_accessor :pagenew,:pagebreak,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:num_top,:i18n,:man_section,:substitution_match_list,:bold_match_list,:italics_match_list,:emphasis_set_to,:footer_links,:home_button_links,:home_button_image,:cover_image +    def initialize(make) +      @make=make +    end +    def clear +      @pagenew=@pagebreak=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@num_top=@i18n=@man_section=@footer_links=@substitution_match_list=@bold_match_list=@italics_match_list=@emphasis_set_to=@home_button_links=@home_button_image=@cover_image=nil +    end +    def make_instruct +      clear +      if defined? @make.breaks \ +      and @make.breaks[:page_new]                  #clearpage +        @pagenew=@make.breaks[:page_new] +      end +      if defined? @make.breaks \ +      and @make.breaks[:page_break]                #newpage +        @pagebreak=@make.breaks[:page_break] +      end +      if defined? @make.headings \ +      and @make.headings +        @toc=@make.headings[0] +        @lv1=@make.headings[1] +        @lv2=@make.headings[2] +        @lv3=@make.headings[3] +        @lv4=@make.headings[4] +        @lv5=@make.headings[5] +        @lv6=@make.headings[6] +      end +      if defined? @make.num_top \ +      and @make.num_top +        @num_top=@make.num_top # remove @num_top +      end +      if defined? @make.language \ +      and @make.language[0] +        @i18n=@make.language +      end +      if defined? @make.manpage \ +      and @make.manpage +        @man_section=(defined? @make.manpage.section) \ +        ? @make.manpage.section +        : 1 +      end +      if defined? @make.substitute \ +      and @make.substitute +        @substitution_match_list=@make.substitute +      end +      if defined? @make.bold \ +      and @make.bold +        @bold_match_list=@make.bold +      end +      if defined? @make.italics \ +      and @make.italics +        @italics_match_list=@make.italics +      end +      if defined? @make.emphasis \ +      and @make.emphasis +        @emphasis_set_to=@make.emphasis +      end +      if defined? @make.footer \ +      and @make.footer.is_a?(Array) +        @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } } #already set +        @footer_links[:left]=if @make.footer[0]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ +          say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[0])[1,2] +          { say: say, url: url } +        else +          { say: '', url: '' } +        end +        @footer_links[:center]=if @make.footer[1]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ +          say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[1])[1,2] +          { say: say, url: url } +        else +          { say: '', url: '' } +        end +        @footer_links +      else #already set +        @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } } +      end +      if defined? @make.home_button_text \ +      and @make.home_button_text.is_a?(Array) +        a_idx=0 +        @home_button_links=[] +        @make.home_button_text.each do |doc_link| +          if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ +            say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] +            @home_button_links[a_idx]= { say: say, url: url } +            a_idx +=1 +          end +        end +        @home_button_links +      end +      if defined? @make.home_button_image \ +      and @make.home_button_image.is_a?(Hash) +        @home_button_image=@make.home_button_image +      end +      if defined? @make.cover_image \ +      and @make.cover_image.is_a?(Hash) +        @cover_image=@make.cover_image +      end +      { pagenew: @pagenew, +        pagebreak: @pagebreak, +        toc: @toc, +        lv1: @lv1, +        lv2: @lv2, +        lv3: @lv3, +        lv4: @lv4, +        lv5: @lv5, +        lv6: @lv6, +        num_top: @num_top, +        i18n: @i18n, +        emphasis_set_to: @emphasis_set_to, +        bold_match_list: @bold_match_list, +        italics_match_list: @italics_match_list, +        substitution_match_list: @substitution_match_list, +        man_section: @man_section, +        footer_links: @footer_links, +        home_button_links: @home_button_links, +        home_button_image: @home_button_image, +        cover_image: @cover_image, +      } +    end +  end +end +__END__ diff --git a/lib/sisu/v4/sysenv.rb b/lib/sisu/v4/sysenv.rb index d43bba91..22a520f6 100644 --- a/lib/sisu/v4/sysenv.rb +++ b/lib/sisu/v4/sysenv.rb @@ -266,7 +266,7 @@ module SiSU_Env    end    class GetInit < InfoSystemGen      @@noyaml=false -    @@rc,@@sisurc_path,@@tx=nil,nil,nil +    @@rc,@@sisu_doc_makefile,@@sisurc_path,@@tx=nil,nil,nil,nil      @@ad={ promo: nil, promo_list: nil, flag_promo: false }      @@sdmd=nil      attr_accessor :yaml @@ -282,20 +282,39 @@ module SiSU_Env      def tex        @@tx ||=SiSU_Viz::TeX.new      end +    def rc_path_options +      @rc_path=[ +        "#{$sisu_document_markup_directory}/.sisu/#{SiSU_version_dir}", +        "#{$sisu_document_markup_directory}/.sisu", +        "#{$sisu_document_markup_directory}/_sisu/#{SiSU_version_dir}", +        "#{$sisu_document_markup_directory}/_sisu", +        "#{@@home}/.sisu/#{SiSU_version_dir}", +        "#{@@home}/.sisu", +        "#{@@sisu_etc}/#{SiSU_version_dir}", +        "#{@@sisu_etc}", +      ] +    end +    def sisu_document_make +      def makefile +        #if @markup_dir_changed_ +          rc_path_options.each do |v| +            f='sisu_document_make' +            if FileTest.exist?("#{v}/#{f}") +              @@sisu_make_path=v +              sisu_doc_makefile=IO.read("#{@@sisu_make_path}/#{f}", mode: 'r:utf-8') +              @@sisu_doc_makefile=sisu_doc_makefile.split(/\s*\n\s*\n/m) +              break +            end +          end +        #end +        @@sisu_doc_makefile +      end +      self +    end      def sisu_yaml        def rc          if @markup_dir_changed_ -          @rc_path=[ -            "#{$sisu_document_markup_directory}/.sisu/#{SiSU_version_dir}", -            "#{$sisu_document_markup_directory}/.sisu", -            "#{$sisu_document_markup_directory}/_sisu/#{SiSU_version_dir}", -            "#{$sisu_document_markup_directory}/_sisu", -            "#{@@home}/.sisu/#{SiSU_version_dir}", -            "#{@@home}/.sisu", -            "#{@@sisu_etc}/#{SiSU_version_dir}", -            "#{@@sisu_etc}", -          ] -          @rc_path.each do |v| +          rc_path_options.each do |v|              if @@noyaml \              or FileTest.exist?("#{v}/noyaml")                STDERR.puts "WARNING - YAML loading switched off, to enable delete the file:\n\t#{v}/noyaml\n\n" unless @@noyaml | 
