-*- mode: org -*-
#+TITLE: sisu misc
#+DESCRIPTION: documents - structuring, various output representations & search
#+FILETAGS: :sisu:misc:
#+AUTHOR: Ralph Amissah
#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
#+COPYRIGHT: Copyright (C) 2015 - 2021 Ralph Amissah
#+LANGUAGE: en
#+STARTUP: content hideblocks hidestars noindent entitiespretty
#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
#+PROPERTY: header-args :exports code
#+PROPERTY: header-args+ :noweb yes
#+PROPERTY: header-args+ :eval no
#+PROPERTY: header-args+ :results no
#+PROPERTY: header-args+ :cache no
#+PROPERTY: header-args+ :padline no
#+PROPERTY: header-args+ :mkdirp yes
* misc sort
** air.rb
#+HEADER: :tangle "../lib/sisu/air.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Air
require_relative 'se_hub_particulars' # se_hub_particulars.rb
class Source
@@ao_array=[]
@@fns=nil
def initialize(opt)
@opt=opt
@@fns||@opt.fns
@particulars=SiSU_Particulars::Combined.new(opt)
#@env=@particulars.env
#@md=@particulars.md
#@ao_array=@particulars.ao_array
end
def read
end
protected
def print
puts @particulars.md.inspect
puts @particulars.env.inspect
puts @particulars.ao_array
end
end
end
__END__
#+END_SRC
** embedded.rb
#+HEADER: :tangle "../lib/sisu/embedded.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Embedded
require_relative 'dp' # dp.rb
include SiSU_Param
require_relative 'se' # se.rb
include SiSU_Env
class Source
def initialize(opt)
@opt=opt
@md=SiSU_Param::Parameters.new(@opt).get
@env=SiSU_Env::InfoEnv.new(@md.fns)
@rhost=SiSU_Env::InfoRemote.new(@opt).remote_host_base
@base_src_dir=@opt.f_pth[:pth].sub(/\/#{@opt.f_pth[:lng]}$/,'')
@f=SiSU_Env::FileOp.new(@md)
end
def read
songsheet
end
def songsheet
images
audio
multimedia
begin
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
def images
src="#{@base_src_dir}/_sisu/image"
ldest=@env.path.output
img_dir="#{@env.path.output}/_sisu/image"
@rhost.each do |remote_conn|
if (@md.opt.act[:verbose][:set]==:on \
|| @md.opt.act[:verbose_plus][:set]==:on \
|| @md.opt.act[:maintenance][:set]==:on \
|| @md.opt.act[:rsync][:set]==:on) \
and FileTest.directory?(src)
FileUtils::mkdir_p(img_dir) unless FileTest.directory?(img_dir)
src_ec=@f.place_file.images.rel + '/' + @md.ec[:image].join(" #{@f.output_path.images.rel}/")
unless @opt.fns =~/\.-sst$/
SiSU_Env::SystemCall.new(src_ec,ldest,'q').rsync('--relative',@opt.base_path)
#if @md.opt.selections.str.inspect =~/R/ #rsync to remote image directory
# SiSU_Env::SystemCall.new(src_ec,remote_rel,'q').rsync('--relative')
#end
end
end
end
end
def audio
#p @md.ec[:audio]
src="#{@base_src_dir}/_sisu/mm/audio"
ldest="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/mm/audio"
@rhost.each do |remote_conn|
rdest="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}/_sisu/mm/audio"
if (@md.opt.act[:verbose][:set]==:on \
|| @md.opt.act[:verbose_plus][:set]==:on \
|| @md.opt.act[:maintenance][:set]==:on \
|| @md.opt.act[:rsync][:set]==:on) \
and FileTest.directory?(src)
FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest)
src_ec="#{src}/" + @md.ec[:audio].join(" #{src}/")
SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync
if @md.opt.act[:rsync][:set]==:on #rsync to remote audio directory
SiSU_Env::SystemCall.new(src_ec,"#{rdest}/.",'q').rsync
end
end
end
end
def multimedia
#p @md.ec[:multimedia]
src="#{@base_src_dir}/_sisu/mm/video"
ldest="#{@env.path.webserv}/#{@env.path.base_markup_dir_stub}/_sisu/mm/video"
@rhost.each do |remote_conn|
rdest="#{remote_conn[:name]}/#{@env.path.base_markup_dir_stub}/_sisu/mm/video"
if (@md.opt.act[:verbose][:set]==:on \
|| @md.opt.act[:verbose_plus][:set]==:on \
|| @md.opt.act[:maintenance][:set]==:on \
|| @md.opt.act[:rsync][:set]==:on) \
and FileTest.directory?(src)
FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest)
src_ec="#{src}/" + @md.ec[:multimedia].join(" #{src}/")
SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync
if @md.opt.act[:rsync][:set]==:on #rsync to remote video directory
SiSU_Env::SystemCall.new(src_ec,"#{rdest}/.",'q').rsync
end
end
end
end
end
end
__END__
#+END_SRC
** errors.rb
#+HEADER: :tangle "../lib/sisu/errors.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Errors
require_relative 'se' # se.rb
include SiSU_Env; include SiSU_Screen
class Rescued <CreateFile
def initialize(error,errorlist,cmd,fns='')
@fns,@cmd,@error,@errorlist=fns,cmd,error,errorlist
@cmd=(cmd \
&& (cmd =~/c/)) \
? 'Vc'
: 'V'
end
def location
file=@fns \
? (SiSU_Env::CreateFile.new(@fns).file_error)
: (File.new('/tmp/errorlog.sisu','w+'))
file << @fns << "\n" << @error << "\n" << @errorlist
file.close
if @cmd=~/[vVM]/
SiSU_Screen::Ansi.new('',$!,$@).rescue do
(block_given?) ? yield : __LINE__.to_s + ':' + __FILE__
end
else
SiSU_Screen::Ansi.new('',"rescued, exception raised, silenced").puts_grey
end
end
end
end
__END__
#+END_SRC
** git.rb
#+HEADER: :tangle "../lib/sisu/git.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Git
require_relative 'dp' # dp.rb
require_relative 'se' # se.rb
require_relative 'ao' # ao.rb
class Source
def initialize(opt,process=:complete)
@opt,@process=opt,process
@env=SiSU_Env::InfoEnv.new
@md=SiSU_Param::Parameters.new(@opt).get
@file=SiSU_Env::FileOp.new(@md)
l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
unless @opt.lng==l[:c] # @md.i18n[0]==l[:c]
p "using: #{@opt.lng} (@make: :language:); filename #{@md.fns} filename language: #{l[:c]}, mismatch"
end
if @env.output_dir_structure.multilingual?
m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss
fnb,fnt=@opt.fns[m,2],@opt.fns[m,3]
else m=/(.+?)\.((?:-|ssm\.)?sst|ssm)$/
fnb=@fnn=@opt.fns[m,1]
fnt=@opt.fns[m,2]
end
git_path_fnb=@env.processing_path.git + '/' + fnb
lng=(@md.opt.lng) ? (@md.opt.lng) : (@md.i18n[0])
@git_path={
fnb: git_path_fnb,
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[:sisupod] + '/' + Gt[:conf],
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_AO::Source.new(@opt,nil,@process).read # -m
end
def create_file_structure_git
make_dir_fnb
if program_found?
git_init
end
end
def read
create_file_structure_git
populate.sisusrc_files
#if program_found?
# git_commit
#end
unless @opt.act[:quiet][:set]==:on
(@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on) \
? SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Git path',
@git_path[:fnb]
).green_hi_blue
: SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Git path',
@git_path[:fnb]
).green_title_hi
if (@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
"Git path",
"#{@opt.fns} -> #{@git_path[:fnb]}"
).warn
end
end
end
def program_found?
found=`whereis git`
(found =~/bin\/git\b/) ? true : false
end
def make_dir_fnb
FileUtils::mkdir_p(@git_path[:fnb]) \
unless FileTest.directory?(@git_path[:fnb])
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])
FileUtils::mkdir_p(@git_path[:image]) \
unless FileTest.directory?(@git_path[:image])
#FileUtils::mkdir_p(@git_path[:audio]) \
# unless FileTest.directory?(@git_path[:audio])
#FileUtils::mkdir_p(@git_path[:video]) \
# unless FileTest.directory?(@git_path[:video])
end
def git_init
unless FileTest.directory?("#{@git_path[:fnb]}/.git")
pwd=Dir.pwd
Dir.chdir(@git_path[:fnb])
system("git init ")
Dir.chdir(pwd)
end
end
def git_commit
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
def identify_language_versions
print __FILE__ + ':'
p __LINE__
end
def copy_src_head
if @opt.f_pth[:lng] \
and File.exist?("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{@opt.fns}")
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[:doc]
)
elsif File.exist?("#{@env.path.pwd}/#{@opt.fns}")
FileUtils::cp_r(
"#{@env.path.pwd}/#{@opt.fns}",
@git_path[:doc]
)
end
end
def copy_related_sst_ssi
doc_import=[]
@rgx_doc_import=/^<<\s(\S+?\.ss[ti])/
file_array=IO.readlines(@opt.fns,'')
file_array.each do |f|
if f =~@rgx_doc_import
doc_import = doc_import \
+ f.scan(@rgx_doc_import).uniq.flatten
end
end
doc_import.each do |f|
if @opt.f_pth[:lng]
FileUtils::cp_r(
"#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{f}",
@git_path[:doc]
)
else
FileUtils::cp_r(
"#{@env.path.pwd}/#{f}",
@git_path[:doc]
)
end
end
end
def locate_parse_file
composite_src=@opt.fns=~/\.ssm$/ ? true : false
if composite_src \
and not @opt.act[:ao][:set]==:on
##SiSU_Assemble::Composite.new(@opt).read
#SiSU_AO::Source.new(@opt).read # -m
@env.processing_path.composite_file \
+ '/' \
+ @opt.fnb \
+ '.ssm.sst'
elsif composite_src
@env.processing_path.composite_file \
+ '/' \
+ @opt.fnb \
+ '.ssm.sst'
else
@env.path.pwd
+ '/' \
+ @opt.fns
end
end
def read_composite
#print __FILE__ + ':'
#p __LINE__
end
def sisuyaml_rc
sisurc=@env.path.sisurc_path
if FileTest.file?(sisurc)
FileUtils::cp_r(sisurc,@git_path[:conf])
end
end
def read_src
print __FILE__ + ':'
p __LINE__
end
def composite_src?
@opt.fns=~/\.ssm$/ ? true : false
end
def sisusrc_files
populate.copy_src_head
if composite_src?
populate.copy_related_sst_ssi
end
#parse_file_name=locate_parse_file
#parse_file=IO.readlines(parse_file_name,'')
populate.sisuyaml_rc #(parse_file)
#populate.extract_composite_source
#populate.read_composite # or read_each_composite
populate.identify_language_versions
end
self
end
end
end
__END__
@file.output_path.sisugit
#+END_SRC
** qrcode.rb
#+HEADER: :tangle "../lib/sisu/qrcode.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_QRcode
require_relative 'se' # se.rb
include SiSU_Env
require_relative 'prog_text_translation' # prog_text_translation.rb
require_relative 'se_hub_particulars' # se_hub_particulars.rb
include SiSU_Particulars
require_relative 'html' # html.rb
require_relative 'dp' # dp.rb
include SiSU_Param
require_relative 'generic_parts' # generic_parts.rb
require_relative 'i18n' # i18n.rb
class Source
def initialize(opt)
@opt=opt
@particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
l=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
@doc_language=l[:n]
end
def read
begin
@env=SiSU_Env::InfoEnv.new(@opt.fns,@opt)
@md=SiSU_Param::Parameters.new(@opt).get
xbrowser=@env.program.web_browser
browser=@env.program.console_web_browser
unless @opt.act[:quiet][:set]==:on
url_html="file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}"
(@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on) \
? SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'QR code',
"#{xbrowser} #{url_html}"
).green_hi_blue
: SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'QR code',
"[#{@opt.f_pth[:lng_is]}] #{@opt.fns}"
).green_title_hi
if (@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
"#{browser} #{url_html}"
).grey_tab
end
end
data=SiSU_HTML::Source::HTML_Environment.new(@particulars).tuned_file_instructions
OutputInfo.new(@md).check_output(data)
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
private
class OutputInfo <Source
include SiSU_Parts_Generic
def initialize(md)
@manifest={ txt: [], txt_title: [] }
@md,@fns=md,md.fns
@env=SiSU_Env::InfoEnv.new(@md.fns,@md.opt)
@fnb=@md.fnb
@base_url="#{@env.url.root}/#{@fnb}"
@f=SiSU_Env::FileOp.new(@md)
@base_path=@f.output_path.manifest.dir
@@dg ||=SiSU_Env::InfoEnv.new.digest(@md.opt).type
@dg=@@dg
l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
@language=l[:n]
@translate=SiSU_Translate::Source.new(@md,@language)
@f.make_path(@f.output_path.qrcode.dir)
end
def spaces
Ax[:spaces]
end
def output_metadata
fn=@f.base_filename.manifest_txt
mn=''
if @md.opt.act[:maintenance][:set]==:on
fn=@f.base_filename.manifest_txt
manifest=@f.write_file.manifest_txt
end
@manifest[:txt].each do |x|
x=x.gsub(/\\\\/m,"\n")
puts x if @md.opt.act[:verbose_plus][:set]==:on
manifest << x if @md.opt.act[:maintenance][:set]==:on
mn += x
end
manifest.close if @md.opt.act[:maintenance][:set]==:on
cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_md.dir,@md.opt.selections.str)
cmd.qrencode
end
def output_metadata_short
mn=''
@manifest[:txt_title].each do |x|
mn += x
end
cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_title.dir,@md.opt.selections.str)
cmd.qrencode
end
def summarize(id,file,pth='',rel='',url='',img='● ')
size=(File.size("#{pth}/#{file}")/1024.00).to_s
kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1]
@manifest[:txt] <<<<WOK
#{id} #{kb}
#{the_text.url_open}#{url}/#{file}#{the_text.url_close}
WOK
end
def summarize_html_seg(id,file,pth='',rel='',url='',img='● ')
size=(File.size("#{pth}/#{file}")/1024.00).to_s
kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1]
@manifest[:txt] <<<<WOK
#{id} #{kb}
#{the_text.url_open}#{url}/#{file}#{the_text.url_close}
WOK
end
def summarize_sources(id,file,pth,rel,url)
sys=SiSU_Env::SystemCall.new
dgst=case @dg
when :sha512
(sys.sha512("#{pth}/#{file}")) #check
when :md5
(sys.md5("#{pth}/#{file}"))
else
(sys.sha256("#{pth}/#{file}"))
end
dgst=dgst ? dgst : [ '', 'n/a' ]
if (@md.opt.act[:verbose][:set]==:on \
|| @md.opt.act[:verbose_plus][:set]==:on \
|| @md.opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(
@md.opt.selections.str,
"#{dgst[1]} #{file}"
).warn
end
size=(File.size("#{pth}/#{file}")/1024.00).to_s
kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1]
@manifest[:txt] <<<<WOK
#{id} #{dgst[1]} #{kb}
#{the_text.url_open}#{url}/#{file}#{the_text.url_close}
WOK
end
def published_manifests?
@f=SiSU_Env::FileOp.new(@md) #.base_filename
@m=[]
url=@f.output_path.base.url
manifests={}
mp,mn,mt=nil,nil,nil
ln=SiSU_i18n::Languages.new.language.list
Px[:lng_lst].each do |lc|
if @env.output_dir_structure.by_language_code?
mp="#{@f.output_path.base.dir}/#{lc}/manifest"
mn="#{@md.fnb}.html"
mt="#{mp}/#{mn}"
mu="#{url}/#{lc}/manifest/#{mn}"
elsif @env.output_dir_structure.by_filetype?
mp="#{@f.output_path.base.dir}/manifest"
mn="#{@md.fnb}.#{lc}.html"
mt="#{mp}/#{mn}"
mu="#{url}/manifest/#{mn}"
else
mp="#{@f.output_path.base.dir}/#{@md.fnb}"
mn="sisu_manifest.#{lc}.html"
mt="#{mp}/#{mn}"
mu="#{url}/#{mn}"
end
if FileTest.directory?(mp) \
&& FileTest.file?(mt)
lng=ln[lc][:t]
manifests[lc]={ ln: lng, fn: mn }
@m << { mu: mu, l: lng }
end
end
#manifests
@m=@m.uniq
@m
end
def languages(id,file)
flv=published_manifests?
flv.each do |l|
SiSU_Translate::Source.new(@md,@language,l[:n]).language_list
@manifest[:txt] << "#{l[:mu]} #{l[:l]}\n"
end
end
def published_languages(id,file)
flv=published_manifests?
flv.each do |l|
@manifest[:txt] << "#{l[:l]} #{the_text.url_open}#{l[:mu]}#{the_text.url_close}\n"
end
end
def metadata(id,info)
info=info.to_s.gsub(/#{Mx[:br_line]}/,"\n")
@manifest[:txt] << %{#{id}: #{info}\n}
end
def md_title_info(id,info)
info=info.to_s.gsub(/#{Mx[:br_line]}/,"\n")
@manifest[:txt_title] << %{#{info}\n}
end
def links(url,lnk,target)
static=if url =~/^\.\// then url.gsub(/^\.(\.)?/,@base_url)
elsif url =~/^\.\.\// then url.gsub(/^\.(\.)?/,@env.url.root)
else url
end
@manifest[:txt] << %{#{url} #{lnk} #{the_text.url_open}#{static}#{the_text.url_close}\n}
end
def output_tests
if FileTest.file?(@f.place_file.html_segtoc.dir)==true
pth=@f.output_path.html_seg.dir
rel=@f.output_path.html_seg.rel_sm
url=@f.output_path.html_seg.url
id,file='HTML, table of contents (for segmented text)',@f.base_filename.html_segtoc
summarize_html_seg(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.html_scroll.dir)==true
pth=@f.output_path.html_scroll.dir
rel=@f.output_path.html_scroll.rel_sm
url=@f.output_path.html_scroll.url
id,file='HTML, full length document',@f.base_filename.html_scroll
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.html_book_index.dir)==true
pth=@f.output_path.html_seg.dir
rel=@f.output_path.html_seg.rel_sm
url=@f.output_path.html_seg.url
id,file='HTML, (book type) index',@f.base_filename.html_book_index
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.html_concordance.dir)==true
pth=@f.output_path.html_seg.dir
rel=@f.output_path.html_seg.rel_sm
url=@f.output_path.html_seg.url
id,file='HTML, concordance file',@f.base_filename.html_concordance
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.epub.dir)==true
id,file='EPUB (Electronic Publication, e-book standard)',@f.base_filename.epub
pth=@f.output_path.epub.dir
rel=@f.output_path.epub.rel_sm
url=@f.output_path.epub.url
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_letter}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, U.S. letter size, portrait/vertical","#{@f.base_filename.pdf_p_letter}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_letter}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, U.S. letter size, landscape/horizontal","#{@f.base_filename.pdf_l_letter}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a4}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, A4 size, portrait/vertical","#{@f.base_filename.pdf_p_a4}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a4}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, A4 size, landscape/horizontal","#{@f.base_filename.pdf_l_a4}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a5}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, A5 (book) size, portrait/vertical","#{@f.base_filename.pdf_p_a5}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a5}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, A5 (book) size, landscape/horizontal","#{@f.base_filename.pdf_l_a5}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_b5}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, B5 (book) size, portrait/vertical","#{@f.base_filename.pdf_p_b5}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_b5}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, B5 (book) size, landscape/horizontal","#{@f.base_filename.pdf_l_b5}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_legal}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, U.S. legal size, portrait/vertical","#{@f.base_filename.pdf_p_legal}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_legal}")==true
pth=@f.output_path.pdf.dir
rel=@f.output_path.pdf.rel_sm
url=@f.output_path.pdf.url
id,file="PDF, U.S. legal size, landscape/horizontal","#{@f.base_filename.pdf_l_legal}"
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.odt.dir)==true
pth=@f.output_path.odt.dir
rel=@f.output_path.odt.rel_sm
url=@f.output_path.odf.url
id,file='ODF:ODT (Open Document Format)',@f.base_filename.odt
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.xhtml.dir)==true
pth=@f.output_path.xhtml.dir
rel=@f.output_path.xhtml.rel_sm
url=@f.output_path.xhtml.url
id,file='ODF:ODT (Open Document Format)',@f.base_filename.odt
id,file='XHTML',@f.base_filename.xhtml
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.xml_sax.dir)==true
pth=@f.output_path.xml_sax.dir
rel=@f.output_path.xml_sax.rel_sm
url=@f.output_path.xml_sax.url
id,file='XML SAX',@f.base_filename.xml_sax
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.xml_dom.dir)==true
pth=@f.output_path.xml_dom.dir
rel=@f.output_path.xml_dom.rel_sm
url=@f.output_path.xml_dom.url
id,file='XML DOM',@f.base_filename.xml_dom
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.txt.dir)==true
id='Plaintext (UTF-8)'
#id=if @md.opt.selections.str =~/a/ then 'Plaintext (Unix (UTF-8) with footnotes)'
#elsif @md.opt.selections.str =~/e/ then 'Plaintext (Unix (UTF-8) with endnotes)'
#elsif @md.opt.selections.str =~/A/ then 'Plaintext (dos (UTF-8) with footnotes)'
#elsif @md.opt.selections.str =~/E/ then 'Plaintext (dos (UTF-8) with endnotes)'
#else 'Plaintext (UTF-8)'
#end
pth=@f.output_path.txt.dir
rel=@f.output_path.txt.rel_sm
url=@f.output_path.txt.url
file=@f.base_filename.txt
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true
id,file='LaTeX (portrait)',"#{@md.fns}.tex"
pth,rel,url='','',''
summarize(id,file,pth,rel,url)
end
if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true
id,file='LaTeX (landscape)',"#{@md.fns}.landscape.tex"
pth,rel,url='','',''
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.manpage.dir)==true
pth=@f.output_path.manpage.dir
rel=@f.output_path.manpage.rel_sm
url=@f.output_path.manpage.url
id,file='Manpage',@f.base_filename.manpage
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.texinfo.dir)==true
pth=@f.output_path.texinfo.dir
rel=@f.output_path.texinfo.rel_sm
url=@f.output_path.texinfo.url
id,file='Texinfo',@f.base_filename.texinfo
summarize(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.hash_digest.dir)==true
pth=@f.output_path.hash_digest.dir
rel=@f.output_path.hash_digest.rel_sm
url=@f.output_path.hash_digest.url
id,file="Digest/DCC - Document Content Certificate (#{@dg})",@f.base_filename.hash_digest
summarize(id,file,pth,rel,url)
end
end
def published_versions
id,file='Markup (SiSU source)',@md.fns
#languages(id,file)
published_languages(id,file)
end
def language_versions
if FileTest.file?(@f.place_file.manifest.dir)==true
id,file='Markup (SiSU source)',@md.fns
published_languages(id,file)
end
end
def source_tests
if @md.fns =~/\.ssm\.sst$/ #% 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
url=@f.output_path.src.url
id,file='Markup Composite File (SiSU source)',@f.base_filename.src
summarize_sources(id,file,pth,rel,url)
end
else
if FileTest.file?(@f.place_file.src.dir)==true
pth=@f.output_path.src.dir
rel=@f.output_path.src.rel
url=@f.output_path.src.url
id,file='Markup (SiSU source)',@f.base_filename.src
summarize_sources(id,file,pth,rel,url)
end
end
if FileTest.file?(@f.place_file.sisupod.dir)==true
pth=@f.output_path.sisupod.dir
rel=@f.output_path.sisupod.rel
url=@f.output_path.sisupod.url
id,file='SiSU doc (zip)',@f.base_filename.sisupod
summarize_sources(id,file,pth,rel,url)
end
if FileTest.file?(@f.place_file.pot.dir)==true
pth=@f.output_path.pot.dir
rel=@f.output_path.pot.rel_sm
url=@f.output_path.pot.url
id,file='SiSU pot',@f.base_filename.pot
summarize_sources(id,file,pth,rel,url)
end
end
def metadata_tests
if defined? @md.title.full \
and @md.title.full=~/\S+/
id,info=@translate.full_title,@md.title.full
#id,info=@translate.full_title,%{"#{@md.title.full}"}
metadata(id,info)
md_title_info(id,info)
end
if defined? @md.creator.author \
and @md.creator.author=~/\S+/
id,info=@translate.author,@md.creator.author
metadata(id,info)
md_title_info(id,info)
end
if defined? @md.creator.editor \
and @md.creator.editor=~/\S+/
id,info=@translate.editor,@md.creator.editor
metadata(id,info)
end
if defined? @md.creator.contributor \
and @md.creator.contributor=~/\S+/
id,info=@translate.contributor,@md.creator.contributor
metadata(id,info)
end
if defined? @md.creator.translator \
and @md.creator.translator=~/\S+/
id,info=@translate.translator,%{(#{@md.creator.translator})}
metadata(id,info)
md_title_info(id,info)
end
if defined? @md.creator.illustrator \
and @md.creator.illustrator=~/\S+/
id,info=@translate.illustrator,@md.creator.illustrator
metadata(id,info)
end
if defined? @md.publisher \
and @md.publisher=~/\S+/ #dc
id,info=@translate.publisher,@md.publisher
metadata(id,info)
end
if defined? @md.creator.prepared_by \
and @md.creator.prepared_by=~/\S+/
id,info=@translate.prepared_by,@md.creator.prepared_by
metadata(id,info)
end
if defined? @md.creator.digitized_by \
and @md.creator.digitized_by=~/\S+/
id,info=@translate.digitized_by,@md.creator.digitized_by
metadata(id,info)
end
if defined? @md.rights.all \
and @md.rights.all=~/\S+/ #dc
id,info=@translate.rights,@md.rights.all
metadata(id,info)
end
if defined? @md.date.published
if defined? @md.date.published \
and @md.date.published=~/\S+/ #dc
id,info=@translate.date,@md.date.published
metadata(id,info)
md_title_info(id,info)
end
if defined? @md.date.created \
and @md.date.created=~/\S+/ #dc
id,info=@translate.date_created,@md.date.created
metadata(id,info)
end
if defined? @md.date.issued \
and @md.date.issued=~/\S+/ #dc
id,info=@translate.date_issued,@md.date.issued
metadata(id,info)
end
if defined? @md.date.available \
and @md.date.available=~/\S+/ #dc
id,info=@translate.date_available,@md.date.available
metadata(id,info)
end
if defined? @md.date.modified \
and @md.date.modified=~/\S+/ #dc
id,info=@translate.date_modified,@md.date.modified
metadata(id,info)
end
if defined? @md.date.valid \
and @md.date.valid=~/\S+/ #dc
id,info=@translate.date_valid,@md.date.valid
metadata(id,info)
end
end
if defined? @md.title.language \
and @md.title.language=~/\S+/
id,info=@translate.language,@md.title.language
metadata(id,info)
end
if defined? @md.original.language \
and @md.original.language=~/\S+/
id,info=@translate.language_original,@md.original.language
metadata(id,info)
end
if defined? @md.classify.subject \
and @md.classify.subject=~/\S+/
id,info=@translate.subject,@md.classify.subject
metadata(id,info)
end
if defined? @md.classify.keywords \
and @md.classify.keywords=~/\S+/
id,info=@translate.keywords,@md.classify.keywords
metadata(id,info)
end
if defined? @md.classify.loc \
and @md.classify.loc=~/\S+/
id,info=@translate.cls_loc,@md.classify.loc
metadata(id,info)
end
if defined? @md.classify.dewey \
and @md.classify.dewey=~/\S+/
id,info=@translate.cls_dewey,@md.classify.dewey
metadata(id,info)
end
if defined? @md.notes.description \
and @md.notes.description=~/\S+/
id,info=@translate.description,@md.notes.description
metadata(id,info)
end
if defined? @md.notes.abstract \
and @md.notes.abstract=~/\S+/
id,info=@translate.abstract,@md.notes.abstract
metadata(id,info)
end
if defined? @md.notes.comment \
and @md.notes.comment=~/\S+/
id,info=@translate.comments,@md.notes.comment
metadata(id,info)
end
if defined? @md.notes.coverage \
and @md.notes.coverage=~/\S+/
id,info=@translate.coverage,@md.notes.coverage
metadata(id,info)
end
if defined? @md.notes.relation \
and @md.notes.relation=~/\S+/
id,info=@translate.relation,@md.notes.relation
metadata(id,info)
end
#if defined? @md.notes.source \
#and @md.notes.source=~/\S+/
# id,info=@translate.source,@md.notes.source
# metadata(id,info)
#end
#if defined? @md.notes.history \
#and @md.notes.history=~/\S+/
# id,info=@translate.history,@md.notes.history
# metadata(id,info)
#end
if defined? @md.notes.type \
and @md.notes.type=~/\S+/ #dc
id,info=@translate.type,@md.type
metadata(id,info)
end
if defined? @md.notes.format \
and @md.notes.format=~/\S+/
id,info=@transate.format,@md.notes.format
metadata(id,info)
end
if defined? @md.notes.prefix_a \
and @md.notes.prefix_a=~/\S+/
id,info=@translate.prefix_a,@md.notes.prefix_a
metadata(id,info)
end
if defined? @md.notes.prefix_b \
and @md.notes.prefix_b=~/\S+/
id,info=@translate.prefix_b,@md.notes.prefix_b
metadata(id,info)
end
if defined? @md.original.source \
and @md.original.source=~/\S+/
id,info=@translate.source,@md.original.source
metadata(id,info)
end
if defined? @md.identifier.oclc \
and @md.identifier.oclc=~/\S+/
id,info=@translate.cls_oclc,@md.identifier.oclc
@manifest[:txt] << %{#{id}:\n}
@manifest[:txt] << %{#{info}\n}
end
if defined? @md.identifier.isbn \
and @md.identifier.isbn=~/\S+/
id,info=@translate.cls_isbn,@md.identifier.isbn
metadata(id,info)
end
if defined? @md.topic_register_array \
and @md.topic_register_array.length > 0
@manifest[:txt] << %{#{@translate.topic_register}:\n}
@md.topic_register_array.each do |t|
t.each_with_index do |st,i|
if st.is_a?(Array)
st.each do |v|
@manifest[:txt] << %{#{spaces*i}#{v}\n}
end
else @manifest[:txt] << %{#{spaces*i}#{st}\n}
end
end
end
end
if @md.fns
id,info=@translate.sourcefile,@md.fns
metadata(id,info)
end
if @md.en[:mismatch] > 0
id,info='WARNING document error in endnote markup, number mismatch',"endnotes: #{@md.en[:note]} != endnote reference marks: #{@md.en[:mark]} (difference = #{@md.en[:mismatch]})"
metadata(id,info)
end
if @md.wc_words
id,info=@translate.word_count,@md.wc_words
metadata(id,info)
end
if @md.dgst
id,info="#{@translate.sourcefile_digest} (#{@dg})",@md.dgst[1]
metadata(id,info)
end
if @md.sc_number
id,info=@translate.sc_number,@md.sc_number
metadata(id,info)
end
if @md.sc_date
id,info=@translate.sc_date,"#{@md.sc_date} at #{@md.sc_time}"
metadata(id,info)
end
end
def check_output(data)
begin
@f=SiSU_Env::FileOp.new(@md) #.base_filename
url=@f.output_path.base.url
@en_manifest=if @env.output_dir_structure.by_language_code?
"#{url}/en/manifest/#{@md.fnb}.html"
elsif @env.output_dir_structure.by_filetype?
"#{url}/manifest/#{@md.fnb}.#{@md.opt.lng}.html"
else
"#{url}/sisu_manifest.#{@md.opt.lng}.html"
end
@manifest[:txt] <<<<WOK
#{@translate.manifest_description_metadata}
#{the_text.url_open}#{@en_manifest}#{the_text.url_close}
WOK
metadata_tests
@manifest[:txt_title] <<<<WOK
#{the_text.url_open}#{@en_manifest}#{the_text.url_close}
WOK
source_tests
@manifest[:txt] <<<<WOK
#{@translate.language_version_list}
WOK
language_versions
output_metadata
output_metadata_short
rescue
SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
end
end
end
__END__
#+END_SRC
** relaxng.rb
#+HEADER: :tangle "../lib/sisu/relaxng.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Relaxng
require_relative 'se' # se.rb
class RelaxNG
def gpl3_or_later
@gpl3_or_later =<<RELAXNG
=begin
* Name: SiSU generated relaxng
* Description: generated relaxng for SiSU
(SiSU is a framework for document structuring, publishing and search)
* Author: Ralph Amissah
* Copyright: (C) 1997 - 2013 Ralph Amissah All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
Copyright: (C) 1997 - 2013 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/licenses/gpl.html>
[http://www.gnu.org/licenses/gpl.html]
* SiSU uses:
* Standard SiSU markup syntax,
* Standard SiSU meta-markup syntax, and the
* Standard SiSU object citation numbering and system
* Homepages:
[https://www.sisudoc.org]
[https://git.sisudoc.org]
* Ralph Amissah
[ralph@amissah.com]
[ralph.amissah@gmail.com]
=end
RELAXNG
end
def rnc_name
def output_sax
'sisu_sax.rnc'
end
def output_dom
'sisu_dom.rnc'
end
def output_xhtml
'sisu_xhtml.rnc'
end
def input_sax
'sisu_sax.rnc'
end
def input_dom
'sisu_dom.rnc'
end
def input_node
'sisu_node.rnc'
end
self
end
def rng_name
def output_sax
'sisu_sax.rng'
end
def output_dom
'sisu_dom.rng'
end
def output_xhtml
'sisu_xhtml.rng'
end
def input_sax
'sisu_sax.rng'
end
def input_dom
'sisu_dom.rng'
end
def input_node
'sisu_node.rng'
end
self
end
def xsd_name
def output_sax
'sisu_sax.xsd'
end
def output_dom
'sisu_dom.xsd'
end
def output_xhtml
'sisu_xhtml.xsd'
end
def input_sax
'sisu_sax.xsd'
end
def input_dom
'sisu_dom.xsd'
end
def input_node
'sisu_node.xsd'
end
self
end
def rnc_sisu_object_input
@relaxng =<<RELAXNG
#%% sisu object model: input
#{gpl3_or_later}
#%% definitions
# dublin core:
element-semantic =
element semantic {
# dublin core:
element title { text }
& element creator { text }?
& element subject { text }?
& element description { text }?
& element publisher { text }?
& element contributor { text }?
& element date { text }?
& element date.created { text }?
& element date.issued { text }?
& element date.available { text }?
& element date.valid { text }?
& element date.modified { text }?
& element type { text }?
& element format { text }?
& element identifier { text }?
& element source { text }?
& element relation { text }?
& element coverage { text }?
& element rights { text }?
& element keywords { text }?
# extended semantic metadata:
& attribute subtitle { text }?
& attribute illustrator { text }?
& attribute translator { text }?
& attribute prepared_by { text }?
& attribute digitized_by { text }?
& attribute language { text }?
& attribute language.original { text }?
& attribute classify.pg { text }?
& attribute classify.isbn { text }?
& attribute classify.dewey { text }?
& attribute classify.loc { text }?
& attribute prefix.a { text }?
& attribute prefix.b { text }?
& attribute suffix { text }?
& attribute comments { text }?
& attribute abstract { text }?
# & attribute information { text }?
& attribute contact { text }?
& attribute links { text }?
}
element-processing =
element processing {
attribute structure { text }?
& attribute level { text }?
& attribute markup { text }?
& attribute bold { text }?
& attribute italics { text }?
& attribute papersize { text }?
& attribute vocabulary { text }?
& element date_scheme { text }?
& element date.issued.scheme { text }?
& element date.available.scheme { text }?
& element date.valid.scheme { text }?
& element date.modified.scheme { text }?
}?
element-head =
element head {
# processing instructions, and semantic data, distinguish?:
element metadata {
element title { text },
element file { text },
element generator { text },
element-semantic,
element-processing
}+
}
# body text/contents
# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
element-txt =
element txt {
text*
& element b { text }*
& element i { text }*
& element u { text }*
& element ins { text }*
& element del { text }*
}
element-endnote =
element endnote {
element number { text },
element note { element-txt }+
}+
element-para =
element para {
# attribute paragraph_format { text },
element-txt+
& element-endnote?
}
element-external_space =
element external_space {
# ignored by sisu, provide program needs
element program {
# e.g. kdissert
element name { text },
element xpos { text },
element ypos { text },
element font { text },
element outline_color { text },
element text_color { text },
element comment { text }
}*
}*,
#%% structure
element document {
# document head:
element-head,
# document body:
element body {
# object, a unit of text, usually a paragraph with any associated endnotes
element node {
element structure {
# structure document using either node:heading levels or node:heading relationships:
# (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
element level { text }?,
# (ii) sisu alternatively could use node:heading relationship information to build document structure
element node.id { text },
element node.parent { text },
element node.child { text }*
},
element node.objects {
element object.heading {
# nametag used only in headings, especially important for segmented html
element nametag { text },
element-para
},
element object.para {
element-para
}*
}+,
element-external_space
}+
}
}
RELAXNG
end
def rnc_sisu_object_ao
@relaxng =<<RELAXNG
#%% sisu object model: ao
#{gpl3_or_later}
#%% definitions
# dublin core:
element-semantic =
element semantic {
# dublin core:
element title { text }
& element creator { text }?
& element subject { text }?
& element description { text }?
& element publisher { text }?
& element contributor { text }?
& element date { text }?
& element date.created { text }?
& element date.issued { text }?
& element date.available { text }?
& element date.valid { text }?
& element date.modified { text }?
& element type { text }?
& element format { text }?
& element identifier { text }?
& element source { text }?
& element relation { text }?
& element coverage { text }?
& element rights { text }?
& element keywords { text }?
# extended semantic metadata:
& attribute subtitle { text }?
& attribute illustrator { text }?
& attribute translator { text }?
& attribute prepared_by { text }?
& attribute digitized_by { text }?
& attribute language { text }?
& attribute language.original { text }?
& attribute classify.pg { text }?
& attribute classify.isbn { text }?
& attribute classify.dewey { text }?
& attribute classify.loc { text }?
& attribute prefix.a { text }?
& attribute prefix.b { text }?
& attribute suffix { text }?
& attribute comments { text }?
& attribute abstract { text }?
# & attribute information { text }?
& attribute contact { text }?
& attribute links { text }?
}
element-processing =
element processing {
attribute structure { text }?
& attribute level { text }?
& attribute markup { text }?
& attribute bold { text }?
& attribute italics { text }?
& attribute papersize { text }?
& attribute vocabulary { text }?
& element date_scheme { text }?
& element date.issued.scheme { text }?
& element date.available.scheme { text }?
& element date.valid.scheme { text }?
& element date.modified.scheme { text }?
}?
element-head =
element head {
# processing instructions, and semantic data, distinguish?:
element metadata {
element title { text },
element file { text },
element generator { text },
element-semantic,
element-processing
}+
}
# body text/contents
# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
element-txt =
element txt {
text*
& element b { text }*
& element i { text }*
& element u { text }*
& element ins { text }*
& element del { text }*
}
element-checksum.endnote = element checksum.clean { text }
element-endnote =
element endnote {
element number { text },
element note { element-txt }+,
element-checksum.endnote
}+
element-checksum.para =
element checksum.para {
element checksum.clean { text },
element checksum.marked { text }
}
element-para =
element para {
# attribute paragraph_format { text },
element-txt+
& element-endnote?
}
element-object =
element object {
element-para,
element-checksum.para
}
# object citation number, unique sequential number for objects:
element-ocn = element ocn { text }
element-object_structure_summary =
element-ocn,
# type: heading level value 1 -6, or normal text
element type { text },
# type number: sequential number for designated type
element type_number { text },
# type category: sequential number for designated category, e.g. sequentially counting all headers
element category_number { text }
element-external_space =
element external_space {
# ignored by sisu, provide program needs
element program {
# e.g. kdissert
element name { text },
element xpos { text },
element ypos { text },
element font { text },
element outline_color { text },
element text_color { text },
element comment { text }
}*
}*,
#%% structure
element document {
# document head:
element-head,
# document body:
element body {
# object, a unit of text, usually a paragraph with any associated endnotes
element node {
element structure {
# structure document using either node:heading levels or node:heading relationships:
# (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
element level { text }?,
# (ii) sisu alternatively could use node:heading relationship information to build document structure
element node.id { text },
element node.parent { text },
element node.child { text }*
},
element node.objects {
element object.heading {
element-object_structure_summary,
# nametag used only in headings, especially important for segmented html
element nametag { text },
element-object
},
element object.para {
element-object_structure_summary,
element-object
}*
}+,
element-external_space
}+
}
}
RELAXNG
end
def rnc_model_output_sax
@relaxng =<<RELAXNG
#% sax output model, part of SiSU and distributed under the same license
default namespace = ""
namespace xl = "http://www.w3.org/1999/xlink"
start =
element document {
element head {
(br
| meta
| element creator {
attribute class { xsd:NCName },
(text
| element link {
attribute xl:href { xsd:anyURI },
attribute xl:type { xsd:NCName },
xsd:anyURI
})+
}
| element date {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_available {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_created {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_issued {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_modified {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_valid {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element keywords {
attribute class { xsd:NCName },
text
}
| element language {
attribute class { xsd:NCName },
xsd:NCName
}
| element meta { xsd:NMTOKEN }
| element rights {
attribute class { xsd:NCName },
(text | link)+
}
| element source {
attribute class { xsd:NCName },
text
}
| element structure {
attribute class { xsd:NCName },
text
}
| element subject {
attribute class { xsd:NCName },
text
}
| element title {
attribute class { xsd:NCName },
text
}
| element type {
attribute class { xsd:NCName },
text
}
| element source_control {
(br
| meta
| element sc {
attribute class { xsd:NCName },
text
})+
})+
},
element body {
element object {
attribute id { text },
element ocn {
text
},
element text {
attribute class { xsd:NCName },
(text
| b
| br
| del
| en
| i
| link
| sub
| sup
| u
| element image {
attribute alt { text }?,
attribute height { xsd:integer }?,
attribute width { xsd:integer }?,
attribute xl:actuate { xsd:NCName },
attribute xl:href { text },
attribute xl:show { xsd:NCName },
attribute xl:type { xsd:NCName }
})+
}?,
element table {
attribute align { xsd:NCName },
attribute bgcolor { xsd:NCName },
attribute border { xsd:integer },
attribute cellpadding { xsd:integer },
attribute summary { text },
attribute width { text },
element tr {
element td {
attribute valign { xsd:NCName },
attribute width { text },
(text | b | i)+
}+
}+
}?,
element endnote {
attribute notenumber { xsd:integer }?,
attribute symbol { text }?,
(element number { xsd:integer }
| element symbol { text }),
element note {
(text
| b
| br
| del
| i
| link
| sup
| u
| element em { xsd:NCName }
| element sub { xsd:NCName })+
}
}*
}+
}
}
meta = element meta { text }
br = element br { empty }
b = element b { (text | en | i | link | sup)+ }
i = element i { (text | b | br | sup)+ }
en = element en { text }
sub = element sub { xsd:NCName }
sup = element sup { xsd:NCName }
link =
element link {
attribute xl:href { xsd:anyURI },
attribute xl:type { xsd:NCName },
(xsd:anyURI | text | b | i | sup)+
}
u = element u { (text | b | i)+ }
del = element del { (text | b | i | link)+ }
RELAXNG
end
def rnc_model_output_dom
@relaxng =<<RELAXNG
#% dom output model, part of SiSU and distributed under the same license
default namespace = ""
namespace xl = "http://www.w3.org/1999/xlink"
start =
element document {
element head {
element header {
meta,
(element creator { text }
| element date { xsd:NMTOKEN }
| element date_available { xsd:NMTOKEN }
| element date_created { xsd:NMTOKEN }
| element date_issued { xsd:NMTOKEN }
| element date_modified { xsd:NMTOKEN }
| element date_valid { xsd:NMTOKEN }
| element keywords { text }
| element language { xsd:NCName }
| element rights { (text | link)+ }
| element source { text }
| element structure { text }
| element subject { text }
| element title { text }
| element type { text }
| element source_control {
(br
| meta
| element sc {
attribute class { xsd:NCName },
text
})+
})
}+
},
element body {
element heading1 {
heading,
contents1*,
element heading2 {
heading,
contents1*,
element heading3 {
heading,
element contents1 {
heading,
content,
element contents2 {
heading,
content,
element contents3 { heading, content }*
}*
}+
}*
}*
}+
}
}
meta = element meta { text }
br = element br { empty }
heading = element heading { object }
contents1 =
element contents1 {
heading,
content,
element contents2 {
heading,
content,
element contents3 { heading, content }*
}*
}
content = element content { object* }
object =
element object {
attribute id { xsd:integer },
element ocn { text },
element nametag { text }?,
(element table {
attribute align { xsd:NCName },
attribute bgcolor { xsd:NCName },
attribute border { xsd:integer },
attribute cellpadding { xsd:integer },
attribute summary { text },
attribute width { text },
element tr {
element td {
attribute valign { xsd:NCName },
attribute width { text },
(text | b | i)+
}+
}+
}
| element text {
attribute class { xsd:NCName }?,
(text
| b
| del
| endnote
| i
| link
| element br { empty }
| element endnote {
element number { xsd:integer },
element note { (text | i | link)+ }
}
| element image {
attribute height { xsd:integer },
attribute width { xsd:integer },
attribute xl:actuate { xsd:NCName },
attribute xl:href { text },
attribute xl:show { xsd:NCName },
attribute xl:type { xsd:NCName }
}
| element sub { text })+
})
}
i = element i { text }
b = element i { text }
u = element u { (text | b | i)+ }
sub = element sub { xsd:NCName }
sup = element sup { xsd:NCName }
del = element del { (text | b | i | link)+ }
link =
element link {
attribute xl:href { xsd:anyURI },
attribute xl:type { xsd:NCName },
xsd:anyURI
}
endnote =
element endnote {
(element number { xsd:integer }
| element symbol { text }),
element note {
(text
| b
| br
| del
| i
| link
| sub
| sup
| u
| element em { xsd:NCName }
| element sub { xsd:NCName })+
}
}
RELAXNG
end
def rnc_model_output_xhtml #not done
@relaxng =<<RELAXNG
#% xhtml output model, part of SiSU and distributed under the same license
default namespace = ""
namespace xl = "http://www.w3.org/1999/xlink"
start =
element document {
element head {
(br
| element creator {
attribute class { xsd:NCName },
(text
| element link {
attribute xl:href { xsd:anyURI },
attribute xl:type { xsd:NCName },
xsd:anyURI
})+
}
| element date {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_available {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_created {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_issued {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_modified {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element date_valid {
attribute class { xsd:NCName },
xsd:NMTOKEN
}
| element language {
attribute class { xsd:NCName },
xsd:NCName
}
| element keywords {
attribute class { xsd:NCName },
text
}
| element meta {
attribute content { text }?,
attribute http-equiv { xsd:NCName }?,
text
}
| element rights {
attribute class { xsd:NCName },
(text | link)+
}
| element source {
attribute class { xsd:NCName },
text
}
| element structure {
attribute class { xsd:NCName },
text
}
| element subject {
attribute class { xsd:NCName },
text
}
| element title {
attribute class { xsd:NCName },
text
}
| element type {
attribute class { xsd:NCName },
xsd:NCName
})+
},
element body {
element object {
attribute id { xsd:integer },
(element endnote {
attribute notenumber { xsd:integer }?,
attribute symbol { text }?,
(text
| b
| br
| del
| i
| link
| sup
| u
| element em { xsd:NCName }
| element sub { xsd:NCName })+
}
| element ocn { text }
| element text {
attribute class { xsd:NCName },
(text
| b
| br
| del
| en
| i
| link
| sup
| u
| element image {
attribute alt { text }?,
attribute height { xsd:integer }?,
attribute width { xsd:integer }?,
attribute xl:actuate { xsd:NCName },
attribute xl:href { text },
attribute xl:show { xsd:NCName },
attribute xl:type { xsd:NCName }
}
| element sub { text })+
})+,
element table {
attribute align { xsd:NCName },
attribute bgcolor { xsd:NCName },
attribute border { xsd:integer },
attribute cellpadding { xsd:integer },
attribute summary { text },
attribute width { text },
element tr {
element td {
attribute valign { xsd:NCName },
attribute width { text },
(text | b | i)+
}+
}+
}?
}+
}
}
br = element br { empty }
en = element en { text }
sup = element sup { xsd:NCName }
i = element i { (text | b | br | sup)+ }
link =
element link {
attribute xl:href { xsd:anyURI },
attribute xl:type { xsd:NCName },
(text | b | i | sup)+
}
b = element b { (text | en | i | link | sup)+ }
u = element u { (text | b | i)+ }
del = element del { (text | b | i | link)+ }
RELAXNG
end
def rnc_model_input_sax
@relaxng =<<RELAXNG
#% sax input model, part of SiSU and distributed under the same license
default namespace = ""
start =
element document {
element head {
element header {
attribute class { xsd:NCName },
(element creator { text }
| element date { xsd:NMTOKEN }
| element date.available { xsd:NMTOKEN }
| element date.created { xsd:NMTOKEN }
| element date.issued { xsd:NMTOKEN }
| element date.modified { xsd:NMTOKEN }
| element date.valid { xsd:NMTOKEN }
| element italicize { text }
| element language { xsd:NCName }
| element links { text }
| element markup { text }
| element rights { text }
| element subject { text }
| element title { text }
| element type { xsd:NCName }
| element vocabulary { xsd:NCName })
}+
},
element body {
element object {
element text {
attribute class { xsd:NCName },
(text
| b
| i
| element endnote {
attribute symbol { xsd:NCName },
(text
| i
| element br { empty })+
}
| element u { i }
| element image.path { text })+
}?
}+
}
}
i = element i { text }
b = element b { text }
RELAXNG
end
def rnc_model_input_dom
@relaxng =<<RELAXNG
#% dom input model, part of SiSU and distributed under the same license
default namespace = ""
start =
element document {
element head {
element header {
attribute class { xsd:NCName },
(element creator { text }
| element date { xsd:NMTOKEN }
| element date.available { xsd:NMTOKEN }
| element date.created { xsd:NMTOKEN }
| element date.issued { xsd:NMTOKEN }
| element date.modified { xsd:NMTOKEN }
| element date.valid { xsd:NMTOKEN }
| element italicize { text }
| element language { xsd:NCName }
| element links { text }
| element markup { text }
| element rights { text }
| element subject { text }
| element title { text }
| element type { xsd:NCName }
| element vocabulary { xsd:NCName })
}+
},
element body {
element heading1 {
heading,
element heading2 {
heading,
contents1+,
element heading3 { heading, contents1+ }+
}
}
}
}
heading = element heading { object }
contents1 =
element contents1 {
heading,
content,
element contents2 {
heading,
content,
element contents3 { heading, content }*
}*
}
object =
element object {
element text {
(text
| italic
| element bold { xsd:NMTOKEN }
| element endnote {
element symbol { text }?,
element note {
(text
| italic
| element br { empty })+
}
}
| element underscore { italic }
| element image.path { text }
| element italic { text })+
}
}
italic = element italic { text }
content = element content { object+ }
RELAXNG
end
def rnc_model_input_node
@relaxng =<<RELAXNG
#% node input model, part of SiSU and distributed under the same license
default namespace = ""
start =
element document {
element head {
element header {
attribute class { xsd:NCName },
(element creator { text }
| element date { xsd:NMTOKEN }
| element date.available { xsd:NMTOKEN }
| element date.created { xsd:NMTOKEN }
| element date.issued { xsd:NMTOKEN }
| element date.modified { xsd:NMTOKEN }
| element date.valid { xsd:NMTOKEN }
| element italicize { (text | i)+ }
| element language { xsd:NCName }
| element links { text }
| element markup { text }
| element rights { text }
| element subject { text }
| element title { text }
| element type { xsd:NCName }
| element vocabulary { xsd:NCName })
}+
},
element body {
element object {
(element text {
attribute class { xsd:NCName },
(text
| b
| i
| element br { empty }
| element endnote {
attribute symbol { xsd:NCName },
(text | i)+
}
| element image.path { text }
| element sub { text })+
}
| (element ocn { empty },
element table {
attribute align { xsd:NCName },
attribute bgcolor { xsd:NCName },
attribute border { xsd:integer },
attribute cellpadding { xsd:integer },
attribute summary { text },
attribute width { text },
element tr {
element td {
attribute valign { xsd:NCName },
attribute width { text },
(text | b)+
}+
}+
})),
element node {
element id { xsd:integer },
element parent { xsd:integer },
element offspring { text }?
}
}+
}
}
b = element b { text }
i = element i { text }
RELAXNG
end
end
end
__END__
needs updating
#+END_SRC
** remote.rb
#+HEADER: :tangle "../lib/sisu/remote.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Remote
require_relative 'se' # se.rb
include SiSU_Env
class Put
def initialize(opt)
@opt=opt
@dir=SiSU_Env::InfoEnv.new(@opt.fns)
@put=(@opt.fns =~/\.ssm\.sst$/) \
? opt.fns.gsub(/(.+)?\.ssm\.sst$/,'\1.ssm')
: opt.fns
@remote=SiSU_Env::InfoRemote.new(opt)
end
def rsync
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement ->',
@put
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.rsync.document
end
def rsync_base
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement ->',
'rsync'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.rsync.site_base
end
def rsync_base_sync
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement ->',
'rsync and sync'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.rsync.site_base_sync
end
def rsync_sitemaps
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement sitemaps ->',
'rsync'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.rsync_sitemaps
end
def rsync_harvest
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement metadata harvest ->',
'rsync_harvest'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.rsync.site_harvest
end
def scp
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement ->',
@put
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.scp.document
end
def scp_base
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement of base site ->',
'excluding images'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.scp.site_base
end
def scp_base_all
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Remote placement ->',
'complete'
).dark_grey_title_hi unless @opt.act[:quiet][:set]==:on
@remote.scp.site_base_all
end
end
class Get
def initialize(opt,get_s)
@opt,@get_s=opt,get_s
@msg,@msgs='',nil
@tell=lambda {
SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],
@msg,
"#{@msgs.inspect if @msgs}")
}
end
def fns
begin
require 'open-uri'
require 'pp'
rescue LoadError
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
error('open-uri or pp NOT FOUND (LoadError)')
end
require_relative 'ao_composite' # ao_composite.rb
@rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/
threads=[]
for requested_page in @get_s
re_fnb=/((?:https?|file):\/\/[^\/ ]+?\/[^\/ ]+?)\/\S+?\/([^\/]+?)\.ss(t)/ #revisit and remove DO
threads << Thread.new(requested_page) do |url|
open(url) do |f|
raise "#{url} not found" unless f
base_uri,fnb=re_fnb.match(url)[1..2] if re_fnb
imagedir=base_uri + '/_sisu/image' #check on
downloaded_file=File.new("#{fnb}.-sst",'w+')
image_download_url=SiSU_Assemble::RemoteImage.new.image(imagedir)
images=[]
f.collect.each do |r| # work area
unless r =~/^%+\s/
if r !~/^%+\s/ \
and r =~@rgx_image
images << r.scan(@rgx_image).uniq
end
end
downloaded_file << r
end
if images \
and images.length > 1
images=images.flatten.uniq
images.delete_if {|x| x =~/https?:\/\// }
images=images.sort
@msg,@msgs='downloading images:', [ images.join(',') ]
@tell.call.warn unless @opt.act[:quiet][:set]==:on
image_info=image_download_url + images
SiSU_Assemble::RemoteImage.new.download_images(image_info)
#SiSU_Assemble::RemoteImage.new.download_images(image_download_url,images)
@msg,@msgs='downloading done',nil
@tell.call.warn unless @opt.act[:quiet][:set]==:on
end
downloaded_file.close
end
end
end
threads.each {|thr| thr.join} if threads #and threads.length > 0
end
def sisupod
get_p=@get_s
if get_p.length > 0 #% remote sisupod
begin
require 'net/http'
rescue LoadError
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
error('net/http NOT FOUND (LoadError)')
end
for requested_pod in get_p
pod_info=RemoteDownload.new(requested_pod)
Net::HTTP.start(pod_info.pod.site) do |http|
resp=http.get("#{pod_info.pod.path}/#{pod_info.pod.name_source}")
open(pod_info.pod.name,'wb') do |file|
file.write(resp.body)
end
end
end
end
end
end
class RemoteDownload
def initialize(requested_file)
@requested_file=requested_file
end
def pod
re_p_div=/https?:\/\/([^\/]+)(\/\S+)\/(sisupod\.(?:txz|zip)|\S+?(?:\.ss[mt]\.(?:txz|zip))?|[^\/]+?\.ssp)$/
re_p=/(sisupod\.(?:txz|zip)|\S+?\.ss[mt]\.(?:txz|zip)?|[^\/]+?\.ssp)$/
if @requested_file =~ re_p_div
@site,@pth,@pod= re_p_div.match(@requested_file).captures
elsif @requested_file =~ re_p
@pod=re_p.match(@requested_file).captures.join
end
def site
@site
end
def path
@pth
end
def dir_stub
re_p_stub=/.+?([^\/]+)$/
re_p_stub.match(path).captures.join if path
end
def name_source
@pod
end
def name
name_source
end
self
end
end
end
__END__
#+END_SRC
** rexml.rb
#+HEADER: :tangle "../lib/sisu/rexml.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Rexml
# load XML file for REXML parsing
begin
require 'rexml/document' \
if FileTest.directory?("#{RbConfig::CONFIG['rubylibdir']}/rexml") #RbConfig::CONFIG['sitedir']
rescue LoadError
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
error('rexml/document NOT FOUND (LoadError)')
end
require_relative 'dp' # dp.rb
include SiSU_Param
require_relative 'se' # se.rb
include SiSU_Env
class Rexml
begin
require 'rexml/document' \
if FileTest.directory?("#{RbConfig::CONFIG['rubylibdir']}/rexml") #RbConfig::CONFIG['sitedir']
rescue LoadError
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
error('rexml/document NOT FOUND (LoadError)')
end
def initialize(md,fno)
@md,@fno=md,fno
@env=SiSU_Env::InfoEnv.new(@md.fns)
@prog=SiSU_Env::InfoProgram.new #(md.fns) #if md
if File.file?(@fno)
@fnap=@fno #index.xml causes problems with index.html in server config
end
@e_head='/document/head'
@e_title='/document/head/title'
@e_object='/document/body/object'
@e_ocn='/document/body/object/ocn'
@e_text='/document/body/object/text'
@e_endnote='/document/body/object/endnote'
end
def xml
begin
if FileTest.file?(@fnap)
if @prog.rexml !=false \
and FileTest.directory?('/usr/lib/ruby/1.8/rexml/') #note values can be other than true
xmlfile=IO.readlines(@fnap,'').join
begin
@xmldoc=REXML::Document.new xmlfile
SiSU_Screen::Ansi.new(
@md.opt.act[:color_state][:set],
'invert',
'REXML',
"XML document #{@fnap} loaded"
).colorize unless @md.opt.act[:quiet][:set]==:on
if (@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on)
@xmldoc.elements.each(@e_head) do |e|
SiSU_Screen::Ansi.new(
@md.opt.act[:color_state][:set],
'brown',
e
).colorize unless @md.opt.act[:quiet][:set]==:on
end
end
rescue REXML::ParseException
puts 'broken XML'
end
end
else
SiSU_Screen::Ansi.new(
@md.opt.act[:color_state][:set],
'fuchsia',
"File Not Found #{xmlfile}",
'requested XML processing skipped'
).colorize unless @md.opt.act[:quiet][:set]==:on
exit
end
rescue
SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
end
end
__END__
misc
e.each do |element|
element.each do |child|
if child.is_a?(REXML::Text)
puts "Text: #{child.to_s.inspect}"
else
puts "SubElement: #{child.name}"
end
end
end
#+END_SRC
** sitemaps.rb
#+HEADER: :tangle "../lib/sisu/sitemaps.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Sitemaps
require_relative 'dp' # dp.rb
include SiSU_Param
require_relative 'se' # se.rb
include SiSU_Env
require_relative 'xml_shared' # xml_shared.rb
include SiSU_XML_Munge
class Source
def initialize(opt)
@opt=opt
end
def read
songsheet
end
def songsheet
begin
@sys=SiSU_Env::SystemCall.new
fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
@fn=SiSU_Env::EnvCall.new(@opt.fns).lang(fn_set_lang[:c])
if @opt.act[:sitemap][:set]==:on
@md=SiSU_Param::Parameters.new(@opt).get
@trans=SiSU_XML_Munge::Trans.new(@md) #check @md is required
@env=SiSU_Env::InfoEnv.new(@md.fns)
# @file=SiSU_Env::FileOp.new(@md)
@rdf=SiSU_XML_Tags::RDF.new(@md)
@fnb_utf8_xml=@md.fnb.dup
@trans.char_enc.utf8(@fnb_utf8_xml) \
if @sys.locale =~/utf-?8/i
output_map(sitemap)
elsif @opt.selections.str =~/--sitemaps/
@sitemap_idx_fn='sitemapindex.xml'
@env=SiSU_Env::InfoEnv.new
output_idx(sitemap_index)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'sitemap index:',
"#{@env.path.output}/#{@sitemap_idx_fn}"
).result unless @opt.act[:quiet][:set]==:on
end
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
def make_file(path,filename)
(File.writable?("#{path}/.")) \
? (File.new("#{path}/#{filename}",'w+'))
: (SiSU_Screen::Ansi.new(
'',
"is the file or directory writable?, could not create #{filename}"
).warn)
end
def output_map(sitemap)
path=@md.file.output_path.sitemaps.dir
filename=@fn[:sitemap]
touch_path=@md.file.output_path.sitemaps.dir
touch_filename=@fn[:sitemap_touch]
SiSU_Env::FileOp.new(@md).make_path(path)
file=SiSU_Env::FileOp.new(@md).make_file(path,filename)
file << sitemap
if FileTest.file?("#{touch_path}/#{touch_filename}")
FileUtils::rm("#{touch_path}/#{touch_filename}")
end
end
def output_idx(sitemap)
path=@env.path.output
filename=@sitemap_idx_fn
make_path(path)
file=make_file(path,filename)
file << sitemap
end
def sitemap_index
sitemap_files=Dir.glob("#{@env.path.sitemaps}/sitemap_*.xml")
sitemap_idx=[]
sitemap_idx << <<WOK
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemaps/0.9
http://www.sitemaps.org/schemas/sitemaps/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemapindex/0.9">
WOK
sitemap_files.each do |s|
f=s.gsub(/.+?\/sitemap_([^\/]+?)\.xml$/,'\1')
@trans.char_enc.utf8(f) \
if @sys.locale =~/utf-?8/i
sitemap_idx << <<WOK
<sitemap>
<loc>#{@env.path.url.remote}/#{f}/sitemap.xml</loc>
</sitemap>
WOK
end
sitemap_idx << <<WOK
</sitemapindex>
WOK
sitemap_idx.join
end
def sitemap
if defined? @md.date.modified \
and @md.date.modified=~/\d{4}-\d{2}-\d{2}/
sitemap_date_modified
else sitemap_no_date
end
end
def sitemap_date_modified
<<WOK
<?xml version='1.0' encoding='UTF-8'?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemaps/0.9
http://www.sitemaps.org/schemas/sitemaps/sitemap.xsd"
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
#{@rdf.comment_xml}
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]}</loc>
<lastmod>#{@md.date.modified}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]}</loc>
<lastmod>#{@md.date.modified}</lastmod>
<priority>0.5</priority>
</url>
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]}</loc>
<lastmod>#{@md.date.modified}</lastmod>
<priority>0.5</priority>
</url>
</urlset>
WOK
end
def sitemap_no_date
<<WOK
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
#{@rdf.comment_xml}
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]}</loc>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]}</loc>
<priority>0.5</priority>
</url>
<url>
<loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]}</loc>
<priority>0.5</priority>
</url>
</urlset>
WOK
end
end
end
__END__
,* sanitize xml, pass through filter to ensure is valid - done but needs testing
,* remote placement of sitemaps --sitemaps -R (probably makes more sense than doing against -Y [filename/wildcard]) - done but needs testing
,* gzip sitemaps - not before testing / after testing
,* issue with master documnts, naming and mapping, check multilingual
<!-- Document processing information:
* Generated by: SiSU 0.48.6 of 2006w45/6 (20061111)
* Ruby version: ruby 1.8.5 (2006-08-25) [i486-linux]
*
* Last Generated on: Sat Nov 18 15:28:08 +0000 2006
* SiSU https://git.sisudoc.org
-->
#+END_SRC
** termsheet.rb
#+HEADER: :tangle "../lib/sisu/termsheet.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
require_relative 'se' # se.rb
require_relative 'dp' # dp.rb
include SiSU_Param
@do,@done,@used,@html_output,@txt_input,@txt_output,@@report=Array.new(7){[]}
@@info=nil
@c=0
@cX=SiSU_Screen::Ansi.new('yes').cX
@done << "\n#{@cX.blue_hi}#{@cX.black}Summary#{@cX.off*2}"
def talent(termsheet,flag)
@@info=nil
@@info=termsheet.gsub(/(.+?)\.termsheet\.rb/,'../facility_data/\1.html')
@env=SiSU_Env::InfoEnv.new
@dir_fd="#{@env.path.output}/facility_data"
FileUtils::mkdir_p(@dir_fd) unless FileTest.directory?(@dir_fd)==true
html_output=[]
case termsheet
when /.+?\.(termsheet)\.rb$/
@basename=termsheet[/(.+?)\.termsheet\.rb/, 1]
@standard_form={}
require termsheet
include Termsheet
@standard_form=Termsheet::StandardForms.new.standardforms
puts %{\n#{@@cX.yellow_hi}#{@@cX.black}From#{@@cX.off*2}: #{@@cX.grey_hi}#{@@cX.black}#{@basename}.termsheet.rb#{@@cX.off*3}\n\n}
@standard_form.each do |k,v|
@c+=1
require v
puts %{\n#{@@cX.blue_hi}#{@@cX.black}Producing the following#{@@cX.off*2}: #{@@cX.green}#{@basename}.#{k}#{@@cX.off}\n\n}
@done << %{\n\t#{@@cX.grey}Documents generated#{@@cX.off}: #{@@cX.cyan}#{@basename}.#{k}#{@@cX.off}\n}
@used << %{\n\t#{@@cX.grey}Using#{@@cX.off}: #{@@cX.ruby}#{v}#{@@cX.off}\n}
html_output=<<WOK
<br /><a href="../#{@basename}.#{k}/landscape.pdf">
<img border="0" width="18" height="15" src="../_sisu/image/b_pdf.png" alt="pdf landscape"></a>
<a href="../#{@basename}.#{k}/portrait.pdf">
<img border="0" width="15" height="18" src="../_sisu/image/b_pdf.png" alt="pdf portrait"></a>
<a href="../#{@basename}.#{k}/sisu_manifest.html">#{@basename}.#{k}.sisu_manifest.html</a>
WOK
@html_output << html_output
@txt_input << %{\n\tForm #{@c}: <url:#{Dir.pwd}/#{v}>\n\t |#{Dir.pwd}/#{v}|@|^|\n}
@txt_output << %{\n\t#{k}: |../#{@basename}.#{k}/sisu_manifest.html|@|^|\n}
@report_file_i=File.new("#{@dir_fd}/#{@basename}.txt",'w+')
@report_file_o=File.new("#{@dir_fd}/#{@basename}.html",'w+')
@filename_new=File.new("#{@basename}.#{k}.sst",'w+')
@do << %{#{k}}
@filename_new << @document
# "require v" pulls in the composite @document
# "termsheet" having all the variables required to complete the standard form @document
@filename_new.close
end
@do.each do |x|
system %{sisu -Nhwpo #{@basename}.#{x}.sst\n}
end
else print "not processed --> ", termsheet, "\n"
end
@done << %{\n\t#{@@cX.green}Summary:#{@@cX.off} #{@@cX.blue}#{@env.path.output}/facility_data/#{@basename}.html#{@@cX.off}\n}
@done << %{\n\t#{@@cX.grey}From details provided in#{@@cX.off}: #{@@cX.green}#{termsheet}#{@@cX.off}\n}
terms=%{\nTermsheet: <url:#{Dir.pwd}/#{termsheet}>\n |#{Dir.pwd}/#{termsheet}|@|^|\n}
@report_file_i << "<url:all.txt>\n|all.txt|@|^|\n" << terms << "\nForms:\n" << @txt_input << "\nOutput Files\n" << @txt_output
@report_file_o << %{<a href="toc.html">^</a><br />\n} << @html_output
@@report << @done << @used << "\n"
@done,@used=[],[]
end
require_relative 'dp' # dp.rb
@argv=$*
@proc="#{@argv[0].to_s}"
if @proc =~ /^-?[wft]/
@argv.shift
@argv.each do |termsheet|
talent(termsheet,@proc)
end
end
@env=SiSU_Env::InfoEnv.new
@dir_fd="#{@env.path.output}/facility_data"
@url="#{@env.url.webserv}/facility_data"
@@report << %{\n#{@@cX.grey}See#{@@cX.off}: #{@@cX.blue}#{@dir_fd}/all.txt\t#{@dir_fd}/toc.html\t#{@dir_fd}/#{@@cX.off}\n\n#{@@cX.grey}See#{@@cX.off}: #{@@cX.blue}#{@url}/all.txt\t#{@url}/toc.html\t#{@url}/#{@@cX.off}\n\n}
puts @@report
File.unlink("#{@dir_fd}/all.txt") if FileTest.file?("#{@dir_fd}/all.txt")
File.unlink("#{@dir_fd}/toc.html") if FileTest.file?("#{@dir_fd}/toc.html")
summary_file=File.new("#{@dir_fd}/all.txt",'w+')
summary_html=File.new("#{@dir_fd}/toc.html",'w+')
ls_txt=%x{ls #{@dir_fd}/*.txt}
report_thlnk=[]
ls_txt.scan(/.+/)
ls_txt.each {|x| report_thlnk << x.gsub!(/#{@dir_fd}\/(.+)/,"<url:\\1>\n|\\1|@|^|")}
report_thlnk.join("\n")
ls_html=%x{ls #{@dir_fd}/*.html}
report_html=[]
ls_html.split(/.+/)
ls_html.each {|x| report_html << x.gsub!(/#{@dir_fd}\/(.+)/,'<a href="\1">\1</a><br />')}
report_html.join("\n")
summary_file << "#{report_thlnk}"
summary_html << "#{report_html}"
__END__
,** NOTE wrapper makes little sense without additional components, additional
sample files must be provided - (saved till later as may confuse)
,*** bits
sisu -t x_bank.and.*
e.g. sisu -t x_bank.and.*.termsheet.rb
e.g. sisu_termsheet.rb -t x_bank.and.c*.termsheet.rb
program calls upon termsheet file with extension termsheet.rb
termsheet.rb calls upon relevant standard form files (to be used) with extension .sForm.rb
there is also a standard_terms.rb file - with terms/details that are constant
the file produced is named after the termsheet.rb with that extension replaced with .er30
from there scribbler.rb is called upon its usual metaVerse html and pdf creation
! :-)
to test run
termsheet.rb -f dev.export.import.trade.facility.termsheet.rb
the term sheet calls the standard form or template that is to be run against it.
#+END_SRC
** update.rb
#+HEADER: :tangle "../lib/sisu/update.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_UpdateControlFlag
require_relative 'se' # se.rb
include SiSU_Env
include SiSU_Param
class Check
def initialize(opt)
@opt=opt
@md=SiSU_Param::Parameters.new(@opt).get
end
def read
begin
@env=SiSU_Env::InfoEnv.new(@md.fns)
out=@env.path.output
base_path="#{out}/#{@md.fnb}"
SiSU_Screen::Ansi.new(
@md.opt.act[:color_state][:set],
'Checking previous output',
base_path
).green_hi_blue unless @md.opt.act[:quiet][:set]==:on
SetCF.new(@md).set_flags
rescue
SiSU_Errors::Rescued.new($!,$@,@md.opt.selections.str,@md.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
private
class SetCF
def initialize(md)
@md=md
@env=SiSU_Env::InfoEnv.new(@md.fns)
out=@env.path.output
@base_path="#{out}/#{@md.fnb}"
@pdf_fn=SiSU_Env::FileOp.new(@md).base_filename
end
def set_flags #-mNhwpoabxXyv
flag='-v'
if FileTest.file?("#{@md.file.output_path.txt.dir}/#{@md.file.base_filename.txt}")==true
flag=flag + 'a'
end
if FileTest.file?("#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_seg}")==true \
or FileTest.file?("#{@md.file.output_path.html_scroll.dir}/#{@md.file.base_filename.html_scroll}")==true
flag=flag + 'h'
end
if FileTest.file?("#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}")==true
flag=flag + 'b'
end
if FileTest.file?("#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}")==true
flag=flag + 'x'
end
if FileTest.file?("#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}")==true
flag=flag + 'X'
end
if FileTest.file?("#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}")==true
flag=flag + 'e'
end
if FileTest.file?("#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}")==true
flag=flag + 'o'
end
if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_p_a4}")==true \
or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_l_a4}")==true \
or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_p_letter}")==true \
or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_l_letter}")==true
flag=flag + 'p'
end
if FileTest.file?("#{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}")==true
flag=flag + 'w'
end
if FileTest.file?("#{@md.file.output_path.digest.dir}/#{@md.file.base_filename.digest}")==true
flag=flag + 'N'
end
if FileTest.file?("#{@md.file.output_path.src.dir}/#{@md.file.base_filename.src}")==true
flag=flag + 's'
end
if FileTest.file?("#{@md.file.output_path.sisupod.dir}/#{@md.file.base_filename.sisupod}")==true
flag=flag + 'S'
end
puts flag
flag
end
end
end
end
__END__
#+END_SRC
** urls.rb
#+HEADER: :tangle "../lib/sisu/urls.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Urls
require_relative 'se_hub_particulars' # se_hub_particulars.rb
include SiSU_Particulars
require_relative 'se' # se.rb
include SiSU_Env; include SiSU_Screen
class Source
attr_reader :opt
def initialize(opt)
@opt=opt
end
def read
begin
SiSU_Urls::OutputUrls.new(@opt).songsheet if @opt.fnb
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
end
class OutputUrls
attr_reader :fns,:fnb,:act,:dir,:m_regular,:u
def initialize(opt)
@opt=opt
@particulars=SiSU_Particulars::CombinedSingleton.instance.get_env_md(opt)
if @particulars.is_a?(NilClass)
if @opt.act[:verbose_plus][:set]==:on \
or @opt.act[:maintenance][:set]==:on
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
mark("@particulars is NilClass, acceptable e.g. for --harvest")
end
exit
end
@selections=@opt.selections.str
@act=@opt.act
@md=@particulars.md
@env=@particulars.env
@fnb=@env.fnb
fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
@fnl=@env.i18n.lang_filename(fn_set_lang[:c])
@fn=SiSU_Env::EnvCall.new(@opt.fns).lang(fn_set_lang[:c])
@m_regular=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/
@prog=@env.program
end
def songsheet
begin
(@opt.act[:urls_all][:set]==:on) \
? urls_all \
: (urls_select unless @opt.act[:quiet][:set]==:on)
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
def show
def report(x)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
"[#{@opt.f_pth[:lng_is]}]",
x[:cmd],
x[:viewer] + ' ' \
+ x[:f_pth]
).result
end
def maintenance(x)
if @opt.act[:maintenance][:set]==:on
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
"[#{@opt.f_pth[:lng_is]}]",
x[:cmd],
x[:p_pth]
).maintenance
end
end
self
end
def report_info
def dal
{
cmd: '--ao',
p_pth: @env.processing_path.ao + '/' \
+ @opt.fns + '.meta',
fn: 'ao',
}
end
def hash_digests
{
cmd: '--hash-digests (sha512/sha256/md5)',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.hash_digest.dir + '/' \
+ @md.file.base_filename.hash_digest,
fn: @fn[:digest],
}
end
def text
def txt
{
cmd: '--txt',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.txt.dir + '/' \
+ @md.file.base_filename.txt,
fn: @fn[:plain],
}
end
def asciidoc
{
cmd: '--asciidoc',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.asciidoc.dir + '/' \
+ @md.file.base_filename.asciidoc,
fn: @fn[:txt_asciidoc],
}
end
def markdown
{
cmd: '--markdown',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.markdown.dir + '/' \
+ @md.file.base_filename.markdown,
fn: @fn[:txt_markdown],
}
end
def rst
{
cmd: '--rst',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.rst.dir + '/' \
+ @md.file.base_filename.rst,
fn: @fn[:txt_rst],
}
end
def textile
{
cmd: '--textile',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.textile.dir + '/' \
+ @md.file.base_filename.textile,
fn: @fn[:txt_textile],
}
end
def orgmode
{
cmd: '--orgmode',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.orgmode.dir + '/' \
+ @md.file.base_filename.orgmode,
fn: @fn[:txt_orgmode],
}
end
self
end
def html
def seg
{
cmd: '--html-seg',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.html_seg.dir + '/' \
+ @md.file.base_filename.html_segtoc,
p_pth: @env.processing_path.tune + '/' \
+ @md.fns + '.tune',
fn: @fn[:toc],
}
end
def scroll
{
cmd: '--html-scroll',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.html_scroll.dir + '/' \
+ @md.file.base_filename.html_scroll,
p_pth: @env.processing_path.tune + '/' \
+ @md.fns + '.tune',
fn: @fn[:doc],
}
end
def concordance
{
cmd: '--concordance',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.html_concordance.dir + '/' \
+ @md.file.base_filename.html_concordance,
fn: @fn[:concordance],
}
end
self
end
def xhtml
def xhtml
{
cmd: '--xhtml',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xhtml.dir + '/' \
+ @md.file.base_filename.xhtml,
p_pth: @env.processing_path.tune + '/' \
+ @md.fns + '.tune',
fn: @fn[:xhtml],
}
end
def epub
{
cmd: '--epub',
viewer: @prog.epub_viewer,
f_pth: @md.file.output_path.epub.dir + '/' \
+ @md.file.base_filename.epub,
p_pth: @env.processing_path.epub + '/' \
+ Ep[:d_oebps] + '/' \
+ 'index.xhtml',
fn: @fn[:epub],
}
end
self
end
def xml
def odt
{
cmd: '--odt (ODF:ODT)',
viewer: @prog.odf_viewer,
f_pth: @md.file.output_path.odt.dir + '/' \
+ @md.file.base_filename.odt,
p_pth: @env.processing_path.odf + '/' \
+ @opt.fns + '/' \
+ 'odt/content.xml',
fn: @fn[:odf],
}
end
def docbook
{
cmd: '--docbook',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_docbook_book.dir + '/' \
+ @md.file.base_filename.xml_docbook_book,
fn: @fn[:xml_docbook_book],
}
end
def fictionbook
{
cmd: '--fictionbook',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_fictionbook.dir + '/' \
+ @md.file.base_filename.xml_fictionbook,
fn: @fn[:xml_fictionbook],
}
end
def sax
{
cmd: '--xml-sax',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_sax.dir + '/' \
+ @md.file.base_filename.xml_sax,
fn: @fn[:sax],
}
end
def dom
{
cmd: '--xml-dom',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_dom.dir + '/' \
+ @md.file.base_filename.xml_dom,
fn: @fn[:dom],
}
end
def scaffold_sisu
{
cmd: '--xml-scaffold-sisu',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_scaffold_structure_sisu.dir + '/' \
+ @md.file.base_filename.xml_scaffold_structure_sisu,
fn: @fn[:xml_scaffold_structure_sisu],
}
end
def scaffold_collapse
{
cmd: '--xml-scaffold-collapse',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.xml_scaffold_structure_collapse.dir + '/' \
+ @md.file.base_filename.xml_scaffold_structure_collapse,
fn: @fn[:xml_scaffold_structure_collapse],
}
end
self
end
def json
{
cmd: '--js (json)',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.json.dir + '/' \
+ @md.file.base_filename.json,
fn: @fn[:json],
}
end
def pdf
def landscape
{
cmd: '--pdf (landscape)',
viewer: @prog.pdf_viewer,
f_pth: @md.file.output_path.pdf.dir + '/' \
+ @md.file.base_filename.pdf_l \
+ @md.papersize_array[0] + '.pdf',
p_pth: @env.processing_path.tex + '/' \
+ @opt.fns.gsub(/~/,'-') + '.' \
+ @md.papersize_array[0] \
+ '.landscape.tex',
fn: @fn[:pdf_l],
}
end
def portrait
{
cmd: '--pdf (portrait)',
viewer: @prog.pdf_viewer,
f_pth: @md.file.output_path.pdf.dir + '/' \
+ @md.file.base_filename.pdf_p \
+ @md.papersize_array[0] + '.pdf',
p_pth: @env.processing_path.tex + '/' \
+ @opt.fns.gsub(/~/,'-') + '.' \
+ @md.papersize_array[0] \
+ '.tex',
fn: @fn[:pdf_p],
}
end
self
end
def manpage
{
cmd: '--manpage',
viewer: @prog.manpage_viewer,
f_pth: @md.file.output_path.manpage.dir + '/' \
+ @md.file.base_filename.manpage,
fn: 'manpage',
}
end
def texinfo
{
cmd: '--texinfo',
viewer: '',
f_pth: 'cd ' \
+ @md.file.output_path.texinfo.dir + ' && ' \
+ @env.program.texinfo + ' ' \
+ @md.file.base_filename.info \
+ '; cd -',
fn: 'info',
}
end
def db
def psql
{
cmd: '--psql --update/--import',
viewer: '',
f_pth: @pwd_stub + '::' \
+ @opt.fns \
+ 'dbi psql',
p_pth: @env.processing_path.postgresql + '/' \
+ @md.fns \
+ '.sql',
fn: 'dbi psql',
}
end
def sqlite
{
cmd: '--sqlite --update/--import',
viewer: 'sqlite3 ',
f_pth: @env.path.webserv + '/' \
+ @md.opt.f_pth[:pth_stub] + '/' \
+ 'sisu_sqlite.db',
p_pth: @env.processing_path.sqlite + '/' \
+ @md.fns \
+ '.sql',
fn: 'dbi sqlite3',
}
end
def sqlite_discrete
{
cmd: '--sqlite',
viewer: 'sqlite3 ',
f_pth: @md.file.output_path.sqlite_discrete.dir + '/' \
+ @md.file.base_filename.sqlite_discrete,
p_pth: @env.processing_path.sqlite + '/' \
+ @md.fns \
+ '.sql',
fn: 'dbi sqlite3',
}
end
self
end
def po4a
def po
{
cmd: '--po4a/--pot',
viewer: @prog.web_browser,
f_pth: @prog.text_editor + ' ' \
+ @md.file.output_path.po.dir \
+ '/' + y,
fn: @fn[:pot],
}
end
def pot
{
cmd: '--po4a/--pot',
viewer: @prog.web_browser,
f_pth: @prog.text_editor + ' ' \
+ @md.file.output_path.pot.dir \
+ '/' + y,
fn: @fn[:pot],
}
end
self
end
def source
{
cmd: '--source (sisu markup)',
viewer: @prog.text_editor,
f_pth: @md.file.output_path.src.dir + '/' \
+ @opt.fno,
p_pth: @md.file.output_path.src.dir + '/' \
+ @opt.fno,
fn: @opt.fno,
}
end
def sisupod
{
cmd: '--sisupod',
viewer: '',
f_pth: @md.file.output_path.sisupod.dir + '/' \
+ @opt.fno \
+ '.txz',
p_pth: @md.file.output_path.sisupod.dir + '/' \
+ @opt.fno + '/' \
+ 'sisupod/',
fn: @fn[:sisupod],
}
end
def ruby_profile
{
cmd: '--profile (ruby profiler)',
fn: 'profile',
}
end
def qrcode
{
cmd: '--qrcode',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.manifest.dir + '/' \
+ @md.file.base_filename.manifest,
fn: @fn[:qrcode],
}
end
def manifest
{
cmd: '--manifest',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.manifest.dir + '/' \
+ @md.file.base_filename.manifest,
fn: @fn[:manifest],
}
end
def sitemap
{
cmd: '--sitemap',
viewer: @prog.web_browser,
f_pth: @md.file.output_path.sitemaps.dir + '/' \
+ @md.file.base_filename.sitemap,
fn: @fn[:sitemap],
}
end
self
end
def urls_select
unless @opt.act[:quiet][:set]==:on
i1='[' + @opt.f_pth[:lng_is] + ']'
i2='file://' \
+ @md.file.output_path.manifest.dir + '/' \
+ @md.file.base_filename.manifest
(@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on) \
? SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'URLs'
).green_title_hi
: SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'URL (output manifest)',
i1, i2
).grey_title_grey_blue
if (@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
i1, i2,
).flow
end
end
m=/.+\/(?:src\/)?(\S+)/im
@pwd_stub="#{@env.url.output_tell}"[m,1]
unless @opt.act[:quiet][:set]==:on
if @opt.fns =~ @m_regular
if (@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on)
if @opt.act[:txt][:set]==:on
show.report(report_info.text.txt)
#show.maintenance(report_info.text.txt)
end
if @opt.act[:txt_textile][:set]==:on
show.report(report_info.text.textile)
#show.maintenance(report_info.text.textile)
end
if @opt.act[:txt_asciidoc][:set]==:on
show.report(report_info.text.asciidoc)
#show.maintenance(report_info.text.asciidoc)
end
if @opt.act[:txt_markdown][:set]==:on
show.report(report_info.text.markdown)
#show.maintenance(report_info.text.markdown)
end
if @opt.act[:txt_rst][:set]==:on
show.report(report_info.text.rst)
#show.maintenance(report_info.text.rst)
end
if @opt.act[:txt_orgmode][:set]==:on
show.report(report_info.text.orgmode)
#show.maintenance(report_info.text.orgmode)
end
if (@opt.act[:html][:set]==:on \
or @opt.act[:html_scroll][:set]==:on \
or @opt.act[:html_seg][:set]==:on)
if @opt.act[:html_scroll][:set]==:on
show.report(report_info.html.scroll)
show.maintenance(report_info.html.scroll)
end
if @opt.act[:html_seg][:set]==:on
show.report(report_info.html.seg)
show.maintenance(report_info.html.seg)
end
end
if @opt.act[:concordance][:set]==:on
show.report(report_info.html.concordance)
#show.maintenance(report_info.html.concordance)
end
if @opt.act[:xhtml][:set]==:on
show.report(report_info.xhtml.xhtml)
show.maintenance(report_info.xhtml.xhtml)
end
if @opt.act[:epub][:set]==:on
show.report(report_info.xhtml.epub)
show.maintenance(report_info.xhtml.epub)
end
if @opt.act[:odt][:set]==:on
show.report(report_info.xml.odt)
show.maintenance(report_info.xml.odt)
end
if @opt.act[:xml_dom][:set]==:on
show.report(report_info.xml.dom)
#show.maintenance(report_info.xml.dom)
end
if @opt.act[:xml_sax][:set]==:on
show.report(report_info.xml.sax)
#show.maintenance(report_info.xml.sax)
end
if @opt.act[:xml_docbook_book][:set]==:on
show.report(report_info.xml.docbook)
#show.maintenance(report_info.xml.docbook)
end
if @opt.act[:xml_fictionbook][:set]==:on
show.report(report_info.xml.fictionbook)
#show.maintenance(report_info.xml.fictionbook)
end
if @opt.act[:xml_scaffold_structure_sisu][:set]==:on
show.report(report_info.xml.scaffold_structure_sisu)
#show.maintenance(report_info.xml.scaffold_structure_sisu)
end
if @opt.act[:xml_scaffold_structure_collapse][:set]==:on
show.report(report_info.xml.scaffold_collapse)
#show.maintenance(report_info.xml.scaffold_collapse)
end
if @opt.act[:json][:set]==:on
show.report(report_info.json)
#show.maintenance(report_info.json)
end
if (@opt.act[:pdf][:set]==:on \
or @opt.act[:pdf_p][:set]==:on \
or @opt.act[:pdf_l][:set]==:on)
if @opt.act[:pdf_p][:set]==:on
show.report(report_info.pdf.portrait)
show.maintenance(report_info.pdf.portrait)
end
if @opt.act[:pdf_l][:set]==:on
show.report(report_info.pdf.landscape)
show.maintenance(report_info.pdf.landscape)
end
end
if @opt.act[:psql][:set]==:on
show.report(report_info.db.psql)
show.maintenance(report_info.db.psql)
end
if @opt.act[:sqlite_discrete][:set]==:on
show.report(report_info.db.sqlite_discrete)
show.maintenance(report_info.db.sqlite_discrete)
end
if @opt.act[:sqlite][:set]==:on
show.report(report_info.db.sqlite)
show.maintenance(report_info.db.sqlite)
end
if @opt.act[:texinfo][:set]==:on
show.report(report_info.texinfo)
#show.maintenance(report_info.texinfo)
end
if @opt.act[:manpage][:set]==:on
show.report(report_info.manpage)
#show.maintenance(report_info.manpage)
end
if @opt.act[:hash_digests][:set]==:on
show.report(report_info.hash_digests)
#show.maintenance(report_info.hash_digests)
end
if @opt.act[:po4a_shelf][:set]==:on
#if @opt.fns =~/\S+?~\S{2}(?:_\S{2})?\.ss[mt]/
#else
#end
end
if @opt.act[:share_source][:set]==:on
show.report(report_info.source)
show.maintenance(report_info.source)
end
if @opt.act[:sisupod][:set]==:on
show.report(report_info.sisupod)
show.maintenance(report_info.sisupod)
end
if @opt.act[:qrcode][:set]==:on
show.report(report_info.qrcode)
#show.maintenance(report_info.qrcode)
end
if @opt.act[:manifest][:set]==:on
show.report(report_info.manifest)
show.maintenance(report_info.manifest)
end
end
end
end
end
def urls_all
i="(output manifest) [#{@opt.f_pth[:lng_is]}] #{@env.url.output_tell}/#{@fnb}/sisu_manifest.html"
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'URLs',
i
).grey_title_hi
end
end
end
__END__
#+END_SRC
** webrick.rb
#+HEADER: :tangle "../lib/sisu/webrick.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Webserv
class WebrickStart
begin
require 'time'
require 'webrick'
include WEBrick
rescue LoadError
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
error('time or webrick NOT FOUND (LoadError)')
end
require_relative 'se' # se.rb
include SiSU_Env
include SiSU_Screen
def initialize
@cX=SiSU_Screen::Ansi.new('yes').cX
@env=SiSU_Env::InfoEnv.new
port=SiSU_Env::InfoPort.new
@host=@env.url.webrick
@port=port.webrick
@serve=[]
Dir.foreach(@env.path.webserv) do |x|
if x !~/^\./ \
and FileTest.directory?("#{@env.path.webserv}/#{x}")
@serve << x
end
end
@mount=[]
@serve.each {|x| @mount << ["/#{x}", "#{@env.path.webserv}/#{x}"]}
@pwd=Dir.pwd
@week=Time.now.strftime(%{%Yw%W})
puts "\n"
@mount.each { |x,y|
puts " * #{@cX.blue}#{@host}:#{@port}#{x}/#{@cX.off}"
}
get=Dir.pwd
brick(@port,get)
end
def brick(port,get='')
cgidir=if get=~/pwd/ then Dir.pwd
else '/usr/lib/cgi-bin'
end
port=SiSU_Env::InfoPort.new.webrick
begin
s=HTTPServer.new(
Port: port,
DocumentRoot: Dir::pwd + '/htdocs',
CGIPathEnv: ENV['PATH']
)
cgi_dir=File.expand_path(cgidir)
@mount.each { |x,y| # mount subdirectories
s.mount(x, HTTPServlet::FileHandler, y, true)
}
s.mount('/cgi-bin', HTTPServlet::FileHandler, cgi_dir, { FancyIndexing: true })
trap("INT"){ s.shutdown }
s.start
rescue
SiSU_Errors::Rescued.new($!,$@,'-W',nil).location do #fix
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
def wb_cgi
begin #%
wb_s2=''
#% writes file wb.cgi to shared directories ...
#% wb_top
wb_top=%q(#!/usr/bin/env ruby
# * arch-tag: webrick info on environment, mounted directories, and contents of pwd
begin
require 'time'
require 'cgi'
require 'fcgi'
rescue LoadError
puts 'time, cgi or fcgi NOT FOUND (LoadError)'
end
ls=Dir.entries('./')
dir_contents=[]
ls.each { |x| dir_contents << "<a href=\"./#{x}/\">#{x}</a><br>" unless x =~/^(\.)+$/ }
dir_contents=dir_contents.sort.join(' ')
#host=ENV['HOSTNAME']
#host=%x{echo $HOSTNAME}
)
wb_s1=<<-WOK
page=CGI.new "html3"
page.out {
page.html {
page.head { page.title {"#{@host} Webrick Report"} } +
page.body {
page.h1 {"Webrick #{@host}"} +
page.p {"Webrick is Ruby's built in webserver."} +
page.center {"Host name: " + page.b{"#{@host} "} + "(#{@host}) port: " + page.b{"#{@port}"}} +
page.center {"#{Time.now}"} +
page.center {"#{Time.now.strftime(%{%Yw%W})}"} +
page.p {''} +
page.p {''} +
page.p {page.b{"Webrick Served Directories: "}} +
WOK
#% wb_s2 (mounts)
@mount.each do |x,y| wb_s2 += <<-WOK
page.p {%{<a href="#{@host}:#{@port}#{x}/">#{x}</a> } +
%{<a href="#{@host}:#{@port}#{x}/">#{@host}:#{@port}#{x}</a> (mounts: #{y}/) <a href="#{@host}:#{@port}#{x}/wb.cgi">info (wb.cgi)</a>}} +
WOK
end
#% wb_end
wb_end=<<-WOK
page.p {page.b{"Contents of PWD (see URL): "}} +
page.p {"#\{dir_contents}"}
}
}
}
WOK
@mount.each { |x,y| #% wb puts
puts y
filename=File.new("#{y}/wb.cgi",'w')
filename << wb_top
filename << wb_s1
filename << wb_s2
filename << wb_end
filename.close
FileUtils::chmod(0755,"#{y}/wb.cgi &") if FileTest.file?("#{y}/wb.cgi &")
}
rescue
SiSU_Errors::Rescued.new($!,$@,'-W',nil).location do #fix
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
end
ensure
end
__END__
#+END_SRC
** wikispeak.rb
#+HEADER: :tangle "../lib/sisu/wikispeak.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Wikispeak
require_relative 'ao' # ao.rb
require_relative 'se' # se.rb
include SiSU_Env
include SiSU_Param
require_relative 'plaintext_format' # plaintext_format.rb
include Format
require_relative 'html_parts' # html_parts.rb
require_relative 'txt_shared'
@@alt_id_count,@@alt_id_count=0,0
@@tablefoot=''
class Source
def initialize(opt)
@opt=opt
@@dostype='msdos footnotes'
end
def read
begin
@md=SiSU_Param::Parameters.new(@opt).get
@env=SiSU_Env::InfoEnv.new(@opt.fns)
path=@env.path.output_tell
tool=(@opt.act[:verbose][:set]==:on \
|| @opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on) \
? "#{@env.program.text_editor} #{path}/#{@md.fnb}/#{@md.fn[:wiki]}"
: ''
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'Wikispeak',
tool
).green_hi_blue unless @opt.act[:quiet][:set]==:on
if (@opt.act[:verbose_plus][:set]==:on \
|| @opt.act[:maintenance][:set]==:on)
SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
@opt.fns,
"#{@env.path.output_tell}/#{@md.fnb}/#{@md.fn[:wiki]}"
).flow
end
@ao_array=SiSU_AO::Source.new(@opt).get # ao file drawn here
SiSU_Wikispeak::Source::Scroll.new(@ao_array,@md).songsheet
rescue
SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
__LINE__.to_s + ':' + __FILE__
end
ensure
end
end
private
class SplitTextObject <Source
require_relative 'plaintext_format' # plaintext_format.rb
include Format
@@alt_id_count=0
@@dp=nil
attr_reader :format,:lev,:text,:ocn,:lev_para_ocn
def initialize(para)
@para=para
@format,@ocn='ordinary','ordinary'
@dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern
end
def lev_segname_para_ocn
@text=nil
if @para =~/^(\d~|<:.+?>).+?#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
if /^(([1-6])~(\S+))\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@format,@lev,segname,@text,@ocn=$1,$2,$3,$4,$5
elsif /^(([1-6])~)\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@format,@lev,@text,@ocn=$1,$2,$3,$4
elsif /<:(.+?)>\s*(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@format,@text,@ocn=$1,$2,$3
elsif /^(([1-6])~(\S+))\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;[um]\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@@alt_id_count+=1
@format,@lev,segname,@text,@ocn=$1,$2,$3,$4,"x#{@@alt_id_count}"
elsif /^(([1-6])~)\s+(\S.+?)#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@@alt_id_count+=1
@format,@lev,@text,@ocn=$1,$2,$3,"x#{@@alt_id_count}"
end
else
if /(.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
@text,@ocn=$1,$2
end
if @para !~/#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$|^$/ #added 2002w06
@text=/(.+?)/m.match(@para)[1]
end
if /^((\d)~(?:~\S+)?)\s+(.+)/m.match(@para)
@format,@lev,@text=$1,$2,$3
end
end
format=@format.dup
@lev_para_ocn=if @para =~/.+#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
Format::FormatTextObject.new(format,@text,@ocn)
else
Format::FormatTextObject.new(format,@text,"#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}")
end
self
end
end
class Scroll <Source
include SiSU_TextUtils
include SiSU_Parts_HTML
@@endnotes_para=[]
@@wiki={ body: [], open: [], close: [], head: [], metadata: [], tail: [], endnotes: [] }
@@dp=nil
def initialize(data,md)
@data,@md=data,md
@dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern
@regx=/^(?:(?:#{Mx[:br_line]}\s*|#{Mx[:br_nl]}\s*)?#{Mx[:lv_o]}\d:(\S*?)#{Mx[:lv_c]}\s*)?(.+)/ #fix Mx[:lv_o] #m # 2004w18 pb pn removal added
@tab="\t"
@@dostype='unix footnotes'
@br="\n"
end
def songsheet
markup
publish
end
# Used for extraction of endnotes from paragraphs
def extract_endnotes(para='') #check
para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)\s*#{Mx[:id_o]}#{@dp}#{Mx[:id_c]}(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
end
def wiki_metadata(meta)
util=SiSU_TextUtils::Wrap.new(meta.text,70,15,1)
txt=util.line_wrap
@@wiki[:metadata] <<= if meta.type=='meta'
<<WOK
#{@tab}#{meta.el}: #{txt}
WOK
else ''
end
end
def wiki_tail
generator="Generated by: #{@md.project_details.project} #{@md.project_details.version} of #{@md.project_details.date_stamp} (#{@md.project_details.date})" if @md.project_details.version
lastdone="Last Generated on: #{Time.now}"
rubyv="Ruby version: #{@md.ruby_version}"
sc=if @md.sc_info
"Source file: #{@md.sc_filename}#{@br}Version number: #{@md.sc_number}#{@br}Version date: #{@md.sc_date}#{@br}"
else ''
end
@@wiki[:tail] <<<<WOK
#{@br}
Other versions of this document: #{@br}
manifest:
#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:manifest]}#{@br}
html:
#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:toc]}#{@br}
pdf:
#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:pdf_p]}
#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:pdf_l]}#{@br}
plaintext (plain text):
#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:plain]}#{@br}
at:
#{vz.url_site}#{@br}
#{sc}
,* #{generator}
,* #{rubyv}
,* #{lastdone}
,* SiSU #{vz.url_sisu}
WOK
end
def wiki_structure(para='',lv='',ocn='',hname='') #% Used to extract the structure of a document
lv=lv.to_i
lv=nil if lv==0
extract_endnotes(para)
para.gsub!(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(?:[\d*+]+)\s+(.+?)#{Mx[:id_o]}#{@dp}#{Mx[:id_c]}(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/,'<ref>\1</ref>') # endnote marker marked up
para.gsub!(/^#{Rx[:lv]}\S*\s+/,'') # endnote marker marked up
para.gsub!(/<\S+?>#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}/,'') # endnote marker marked up
if lv
@@wiki[:body] << case lv
when 1 then '='*2 << para.strip << @br*2
when 2..3 then '='*2 << para.strip << @br*2
when 4 then '='*4 << para.strip << @br*2
when 5..6 then '='*4 << para.strip << @br*2
end
else @@wiki[:body] << para << @br*2 # main text, contents, body KEEP
end
end
def markup # Used for major markup instructions
data=@data
SiSU_Env::InfoEnv.new(@md.fns)
@data_mod,@endnotes,@level,@cont,@copen,@wiki_contents_close=Array.new(6){[]}
(0..6).each { |x| @cont[x]=@level[x]=false }
(4..6).each { |x| @wiki_contents_close[x]='' }
wiki_tail
table_message='[table omitted, see other document formats]'
data.each do |para|
para.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{@br}#{table_message}") #fix
para.gsub!(/.+?<-#>/,'') # remove dummy headings (used by html) #check
para.gsub!(/_\*\s+/,'* ') # bullet markup, marked down
para.gsub!(/©/,'©') # bullet markup, marked down
para.gsub!(/&/,'&') # bullet markup, marked down
para.gsub!(/<sup>(.+?)<\/sup>/,'^\1^')
para.gsub!(/<sub>(.+?)<\/sub>/,'[\1]')
para.gsub!(/<i>(.+?)<\/i>/,"''\\1''")
para.gsub!(/<b>(.+?)<\/b>/,"'''\\1'''")
para.gsub!(/<u>(.+?)<\/u>/,'_\1_')
para.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'[\2 \1]')
para.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'[\1]')
para.gsub!(/<:(?:block|group|verse|alt|code)(?:-end)?>(?:\s+#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]})?/,'')
para.gsub!(/<:p[bn]>/,'') # remove page breaks
para.gsub!(/^\s*#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/,'') # remove empty lines - check
para.gsub!(/<a href=".+?">(.+?)<\/a>/m,'\1')
para.gsub!(/<:name#\S+?>/,'') # remove name links
para.gsub!(/ |#{Mx[:nbsp]}/,' ') # decide on
para.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,' [ \1 ]') #"[ #{dir.url.images_local}\/\\1 ]")
para.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*#{Mx[:lnk_c]}\S+/,'[image: "\1"]')
if para =~/^@(\S+?):\s+(.+?)\Z/m # for headers
d_meta=SiSU_TextUtils::HeaderScan.new(@md,para).meta
if d_meta; wiki_metadata(d_meta)
end
end
if para !~/(^@\S+?:|#{Mx[:br_endnotes]}|#{Mx[:br_eof]})/
if para =~@regx #/.+?<~\d+;\w\d+;\w\d+>.*/ #watch change
paranum=para[@regx,3]
@p_num=Format::ParagraphNumber.new(paranum)
end
@sto=SplitTextObject.new(para).lev_segname_para_ocn
### problem in scroll, it appears tables are getting paragraph numbers
m=/#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
if para =~m \
and para=~/\S+/
para=case @sto.format
when /^(1)~(?:(\S+))?/
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body1
when /^(2)~(?:(\S+))?/
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body2
when /^(3)~(?:(\S+))?/
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body3
when /^(4)~(\S+)/ # work on see SiSU_text_parts::SplitTextObject
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body4
when /^(5)~(?:(\S+))?/
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body5
when /^(6)~(?:(\S+))?/
wiki_structure(para,$1,@sto.ocn,$2)
@sto.lev_para_ocn.heading_body6
else
wiki_structure(para,nil,nil,nil) #watch may be problematic
para
end
elsif para =~/#{table_message}/
@@wiki[:body] << para << @br
elsif para =~/(Note|Endnotes?)/ \
and para !~/#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
elsif para =~/(MetaData)/ \
and para =~/#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/ #debug 2003w46 add rc info ####suspect visit
elsif para.include? 'Owner Details' \
and para !~/#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
elsif para =~/(#{Mx[:tc_p]}|#{Mx[:gr_o]}Th?)/u #tables ! #fix
elsif para =~/(.*)<!#!>(.*)/
one,two=$1,$2
format_text=FormatTextObject.new(one,two)
para=format_text.seg_no_paranum
end
if (para =~/<a name="n\d+">/ \
and para =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote
para=''
end
case para
when /<:i1>/
if para =~/.*<:#>.*$/
format_text=FormatTextObject.new(para,'')
para=format_text.scr_indent_one_no_paranum
end
when /<:i2>/
if para =~/.*<:#>.*$/
format_text=FormatTextObject.new(para,'')
para=format_text.scr_indent_one_no_paranum
end
end
if para !~/#{the_margin.txt_0}|#{the_margin.txt_1}|#{the_margin.txt_2}/
# i don't get the condition for no paranum
end
if para =~/<:center>/
one,two=/(.*)<:center>(.*)/.match(para)[1,2]
format_text=FormatTextObject.new(one,two)
para=format_text.center
end
para.gsub!(/<!.+!>/,' ') if para ## Clean Prepared Text
para.gsub!(/<:\S+>/,' ') if para ## Clean Prepared Text
end
end
end
def publish
content=[]
content << @@wiki[:open]
content << @@wiki[:head]
content << @@wiki[:body]
Output.new(content.join,@md).wiki
@@wiki[:head],@@wiki[:body],@@wiki[:tail],@@wiki[:metadata]=[],[],[],[]
end
end
class Output <Source
include SiSU_Param
include SiSU_Env
def initialize(content,md)
@content,@md=content,md
end
def wiki #%wiki output
SiSU_Env::FileOp.new(@md).mkdir
filename_wiki=SiSU_Env::FileOp.new(@md,@md.fn[:wiki]).mkfile
@sisu=[]
@content.each do |para| # this is a hack
if para =~/^\S/
if para !~/^([*=-]|\.){5}/; filename_wiki.puts para #unix wiki
else filename_wiki.puts para #unix wiki
end
else filename_wiki.puts para # if para =~/^\s/
end
end
end
end
end
end
__END__
#+END_SRC
** zap.rb
#+HEADER: :tangle "../lib/sisu/zap.rb"
#+BEGIN_SRC ruby
#<<sisu_document_header>>
module SiSU_Zap
require_relative 'se' # se.rb
include SiSU_Env
class Source
def initialize(opt)
@opt=opt
@env=SiSU_Env::InfoEnv.new(opt.fns)
end
def read
zap_path="#{@env.path.output}/#{@env.fnb}"
z=SiSU_Env::CleanOutput.new(@opt)
if SiSU_Env::InfoSettings.new.permission?('zap')
unless @opt.act[:quiet][:set]==:on
tell=SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
"Clean files related to processing #{@opt.selections.str} ->",
"#{@opt.fns} -> #{zap_path}"
)
tell.warn
end
z.zap.remove_output
else
unless @opt.act[:quiet][:set]==:on
tell=SiSU_Screen::Ansi.new(
@opt.act[:color_state][:set],
'use of -Z (zap) has not enabled in sisurc.yml'
)
tell.warn
end
end
end
end
end
__END__
#+END_SRC
* document header
#+NAME: sisu_document_header
#+BEGIN_SRC text
encoding: utf-8
- Name: SiSU
- Description: documents, structuring, processing, publishing, search
misc
- Author: Ralph Amissah
<ralph.amissah@gmail.com>
- Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019,
2020, 2021, 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
- Homepages:
<http://www.sisudoc.org>
- Git
<https://git.sisudoc.org/projects/>
<https://git.sisudoc.org/projects/sisu>
<https://git.sisudoc.org/projects/sisu-markup>
#+END_SRC