aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2015-01-15 23:38:04 -0500
committerRalph Amissah <ralph@amissah.com>2015-01-19 23:46:16 -0500
commit45d6d69d89fb6a8ad36be13f22c6af0b2a7cbc9a (patch)
tree8f46e71fff365c1ad2dcbf2a8497b87dcd7973f6 /lib/sisu
parentd: po4a_shelf, shelf current po4a, change tack (diff)
d: po4a, initialize either directly with sst or passed through ao
* creates source language directory with source markup files (.sst .ssm .ssi) & the po4a.cfg configuration file, then runs po4a to place the markup source under po4a translation management * --po4a-sst uses original sisu markup source as described above * --po4a-ao passes sisu source markup through document abstraction before converting back to a sisu markup source markup equivalent of the original document, it does this in an attempt to get more uniform output, and put footnotes for example if any in a form that is easier to translate --po4a-ao -v --trans-en:fr,es en/live-manual.ssm --po4a-ao -v --trans-en:fr,es en/live-manual.ssm \ es/live-manual.ssm in the latter example also runs sisu marked up "es" document through document abstraction and returns a sisu markup source version of the document, and against this gettext is (or can be run) to (attempt to) have the source and target languages together in the po/es file * all quite rough, will need to be revisited, * these for now replace the renamed --po4a-shelf (formerly --po4a)
Diffstat (limited to 'lib/sisu')
-rw-r--r--lib/sisu/develop/hub.rb4
-rw-r--r--lib/sisu/develop/hub_actions.rb138
-rw-r--r--lib/sisu/develop/hub_options.rb31
-rw-r--r--lib/sisu/develop/se_file_op.rb24
-rw-r--r--lib/sisu/develop/se_programs.rb10
-rw-r--r--lib/sisu/develop/shared_metadata.rb14
-rw-r--r--lib/sisu/develop/src_po4a_share.rb309
-rw-r--r--lib/sisu/develop/src_po4a_sst_ao_sst.rb893
-rw-r--r--lib/sisu/develop/src_po4a_sst_ao_sst_set.rb284
-rw-r--r--lib/sisu/develop/src_po4a_sstm.rb135
-rw-r--r--lib/sisu/develop/src_shared.rb28
-rw-r--r--lib/sisu/develop/src_sisupod_sstm.rb (renamed from lib/sisu/develop/src_share.rb)4
-rw-r--r--lib/sisu/develop/urls.rb2
13 files changed, 1825 insertions, 51 deletions
diff --git a/lib/sisu/develop/hub.rb b/lib/sisu/develop/hub.rb
index df668922..1b5ac580 100644
--- a/lib/sisu/develop/hub.rb
+++ b/lib/sisu/develop/hub.rb
@@ -133,6 +133,7 @@ module SiSU
actions.outputs.each_file.xml?
actions.outputs.each_file.pdf?
actions.outputs.each_file.man_or_info?
+ actions.outputs.each_file.po4a_make?
actions.outputs.each_file.sqlite_discrete?
actions.outputs.each_file.manifest?
end
@@ -181,6 +182,9 @@ module SiSU
if defined? actions.outputs.loop_files.run_termsheet?
actions.outputs.loop_files.run_termsheet?
end
+ if defined? actions.outputs.loop_files.po4a_setup?
+ actions.outputs.loop_files.po4a_setup?
+ end
if defined? actions.outputs.loop_files.sql?
actions.outputs.loop_files.sql?
end
diff --git a/lib/sisu/develop/hub_actions.rb b/lib/sisu/develop/hub_actions.rb
index 44834cba..7130615e 100644
--- a/lib/sisu/develop/hub_actions.rb
+++ b/lib/sisu/develop/hub_actions.rb
@@ -158,7 +158,7 @@ module SiSU_Hub_Actions
def abstract_objects?
if @opt.act[:ao][:set]==:on #% --ao --dal, -m
if @opt.f_pths.length > 0
- unless @opt.act[:po4a][:set]==:on # --po4a, -P
+ unless @opt.act[:po4a_shelf][:set]==:on # --po4a-shelf
if @opt.fno =~ /\.ssm$/
require_relative 'ao_composite' # ao_composite.rb #pre-processing
SiSU_Assemble::Composite.new(@opt).read
@@ -548,15 +548,51 @@ module SiSU_Hub_Actions
end
end
end
+ def po4a_make?
+ if @opt.act[:po4a_sst_ao_sst][:set]==:on #% --po4a-ao
+ if @opt.f_pths.length > 0
+ require_relative 'src_po4a_sst_ao_sst'
+ SiSU_SStm_AO_SStm::Source.new(@opt).read_process_src_files # src_po4a_sst_ao_sst.rb
+ else
+ msg='sst request requires sisu markup files'
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan).
+ mark(msg)
+ else puts msg
+ end
+ end
+ end
+ end
+ def elasticsearch?
+ if @opt.act[:elasticsearch][:set]==:on #% --elastic, -x
+ if @opt.f_pths.length > 0
+ require_relative 'json_elastic' # json_elastic.rb
+ SiSU_Elastic::Source.new(@opt).read
+ else
+ msg='easticsearch request requires sisu markup files'
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).
+ mark(msg)
+ else puts msg
+ end
+ end
+ end
+ end
def manifest?
if @opt.act[:manifest][:set]==:on #% --manifest, -y
if @opt.f_pths.length > 0
- require_relative 'html_manifest' # html_manifest.rb
- ((@opt.act[:sisupod][:set]==:on \
- || @opt.act[:share_source][:set]==:on) \
- && @opt.f_pths.length < 2 ) \
- ? nil
- : SiSU_Manifest::Source.new(@opt).read
+ begin
+ require_relative 'html_manifest' # html_manifest.rb
+ ((@opt.act[:sisupod][:set]==:on \
+ || @opt.act[:share_source][:set]==:on \
+ || @opt.act[:po4a_sstm][:set]==:on) \
+ && @opt.f_pths.length < 2 ) \
+ ? nil
+ : SiSU_Manifest::Source.new(@opt).read
+ rescue
+ end
else
msg='manifest request requires sisu markup files'
if (@opt.act[:verbose_plus][:set]==:on \
@@ -588,8 +624,9 @@ module SiSU_Hub_Actions
end
def loop_files
def share_source?
- if @opt.act[:share_source][:set]==:on \
- or @opt.act[:sisupod][:set]==:on \
+ if @opt.act[:sisupod][:set]==:on \
+ or @opt.act[:share_source][:set]==:on \
+ or @opt.act[:po4a_sstm][:set]==:on \
or @opt.act[:git][:set]==:on
begin
if @opt.f_pths.length > 0
@@ -607,26 +644,6 @@ module SiSU_Hub_Actions
else puts msg
end
end
- if @opt.act[:share_source][:set]==:on
- if @opt.f_pths.length > 0
- require_relative 'src_share' # src_share.rb
- begin
- ensure
- SiSU_Hub_Loops::OptionLoopFiles.new(@opt).
- loop_files_on_given_option_bundle do
- SiSU_Markup::Source.new(@opt).read
- end
- end
- else
- msg='share markup source request requires sisu markup files'
- if (@opt.act[:verbose_plus][:set]==:on \
- || @opt.act[:maintenance][:set]==:on)
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan).
- mark(msg)
- else puts msg
- end
- end
- end
if @opt.act[:sisupod][:set]==:on #% --sisupod, -S
if @opt.f_pths.length > 0
require_relative 'src_sisupod_make' # src_sisupod_make.rb
@@ -672,7 +689,8 @@ module SiSU_Hub_Actions
end
end
if (@opt.act[:sisupod][:set]==:on \
- || @opt.act[:share_source][:set]==:on) \
+ || @opt.act[:share_source][:set]==:on \
+ || @opt.act[:po4a_sstm][:set]==:on) \
and @opt.act[:manifest][:set]==:on #% --manifest, -y
if @opt.f_pths.length > 0
require_relative 'html_manifest' # html_manifest.rb
@@ -707,6 +725,66 @@ module SiSU_Hub_Actions
end
end
end
+ if @opt.act[:share_source][:set]==:on
+ if @opt.f_pths.length > 0
+ require_relative 'src_sisupod_sstm' # src_sisupod_sstm.rb
+ begin
+ ensure
+ SiSU_Hub_Loops::OptionLoopFiles.new(@opt).
+ loop_files_on_given_option_bundle do
+ SiSU_Markup::Source_Sisupod.new(@opt).read
+ end
+ end
+ else
+ msg='share markup source request requires sisu markup files'
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan).
+ mark(msg)
+ else puts msg
+ end
+ end
+ end
+ if @opt.act[:po4a_sstm][:set]==:on #% --po4a-sst
+ if @opt.f_pths.length > 0
+ require_relative 'src_po4a_sstm'
+ begin
+ SiSU_Hub_Loops::OptionLoopFiles.new(@opt).
+ loop_files_on_given_option do
+ SiSU_Markup::Source_Po4a.new(@opt).read # src_po4a_sstm.rb
+ end
+ ensure
+ end
+ else
+ msg='sst request requires sisu markup files'
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan).
+ mark(msg)
+ else puts msg
+ end
+ end
+ end
+ if @opt.act[:po4a_sst_ao_sst][:set]==:on #% --po4a-ao
+ if @opt.f_pths.length > 0
+ require_relative 'src_po4a_sst_ao_sst'
+ begin
+ SiSU_Hub_Loops::OptionLoopFiles.new(@opt).
+ loop_files_on_given_option do
+ SiSU_SStm_AO_SStm::Source.new(@opt).read_setup # src_po4a_sst_ao_sst.rb
+ end
+ ensure
+ end
+ else
+ msg='sst request requires sisu markup files'
+ if (@opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:cyan).
+ mark(msg)
+ else puts msg
+ end
+ end
+ end
if @opt.act[:po4a_shelf][:set]==:on #% --po4a-shelf
if @opt.f_pths.length > 0
require_relative 'src_po4a_shelf'
diff --git a/lib/sisu/develop/hub_options.rb b/lib/sisu/develop/hub_options.rb
index c3f31a88..6e22c2ae 100644
--- a/lib/sisu/develop/hub_options.rb
+++ b/lib/sisu/develop/hub_options.rb
@@ -614,7 +614,7 @@ module SiSU_Commandline
if ch =~/N/ then select_arr << '--digests'
ch=ch.gsub(/[N]/,'')
end
- if ch =~/P/ then select_arr << '--po4a-shelf'
+ if ch =~/P/ then select_arr << '--po4a-sst'
ch=ch.gsub(/[P]/,'')
end
if ch =~/d/ then select_arr << '--sqlite'
@@ -1301,11 +1301,32 @@ module SiSU_Commandline
=~/"--harvest"/) \
? { bool: true, set: :on }
: { bool: false, set: :na }
+ act[:po4a_sstm]=(select_arr.inspect \
+ =~/"--po4a-ss[tm]"/) \
+ ? { bool: true, set: :on }
+ : { bool: false, set: :na }
+ act[:po4a_sst_ao_sst]=(select_arr.inspect \
+ =~/"--po4a-ao(?:-ss[tm])?"/) \
+ ? { bool: true, set: :on }
+ : { bool: false, set: :na }
act[:po4a_shelf]=(select_arr.inspect \
=~/"--po4a-shelf"|"--pot?-shelf"/) \
? { bool: true, set: :on }
: { bool: false, set: :na }
- if act[:po4a_shelf][:set]==:on
+ if act[:po4a_shelf][:set]==:on \
+ or act[:po4a_sst_ao_sst][:set]==:on \
+ or act[:po4a_sstm][:set]==:on
+ act[:po4a_lang]=if select_arr.inspect \
+ =~/"--(?:trans|init)-([a-z]{2}):((?:(?:[a-z]{2}\b),?)+)/
+ lng_src,lng_trn=$1,$2.split(',')
+ { bool: true, set: :on, src: lng_src, trn: lng_trn }
+ elsif select_arr.inspect \
+ =~/"--trans"/
+ { bool: true, set: :on }
+ { bool: true, set: :on, src: 'en', trn: [] }
+ else
+ { bool: false, set: :na }
+ end
act[:po4a_lang_trans]=if select_arr.inspect \
=~/"--trans-([a-z]{2}):((?:(?:[a-z]{2}\b),?)+)/
lng_src,lng_trn=$1,$2.split(',')
@@ -1450,8 +1471,9 @@ module SiSU_Commandline
|| act[:pdf_p][:set]==:on \
|| act[:pdf_l][:set]==:on \
|| act[:qrcode][:set]==:on \
- || act[:share_source][:set]==:on \
|| act[:sisupod][:set]==:on \
+ || act[:share_source][:set]==:on \
+ || act[:po4a_sstm][:set]==:on \
|| act[:concordance][:set]==:on \
|| act[:sqlite_discrete][:set]==:on \
|| act[:sqlite_import][:set]==:on \
@@ -1499,8 +1521,9 @@ module SiSU_Commandline
|| act[:pdf_p][:set]==:on \
|| act[:pdf_l][:set]==:on \
|| act[:qrcode][:set]==:on \
- || act[:share_source][:set]==:on \
|| act[:sisupod][:set]==:on \
+ || act[:share_source][:set]==:on \
+ || act[:po4a_sstm][:set]==:on \
|| act[:concordance][:set]==:on \
|| act[:xml_dom][:set]==:on \
|| act[:xml_sax][:set]==:on \
diff --git a/lib/sisu/develop/se_file_op.rb b/lib/sisu/develop/se_file_op.rb
index 6b134635..342f75f1 100644
--- a/lib/sisu/develop/se_file_op.rb
+++ b/lib/sisu/develop/se_file_op.rb
@@ -480,6 +480,12 @@ module SiSU_File_Op
fn=base_filename.po
make_file(path,fn)
end
+ def po4a_sst(lng=@md.opt.lng)
+ path=output_path.po4a_sst(lng).dir
+ make_path(path)
+ fn=base_filename.po4a_sst
+ make_file(path,fn)
+ end
self
end
def place_file
@@ -1465,6 +1471,9 @@ module SiSU_File_Op
? (@md.fn[:pot])
: (@fno + '.pot')
end
+ def po4a_sst #check
+ @fno
+ end
def sisupod
(@md.fns =~/\.ssm\.sst$/) \
? @md.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm.txz')
@@ -1826,6 +1835,21 @@ module SiSU_File_Op
end
self
end
+ def po4a_sst(lng=@md.opt.lng)
+ @lng=lng
+ def dir
+ output_path.base.dir + '/' \
+ + Gt[:src] + '/' \
+ + @md.opt.fng + '/po4a/' \
+ + @lng
+ end
+ def url
+ output_path.base.url + '/po4a/' \
+ + @md.fnb \
+ + @lng
+ end
+ self
+ end
def md_harvest
manifest
self
diff --git a/lib/sisu/develop/se_programs.rb b/lib/sisu/develop/se_programs.rb
index 92a5a6fe..611507c4 100644
--- a/lib/sisu/develop/se_programs.rb
+++ b/lib/sisu/develop/se_programs.rb
@@ -134,6 +134,16 @@ module SiSU_Sys_Call
false
end
end
+ def po4a #po4a
+ program='po4a'
+ program_ref="\n\t\tpo4a"
+ if program_found?(program); true
+ else
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).
+ warn("#{program} is not installed #{program_ref}")
+ false
+ end
+ end
def zip #zip
program='zip'
program_ref="\n\t\tused to in the making of number of file formats, odf, epub"
diff --git a/lib/sisu/develop/shared_metadata.rb b/lib/sisu/develop/shared_metadata.rb
index 6def4788..3cfd72f1 100644
--- a/lib/sisu/develop/shared_metadata.rb
+++ b/lib/sisu/develop/shared_metadata.rb
@@ -674,13 +674,13 @@ module SiSU_Metadata
# end
nil
end
- def identifier
- if defined? @md.classify.identifier \
- and @md.classify.identifier
- ' :identifier: ' + @md.classify.identifier
- else nil
- end
- end
+ #def identifier
+ # if defined? @md.classify.identifier \
+ # and @md.classify.identifier
+ # ' :identifier: ' + @md.classify.identifier
+ # else nil
+ # end
+ #end
def loc
if defined? @md.classify.loc \
and @md.classify.loc
diff --git a/lib/sisu/develop/src_po4a_share.rb b/lib/sisu/develop/src_po4a_share.rb
new file mode 100644
index 00000000..3c34115a
--- /dev/null
+++ b/lib/sisu/develop/src_po4a_share.rb
@@ -0,0 +1,309 @@
+# encoding: utf-8
+=begin
+
+* Name: SiSU
+
+** Description: documents, structuring, processing, publishing, search
+*** pot file generation
+
+** Author: Ralph Amissah
+ <ralph@amissah.com>
+ <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 Ralph Amissah,
+ All Rights Reserved.
+
+** License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+** SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+** Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+** Git
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_share.rb;hb=HEAD>
+
+=end
+#module SiSU_SStm_AO_SStm
+module SiSU_Languages_Selected
+ require_relative 'utils_response' # utils_response.rb
+ def language
+ def sisu_languages_available
+ Px[:lng_lst]
+ end
+ def source_language_selected_str
+ @opt.act[:po4a_lang][:src] \
+ ? @opt.act[:po4a_lang][:src]
+ : 'en'
+ end
+ def translation_languages_selected
+ @opt.act[:po4a_lang][:trn] \
+ ? @opt.act[:po4a_lang][:trn]
+ : []
+ end
+ def translation_languages_available
+ sisu_languages_available - [source_language_selected_str]
+ end
+ def translation_languages_selected_that_are_available
+ translation_languages_selected & sisu_languages_available
+ end
+ def translation_languages_selected_that_are_available_str
+ translation_languages_selected_that_are_available.join(' ')
+ end
+ def translation_languages_selected_str
+ @opt.act[:po4a_lang][:trn].join(' ')
+ end
+ self
+ end
+end
+module SiSU_Po4a_Project
+ class Po4aCfg
+ include SiSU_Composite_Doc_Utils # composite doc, .ssm, extract all related insert files, array of filenames test
+ include SiSU_Response
+ include SiSU_Languages_Selected
+ def initialize(opt,file)
+ @opt,@file=opt,file
+ end
+ def song
+ if @opt.lng==language.source_language_selected_str
+ ans=response?('po4a config file')
+ if ans
+ po4a_cfg
+ end
+ end
+ end
+ def po4a_cfg_filename
+ 'po4a.cfg'
+ end
+ def dir
+ def pwd
+ Dir.pwd
+ end
+ def po4a_
+ 'po4a/' # ''
+ end
+ def pot
+ #po4a_ + 'pot'
+ 'pot'
+ end
+ def po
+ #po4a_ + 'po'
+ 'po'
+ end
+ self
+ end
+ def po4a_cfg_file
+ File.open("#{Dir.pwd}/#{po4a_cfg_filename}",'w')
+ end
+ def po4a_cfg
+ lng=language.source_language_selected_str
+ doc_import_list=composite_and_imported_filenames_array(@opt.fno)
+ po4a_cfg_arr=[]
+ po4a_cfg_arr \
+ << "[po4a_langs] #{language.translation_languages_selected_that_are_available_str}"
+ po4a_cfg_arr \
+ << "[po4a_paths] #{dir.pot}/$master.pot $lang:#{dir.po}/$lang/$master.po"
+ doc_import_list.each do |file_src|
+ file_src_fn=
+ file_src.gsub(/#{language.source_language_selected_str}\//,'')
+ po4a_cfg_arr \
+ << "[type: text] #{lng}/#{file_src} $lang:$lang/#{file_src_fn}"
+ end
+ file=@file.write_file.po4a_cfg
+ po4a_cfg_arr.each do |txt|
+ puts txt
+ file << txt << "\n"
+ end
+ file.close
+ end
+ end
+ class Po4aProject
+ include SiSU_Languages_Selected
+ include SiSU_Response
+ def initialize(opt,file)
+ @opt,@file=opt,file
+ end
+ def song
+ make_paths
+ if FileTest.directory?(@file.output_path.po4a.dir)
+ Dir.chdir(@file.output_path.po4a.dir)
+ dirs=Dir['*/']
+ dirs_language=[]
+ dirs.each do |x|
+ dirs_language << x.gsub(/\/$/,'')
+ end
+ dirs_translation = \
+ (language.translation_languages_available & dirs_language)
+ end
+ if (language.translation_languages_available & [@opt.lng]).length == 1
+ puts %{gettext for: #{dirs_translation}
+in #{Dir.pwd}}
+ ans=response?('gettext?')
+ if ans
+ gettext_if_any_build_src_trans_po
+ end
+ end
+ ans=response?('build project?')
+ if ans
+ build_src_master_to_pot_and_po_and_srcs
+ end
+ end
+ def flags
+ def debug
+ '-d -v'
+ end
+ def normal
+ ''
+ end
+ def quiet
+ '-q'
+ end
+ self
+ end
+ def build_src_master_to_pot_and_po_and_srcs
+ if SiSU_Sys_Call::SystemCall.new.po4a
+ pwd=Dir.pwd
+ #cmd='po4a --keep 0 -M UTF-8 --no-backups ' \
+ #+ '--package-name ' \
+ #+ 'sisu-manual' + ' ' \
+ #+ flags.normal + ' ' \
+ #+ filename.po4a_cfg
+ cmd='po4a --keep 0 -M UTF-8' \
+ + flags.normal + ' ' \
+ + @file.base_filename.po4a_cfg
+ Dir.chdir(@file.output_path.po4a.dir)
+ system("
+ cd #{@file.output_path.po4a.dir}
+ #{cmd}
+ cd -
+ "); puts cmd
+ Dir.chdir(pwd)
+ end
+ end
+ def gettext_if_any_build_src_trans_po
+ Dir.chdir(@file.output_path.po4a.dir)
+ dirs=Dir['*/']
+ dirs_language=[]
+ dirs.each do |x|
+ dirs_language << x.gsub(/\/$/,'')
+ end
+ dirs_translation = \
+ (language.translation_languages_available & dirs_language)
+ files_src=Dir.glob("./#{source_language_selected_str}/*.ss[tmi]")
+ dirs_translation.each do |lng|
+ files_src.each do |file|
+ fn=file.gsub(/\.\/#{source_language_selected_str}\//,'')
+ system("
+ po4a-gettextize -f text -M utf-8 \
+ -m ./#{source_language_selected_str}/#{fn} \
+ -l ./#{lng}/#{fn} \
+ -p ./po/#{lng}/#{fn}.po
+ ")
+ puts fn
+ end
+ end
+ end
+ def dir_mk(dir)
+ unless FileTest.directory?(dir)
+ FileUtils::mkdir_p(dir)
+ end
+ end
+ def make_paths
+ dir_mk(@file.output_path.pot.dir)
+ dir_mk(@file.output_path.po.dir)
+ end
+ def clean
+ #rm -f po/*/*.po~
+ #rm -rf ../build
+ FileUtils.rm_f Dir.glob("./#{dir.po}/*/*.po~")
+ end
+ def distclean
+ #rm -f po4a.cfg
+ #rm -rf $(LANGUAGES)
+ FileUtils::rm_f(filename.po4a_cfg)
+ FileUtils::rm_r(language.possible_translations,:force => true)
+ #FileUtils::rm_r(language.translation_languages_selected_that_are_available,:force => true)
+ end
+ end
+ class Po4aDistClean
+ include SiSU_Languages_Selected
+ include SiSU_Response
+ def initialize(opt,file)
+ @opt,@file=opt,file
+ end
+ def song
+ pwd=Dir.pwd
+ if FileTest.directory?(@file.output_path.po4a.dir)
+ Dir.chdir(@file.output_path.po4a.dir)
+ dirs=Dir['*/']
+ dirs_language=[]
+ dirs.each do |x|
+ dirs_language << x.gsub(/\/$/,'')
+ end
+ dirs_translation = \
+ (language.translation_languages_available & dirs_language)
+ if dirs_translation.length > 0
+ puts %{remove language translation directorie(s): #{dirs_translation}
+in #{Dir .pwd}}
+ ans=response?('disclean?')
+ if ans
+ FileUtils::rm_f(@file.base_filename.po4a_cfg)
+ FileUtils::rm_r(dirs_translation,:force => true)
+ #FileUtils::rm_r(language.translation_languages_available,:force => true)
+ end
+ end
+ Dir.chdir(pwd)
+ end
+ end
+ end
+end
+#end
+__END__
+REMOVE
+&#033;\|&#035;\|&&#042;\|&#045;\|&#047;\|&#095;\|&#123;\|&#125;\|&#126;\|&#
+
+tables are problematic, difficult to reconstitute instruction, check
+
+metadata, move to top? and work on
+
+footnotes, different types, asterisk, also do you want to have separate
+paragraphs, or breaks within one block?
+
+where no ocn appropriately use ~# or -# or indeed 1~name-
+
+comments in document, what to do about them, not sure they are currently
+retained in dal, could be quite valuable to keep
+
+Translate Shell
+http://www.soimort.org/translate-shell/
+translate.google.com
diff --git a/lib/sisu/develop/src_po4a_sst_ao_sst.rb b/lib/sisu/develop/src_po4a_sst_ao_sst.rb
new file mode 100644
index 00000000..c1c85052
--- /dev/null
+++ b/lib/sisu/develop/src_po4a_sst_ao_sst.rb
@@ -0,0 +1,893 @@
+# encoding: utf-8
+=begin
+
+* Name: SiSU
+
+** Description: documents, structuring, processing, publishing, search
+*** pot file generation
+
+** Author: Ralph Amissah
+ <ralph@amissah.com>
+ <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 Ralph Amissah,
+ All Rights Reserved.
+
+** License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+** SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+** Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+** Git
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sst_ao_sst.rb;hb=HEAD>
+
+=end
+module SiSU_SStm_AO_SStm
+ require_relative 'ao' # ao.rb
+ require_relative 'se' # se.rb
+ include SiSU_Env
+ require_relative 'ao_composite' # ao_composite.rb
+ require_relative 'shared_metadata' # shared_metadata.rb
+ require_relative 'src_po4a_share' # src_po4a_share.rb
+ require_relative 'src_po4a_sst_ao_sst_set' # src_po4a_sst_ao_sst_set.rb
+ include SiSU_Param
+ require_relative 'object_munge' # object_munge.rb
+ require_relative 'utils_composite' # utils_composite.rb
+ require_relative 'utils_response' # utils_response.rb
+ class Source
+ include SiSU_Object_Munge
+ include SiSU_Languages_Selected
+ include SiSU_Response
+ @@md_src,@@md_master=
+ nil, nil
+ @@auto_translation_ = :go
+ def initialize(opt,fn=nil)
+ @opt,@fn=opt,fn
+ #unless @opt.fns =~/(.+?\.(?:-|ssm\.)?sst)$/
+ # puts "#{@opt.fns} not a processed file type"
+ #end
+ file_arr=SiSU_Info_Env::InfoEnv.new.
+ source_file_processing_array(@opt.fno)
+ SiSU_Param::Parameters::Instructions.new(file_arr,@opt).extract
+ r=Px[:lng_lst_rgx].gsub(/\|#{language.source_language_selected_str}\|/,'|')
+ @lang_regx=%r{(?:#{r})}
+ @@todo=if source_language_selected_str == opt.f_pth[:lng]
+ :same_file
+ else :compare
+ end
+ if opt.f_pth[:lng]==@opt.lng_base \
+ and opt.f_pth[:lng]==source_language_selected_str
+ @@md_master=SiSU_Param::Parameters.new(opt).get
+ end
+ end
+ def wrap_width_set(md,env)
+ if defined? md.make.plaintext_wrap \
+ and md.make.plaintext_wrap
+ md.make.plaintext_wrap
+ elsif defined? env.plaintext_wrap \
+ and env.plaintext_wrap
+ #env.plaintext_wrap # 78 use 75
+ 75
+ else 75 #78
+ end
+ end
+ def process_file(md,env,file,wrap_width,fn)
+ if source_language_selected_str == @opt.f_pth[:lng]
+ @@ao_arr_lang_trans=
+ SiSU_AO::Source.new(
+ @opt,
+ fn,
+ :po4a
+ ).get # ao file drawn here
+ end
+ @ao_arr_lang_src=
+ SiSU_AO::Source.new(
+ @opt,
+ fn,
+ :po4a
+ ).get # ao file drawn here
+ SiSU_SStm_AO_SStm::Source::Scroll.new(
+ fn,
+ @ao_arr_lang_src,
+ @@ao_arr_lang_trans,
+ @@md_src,
+ @@md_master,
+ wrap_width
+ ).songsheet
+ end
+ def read_process_src_files
+ begin
+ src={}
+ src[:pth]=@opt.f_pth[:pth]
+ src[:files]=if @opt.fns =~ /\.(?:(?:-|ssm\.)sst|ssm)$/
+ @opt.fns=@opt.fns.gsub(/\.ssm\.sst$/,'.ssm')
+ SiSU_Assemble::CompositeFileList.new(@opt).read
+ else
+ [@opt.fns]
+ end
+ md=SiSU_Param::Parameters.new(@opt).get
+ env=SiSU_Env::InfoEnv.new(@opt.fns)
+ file=SiSU_Env::FileOp.new(md)
+ lng=/\/([^\/]+)$/.match(src[:pth])[1]
+ if language.source_language_selected_str == lng
+ SiSU_Po4a_Project::Po4aDistClean.new(@opt,file).song
+ end
+ wrap_width=wrap_width_set(md,env)
+ lng = /\/([^\/]+)$/.match(src[:pth])[1]
+ ans=response?('process files?')
+ if ans
+ src[:files].each do |fn|
+ puts "[#{lng}] #{fn}"
+ process_file(md,env,file,wrap_width,fn)
+ end
+ end
+ rescue
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
+ __LINE__.to_s + ':' + __FILE__
+ end
+ ensure
+ end
+ end
+ def read_setup
+ begin
+ md=SiSU_Param::Parameters.new(@opt).get
+ file=SiSU_Env::FileOp.new(md)
+ SiSU_Po4a_Project::Po4aCfg.new(@opt,file).song
+ SiSU_Po4a_Project::Po4aProject.new(@opt,file).song
+ rescue
+ SiSU_Errors::Rescued.new($!,$@,@opt.selections.str,@opt.fns).location do
+ __LINE__.to_s + ':' + __FILE__
+ end
+ ensure
+ end
+ end
+ private
+ class Scroll <Source
+ include SiSU_Po4aUtils
+ @@endnotes={ para: [], end: [] }
+ def initialize(fn,data_src,data_master,md_src,md_master,wrap_width)
+ @fn,@data_src,@data_master,@md_src,@md_master,@wrap_width=
+ fn, data_src, data_master, md_src, md_master, wrap_width
+ @md=md_src
+ @tab="\t"
+ @@endnotes_=(@md.opt.selections.str =~/--endnote/) \
+ ? true
+ : false # --footnote
+ @pot={
+ body: [],
+ open: [],
+ close: [],
+ head: [],
+ metadata: [],
+ tail: []
+ }
+ end
+ def br
+ (@md.opt.selections.str =~/--dos/) ? "\r\n" : "\n" # --unix
+ end
+ def songsheet
+ fn=@fn
+ pot=compare_structure_src_trn(@data_src,@data_master,@@todo)
+ publish(fn,pot)
+ end
+ def pot_structure_wrap(orig,trans,indent=0,hang=0)
+ SiSU_Po4aUtils::Wrap.new(
+ @md,
+ orig,
+ trans,
+ @wrap_width,
+ indent,
+ hang
+ )
+ end
+ def wrap_endnotes(orig_notes='',trn_notes='')
+ #nt=@@endnotes_ ? 'endnote' : 'footnote'
+ @fn=0
+ a_l=orig_notes.length
+ 0.upto(a_l-1) do |i|
+ @fn=if orig_notes[i].to_s =~/^\^~([\d*+]+)/ # provides endnote number within paragraph
+ @fn += 1
+ else @fn
+ end
+ #mark="^~ "
+ orig=(orig_notes[i].to_s =~/^\^~[\d*+]+/) \
+ ? (orig_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~'))
+ : orig_notes[i].to_s
+ trans=if trn_notes.is_a?(Array) \
+ and trn_notes.length==orig_notes.length
+ (trn_notes[i].to_s =~/^\^~[\d*+]+/) \
+ ? (trn_notes[i].to_s.gsub(/^\^~[\d*+]+/,'^~'))
+ : trn_notes[i].to_s
+ else ''
+ end
+ util=pot_structure_wrap(orig,trans)
+ wrap=util.line_wrap
+ wrap=if wrap =~ /^\s*\^~[\d*+]+\s+.+?\s*\Z/m
+ wrap.gsub(/^\s*(\^~[\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB
+\\1 \\2
+GSUB
+ )
+ else
+ wrap.gsub(/^(.+)\Z/m, <<GSUB
+\\1
+GSUB
+ )
+ end
+ @@endnotes[:para] << wrap
+ @@endnotes[:end] << '' << wrap
+ end
+ @@endnotes[:para].each {|e| @pot[:body] << e << br}
+ @@endnotes[:para]=[]
+ @@endnotes
+ end
+ def pot_metadata_src
+ @po4a_identify_type='type: SiSU doc' #'type: Plain text'
+ meta_src=SiSU_Metadata::Summary.new(@md_src)
+ w=[]
+ w << [
+ meta_src.metadata_tags.title.main,
+ meta_src.metadata_tags.title.sub,
+ meta_src.metadata_tags.title.edition,
+ meta_src.metadata_tags.title.note,
+ meta_src.metadata_tags.title.short,
+ meta_src.metadata_tags.title.language,
+ meta_src.metadata_tags.title.language_char,
+ ]
+ w << [
+ meta_src.metadata_tags.creator.head,
+ meta_src.metadata_tags.creator.author,
+ meta_src.metadata_tags.creator.contributor,
+ meta_src.metadata_tags.creator.illustrator,
+ meta_src.metadata_tags.creator.photographer,
+ meta_src.metadata_tags.creator.translator,
+ meta_src.metadata_tags.creator.audio,
+ meta_src.metadata_tags.creator.digitized_by,
+ meta_src.metadata_tags.creator.prepared_by,
+ ]
+ w << [
+ meta_src.metadata_tags.rights.head,
+ meta_src.metadata_tags.rights.copyright.text,
+ meta_src.metadata_tags.rights.copyright.translation,
+ meta_src.metadata_tags.rights.copyright.illustrations,
+ meta_src.metadata_tags.rights.copyright.photographs,
+ meta_src.metadata_tags.rights.copyright.digitization,
+ meta_src.metadata_tags.rights.copyright.audio,
+ meta_src.metadata_tags.rights.license,
+ ]
+ w << [
+ meta_src.metadata_tags.classify.head,
+ meta_src.metadata_tags.classify.subject,
+ meta_src.metadata_tags.classify.topic_register,
+ meta_src.metadata_tags.classify.loc,
+ meta_src.metadata_tags.classify.dewey,
+ ]
+ w << [
+ meta_src.metadata_tags.date.head,
+ meta_src.metadata_tags.date.added_to_site,
+ meta_src.metadata_tags.date.available,
+ meta_src.metadata_tags.date.created,
+ meta_src.metadata_tags.date.issued,
+ meta_src.metadata_tags.date.modified,
+ meta_src.metadata_tags.date.published,
+ meta_src.metadata_tags.date.valid,
+ ]
+ w << [
+ meta_src.processing_tags.make.language,
+ meta_src.processing_tags.make.headings,
+ meta_src.processing_tags.make.num_top,
+ meta_src.processing_tags.make.breaks,
+ meta_src.processing_tags.make.emphasis,
+ meta_src.processing_tags.make.bold,
+ meta_src.processing_tags.make.italics,
+ meta_src.processing_tags.make.texpdf_font,
+ ]
+ w.each do |y|
+ z=''
+ y.each do |x|
+ if x
+ z += x + "\n" if x =~/^#|^msg(?:id|str)/
+ z += %{#{x}\n} if x =~/^@\S+?:(?: |$)/
+ z += %{#{x}\n} if x =~/^\s+:\S+?: /
+ end
+ end
+ @pot[:metadata] << z << br
+ #puts z unless z.empty?
+ end
+ end
+ def pot_metadata_src_trn
+ #@po4a_identify_type='type: Plain text'
+ meta_src=SiSU_Metadata::Summary.new(@md_src)
+ w=[]
+ w << [
+ meta_src.metadata_tags.title.main,
+ meta_src.metadata_tags.title.sub,
+ meta_src.metadata_tags.title.edition,
+ meta_src.metadata_tags.title.note,
+ meta_src.metadata_tags.title.short,
+ meta_src.metadata_tags.title.language,
+ meta_src.metadata_tags.title.language_char,
+ ]
+ w << [
+ meta_src.metadata_tags.creator.head,
+ meta_src.metadata_tags.creator.author,
+ meta_src.metadata_tags.creator.contributor,
+ meta_src.metadata_tags.creator.illustrator,
+ meta_src.metadata_tags.creator.photographer,
+ meta_src.metadata_tags.creator.translator,
+ meta_src.metadata_tags.creator.audio,
+ meta_src.metadata_tags.creator.digitized_by,
+ meta_src.metadata_tags.creator.prepared_by,
+ ]
+ w << [
+ meta_src.metadata_tags.rights.head,
+ meta_src.metadata_tags.rights.copyright.text,
+ meta_src.metadata_tags.rights.copyright.translation,
+ meta_src.metadata_tags.rights.copyright.illustrations,
+ meta_src.metadata_tags.rights.copyright.photographs,
+ meta_src.metadata_tags.rights.copyright.digitization,
+ meta_src.metadata_tags.rights.copyright.audio,
+ meta_src.metadata_tags.rights.license,
+ ]
+ w << [
+ meta_src.metadata_tags.classify.head,
+ meta_src.metadata_tags.classify.subject,
+ meta_src.metadata_tags.classify.topic_register,
+ meta_src.metadata_tags.classify.loc,
+ meta_src.metadata_tags.classify.dewey,
+ ]
+ w << [
+ meta_src.metadata_tags.date.head,
+ meta_src.metadata_tags.date.added_to_site,
+ meta_src.metadata_tags.date.available,
+ meta_src.metadata_tags.date.created,
+ meta_src.metadata_tags.date.issued,
+ meta_src.metadata_tags.date.modified,
+ meta_src.metadata_tags.date.published,
+ meta_src.metadata_tags.date.valid,
+ ]
+ w << [
+ meta_src.processing_tags.make.language,
+ meta_src.processing_tags.make.headings,
+ meta_src.processing_tags.make.num_top,
+ meta_src.processing_tags.make.breaks,
+ meta_src.processing_tags.make.emphasis,
+ meta_src.processing_tags.make.bold,
+ meta_src.processing_tags.make.italics,
+ meta_src.processing_tags.make.texpdf_font,
+ ]
+ w.each do |y|
+ z=''
+ y.each do |x|
+ if x
+ z += x + "\n" if x =~/^#|^msg(?:id|str)/
+ z += %{#{x}\n} if x =~/^@\S+?:(?: |$)/
+ z += %{#{x}\n} if x =~/^\s+:\S+?: /
+ end
+ end
+ @pot[:metadata] << z << br
+ #puts z unless z.empty?
+ end
+ end
+ def auto_translate?(set_to=nil)
+ @@auto_translation_=
+ if @md.opt.act[:po4a_lang_trans][:set]==:on
+ set_to \
+ ? set_to
+ : @@auto_translation_
+ else :skip
+ end
+ end
+ def auto_translation(src_txt,markup=:src) # check for an appropriate request flag
+ auto_translate?(:skip)
+ begin
+ src_txt_clean=clean_text(src_txt,markup)
+ src_txt_clean=src_txt_clean.
+ gsub(/\n/,' ').
+ gsub(/"/,'\"').
+ gsub(/([()])/,'\\\\\1')
+ trans=''
+ unless auto_translate? == :skip
+ require 'timeout'
+ Timeout::timeout(60) {
+ trans=`trans -b -no-ansi en:#{@md.opt.f_pth[:lng_is]} #{src_txt_clean}`.strip
+ unless trans.empty?
+ trans + ' {[G.Tr]}http://translate.google.com'
+ end
+ }
+ end
+ trans
+ rescue
+ auto_translate?(:skip)
+ p 'timeout issues with translation, skip remaining'
+ end
+ end
+ def pot_structure
+ def heading(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ lv=n=n3=nil
+ lv=dob_src.ln
+ n=lv - 1
+ n3=lv + 2
+ util=nil
+ fn=(dob_src.name=~/[a-z\d]/i) ? dob_src.name : ''
+ mark="#{dob_src.lv}~#{fn} "
+ orig="#{mark}#{dob_src.obj}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark}#{dob_trn.obj}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ util=pot_structure_wrap(orig,trans)
+ wrapped=util.line_wrap
+ @pot[:body] << wrapped << br # main text, contents, body KEEP
+ if @@endnotes[:para] \
+ and notes_s.length > 0 \
+ and not @@endnotes_
+ @pot[:body] << br
+ wrap_endnotes(notes_s,notes_t)
+ elsif @@endnotes[:para] \
+ and @@endnotes_
+ @pot[:body] << br*2
+ end
+ end
+ def para(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ util=nil
+ wrapped=if dob_src.indent =~/[1-9]/ \
+ and dob_src.indent == dob_src.hang
+ s_mark=desc=orig=trans=''
+ mark=if dob_src.bullet_
+ "_#{dob_src.indent}* "
+ else
+ "_#{dob_src.indent} "
+ end
+ orig="#{mark}#{dob_src.obj}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark}#{dob_trn.obj}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ util=pot_structure_wrap(orig,trans)
+ elsif dob_src.hang =~/[0-9]/ \
+ and dob_src.indent != dob_src.hang
+ s_mark=desc=orig=trans=''
+ mark="_#{dob_src.hang}_#{dob_src.indent} "
+ orig="#{mark}#{dob_src.obj}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark}#{dob_trn.obj}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ util=pot_structure_wrap(orig,trans)
+ else
+ s_mark=desc=orig=trans=''
+ if dob_src.bullet_
+ mark='_* '
+ orig="#{mark}#{dob_src.obj}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark}#{dob_trn.obj}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ else
+ mark=''
+ orig=dob_src.obj
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark}#{dob_trn.obj}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ end
+ util=pot_structure_wrap(orig,trans)
+ end
+ wrapped=util.line_wrap
+ @pot[:body] << wrapped << br # main text, contents, body KEEP
+ if @@endnotes[:para] \
+ and notes_s.length > 0 \
+ and not @@endnotes_
+ @pot[:body] << br
+ wrap_endnotes(notes_s,notes_t)
+ elsif @@endnotes[:para] \
+ and @@endnotes_
+ @pot[:body] << br*2
+ end
+ end
+ def block(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ mark_o ="block{\n\n"
+ mark_c ="\n\n}block"
+ orig="#{mark_o}#{dob_src.obj}#{mark_c}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark_o}#{dob_trn.obj}#{mark_c}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ util=pot_structure_wrap(orig,trans)
+ unwrapped=util.no_line_wrap_block
+ @pot[:body] << unwrapped << br
+ end
+ def group(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ mark_o ="group{\n\n"
+ mark_c ="\n\n}group"
+ orig="#{mark_o}#{dob_src.obj}#{mark_c}"
+ trans=((dob_trn=='') \
+ || (dob_src.obj == dob_trn.obj)) \
+ ? ''
+ : "#{mark_o}#{dob_trn.obj}#{mark_c}"
+ if @md.opt.f_pth[:lng_is] !=@md.opt.lng_base \
+ and trans.empty? \
+ and auto_translate?
+ trans=auto_translation(dob_src.obj,:src)
+ end
+ util=pot_structure_wrap(orig,trans)
+ unwrapped=util.no_line_wrap_block
+ @pot[:body] << unwrapped << br
+ end
+ def verse(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ mark="poem{\n\nverse\n\nverse\n\n...\n\n}poem"
+ instruct=s_mark=''
+ if @md.opt.act[:maintenance][:set]==:on
+ instruct=%{\n# verse are part of the text block described as a poem, } \
+ + %{the first verse is preceeded by an opening marker, } \
+ + %{and the last verse by a closing marker, } \
+ + %{the content of which should remain unwrapped}
+ s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"}
+ end
+ orig=dob_src.obj
+ trans=(dob_trn=='') \
+ ? ''
+ : dob_trn.obj
+ util=pot_structure_wrap(orig,trans)
+ unwrapped=util.no_line_wrap_block
+ @pot[:body] << unwrapped << br
+ end
+ def code(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ mark_o ="code{\n\n"
+ mark_c ="\n\n}code"
+ orig="#{mark_o}#{dob_src.obj}#{mark_c}"
+ trans=(dob_trn=='') \
+ ? ''
+ : "#{mark_o}#{dob_trn.obj}#{mark_c}"
+ util=pot_structure_wrap(orig,trans)
+ unwrapped=util.no_line_wrap_block
+ @pot[:body] << unwrapped << br
+ end
+ def table(dob_src='',notes_s='',dob_trn='',notes_t='') #% used to extract the structure of a document
+ mark_o ="table{\n\n"
+ mark_c ="\n\n}table"
+ orig="#{mark_o}#{dob_src.obj}#{mark_c}"
+ orig=orig.gsub(/#{Mx[:tc_c]}/m,"\n")
+ trans=(dob_trn=='') \
+ ? ''
+ : "#{mark_o}#{dob_trn.obj}#{mark_c}"
+ trans=trans.gsub(/#{Mx[:tc_c]}/m,"\n")
+ util=pot_structure_wrap(orig,trans)
+ unwrapped=util.no_line_wrap_block
+ @pot[:body] << unwrapped << br
+ end
+ def idx_markup(idx)
+ struct=['={' + "\n "]
+ idx.sort.each do |x|
+ x.each_with_index do |y,i0|
+ case y
+ when String
+ unless struct[-1] =~/=\{/
+ struct << ' ;' + "\n "
+ end
+ struct << y
+ if x[i0+1].class == Hash \
+ and x[i0+1][:sub].length > 0
+ struct << ' :' + "\n "
+ end
+ when Hash
+ if y[:plus].to_i > 0
+ struct << '+' + y[:plus].to_s
+ end
+ if y[:sub].length > 0
+ y[:sub].each_with_index do |z,i1|
+ z.each_with_index do |a,i2|
+ if z.length > 0
+ struct << a[0]
+ if a[1][:plus].to_i > 0
+ struct << '+' + a[1][:plus].to_s
+ end
+ if (i1 + 1) < y[:sub].length
+ struct << '|'
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ struct << "\n" + '}'
+ #puts struct.join
+ struct.join
+ end
+ def idx(dob_src='') #% used for book index but broken as original markup lost, already abstracted, fix
+ orig=pot_structure.idx_markup(dob_src.idx) #'={' + dob_src.idx + '}'
+ util=pot_structure_wrap(orig,'')
+ unwrapped=util.no_line_wrap_block
+ if @pot[:body][-1] == "\n"
+ @pot[:body][-1] = unwrapped #<< br
+ @pot[:body] << br
+ else # expect to catch all above, problem if wraps, must =~/^=\{/
+ @pot[:body] << unwrapped << br # places idx in separate object
+ end
+ end
+ self
+ end
+ def compare_structure_src_trn(data_src,data_trn,todo)
+ #@endnotes,@copen,@pot_contents_close=Array.new(3){[]}
+ a_l= data_src.length
+ s,t=0,0
+ 0.upto(a_l-1) do |i|
+ if todo==:compare
+ unless data_src[s] \
+ and data_trn[t]
+ break
+ end
+ if data_src[s].of == :comment \
+ and data_trn[t].of == :comment \
+ and (data_src[s].is == data_trn[t].is)
+ s+=1;t+=1
+ next
+ end
+ if ((data_src[s].is == :comment) \
+ || (data_trn[t].is == :comment)) \
+ and (data_src[s].is != data_trn[t].is)
+ if data_src[s].is == :comment
+ if @md.opt.act[:maintenance][:set]==:on
+ puts "src (comment):\n\t" \
+ + data_src[s].obj
+ end
+ s+=1
+ #next if data_src[s].is == :comment
+ elsif data_trn[t].is == :comment
+ if @md.opt.act[:maintenance][:set]==:on
+ puts "trans (comment):\n\t" \
+ + data_trn[t].obj
+ end
+ t+=1
+ #next if data_trn[t].is == :comment
+ end
+ end
+ if ((defined? data_src[s].ocn) \
+ && (data_src[s].ocn.is_a?(Fixnum))) \
+ and ((defined? data_trn[t].ocn) \
+ && (data_trn[t].ocn.is_a?(Fixnum))) \
+ and (data_src[s].ocn == data_trn[t].ocn)
+ @m_s,@m_t=s,t
+ elsif ((defined? data_src[s].ocn) \
+ && (data_src[s].ocn.is_a?(Fixnum))) \
+ and ((defined? data_trn[t].ocn) \
+ && (data_trn[t].ocn.is_a?(Fixnum))) \
+ and (data_src[s].ocn != data_trn[t].ocn)
+ p '--- OCN ---'
+ p 'mis-match'
+ p data_src[s].ocn if defined? data_src[s].ocn
+ p data_src[s].obj if defined? data_src[s].obj
+ p data_trn[t].ocn if defined? data_trn[t].ocn
+ p data_trn[t].obj if defined? data_trn[t].obj
+ p '---'
+ p 'previous match'
+ p data_src[@m_s].ocn if defined? data_src[@m_s].ocn
+ p data_src[@m_s].obj if defined? data_src[@m_s].obj
+ p data_trn[@m_t].ocn if defined? data_trn[@m_t].ocn
+ p data_trn[@m_t].obj if defined? data_trn[@m_s].obj
+ exit
+ elsif (((defined? data_src[s].ocn) \
+ && (defined? data_trn[t].ocn)) \
+ and data_src[s].ocn.class != data_trn[t].ocn.class)
+ p '--- OCN class ---'
+ p 'mis-match'
+ p data_src[s].ocn if defined? data_src[s].ocn
+ p data_src[s].obj if defined? data_src[s].obj
+ p data_trn[t].ocn if defined? data_trn[t].ocn
+ p data_trn[t].obj if defined? data_trn[t].obj
+ #p '---'
+ #p 'previous match'
+ #p data_src[@m_s].ocn
+ #p data_src[@m_s].obj
+ #p data_trn[@m_t].ocn
+ #p data_trn[@m_t].obj
+ #elsif (defined? data_src[s].ocn != defined? data_trn[t].ocn) \
+ #and (data_src[s].ocn.nil? != data_trn[t].ocn.nil?)
+ # p '--- missing OCN? ---'
+ # p 'mis-match'
+ # p data_src[s].ocn if defined? data_src[s].ocn
+ # p data_src[s].obj
+ # p data_trn[t].ocn if defined? data_trn[t].ocn
+ # p data_trn[t].obj
+ else
+ end
+ end
+ notes_s=''
+ data_src[s],notes_s=markup(data_src[s])
+ data_src[s],nul=pot_data(data_src[s],notes_s)
+ s+=1;t+=1
+ end
+ @pot #watch
+ end
+ def pot_data(dob_src='',notes_s)
+ if dob_src.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
+ if defined? dob_src.ocn \
+ and dob_src.ocn.to_s =~/\d+/
+ paranum=dob_src.ocn.to_s
+ @p_num=SiSU_Po4aUtils::ParagraphNumber.new(paranum)
+ end
+ case dob_src.is
+ when :heading
+ pot_structure.heading(dob_src,notes_s)
+ when :para
+ pot_structure.para(dob_src,notes_s)
+ when :group
+ pot_structure.group(dob_src,notes_s)
+ when :block
+ pot_structure.block(dob_src,notes_s)
+ when :verse
+ pot_structure.verse(dob_src,notes_s)
+ when :code
+ pot_structure.code(dob_src,notes_s)
+ when :table
+ pot_structure.table(dob_src,notes_s)
+ end
+ if defined? dob_src.idx \
+ and not dob_src.idx.nil? \
+ and not dob_src.idx.empty?
+ pot_structure.idx(dob_src)
+ end
+ #if dob_src ## Clean Prepared Text
+ # dob_src.obj=dob_src.obj.gsub(/<!.+!>/,' ').
+ # gsub(/<:\S+>/,' ') if dob_src ## Clean Prepared Text
+ #end
+ end
+ #[dob_src,dob_trn]
+ end
+ def markup(dob)
+ dob,notes=objects.textface_marks_po4a(dob,:separate)
+ [dob,notes]
+ end
+ def publish(fn,pot)
+ content=[]
+ content << pot[:open]
+ content << pot[:head]
+ content << pot[:metadata]
+ content << pot[:body]
+ content << @@endnotes[:end] if @@endnotes_
+ Output.new(fn,content,@md,@process).po4a
+ @@endnotes={ para: [], end: [] }
+ end
+ end
+ class Output <Source
+ include SiSU_Param
+ include SiSU_Env
+ def initialize(fn,content,md,process=:complete)
+ @fn,@content,@md,@process=fn,content,md,process
+ @file=SiSU_Env::FileOp.new(md,fn)
+ end
+ def po4a #%pot output
+ file_pot=@file.write_file.po4a_sst
+ #file_pot=(@md.opt.f_pth[:lng] == @md.opt.lng_base) \
+ #? @file.write_file.pot
+ #: @file.write_file.po
+ @sisu=[]
+ emptyline=0
+ @content.each do |para| # this is a hack
+ if para.is_a?(Array) \
+ and para.length > 0
+ para.each do |line|
+ if line
+ line=line.gsub(/\s+$/m,'').
+ gsub(/^\A[ ]*\Z/m,'')
+ if line=~/^\A[ ]*\Z/m
+ emptyline+=1
+ else emptyline=0
+ end
+ file_pot.puts line if emptyline < 2 #remove extra line spaces (fix upstream)
+ end
+ end
+ else file_pot.puts para #unix plaintext # /^([*=-]|\.){5}/
+ end
+ end
+ file_pot.close
+ SiSU_Po4aUtils::PotNumber.new.reset
+ #po4a_git
+ end
+ def po4a_git
+ unless @md.opt.act[:maintenance][:set]==:on
+ require_relative 'git' # git.rb
+ git=SiSU_Git::Source.new(@md.opt,@process)
+ unless FileTest.directory?(@file.output_path.pot_git.dir)
+ git.create_file_structure_git
+ end
+ if @md.opt.f_pth[:lng] == @md.opt.lng_base
+ FileUtils::cp(
+ @file.place_file.pot.dir,
+ @file.output_path.pot_git.dir
+ )
+ else # naive, work on -->
+ FileUtils::cp(
+ @file.place_file.po.dir,
+ @file.output_path.po_git.dir
+ ) #unless FileTest.file?(@file.place_file.po_git.dir)
+ end
+ git.read
+ end
+ end
+ end
+ end
+end
+__END__
+REMOVE
+&#033;\|&#035;\|&&#042;\|&#045;\|&#047;\|&#095;\|&#123;\|&#125;\|&#126;\|&#
+
+tables are problematic, difficult to reconstitute instruction, check
+
+metadata, move to top? and work on
+
+footnotes, different types, asterisk, also do you want to have separate
+paragraphs, or breaks within one block?
+
+where no ocn appropriately use ~# or -# or indeed 1~name-
+
+comments in document, what to do about them, not sure they are currently
+retained in dal, could be quite valuable to keep
+
+Translate Shell
+http://www.soimort.org/translate-shell/
+translate.google.com
diff --git a/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb b/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb
new file mode 100644
index 00000000..46630866
--- /dev/null
+++ b/lib/sisu/develop/src_po4a_sst_ao_sst_set.rb
@@ -0,0 +1,284 @@
+# encoding: utf-8
+=begin
+
+* Name: SiSU
+
+** Description: documents, structuring, processing, publishing, search
+*** po4a
+
+** Author: Ralph Amissah
+ <ralph@amissah.com>
+ <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 Ralph Amissah,
+ All Rights Reserved.
+
+** License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+** SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+** Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+** Git
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sst_ao_sst_set.rb;hb=HEAD>
+
+=end
+module SiSU_Po4aUtils
+ class Wrap
+ def initialize(md,orig='',trans='',n_char_max=76,n_indent=0,n_hang=nil)
+ @md,@orig,@trans,@n_char_max,@n_indent=
+ md, orig, trans, n_char_max, n_indent
+ @n_char_max_extend = n_char_max
+ @br="\n"
+ @n_hang=n_hang ? n_hang : @n_indent
+ @po4a_identify_type='type: SiSU doc'
+ #@po4a_identify_type='type: Plain text'
+ end
+ def line_wrap
+ space=' '
+ spaces_indent,spaces_hang=
+ "#{@br}#{space*@n_indent}",space*@n_hang
+ pot,i=[],0
+ pot_array=(@trans.empty?) ? [@orig] : [@orig,@trans]
+ pot_array.each do |pa|
+ line=0
+ out=[]
+ out[line]=''
+ @oldword='' #REMOVE @oldword
+ pa=pa.gsub(/<br>/,' <br> ').
+ gsub(/#{Mx[:br_nl]}/,"\n\n")
+ words=pa.scan(/\n\n|\\\\\\|<br>|\S+/m)
+ while words != ''
+ word=words.shift
+ if not word
+ out[line] unless out[line].empty? #check
+ break
+ elsif word =~/\n\n/
+ word="\n"
+ @n_char_max_extend = @n_char_max + out[line].length
+ line=line
+ elsif (out[line].length + word.length) > (@n_char_max_extend - @n_indent) \
+ and out[line] =~/\S+/
+ @n_char_max_extend = @n_char_max
+ out[line].squeeze!(' ')
+ line += 1
+ end
+ if word
+ out[line]=if out[line] \
+ and out[line] !~/\S+$/m
+ "#{out[line]}#{word}"
+ elsif out[line] \
+ and out[line] =~/\S+/
+ "#{out[line]} #{word}"
+ else "#{word.strip}"
+ end
+ end
+ @oldword=word if word =~/\S+/
+ end
+ x=out.join(spaces_indent).gsub(/\A\n+/m,'').insert(0,spaces_hang)
+ z=[]
+ x.split(/\n/).each do |y|
+ z << y
+ end
+ pot[i]=z.join("\n")
+ i +=1
+ pot
+ end
+ trans=(pot.length == 2) ? pot[1] : ''
+ po_str=<<WOK
+#{pot[0]}
+WOK
+#{trans}
+ po_str
+ end
+ def no_line_wrap_block
+ pot,i=[],0
+ pot_array=(@trans.empty?) ? [@orig] : [@orig,@trans]
+ pot_array.each do |pa|
+ z=[]
+ pa.split(/\n\n/).each do |y|
+ z << y if not y.empty?
+ end
+ pot[i]=z.join("\n")
+ i +=1
+ pot
+ end
+ trans=(pot.length == 2) ? pot[1] : ''
+ po_str=<<WOK
+#{pot[0]}
+WOK
+#{trans}
+ po_str
+ end
+ def line_wrap_indent1
+ @n_indent,@n_hang=2,2
+ line_wrap
+ end
+ def line_wrap_endnote
+ @n_indent,@n_hang=4,2
+ line_wrap
+ end
+ def array_wrap
+ if @orig.is_a?(Array)
+ @arr=[]
+ @orig.each do |line|
+ @arr << SiSU_TextUtils::Wrap.new(line,@n_char_max,@n_indent,@n_hang).line_wrap
+ end
+ end
+ @arr
+ end
+ end
+ class HeaderScan
+ def initialize(md,para)
+ @md,@p=md,para
+ end
+ def extract(tag,tag_content,type,attrib)
+ if dc_tag \
+ and dc_content
+ [dc_tag,dc_content,{dc_tag=>dc_content}]
+ else nil
+ end
+ end
+ def header(tag,tag_content,type='',attrib='') #this will break stuff and must be tested thoroughly 20060825
+ @tag,@tag_content,@type,@attrib=tag,tag_content,type,attrib
+ def label #element
+ @tag
+ end
+ def type
+ @type
+ end
+ def text
+ @tag_content
+ end
+ def info #element text
+ @tag_content
+ end
+ def attribute
+ @attrib
+ end
+ def element
+ @tag
+ end
+ def attrib
+ @attrib
+ end
+ def el
+ @tag
+ end
+ self
+ end
+ def start_is_match
+ case @p
+ when /^#{Mx[:meta_o]}(title)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,@md.title.full,'meta','dc') #dc 1
+ when /^#{Mx[:meta_o]}(creator|author)#{Mx[:meta_c]}\s*(.+?)$/ then header('creator',$2,'meta','dc') #dc 2
+ when /^#{Mx[:meta_o]}(subject)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 3
+ when /^#{Mx[:meta_o]}(description)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 4
+ when /^#{Mx[:meta_o]}(publisher)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 5
+ when /^#{Mx[:meta_o]}(contributor)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 6
+ when /^#{Mx[:meta_o]}(date)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 7
+ when /^#{Mx[:meta_o]}(date\.created)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(date\.issued)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(date\.available)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(date\.valid)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(date\.modified)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(type)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 8
+ when /^#{Mx[:meta_o]}(format)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 9
+ when /^#{Mx[:meta_o]}(identifier)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 10
+ when /^#{Mx[:meta_o]}(source)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 11
+ when /^#{Mx[:meta_o]}(language)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 12
+ when /^#{Mx[:meta_o]}(relation)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 13
+ when /^#{Mx[:meta_o]}(coverage)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 14
+ when /^#{Mx[:meta_o]}(rights)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','dc') #dc 15
+ when /^#{Mx[:meta_o]}(keywords)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(copyright)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(translator|translated_by)#{Mx[:meta_c]}\s*(.+?)$/ then header('translator',$2)
+ when /^#{Mx[:meta_o]}(illustrator|illustrated_by)#{Mx[:meta_c]}\s*(.+?)$/ then header('illustrator',$2)
+ when /^#{Mx[:meta_o]}(prepared_by)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(digitized_by)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(comments?)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(abstract)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(tags?)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(catalogue)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(class(?:ify)?_loc)#{Mx[:meta_c]}\s*(.+?)$/ then header('classify_loc',$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(class(?:ify)?_dewey)#{Mx[:meta_c]}\s*(.+?)$/ then header('classify_dewey',$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(class(?:ify)?_pg)#{Mx[:meta_c]}\s*(.+?)$/ then header('classify_pg',$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(class(?:ify)?_isbn)#{Mx[:meta_c]}\s*(.+?)$/ then header('classify_isbn',$2,'meta','extra')
+ when /^#{Mx[:meta_o]}(toc|structure)#{Mx[:meta_c]}\s*(.+?)$/ then header('structure',$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(level|page|markup)#{Mx[:meta_c]}\s*(.+?)$/ then header('markup',$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(bold)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(italics|itali[sz]e)#{Mx[:meta_c]}\s*(.+?)$/ then header('italicize',$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(vocabulary|wordlist)#{Mx[:meta_c]}\s*(.+?)$/ then header('vocabulary',$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(css|stylesheet)#{Mx[:meta_c]}\s*(.+?)$/ then header('css',$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(links)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(prefix)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct') #add a & b
+ when /^#{Mx[:meta_o]}(suffix)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(information)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(contact)#{Mx[:meta_c]}\s*(.+?)$/ then header($1,$2,'process','instruct')
+ when /^#{Mx[:meta_o]}(rcs|cvs)#{Mx[:meta_c]}\s*(.+?)$/ then header('version',$2,'process','instruct')
+ else nil
+ end
+ end
+ def dublin
+ (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \
+ ? start_is_match
+ : nil
+ end
+ def meta
+ (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \
+ ? start_is_match
+ : nil
+ end
+ end
+ class ParagraphNumber
+ def initialize(paranum)
+ @paranum=/(\d+)/m.match(paranum)[1]
+ end
+ def display
+ @paranum.gsub(/(\d+)/,'#\1')
+ end
+ end
+ class PotNumber
+ @@n=0
+ def initialize
+ @@n +=2
+ end
+ def num
+ @@n
+ end
+ def reset
+ @@n=0
+ end
+ end
+end
+__END__
diff --git a/lib/sisu/develop/src_po4a_sstm.rb b/lib/sisu/develop/src_po4a_sstm.rb
new file mode 100644
index 00000000..74c5ac28
--- /dev/null
+++ b/lib/sisu/develop/src_po4a_sstm.rb
@@ -0,0 +1,135 @@
+# encoding: utf-8
+=begin
+
+* Name: SiSU
+
+** Description: documents, structuring, processing, publishing, search
+*** share sisu source markup file, copy it to output directory!
+
+** Author: Ralph Amissah
+ <ralph@amissah.com>
+ <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 Ralph Amissah,
+ All Rights Reserved.
+
+** License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+** SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+** Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+** Git
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_po4a_sstm.rb;hb=HEAD>
+
+=end
+module SiSU_Markup
+ require_relative 'src_shared' # src_shared.rb
+ include SiSU_Source
+ require_relative 'src_po4a_share' # src_po4a_share.rb
+ require_relative 'se' # se.rb
+ include SiSU_Env
+ class Source_Po4a < SiSU_Source::SiSUpodSource
+ def initialize(opt,build=nil,place=nil)
+ super(opt,build,place)
+ @opt=opt
+ md=SiSU_Param::Parameters.new(opt).get
+ @file=SiSU_Env::FileOp.new(md,opt.fno)
+ end
+ def dir_mk(dir)
+ unless FileTest.directory?(dir)
+ FileUtils::mkdir_p(dir)
+ end
+ end
+ def make_paths
+ dir_mk(@file.output_path.pot.dir)
+ dir_mk(@file.output_path.po.dir)
+ end
+ def language
+ def source_language_selected_str
+ @opt.act[:po4a_lang][:src] \
+ ? @opt.act[:po4a_lang][:src]
+ : 'en'
+ end
+ self
+ end
+ def read
+ 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],
+ 'Share document markup text source',
+ @opt.fns
+ ).cyan_hi_blue
+ : SiSU_Screen::Ansi.new(
+ @opt.act[:color_state][:set],
+ 'Share document markup text source',
+ @opt.fns
+ ).cyan_title_hi
+ end
+ make_paths
+ if FileTest.directory?(@path_pod[:fnb])
+ FileUtils::mkdir_p(@file.output_path.src.dir) \
+ unless FileTest.directory?(@file.output_path.src.dir)
+ v=(@opt.act[:maintenance][:set]==:on) \
+ ? 'v' : ''
+ system(%{
+ #rsync -a#{v} #{@path_pod[:fnb]}/sisupod/doc/* #{@file.output_path.po4a.dir}
+ rsync -a#{v} #{@path_pod[:fnb]}/sisupod/doc/#{language.source_language_selected_str}* #{@file.output_path.po4a.dir}
+ chbk=`pwd`
+ cd #{@file.output_path.sisupod.dir}
+ for I in `find -type d` ; do chmod 755 $I ; done
+ for I in `find -type f` ; do chmod 644 $I ; done
+ cd ${chbk}
+ })
+ md=SiSU_Param::Parameters.new(@opt).get
+ file=SiSU_Env::FileOp.new(md)
+ SiSU_Po4a_Project::Po4aCfg.new(@opt,file).song
+ SiSU_Po4a_Project::Po4aProject.new(@opt,file).song
+ else
+ if (@opt.act[:verbose][:set]==:on \
+ || @opt.act[:verbose_plus][:set]==:on \
+ || @opt.act[:maintenance][:set]==:on)
+ SiSU_Screen::Ansi.new(
+ '',
+ "#{@opt.fno} not available"
+ ).blue_tab
+ end
+ end
+ end
+ end
+end
+__END__
diff --git a/lib/sisu/develop/src_shared.rb b/lib/sisu/develop/src_shared.rb
index 948342c7..150ce84e 100644
--- a/lib/sisu/develop/src_shared.rb
+++ b/lib/sisu/develop/src_shared.rb
@@ -171,12 +171,16 @@ module SiSU_Source
)
else
STDERR.puts \
- %{\t*WARN* did not find image - "#{images_pwd}/#{i}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find image - } \
+ + %{"#{images_pwd}/#{i}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
end
else
STDERR.puts \
- %{\t*WARN* did not find - #{images_pwd} #{@path_pod[:image]} [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find - } \
+ + %{#{images_pwd} #{@path_pod[:image]} } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
end
if doc_import_list.length > 0 \
@@ -189,7 +193,9 @@ module SiSU_Source
)
else
STDERR.puts \
- %{\t*WARN* did not find image - "#{@opt.base_path}#{doc_import_dir}/#{f}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find image - } \
+ + %{"#{@opt.base_path}#{doc_import_dir}/#{f}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
end
end
@@ -213,7 +219,9 @@ module SiSU_Source
)
else
STDERR.puts \
- %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find - } \
+ + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
else
if FileTest.file?("#{@opt.base_path}/#{f[:f]}")
@@ -234,7 +242,9 @@ module SiSU_Source
end
else
STDERR.puts \
- %{\t*WARN* did not find - "#{@opt.base_path}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find - } \
+ + %{"#{@opt.base_path}/#{f[:f]}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
end
end
@@ -247,7 +257,9 @@ module SiSU_Source
)
else
STDERR.puts \
- %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find - } \
+ + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
else
if FileTest.file?("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}")
@@ -268,7 +280,9 @@ module SiSU_Source
end
else
STDERR.puts \
- %{\t*WARN* did not find - "#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]}
+ %{\t*WARN* did not find - } \
+ + %{"#{@opt.base_path}#{doc_import_dir}/#{f[:f]}" } \
+ + %{[#{__FILE__}:#{__LINE__}]}
end
end
end
diff --git a/lib/sisu/develop/src_share.rb b/lib/sisu/develop/src_sisupod_sstm.rb
index b499ed6f..e1ffd8cb 100644
--- a/lib/sisu/develop/src_share.rb
+++ b/lib/sisu/develop/src_sisupod_sstm.rb
@@ -51,7 +51,7 @@
** Git
<http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_share.rb;hb=HEAD>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/develop/src_sisupod_sstm.rb;hb=HEAD>
=end
module SiSU_Markup
@@ -59,7 +59,7 @@ module SiSU_Markup
include SiSU_Source
require_relative 'se' # se.rb
include SiSU_Env
- class Source < SiSU_Source::SiSUpodSource
+ class Source_Sisupod < SiSU_Source::SiSUpodSource
def initialize(opt,build=nil,place=nil)
super(opt,build,place)
@opt=opt
diff --git a/lib/sisu/develop/urls.rb b/lib/sisu/develop/urls.rb
index 6fa28a4b..85ec1316 100644
--- a/lib/sisu/develop/urls.rb
+++ b/lib/sisu/develop/urls.rb
@@ -658,7 +658,7 @@ module SiSU_Urls
show.report(report_info.hash_digests)
#show.maintenance(report_info.hash_digests)
end
- if @opt.act[:po4a][:set]==:on
+ if @opt.act[:po4a_shelf][:set]==:on
#if @opt.fns =~/\S+?~\S{2}(?:_\S{2})?\.ss[mt]/
#else
#end