From fed01af686fb007454eafff9127b16a6516b50c0 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 17 Jun 2012 22:38:31 -0400 Subject: v3: shared_sisupod_source, common build for sisu (markup) source representations * to be used by sisupod.txz, git, (and src) * sisupod_make (--sisupod) * share_source (--source) NOTE not used git at present * changed representation of shared sisu source, include related files in directory rather than just markup file [reason for version bump] NOTE there are no changes to sisu markup (only the sharing of source files) --- data/doc/sisu/CHANGELOG_v3 | 9 + lib/sisu/v3/constants.rb | 18 +- lib/sisu/v3/git.rb | 50 ++--- lib/sisu/v3/hub.rb | 79 +++++--- lib/sisu/v3/manifest.rb | 6 +- lib/sisu/v3/options.rb | 22 +- lib/sisu/v3/param.rb | 2 +- lib/sisu/v3/po4a.rb | 4 +- lib/sisu/v3/share_src.rb | 37 ++-- lib/sisu/v3/shared_sisupod_source.rb | 377 +++++++++++++++++++++++++++++++++++ lib/sisu/v3/sisupod_make.rb | 305 +++------------------------- lib/sisu/v3/sysenv.rb | 118 +++++------ lib/sisu/v3/urls.rb | 8 +- 13 files changed, 602 insertions(+), 433 deletions(-) create mode 100644 lib/sisu/v3/shared_sisupod_source.rb diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3 index 96a5d120..4e9298af 100644 --- a/data/doc/sisu/CHANGELOG_v3 +++ b/data/doc/sisu/CHANGELOG_v3 @@ -21,6 +21,15 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_3.3.0.orig.tar.xz sisu_3.3.0-1.dsc sisu_3.3.0-1.debian.tar.gz + * v3: shared_sisupod_source, common build for sisu (markup) source representations + to be used by sisupod.txz, git, (and src) + * sisupod_make (--sisupod) + * share_source (--source) + NOTE not used git at present + * changed representation of shared sisu source, include related files in + directory rather than just markup file [reason for version bump] + NOTE there are no changes to sisu markup (only the sharing of source files) + %% 3.2.12.orig.tar.xz (2012-06-06:23/3) http://git.sisudoc.org/?p=code/sisu.git;a=log;h=refs/tags/sisu_3.2.12 http://git.sisudoc.org/?p=code/sisu.git;a=log;h=refs/tags/debian/sisu_3.2.12-1 diff --git a/lib/sisu/v3/constants.rb b/lib/sisu/v3/constants.rb index c95178ea..2921b670 100644 --- a/lib/sisu/v3/constants.rb +++ b/lib/sisu/v3/constants.rb @@ -195,6 +195,7 @@ Px={ lv5: '.', lv6: '.', } +Px[:lng_lst_rgx]=Px[:lng_lst].join('|') Ep={ d_oebps: 'OEBPS', f_ncx: 'toc.ncx', @@ -223,16 +224,21 @@ Db={ col_info_note: 2500, } Gt={ - grotto: 'sisu:', + grotto: 'sisu_src', + git: 'sisu:', src: 'src', + pods: 'pods', + sisupod: 'sisupod', pod: 'pod', + files: 'files', + doc: 'doc', po: 'po4a/po', pot: 'po4a/pot', - image: 'mm/image', - audio: 'mm/audio', - video: 'mm/video', - conf: 'conf', - skin: 'conf/skin', #Gt[:skin: 'conf/skin/doc' + image: 'image', + audio: 'audio', + video: 'video', + conf: 'doc/_sisu', + skin: 'doc/_sisu/skin', #Gt[:skin: 'conf/skin/doc' } DISABLE={ epub: { diff --git a/lib/sisu/v3/git.rb b/lib/sisu/v3/git.rb index 313b46a9..7c0d573a 100644 --- a/lib/sisu/v3/git.rb +++ b/lib/sisu/v3/git.rb @@ -86,15 +86,15 @@ module SiSU_Git lng=(@md.opt.lng) ? (@md.opt.lng) : (@md.i18n[0]) @git_path={ fnb: git_path_fnb, - src: git_path_fnb + '/' + Gt[:src] + '/' + lng, + doc: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:doc] + '/' + lng, po: git_path_fnb + '/' + Gt[:po] + '/' + lng, pot: git_path_fnb + '/' + Gt[:pot], - conf: git_path_fnb + '/' + Gt[:conf], - skin: git_path_fnb + '/' + Gt[:skin], - image: git_path_fnb + '/' + Gt[:image], - audio: git_path_fnb + '/' + Gt[:audio], - video: git_path_fnb + '/' + Gt[:video], - conf: git_path_fnb + '/' + Gt[:conf] + conf: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:conf], + skin: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:skin], + image: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:image], + audio: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:audio], + video: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:video], + conf: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:conf] } SiSU_DAL::Source.new(@opt).read # -m end @@ -107,9 +107,9 @@ module SiSU_Git def read create_file_structure_git populate.sisusrc_files - if program_found? - git_commit - end + #if program_found? + # git_commit + #end unless @opt.cmd =~/q/ @opt.cmd=~/[MVvz]/ \ ? SiSU_Screen::Ansi.new(@opt.cmd,'Git path',@git_path[:fnb]).green_hi_blue @@ -123,7 +123,7 @@ module SiSU_Git end def make_dir_fnb FileUtils::mkdir_p(@git_path[:fnb]) unless FileTest.directory?(@git_path[:fnb]) - FileUtils::mkdir_p(@git_path[:src]) unless FileTest.directory?(@git_path[:src]) + FileUtils::mkdir_p(@git_path[:doc]) unless FileTest.directory?(@git_path[:doc]) FileUtils::mkdir_p(@git_path[:po]) unless FileTest.directory?(@git_path[:po]) FileUtils::mkdir_p(@git_path[:pot]) unless FileTest.directory?(@git_path[:pot]) FileUtils::mkdir_p(@git_path[:conf]) unless FileTest.directory?(@git_path[:conf]) @@ -141,14 +141,16 @@ module SiSU_Git end end def git_commit - if FileTest.directory?("#{@git_path[:fnb]}") - pwd=Dir.pwd - Dir.chdir(@git_path[:fnb]) - system(" - git add . \ - && git commit -a - ") - Dir.chdir(pwd) + if program_found? + if FileTest.directory?("#{@git_path[:fnb]}") + pwd=Dir.pwd + Dir.chdir(@git_path[:fnb]) + system(" + git add . \ + && git commit -a + ") + Dir.chdir(pwd) + end end end def populate @@ -158,12 +160,12 @@ module SiSU_Git end def copy_src_head if @opt.f_pth[:lng] - FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{@opt.fns}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{@opt.fns}",@git_path[:doc]) elsif @opt.fns =~/\.ssm\.sst/ ssm=@opt.fns.gsub(/\.ssm\.sst/,'.ssm') - FileUtils::cp_r("#{@env.path.pwd}/#{ssm}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{ssm}",@git_path[:doc]) else - FileUtils::cp_r("#{@env.path.pwd}/#{@opt.fns}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{@opt.fns}",@git_path[:doc]) end end def copy_related_sst_ssi @@ -177,9 +179,9 @@ module SiSU_Git end doc_import.each do |f| if @opt.f_pth[:lng] - FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{f}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{f}",@git_path[:doc]) else - FileUtils::cp_r("#{@env.path.pwd}/#{f}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{f}",@git_path[:doc]) end end end diff --git a/lib/sisu/v3/hub.rb b/lib/sisu/v3/hub.rb index d5ab7bdd..f221c9a8 100644 --- a/lib/sisu/v3/hub.rb +++ b/lib/sisu/v3/hub.rb @@ -64,12 +64,11 @@ module SiSU class OptionLoopFiles def initialize(opt) @opt=opt - @r=Px[:lng_lst].join('|') + @r=Px[:lng_lst_rgx] end def loop_files_on_given_option @opt.files.each_with_index do |fno,i| - @opt.fns=fno - @opt.fno=fno + @opt.fno,@opt.fns=fno,fno @opt.f_pth=@opt.f_pths[i] if fno !~/\.-sst$/ @opt.pth=@opt.paths[i] @@ -113,7 +112,7 @@ module SiSU end end def manifest_on_files_translated - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] number_of_files={} @opt.files.each_with_index do |fns,i| fn=fns.gsub(/(?:~(?:#{@r}))?\.ss[tm]$/,'') @@ -385,14 +384,6 @@ p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on SiSU_DAL::Source.new(@opt).read end end - if @opt.act[:share_source][:set]==:on - if @opt.fno =~/\.ssm$/ - SiSU_Screen::Ansi.new(@opt.cmd,'WARNING: share text source (--source) not available for composite files (.ssm),', 'composite (.ssm) source documents may be shared as a sisupod (--sisupod) (.txz)').warn unless @opt.cmd =~/q/ - else - requires('share_src') # -s share_src.rb - SiSU_Markup::Source.new(@opt).read - end - end if @opt.act[:qrcode][:set]==:on #% --qrcode, -Q requires('qrcode') # -Q qrcode.rb SiSU_QRcode::Source.new(@opt).read @@ -468,34 +459,66 @@ p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on end end def post_loop_files_on_given_option_do - if @opt.act[:sisupod][:set]==:on #% --sisupod, -S make sisupod - requires('sisupod_make') # -S sisupod_make.rb + if @opt.act[:share_source][:set]==:on \ + or @opt.act[:sisupod][:set]==:on \ + or @opt.act[:git][:set]==:on begin + requires('shared_sisupod_source') OptionLoopFiles.new(@opt).loop_files_on_given_option do - SiSU_Doc::Source.new(@opt).read + SiSU_Source::SiSUpodSource.new(@opt).read + end + if @opt.act[:share_source][:set]==:on +#REDO + requires('share_src') # -s share_src.rb + begin + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Markup::Source.new(@opt).read + end + end + end + if @opt.act[:sisupod][:set]==:on #% --sisupod, -S make sisupod + requires('sisupod_make') # -S sisupod_make.rb + begin + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Doc::Source.new(@opt).sisupod_tar_xz + end + end + end + if @opt.act[:git][:set]==:on #% --git, -g sisu git + requires('git') # -g git.rb + begin + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Git::Source.new(@opt).read + end + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Git::Source.new(@opt).git_commit + end + end end ensure - OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do - SiSU_Doc::Source.new(@opt).sisupod_tar_xz + path_pod=@env.processing_path.processing_sisupod(@opt).paths + unless @opt.cmd =~/M/ + FileUtils::rm_rf("#{path_pod[:sisupod]}/*") if FileTest.directory?(path_pod[:sisupod]) + #FileUtils::rm_rf("#{path_pod[:fnb]}/*") if FileTest.directory?(path_pod[:fnb]) end end end - if @opt.act[:images][:set]==:on #% --images, -j - requires('shared_images') - OptionLoopFiles.new(@opt).loop_files_on_given_option do - SiSU_Images::Source.new(@opt).read # -j shared_images.rb - end - end if @opt.act[:po4a][:set]==:on #% --po4a, -P requires('po4a') - OptionLoopFiles.new(@opt).loop_files_on_given_option do - SiSU_Po4a::Source.new(@opt).read # -P po4a.rb + begin + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Po4a::Source.new(@opt).read # -P po4a.rb + end + ensure end end - if @opt.act[:git][:set]==:on #% --git, -g sisu git - requires('git') + if @opt.act[:images][:set]==:on #% --images, -j + requires('shared_images') OptionLoopFiles.new(@opt).loop_files_on_given_option do - SiSU_Git::Source.new(@opt).read # -g git.rb + SiSU_Images::Source.new(@opt).read # -j shared_images.rb end end if @opt.cmd =~/T/ #% -T termsheet/standard form diff --git a/lib/sisu/v3/manifest.rb b/lib/sisu/v3/manifest.rb index 092418fb..20983d7f 100644 --- a/lib/sisu/v3/manifest.rb +++ b/lib/sisu/v3/manifest.rb @@ -475,12 +475,10 @@ WOK end end def source_tests - if @md.fns =~/\.ssm\.sst$/ #% decide whether to extract and include requested/required documents - req=@md.fns + if @md.fno =~/\.ssm$/ #% decide whether to extract and include requested/required documents if FileTest.file?(@f.place_file.src.dir)==true pth=@f.output_path.src.dir - rel=@f.output_path.src.rel - #rel=@f.output_path.src.rel_sm + rel=@f.output_path.src.rel_sm url=@f.output_path.src.url id,file='Markup Composite File (SiSU source)',@f.base_filename.src summarize_sources(id,file,pth,rel,url) diff --git a/lib/sisu/v3/options.rb b/lib/sisu/v3/options.rb index c7789f3a..7aa3622d 100644 --- a/lib/sisu/v3/options.rb +++ b/lib/sisu/v3/options.rb @@ -61,16 +61,16 @@ module SiSU_Commandline require_relative 'sysenv' # sysenv.rb @@base_path=nil class Options - attr_accessor :cmd,:mod,:act,:dir_structure_by,:f_pths,:files,:files_mod,:base_path,:base_stub,:sub_location,:paths,:lngs,:f_pth,:pth,:fno,:fns,:fnb,:fnc,:fncb,:lng,:lng_base,:what + attr_accessor :cmd,:mod,:act,:dir_structure_by,:f_pths,:files,:files_mod,:base_path,:base_stub,:sub_location,:paths,:lngs,:f_pth,:pth,:fno,:fns,:fnb,:fnc,:fng,:fncb,:lng,:lng_base,:what def initialize(a) - @cmd,@f_pth,@pth,@fno,@fns,@fnb,@fnc,@fncb,@what,@lng,@lng_base,@base_path,@base_stub,@sub_location='','','','','','','','','','','','','','' + @cmd,@f_pth,@pth,@fno,@fns,@fnb,@fnc,@fng,@fncb,@what,@lng,@lng_base,@base_path,@base_stub,@sub_location='','','','','','','','','','','','','','' @f_pths,@files,@files_mod,@paths,@mod,@act=Array.new(5){[]} @env=SiSU_Env::InfoEnv.new @lng_base=@env.language_default_set @dir_structure_by=SiSU_Env::EnvCall.new.output_dir_structure.by? @@base_path ||=Dir.pwd @base_path=@@base_path - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ @base_stub=@base_path.gsub(u,'\1') @a=sisu_glob_rules(a) @@ -139,8 +139,7 @@ module SiSU_Commandline end end end - r=Px[:lng_lst].join('|') - r=r.gsub(/\|#{@lng_base}\|/,'|') + r=Px[:lng_lst_rgx].gsub(/\|#{@lng_base}\|/,'|') @lang_regx=%r{(?:#{r})} z=if find_flag (f.length > 0) \ @@ -225,7 +224,7 @@ module SiSU_Commandline chdir #{pwd} ") Dir.chdir(pt.realpath.to_s + '/sisupod/doc') - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] Dir.entries("#{fullname}/sisupod/doc").each do |d_lng| if d_lng =~/^(?:#{r})$/ Dir.chdir(pt.realpath.to_s + "/sisupod/doc/#{d_lng}") @@ -816,12 +815,21 @@ module SiSU_Commandline @lng_base end def fno - @fno=if @fno and not @fno.empty? + @fno=if @fno \ + and not @fno.empty? @fno else fns[/(.+?(?:sst|ssm))(?:\.sst)?/,1] end end + def fng + @fng=if @fng \ + and not @fng.empty? + @fng + else + fno.gsub(/(?:~(?:#{Px[:lng_lst_rgx]}))?(\.ss[tm])$/,'\1') + end + end def fns @fns end diff --git a/lib/sisu/v3/param.rb b/lib/sisu/v3/param.rb index 78e42bd4..f6084aab 100644 --- a/lib/sisu/v3/param.rb +++ b/lib/sisu/v3/param.rb @@ -1054,7 +1054,7 @@ module SiSU_Param attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:site_skin,:sisu,:sisu_version,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:num_top,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:markup_version,:markup_declared,:flag_tables,:vocabulary,:doc_skin,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:dgst_skin,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy def initialize(fns_array,opt) @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@site_skin=@sisu=@sisu_version=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@num_top=@toc_lev_limit=@flag_tables=@vocabulary=@doc_skin=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@dgst_skin=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=nil - @data,@path,@fns,@opt=fns_array,opt.pth,opt.fns,opt #@data used as data + @data,@path,@fns,@fno,@opt=fns_array,opt.pth,opt.fns,opt.fno,opt #@data used as data @flag_tables,@set_header_title,@set_heading_top,@set_heading_seg,@heading_seg_first_flag,@flag_promo,@book_idx=false,false,false,false,false,false,false @seg_autoname_safe=true @daisy,@sem_tag=false,false diff --git a/lib/sisu/v3/po4a.rb b/lib/sisu/v3/po4a.rb index da066daf..7ce825ee 100644 --- a/lib/sisu/v3/po4a.rb +++ b/lib/sisu/v3/po4a.rb @@ -60,6 +60,7 @@ module SiSU_Po4a require_relative 'dal' # dal.rb require_relative 'sysenv' # sysenv.rb include SiSU_Env + require_relative 'composite' # composite.rb require_relative 'shared_metadata' # shared_metadata.rb require_relative 'po4a_set' # po4a_set.rb include SiSU_Param @@ -72,8 +73,7 @@ module SiSU_Po4a #unless @opt.fns =~/(.+?\.(?:-|ssm\.)?sst)$/ # puts "#{@opt.fns} not a processed file type" #end - r=Px[:lng_lst].join('|') - r=r.gsub(/\|en\|/,'|') + r=Px[:lng_lst_rgx].gsub(/\|en\|/,'|') @lang_regx=%r{(?:#{r})} if opt.fns =~/\S+?~#{@lang_regx}\.ss[mti]/ \ and opt.f_pth[:lng]!=@opt.lng_base diff --git a/lib/sisu/v3/share_src.rb b/lib/sisu/v3/share_src.rb index c4900f5f..2c446ecb 100644 --- a/lib/sisu/v3/share_src.rb +++ b/lib/sisu/v3/share_src.rb @@ -56,42 +56,31 @@ =end module SiSU_Markup + require_relative 'shared_sisupod_source' # shared_sisupod_source.rb + include SiSU_Source require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd - class Source - def initialize(opt) + class Source < SiSU_Source::SiSUpodSource + def initialize(opt,build=nil,place=nil) + super(opt,build,place) @opt=opt - @env=SiSU_Env::InfoEnv.new(@opt.fns) - md=SiSU_Param::Parameters.new(@opt).get - @file=SiSU_Env::FileOp.new(md) - stub=@opt.fnb.gsub(/~[a-z]+$/,'') end def read unless @opt.cmd =~/q/ @opt.cmd=~/[MVvz]/ \ ? SiSU_Screen::Ansi.new(@opt.cmd,'Share Document Source!',@opt.fns).green_hi_blue : SiSU_Screen::Ansi.new(@opt.cmd,'Share Document Source!',@opt.fns).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,"Copy sisu markup file to output directory","#{@opt.fns} -> #{@file.output_path.src.dir}").warn if @opt.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,"Copy sisu markup file to output directory","#{@opt.fno} -> #{@file.output_path.src.dir}").warn if @opt.cmd =~/[MVv]/ end - FileUtils::mkdir_p(@file.output_path.src.dir) unless FileTest.directory?(@file.output_path.src.dir) - if FileTest.directory?(@file.output_path.src.dir) - unless @opt.fns =~/\.ssm$/ - if FileTest.file?(@opt.fns) - FileUtils::cp(@opt.fns,@file.output_path.src.dir) - else STDERR.puts %{\t*WARN* did not find - "#{@opt.fns}"} - end - else - req=@opt.fns.gsub(/(.+?\.ssm)$/,'\1.sst') - file="#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst" - if FileTest.file?(file) - FileUtils::cp(file,"#{@file.output_path.src.dir}/#{req}") - else STDERR.puts "*WARN* did not find #{file} to copy" - end - end + if FileTest.directory?(@path_pod[:fnb]) + FileUtils::mkdir_p(@file.output_path.src.dir) unless FileTest.directory?(@file.output_path.src.dir) + v=(@opt.cmd =~/M/) ? 'v' : '' + system(%{ + rsync -a#{v} #{@path_pod[:fnb]} #{@file.output_path.sisupod.dir} + }) else - SiSU_Screen::Ansi.new(@opt.cmd,"*WARN* Output directory does not exist","#{@opt.fns} -> #{@file.output_path.src.dir}").warn if @opt.cmd =~/[MVv]/ - exit + SiSU_Screen::Ansi.new('',"#{@opt.fno} not available").blue_tab if @opt.cmd=~/[MVv]/ end end end diff --git a/lib/sisu/v3/shared_sisupod_source.rb b/lib/sisu/v3/shared_sisupod_source.rb new file mode 100644 index 00000000..2aff984c --- /dev/null +++ b/lib/sisu/v3/shared_sisupod_source.rb @@ -0,0 +1,377 @@ +# encoding: utf-8 +=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, 2008, 2009, 2010, 2011, 2012 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 . + + 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: create sisupod filetype and copy it to output directory! + +=end +module SiSU_Source + include SiSU_Env + class SiSUpodSource + require_relative 'sysenv' # sysenv.rb + require_relative 'particulars' # particulars.rb + def initialize(opt,build=nil,place=nil) + @opt=opt + m=/.+\/(?:src\/)?(\S+)/im + @date=SiSU_Env::InfoDate.new.dt + @env=SiSU_Env::InfoEnv.new(@opt.fns) + @ver=SiSU_Env::InfoVersion.instance.get_version + @v=(@opt.cmd =~/[VM]/) ? 'v' : '' + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + @file=@particulars.file + @local_path="#{@file.output_path.sisupod.dir}" + processing_sisupod=@env.processing_path.processing_sisupod(@opt) + processing_sisupod.make + path_pod=processing_sisupod.paths[:sisupod] + path_pod_fnb=processing_sisupod.paths[:fnb] + FileUtils::mkdir_p(path_pod) unless FileTest.directory?(path_pod) + @path_pod={ + fnb: path_pod_fnb, + pod: path_pod, + doc: path_pod + '/' + Gt[:doc] + '/' + @opt.lng, + po: path_pod + '/' + Gt[:po] + '/' + @opt.lng, + pot: path_pod + '/' + Gt[:pot], + conf: path_pod + '/' + Gt[:conf], + skin: path_pod + '/' + Gt[:skin], + image: path_pod + '/' + Gt[:image], + audio: path_pod + '/' + Gt[:audio], + video: path_pod + '/' + Gt[:video], + conf: path_pod + '/' + Gt[:conf] + } + end + def read + unless @opt.cmd =~/q/ + @opt.cmd=~/[MVv]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Assemble SiSU source',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_hi_blue + : '' + end + unless @opt.fns.empty? + directories + pod_source_build #this needs to be built in case of multi-lingual for all of them, before single pass tar + end + end + def directories + SiSU_Env::InfoEnv.new.sisupod_v3(@opt) + end + def select_skin(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', + "#{@path_pod[:pod]}/external_document/skin" #CHECK + ] + sk_doc,sk_dir="#{Gt[: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_path: "#{v}/#{sk_doc}", type: :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_path: "#{v}/#{sk_dir}", type: :dir } + break + end + end + end + @skin + end + def images_extract(f,images) # consider using param info + rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m + if f !~/^%+\s/ \ + and f =~rgx_image + images << f.scan(rgx_image).uniq + end + images.flatten + end + def pod_source_build + @pwd=Dir.pwd + @rgx_rb_image=/["']\S*?([a-zA-Z0-9_-]+?\.(?:png|jpg|gif))["']/ + @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ + @rgx_skin=/^\s+:skin:\s+(\S+)/ + @rgx_doc_import=/^<<\s*(\S+?\.ss[ti])/ + file_array=IO.readlines(@opt.fno,'') + skin,images,doc_import=[],[],[] + 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 + f=f.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image') # embedded symbol (image) + if f !~/^%+\s/ \ + and f =~@rgx_image + images=images_extract(f,images) + end + if @opt.fno =~/\.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 + end + end + docskin=nil + if skin \ + and skin.length > 0 + docskin=skin.pop.flatten.join + skin_source=select_skin(docskin) + else + skin_source=select_skin + end + docskin_place="#{@path_pod[:skin]}/#{skin_source[:type].to_s}" + FileUtils::mkdir_p(docskin_place) + 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 skin_source[:name_path] + unless skin_source[:name_path].nil? \ + or skin_source[:name_path].empty? + if FileTest.file?(skin_source[:name_path]) + FileUtils::cp(skin_source[:name_path],"#{docskin_place}/#{docskin}.rb") + skinfile_array=IO.readlines(skin_source[:name_path],'') + para_images=[] + skinfile_array.each do |f| #% work area + unless f =~/^%+ / #hmmm + 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 + else STDERR.puts %{\t*WARN* did not find - "#{skin_source[:name_path]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + #1. mapping in doc dir? + #2. need images used by skin, scan skin?? + if images \ + and images.length > 1 + images=images.flatten.uniq + images.delete_if {|x| x =~/https?:\/\// } + #images=images.sort + FileUtils::mkdir_p(@path_pod[:image]) + #unattractive hard coding ... ! + 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 + #Dir.chdir(image_source_base) + #base_images=Dir.glob('*') + #base_images.each do |i| + # FileUtils::cp_r(i,"#{images_path_pod}/#{i}") + #end + #Dir.chdir(dir_pwd) + if FileTest.directory?(images_pwd) + images=images.uniq + images.each do |i| + if FileTest.file?("#{images_pwd}/#{i}") + FileUtils::cp("#{images_pwd}/#{i}","#{@path_pod[:image]}/#{i}") if FileTest.file?("#{images_pwd}/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{images_pwd}/#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + else STDERR.puts %{\t*WARN* did not find - #{images_pwd} #{@path_pod[:image]} [#{__FILE__}:#{__LINE__}]} + end + end + if doc_import.length > 0 \ + and @opt.fno =~/\.ssm$/ + doc_import.each do |f| + if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f}") + FileUtils::cp("#{@env.path.pwd}#{doc_import_dir}/#{f}","#{@path_pod[:doc]}/#{f}") + else STDERR.puts %{\t*WARN* did not find image - "#{@env.path.pwd}#{doc_import_dir}/#{f}" [#{__FILE__}:#{__LINE__}]} + end + end + end + x=@env.document_language_versions_found #check multiple document language versions (param not used) + if x[:f] \ + and x[:f].length > 0 #store multiple document language versions, sisupod + x[:f].each do |f| + FileUtils::mkdir_p(@path_pod[:doc]) unless FileTest.directory?(@path_pod[:doc]) + if f[:f] =~/\~(\S{2,3})\.ss[tm]$/ + lng_f=$1 + if @opt.lng == lng_f + if @opt.fno =~/\.ssm$/ + if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}") + FileUtils::cp("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + else + if FileTest.file?("#{@env.path.pwd}/#{f[:f]}") + cpy= :no + cpy=if f[:f] =~ /^#{@opt.f_pth[:lng_is]}\// \ + or f[:f] =~ /~#{@opt.f_pth[:lng_is]}\.sst/ + p "#{@env.path.pwd}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \ + and @opt.f_pth[:lng_is] == 'en' + p "#{@env.path.pwd}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + else :no + end + if cpy == :yes + FileUtils::cp("#{@env.path.pwd}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + end + else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + else + if @opt.fno =~/\.ssm$/ + if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}") + FileUtils::cp_r("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + else + if FileTest.file?("#{@env.path.pwd}/#{f[:f]}") + cpy= :no + cpy=if f[:f] =~ /^#{@opt.f_pth[:lng_is]}\// \ + or f[:f] =~ /~#{@opt.f_pth[:lng_is]}\.sst/ + p "#{@env.path.pwd}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \ + and @opt.f_pth[:lng_is] == 'en' + p "#{@env.path.pwd}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + else :no + end + if cpy == :yes + FileUtils::cp("#{@env.path.pwd}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + end + else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + end + end #NB not all possibilies met, revisit, also in case of composite file may wish to add README + end + end +end +__END__ +question?: should you permit the packing of multiple documents in single .xz ? + + 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: + +v3 --> + _sisu + sisupod + doc + manifest.txt + en/content.sst [file content] + fr/content.sst + _sisu + conf + skin/ + 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 + 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 diff --git a/lib/sisu/v3/sisupod_make.rb b/lib/sisu/v3/sisupod_make.rb index 984d807d..7b7957ab 100644 --- a/lib/sisu/v3/sisupod_make.rb +++ b/lib/sisu/v3/sisupod_make.rb @@ -56,285 +56,42 @@ =end module SiSU_Doc - include SiSU_Env - class Source - require_relative 'sysenv' # sysenv.rb + require_relative 'shared_sisupod_source' # shared_sisupod_source.rb + include SiSU_Source + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + class Source < SiSU_Source::SiSUpodSource require_relative 'response' # response.rb - require_relative 'particulars' # particulars.rb - def initialize(opt) - @opt=opt - m=/.+\/(?:src\/)?(\S+)/im - @date=SiSU_Env::InfoDate.new.dt - @env=SiSU_Env::InfoEnv.new(@opt.fns) - @ver=SiSU_Env::InfoVersion.instance.get_version - @ans=SiSU_Response::Response.new - pod_path="#{@env.processing_path.processing_sisupod(@opt)}" - @v=(@opt.cmd =~/[VM]/) ? 'v' : '' - @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) - @file=@particulars.file - @local_path="#{@file.output_path.sisupod.dir}" + def initialize(opt,build=nil,place=nil) + super(opt,build,place) @zipfile=@opt.fno.gsub(/(?:\~\S{2,3})?(\.ss[tm])$/,'\1') - FileUtils::mkdir_p(pod_path) unless FileTest.directory?(pod_path) - FileUtils::rm_rf("#{@env.processing_path.processing_sisupod(@opt)}/*") if FileTest.directory?("#{@env.processing_path.processing_sisupod(@opt)}") - end - def read - unless @opt.cmd =~/q/ - @opt.cmd=~/[MVv]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (txz)',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_hi_blue - : SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (txz)',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_title_hi - end - unless @opt.fns.empty? - 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_tar_xz - else - if @opt.cmd =~/[MVv]/ - 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?') - if ans; sisupod_zip_directory - end - end - end - def sisupod_zip_directory - 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/)' - 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 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::InfoEnv.new.sisupod_v3(@opt) - end - def select_skin(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.processing_path.processing_sisupod(@opt)}/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_path: "#{v}/#{sk_doc}", type: :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_path: "#{v}/#{sk_dir}", type: :dir } - break - end - end - end - @skin - end - def images_extract(f,images) # consider using param info - rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m - 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*?([a-zA-Z0-9_-]+?\.(?:png|jpg|gif))["']/ - @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ - @rgx_skin=/^\s+:skin:\s+(\S+)/ - @rgx_doc_import=/^<<\s*(\S+?\.ss[ti])/ - file_array=IO.readlines(@opt.fno,'') - skin,images,doc_import=[],[],[] - 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 - f=f.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image') # embedded symbol (image) - if f !~/^%+\s/ \ - and f =~@rgx_image - images=images_extract(f,images) - end - if @opt.fno =~/\.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 - end - end - docskin=nil - if skin \ - and skin.length > 0 - docskin=skin.pop.flatten.join - skin_source=select_skin(docskin) - else - skin_source=select_skin - end - docskin_place="#{@env.processing_path.processing_sisupod(@opt)}/doc/_sisu/skin/#{skin_source[:type].to_s}" - FileUtils::mkdir_p(docskin_place) - 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 skin_source[:name_path] - unless skin_source[:name_path].nil? \ - or skin_source[:name_path].empty? - if FileTest.file?(skin_source[:name_path]) - FileUtils::cp(skin_source[:name_path],"#{docskin_place}/#{docskin}.rb") - skinfile_array=IO.readlines(skin_source[:name_path],'') - para_images=[] - skinfile_array.each do |f| #% work area - unless f =~/^%+ / #hmmm - 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 - else STDERR.puts %{\t*WARN* did not find - "#{skin_source[:name_path]}" [#{__FILE__}:#{__LINE__}]} - end - end - end - #1. mapping in doc dir? - #2. need images used by skin, scan skin?? - if images \ - and images.length > 1 - images=images.flatten.uniq - images.delete_if {|x| x =~/https?:\/\// } - #images=images.sort - path_pod="#{@env.processing_path.processing_sisupod(@opt)}" - path_pod_conf="#{@env.processing_path.processing_sisupod(@opt)}/_sisu" - images_path_pod="#{path_pod}/image" - FileUtils::mkdir_p(images_path_pod) - #unattractive hard coding ... ! - 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 - #Dir.chdir(image_source_base) - #base_images=Dir.glob('*') - #base_images.each do |i| - # FileUtils::cp_r(i,"#{images_path_pod}/#{i}") - #end - #Dir.chdir(dir_pwd) - if FileTest.directory?(images_pwd) - images=images.uniq - images.each do |i| - if FileTest.file?("#{images_pwd}/#{i}") - FileUtils::cp("#{images_pwd}/#{i}","#{images_path_pod}/#{i}") if FileTest.file?("#{images_pwd}/#{i}") - else STDERR.puts %{\t*WARN* did not find image - "#{images_pwd}/#{i}" [#{__FILE__}:#{__LINE__}]} - end - end - else STDERR.puts %{\t*WARN* did not find - #{images_pwd} #{images_path_pod} [#{__FILE__}:#{__LINE__}]} - end - end - if doc_import.length > 0 \ - and @opt.fno =~/\.ssm$/ - doc_import.each do |f| - if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f}") - FileUtils::cp("#{@env.path.pwd}#{doc_import_dir}/#{f}","#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}/#{f}") - else STDERR.puts %{\t*WARN* did not find image - "#{@env.path.pwd}#{doc_import_dir}/#{f}" [#{__FILE__}:#{__LINE__}]} - end - end + @ans=SiSU_Response::Response.new + if @opt.cmd=~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,'Assemble source for sisu document',"#{@opt.fns} -> file://#{@file.output_path.sisupod.dir}/#{@zipfile}.txz").warn end - x=@env.document_language_versions_found #check multiple document language versions (param not used) - if x[:f] \ - and x[:f].length > 0 #store multiple document language versions, sisupod - x[:f].each do |f| - pth="#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}" - FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) - if f[:f] =~/\~(\S{2,3})\.ss[tm]$/ - lng_f=$1 - if @opt.lng == lng_f - if @opt.fno =~/\.ssm$/ - if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}") - FileUtils::cp("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}", - "#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}/#{f[:n]}") - else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} - end - else - if FileTest.file?("#{@env.path.pwd}/#{f[:f]}") - FileUtils::cp("#{@env.path.pwd}/#{f[:f]}", - "#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}/#{f[:n]}") - else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} - end - end - end - else - if @opt.fno =~/\.ssm$/ - if FileTest.file?("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}") - FileUtils::cp_r("#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}", - "#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}/#{f[:n]}") - else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} - end - else - if FileTest.file?("#{@env.path.pwd}/#{f[:f]}") - FileUtils::cp("#{@env.path.pwd}/#{f[:f]}", - "#{@env.processing_path.processing_sisupod(@opt)}/doc/#{@opt.lng}/#{f[:n]}") - else STDERR.puts %{\t*WARN* did not find - "#{@env.path.pwd}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} - end - end - end - end - end #NB not all possibilies met, revisit, also in case of composite file may wish to add README end def sisupod_tar_xz - FileUtils::mkdir_p(@file.output_path.sisupod.dir) unless FileTest.directory?(@file.output_path.sisupod.dir) - tree=(@opt.cmd =~/[vVM]/ \ - && SiSU_Env::SystemCall.new.program_found?('tree')) \ - ? 'tree sisupod' - : '' - if FileTest.directory?(@env.processing_path.processing_sisupod(@opt)) - Dir.chdir("#{@env.processing_path.root_dir}/#{@env.processing_path.user}/pods/#{@opt.fns}") - system(%{ - #{tree} - tar -cJf #{@zipfile}.txz sisupod - #echo "#{@file.place_file.sisupod.dir}" - }) - FileUtils::mv("#{@zipfile}.txz",@file.place_file.sisupod.dir) - FileUtils::rm_r(Dir.glob("sisupod/*")) - Dir.chdir(@env.path.pwd) - SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz").blue_tab if @opt.cmd=~/[MVv]/ - else - SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz not built").blue_tab if @opt.cmd=~/[MVv]/ + begin + FileUtils::mkdir_p(@file.output_path.sisupod.dir) unless FileTest.directory?(@file.output_path.sisupod.dir) + tree=(@opt.cmd =~/[vVM]/ \ + && SiSU_Env::SystemCall.new.program_found?('tree')) \ + ? 'tree sisupod' + : '' + if FileTest.directory?(@path_pod[:fnb]) + Dir.chdir(@path_pod[:fnb]) + system(%{ + #{tree} + tar -cJf #{@zipfile}.txz sisupod + #echo "#{@file.place_file.sisupod.dir}" + }) + FileUtils::mv("#{@zipfile}.txz",@file.place_file.sisupod.dir) + Dir.chdir(@env.path.pwd) + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz").blue_tab if @opt.cmd=~/[MVv]/ + else + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz not built").blue_tab if @opt.cmd=~/[MVv]/ + end + rescue + ensure end end end diff --git a/lib/sisu/v3/sysenv.rb b/lib/sisu/v3/sysenv.rb index 5e9533a2..1527e634 100644 --- a/lib/sisu/v3/sysenv.rb +++ b/lib/sisu/v3/sysenv.rb @@ -858,7 +858,7 @@ module SiSU_Env @language=(l.nil? || l.empty?) \ ? SiSU_Env::InfoEnv.new.language_default_set : l - @r=%{(?:#{Px[:lng_lst].join('|')})} + @r=%{(?:#{Px[:lng_lst_rgx]})} @lang_info=SiSU_i18n::Languages.new end def lang_lst # from i18n @@ -1010,7 +1010,7 @@ module SiSU_Env @stub_md= @stub_pwd + '/sisu_site_metadata' pt=Pathname.new(Dir.pwd) stub=if output_dir_structure.by_language_code? - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] stub=if Dir.pwd =~/.+?\/([^\/]+)(?:\/(#{r})$)/ lng=pt.split[-1].to_s lng_part='/' + lng @@ -1114,7 +1114,7 @@ module SiSU_Env # image/ [all images for specific document gathered here] # audio/ # video/ - spp="#{processing_path.processing}/sisupod" + spp="#{processing_path.processing}/#{Gt[:sisupod]}" sppc="#{spp}/doc/_sisu" lng_dirs=[] if FileTest.directory?(spp) \ @@ -1157,17 +1157,17 @@ module SiSU_Env # skin/ # doc [relevant skin if any other than default] # image [all images for specific document gathered here] - sisupod_processing_path="#{processing_path.processing}/sisupod" + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" if FileTest.directory?(sisupod_processing_path) \ or FileTest.file?(sisupod_processing_path) FileUtils::rm_rf(sisupod_processing_path) end paths=[] paths=[ - "#{processing_path.processing}/sisupod/_sisu/skin/doc", - "#{processing_path.processing}/sisupod/_sisu/skin/dir", - "#{processing_path.processing}/sisupod/_sisu/skin/site", - "#{processing_path.processing}/sisupod/_sisu/image" + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/doc", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/dir", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/site", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/image" ] paths.each {|x| FileUtils::mkdir_p(x) unless FileTest.directory?(x) } end @@ -1882,11 +1882,11 @@ WOK "#{path.webserv}/#{images}" end def output #web/webserv output directory... subdirectory into which further subdirectories are made based on file names - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ base_stub=@sys.pwd.gsub(u,'\1') - if Dir.pwd =~/\/sisupod\/[^\/]+\/sisupod\/doc/ - "#{path.webserv}/doc" + if Dir.pwd =~/\/#{Gt[:sisupod]}\/[^\/]+\/#{Gt[:pod]}\/#{Gt[:doc]}/ + "#{path.webserv}/#{Gt[:doc]}" else "#{path.webserv}/#{base_stub}" end @@ -2011,27 +2011,40 @@ WOK : ("#{root_dir}/#{stub_pwd}") # see defaults[:processing_path] end def processing_sisupod(opt=nil) #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) - unless FileTest.directory?(root_dir) - FileUtils::mkdir_p(root_dir) - File.chmod(0777,root_dir) - end - if usr_dir? + @opt=opt + def paths processing_path_usr="#{root_dir}/#{user}" - FileUtils::mkdir_p(processing_path_usr) unless FileTest.directory?(processing_path_usr) - File.chmod(0700,processing_path_usr) - end - sisupod_processing_path=processing_path_usr + '/pods/' + opt.fno + '/sisupod' - FileUtils::mkdir_p(sisupod_processing_path) unless FileTest.directory?(sisupod_processing_path) - sisupod_processing_path_lng=if defined? opt.lng - sisupod_processing_path + '/doc/' + opt.lng - else - sisupod_processing_path + '/doc' - end - unless FileTest.directory?(sisupod_processing_path_lng) - FileUtils::mkdir_p(sisupod_processing_path_lng) - File.chmod(0700,sisupod_processing_path_lng) + processing_path_fnb=processing_path_usr + '/' + Gt[:pods] + '/' + @opt.fng + processing_path_sisupod=processing_path_fnb + '/' + Gt[:sisupod] + { fnb: processing_path_fnb, sisupod: processing_path_sisupod } + end + def make + unless FileTest.directory?(root_dir) + FileUtils::mkdir_p(root_dir) + File.chmod(0777,root_dir) + end + if usr_dir? + processing_path_usr="#{root_dir}/#{user}" + FileUtils::mkdir_p(processing_path_usr) unless FileTest.directory?(processing_path_usr) + File.chmod(0700,processing_path_usr) + end + fn_base_bundle=paths[:fnb] + sisupod_processing_path=paths[:sisupod] + FileUtils::mkdir_p(sisupod_processing_path) unless FileTest.directory?(sisupod_processing_path) + sisupod_processing_path_lng=if defined? @opt.lng + sisupod_processing_path + '/' + Gt[:doc] + '/' + @opt.lng + else + sisupod_processing_path + '/' + Gt[:doc] + end +#p sisup od_processing_path_lng + unless FileTest.directory?(sisupod_processing_path_lng) + #puts "a processing directory (#{sisupod_processing_path_lng}) is being created for use by sisu" + FileUtils::mkdir_p(sisupod_processing_path_lng) + File.chmod(0700,sisupod_processing_path_lng) + end + sisupod_processing_path end - sisupod_processing_path + self end def processing #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) unless FileTest.directory?(root_dir) @@ -2087,8 +2100,8 @@ WOK and not @rc['git']['dir'].nil? \ and not @rc['git']['dir'].empty? x=(@rc['git']['dir'] =~/^(?:~|home)$/) \ - ? home + '/' + 'sisu:' - : @rc['git']['dir'] + '/' + 'sisu:' + ? home + '/' + Gt[:git] + : @rc['git']['dir'] + '/' + Gt[:git] else defaults[:processing_git] end unless FileTest.directory?(pth) @@ -2672,7 +2685,7 @@ WOK end def sisupod_gen_v3(fns_pod) pwd=Dir.pwd - sisupod_processing_path="#{processing_path.processing}/sisupod" + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" if FileTest.directory?(sisupod_processing_path) \ or FileTest.file?(sisupod_processing_path) FileUtils::rm_rf(sisupod_processing_path) @@ -2688,7 +2701,7 @@ WOK if f_pod \ && FileTest.file?(f_pod) tree=(SiSU_Env::SystemCall.new.program_found?('tree')) \ - ? "tree #{processing_path.processing}/sisupod" + ? "tree #{processing_path.processing}/#{Gt[:sisupod]}" : '' if FileTest.directory?(processing_path.processing) Dir.chdir(processing_path.processing) @@ -2703,7 +2716,7 @@ WOK end def sisupod_gen_v2(fns_pod) pwd=Dir.pwd - sisupod_processing_path="#{processing_path.processing}/sisupod" + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" if FileTest.directory?(sisupod_processing_path) \ or FileTest.file?(sisupod_processing_path) FileUtils::rm_rf(sisupod_processing_path) @@ -3822,7 +3835,7 @@ WOK @pwd=Dir.pwd @env=SiSU_Env::InfoEnv.new pt=Pathname.new(@pwd) - r=Px[:lng_lst].join('|') + r=Px[:lng_lst_rgx] u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ @pwd_stub=pt.realpath.to_s[u,1] @rc=@@rc ||=GetInit.instance.sisu_yaml.rc @@ -4659,7 +4672,7 @@ WOK end end def src - @md.fns + @md.fno end def po #check (@fno.empty?) \ @@ -4710,10 +4723,8 @@ WOK "#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}" elsif output_dir_structure.dump? @md.opt.opt_act[:dump][:inst] - elsif output_dir_structure.by_language_code? - "#{output_path.base.dir}/#{@ft}/#{@md.opt.lng}" else - "#{output_path.base.dir}/#{@ft}" + "#{output_path.base.dir}/#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" end end def ab_pod @@ -4745,11 +4756,7 @@ WOK end end def ab_src - if output_dir_structure.by_language_code? - "#{output_path.base.url}/#{@ft}/#{@md.opt.lng}" - else - "#{output_path.base.url}/#{@ft}" - end + "#{output_path.base.url}/#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" end def ab_pod "#{output_path.base.url}/#{@ft}" @@ -4783,11 +4790,7 @@ WOK end end def ab_pod - if output_dir_structure.by_language_code? - "#{@ft}" - else - "#{@ft}" - end + "#{@ft}" end self end @@ -4811,12 +4814,13 @@ WOK end end def ab_src + locate="#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" if output_dir_structure.dump_or_redirect? '.' elsif output_dir_structure.by_language_code? - "#{@ft}/#{@md.opt.lng}" + "../../#{locate}" else - "#{@ft}" + "../#{locate}" end end def ab_pod @@ -4948,7 +4952,7 @@ WOK end def sisupod def ft - Gt[:src] + '/' + Gt[:pod] + Gt[:src] end def dir set_path(ft).dir.ab_pod @@ -4969,7 +4973,7 @@ WOK end def po def dir - "#{output_path.base.dir}/po4a/#{@md.fnb}/po/#{@md.opt.lng}" + "#{output_path.base.dir}/#{Gt[:src]}/#{@md.opt.fng}/po4a/po/#{@md.opt.lng}" end def url "#{output_path.base.url}/po4a/#{@md.fnb}/po/#{@md.opt.lng}" @@ -4978,7 +4982,7 @@ WOK end def pot def dir - "#{output_path.base.dir}/po4a/#{@md.fnb}/pot" + "#{output_path.base.dir}/#{Gt[:src]}/#{@md.opt.fng}/po4a/pot" end def url "#{output_path.base.url}/po4a/#{@md.fnb}/pot" @@ -5649,7 +5653,7 @@ WOK def apply if @m.respond_to?(:make) \ and @md.make.respond_to(:skin) - skin_path=unless @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + skin_path=unless @md.opt.f_pth[:pth] =~/\/\S+?\/#{Gt[:sisupod]}\/\S+?\/#{Gt[:pod]}\/#{Gt[:doc]}/ [ "#{@env.path.pwd}/_sisu/skin", "#{@env.path.home}/.sisu/skin", @@ -5657,7 +5661,7 @@ WOK "#{@env.processing_path.processing_sisupod(@md.opt)}/external_document/skin" ] else #sisupod - pt=/(\/\S+?\/sisupod\/\S+?\/sisupod\/doc)/.match(@md.opt.f_pth[:pth])[1] + pt=/(\/\S+?\/#{Gt[:sisupod]}\/\S+?\/#{Gt[:pod]}\/#{Gt[:doc]})/.match(@md.opt.f_pth[:pth])[1] [ "#{pt}/_sisu/skin" ] end sk_doc,sk_dir="doc/#{@md.make.skin}.rb","dir/skin_#{@env.stub_pwd}.rb" diff --git a/lib/sisu/v3/urls.rb b/lib/sisu/v3/urls.rb index 29c2f791..1dcf988f 100644 --- a/lib/sisu/v3/urls.rb +++ b/lib/sisu/v3/urls.rb @@ -90,10 +90,6 @@ module SiSU_Urls @fn=SiSU_Env::EnvCall.new(@opt.fns).lang(fn_set_lang[:c]) @m_regular=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/ @prog=@env.program - source=if @opt.fns =~/\.sst$/; @opt.fns - elsif @opt.fns =~/\.ssm\.sst/; "#{@fnb}.ssm.sst" - else 'not recognised file' - end @u ||= { 'b --xhtml (XHTML)'=>@fn[:xhtml], 'D[iu] --psql (DBI import/update postgresql)'=>'dbi psql', @@ -111,7 +107,7 @@ module SiSU_Urls 'p --pdf (PDF landscape)'=>@fn[:pdf_l], 'p --pdf (PDF portrait)'=>@fn[:pdf_p], 'E --profile (Ruby profiler)'=>'profile', - 's --source (sisu markup)'=>source, + 's --source (sisu markup)'=>@opt.fno, 'S --sisupod (sisupod)'=>@fn[:sisupod], 't --txt (Plain-text (endnotes))'=>@fn[:plain], 'x --xml-sax (XML sax type)'=>@fn[:sax], @@ -361,7 +357,7 @@ module SiSU_Urls end if x=~/--sisupod\b/ \ and @opt.act[:sisupod][:set]==:on - (@opt.fns =~/\.ssm\.sst$/) \ + (@opt.fno =~/\.ssm$/) \ ? y.gsub(/(?:\~\S{2,3})?(\.ssm.sst\.txz)$/,'.ssm.txz') : y.gsub(/(?:\~\S{2,3})?(\.sst\.txz)$/,'\1') show.source.pod(x,y) -- cgit v1.2.3