diff options
Diffstat (limited to 'lib/sisu/v2/sisupod_make.rb')
-rw-r--r-- | lib/sisu/v2/sisupod_make.rb | 338 |
1 files changed, 0 insertions, 338 deletions
diff --git a/lib/sisu/v2/sisupod_make.rb b/lib/sisu/v2/sisupod_make.rb deleted file mode 100644 index 188e3315..00000000 --- a/lib/sisu/v2/sisupod_make.rb +++ /dev/null @@ -1,338 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * 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.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: create sisupod filetype and copy it to output directory! - -=end -module SiSU_Doc - require 'fileutils' - include SiSU_Env - class Source - include FileUtils #::Verbose - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/response" # response.rb - def initialize(opt) - @opt=opt - m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @date=SiSU_Env::Info_date.new.dt - @env=SiSU_Env::Info_env.new(@opt.fns) - @ver=SiSU_Env::Info_version.instance.get_version - @ans=SiSU_Response::Response.new - pod_path="#{@env.path.processing}/sisupod" - @v=if @opt.cmd =~/[VM]/; 'v' - else '' - end - @local_path="#{@env.path.output_pod}" #@local_path="#{@env.path.output}/#{@env.fnb}" - @zipfile=if @opt.fns =~/\.ssm\.sst$/; @opt.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm') - else @opt.fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') - end - mkdir_p(pod_path) unless FileTest.directory?(pod_path) - rm_rf("#{@env.path.processing}sisupod/*") if FileTest.directory?("#{@env.path.processing}sisupod") - end - def read - unless @opt.cmd =~/q/ - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (zip)',@opt.fns).green_hi_blue \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (zip)',@opt.fns).green_title_hi - end - unless @opt.fns.empty? - unless @opt.cmd =~/q/ - SiSU_Screen::Ansi.new(@opt.cmd,'Make sisu document (zip) and place in output directory',"#{@opt.fns} -> file://#{@env.path.output_pod}/#{@zipfile}.zip").warn if @opt.cmd =~/[MVv]/ - end - directories - sisupod_build - sisupod_zip - #sisupod_7zip - else - if @opt.cmd =~/[MVv]/ - SiSU_Screen::Ansi.new(@opt.cmd,'Make (zip) of sisu work directory',"#{@env.stub_pwd}\_#{@date}.zip").warn - SiSU_Screen::Ansi.new(@opt.cmd,'').blue_tab - end - ans=@ans.response?('make sisupod of entire directory?') - if ans; sisupod_zip_directory - end - end - end - def sisupod_zip_directory - sisupod_directory="sisupod-#{@env.stub_pwd}-#{@date}.ssp" # "sisupod-#{@env.stub_pwd}-#{@date}.zip" - unless File.symlink?('sisupod'); File.symlink(Dir.pwd,'sisupod') - end - re_base_dir='^sisupod/([^.][^/]*\.(ssm|ssi|sst)$|_sisu/)' - re_files='/[a-zA-Z0-9.~_-]+\.(ssm|ssi|sst|rb|css|png|jpg|gif|yaml)$' - re_ignore='/[.~_-][^/]+$' - if File.symlink?('sisupod') - info="SiSU sisupod #{@ver[:version]} directory contents #{sisupod_directory}" - system(%{ - echo "#{info}" - echo "#{info}" > sisu_zip.txt - zip -qz #{sisupod_directory} sisu_zip.txt < sisu_zip.txt - for I in `find -H sisupod -print | \ - egrep "#{re_base_dir}" | \ - egrep "#{re_files}" | \ - egrep -v "#{re_ignore}" ` - do zip #{sisupod_directory} $I - done - }) - else puts "the required systemlink 'sisupod' could not be created on the current directory: remove the file or directory named 'sisupod' within #{Dir.pwd}" - end - if @opt.cmd =~/[MVv]/ - SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (tar gzip)',@opt.fns).green_hi_blue - SiSU_Screen::Ansi.new(@opt.cmd,'Zipped directory',sisupod_directory).warn - SiSU_Screen::Ansi.new('',sisupod_directory).blue_tab - end - end - def directories - SiSU_Env::Info_env.new.sisupod - end - def select(skin='') # skin loading logic here - load "#{SiSU_lib}/defaults.rb" - @skin={} - skin_path = [ - "#{@env.path.pwd}/_sisu/skin", - "#{@env.path.home}/.sisu/skin", - '/etc/sisu/skin', - "#{@env.path.processing}/external_document/skin" - ] - sk_doc,sk_dir="doc/#{skin}.rb","dir/skin_#{@env.stub_pwd}.rb" - skin_path.each do |v| #document skin priority 1 - if FileTest.file?("#{v}/#{sk_doc}") - @skin[:name],@skin[:type]="#{v}/#{sk_doc}",'doc' - break - end - end - unless @skin.length > 0 - skin_path.each do |v| #directory skin priority 2 - if FileTest.file?("#{v}/#{sk_dir}") - @skin[:name],@skin[:type]="#{v}/#{sk_dir}",'dir' - break - end - end - end - @skin - end - def sisupod_build #see also sisupod in sysenv - @rgx_rb_image=/["'](\S+?\.(?:png|jpg|gif))["']/ - @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ - @rgx_skin=/^\s+:skin:\s+(\S+)/ - @rgx_doc_import=/^%\s\s*\|(\S+?\.ss[ti])\|@\|\^\|>>ok/ - use_file=@opt.fns =~/(?:\.ssm|\.ssm\.sst)$/ \ - ? "#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst" \ - : @opt.fns - file_array=IO.readlines(use_file,'') - skin,images,doc_import=[],[],[] - file_array.each do |f| #% work area - if f !~/^%+\s/ - skin << f.scan(@rgx_skin).uniq.flatten if f =~@rgx_skin - if f !~/^%+\s/ \ - and f =~@rgx_image - images << f.scan(@rgx_image).uniq - end - elsif f =~/^%\s/ \ - and @opt.fns =~/\.ssm\.sst$/ - doc_import << f.scan(@rgx_doc_import).uniq if f =~@rgx_doc_import - end - end - docskin=nil - if skin \ - and skin.length > 0 - docskin=skin.pop.flatten.join - skin_source=select(docskin) - else - skin_source=select - end - docskin_place="#{@env.path.processing}/sisupod/_sisu/skin/#{skin_source[:type]}" - if skin_source[:type] =~/dir/ - docskin_with_path="#{docskin_place}/skin_#{@env.stub_pwd}.rb" - docskin=[docskin_with_path.gsub(/.+?\/(skin_\S+?)\.rb/,'\1')] - docskin='skin_sisupod' - end - if skin_source \ - and docskin #imperfect, revisit - unless skin_source[:name].nil? \ - or skin_source[:name].empty? - cp_r(skin_source[:name],"#{docskin_place}/#{docskin}.rb") - skinfile_array=IO.readlines(skin_source[:name],'') - para_images=[] - skinfile_array.each do |f| #% work area - unless f =~/^%+ / #hmmm - images << f.scan(@rgx_rb_image).uniq if f =~@rgx_rb_image #and FileTest.file?(f.scan(@rgx_rb_image).uniq) - #does not really discriminate, may duplicate images in sisu file, and may take images from default image pool - end - end - end - end - #1. mapping in doc dir? - #2. need images used by skin, scan skin?? - if images \ - and images.length > 1 - images.flatten! - images.uniq! - images.delete_if {|x| x =~/https?:\/\// } - #images.sort! - image_path_pwd='_sisu/image' - path_pod_conf="#{@env.path.processing}/sisupod/_sisu" - images_path_pod="#{path_pod_conf}/image" - #unattractive hard coding ... ! - images_pwd="#{@env.path.pwd}/#{image_path_pwd}" - ##sequence copies base images, defaults used in all html outputs - #image_source_base='/usr/share/sisu/image' - #dir_pwd=Dir.pwd - #Dir.chdir(image_source_base) - #base_images=Dir.glob('*') - #base_images.each do |i| - # cp_r(i,"#{images_path_pod}/#{i}") - #end - #Dir.chdir(dir_pwd) - if FileTest.directory?(image_path_pwd) - images=images.uniq - images.each do |i| - cp_r("#{images_pwd}/#{i}","#{images_path_pod}/#{i}") if FileTest.file?("#{images_pwd}/#{i}") - end - #chmod(0755, dir_images_www) - else puts "\tWARN, did not find - #{image_path_pod}" - end - end - x=@env.document_language_versions_found #check multiple document language versions (param not used) - if doc_import.flatten.length > 0 \ - and @opt.fns =~/\.ssm\.sst$/ - doc_import.flatten.each do |f| - cp_r("#{@env.path.pwd}/#{f}","#{@env.path.processing}/sisupod/#{f}") - end - end - if x[:f] \ - and x[:f].length > 1 #store multiple document language versions, sisupod - x[:f].each do |f| - cp_r("#{@env.path.pwd}/#{f}","#{@env.path.processing}/sisupod/#{f}") - end - elsif @opt.fns =~/\.ssm\.sst/ - ssm=@opt.fns.gsub(/\.ssm\.sst/,'.ssm') - cp_r("#{@env.path.pwd}/#{ssm}","#{@env.path.processing}/sisupod/#{ssm}") - else cp_r("#{@env.path.pwd}/#{@opt.fns}","#{@env.path.processing}/sisupod/#{@opt.fns}") - end #NB not all possibilies met, revisit, also in case of composite file may wish to add README - end - def sisupod_7zip #look at later - mkdir_p(@local_path) unless FileTest.directory?(@local_path) - system(%{ - cd #{@env.path.processing} - echo "SiSU sisupod #{@ver[:version]}" > sisu_zip.txt - #7zip -qz #{@opt.fns}.7z sisu_zip.txt < sisu_zip.txt - 7zr a -t7z -m0=lzma -mx=9 -ms=on #{@zipfile}.7z sisu_zip.txt - 7zr a -t7z -m0=lzma -mx=9 -ms=on #{@zipfile}.7z sisupod - #7zip -qr #{@zipfile}.7z sisupod - mv #{@zipfile}.7z #{@local_path}/. & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@opt.fns}.7z").blue_tab unless @opt.cmd =~/q/ - end - def sisupod_zip - mkdir_p(@local_path) unless FileTest.directory?(@local_path) - system(%{ - cd #{@env.path.processing} - echo "SiSU sisupod #{@ver[:version]}" > sisu_zip.txt - zip -qz #{@zipfile}.zip sisu_zip.txt < sisu_zip.txt - zip -qr #{@zipfile}.zip sisupod - mv #{@zipfile}.zip #{@local_path}/. & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@zipfile}.zip").blue_tab if @opt.cmd =~/[MVv]/ - end - end -end -__END__ -question?: should you permit the packing of multiple files in single .gz ? - - open @opt.fns, parse file - extract from file content: - images and copy each image from whatever image source to _sisu/sisupod/sisu/_sisu/image - skin and copy active skin from whatever source to _sisu/sisupod/sisu/_sisu/skin/doc - extract from skin images required by skin - - remove previously existing contents of _/sisu/sisupod & - make directory structure: - - _sisu - 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] - -sisu - _sisu - sisurc.yml - skin/ - dir/ - doc/ - misc/ - site/ - yaml/ - convert/ - standard_terms/ - image - processing - dal/ - tex/ - texinfo/ - tune/ - sisupod - -special case - -composite file (master), e.g. -SiSU.ssm |