From 22f6ac004b2b86d8554ddbc5650aa3f11d348d90 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 5 Sep 2011 11:04:42 -0400 Subject: v3: sisupod_v3 make (build); place (rsync); process (generate sisu output from) * sisupod v3 * modify pod dir structure, place sisu source in dir/[lang_code]/ e.g. dir/en/ * use tar.xz (.txz) * bundle all language version in pod * bundle .ssm and all included files for each selected language (rather than composited .ssm.sst file) (filename pattern) or named in files to be processed string * remote placement * sisu processing from sisupod v3 * rsync sisupod v3 * sysenv, check that tree is available and use as desired when available --- lib/sisu/v3/sisupod_make.rb | 194 +++++++++++++++++++++++++++----------------- 1 file changed, 120 insertions(+), 74 deletions(-) (limited to 'lib/sisu/v3/sisupod_make.rb') diff --git a/lib/sisu/v3/sisupod_make.rb b/lib/sisu/v3/sisupod_make.rb index 9c280df5..dd6c89c2 100644 --- a/lib/sisu/v3/sisupod_make.rb +++ b/lib/sisu/v3/sisupod_make.rb @@ -66,41 +66,38 @@ module SiSU_Doc require_relative 'particulars' # particulars.rb def initialize(opt) @opt=opt - m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + m=/.+\/(?:src\/)?(\S+)/im @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.processing_path.processing}/sisupod" - @v=if @opt.cmd =~/[VM]/; 'v' - else '' - end + @v=(@opt.cmd =~/[VM]/) ? 'v' : '' @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) @file=@particulars.file - @local_path="#{@file.output_path.sisupod.dir}" #@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 + @local_path="#{@file.output_path.sisupod.dir}" + @zipfile=(@opt.fns =~/\.ssm\.sst$/) \ + ? @opt.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm') + : @opt.fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') mkdir_p(pod_path) unless FileTest.directory?(pod_path) rm_rf("#{@env.processing_path.processing}sisupod/*") if FileTest.directory?("#{@env.processing_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 + ? SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (txz)',@opt.fns).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (txz)',@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://#{@file.output_path.sisupod.dir}/#{@zipfile}.zip").warn if @opt.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,'Make sisu document (txz) and place in output directory',"#{@opt.fns} -> file://#{@file.output_path.sisupod.dir}/#{@zipfile}.txz").warn if @opt.cmd =~/[MVv]/ end directories sisupod_build - sisupod_zip - #sisupod_7zip + sisupod_xz 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,'Make (zip (txz)) of sisu work directory',"#{@env.stub_pwd}\_#{@date}.txz").warn SiSU_Screen::Ansi.new(@opt.cmd,'').blue_tab end ans=@ans.response?('make sisupod of entire directory?') @@ -109,7 +106,7 @@ module SiSU_Doc end end def sisupod_zip_directory - sisupod_directory="sisupod-#{@env.stub_pwd}-#{@date}.ssp" # "sisupod-#{@env.stub_pwd}-#{@date}.zip" + sisupod_directory="sisupod-#{@env.stub_pwd}-#{@date}.ssp" unless File.symlink?('sisupod'); File.symlink(Dir.pwd,'sisupod') end re_base_dir='^sisupod/([^.][^/]*\.(ssm|ssi|sst)$|_sisu/)' @@ -131,15 +128,15 @@ module SiSU_Doc 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(@opt.cmd,'Share SiSU Document (tar xz)',@opt.fns).green_hi_blue + SiSU_Screen::Ansi.new(@opt.cmd,'Zipped directory (tgz)',sisupod_directory).warn SiSU_Screen::Ansi.new('',sisupod_directory).blue_tab end end def directories - SiSU_Env::Info_env.new.sisupod + SiSU_Env::Info_env.new.sisupod_v3(@opt) end - def select(skin='') # skin loading logic here + def select_skin(skin='') #skin loading logic here load "#{SiSU_lib}/defaults.rb" @skin={} skin_path = [ @@ -165,37 +162,59 @@ module SiSU_Doc end @skin end - def sisupod_build #see also sisupod in sysenv + def images_extract(f,images) + rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ + if f !~/^%+\s/ \ + and f =~rgx_image + images << f.scan(rgx_image).uniq + end + images.flatten + end + def sisupod_build #see also sisupod in sysenv + @pwd=Dir.pwd @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/ + @rgx_doc_import=/^<<\s*(\S+?\.ss[ti])/ use_file=@opt.fns =~/(?:\.ssm|\.ssm\.sst)$/ \ ? @opt.fns.gsub(/\.ssm\.sst$/,'.ssm') : @opt.fns file_array=IO.readlines(use_file,'') skin,images,doc_import=[],[],[] - file_array.each do |f| #% work area + doc_import_dir=@opt.sub_location + 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 + images=images_extract(f,images) + end + if use_file =~/\.ssm$/ + doc_import << f.scan(@rgx_doc_import) if f =~@rgx_doc_import + end + end + end + if doc_import.length > 0 + doc_import=doc_import.uniq.flatten + doc_import.each do |fn| + file_array=IO.readlines(fn,'') + file_array.each do |f| #% work area + if f !~/^%+\s/ \ + and f =~@rgx_image + images=images_extract(f,images) + end 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) + skin_source=select_skin(docskin) else - skin_source=select + skin_source=select_skin end - docskin_place="#{@env.processing_path.processing}/sisupod/_sisu/skin/#{skin_source[:type]}" + docskin_place="#{@env.processing_path.processing}/sisupod/doc/_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')] @@ -208,9 +227,9 @@ module SiSU_Doc 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 + 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) + images << f.scan(@rgx_rb_image).uniq if f =~@rgx_rb_image #does not really discriminate, may duplicate images in sisu file, and may take images from default image pool end end @@ -224,11 +243,12 @@ module SiSU_Doc images.uniq! images.delete_if {|x| x =~/https?:\/\// } #images.sort! - image_path_pwd='_sisu/image' + path_pod="#{@env.processing_path.processing}/sisupod" path_pod_conf="#{@env.processing_path.processing}/sisupod/_sisu" - images_path_pod="#{path_pod_conf}/image" + images_path_pod="#{path_pod}/image" #unattractive hard coding ... ! - images_pwd="#{@env.path.pwd}/#{image_path_pwd}" + image_path='_sisu/image' + images_pwd="#{@env.path.pwd}/#{image_path}" ##sequence copies base images, defaults used in all html outputs #image_source_base='/usr/share/sisu/image' #dir_pwd=Dir.pwd @@ -238,58 +258,67 @@ module SiSU_Doc # cp_r(i,"#{images_path_pod}/#{i}") #end #Dir.chdir(dir_pwd) - if FileTest.directory?(image_path_pwd) + if FileTest.directory?(images_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}" + else puts "\tWARN, did not find - #{images_pwd} #{images_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.processing_path.processing}/sisupod/#{f}") + if doc_import.length > 0 \ + and use_file =~/\.ssm$/ + doc_import.each do |f| + cp_r("#{@env.path.pwd}#{doc_import_dir}/#{f}","#{@env.processing_path.processing}/sisupod/doc/#{@opt.lng}/#{f}") end end + x=@env.document_language_versions_found #check multiple document language versions (param not used) if x[:f] \ - and x[:f].length > 1 #store multiple document language versions, sisupod + and x[:f].length > 0 #store multiple document language versions, sisupod x[:f].each do |f| - cp_r("#{@env.path.pwd}/#{f}","#{@env.processing_path.processing}/sisupod/#{f}") + (use_file =~/\.ssm$/) \ + ? cp_r("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}","#{@env.processing_path.processing}/sisupod/doc/#{f[:l]}/#{f[:n]}") + : cp_r("#{@env.path.pwd}/#{f[:f]}","#{@env.processing_path.processing}/sisupod/doc/#{f[:l]}/#{f[:n]}") end - elsif @opt.fns =~/\.ssm\.sst/ - ssm=@opt.fns.gsub(/\.ssm\.sst/,'.ssm') - cp_r("#{@env.path.pwd}/#{ssm}","#{@env.processing_path.processing}/sisupod/#{ssm}") - else cp_r("#{@env.path.pwd}/#{@opt.fns}","#{@env.processing_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 + def sisupod_xz mkdir_p(@file.output_path.sisupod.dir) unless FileTest.directory?(@file.output_path.sisupod.dir) - system(%{ - cd #{@env.processing_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 #{@file.place_file.sisupod.dir} & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@opt.fns}.7z").blue_tab unless @opt.cmd =~/q/ + tree=(@opt.cmd =~/[vVM]/ \ + && SiSU_Env::System_call.new.program_found?('tree')) \ + ? 'tree sisupod' + : '' + if FileTest.directory?(@env.processing_path.processing) + Dir.chdir(@env.processing_path.processing) + system(%{ + #{tree} + tar -cJf #{@zipfile}.txz sisupod + #echo "#{@file.place_file.sisupod.dir}" + mv #{@zipfile}.txz #{@file.place_file.sisupod.dir} & + rm -r sisupod/* + }) + Dir.chdir(@env.path.pwd) + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz").blue_tab unless @opt.cmd =~/q/ + else + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz not built").blue_tab + end end def sisupod_zip mkdir_p(@file.output_path.sisupod.dir) unless FileTest.directory?(@file.output_path.sisupod.dir) - system(%{ - cd #{@env.processing_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 #{@file.place_file.sisupod.dir} & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@zipfile}.zip").blue_tab if @opt.cmd =~/[MVv]/ + if FileTest.directory?(@env.processing_path.processing) + Dir.chdir(@env.processing_path.processing) + system(%{ + 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 #{@file.place_file.sisupod.dir} & + rm -r sisupod/* + }) + Dir.chdir(@env.path.pwd) + SiSU_Screen::Ansi.new('',"#{@zipfile}.zip").blue_tab if @opt.cmd =~/[MVv]/ + else + SiSU_Screen::Ansi.new('',"#{@zipfile}.zip not built").blue_tab + end end end end @@ -305,16 +334,33 @@ question?: should you permit the packing of multiple files in remove previously existing contents of _/sisu/sisupod & make directory structure: +v3 --> _sisu sisupod - sisu - content.sst [file content] - filename.sst [link to content.sst] + doc + manifest.txt + en/content.sst [file content] + fr/content.sst _sisu conf skin/ - doc [relevant skin if any other than default] - image [all images for specific document gathered here] + doc [relevant skin if any other than default] + image (ln -s ../../image) + audio (ln -s ../../audio) + video (ln -s ../../video) + image [all images for specific document gathered here] + audio + video + +v2 --> + _sisu + sisupod + content.sst [file content] + filename.sst [link to content.sst] + _sisu/ + skin/ + doc [relevant skin if any other than default] + image/ [all images for specific document gathered here] sisu _sisu -- cgit v1.2.3