diff options
author | Ralph Amissah <ralph@amissah.com> | 2012-12-12 15:07:22 -0500 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2012-12-12 15:07:22 -0500 |
commit | db23b42728ad667d328af2cd3759cc47091eade3 (patch) | |
tree | 804f5f7042b603315ed917f2428845547f8836c3 /lib/sisu/v4/options.rb | |
parent | debian/changelog (3.3.3-1) (diff) | |
parent | v4: 4.0.0 version & changelog, dates touched (diff) |
Merge tag 'sisu_4.0.0' into debian/sid
Diffstat (limited to 'lib/sisu/v4/options.rb')
-rw-r--r-- | lib/sisu/v4/options.rb | 966 |
1 files changed, 966 insertions, 0 deletions
diff --git a/lib/sisu/v4/options.rb b/lib/sisu/v4/options.rb new file mode 100644 index 00000000..b26bada2 --- /dev/null +++ b/lib/sisu/v4/options.rb @@ -0,0 +1,966 @@ +# 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 License 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: SiSU information Structuring Universe, command line options + parsing + +=end +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 initialize(make_instruct_array) + @make_instruct_array=make_instruct_array + end + 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 + 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,:make_instructions,:make_instructions_pod + @@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='','','','','','','','','','','','','','' + @f_pths,@files,@files_mod,@paths,@mod,@act=Array.new(5){[]} + @env=SiSU_Env::InfoEnv.new + @lng_base=@env.language_default_set + @dir_structure_by=SiSU_Env::EnvCall.new.output_dir_structure.by? + @@sisu_call_origin_path ||=Dir.pwd + @base_path=@@sisu_call_origin_path + r=Px[:lng_lst_rgx] + u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ + @base_stub=@base_path.gsub(u,'\1') + @a=sisu_glob_rules(a) + @a.freeze + make_instruct_array=SiSU_Env::GetInit.new.sisu_document_make.makefile_read + @make_instructions=HeaderCommon.new(make_instruct_array).sisu_document_make_instructions + @make_instructions_pod=nil + init + end + def find_all(find_flag,opt) + if find_flag + pwd_set=Dir.pwd + x=Dir.glob('*.ss[tm]') + Px[:lng_lst].each do |d| + if FileTest.directory?(d) + x << Dir.glob("#{d}/*.ss[tm]") + end + end + x=x.flatten + opt + x + end + end + def find_select(find_flag,opt) + if find_flag + pwd_set=Dir.pwd + x=[] + if opt.inspect =~/"[a-zA-Z][a-zA-Z0-9._-]+?"/ + opt.each do |g| + x <<=if g =~/.ss[tm]/ + Dir.glob("*#{g}") + else + Dir.glob("*#{g}*.ss[tm]") + end + Px[:lng_lst].each do |d| + if FileTest.directory?(d) + x <<=if g =~/.ss[tm]/ + Dir.glob("#{d}/*#{g}") + else + Dir.glob("#{d}/*#{g}*.ss[tm]") + end + end + end + end + end + x.flatten + end + end + def sisu_glob_rules(a) + a=if a.inspect =~/"-[A-Za-z0-9]*[fG]/ \ + or a.inspect =~/"--find"|"--glob"/ + b,f=[],[] + find_flag=false + a.each do |y| + if y =~ /^-/ + if y =~/^-/ \ + && y =~/[fG]|--find|--glob/ + find_flag=true + end + b << y + end + if find_flag \ + && y !~ /^-/ \ + && y =~ /\S+/ + if y !~/\// + f << y + else + find_flag=false + puts %{sub-directories "#{y}" cannot be provided for --find or --glob at this time} + end + end + end + r=Px[:lng_lst_rgx].gsub(/\|#{@lng_base}\|/,'|') + @lang_regx=%r{(?:#{r})} + z=if find_flag + (f.length > 0) \ + ? (b + find_select(find_flag,f)) + : find_all(find_flag,b) + elsif a.inspect =~/"(?:-\S+?|--\S+?)"/ \ + && a.inspect =~/"#{@lang_regx}\/?"/ \ + && a.inspect =~/"#{@lng_base}\/\S+?\.ss[tm]"/ + init_selected_lang_dirs(a) + else b + end + else a + end + end + def init_selected_lang_dirs(a) + @z=[] + a.each do |y| + if y =~/^#{@lng_base}\/(\S+?\.ss[tm])$/ + @fn=$1 + @z << y + elsif y =~/^#{@lang_regx}\/?$/ + @z << "#{y}/#{@fn}" + else @z << y + end + end + @z + end + def init + a=@a + if a.length > 0 + s=expand_numeric_shortcuts(a) + q=set_files_and_paths_and_general_extract(s) + @cmd,@mod=opt_cmd_and_mod_adjust(q[:cmd],q[:mod]) + @what=q[:what] unless q[:what].empty? + @paths = q[:paths] + @files = q[:files] + @f_pths = q[:f_pths] + @lngs = q[:lngs] + if @files.length > 0 \ + and @cmd.empty? \ + and @mod.length==0 #% if no other action called on filename given, default is sisu --v4 -0 [filename(s)] configured as flag default + shortcut=SiSU_Env::InfoProcessingFlag.new + @mod=['--v4'] + @cmd=shortcut.cf_0 + 'm' + end + if @cmd =~/[vVM]/ \ + && @cmd !~/-vu?$/ + SiSU_Screen::Ansi.new(@cmd,"\tsisu " + @cmd + ' ' + @mod.join(' ') + ' ' + @files.join(' ') + "\n").print_brown + end + end +# @files=@files.uniq + @@act ? @act=@@act : @@act=@act=opt_act + @files + self + end + def sisu_document_make_pod + def makefile_name + SiSU_Env::GetInit.new.sisu_document_make.makefile_name + end + def makefile(pod_make_path) + "#{pod_make_path}/#{makefile_name}" + end + def makefile_read(pod_make_path) + f=if FileTest.file?(makefile(pod_make_path)) + sisu_doc_makefile=IO.read(makefile(pod_make_path), mode: 'r:utf-8') + sisu_doc_makefile.split(/\s*\n\s*\n/m) + else nil + end + end + self + end + def set_files_and_paths_and_general_extract(s) + c,w='','' + m,f,pth,z,lng,lngs=[],[],[],[],[],[] + lng_is='' + a=s.split(/\s+/) + r_l=Px[:lng_lst].join('|') + a.uniq.each do |x| + if x =~/^-[a-z0-5]+/i \ + or x =~/^--\S+/ + if x =~/^-([a-z0-5]+)/i + c << $1 + end + if x =~/^--\S+/ + m << x + end + elsif x =~ /(?:\.(?:(?:-|ssm\.)?sst(?:\.xml)?|ssm|ssi|sx[sdn]\.xml|s[1-3]|kdi|ssp)|\S+?\.ss[mt]\.(?:txz|zip)|sisupod\.(?:txz|zip))$/ + if x =~/\S+?\.ss[mt]\.(?:txz|zip)|sisupod\.(?:txz|zip)/ + if x =~/^(?:https?|file):\/\/\S+/ #\ + end + pwd=Dir.pwd + fn_pod=x.gsub(/([^\/]+)\.txz$/,'\1') + fullname=@env.processing_path.processing + '/sisupod/' + fn_pod + pt=Pathname.new(fullname) + FileUtils::mkdir_p(pt.to_s) + pod_make_path=fullname + '/sisupod/doc/_sisu' + pod_make_path_file=pod_make_path + make_instruct_array=sisu_document_make_pod.makefile_read(pod_make_path) + @make_instructions_pod=HeaderCommon.new(make_instruct_array).sisu_document_make_instructions + Dir.chdir(pt.realpath) + options=s.gsub(/(\s+--?\S+)+.+/,'\1') + system(" + chdir #{fullname} + tar xaf #{pwd}/#{x} + chdir #{pwd} + ") + Dir.chdir(pt.realpath.to_s + '/sisupod/doc') + r=Px[:lng_lst_rgx] + Dir.entries("#{fullname}/sisupod/doc").each do |d_lng| + if d_lng =~/^(?:#{r})$/ + Dir.chdir(pt.realpath.to_s + "/sisupod/doc/#{d_lng}") + filenames=Dir.glob("*.ss[mt]") + filenames.each do |fn| + f_pths << { + pth: "#{fullname}/sisupod/doc/#{d_lng}", + f: "#{fn}", + pth_stub: 'doc', + lng: d_lng, + lng_is: d_lng, + url_base: '', + url: '' + } + Dir.chdir(pwd) + f << fn + end + end + end + elsif x =~/^(?:https?|file):\/\/\S+/ \ + and x =~/\S+?\.ss[mt]$/ + r_url=/(http:\/\/\S+?\/\S+?\/src(?:\/(?:#{r_l}))?)\// + url_base = (x[r_url,1]) + url = x + y=x.gsub(/http:\/\/\S+?\/\S+?\/src\//,'') + t=/(#{r_l})\/[^\/]+?\.ss[tm]$/ + l_p = (y[t,1]) \ + ? y[t,1] + : nil + lng << l_p + lngs << if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + r_f=/(?:#{r_l})\/([^\/]+?\.ss[tm])$/ + fn = (y[r_f,1]) \ + ? y[r_f,1] + : y + fn=fn.gsub(/\.((?:ssm\.)?sst)/,'.-\1') + fullname=Dir.pwd + '/' + fn + pt=Pathname.new(fullname) + pth << Dir.pwd + r_u=/.+?\/([^\/]+)(?:\/(?:#{r_l})$|$)/ + lng_is =if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + f_pths << { + pth: pt.split[0].realpath.to_s, + f: pt.split[1].to_s, + pth_stub: pt.split[0].realpath.to_s[r_u,1], + lng: (pt.split[0].realpath.to_s[t,1]) \ + ? pt.split[0].realpath.to_s[t,1] + : nil, + lng_is: lng_is, + url_base: url_base, + url: url + } + f << fn + elsif FileTest.file?(x) + pt=Pathname.new(x) + pth << pt.split[0].realpath.to_s #remove? + f << pt.split[1].to_s #remove? + r_u=/.+?\/([^\/]+)(?:\/(?:#{r_l})$|$)/ + t=/.+\/(#{r_l})$/ + l_p = (pt.split[0].realpath.to_s[t,1]) \ + ? pt.split[0].realpath.to_s[t,1] + : nil + lngs << lng_is = if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + f_pths << { + pth: pt.split[0].realpath.to_s, + f: pt.split[1].to_s, + pth_stub: pt.split[0].realpath.to_s[r_u,1], + lng: lng_is, + lng_is: lng_is, + url_base: nil, + url: nil + } + else puts "file not found: #{x}" + end + elsif x =~ /\.termsheet\.rb$/ + (FileTest.file?(x)) \ + ? (f << x) + : (puts "file not found: #{x}") + else w=x + puts "#{x} in #{a.join(' ')}?" + end + end + { cmd: c, mod: m, what: w, paths: pth, files: f, f_pths: f_pths, lng: lng_is, lngs: lngs } + end + def expand_numeric_shortcuts(a) + shortcut=SiSU_Env::InfoProcessingFlag.new + s='' + a.each do |x| + y=case x + when /0/ + (x=~/^-1\S+/) \ + ? x.gsub(/^-0(\S+)/,shortcut.cf_0 + ' -\1') + : x.gsub(/^-0/,shortcut.cf_0 + ' ') + when /1/ + (x=~/^-1\S+/) \ + ? x.gsub(/^-1(\S+)/,shortcut.cf_1 + ' -\1') + : x.gsub(/^-1/,shortcut.cf_1 + ' ') + when /2/ + (x=~/^-2\S+/) \ + ? x.gsub(/^-2(\S+)/,shortcut.cf_2 + ' -\1') + : x.gsub(/^-2/,shortcut.cf_2 + ' ') + when /3/ + (x=~/^-3\S+/) \ + ? x.gsub(/^-3(\S+)/,shortcut.cf_3 + ' -\1') + : x.gsub(/^-3/,shortcut.cf_3 + ' ') + when /4/ + (x=~/^-4\S+/) \ + ? x.gsub(/^-4(\S+)/,shortcut.cf_4 + ' -\1') + : x.gsub(/^-4/,shortcut.cf_4 + ' ') + when /5/ + (x=~/^-5\S+/) \ + ? x.gsub(/^-5(\S+)/,shortcut.cf_5 + ' -\1') + : x.gsub(/^-5/,shortcut.cf_5 + ' ') + when /6/ + (x=~/^-6\S+/) \ + ? x.gsub(/^-6(\S+)/,shortcut.cf_5 + ' -\1') + : x.gsub(/^-6/,shortcut.cf_5 + ' ') + else x + end + s << " #{y}" unless y.empty? + end + s.strip! + end + def opt_cmd_and_mod_adjust(c,m) + cmd,mod,files=@cmd,@mod,@files + unless m.empty? + m.each do |m| + case m + when /^--(?:color-toggle)$/; c=c+'c' + when /^--(?:configure|init-site)$/; c=c+'CC' + when /^--(?:dal?|machine|abstraction|abs)$/; c=c+'m' + when /^--(?:txt|text|plaintext)$/; c=c+'t' + when /^--(?:html)$/; c=c+'h' + when /^--(?:epub)$/; c=c+'e' + when /^--(?:od[ft])$/; c=c+'o' + when /^--(?:pdf)$/; c=c+'p' + when /^--(?:concordance|wordmap)$/; c=c+'w' + when /^--(?:manpage|man)$/; c=c+'i' + when /^--(?:texinfo)$/; c=c+'I' + when /^--(?:xhtml)$/; c=c+'b' + when /^--(?:xml-sax)$/; c=c+'x' + when /^--(?:xml-dom)$/; c=c+'X' + when /^--(?:images)$/; c=c+'j' + when /^--(?:hash-digests)$/; c=c+'N' + when /^--(?:po4a|pot?)$/; c=c+'P' + when /^--(?:termsheet)$/; c=c+'T' + when /^--(?:manifest)$/; c=c+'y' + when /^--(?:qrcode)$/; c=c+'Q' + when /^--(?:sqlite)$/; c=c+'d' + when /^--(?:pg|pg?sql|postgresql)$/; c=c+'D' + when /^--(?:remote|rsync)$/; c=c+'R' + when /^--(?:scp)$/; c=c+'r' + when /^--(?:source)$/; c=c+'s' + when /^--(?:sisupod|pod)$/; c=c+'S' + when /^--(?:git)$/; c=c+'g' + when /^--(?:urls)$/; c=c+'U' + when /^--(?:zap|delete)$/; c=c+'Z' + when /^--(?:sample-search-form)$/; c=c+'F' + when /^--(?:webserv|webrick)$/; c=c+'W' + when /^--(?:profile)$/; c=c+'E' + when /^--(?:maintenance|keep-processing-files)$/; c=c+'M' + when /^--(?:verbose[=-]3)$/; c=c+'VM' + when /^--(?:verbose[=-]2|Verbose|VERBOSE)$/; c=c+'V' + when /^--(?:verbose(?:[=-]1)?)$/; c=c+'v' + when /^--(?:verbose[=-]0|quiet|silent)$/; c=c+'q' + else mod << m #mod only contains command modifiers; commands converted to character + end + end + end + ca=[] + unless c.empty? + c=c.gsub(/-/,'') + c.scan(/CC|\S/) {|x| ca << x} + cmd= '-' + ca.uniq.join + end + extra='' + if cmd !~/[mn]/ + extra+=if cmd =~/[abegHhIiNOoPpQTtwXxyz]/ \ + and cmd !~/[mn]/ + 'm' #% add dal + elsif ((cmd =~/[Dd]/ \ + or (mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/)) \ + and mod.inspect !~/(?:remove|(?:(?:re)?create(?:all)?|dropall|drop)$)/) \ + and cmd !~/[mn]/ + 'm' #% add dal + else '' + end + end + if cmd !~/j/ + extra+=if cmd =~/[bHhwXxyz]/ \ + and cmd !~/[j]/ + 'j' #% copy images + else '' + end + end + if cmd !~/y/ + extra+=if cmd =~/[abeHhIiNopQsSstwXxz]/ \ + and cmd !~/y/ + 'ym' #% add manifest + elsif (cmd =~/[Dd]/ \ + or mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/) \ + and files[0] !~/^remove$/ \ + and cmd !~/y/ + 'ym' #% add manifest + else '' + end + end + if cmd !~/u/ #% add urls + extra+='u' + end + cmd=cmd + extra + cmds=cmd.scan(/CC|\S/) + [cmds.uniq.join,mod] + end + def opt_act #note mod line commands have already been converted to command characters, cmd + cmd,mod=@cmd,@mod + @@act=if @@act + @act=@@act + else + act={} + act[:license]=(cmd =~/L/ \ + || mod.inspect =~/"--license/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:site_init]=(cmd =~/C/ \ + || mod.inspect =~/"--init-site"|"--configure"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:rc]=if mod.inspect =~/"--rc=/ + x=Dir.pwd + '/' + mod.join.gsub(/--rc=/,'') + { bool: true, set: :on, inst: x } + else + { bool: false, set: :na, inst: '' } + end + act[:processing_path]=if mod.inspect =~/"--processing-path=/ + base_pth=mod.join(';').gsub(/^.*--processing-path=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--processing-path/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:dump]=if mod.inspect =~/"--dump=/ + base_pth=mod.join(';').gsub(/^.*--dump=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--dump/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:redirect]=if mod.inspect =~/"--redirect=/ + base_pth=mod.join(';').gsub(/^.*--redirect=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--redirect/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:verbose]=(cmd =~/v/ \ + || mod.inspect =~/"--verbose"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:version_info]=(cmd =~/[vVM]/ \ + || mod.inspect =~/"--verbose"|"--maintenance"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:quiet]=(cmd =~/q/ \ + || mod.inspect =~/"--quiet"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:color_state]=if mod.inspect =~/"--color-on"|"--color"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--color-off"/ + { bool: false, set: :off } + else { bool: true, set: :na } #fix default color + end +# act[:color_toggle]=if cmd =~/c/ \ +# or mod.inspect =~/"--color-toggle"/ +# true +# else false +# end + act[:maintenance]=(cmd =~/M/ \ + || mod.inspect =~/"--maintenance|--keep-processing-files"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:profile]=(cmd =~/E/ \ + || mod.inspect =~/"--profile"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:switch]=if mod.inspect =~/"--switch-off=/ + off_list=mod.join(';').gsub(/^.*--switch-off=['"]?(.+?)(?:['"];.+)?$/,'\1') + off_list=off_list.scan(/[^,;\s]+/) + { bool: false, set: :off, off: off_list} + else { bool: true, set: :na, off: [] } + end + act[:output_by]=if mod.inspect =~/"--(?:output-)?by-language"/ + { set: :language } + elsif mod.inspect =~/"--(?:output-)?by-filename"/ + { set: :filename } + elsif mod.inspect =~/"--(?:output-)?by-filetype"/ + { set: :filetype } + else { set: :na } + end + act[:ocn]=if mod.inspect =~/"--inc-ocn"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-ocn"/ \ + || act[:switch][:off].inspect =~/"ocn"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:toc]=if mod.inspect =~/"--inc-toc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-toc"/ \ + || act[:switch][:off].inspect =~/"toc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:minitoc]=if mod.inspect =~/"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"minitoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:manifest]=if mod.inspect =~/"--inc-manifest"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-manifest"/ \ + || act[:switch][:off].inspect =~/"manifest"/ + { bool: false, set: :off } + elsif act[:manifest]=(cmd =~/y/ \ + || mod.inspect =~/"--manifest"/) + { bool: true, set: :on } + else { bool: true, set: :na } + end + act[:links_to_manifest]=if mod.inspect =~/"--inc-links-to-manifest"|"--inc-manifest-links"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-links-to-manifest"|"--(?:exc|no)-manifest-links"/ \ + || act[:switch][:off].inspect =~/"links_to_manifest"|"manifest_links"|"--(?:exc|no)-manifest"/ \ + || mod.inspect =~/"--(?:redirect|dump)/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:manifest_minitoc]=if mod.inspect =~/"--inc-manifest-minitoc"|"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-manifest-minitoc"|"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"manifest_minitoc"|"minitoc"/ + #|| mod.inspect =~/"--(?:redirect|dump)/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:metadata]=if mod.inspect =~/"--inc-metadata"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-metadata"/ \ + || act[:switch][:off].inspect =~/"metadata"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_minitoc]=if mod.inspect =~/"--inc-html-minitoc"|"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-minitoc"|"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"html_minitoc"|"minitoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_navigation]=if mod.inspect =~/"--inc-html-navigation"|"--inc-navigation"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-navigation"|"--(?:exc|no)-navigation"/ \ + || act[:switch][:off].inspect =~/"html_navigation"|"nav"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_navigation_bar]=if mod.inspect =~/"--inc-html-navigation-bar"|"--inc-navigation-bar"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-navigation-bar"|"--(?:exc|no)-navigation-bar"/ \ + || act[:switch][:off].inspect =~/"html_navigation_bar"|"navbar"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:segsubtoc]=if mod.inspect =~/"--inc-segsubtoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-segsubtoc"/ \ + || act[:switch][:off].inspect =~/"segsubtoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:search_form]=if mod.inspect =~/"--inc-search-form"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-search-form"/ \ + || act[:switch][:off].inspect =~/"search_form"|"search"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_search_form]=if mod.inspect =~/"--inc-html-search-form"|"--inc-search-form"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-search-form"|"--(?:exc|no)-search-form"/ \ + || act[:switch][:off].inspect =~/"html_search_form"|"search_form"|"search"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_right_pane]=if mod.inspect =~/"--inc-html-right-pane"|"--inc-right-pane"|"--inc-html-right-column"|"--inc-right-column"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-right-pane"|"--(?:exc|no)-right-pane"|"--(?:exc|no)-html-right-column"|"--(?:exc|no)-right-column"/ \ + || act[:switch][:off].inspect =~/"html_right_pane"|"html_right_column"|"promo"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_top_band]=if mod.inspect =~/"--inc-html-top-band"|"--inc-top-band"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-top-band"|"--(?:exc|no)-top-band"/ \ + || act[:switch][:off].inspect =~/"html-top-band"|"top-band"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:dal]=(cmd =~/m/ \ + || mod.inspect =~/"--dal"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:html]=(cmd =~/h/ \ + || mod.inspect =~/"--html"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:concordance]=(cmd =~/w/ \ + || mod.inspect =~/"--concordance"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:images]=(cmd =~/j/ \ + || mod.inspect =~/"--images"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:pdf]=(cmd =~/p/ \ + || mod.inspect =~/"--pdf"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:epub]=(cmd =~/e/ \ + || mod.inspect =~/"--epub"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:odt]=(cmd =~/o/ \ + || mod.inspect =~/"--odt"|"--odf"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xml_sax]=(cmd =~/x/ \ + || mod.inspect =~/"--xml-sax"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xml_dom]=(cmd =~/X/ \ + || mod.inspect =~/"--xml-dom"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xhtml]=(cmd =~/b/ \ + || mod.inspect =~/"--xhtml"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:txt]=(cmd =~/[at]/ \ + || mod.inspect =~/"--txt"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:manpage]=(cmd =~/i/ \ + || mod.inspect =~/"--manpage"|"--man"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:texinfo]=(cmd =~/I/ \ + || mod.inspect =~/"--texinfo"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:fictionbook]=(cmd =~/f/ \ + || mod.inspect =~/"--fictionbook"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:psql]=(cmd =~/D/ \ + || mod.inspect =~/"--pg"|"--pgsql"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sqlite]=(cmd =~/d/ \ + || mod.inspect =~/"--sqlite"/) \ + && (mod.inspect =~/"--createdb"|"--create(?:all)?"|"--dropall"|"--recreate(?:all)?"|"--import"|"--update"|"--remove"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sqlite_discreet]=(cmd =~/d/ \ + || mod.inspect =~/"--sql"|"--sqlite"/) \ + && (mod.inspect =~/"--both"/ \ + || mod.inspect !~/"--createdb"|"--create(?:all)?"|"--dropall"|"--recreate(?:all)?"|"--import"|"--update"|"--remove"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:harvest]=(mod.inspect =~/"--harvest"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:po4a]=(cmd =~/P/ \ + || mod.inspect =~/"--po4a"|"--pot?"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:git]=(cmd =~/g/ \ + || mod.inspect =~/"--git"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:zap]=(cmd =~/Z/ \ + || mod.inspect =~/"--zap"|"--delete"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:hash_digests]=(cmd =~/N/ \ + || mod.inspect =~/"--hash-digests"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sample_search_form]=(cmd =~/F/ \ + || mod.inspect =~/"--sample-search-form"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:webrick]=(cmd =~/W/ \ + || mod.inspect =~/"--webrick"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:share_source]=(cmd =~/s/ \ + || mod.inspect =~/"--source"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sisupod]=(cmd =~/S/ \ + || mod.inspect =~/"--sisupod"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:scp]=(cmd =~/r/ \ + || mod.inspect =~/"--scp"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:rsync]=(cmd =~/R/ \ + || mod.inspect =~/"--rsync"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:delete_output]=(cmd =~/z/ \ + || mod.inspect =~/"--delete"|"--zap"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:urls_all]=(cmd =~/U/ \ + || mod.inspect =~/"--urls-all"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:urls_selected]=(cmd =~/u/ \ + || mod.inspect =~/"--urls"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sitemap]=(cmd =~/Y/ \ + || mod.inspect =~/"--sitemap"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:qrcode]=(cmd =~/Q/ \ + || mod.inspect =~/"--qrcode"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:help]=(mod.inspect =~/"--help/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + @act=act + end + end + def cmd + @cmd + end + def mod + @mod + end + def act + @@act + end + def files_mod + files_mod=files + @files_mod=files_mod + @files_mod + end + def f_pth + @f_pth + end + def pth + @pth + end + def sub_location + pth.gsub(/#{base_path}/,'') + end + def lng + @lng + end + def lng_base + @lng_base + end + def fno + @fno=if @fno \ + and not @fno.empty? + @fno + else + fns[/(.+?(?:sst|ssm))(?:\.sst)?/,1] + end + end + def fng + @fng=if @fng \ + and not @fng.empty? + @fng + else + fno.gsub(/(?:~(?:#{Px[:lng_lst_rgx]}))?(\.ss[tm])$/,'\1') + end + end + def fns + @fns + end + def what + @what + end + def fnb + unless fns.empty? + fns[/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/,1] + end + end + def fnc + @fnc=if @fns =~/\.(?:ssm\.sst|ssm)$/ + fnb + '.ssm.sst' + else @fns + end + end + def fncb + @fncb=if @fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/ + fnb + '.ssm.sst' + else @fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') + end + end + 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 as @md.opt passing @opt +as well is duplication check for fns & fnb |