=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 Ralph Amissah All Rights Reserved. * License: GPL 3 or later: SiSU, a framework for document structuring, publishing and search Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 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 . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Ralph Amissah ** Description: system environment, resource control and configuration details =end @@cX=nil @@current_document=Dir.pwd #nil #'' module SiSU_Env require 'fileutils' require 'singleton' include FileUtils::Verbose @@noyaml=false class Info_date require 'date' attr_accessor :dt,:t def initialize @dt,@t=Date.today.to_s,Time.now end def week w=@t.strftime('%W') "#{@t.year}w#{w}" end def month "#{@t.year}#{@t.month}" end def year @t.year end def weekonly #@t.cweek @t.strftime('%W') end def monthonly @t.month end def year_static '2007' end end class Info_system require 'rbconfig' include Singleton @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@rc,@@ad=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD'],Config::CONFIG['sysconfdir'] + '/sisu',Config::CONFIG['host'],Config::CONFIG['arch'],%x{ruby -v}.strip,Config::CONFIG['archdir'],Config::CONFIG['sitearchdir'],Config::CONFIG['bindir'],%x{locale charmap}.strip,nil,{} # %x{ruby -v}.strip # Config::CONFIG['rb_ver'] out=Config::CONFIG['localstatedir'] etc=Config::CONFIG['sysconfdir'] + '/sisu' share=Config::CONFIG['datadir'] + '/sisu' data=Config::CONFIG['datadir'] + '/doc/sisu' m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m @stub_pwd ||=@@pwd[m,1] prcss_dir='_sisu_processing' prcss_dir_tmp_root="/tmp/#{prcss_dir}" prcss_dir_stub="#{prcss_dir}/#{@stub_pwd}" @processing_dir=if @@home \ and File.writable?("#{@@home}/.") "#{@@home}/#{prcss_dir_stub}" #elsif File.writable?("#{@@pwd}/."); "#{@@pwd}/#{prcss_dir}" else prcss_dir_stub end tmp_processing_base=if @@user; "#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" else "#{prcss_dir_stub}" end tmp_processing_base_user=if @@user; "#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" else "/tmp/#{prcss_dir_stub}" end tmp_processing=if @@user; "#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" else "/tmp/#{prcss_dir_stub}" end user=ENV['USER'] port_pgsql=if defined? ENV['PGPORT'] \ and not (ENV['PGPORT'].nil? \ or ENV['PGPORT'].empty?) \ and ENV['PGPORT']=~/^\d+$/ ENV['PGPORT'] else '5432' end IMAGES=:images SISU_ETC=:sisu_etc SISU_SHARE=:sisu_share SAMPLE_DATA_PATH=:sample_data_path IMAGE_STUB=:image_stub STYLESHEET_STUB=:stylesheet_stub IMAGE_LOCAL=:image_local WEBSERV_PATH=:webserv_path WEBSERV_MAN=:webserv_man WEBSERV_PHP=:webserv_php WEBSERV_CGI=:webserv_cgi WEBSERV_RSS=:webserv_rss WEBSERV_SQLITE=:webserv_sqlite OUTPUT_LOCAL=:output_local PROCESSING_PATH=:processing_path PROCESSING_DIR_TMP_ROOT=:processing_dir_tmp_root PROCESSING_PATH_TMP=:processing_path_tmp PROCESSING_PATH_TMP_BASE=:processing_path_tmp_base PROCESSING_DAL=:processing_dal PROCESSING_TUNE=:processing_tune PROCESSING_LATEX=:processing_latex PROCESSING_TEXINFO=:processing_texinfo PROCESSING_LOUT=:processing_lout PROCESSING_ENCODING=:processing_encoding PAPERSIZE=:papersize LANGUAGE=:language LANGUAGE_CODE=:language_code MULTILINGUAL=:multilingual CONCORD_MAX=:concord_max DIGEST=:digest WEBSERV_HOST_CGI=:webserv_host_cgi WEBSERV_PORT_CGI=:webserv_port_cgi POSTGRESQL_USER=:postgresql_user POSTGRESQL_PORT=:postgresql_port SQLITE_USER=:sqlite_user SQLITE_PATH=:sqlite_path SQLITE_PORT=:sqlite_port DEFAULT_DIR={ IMAGES => '_sisu/image', SISU_ETC => etc, SISU_SHARE => share, SAMPLE_DATA_PATH => data, IMAGE_STUB => '_sisu/image', STYLESHEET_STUB => '_sisu/css', IMAGE_LOCAL => @@pwd + '/_sisu/image', WEBSERV_PATH => out + '/www', #WEBSERV_DIR => www, # uncomment for urls... #WEBSERV_IMAGE => out + '/www/_sisu/image', WEBSERV_MAN => out + '/www/man', #alter WEBSERV_PHP => out + '/www/php', WEBSERV_CGI => '/usr/lib/cgi-bin', WEBSERV_RSS => out + '/www/feed', WEBSERV_SQLITE => out + '/www/sqlite', OUTPUT_LOCAL => @@home + '/sisu_www', PROCESSING_PATH => @processing_dir, PROCESSING_DIR_TMP_ROOT => prcss_dir_tmp_root, PROCESSING_PATH_TMP_BASE => tmp_processing_base, PROCESSING_PATH_TMP => tmp_processing, PROCESSING_DAL => 'dal', PROCESSING_TUNE => 'tune', PROCESSING_LATEX => 'tex', PROCESSING_TEXINFO => 'texinfo', PROCESSING_LOUT => 'lout', PROCESSING_ENCODING => 'encoding', #TEXINFO_STUB => 'texinfo', PAPERSIZE => 'A4', #A4, US_letter, book_b5, book_a5, US_legal LANGUAGE => 'English', LANGUAGE_CODE => 'en', #change, unecessary duplication though currently used MULTILINGUAL => true, CONCORD_MAX => 260000, DIGEST => 'md5', WEBSERV_HOST_CGI => 'http://localhost', WEBSERV_PORT_CGI => 8081, #8111,8123,8081 POSTGRESQL_USER => @@user, #'ralph', # change user !!! POSTGRESQL_PORT => port_pgsql, #POSGRESQL_LINKS_PATH => '', SQLITE_USER => @@user, SQLITE_PATH => @@user, #?? SQLITE_PORT => '**', } @@default_dir=DEFAULT_DIR m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m stub_pwd=@@pwd[m,1] @@rc_path=["#@@pwd/_sisu","#@@home/.sisu",@@sisu_etc] @@yamlrc_path=unless stub_pwd =~/^sisupod$/ ["#@@pwd/_sisu","#@@home/.sisu",@@sisu_etc] else #security policy: prevent reading of sisurc.yml in sisupod ["#@@home/.sisu",@@sisu_etc] end @@ad_path=unless stub_pwd =~/^sisupod$/ ["#@@pwd/_sisu/skin/yml","#@@home/.sisu/skin/yml","#{@@sisu_etc}/skin/yml"] else #security policy: prevent reading of sisurc.yml in sisupod ["#@@home/.sisu",@@sisu_etc] end attr_accessor :user,:home,:hostname,:pwd,:host,:arch,:rbver,:dir_arch,:dir_sitearch,:dir_bin,:locale,:webserv_path,:webserv_host_cgi,:webserv_port_cgi,:default_dir,:rc_path,:yamlrc_path,:ad_path def initialize @user,@home,@hostname,@pwd,@sisu_etc,@host,@arch,@rbver,@dir_arch,@dir_sitearch,@dir_bin,@locale,@default_dir,@rc_path,@yamlrc_path,@ad_path=@@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@default_dir,@@rc_path,@@yamlrc_path,@@ad_path #note rbver is duplicated in Info_version end end class Load def initialize(prog,mandatory=false) @prog,@mandatory=prog,mandatory end def prog load_prog=false $:.each do |reqpath| if FileTest.exist?("#{reqpath}/#@prog.rb") load_prog=true break end end if load_prog \ and @prog=~/dbi/ require 'dbi' #revisit end if load_prog; require @prog else tell=if @mandatory; SiSU_Screen::Ansi.new(@cmd,"module required: #@prog") else SiSU_Screen::Ansi.new(@cmd,"#@prog load requested") end tell.warn end load_prog end def prog? load_prog=false $:.each do |reqpath| if FileTest.exist?("#{reqpath}/#@prog.rb"); load_prog=true break end end load_prog end end class Get_init < Info_system include Singleton @@noyaml=false @@rc,@@vz,@@tx=nil,nil,nil @@ad={ :promo=>nil,:promo_list=>nil,:flag_promo=>false } attr_accessor :yaml def initialize super() end def skin @@vz ||=SiSU_Viz::Skin.new end def tex @@tx ||=SiSU_Viz::TeX.new end def yamlrc unless @@rc @yamlrc_path.each do |v| if @@noyaml \ or FileTest.exist?("#{v}/noyaml") puts "WARNING - YAML loading switched off, to enable delete the file:\n\t#{v}/noyaml\n\n" unless @@noyaml @@noyaml=true break else if FileTest.exist?("#{v}/sisurc.yml") unless @@rc require 'yaml' @@rc ||= YAML::load(File::open("#{v}/sisurc.yml")) end break end unless @@rc if FileTest.exist?("#{v}/sisurc.yaml") unless @@rc require 'yaml' @@rc ||= YAML::load(File::open("#{v}/sisurc.yaml")) end break end end end end end @@rc end def ads #WORK AREA tell_no_yaml='WARNING - YAML loading switched off, to enable delete the file:' @ad_path.each do |v| if @@noyaml \ or FileTest.exist?("#{v}/noyaml") puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml @@noyaml=true break else #tell=SiSU_Screen::Ansi.new('','promo off (file not found): list.yml') if FileTest.exist?("#{v}/list.yml") unless @@ad[:promo_list] require 'yaml' @@ad[:promo_list] ||= YAML::load(File::open("#{v}/list.yml")) end @@ad[:flag_promo]=true break end #tell.warn if @cmd=~/MV/ @@ad[:flag_promo]=false end end @ad_path.each do |v| if @@noyaml \ or FileTest.exist?("#{v}/noyaml") puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml @@noyaml=true break else #tell=SiSU_Screen::Ansi.new('','promo off (file not found): promo.yml') if FileTest.exist?("#{v}/promo.yml") unless @@ad[:promo] require 'yaml' @@ad[:promo] ||= YAML::load(File::open("#{v}/promo.yml")) end @@ad[:flag_promo]=true break end #tell.warn if @cmd=~/MV/ @@ad[:flag_promo]=false end end @@ad end end class Env_call @@rc,@@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=nil,nil,nil,nil,nil,nil,nil @@ad={} attr_accessor :rc,:fnn,:fnb,:fnt,:fnv,:fnz,:ad def initialize(fns='') super() @fns=fns @sys=Info_system.instance @rc=Get_init.instance.yamlrc @ad=Get_init.instance.ads if @fns \ and @fns != '' \ and @fns !=@@fns @@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=@fns,nil,nil,nil,nil,nil end if @fns \ and @fns != '' #watch if multilingual m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst|ssm)$/ @@fnn ||=@fns[m,1] @@fnb ||=@fns[m,2] @@fnt ||=@fns[m,3] @@flv ||=document_language_versions_found[:f] @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.zip' else @@fnb + '.sst.zip' end else m=/(.+?)\.((?:-|ssm\.)?sst|ssm)$/ @@fnb ||=@fns[m,1] @@fnm ||=@fns[m,1] @@fnt ||=@fns[m,2] @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.zip' else @@fnb + '.sst.zip' end end end @fnn,@fnb,@fnt,@flv,@fnz=@@fnn,@@fnb,@@fnt,@@flv,@@fnz end def multilingual if defined? @rc['default']['multilingual'] \ and @rc['default']['multilingual'] != nil @rc['default']['multilingual'] else true end end def document_language_versions_found @fn={} unless (@fns.nil? \ or @fns.empty?) if multilingual m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] else m=/(.+?)\.((?:-|ssm\.)?sst$)/ @fn[:b]=@fn[:m]=@fns[m,1] @fn[:t]=@fns[m,2] end end lang=SiSU_Env::Standardise_language.new langs=lang.codes x=[] if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" end x << @fns langs.each do |l| lng=SiSU_Env::Standardise_language.new(l) if FileTest.file?("#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") x << "#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" elsif FileTest.file?("#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") x << "#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" end end @fn[:f]=x.uniq! @fn end def published_manifests?(output_base) ob=output_base @fn={} @m=[] unless (@fns.nil? \ or @fns.empty?) if multilingual m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] #@fl[:v]=@env.document_language_versions_found else m=/(.+?)\.((?:-|ssm\.)?sst$)/ @fn[:b]=@fn[:m]=@fns[m,1] @fn[:t]=@fns[m,2] end end lang=SiSU_Env::Standardise_language.new langs=lang.codes x=[] if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" end dir=SiSU_Env::Info_env.new(@fns) @m << {:m => 'sisu_manifest.html', :l => 'English' } #fix later, default language langs.each do |l| lng=SiSU_Env::Standardise_language.new(l) fns_c="#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" fns_l="#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" if FileTest.file?(fns_c) fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(fns_c) lng=fn_set_lang[:l] fn=SiSU_Env::Env_call.new(fns_c).lang(fn_set_lang[:c]) @m << {:m => fn[:manifest], :l => lng } elsif FileTest.file?(fns_l) fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(fns_l) @fnl=dir.i18n.lang_filename(fn_set_lang[:c]) fn=SiSU_Env::Env_call.new(fns_l).lang(fn_set_lang[:c]) @m << {:m => fn[:manifest], :l => lng } end end @m.uniq! @m end def filename(code,name,suffix) d=SiSU_Env::Info_env.new(@fns) fnl=d.i18n.lang_filename(code) if code "#{fnl[:pre]}#{name}#{fnl[:mid]}#{suffix}#{fnl[:post]}" else "#{name}#{suffix}" end end def lang(code) @fn={ :html => filename(code,'','.html'), :concordance => filename(code,'concordance','.html'), :sax => filename(code,'sax','.xml'), :dom => filename(code,'dom','.xml'), :docbook => filename(code,'docbook','.xml'), :xhtml => filename(code,'scroll','.xhtml'), :pdf_l => filename(code,'landscape','.pdf'), :pdf_p => filename(code,'portrait','.pdf'), :toc => filename(code,'toc','.html'), :doc => filename(code,'doc','.html'), :index => filename(code,'index','.html'), :odf => filename(code,'opendocument','.odt'), :plain => filename(code,'plain','.txt'), :manpage => filename(code,@fnb,'.1'), :wiki => filename(code,'wiki','.txt'), :digest => filename(code,'digest','.txt'), :metadata => filename(code,'metadata','.html'), #chk :manifest => filename(code,'sisu_manifest','.html'), :oai_pmh => filename(code,'oai_pmh','.xml'), :sitemap => filename(code,'sitemap','.xml'), :sitemap_touch => filename(code,"sitemap_#@fnb",'.xml'), :sxs => filename(code,@fnb,'.sxs.xml'), :sxd => filename(code,@fnb,'.sxd.xml'), :sxn => filename(code,@fnb,'.sxn.xml'), :sisupod => filename(nil,@fnz,'') } @fn end end class System_call @@locale_flag=false def initialize(input='',output='',cmd='') @input,@output,@cmd=input,output,cmd @prog=SiSU_Env::Info_program.new @sys=Info_system.instance end def program_found?(program) found=`whereis #{program}` state=if found =~/bin\/#{program}\b/; true else false end end def locale #locales utf8 or other unless @@locale_flag @@locale_flag=true puts @sys.locale #unless @cmd =~/q/ # locale info UTF8 etc. KEEP end @sys.locale end def file_encoding(filename,cmd='') #file encoding program='file' fnsp=Info_env.new(filename).source_file_with_path if program_found?(program) encoding=%x{file #{fnsp}}.strip encoding.gsub!(/#{fnsp}:(\s+|$)/,'') encoding=if encoding \ and not encoding.empty? encoding else 'UTF-8 assumed, encoding undetermined' end puts encoding if cmd =~/[VM]/ encoding else encoding='UTF-8 assumed, file encoding check program unavailable' end end def wc #word count program='wc' if program_found?(program) \ and locale !~/utf-?8/i true else program_ref="(not available)" unless program_found?(program) program_ref="(UTF-8)" if locale =~/utf-?8/i #puts "\tWARN: #{program}\n\t\t using alternative to word count program #{program_ref}" false end end def rcs #rcs for document markup data program='rcs' program_ref="\n\t\tdocument version information requested" if program_found?(program); true else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def cvs #cvs for document markup data program='cvs' program_ref="\n\t\tdocument version information requested" if program_found?(program); true else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def openssl #openssl for digests program='openssl' program_ref="\n\t\tused to generate requested source document identification digest" if program_found?(program); true else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def md5(filename) #md5 dgst program='openssl' program_ref="\n\t\tmd5 digest requested" if program_found?(program) pwd=Dir.pwd Dir.chdir(File.dirname(filename)) dgst=%x{openssl dgst -md5 #{File.basename(filename)}}.strip #use file name without file path Dir.chdir(pwd) dgst.scan(/\S+/) else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def sha256(filename) #sha dgst program='openssl' program_ref="\n\t\tsha digest requested" if program_found?(program) Dir.chdir(File.dirname(filename)) dgst=%x{openssl dgst -sha256 #{File.basename(filename)}}.strip #use file name without file path Dir.chdir(pwd) dgst.scan(/\S+/) else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def psql #psql program='psql' program_ref="\n\t\tpsql requested" if program_found?(program); true else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def create_pg_db(dbname_stub=nil) #createdb unless dbname_stub @pwd ||=Dir.pwd m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m dbname_stub=@pwd[m,1] end program='createdb' program_ref="\n\t\tcreatedb dbname SiSU_#{dbname_stub} #for postgresql database creation" if program_found?(program); system("createdb SiSU_#{dbname_stub}") else puts "\tWARN: #{program} is not available #{program_ref}" #if @cmd =~/v/ end end def relaxng(cmd='') #trang - convert between different schema languages for XML program='trang' program_ref="\n\t\tsee http://www.thaiopensource.com/relaxng/trang.html" if program_found?(program); system("trang #@input #@output") else puts "\tWARN: #{program} is not installed #{program_ref}" if cmd =~/V/ end end def rmagick #rmagick is a ruby library program='identify' program_ref="\n\t\tsee http://www.imagemagick.org/" if program_found?(program); true else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ false end end def well_formed? #tidy - check for well formed xml xhtml etc. program=@prog.tidy program_ref="\n\t\tsee http://tidy.sourceforge.net/" if program_found?(program); system("#{@prog.tidy} -xml #@input > #@output") else puts "\tWARN: #{program} is not installed #{program_ref}" end end def latex2pdf #convert from latex to pdf prog=[] prog=['pdflatex','pdfetex','pdftex'] program_ref="\n\t\tSee http://www.tug.org/applications/pdftex/\n\t\tOn Debian this is is included in tetex-extra" @pdfetex_flag=false @cmd ||='' tell=if @cmd =~/[MVv]/; '' else '> /dev/null' end mode='batchmode' #mode='nonstopmode' prog.each do |program| if program_found?(program) case program when /pdflatex/; system("#{program} -interaction=#{mode} #@input #{tell}\n") when /pdfetex/; system("#{program} -interaction=#{mode} -fmt=pdflatex #@input #{tell}\n") # debian specific paramters ? #system("#{program} -interaction=batchmode -progname=pdflatex #@input\n") when /pdftex/; system("#{program} -interaction=#{mode} -fmt=pdflatex #@input #{tell}\n") end @pdfetex_flag=true break end unless @pdfetex_flag; puts "\tWARN: none of the following programs are installed: #{program[0]}, #{program[1]}, #{program[2]} is installed. #{program_ref}" end end end def makeinfo #texinfo program='makeinfo' program_ref="\n\t\tsee http://www.gnu.org/software/texinfo/" if program_found?(program); system("#{program} #@input\n") else puts "\tWARN: #{program} is not installed #{program_ref}" end end def scp program='scp' if program_found?(program); system("scp -Cr #@input #@output") else puts "\tWARN: #{program} not found" end end def rsync(action='') program='rsync' if program_found?(program) vb=if @cmd =~/q/; 'q' elsif @cmd =~/v/; 'v' else '' end msg='' msg=" && echo 'OK: #@input -> #@output'" unless @cmd =~/q/ system("rsync -az#{vb} #{action} #@input #@output #{msg}") else puts "\tWARN: #{program} not found" end end def rm if @cmd =~/^-Z[mMvVq]*$/; rm_rf(@input) elsif @cmd =~/V/; rm(@input) elsif @cmd !~/q/; rm(@input) elsif @cmd =~/q/; rm(@input) #elsif @cmd =~/q/; system("rm #{action} #@input") else puts "\tWARN: operation ignored" end end end class Standardise_language def initialize(l='') @language=l if @language.empty? @language=Info_env.new.defaults[:language] end end def language #use ISO_639-2 lang={} case @language when /American|^us$/i; d,c,l=false,'en','American English' #depreciated, see iso 639-2 when /English|^en$/i; d,c,l=false,'en','English' when /French|Francais|^fr$/i; d,c,l=false,'fr','French' when /German|^de$/i; d,c,l=false,'de','German' when /Italian|^it$/i; d,c,l=false,'it','Italian' when /Spanish|Espanol|^es$/i; d,c,l=false,'es','Spanish' when /Brazilian(?: Portuguese)?|^br$/i; d,c,l=false,'pt','Brazilian Portuguese' #depreciated, see iso 639-2 when /Portuguese|^pt$/i; d,c,l=false,'pt','Portuguese' when /Swedish|Svensk|^sv$/i; d,c,l=false,'sv','Swedish' when /Danish|Dansk|^da$/i; d,c,l=false,'da','Danish' when /Finnish|Finsk|Suomi|^fi$/i; d,c,l=false,'fi','Finnish' when /Norwegian|Norsk|^no$/i; d,c,l=false,'no','Norwegian' when /Icelandic|^is$/i; d,c,l=false,'is','Icelandic' when /Dutch|^nl$/i; d,c,l=false,'nl','Dutch' when /Estonian|^et$/i; d,c,l=false,'et','Estonian' when /Hungarian|^hu$/i; d,c,l=false,'hu','Hungarian' when /Polish|^pl$/i; d,c,l=false,'pl','Polish' when /Romanian|^ro$/i; d,c,l=false,'ro','Romanian' when /Russian|^ru$/i; d,c,l=false,'ru','Russian' when /Greek|^el$/i; d,c,l=false,'el','Greek' when /Ukranian|^uk$/i; d,c,l=false,'uk','Ukranian' when /Turkish|^tr$/i; d,c,l=false,'tr','Turkish' #when /Serbian/i; d,c,l=false,'', 'Serbian' #when /Welsh/i; d,c,l=false,'', 'Welsh' #when /Basque/i; d,c,l=false,'', 'Basque' #when /Breton/i; d,c,l=false,'', 'Breton' #when /Catalan/i; d,c,l=false,'', 'Catalan' #when /Galician/i; d,c,l=false,'', 'Galician' #when /Saa?mi/i; d,c,l=false,'', 'Saami' #when /Hebrew/i; d,c,l=false,'', 'Hebrew' #when /Latin/i; d,c,l=false,'', 'Latin' #when /Esperanto/i; d,c,l=false,'', 'Esperanto' when /Slovenian|^sl$/i; d,c,l=false,'sl','Slovenian' when /Croatian|^hr$/i; d,c,l=false,'hr','Croatian' when /Slovak(?:ian)?|^sk$/i; d,c,l=false,'sk','Slovakian' when /Czech|^cs$/i; d,c,l=false,'cs','Czech' when /Bulgarian|^bg$/i; d,c,l=false,'bg','Bulgarian' else d,c,l=true,'en','English (default)' #else d,c,l=true,'xx','Default' end lang[:d],lang[:c],lang[:l]=d,c,l lang end def name language[:l].downcase end def title language[:l] end def code language[:c] end def file_to_language(file) m=/.+?\~(\w{2,3})\.(?:-|ssm\.)?sst$/ @language=if file =~m ; file[m,1] else '' end language end def codes codes=['us','en','fr','de','it','es','br','pt','sv','da','fi','no','is','nl','et','hu','pl','ro','ru','el','uk','tr','sk','hr','sl','cs','bg'] # remove us and br see iso-639-2 end end class Info_env < Env_call require 'fileutils' include FileUtils attr_accessor :filename,:sys,:home,:hostname,:user,:env,:rc,:www,:fnb,:fnn,:fnt,:flv,:webserv_path,:stub_pwd,:stub_src,:webserv_host_cgi,:webserv_port_cgi,:processing,:etc,:yamlrc_dir @@image_flag,@@local_image=true,true #warning on @@image_flag @@fb=@@man_path=nil,nil def initialize(fns='',md=nil) super() #you may not want to re-execute this tatic info so frequently! @fns,@md=fns,md @env=Env_call.new(fns) if fns fnb=if @md \ and defined? @md.fnb @md.fnb elsif defined? @env.fnb \ and @env.fnb @env.fnb elsif not @fns.nil? \ and not @fns.empty? m=/(.+)?\.(?:(?:-|ssm\.)?sst|ssm)$/m @fns[m,1] if not @fns.empty? end if fnb; @@fb ||=fnb end @sys=Info_system.instance @fnb ||=@@fb #clean up this... used primarily for zap which is not passed normal parameters @fixed_websev_root='' # @home @pwd=@@pwd||=Dir.pwd m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m @stub_pwd=@@pwd[m,1] @stub_src=@stub_pwd + '/src' @stub_pod=@stub_pwd + '/pod' end def user @sys.user end def hostname @sys.hostname end def host @sys.host end def arch @sys.arch end def rbver @sys.rbver end def locale @sys.locale end def concord_max concord_max=if defined? @rc['processing']['concord_max'] \ and @rc['processing']['concord_max'] @rc['processing']['concord_max'] else defaults[:concord_max] end end def current_document @@current_document||=Dir.pwd @@current_document end def stub_pwd #200412 @stub_pwd end def stub_src @stub_src end def stub_pod @stub_pod end def sisupod #path.processing # sisupod # sisu # content.sst [file content] # filename.sst [link to content.sst] # _sisu # conf # skin/ # doc [relevant skin if any other than default] # image [all images for specific document gathered here] sisupod_processing_path="#{path.processing}/sisupod" if FileTest.directory?(sisupod_processing_path) \ or FileTest.file?(sisupod_processing_path) rm_rf(sisupod_processing_path) end paths=[] paths=["#{path.processing}/sisupod/_sisu/skin/doc","#{path.processing}/sisupod/_sisu/skin/dir","#{path.processing}/sisupod/_sisu/skin/site","#{path.processing}/sisupod/_sisu/image"] paths.each {|x| File.mkpath(x) unless FileTest.directory?(x) } end def defaults #multiple default directories @default_dir ||=@sys.default_dir #DEFAULT_DIR end #def skin # @@vz ||=SiSU_Viz::Skin.new #end def widget #needs (md) #move @rc=SiSU_Env::Get_init.instance.yamlrc @ad=SiSU_Env::Get_init.instance.ads @vz=SiSU_Env::Get_init.instance.skin @flag={ :ad=>false,:md=>false,:sk=>false,:rc=>false } def promo? @flag[:ad]=if @md.flag_promo && @ad[:flag_promo] @flag[:md]=true true elsif defined? @vz.widget_promo \ and not @vz.widget_promo.nil? \ and @vz.widget_promo.class == Array \ and @vz.widget_promo.length > 0 @flag[:sk]=true true elsif defined? @rc['promo'] \ and not @rc['promo'].nil? \ and @rc['promo'].length > 0 @flag[:rc]=true true else false end @flag end def search? searches=['sisu','hyperestraier'] flag=false if defined? @rc['search'] searches.each do |type| flag=if defined? @rc['search'][type] \ and defined? @rc['search'][type]['action'] \ and @rc['search'][type]['flag']==true \ and @rc['search'][type]['action'] =~/https?:\/\// flag=if promo?[:ad] false elsif defined? @vz.widget_search \ and @vz.widget_search == true true elsif defined? @rc['search'][type]['flag'] \ and @rc['search'][type]['flag'] == true true else false end else false end end else false end #flag=true flag end def search_fixed? searches=['sisu','hyperestraier'] flag=if defined? @rc['search'] searches.each do |type| if defined? @rc['search'][type] \ and defined? @rc['search'][type]['action'] \ and @rc['search'][type]['action'] =~/https?:\/\// \ and defined? @rc['search'][type]['db'] \ and @rc['search'][type]['db'] =~/\S+/ flag=if promo?[:ad] false elsif defined? @vz.widget_search \ and @vz.widget_search == true true elsif defined? @rc['search'][type]['flag'] \ and @rc['search'][type]['flag'] == true true else false end else false end end else false end end def search_form(type='sisusearch',action=nil,db=nil,table=false) rc=SiSU_Env::Get_init.instance.yamlrc create_form_hyperestraier=if defined? rc['search']['sisu']['flag'] \ and rc['search']['sisu']['flag']==true \ and action \ and action =~/https?:\/\// true else false end create_form_sisu=if action \ and db \ and action =~/https?:\/\// \ and db =~/\S+/ true elsif widget.search? db=if rc['search']['sisu']['flag']==true \ and rc['search']['sisu']['db']=~/\S+/ rc['search']['sisu']['db']=~/^SiSU_\S+/ \ ? rc['search']['sisu']['db'] \ : "SiSU_#{rc['search']['sisu']['db']}" else nil end action=rc['search']['sisu']['action'] true else false end if table table_open='' table_close='' else table_open='' table_close='
' end form=if create_form_sisu \ and type=~/sisusearch/ \ and defined? rc['search']['sisu'] \ and defined? rc['search']['sisu']['action'] < #{table_open}

