#!/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 def stable '5' end def unstable '6' end def default unstable end def current 'current' end def next 'next' end self 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 \ =~ /\/sisu-[#{version.stable}#{version.unstable}]\.(?:\d+|[a-z])\.(?:\d+|[a-z])\// :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 stable 'v' + version.stable end def unstable 'v' + version.unstable end def default 'v' + version.default end def current 'current' end def next 'develop' end def stable_bin_file_regex %r{\bsisu#{version.stable}$} end def unstable_bin_file_regex %r{\bsisu#{version.unstable}$} end def stable_gem_regex %r{\/sisu-#{version.stable}\.(?:\d+|[a-z])\.(?:\d+|[a-z])\/} end def unstable_gem_regex %r{\/sisu-#{version.unstable}\.(?:\d+|[a-z])\.(?:\d+|[a-z])\/} end def stable_modifier_regex %r{"(?:--v#{version.stable}|--current|--stable|--release)"} end def unstable_modifier_regex %r{"(?:--v#{version.unstable}|--next|--unstable|--dev)"} end self end def sisu_lib "sisu/#{branch_name_}" end def sisu_path_lib if sisu_path_specified_lib \ && FileTest.file?("#{sisu_path_specified_lib}/#{sisu_lib}/hub.rb") "#{sisu_path_specified_lib}/#{sisu_lib}" else sisu_lib end end def sisu_version_info_path "#{sisu_path_base_system_data}/version/#{branch_name?}.yml" end def branch_name_ if sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ or sisu_run_from? == :system_install case processing.called_as when processing.stable_bin_file_regex then processing.current when processing.unstable_bin_file_regex then processing.next else case processing.argv_str when processing.stable_modifier_regex then processing.current when processing.unstable_modifier_regex then processing.next else processing.current end end elsif sisu_run_from? == :gem_install case processing.sisu_runtime_path when processing.stable_gem_regex then processing.current when processing.unstable_gem_regex then processing.next else processing.current end else processing.current end end def branch_version_ if sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ or sisu_run_from? == :system_install case processing.called_as when processing.stable_bin_file_regex then processing.stable when processing.unstable_bin_file_regex then processing.unstable else case processing.argv_str when processing.stable_modifier_regex then processing.stable when processing.unstable_modifier_regex then processing.unstable else processing.stable end end elsif sisu_run_from? == :gem_install case processing.sisu_runtime_path when processing.stable_gem_regex then processing.stable when processing.unstable_gem_regex then processing.unstable else processing.stable end else processing.stable end end def paths_set if sisu_run_from? == :system_install \ and processing.called_as \ =~ /^#{RbConfig::CONFIG['bindir']}\/sisu[#{version.stable}#{version.unstable}]?$/ :set_path_system elsif sisu_run_from? == :full_path_to_sisu_bin_in_sisu_dir_tree \ and processing.called_as \ !~ /^#{RbConfig::CONFIG['bindir']}\/sisu[#{version.stable}#{version.unstable}]?$/ \ && File.expand_path(processing.called_as) \ =~ /bin\/sisu[#{version.stable}#{version.unstable}]?$/ \ && FileTest.file?(processing.called_as) :set_dir_tree_full_path elsif sisu_run_from? ==:gem_install :set_gem_path 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[#{version.stable}#{version.unstable}]?$/,'') when :set_gem_path 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[#{version.stable}#{version.unstable}]?$/,'/data/sisu') when :set_gem_path Gem::Specification.find_by_name("sisu").gem_dir + '/data/sisu' else nil end end def sisu_path_specified_lib if (processing.called_as \ !~ /^#{RbConfig::CONFIG['bindir']}\/sisu[#{version.stable}#{version.unstable}]?$/) File.expand_path(processing.called_as). sub(/bin\/sisu[#{version.stable}#{version.unstable}]?$/,'lib') else nil 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 runtime_path? sisu_runtime_path end def runtime_type? sisu_run_from? end def called_from? sisu_called_from_directory end def branch_name? branch_name_ end def branch_version? branch_version_ end def path_base? sisu_path_base end def path_base_system_data? sisu_path_base_system_data end def path_lib? sisu_path_lib 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_is.path_lib?}/hub" 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::HubMaster.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::HubMaster.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::HubMaster.new(processing.argv,sisu_is.runtime?) end rescue ensure SiSU::HubClose.new(sisu_called_from_directory,@argv) Dir.chdir(sisu_called_from_directory) system("cd #{sisu_called_from_directory}") end end end #% sisu select source & branch, begin $VERBOSE=nil require 'rbconfig' require 'rubygems' 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']} rubylib 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>