# encoding: utf-8
=begin
* Name: SiSU
* Description: a framework for document structuring, publishing and search
* Author: Ralph Amissah
* Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Ralph Amissah,
All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
Copyright (C) Ralph Amissah
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see .
If you have Internet connection, the latest version of the GPL should be
available at these locations:
* SiSU uses:
* Standard SiSU markup syntax,
* Standard SiSU meta-markup syntax, and the
* Standard SiSU object citation numbering and system
* Hompages:
* Git
* Ralph Amissah
** Description: urls for output files
=end
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
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 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[: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[: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][: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__