idx txt
#{table_close} WOK elsif create_form_hyperestraier \ and type=~/hyperestraier/ \ and defined? rc['search']['hyperestraier'] < #{table_open}

hyperestraier search #{table_close} WOK else '' end form end def search_form_static(action=nil,db=nil) rc=SiSU_Env::Get_init.instance.yamlrc create_form=if rc['search']['sisu']['flag']==true \ and action \ and db \ and action =~/https?:\/\// \ and db =~/\S+/ true elsif widget.search_fixed? db=if rc['search']['sisu']['flag']==true \ and rc['search']['sisu']['db']=~/\S+/ rc['search']['sisu']['db']=~/^SiSU_\S+/ \ ? rc['search']['sisu']['db'] \ : "SiSU_#{rc['search']['sisu']['db']}" else nil end action=rc['search']['sisu']['action'] true else false end if create_form %{

idx txt
} else '' end end def search_action action=if search? else '' end end self end def widget_static @rc=SiSU_Env::Get_init.instance.yamlrc @vz=SiSU_Env::Get_init.instance.skin @flag={ :ad=>false,:md=>false,:sk=>false,:rc=>false } def search? flag=if defined? @rc['search'] \ and defined? @rc['search']['sisu'] \ and defined? @rc['search']['sisu']['action'] \ and @rc['search']['sisu']['action'] =~/https?:\/\// \ and defined? @rc['search']['sisu']['db'] \ and @rc['search']['sisu']['db'] =~/\S+/ \ and defined? @rc['search']['sisu']['db'] \ and @rc['search']['sisu']['db'] =~/\S+/ flag=if defined? @vz.widget_search \ and @vz.widget_search == true true elsif defined? @rc['search']['sisu']['flag'] \ and @rc['search']['sisu']['flag'] == true true else false end else false end end def search_fixed? flag=if defined? @rc['search'] \ and defined? @rc['search']['sisu'] \ and defined? @rc['search']['sisu']['action'] \ and @rc['search']['sisu']['action'] =~/https?:\/\// \ and defined? @rc['search']['sisu']['db'] \ and @rc['search']['sisu']['db'] =~/\S+/ \ and defined? @rc['search']['sisu']['db'] \ and @rc['search']['sisu']['db'] =~/\S+/ flag=if defined? @vz.widget_search \ and @vz.widget_search == true true elsif defined? @rc['search']['sisu']['flag'] \ and @rc['search']['sisu']['flag'] == true true else false end else false end end def search_form(action=nil,db=nil) rc=SiSU_Env::Get_init.instance.yamlrc create_form=if defined? rc['search']['sisu']['flag'] \ and rc['search']['sisu']['flag']==true \ and action \ and db \ and action =~/https?:\/\// \ and db =~/\S+/ true elsif widget_static.search? \ and rc['search']['sisu']['flag']==true db=if rc['search']['sisu']['db']=~/\S+/ rc['search']['sisu']['db']=~/^SiSU_\S+/ ? rc['search']['sisu']['db'] : "SiSU_#{rc['search']['sisu']['db']}" else nil end action=rc['search']['sisu']['action'] true else false end if create_form \ and @fnb \ and @fnb=~/\S+/ %{

