#!/usr/bin/env ruby # encoding: utf-8 #SiSU: copyright (C) 1997 - 2015 Ralph Amissah; License GPL 3, see appended program information class Orient require 'singleton' include Singleton def initialize #(called_as_,argv) super() @called_as,@argv=$0,$* end def version_major '7' end def sisu_called_from_directory @@sisu_called_from_directory ||= Dir.pwd end def sisu_run_from? if processing.called_as == processing.sisu_runtime_path \ and File.dirname(processing.sisu_runtime_path) != RbConfig::CONFIG['bindir'] :full_path_to_sisu_bin_in_sisu_dir_tree elsif processing.sisu_runtime_path =~/\/gems\// \ and processing.sisu_runtime_path \ =~ /\/#{processing.gem_regex}\// :gem_install else :system_install end end def processing def called_as @called_as end def argv @argv end def argv_str argv.inspect end def sisu_runtime_path __FILE__ end def bin_file_regex %r{\bsisu$} end def gem_regex %r{sisu-[0-9]+\.[0-9]+\.[0-9]+(?:\.r[0-9]+\.g[0-9a-f]{7})?} end self end def sisu_lib 'sisu' end def sisu_version_info_path "#{sisu_path_base_system_data}/version.yml" end def paths_set if sisu_run_from? == :system_install \ and processing.called_as \ =~ /^#{RbConfig::CONFIG['bindir']}\/sisu$/ :set_path_system elsif sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ and processing.called_as \ !~ /^#{RbConfig::CONFIG['bindir']}\/sisu$/ \ && File.expand_path(processing.called_as) \ =~ /bin\/sisu$/ \ && FileTest.file?(processing.called_as) :set_dir_tree_full_path elsif sisu_run_from? ==:gem_install :set_path_gem else nil end end def git_version if sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ && FileTest.file?('/usr/bin/git') \ && FileTest.directory?(processing.sisu_runtime_path.gsub(/\/bin\/sisu\S*/,'/.git')) bin_base=processing.sisu_runtime_path.gsub(/\/bin\/sisu\S*/,'') pwd=Dir.pwd Dir.chdir(bin_base) x=`git describe --long --tags 2>&1`.strip. gsub(/^[a-z_-]*([0-9.]+)/,'\1'). gsub(/([^-]*-g)/,'r\1'). gsub(/-/,'.') x=(x=~/^[0-9]+\.[0-9]+\.[0-9]+\.r[0-9]+\.g[0-9a-f]{7}/) \ ? x : nil Dir.chdir(pwd) x else nil end end def sisu_path_base case paths_set when :set_path_system RbConfig::CONFIG['datadir'] + '/sisu' when :set_dir_tree_full_path File.expand_path(processing.called_as). sub(/\/bin\/sisu$/,'') when :set_path_gem Gem::Specification.find_by_name("sisu").gem_dir else nil end end def sisu_path_base_system_data case paths_set when :set_path_system RbConfig::CONFIG['datadir'] + '/sisu' when :set_dir_tree_full_path File.expand_path(processing.called_as). sub(/\/bin\/sisu$/,'/data/sisu') when :set_path_gem Gem::Specification.find_by_name("sisu").gem_dir \ + '/data/sisu' else nil end end def sisu_this_lib if Gem::Specification.any? \ and processing.sisu_runtime_path =~/\/gems\// \ and processing.sisu_runtime_path \ =~ /\/#{processing.gem_regex}\// # gem sought processing.sisu_runtime_path. gsub(/\/bin\/sisu[a-z0-9._-]*$/, '/lib/sisu') elsif (processing.called_as \ !~ /^#{RbConfig::CONFIG['bindir']}\/sisu$/) # called off file system, project directory tree File.expand_path(processing.called_as). sub(/bin\/sisu\S*/,'lib/sisu') else # distro installation sisulib={ vendorlib: RbConfig::CONFIG['vendorlibdir'] + '/sisu', sitelib: RbConfig::CONFIG['sitelibdir'] + '/sisu', } if FileTest.directory?(sisulib[:sitelib]) # local install sisulib[:sitelib] elsif FileTest.directory?(sisulib[:vendorlib]) # system install sisulib[:vendorlib] else 'sisu' # assume lib paths work end end end def sisu_this_lib_ if (processing.called_as \ !~ /^#{RbConfig::CONFIG['bindir']}\/sisu$/) File.expand_path(processing.called_as). sub(/bin\/sisu\S*/,'lib/sisu') else 'sisu' end end def language_list def codes %w[am bg bn br ca cs cy da de el en eo es et eu fi fr ga gl he hi hr hy ia is it ja ko la lo lt lv ml mr nl nn no oc pl pt pt_BR ro ru sa se sk sl sq sr sv ta te th tk tr uk ur us vi zh] end def regex codes.join('|') end self end def sisu_is def version_major? version_major end def runtime_path? processing.sisu_runtime_path end def runtime_type? sisu_run_from? end def called_from? sisu_called_from_directory end def path_base? sisu_path_base end def path_base_system_data? sisu_path_base_system_data end def version_info_path? sisu_version_info_path end def language_list? language_list.codes end def language_list_regex? language_list.regex end def git_version_info? git_version end def runtime? { call_path: called_from?, runtime_path: runtime_path?, runtime_type: runtime_type?, } end self end def get_processing_info def sortout unless @clm_pf processing_files={} command_line_modifiers=[] processing.argv.each do |x| if x =~/^-+/ command_line_modifiers << x elsif x =~/\.ss[tm]/ if x =~/\// markup_path,markup_file = (/(\S+\/)((?:#{language_list.regex})?[^\/]+)/). match(x)[1,2] if not processing_files[markup_path] processing_files[markup_path]=[] end processing_files[markup_path] << markup_file else if not processing_files['./'] processing_files['./']=[] end processing_files['./'] << x end end end end @clm_pf ||={ command_line_modifiers: command_line_modifiers, processing_files: processing_files, } end def command_line_modifiers sortout[:command_line_modifiers] end def processing_files sortout[:processing_files] end self end def control require sisu_this_lib sisu_called_from_directory begin if get_processing_info.processing_files.length > 0 get_processing_info.processing_files.each_pair do |markup_dir,markup_file| begin $sisu_document_markup_directory=markup_dir.gsub(/\/$/,'') argv_sub=get_processing_info.command_line_modifiers + markup_file if FileTest.directory?(markup_dir) system("cd #{markup_dir}") Dir.chdir(markup_dir) $sisu_document_markup_directory_base_fixed_path= Dir.pwd.gsub(/\/(?:#{language_list.regex})$/,'') SiSU_libs::CallHubMaster.new(argv_sub,sisu_is.runtime?) elsif markup_dir =~/https?:/ markup_file.each do |mf| (FileTest.file?(mf)) \ ? (puts 'requested remote file already exists in current directory ' \ + Dir.pwd + ' using ' + mf) : (system("wget #{markup_dir}/#{mf}")) end $sisu_document_markup_directory_base_fixed_path= Dir.pwd.gsub(/\/(?:#{language_list.regex})$/,'') argv_sub=command_line_modifiers + markup_file SiSU_libs::CallHubMaster.new(argv_sub,sisu_is.runtime?) else p "Error directory specified #{markup_dir} not found" end ensure Dir.chdir(sisu_called_from_directory) system("cd #{sisu_called_from_directory}") end end else $sisu_document_markup_directory=Dir.pwd.gsub(/\/$/,'') $sisu_document_markup_directory_base_fixed_path= Dir.pwd.gsub(/(^|\/)(?:#{language_list.regex})$/,'') SiSU_libs::CallHubMaster.new(processing.argv,sisu_is.runtime?) end rescue ensure SiSU_libs::HubClose.new(@argv,sisu_called_from_directory) Dir.chdir(sisu_called_from_directory) system("cd #{sisu_called_from_directory}") end end end #% sisu select source & branch, begin $VERBOSE=nil require 'rbconfig' begin require 'singleton' s=Orient.instance SiSU_is=s.sisu_is s.control rescue #% - STDERR.puts 'ERROR' STDERR.puts $! STDERR.puts $@ puts %{ #{%x{ruby -v}.strip.to_s} #{RUBY_VERSION} ruby version: #{RbConfig::CONFIG['RUBY_PROGRAM_VERSION']}p#{RbConfig::CONFIG['PATCHLEVEL']} ruby named: #{RbConfig::CONFIG['ruby_version']} rubylib: #{RbConfig::CONFIG['rubylibdir']} vendor lib #{RbConfig::CONFIG['vendordir']} site lib local: #{RbConfig::CONFIG['sitelibdir']} gem dir: #{Gem.dir} gem path: #{Gem.path} } system(%{echo " system RUBYPATH: ${RUBYPATH} system RUBYLIB: ${RUBYLIB} "}) end __END__ * Name: SiSU ** Description: documents, structuring, processing, publishing, search ** Author: Ralph Amissah <ralph@amissah.com> <ralph.amissah@gmail.com> ** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 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> ** Git <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=bin/sisu;hb=HEAD>