aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sisu/v3/constants.rb18
-rw-r--r--lib/sisu/v3/git.rb50
-rw-r--r--lib/sisu/v3/hub.rb79
-rw-r--r--lib/sisu/v3/manifest.rb6
-rw-r--r--lib/sisu/v3/options.rb22
-rw-r--r--lib/sisu/v3/param.rb2
-rw-r--r--lib/sisu/v3/po4a.rb4
-rw-r--r--lib/sisu/v3/share_src.rb37
-rw-r--r--lib/sisu/v3/shared_sisupod_source.rb377
-rw-r--r--lib/sisu/v3/sisupod_make.rb305
-rw-r--r--lib/sisu/v3/sysenv.rb118
-rw-r--r--lib/sisu/v3/urls.rb8
12 files changed, 593 insertions, 433 deletions
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 <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>
+
+ * Ralph Amissah
+ <ralph@amissah.com>
+ <ralph.amissah@gmail.com>
+
+ ** 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)