idx txt
} elsif create_form %{

idx txt
} else '' end end def search_action action=if search? else '' end end self end def source_file_path file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') pth=unless file =~/\.ssm\.sst$/; "#{Dir.pwd}" else "#{path.composite_file}" end end def source_file_with_path file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') "#{source_file_path}/#{file}" end def read_source_file(fns) fns_array=unless fns =~/\.ssm.sst$/ IO.readlines(fns,'') else IO.readlines("#{path.composite_file}/#{fns}",'') end end def path #dir def home @sys.home end def pwd @sys.pwd end def stub_pwd @stub_pwd end def stub_src @stub_src end def stub_pod @stub_pod end def etc defaults[:sisu_etc] #live/dynamic # @sys.sisu_etc #broken: live/dynamic # defaults[:sisu_etc] #live/dynamic end def arch @sys.dir_arch end def sitearch @sys.dir_sitearch end def bin @sys.dir_bin end def share #shared data repository source directory defaults[:sisu_share] end def style defaults[:stylesheet_stub] end def sample_data #sample data repository source directory defaults[:sample_data_path] end def rc @sys.rc_path end def yamlrc rc.each do |v| if FileTest.exist?("#{v}/sisurc.yml") @yamlrc_dir="#{v}/sisurc.yml" break end end unless @yamlrc_dir rc.each do |v| if FileTest.exist?("#{v}/sisurc.yaml") @yamlrc_dir="#{v}/sisurc.yaml" break end end end @yamlrc_dir end def man #check use if defined? @rc['webserv']['man']; "#{webserv}/#{@rc['webserv']['man']}" else defaults[:webserv_man] end end def webserv_path #testing, check need, remove @webserv_path end def webserv #separation required for webrick which cannot use path.output (different requirements as no file is passed) man_path=if @@man_path.nil? man_path=if defined? @rc['webserv']['path'] \ and @rc['webserv']['path'] =~/\S\S+/ man_path=@@man_path=File.expand_path(@rc['webserv']['path']) else nil end else manpath=@@man_path end @webserv_path=if defined? man_path \ and File.writable?("#{man_path}/.") man_path #web server path as configured in rc file elsif FileTest.directory?(defaults[:webserv_path]) \ and File.writable?("#{defaults[:webserv_path]}/.") #web server path default defaults[:webserv_path] else #create default directory under home and place output there unless FileTest.directory?(defaults[:output_local]) File.mkpath(defaults[:output_local]) end defaults[:output_local] end end def webserv_stub_ensure File.mkpath(path.webserv) unless FileTest.directory?(path.webserv) File.mkpath("#{path.webserv}/#@stub_pwd") unless FileTest.directory?("#{path.webserv}/#@stub_pwd") end def webserv_map_pwd #dir "#{path.webserv}/#{stub_pwd}" end def webserv_dir #fixed/hard path to /www web/presentation directory, on Debian /var/www subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) defaults[:webserv_dir] end def webserv_image #web/presentation directory, subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) images=if defined? @rc['webserv']['images'] @rc['webserv']['images'] else defaults[:images] end "#{path.webserv}/#{images}" end def output #web/webserv output directory... subdirectory into which further subdirectories are made based on file names "#{path.webserv}/#@stub_pwd" end def output_src #web/webserv output directory... subdirectory into which further subdirectories are made based on file names "#{path.output}/src" end def output_pod "#{path.output}/pod" end def manpage "#{path.output}/man" end def sitemaps "#{path.output}/sitemaps" end def encoding pth="#{processing}/#{defaults[:processing_encoding]}" File.mkpath(pth) unless FileTest.directory?(pth) pth end def processing_base_tmp defaults[:processing_path_tmp_base] end def processing_dir_tmp_root defaults[:processing_dir_tmp_root] end def processing #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) unless FileTest.directory?(defaults[:processing_dir_tmp_root]) File.mkpath(defaults[:processing_dir_tmp_root]) File.chmod(0777,defaults[:processing_dir_tmp_root]) end File.mkpath(defaults[:processing_path]) unless FileTest.directory?(defaults[:processing_path]) File.mkpath(defaults[:processing_path_tmp]) unless FileTest.directory?(defaults[:processing_path_tmp]) path_processing=if defined? @rc['processing']['path'] \ and @rc['processing']['path'] unless FileTest.directory?("#{path.home}/#{@rc['processing']['path']}") File.mkpath("#{path.home}/#{@rc['processing']['path']}") end ["#{path.home}/#{@rc['processing']['path']}",defaults[:processing_path],defaults[:processing_path_tmp]] else [defaults[:processing_path],defaults[:processing_path_tmp]] end @processing=nil path_processing.each do |v| # #if File.writable?("#{v}/.") #check now is earlier @processing=v unless FileTest.directory?(@processing) puts "a processing directory (#@processing) is being created for use by sisu" File.mkpath(@processing) end break #end end @processing end def composite_file pth=path.dal #"#{processing}/composite" File.mkpath(pth) unless FileTest.directory?(pth) pth end def dal pth=if defined? @rc['processing']['dal']; "#{processing}/#{@rc['processing']['dal']}" else "#{processing}/#{defaults[:processing_dal]}" end File.mkpath(pth) unless FileTest.directory?(pth) pth end def tune pth=if defined? @rc['processing']['tune']; "#{processing}/#{@rc['processing']['tune']}" else "#{processing}/#{defaults[:processing_tune]}" end File.mkpath(pth) unless FileTest.directory?(pth) pth end def odf "#{processing}/odf" end def tex pth=if defined? @rc['processing']['latex']; "#{processing}/#{@rc['processing']['latex']}" else "#{processing}/#{defaults[:processing_latex]}" end File.mkpath(pth) unless FileTest.directory?(pth) pth end def texi pth=if defined? @rc['processing']['texinfo']; "#{processing}/#{@rc['processing']['texinfo']}" else "#{processing}/#{defaults[:processing_texinfo]}" end File.mkpath(pth) unless FileTest.directory?(pth) pth end def texinfo #texinfo webserv, check "#{processing}/#{defaults[:processing_texinfo]}" end def lout pth=if defined? @rc['processing']['lout']; "#{processing}/#{@rc['processing']['lout']}" else "#{processing}/#{defaults[:processing_lout]}" end File.mkpath(pth) unless FileTest.directory?(pth) pth end def feed if defined? @rc['webserv']['feed']; "#{public_output}/#{@rc['webserv']['feed']}" else defaults[:webserv_feed] end end def feed_home "#{public_output}/#{@rc['webserv']['feed_home']}" end def scripts #used previously only to include tla version info if defined? @rc['project']['path']; "#{home}/#{@rc['project']['path']}" end end def sqlite "#{home}/sqlite" end def cgi if defined? @rc['webserv']['cgi']; "#{@rc['webserv']['cgi']}" else defaults[:webserv_cgi] end end def php if defined? @rc['webserv']['php']; "#{public_output}/#{@rc['webserv']['php']}" else defaults[:webserv_php] end end # programs def output_tell url.webserv_map_pwd end def image_source #image repository source directory image_path=if defined? @rc['image']['path'] \ and defined? @rc['image']['public'] pth="#{@rc['image']['path']}" "#{pth}/#{@rc['image']['public']}" else "#{share}/image" end end def image_source_tex #image repository source directory image_path=if defined? @rc['image']['path'] \ and defined? @rc['image']['public'] pth="#{@rc['image']['path']}" "#{pth}/#{@rc['image']['public']}" else image=defaults[:image_stub] "#{share}/image" end end def image_external "#{processing}/external_document/image" end def image_source_local_tex if FileTest.directory?(defaults[:image_local]); defaults[:image_local] end end def image_source_remote_tex if FileTest.directory?(image_external); image_external end end self end def url def hostname "http://#{@sys.hostname}" end def dir_url "file://#{path.webserv}/#{stub_pwd}" end def localhost "http://localhost/#{stub_pwd}" end def local "http://#{hostname}/#@stub_pwd" end def root if defined? @rc['webserv']['url_root'] \ and @rc['webserv']['url_root'] =~/https?:\/\// "#{@rc['webserv']['url_root']}/#@stub_pwd" elsif defined? @rc['webserv']['url_root'] \ and @rc['webserv']['url_root'] =~/localhost/ "http://localhost/#@stub_pwd" else "file://#{path.output}" end end def remote root end def src_txt "#{root}/src" end def src_pod "#{root}/pod" end def webserv_host_base if defined? @rc['webserv']['host'] case @rc['webserv']['host'] when /https?:\/\//; @rc['webserv']['host'] when /\S+/; "http://#{@rc['webserv']['host']}" else defaults[:webserv_host_cgi] end else defaults[:webserv_host_cgi] end end def webrick_port if @md \ and @md.cmd.inspect=~/-F/ \ and @md.mod.inspect=~/port=(\d+)/ $1 else if defined? @rc['webserv_cgi']['port'] if @rc['webserv_cgi']['port'].nil? \ and (defined? @md.mod \ and not @md.mod.nil? \ and @md.mod.inspect=~/webrick/) defaults[:webserv_port_cgi] elsif not @rc['webserv_cgi']['port'].nil? @rc['webserv_cgi']['port'] else defaults[:webserv_port_cgi] end else defaults[:webserv_port_cgi] end end end def webserv_port_cgi if @md \ and @md.cmd.inspect=~/-F/ \ and @md.mod.inspect=~/port=(\d+)/ $1 else if defined? @rc['webserv_cgi']['port'] if @rc['webserv_cgi']['port'].nil? \ and (defined? @md.mod \ and not @md.mod.nil? \ and @md.mod.inspect=~/webrick/) defaults[:webserv_port_cgi] elsif not @rc['webserv_cgi']['port'].nil? @rc['webserv_cgi']['port'] else nil end else nil end end end def webserv_cgi #web url for local webserv (localhost, or hostname) if defined? @rc['webserv_cgi']['host'] \ and not @rc['webserv_cgi']['host'].nil? http=@rc['webserv_cgi']['host'] =~ /https?:\/\// ? '' : 'http://' #check https? missing if webserv_port_cgi "#{http}#{@rc['webserv_cgi']['host']}:#{webserv_port_cgi}/#@stub_pwd" else "#{http}#{@rc['webserv_cgi']['host']}/#@stub_pwd" end else http=webserv_host_base=~/https?:\/\// ? '' : 'http://' if webserv_port_cgi "#{http}#{webserv_host_base}:#{webserv_port_cgi}/#@stub_pwd" else "#{http}#{webserv_host_base}/#@stub_pwd" end end end def webserv_base_cgi #web url for local webserv (localhost, or hostname) if defined? @rc['webserv_cgi']['host'] \ and not @rc['webserv_cgi']['host'].nil? http=@rc['webserv_cgi']['host'] =~ /https?:\/\// ? '' : 'http://' if webserv_port_cgi "#{http}#{@rc['webserv_cgi']['host']}:#{webserv_port_cgi}" else "#{http}#{@rc['webserv_cgi']['host']}" end else http=webserv_host_base=~/https?:\/\// ? '' : 'http://' if webserv_port_cgi "#{http}#{webserv_host_base}:#{webserv_port_cgi}" else "#{http}#{webserv_host_base}" end end end def webrick #must have a port #REMOVE #port=":#{webserv_port_cgi}" if defined? @rc['webserv_cgi']['host'] \ and not @rc['webserv_cgi']['host'].nil? http=if @rc['webserv_cgi']['host'] =~/http:\/\// 'http://' elsif @rc['webserv_cgi']['host'] =~/https:\/\// 'https://' else defaults end "#{http}#{@rc['webserv_cgi']['host']}" elsif webserv_host_base \ and not webserv_host_base.nil? "#{http}#{webserv_host_base}" else "#{http}localhost" end end def webserv #web url for local webserv (localhost, or hostname) if path.webserv_dir \ and path.webserv =~ /#{path.webserv_dir}/ #revisit "#{path.webserv}/#@stub_pwd".gsub(/#{path.webserv_dir}/,"#{url.hostname}/#@stub_pwd") elsif defined? @rc['webserv']['webrick_url'] \ and @rc['webserv']['webrick_url'] == false "file://#{path.webserv}/#@stub_pwd" elsif webserv_port_cgi =~/\S+/ "#{url.hostname}:#{webserv_port_cgi}/#@stub_pwd" else "#{url.hostname}/#@stub_pwd" end end def webserv_base #web url for local webserv (localhost, or hostname) if path.webserv_dir \ and path.webserv =~ /#{path.webserv_dir}/ #revisit "#{path.webserv}/#@stub_pwd".gsub(/#{path.webserv_dir}/,"#{url.hostname}") elsif defined? @rc['webserv']['webrick_url'] \ and @rc['webserv']['webrick_url'] == false "file://#{path.webserv}" else "#{url.webrick_base}" end end def webserv_files_from_db #sort this out, messy if defined? @rc['webserv_cgi']['file_links'] case @rc['webserv_cgi']['file_links'] when /webserv_cgi/; url.webserv_base_cgi when /webserv/; @rc['webserv']['url_root'] when /https?:\/\//; @rc['webserv_cgi']['file_links'] when /\S+/; "http://#{@rc['webserv_cgi']['file_links']}" else webserv_base_cgi end else webserv_base_cgi end end def sample_search_form_title if defined? @rc['search']['sisu']['title'] \ and @rc['search']['sisu']['title'] =~/\S+/ @rc['search']['sisu']['title'] else %{SiSU search form (sample):} end end def output_tell output_type=if defined? @rc['show_output_on'] \ and @rc['show_output_on'] =~/^(?:filesystem|webserv|(?:local|remote)(?:_webserv)?|webrick)/ @rc['show_output_on'] else 'filesystem' end output=case output_type when /^filesystem(?:_url)?/; url.dir_url when /^remote(?:_webserv)?/; url.remote when /^(?:webserv|local_webserv)/; url.local when /^local(:\d+)/; url.hostname + $1 + '/' + stub_pwd when /^localhost(:\d+)/; url.localhost + $1 + '/' + stub_pwd when /^localhost/; url.localhost when /^webrick/; url.webrick when /^path/; url.webserv_map_pwd else url.webserv_map_pwd end end def images '../_sisu/image' end def images_local if FileTest.directory?(defaults[:image_local]) if @@image_flag require 'ftools' images=Dir.glob("#{defaults[:image_local]}/*.{png,jpg,gif}") pth="#{path.webserv}/#@stub_pwd" File.mkpath("#{pth}/_sisu/image") unless FileTest.directory?("#{pth}/_sisu/image") images.each { |i| File.install(i,"#{pth}/#{i}") } unless images.length > 0 @@image_flag=false end '../_sisu/image' else if @@local_image==true cmd=if @cmd; @cmd else '' end tell=SiSU_Screen::Ansi.new(cmd,"WARNING - no local image directory or images:", defaults[:image_local] ) tell.warn unless cmd =~/q/ @@local_image=false end url.images end end #def images_external #url_images_external #ex defaults url.path_png # '../_sisu/image_external' #end def images_external if FileTest.directory?(image_external) if @@image_flag require 'ftools' images=Dir.glob("#{image_external}/*.{png,jpg,gif}") pth="#{path.webserv}/#@stub_pwd" File.mkpath("#{pth}/_sisu/image_external") unless FileTest.directory?("#{pth}/_sisu/image_external") images.each { |i| File.install(i,"#{pth}/#{i}") } unless images.length > 0 @@image_flag=false end '../_sisu/image_external' else if @@local_image==true tell=SiSU_Screen::Ansi.new(@cmd,"WARNING - image directory for external images or no such images:", :image_external ) tell.warn unless @cmd =~/q/ @@local_image=false end url.images_external end end self end def digest def type if defined? @rc['default']['digest'] \ and @rc['default']['digest'] != nil case @rc['default']['digest'] when /^sha(?:2|256)?$/; 'sha256' when /^md5$/; 'md5' else 'md5' end else 'md5' end end def length case digest.type when /sha256/; 64 when /md5/; 32 else 32 end end def pattern "[0-9a-f]{#{digest.length}}" #/[0-9a-f]{#{digest.length}}/ end self end def program def text_editor if defined? @rc['program_select']['editor'] \ and @rc['program_select']['editor'] =~/\S\S+/ @rc['program_select']['editor'] elsif defined? @rc['program_select']['text_editor'] \ and @rc['program_select']['text_editor'] =~/\S\S+/ @rc['program_select']['text_editor'] else 'editor' #'gvim -c :R -c :S' end end def pdf_viewer if defined? @rc['program_select']['pdf_viewer'] \ and @rc['program_select']['pdf_viewer'] =~/\S\S+/ @rc['program_select']['pdf_viewer'] else 'pdf-viewer' #'evince' end end def web_browser if defined? @rc['program_select']['www_browser'] \ and @rc['program_select']['www_browser'] =~/\S\S+/ @rc['program_select']['www_browser'] elsif defined? @rc['program_select']['web_browser'] \ and @rc['program_select']['web_browser'] =~/\S\S+/ @rc['program_select']['web_browser'] else 'x-www-browser' #'kazehakase' 'galeon' end end def www_browser web_browser end def console_web_browser if defined? @rc['program_select']['console_www_browser'] \ and @rc['program_select']['console_www_browser'] =~/\S\S+/ @rc['program_select']['console_www_browser'] elsif defined? @rc['program_select']['console_web_browser'] \ and @rc['program_select']['console_web_browser'] =~/\S\S+/ @rc['program_select']['console_web_browser'] else 'console-www-browser' #'links2' 'elinks' 'epiphany' end end def console_www_browser web_browser end def xml_viewer if defined? @rc['program_select']['xml_viewer'] \ and @rc['program_select']['xml_viewer'] =~/\S\S+/ @rc['program_select']['xml_viewer'] else text_editor end end def xml_editor xml_viewer end def odf_viewer if defined? @rc['program_select']['odf_viewer'] \ and @rc['program_select']['odf_viewer'] =~/\S\S+/ @rc['program_select']['odf_viewer'] else 'oowriter' #'odf-viewer','oowriter' end end def manpage_generator if defined? @rc['program_select']['man'] \ and @rc['program_select']['man'] =~/\S\S+/ @rc['program_select']['man'] else 'nroff -man' #'nroff -man' #'groff -man -Tascii' end end def file_encoding #file encoding is='' if defined? @rc['program_set']['file_encoding'] is=@rc['program_set']['encoding'] end if is.nil? \ or is==true is='encoding' end is end def wc #wordcount is='' if defined? @rc['program_set']['wc'] is=@rc['program_set']['wc'] end if is.nil? \ or is==true is='wc' end is end def tidy if defined? @rc['program_set']['tidy'] is=@rc['program_set']['tidy'] end if is.nil? \ or is==true is='tidy' end is end def rmagick if defined? @rc['program_set']['rmagick'] is=@rc['program_set']['rmagick'] end if is.nil? \ or is==true is='rmagick' end is end def rexml #should be part of ruby 1.8 but apparently not always is=if FileTest.directory?("#{Config::CONFIG['rubylibdir']}/rexml") #Config::CONFIG['sitedir'] true else false end is=if defined? @rc['program_set']['rexml']; @rc['program_set']['rexml'] else '' end if is.nil? \ or is==true is='rexml' end is end def pdflatex is=if defined? @rc['program_set']['pdflatex']; @rc['program_set']['pdflatex'] else '' end if is.nil? \ or is==true is='pdflatex' end is end def postgresql is=if defined? @rc['program_set']['postgresql']; @rc['program_set']['postgresql'] else '' end if is.nil? \ or is==true is='postgresql' end is end def sqlite is=if defined? @rc['program_set']['sqlite']; @rc['program_set']['sqlite'] else '' end if is.nil? \ or is==true is='sqlite' end is end self end def i18n def language # language settings ## m=/.+\/\S+?\~(\S+)/ pwd=Dir.pwd conf=if defined? @rc['default']['language']; @rc['default']['language'] else nil end l=if pwd=~m ; pwd[m1,1] #2 directory: by visible directory name elsif conf; @rc['default']['language'] #3 config: from sisurc.yaml else defaults[:language] #4 sisu: program default end #1 document: param gets SiSU_Env::Standardise_language.new(l) end def multilingual if defined? @rc['default']['multilingual'] \ and @rc['default']['multilingual'] != nil; @rc['default']['multilingual'] else defaults[:multilingual] end end def lang_filename(l) @lang={} x=if multilingual x=if defined? @rc['default']['language_file'] \ and @rc['default']['language_file'] != nil; @rc['default']['language_file'] else 1 end else 0 end if (l != defaults[:language_code]) \ or (language.code != defaults[:language_code]) #watch if x==1; @lang[:pre],@lang[:mid],@lang[:post]="#{l}.",'','' elsif x==2; @lang[:pre],@lang[:mid],@lang[:post]='',".#{l}",'' elsif x==3; @lang[:pre],@lang[:mid],@lang[:post]='','',".#{l}" else @lang[:pre],@lang[:mid],@lang[:post]='','','' end else @lang[:pre],@lang[:mid],@lang[:post]='','','' end @lang end self end def file_encoding is='' if defined? @rc['program_set']['file_encoding']; is=@rc['program_set']['encoding'] end if is.nil? \ or is==true; is='encoding' end is end def papersize # paper settings, default overidden in param if set within document if defined? @rc['default']['papersize']; @rc['default']['papersize'].downcase else defaults[:papersize].downcase end end def odf_structure rm_rf("#{path.processing}/odf") system("unzip -q #{path.share}/odf/odt.zip -d #{path.processing}") end def sisupod_gen(fns_pod) pwd=Dir.pwd sisupod_processing_path="#{path.processing}/sisupod" if FileTest.directory?(sisupod_processing_path) \ or FileTest.file?(sisupod_processing_path) rm_rf(sisupod_processing_path) end unless FileTest.directory?(sisupod_processing_path) File.mkpath(sisupod_processing_path) end if FileTest.file?("#{Dir.pwd}/#{fns_pod}") system("unzip -q #{Dir.pwd}/#{fns_pod} -d #{path.processing}") else tell=SiSU_Screen::Ansi.new('',"file not found: #{fns_pod}") tell.warn unless @cmd=~/q/ end sisupod_processing_path end end class Info_processing_flag attr_accessor :color,:cf_0,:cf_1,:cf_2,:cf_3,:cf_4,:cf_5 def initialize @rc=Get_init.instance.yamlrc end def color #processing flag shortcuts if defined? @rc['flag']['color']; @rc['flag']['color'] else false end end def cf_0 #processing flag shortcuts if defined? @rc['flag']['default'] \ and not (@rc['flag']['default'].nil? \ or @rc['flag']['default'].empty?) @rc['flag']['default'] else '-NhwpaobxXyYv' end end def cf_1 #processing flag shortcuts if defined? @rc['flag']['i'] \ and not (@rc['flag']['i'].nil? \ or @rc['flag']['i'].empty?) @rc['flag']['i'] else '-hwpoy' end end def cf_2 #processing flag shortcuts if defined? @rc['flag']['ii'] \ and not (@rc['flag']['ii'].nil? \ or @rc['flag']['ii'].empty?) @rc['flag']['ii'] else '-NhwpaobxXy' end end def cf_3 #processing flag shortcuts if defined? @rc['flag']['iii'] \ and not (@rc['flag']['iii'].nil? \ or @rc['flag']['iii'].empty?) @rc['flag']['iii'] else '-NhwpaobxXyY' end end def cf_4 #processing flag shortcuts if defined? @rc['flag']['iv'] \ and not (@rc['flag']['iv'].nil? \ or @rc['flag']['iv'].empty?) @rc['flag']['iv'] else '-NhwpaobxXDyY --import' end end def cf_5 #processing flag shortcuts if defined? @rc['flag']['v'] \ and not (@rc['flag']['v'].nil? \ or @rc['flag']['v'].empty?) @rc['flag']['v'] else '-NhwpaobxXDyY --update' end end end class Info_settings < Info_env def permission?(prog) #program defaults if defined? @rc['permission_set'][prog]; @rc['permission_set'][prog] else false end end def program?(prog) #program defaults if defined? @rc['program_set'][prog]; @rc['program_set'][prog] else false end end end class File_map < Info_env attr_accessor :local_sisu_source def initialize(opt='') #watch super() @opt=opt #,opt.fns,opt.cmd #@file=@opt.fns #not always fns @env=if @opt.fns \ and not @opt.fns.empty? SiSU_Env::Info_env.new(@opt.fns) else SiSU_Env::Info_env.new('dummy.sst') end if @opt.cmd =~/m/; @md=SiSU_Param::Parameters.new(@opt).get end ft=[] if @md \ and defined? @md.fn \ and @md.fn # used for multilingual if @md.cmd =~ /[hH]/ ft << @md.fn[:html] end if @md.cmd =~ /w/ \ and @md.cmd !~ /[hH]/ ft << @md.fn[:concordance] end if @md.cmd =~ /y/ \ and @md.cmd !~ /[hH]/ ft << @md.fn[:manifest] end if @md.cmd =~ /p/; ft << @md.fn[:pdf_l] << @md.fn[:pdf_p] end if @md.cmd =~ /x/; ft << @md.fn[:sax] end if @md.cmd =~ /X/; ft << @md.fn[:dom] end if @md.cmd =~ /b/; ft << @md.fn[:xhtml] end if @md.cmd =~ /a/; ft << @md.fn[:plain] end if @md.cmd =~ /i/; ft << @md.fn[:manpage] end if @md.cmd =~ /[g]/; ft << @md.fn[:wiki] end if @md.cmd =~ /N/; ft << @md.fn[:digest] end if @md.cmd =~ /o/; ft << @md.fn[:odf] end if @md.cmd =~ /O/; ft << @md.fn[:oai_pmh] end if @md.cmd =~ /s/; ft << @md.fns end if @md.cmd =~ /S/; ft << @md.fn[:sisupod] << '.kdi' end @fnb=@md.fnb else # still needed where/when param is not parsed if @opt.cmd =~ /[hH]/; ft << '.html' << '.html.??' end if @opt.cmd =~ /w/ \ and @opt.cmd !~ /[hH]/ ft << 'concordance.html' << '??.concordance.html' << 'concordance.??.html' end if @opt.cmd =~ /y/ \ and @opt.cmd !~ /[hH]/ ft << 'sisu_manifest.html' << '??.sisu_manifest.html' << 'sisu_manifest.??.html' end if @opt.cmd =~ /p/; ft << 'landscape.pdf' << 'portrait.pdf' << '.pdf' end if @opt.cmd =~ /x/; ft << 'sax.xml' << '??.sax.xml' << 'sax.??.xml' end if @opt.cmd =~ /X/; ft << 'dom.xml' << '??.dom.xml' << 'dom.??.xml' end if @opt.cmd =~ /b/; ft << 'scroll.xhtml' << '??.scroll.xhtml' << 'scroll.??.xhtml' end if @opt.cmd =~ /i/; ft << '.1' << '??.man.1' << 'man.??.1' end if @opt.cmd =~ /a/; ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' end if @opt.cmd =~ /[g]/; ft << 'wiki.txt' << '??.wiki.txt' << 'wiki.??.txt' end if @opt.cmd =~ /N/; ft << 'digest.txt' << '??.digest.txt' << 'digest.??.txt' end if @opt.cmd =~ /o/; ft << 'opendocument.odt' << '??.opendocument.odt' << 'opendocument.??.odt' end if @opt.cmd =~ /O/; ft << 'oai_pmh.xml' end if @opt.cmd =~ /s/; ft << '.sst' << '.ssi' << '.ssm' end if @opt.cmd =~ /S/; ft << '.zip' << '.kdi' end if @opt.mod.inspect =~ /sxm|sxs|xml/; ft << @fnb << '.sxs.xml' end if @opt.mod.inspect =~ /sxd/; ft << @fnb << '.sxd.xml' end if @opt.mod.inspect =~ /sxn/; ft << @fnb << '.sxn.xml' end end ft=ft.uniq filetypes=ft.join(',') @filetypes=if filetypes !~/..+/; '' # -r called alone, copy all elsif @opt.cmd =~/u/; '' # -u added, copy all, (used to create remote directory tree see output path), not the usual function of -u elsif filetypes =~/\S+?,\S+/; '*{' + filetypes + '}' # more than one relevant file type else '*' + filetypes # one relevant file type end @source_path=if @fnb \ and not @fnb.empty? "#{@env.path.output}/#@fnb" else @env.path.output end @source_path_src=if @fnb \ and not @fnb.empty? "#{@env.path.output}/src" else @env.path.output_src end @local_sisu_source=if @filetypes =~/\S/; "#@source_path/#@filetypes" else @source_path end end end class Clean_output require 'fileutils' include FileUtils::Verbose def initialize(opt) @opt=opt z=File_map.new(@opt) @zap=z.local_sisu_source if @opt.cmd =~ /[hH]/ @zap=Dir.glob(@zap).join(' ') if @opt.cmd !~ /w/; @zap.gsub!(/#@source_path\/concordance.html/,'') end end @env=SiSU_Env::Info_env.new end def zap p @zap if @zap !~/\/\//; rm_rf(@zap) if FileTest.directory?(@zap) else puts 'suspect zap request, ignored' end #Dir.unlink(@zap) if FileTest.directory?(@zap) #System_call.new(@zap,'',@cmd).rm end def zap_map if @opt.fnb \ and not @opt.fnb.empty? sm="#{@env.path.output}/sitemaps/sitemap_#{@opt.fnb}.xml" rm(sm) if FileTest.file?(sm) end end end class Info_remote_host def initialize @rc=Get_init.instance.yamlrc end def remote_host #see Info_remote remote_host_base_general r=[] r=if (defined? @rc['remote'] \ and @rc['remote'].class==Array) r_array=@rc['remote'] r_array.each_with_index do |renv,i| r[i]={} if defined? renv['user'] \ and defined? renv['host'] end r[i][:user]=renv['user'] r[i][:host]=renv['host'] r[i][:path]=if defined? renv['path'] renv['path'] else '' end r[i][:name]="#{r[i][:user]}@#{r[i][:host]}:#{r[i][:path]}" end r elsif (defined? @rc['remote'] \ and @rc['remote'].class==Hash \ and defined? @rc['remote']['user'] \ and defined? @rc['remote']['host']) r[0]={} r[0][:user]=@rc['remote']['user'] r[0][:host]=@rc['remote']['host'] r[0][:path]=if defined? @rc['remote']['path'] @rc['remote']['path'] else '' end r[0][:name]="#{r[0][:user]}@#{r[0][:host]}:#{r[0][:path]}" r else r[0]={} r[0][:name]='.' r[0][:user]='' r[0][:host]='' r[0][:path]='' #puts "no remote host or user" r end end def rhost def r1 rhost1=if defined? SiSU_Env::Info_remote_host.new.remote_host[0][:name] SiSU_Env::Info_remote_host.new.remote_host[0][:name] else nil end end def r2 rhost2=if defined? SiSU_Env::Info_remote_host.new.remote_host[1][:name] SiSU_Env::Info_remote_host.new.remote_host[1][:name] else nil end end def r3 rhost3=if defined? SiSU_Env::Info_remote_host.new.remote_host[2][:name] SiSU_Env::Info_remote_host.new.remote_host[2][:name] else nil end end def r4 rhost4=if defined? SiSU_Env::Info_remote_host.new.remote_host[3][:name] SiSU_Env::Info_remote_host.new.remote_host[3][:name] else nil end end def r5 rhost5=if defined? SiSU_Env::Info_remote_host.new.remote_host[4][:name] SiSU_Env::Info_remote_host.new.remote_host[4][:name] else nil end end def r6 rhost6=if defined? SiSU_Env::Info_remote_host.new.remote_host[5][:name] @ls + SiSU_Env::Info_remote_host.new.remote_host[5][:name] else nil end end self end end class Info_remote < File_map @@flag_remote=false require 'socket' def initialize(opt) super(opt) # @opt=opt @rc=Get_init.instance.yamlrc end def remote_host_base_general SiSU_Env::Info_remote_host.new.remote_host end def remote_host_base remote_host_base_general.each do |remote_conn| #host_ip=IPSocket.getaddress(remote[:host]) unless remote[:host].empty? @@flag_remote=true if remote_conn[:name] =~/\S+?@\S+/ #remote_conn[:name] end remote_host_base_general end def scp #sort out later using ruby libraries #not ideal, first time each file is sent, -r must be called separately for subdir to be built self.remote_host_base.each do |remote_conn| local_gen=@source_path remote_gen=case @opt.cmd when /u/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." #creates remote directory tree, this is not the usual function of u when /[abhHNopwxXy]/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/#{@fnb}/." else "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." end #remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." local_src=@source_path_src remote_src="#{remote_conn[:name]}/#{@env.path.stub_src}/." remote_pod="#{remote_conn[:name]}/#{@env.path.stub_pod}/." src_txt=@opt.fnc src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.zip') if (local_gen =~/\S/ \ and local_gen !~/\/\//) \ and (remote_gen =~/\S/ \ and remote_gen !~/\/\//) \ and @@flag_remote==true \ and @opt.cmd !~/U/ System_call.new(local_gen,remote_gen).scp if FileTest.file?("#{local_src}/#{src_txt}") System_call.new("#{local_src}/#{src_txt}",remote_src).scp elsif FileTest.file?("#{local_pod}/#{src_pod}") System_call.new("#{local_src}/#{src_pod}",remote_pod).scp end elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "#{local_gen} -> #{remote_gen}" if FileTest.file?("#{local_src}/#{src_doc}") puts "#{local_src}/#{src_doc}* -> #{remote_src}" elsif FileTest.file?("#{local_pod}/#{src_doc}.zip") puts "#{local_pod}/#{src_doc}* -> #{remote_pod}" end else puts 'suspect scp request, ignored' puts "#{local_gen} -> #{remote_gen} remote flag: #@@flag_remote" puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def rsync self.remote_host_base.each do |remote_conn| local_gen=@source_path local_gen_image="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" remote_gen="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." remote_images="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/image/." local_src=@source_path_src local_pod=@source_path_pod remote_src="#{remote_conn[:name]}/#{@env.path.stub_src}/." remote_pod="#{remote_conn[:name]}/#{@env.path.stub_pod}/." src_txt=@opt.fnc src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.zip') if (local_gen =~/\S/ \ and local_gen !~/\/\//) \ and (remote_gen =~/\S/ \ and remote_gen !~/\/\//) \ and @@flag_remote==true \ and @opt.cmd !~/U/ System_call.new(local_gen,remote_gen,@opt.cmd).rsync('--delete-after') if FileTest.file?("#{local_src}/#{src_txt}") System_call.new("#{local_src}/#{src_txt}",remote_src,@opt.cmd).rsync if defined? @md.ec[:image] images="#{local_gen_image}/" + @md.ec[:image].join(" #{local_gen_image}/") System_call.new(images,remote_images,@opt.cmd).rsync end elsif FileTest.file?("#{local_pod}/#{src_pod}") System_call.new("#{local_pod}/#{src_pod}",remote_src,@opt.cmd).rsync end elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "#{local_gen} -> #{remote_gen}" if FileTest.file?("#{local_src}/#{src_doc}") \ or FileTest.file?("#{local_src}/#{src_doc}.zip") puts "#{local_src}/#{src_doc}* -> #{remote_src}" end else puts 'suspect rsync request, ignored' puts "#{local_gen} -> #{remote_gen} remote flag: #@@flag_remote" puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def scp_base #base site self.remote_host_base.each do |remote_conn| local=@source_path remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." if defined? @rc['permission_set']['remote_base_site'] \ and @rc['permission_set']['remote_base_site'] \ and @@flag_remote==true \ and @opt.cmd !~/U/ puts "begin scp_base: #{local} -> #{remote}" System_call.new("#{local}/#{@env.path.style}/",remote).scp elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "begin scp_base: #{local} -> #{remote}" puts "#{local}/#{@env.path.style}/ -> #{remote}" else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def scp_base_all #base site self.remote_host_base.each do |remote_conn| local=@source_path remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." if defined? @rc['permission_set']['remote_base_site'] \ and @rc['permission_set']['remote_base_site'] \ and @@flag_remote==true \ and @opt.cmd !~/U/ puts "begin scp_base_all: #{local} -> #{remote}" System_call.new("#{local}/_sisu/image_sys/",remote).scp System_call.new("#{local}/_sisu/image/",remote).scp System_call.new("#{local}/#{@env.path.style}/",remote).scp elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "scp_base_all: #{local} -> #{remote}" puts "#{local}/_sisu/image_sys/ -> #{remote}" puts "#{local}/_sisu/image/ -> #{remote}" puts "#{local}/#{@env.path.style}/ -> #{remote}" else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def rsync_base #base site ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu" image_sys="#{@env.path.webserv}/_sisu/image_sys" images="#{@env.path.webserv}/_sisu/image" self.remote_host_base.each do |remote_conn| remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." remote_conf="#{remote_conn[:name]}/_sisu" if defined? @rc['permission_set']['remote_base_site'] \ and @rc['permission_set']['remote_base_site'] \ and @@flag_remote==true \ and @opt.cmd !~/U/ #puts "begin rsync_base: #{local} -> #{remote}" System_call.new("#{image_sys}","#{remote_conf}").rsync System_call.new("#{images}","#{remote_conf}").rsync System_call.new("#{ldest}","#{remote}").rsync elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "rsync_base: #{local} -> #{remote}" puts "#{local}/_sisu/image -> #{remote}" puts "#{local}/_sisu/image_sys/ -> #{remote}" puts "#{local}/#{@env.path.style}/ -> #{remote}" else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def rsync_base_sync #base site self.remote_host_base.each do |remote_conn| local=@source_path remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." if defined? @rc['permission_set']['remote_base_site'] \ and @rc['permission_set']['remote_base_site'] \ and @@flag_remote==true \ and @opt.cmd !~/U/ puts "begin rsync_base_sync: #{local} -> #{remote}" System_call.new("#{local}/_sisu/image_sys/",remote).rsync('--delete-after') System_call.new("#{local}/_sisu/image/",remote).rsync('--delete-after') System_call.new("#{local}/#{@env.path.style}/",remote).rsync('--delete-after') elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "rsync_base_sync: #{local} -> #{remote}" puts "#{local}/_sisu/image_sys/ -> #{remote}" puts "#{local}/_sisu/image/ -> #{remote}" puts "#{local}/#{@env.path.style}/ -> #{remote}" else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end def rsync_sitemaps #sitemap directory self.remote_host_base.each do |remote_conn| local="#@source_path/sitemapindex.xml" remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." if @@flag_remote #if defined? @rc['permission_set']['remote_base_site'] and @rc['permission_set']['remote_base_site'] #and @@flag_remote==true and @opt.cmd !~/U/ System_call.new(local,remote).rsync('--delete-after') elsif @opt.cmd =~/U/ puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ puts "rsync_sitemaps: #{local} -> #{remote}" else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end end end end class Info_version } end def html_tables %{ } end end class SiSU_file