diff options
author | Ralph Amissah <ralph@amissah.com> | 2012-10-03 00:11:08 -0400 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2012-10-03 00:11:08 -0400 |
commit | 804a103722aa7731ca7f2062ee2ebf533607e6aa (patch) | |
tree | a480caebb78925848807692c57c017b3ae5e6839 /lib | |
parent | v3: 3.3.3 version & changelog, dates touched (diff) |
v4: 4.0.0 new branch & version & changelog "opened"
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sisu/v2/character_encoding.rb | 379 | ||||
-rw-r--r-- | lib/sisu/v2/constants.rb | 204 | ||||
-rw-r--r-- | lib/sisu/v2/dal.rb | 475 | ||||
-rw-r--r-- | lib/sisu/v2/dal_doc_objects.rb | 425 | ||||
-rw-r--r-- | lib/sisu/v2/dal_doc_str.rb | 1184 | ||||
-rw-r--r-- | lib/sisu/v2/dal_expand_insertions.rb | 198 | ||||
-rw-r--r-- | lib/sisu/v2/dal_syntax.rb | 522 | ||||
-rw-r--r-- | lib/sisu/v2/db_dbi.rb | 93 | ||||
-rw-r--r-- | lib/sisu/v2/epub_tune.rb | 416 | ||||
-rw-r--r-- | lib/sisu/v2/harvest.rb | 101 | ||||
-rw-r--r-- | lib/sisu/v2/harvest_authors.rb | 316 | ||||
-rw-r--r-- | lib/sisu/v2/harvest_topics.rb | 559 | ||||
-rw-r--r-- | lib/sisu/v2/html_tune.rb | 371 | ||||
-rw-r--r-- | lib/sisu/v2/hub.rb | 580 | ||||
-rw-r--r-- | lib/sisu/v2/manifest.rb | 713 | ||||
-rw-r--r-- | lib/sisu/v2/manpage.rb | 420 | ||||
-rw-r--r-- | lib/sisu/v2/odf.rb | 735 | ||||
-rw-r--r-- | lib/sisu/v2/odf_format.rb | 468 | ||||
-rw-r--r-- | lib/sisu/v2/options.rb | 217 | ||||
-rw-r--r-- | lib/sisu/v2/plaintext.rb | 419 | ||||
-rw-r--r-- | lib/sisu/v2/shared_markup_alt.rb | 318 | ||||
-rw-r--r-- | lib/sisu/v2/shared_metadata.rb | 800 | ||||
-rw-r--r-- | lib/sisu/v2/shared_xml.rb | 706 | ||||
-rw-r--r-- | lib/sisu/v2/sisupod_make.rb | 338 | ||||
-rw-r--r-- | lib/sisu/v2/sysenv.rb | 3366 | ||||
-rw-r--r-- | lib/sisu/v2/texpdf.rb | 830 | ||||
-rw-r--r-- | lib/sisu/v2/update.rb | 130 | ||||
-rw-r--r-- | lib/sisu/v2/urls.rb | 279 | ||||
-rw-r--r-- | lib/sisu/v2/webrick.rb | 176 | ||||
-rw-r--r-- | lib/sisu/v4/air.rb (renamed from lib/sisu/v2/air.rb) | 18 | ||||
-rw-r--r-- | lib/sisu/v4/author_format.rb (renamed from lib/sisu/v2/author_format.rb) | 37 | ||||
-rw-r--r-- | lib/sisu/v4/cgi.rb (renamed from lib/sisu/v2/cgi.rb) | 30 | ||||
-rw-r--r-- | lib/sisu/v4/cgi_pgsql.rb (renamed from lib/sisu/v2/cgi_pgsql.rb) | 75 | ||||
-rw-r--r-- | lib/sisu/v4/cgi_sql_common.rb (renamed from lib/sisu/v2/cgi_sql_common.rb) | 293 | ||||
-rw-r--r-- | lib/sisu/v4/cgi_sqlite.rb (renamed from lib/sisu/v2/cgi_sqlite.rb) | 70 | ||||
-rw-r--r-- | lib/sisu/v4/composite.rb (renamed from lib/sisu/v2/composite.rb) | 132 | ||||
-rw-r--r-- | lib/sisu/v4/concordance.rb (renamed from lib/sisu/v2/concordance.rb) | 214 | ||||
-rw-r--r-- | lib/sisu/v4/conf.rb (renamed from lib/sisu/v2/conf.rb) | 111 | ||||
-rw-r--r-- | lib/sisu/v4/constants.rb | 294 | ||||
-rw-r--r-- | lib/sisu/v4/css.rb (renamed from lib/sisu/v2/css.rb) | 1452 | ||||
-rw-r--r-- | lib/sisu/v4/dal.rb | 510 | ||||
-rw-r--r-- | lib/sisu/v4/dal_character_check.rb (renamed from lib/sisu/v2/dal_character_check.rb) | 51 | ||||
-rw-r--r-- | lib/sisu/v4/dal_doc_objects.rb | 445 | ||||
-rw-r--r-- | lib/sisu/v4/dal_doc_str.rb | 1044 | ||||
-rw-r--r-- | lib/sisu/v4/dal_endnotes.rb (renamed from lib/sisu/v2/dal_endnotes.rb) | 31 | ||||
-rw-r--r-- | lib/sisu/v4/dal_expand_insertions.rb | 378 | ||||
-rw-r--r-- | lib/sisu/v4/dal_hash_digest.rb (renamed from lib/sisu/v2/dal_hash_digest.rb) | 60 | ||||
-rw-r--r-- | lib/sisu/v4/dal_idx.rb (renamed from lib/sisu/v2/dal_idx.rb) | 158 | ||||
-rw-r--r-- | lib/sisu/v4/dal_images.rb (renamed from lib/sisu/v2/dal_images.rb) | 47 | ||||
-rw-r--r-- | lib/sisu/v4/dal_metadata.rb (renamed from lib/sisu/v2/dal_metadata.rb) | 27 | ||||
-rw-r--r-- | lib/sisu/v4/dal_numbering.rb (renamed from lib/sisu/v2/dal_numbering.rb) | 182 | ||||
-rw-r--r-- | lib/sisu/v4/dal_substitutions_and_insertions.rb (renamed from lib/sisu/v2/dal_substitutions_and_insertions.rb) | 59 | ||||
-rw-r--r-- | lib/sisu/v4/dal_syntax.rb | 604 | ||||
-rw-r--r-- | lib/sisu/v4/db_columns.rb (renamed from lib/sisu/v2/db_columns.rb) | 290 | ||||
-rw-r--r-- | lib/sisu/v4/db_create.rb (renamed from lib/sisu/v2/db_create.rb) | 94 | ||||
-rw-r--r-- | lib/sisu/v4/db_dbi.rb | 92 | ||||
-rw-r--r-- | lib/sisu/v4/db_drop.rb (renamed from lib/sisu/v2/db_drop.rb) | 27 | ||||
-rw-r--r-- | lib/sisu/v4/db_import.rb (renamed from lib/sisu/v2/db_import.rb) | 451 | ||||
-rw-r--r-- | lib/sisu/v4/db_indexes.rb (renamed from lib/sisu/v2/db_indexes.rb) | 18 | ||||
-rw-r--r-- | lib/sisu/v4/db_load_tuple.rb (renamed from lib/sisu/v2/db_load_tuple.rb) | 75 | ||||
-rw-r--r-- | lib/sisu/v4/db_remove.rb (renamed from lib/sisu/v2/db_remove.rb) | 33 | ||||
-rw-r--r-- | lib/sisu/v4/db_select.rb (renamed from lib/sisu/v2/db_select.rb) | 124 | ||||
-rw-r--r-- | lib/sisu/v4/db_sqltxt.rb (renamed from lib/sisu/v2/db_sqltxt.rb) | 83 | ||||
-rw-r--r-- | lib/sisu/v4/db_tests.rb (renamed from lib/sisu/v2/db_tests.rb) | 13 | ||||
-rw-r--r-- | lib/sisu/v4/dbi.rb (renamed from lib/sisu/v2/dbi.rb) | 41 | ||||
-rw-r--r-- | lib/sisu/v4/dbi_discreet.rb | 182 | ||||
-rw-r--r-- | lib/sisu/v4/defaults.rb (renamed from lib/sisu/v2/defaults.rb) | 300 | ||||
-rw-r--r-- | lib/sisu/v4/digests.rb (renamed from lib/sisu/v2/digests.rb) | 98 | ||||
-rw-r--r-- | lib/sisu/v4/embedded.rb (renamed from lib/sisu/v2/embedded.rb) | 73 | ||||
-rw-r--r-- | lib/sisu/v4/epub.rb (renamed from lib/sisu/v2/epub.rb) | 455 | ||||
-rw-r--r-- | lib/sisu/v4/epub_concordance.rb (renamed from lib/sisu/v2/epub_concordance.rb) | 152 | ||||
-rw-r--r-- | lib/sisu/v4/epub_format.rb (renamed from lib/sisu/v2/epub_format.rb) | 1377 | ||||
-rw-r--r-- | lib/sisu/v4/epub_segments.rb (renamed from lib/sisu/v2/epub_segments.rb) | 340 | ||||
-rw-r--r-- | lib/sisu/v4/epub_tune.rb | 409 | ||||
-rw-r--r-- | lib/sisu/v4/errors.rb (renamed from lib/sisu/v2/errors.rb) | 38 | ||||
-rw-r--r-- | lib/sisu/v4/git.rb (renamed from lib/sisu/v2/git.rb) | 142 | ||||
-rw-r--r-- | lib/sisu/v4/harvest.rb | 112 | ||||
-rw-r--r-- | lib/sisu/v4/harvest_authors.rb | 387 | ||||
-rw-r--r-- | lib/sisu/v4/harvest_topics.rb | 808 | ||||
-rw-r--r-- | lib/sisu/v4/help.rb (renamed from lib/sisu/v2/help.rb) | 364 | ||||
-rw-r--r-- | lib/sisu/v4/html.rb (renamed from lib/sisu/v2/html.rb) | 373 | ||||
-rw-r--r-- | lib/sisu/v4/html_format.rb (renamed from lib/sisu/v2/html_format.rb) | 522 | ||||
-rw-r--r-- | lib/sisu/v4/html_minitoc.rb (renamed from lib/sisu/v2/html_minitoc.rb) | 114 | ||||
-rw-r--r-- | lib/sisu/v4/html_promo.rb (renamed from lib/sisu/v2/html_promo.rb) | 56 | ||||
-rw-r--r-- | lib/sisu/v4/html_scroll.rb (renamed from lib/sisu/v2/html_scroll.rb) | 136 | ||||
-rw-r--r-- | lib/sisu/v4/html_segments.rb (renamed from lib/sisu/v2/html_segments.rb) | 417 | ||||
-rw-r--r-- | lib/sisu/v4/html_table.rb (renamed from lib/sisu/v2/html_table.rb) | 19 | ||||
-rw-r--r-- | lib/sisu/v4/html_tune.rb | 375 | ||||
-rw-r--r-- | lib/sisu/v4/hub.rb | 713 | ||||
-rw-r--r-- | lib/sisu/v4/i18n.rb | 697 | ||||
-rw-r--r-- | lib/sisu/v4/manifest.rb | 909 | ||||
-rw-r--r-- | lib/sisu/v4/manpage.rb | 432 | ||||
-rw-r--r-- | lib/sisu/v4/manpage_format.rb (renamed from lib/sisu/v2/manpage_format.rb) | 26 | ||||
-rw-r--r-- | lib/sisu/v4/odf.rb | 819 | ||||
-rw-r--r-- | lib/sisu/v4/odf_format.rb | 658 | ||||
-rw-r--r-- | lib/sisu/v4/options.rb | 876 | ||||
-rw-r--r-- | lib/sisu/v4/param.rb (renamed from lib/sisu/v2/param.rb) | 922 | ||||
-rw-r--r-- | lib/sisu/v4/param_identify_markup.rb (renamed from lib/sisu/v2/param_identify_markup.rb) | 15 | ||||
-rw-r--r-- | lib/sisu/v4/particulars.rb (renamed from lib/sisu/v2/particulars.rb) | 104 | ||||
-rw-r--r-- | lib/sisu/v4/plaintext.rb | 434 | ||||
-rw-r--r-- | lib/sisu/v4/plaintext_format.rb (renamed from lib/sisu/v2/plaintext_format.rb) | 39 | ||||
-rw-r--r-- | lib/sisu/v4/po4a.rb | 986 | ||||
-rw-r--r-- | lib/sisu/v4/po4a_set.rb | 299 | ||||
-rw-r--r-- | lib/sisu/v4/prog_text_translation.rb (renamed from lib/sisu/v2/i18n.rb) | 556 | ||||
-rw-r--r-- | lib/sisu/v4/qrcode.rb | 745 | ||||
-rw-r--r-- | lib/sisu/v4/relaxng.rb (renamed from lib/sisu/v2/relaxng.rb) | 21 | ||||
-rw-r--r-- | lib/sisu/v4/remote.rb (renamed from lib/sisu/v2/remote.rb) | 63 | ||||
-rw-r--r-- | lib/sisu/v4/response.rb (renamed from lib/sisu/v2/response.rb) | 17 | ||||
-rw-r--r-- | lib/sisu/v4/rexml.rb (renamed from lib/sisu/v2/rexml.rb) | 38 | ||||
-rw-r--r-- | lib/sisu/v4/screen_text_color.rb (renamed from lib/sisu/v2/screen_text_color.rb) | 130 | ||||
-rw-r--r-- | lib/sisu/v4/share_src.rb (renamed from lib/sisu/v2/share_src.rb) | 48 | ||||
-rw-r--r-- | lib/sisu/v4/share_src_kdissert.rb (renamed from lib/sisu/v2/share_src_kdissert.rb) | 23 | ||||
-rw-r--r-- | lib/sisu/v4/shared_html.rb (renamed from lib/sisu/v2/shared_html.rb) | 19 | ||||
-rw-r--r-- | lib/sisu/v4/shared_html_lite.rb (renamed from lib/sisu/v2/shared_html_lite.rb) | 147 | ||||
-rw-r--r-- | lib/sisu/v4/shared_images.rb | 173 | ||||
-rw-r--r-- | lib/sisu/v4/shared_markup_alt.rb | 321 | ||||
-rw-r--r-- | lib/sisu/v4/shared_metadata.rb | 1360 | ||||
-rw-r--r-- | lib/sisu/v4/shared_sem.rb (renamed from lib/sisu/v2/shared_sem.rb) | 26 | ||||
-rw-r--r-- | lib/sisu/v4/shared_sisupod_source.rb | 376 | ||||
-rw-r--r-- | lib/sisu/v4/shared_txt.rb (renamed from lib/sisu/v2/shared_txt.rb) | 29 | ||||
-rw-r--r-- | lib/sisu/v4/shared_xhtml.rb (renamed from lib/sisu/v2/shared_xhtml.rb) | 19 | ||||
-rw-r--r-- | lib/sisu/v4/shared_xml.rb | 717 | ||||
-rw-r--r-- | lib/sisu/v4/sisupod_make.rb | 161 | ||||
-rw-r--r-- | lib/sisu/v4/sitemaps.rb (renamed from lib/sisu/v2/sitemaps.rb) | 61 | ||||
-rw-r--r-- | lib/sisu/v4/spell.rb (renamed from lib/sisu/v2/spell.rb) | 41 | ||||
-rw-r--r-- | lib/sisu/v4/sst_convert_markup.rb (renamed from lib/sisu/v2/sst_convert_markup.rb) | 61 | ||||
-rw-r--r-- | lib/sisu/v4/sst_do_inline_footnotes.rb (renamed from lib/sisu/v2/sst_do_inline_footnotes.rb) | 139 | ||||
-rw-r--r-- | lib/sisu/v4/sst_from_xml.rb (renamed from lib/sisu/v2/sst_from_xml.rb) | 17 | ||||
-rw-r--r-- | lib/sisu/v4/sst_identify_markup.rb (renamed from lib/sisu/v2/sst_identify_markup.rb) | 65 | ||||
-rw-r--r-- | lib/sisu/v4/sst_to_s_xml_sax.rb (renamed from lib/sisu/v2/sst_to_s_xml_sax.rb) | 130 | ||||
-rw-r--r-- | lib/sisu/v4/sysenv.rb | 6015 | ||||
-rw-r--r-- | lib/sisu/v4/termsheet.rb (renamed from lib/sisu/v2/termsheet.rb) | 23 | ||||
-rw-r--r-- | lib/sisu/v4/texinfo.rb (renamed from lib/sisu/v2/texinfo.rb) | 261 | ||||
-rw-r--r-- | lib/sisu/v4/texinfo_format.rb (renamed from lib/sisu/v2/texinfo_format.rb) | 315 | ||||
-rw-r--r-- | lib/sisu/v4/texpdf.rb | 979 | ||||
-rw-r--r-- | lib/sisu/v4/texpdf_format.rb (renamed from lib/sisu/v2/texpdf_format.rb) | 948 | ||||
-rw-r--r-- | lib/sisu/v4/update.rb | 138 | ||||
-rw-r--r-- | lib/sisu/v4/urls.rb | 442 | ||||
-rw-r--r-- | lib/sisu/v4/webrick.rb | 185 | ||||
-rw-r--r-- | lib/sisu/v4/wikispeak.rb (renamed from lib/sisu/v2/wikispeak.rb) | 81 | ||||
-rw-r--r-- | lib/sisu/v4/xhtml.rb (renamed from lib/sisu/v2/xhtml.rb) | 208 | ||||
-rw-r--r-- | lib/sisu/v4/xhtml_table.rb (renamed from lib/sisu/v2/xhtml_table.rb) | 25 | ||||
-rw-r--r-- | lib/sisu/v4/xml.rb (renamed from lib/sisu/v2/xml.rb) | 215 | ||||
-rw-r--r-- | lib/sisu/v4/xml_dom.rb (renamed from lib/sisu/v2/xml_dom.rb) | 188 | ||||
-rw-r--r-- | lib/sisu/v4/xml_fictionbook.rb (renamed from lib/sisu/v2/xml_fictionbook.rb) | 56 | ||||
-rw-r--r-- | lib/sisu/v4/xml_format.rb (renamed from lib/sisu/v2/xml_format.rb) | 380 | ||||
-rw-r--r-- | lib/sisu/v4/xml_md_oai_pmh_dc.rb (renamed from lib/sisu/v2/xml_md_oai_pmh_dc.rb) | 23 | ||||
-rw-r--r-- | lib/sisu/v4/xml_scaffold.rb (renamed from lib/sisu/v2/xml_scaffold.rb) | 42 | ||||
-rw-r--r-- | lib/sisu/v4/xml_tables.rb (renamed from lib/sisu/v2/xml_tables.rb) | 69 | ||||
-rw-r--r-- | lib/sisu/v4/zap.rb (renamed from lib/sisu/v2/zap.rb) | 19 |
150 files changed, 32663 insertions, 22031 deletions
diff --git a/lib/sisu/v2/character_encoding.rb b/lib/sisu/v2/character_encoding.rb deleted file mode 100644 index 5d19a61f..00000000 --- a/lib/sisu/v2/character_encoding.rb +++ /dev/null @@ -1,379 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: modules related to locales, character encoding for different - output generators [requires kirbybase] - -=end -module SiSU_character_encode - require 'kirbybase' - require "#{SiSU_lib}/sysenv" # sysenv.rb - class Characters - attr_accessor(:character_encoding,:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name) - def initialize(&block) - instance_eval(&block) - end - end - class Create <Characters - def initialize - #NOTE places character_encoding.tbl in correct subdirectory ./_sisu_processing/encoding - @db=KirbyBase.new #default database location, pwd - @ce_tbl=@db.create_table.documents(:character_encoding, :glyph,:String, :dec,:Integer, :hex,:String, :rb,:String, :html,:String, :html_name,:String, :tex,:String, :tex_licr,:String, :tex_alt,:String, :name,:String) - end - def db - x=Character_encoding.new.table - #x.each {|y| puts y[2].inspect} - x.each do |c| - #puts "#{c[0]}, #{c[1]}, #{c[2]}, #{c[3]}, #{c[4]}, #{c[5]}, #{c[6]}, #{c[7]}, #{c[8]}, #{c[9]}" - @ce_tbl.insert(c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], c[8], c[9]) - end - end - end - class Query - def initialize(find='',show='') - #NOTE character_encoding.tbl not read from subdirectory ./_sisu_processing/encoding - @db=KirbyBase.new #default database location, pwd - @ce_tbl=@db.get_table(:character_encoding) - @find=find - end - def selected(selected,show) - @y=[] - selected.each do |x| - @y<<case show - when 'glyph'; x.glyph - when 'dec'; x.dec - when 'hex'; x.hex - when 'rb'; x.rb - when 'html'; x.html - when 'html_name'; x.html_name - when 'tex'; x.tex - when 'ot1'; x.ot1 - when 'ts1'; x.ts1 - when 'name'; x.name - else x.hex - end - end - #@ce_tbl.select(:glyph,:name) { |r| r.hex==hex }.each do |r| - # puts '%s %s' % [r.glyph, r.name] - #end - #:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name - #list=['number','glyph','html','hex','rb','tex','ot1','ts1','name'] - end - def hex(hex,show) - select=@ce_tbl.select(:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name) { |r| r.hex==hex } - selected(select,show) - @y - end - def dec(dec,show) - select=@ce_tbl.select(:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name) { |r| r.dec==dec } - selected(select,show) - @y - end - def name(name,show) - select=@ce_tbl.select(:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name) { |r| r.name =~ /#{name}/ } - selected(select,show) - @y - end - def report - puts @ce_tbl.select(:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name).to_report - end - def table - selected=@ce_tbl.select - #selected=@ce_tbl.select(:glyph,:dec,:hex,:rb,:html,:html_name,:tex,:tex_licr,:tex_alt,:name) - selected.each do |c| - puts '%s %s %s %s %s %s %s %s %s %s' % [c.glyph,c.dec,c.hex,c.rb,c.html,c.html_name,c.tex,c.tex_licr,c.tex_alt,c.name] - #puts "#{c.glyph}, #{c.dec}, #{c.hex}, #{c.rb}, #{c.html}, #{c.name}, #{c.tex}, #{c.tec_licr}, #{c.tex_alt}, #{c.c_name}" - end - end - end - class Character_encoding - def table - x=[] -#:glyph, :dec,:hex, :rb, :xml , :html_name, :tex, :tex_licr, :tex_alt, :name - x=[ - ['', 9, '', '', '	', nil, '', '', '', 'Horizontal tab' ], - ['', 15, '', '', '', nil, '', '', '', 'Line feed' ], - ['', 17, '', '', '', nil, '', '', '', 'Carriage return' ], - [' ', 32, '40', '\40', ' ', nil, '', '', '', 'Space' ], - ['!', 33, '41', '\41', '!', nil, '!', '!', '!', 'Punctuation Exclamation !' ], - ['', 34, '42', '\42', '"', '"', '', '', '', 'Punctuation Quotation mark' ], - ['#', 35, '43', '\43', '#', nil, '{\#}', '\#', '', 'Hash mark #' ], - ['$', 36, '44', '\44', '$', nil, '{\$}', '\textdollar', '', 'Dollar sign $' ], - ['%', 37, '45', '\45', '%', nil, '{\%}', '\%', '', 'Percent sign %' ], - ['&', 38, '46', '\46', '&', '&', '{\&}', '\&', '', 'Ampersand &' ], - ['\'', 39, '47', '\47', ''', nil, '', '', '', 'Apostrophe \''], - ['(', 40, '50', '\50', '(', nil, '', '', '', 'Left parenthesis (' ], - [')', 41, '51', '\51', ')', nil, '', '', '', 'Right parenthesis )' ], - ['*', 42, '52', '\52', '*', nil, '', '', '', 'Asterisk *' ], - ['+', 43, '53', '\53', '+', nil, '', '', '', 'Plus sign +' ], - [',', 44, '54', '\54', ',', nil, ',', ',', ',', 'Puncutation Comma ,' ], - ['-', 45, '55', '\55', '-', nil, '-', '-', '-', 'Puncutation Hyphen -' ], - ['.', 46, '56', '\56', '.', nil, '.', '.', '.', 'Puncutation Period .' ], - ['/', 47, '57', '\57', '/', nil, '/', '/', '/', 'Puncutation Slash /' ], - ['0', 48, '60', '\60', '0', nil, '0', '0', '0', 'Digit zero 0' ], - ['1', 49, '61', '\61', '1', nil, '1', '1', '1', 'Digit one 1' ], - ['2', 50, '62', '\62', '2', nil, '2', '2', '2', 'Digit two 2' ], - ['3', 51, '63', '\63', '3', nil, '3', '3', '3', 'Digit three 3' ], - ['4', 52, '64', '\64', '4', nil, '4', '4', '4', 'Digit four 4' ], - ['5', 53, '65', '\65', '5', nil, '5', '5', '5', 'Digit five 5' ], - ['6', 54, '66', '\66', '6', nil, '6', '6', '6', 'Digit six 6' ], - ['7', 55, '67', '\67', '7', nil, '7', '7', '7', 'Digit seven 7' ], - ['8', 56, '70', '\70', '8', nil, '8', '8', '8', 'Digit eight 8' ], - ['9', 57, '71', '\71', '9', nil, '9', '9', '9', 'Digit nine 9' ], - [':', 58, '72', '\72', ':', nil, '', '', '', 'Punctuation Colon :' ], - [';', 59, '73', '\73', ';', nil, '', '', '', 'Punctuation Semicolon ;' ], - ['<', 60, '74', '\74', '<', '<', '', '', '', 'Less than <' ], - ['=', 61, '75', '\75', '=', nil, '', '', '', 'Equals sign =' ], - ['>', 62, '76', '\76', '>', '>', '', '', '', 'Greater than >' ], - ['?', 63, '77', '\77', '?', nil, '?', '?', '?', 'Punctuation Question mark ?' ], - ['@', 64, '100', '\100', '@', nil, '', '', '', 'Commercial at sign @' ], - ['A', 65, '101', '\101', 'A', nil, 'A', 'A', 'A', 'Captial A' ], - ['B', 66, '102', '\102', 'B', nil, 'B', 'B', 'B', 'Captial B' ], - ['C', 67, '103', '\103', 'C', nil, 'C', 'C', 'C', 'Captial C' ], - ['D', 68, '104', '\104', 'D', nil, 'D', 'D', 'D', 'Captial D' ], - ['E', 69, '105', '\105', 'E', nil, 'E', 'E', 'E', 'Captial E' ], - ['F', 70, '106', '\106', 'F', nil, 'F', 'F', 'F', 'Captial F' ], - ['G', 71, '107', '\107', 'G', nil, 'G', 'G', 'G', 'Captial G' ], - ['H', 72, '110', '\110', 'H', nil, 'H', 'H', 'H', 'Captial H' ], - ['I', 73, '111', '\111', 'I', nil, 'I', 'I', 'I', 'Captial I' ], - ['J', 74, '112', '\112', 'J', nil, 'J', 'J', 'J', 'Captial J' ], - ['K', 75, '113', '\113', 'K', nil, 'K', 'K', 'K', 'Captial K' ], - ['L', 76, '114', '\114', 'L', nil, 'L', 'L', 'L', 'Captial L' ], - ['M', 77, '115', '\115', 'M', nil, 'M', 'M', 'M', 'Captial M' ], - ['N', 78, '116', '\116', 'N', nil, 'N', 'N', 'N', 'Captial N' ], - ['O', 79, '117', '\117', 'O', nil, 'O', 'O', 'O', 'Captial O' ], - ['P', 80, '120', '\120', 'P', nil, 'P', 'P', 'P', 'Captial P' ], - ['Q', 81, '121', '\121', 'Q', nil, 'Q', 'Q', 'Q', 'Captial Q' ], - ['R', 82, '122', '\122', 'R', nil, 'R', 'R', 'R', 'Captial R' ], - ['S', 83, '123', '\123', 'S', nil, 'S', 'S', 'S', 'Captial S' ], - ['T', 84, '124', '\124', 'T', nil, 'T', 'T', 'T', 'Captial T' ], - ['U', 85, '125', '\125', 'U', nil, 'U', 'U', 'U', 'Captial U' ], - ['V', 86, '126', '\126', 'V', nil, 'V', 'V', 'V', 'Captial V' ], - ['W', 87, '127', '\127', 'W', nil, 'W', 'W', 'W', 'Captial W' ], - ['X', 88, '130', '\130', 'X', nil, 'X', 'X', 'X', 'Captial X' ], - ['Y', 89, '131', '\131', 'Y', nil, 'Y', 'Y', 'Y', 'Captial Y' ], - ['Z', 90, '132', '\132', 'Z', nil, 'Z', 'Z', 'Z', 'Captial Z' ], - ['[', 91, '133', '\133', '[', nil, '', '', '', 'Left square bracket [' ], - ['\\', 92, '134', '\134', '\', nil, '', '\textbackslash', '', 'Backslash \\'], - [']', 93, '135', '\135', ']', nil, '', '', '', 'Right square bracket ]' ], - ['^', 94, '136', '\136', '^', nil, '', '', '', 'Caret ^' ], - ['_', 95, '137', '\137', '_', nil, '{\_}', '\textunderscore', '', 'Underscore _' ], - ['`', 96, '140', '\140', '`', nil, '', '', '', 'Grave accent `' ], - ['a', 97, '141', '\141', 'a', nil, 'a', 'a', 'a', 'Small a' ], - ['b', 98, '142', '\142', 'b', nil, 'b', 'b', 'b', 'Small b' ], - ['c', 99, '143', '\143', 'c', nil, 'c', 'c', 'c', 'Small c' ], - ['d', 100, '144', '\144', 'd', nil, 'd', 'd', 'd', 'Small d' ], - ['e', 101, '145', '\145', 'e', nil, 'e', 'e', 'e', 'Small e' ], - ['f', 102, '146', '\146', 'f', nil, 'f', 'f', 'f', 'Small f' ], - ['g', 103, '147', '\147', 'g', nil, 'g', 'g', 'g', 'Small g' ], - ['h', 104, '150', '\150', 'h', nil, 'h', 'h', 'h', 'Small h' ], - ['i', 105, '151', '\151', 'i', nil, 'i', 'i', 'i', 'Small i' ], - ['j', 106, '152', '\152', 'j', nil, 'j', 'j', 'j', 'Small j' ], - ['k', 107, '153', '\153', 'k', nil, 'k', 'k', 'k', 'Small k' ], - ['l', 108, '154', '\154', 'l', nil, 'l', 'l', 'l', 'Small l' ], - ['m', 109, '155', '\155', 'm', nil, 'm', 'm', 'm', 'Small m' ], - ['n', 110, '156', '\156', 'n', nil, 'n', 'n', 'n', 'Small n' ], - ['o', 111, '157', '\157', 'o', nil, 'o', 'o', 'o', 'Small o' ], - ['p', 112, '160', '\160', 'p', nil, 'p', 'p', 'p', 'Small p' ], - ['q', 113, '161', '\161', 'q', nil, 'q', 'q', 'q', 'Small q' ], - ['r', 114, '162', '\162', 'r', nil, 'r', 'r', 'r', 'Small r' ], - ['s', 115, '163', '\163', 's', nil, 's', 's', 's', 'Small s' ], - ['t', 116, '164', '\164', 't', nil, 't', 't', 't', 'Small t' ], - ['u', 117, '165', '\165', 'u', nil, 'u', 'u', 'u', 'Small u' ], - ['v', 118, '166', '\166', 'v', nil, 'v', 'v', 'v', 'Small v' ], - ['w', 119, '167', '\167', 'w', nil, 'w', 'w', 'w', 'Small w' ], - ['x', 120, '170', '\170', 'x', nil, 'x', 'x', 'x', 'Small x' ], - ['y', 121, '171', '\171', 'y', nil, 'y', 'y', 'y', 'Small y' ], - ['z', 122, '172', '\172', 'z', nil, 'z', 'z', 'z', 'Small z' ], - ['{', 123, '173', '\173', '{', nil, '{\{}', '\{', '', 'Left curly brace {' ], - ['|', 124, '174', '\174', '|', nil, '', '', '', 'Vertical bar / pipe |' ], - ['}', 125, '175', '\175', '}', nil, '{\}}', '\}', '', 'Right curly brace }' ], - ['~', 126, '176', '\176', '~', nil, '', '', '', 'Tilde ~' ], - ['', 127, '177', '', '', nil, '', '', '', ' ' ], - ['', 128, '200', '', '€', nil, '', '', '', ' ' ], - ['', 129, '201', '', '', nil, '', '', '', ' ' ], - ['\'', 130, '202', '', '‚', nil, '', '', '', 'Low left single quote \''], - [' ', 131, '203', '', 'ƒ', nil, '', '', '', 'Florin ' ], - ['"', 132, '204', '', '„', nil, '', '', '', 'Low left double quote "' ], - ['…', 133, '205', '\342\200\246', '…', nil, '…', '\textellipsis', '', 'Ellipsis …' ], - ['†', 134, '206', '\342\200\240', '†', nil, '†', '\textdagger', '', 'Dagger †' ], - ['‡', 135, '207', '\342\200\241', '‡', nil, '‡', '\textdaggerbl', '', 'Double dagger ‡' ], - ['^', 136, '210', '', 'ˆ', nil, '', '', '', 'Circumflex ^' ], - ['', 137, '211', '', '‰', nil, '', '', '', 'Permil ' ], - ['', 138, '212', '', 'Š', nil, '', '', '', 'Capital S, caron ' ], - ['<', 139, '213', '', '‹', nil, '', '', '', 'Less than sign (see &060;) <' ], - ['', 140, '214', '', 'Œ', nil, '', '', '', 'Capital OE ligature ' ], - ['', 141, '215', '', '', nil, '', '', '', ' ' ], - ['', 142, '216', '', 'Ž', nil, '', '', '', 'Capital Z, caron ' ], - ['', 143, '217', '', '', nil, '', '', '', ' ' ], - ['', 144, '220', '', '', nil, '', '', '', ' ' ], - ['', 145, '221', '', '‘', nil, '', '', '', 'Left single quote ' ], - ['', 146, '222', '', '’', nil, '', '', '', 'Right single quote ' ], - ['', 147, '223', '', '“', nil, '', '', '', 'Left double quote ' ], - ['', 148, '224', '', '”', nil, '', '', '', 'Right double quote ' ], - ['', 149, '225', '', '•', nil, '', '', '', 'Bullet ' ], - ['-', 150, '226', '', '–', nil, '', '', '', 'En dash -' ], - ['', 151, '227', '', '—', nil, '', '', '', 'Em dash -' ], - ['~', 152, '230', '', '˜', nil, '', '', '', 'Tilde (see &126;) ~' ], - ['t', 153, '231', '', '™', nil, '', '', '', 'Trademark t' ], - ['', 154, '232', '', 'š', nil, '', '', '', 'small s, caron ' ], - ['', 155, '233', '', '›', nil, '', '', '', 'Greater than sign (see &062;) ' ], - ['', 156, '234', '', 'œ', nil, '', '', '', 'Small oe ligature ' ], - ['', 157, '235', '', '', nil, '', '', '', ' ' ], - ['', 158, '236', '', 'ž', nil, '', '', '', 'Small z, caron ' ], - ['', 159, '237', '', 'Ÿ', nil, '', '', '', 'Capital Y, umlaut ' ], - ['', 160, '240', '', ' ', ' ', '', '', '', 'Non-breaking space ' ], - ['¡', 161, '241', '\302\241', '¡', '¡', '¡', '', '', 'Inverted exclamation ' ], - ['¢', 162, '242', '\302\242', '¢', '¢', '¢', '', '', 'Cent sign ¢' ], - ['£', 163, '243', '\302\243', '£', '£', '£', '\textsterling', '', 'Pound sign £' ], - ['¤', 164, '244', '\302\244', '¤', '¤', '¤', '\textcurrency', '', 'General currency sign ' ], - ['¥', 165, '245', '\302\245', '¥', '¥', '¥', '', '', 'Yen sign ¥' ], - ['¦', 166, '246', '\302\246', '¦', '¦', '¦', '', '', 'Broken vertical bar ' ], - ['§', 167, '247', '\302\247', '§', '§', '§', '\textsection', '', 'Section sign §' ], - ['¨', 168, '250', '\302\250', '¨', '¨', '¨', '\"', '', 'Umlaut ' ], - ['©', 169, '251', '\302\251', '©', '©', '©', '\copyright', '\textcopyright', 'Copyright ©' ], - ['ª', 170, '252', '\302\252', 'ª', 'ª', 'ª', '', '', 'Feminine ordinal ª' ], - ['«', 171, '253', '\302\253', '«', '«', '«', '', '', 'Left angle quote «' ], - ['¬', 172, '254', '\302\254', '¬', '¬', '¬', '', '', 'Not sign ' ], - ['', 173, '255', '\302\255', '­', '­', '', '', '', 'Soft hyphen ' ], - ['®', 174, '256', '\302\256', '®', '®', '®', '', '', 'Registered trademark ®' ], - ['¯', 175, '257', '\302\257', '¯', '¯', '¯', '', '', 'Macron accent ' ], - ['°', 176, '260', '\302\260', '°', '°', '°', '', '', 'Degree sign °' ], - ['±', 177, '261', '\302\261', '±', '&plusmin;', '±', '', '', 'Plus or minus ±' ], - ['²', 178, '262', '\302\262', '²', '²', '²', '', '', 'Superscript 2 ²' ], - ['³', 179, '263', '\302\263', '³', '³', '³', '', '', 'Superscript 3 ³' ], - ['', 180, '264', '\302\264', '´', '´', ''', '', '', 'Acute accent ' ], - ['µ', 181, '265', '\302\265', 'µ', 'µ', 'µ', '', '', 'Micro sign (Greek mu) µ' ], - ['¶', 182, '266', '\302\266', '¶', '¶', '¶', '\textparagraph', '', 'Paragraph sign ¶' ], - ['·', 183, '267', '\302\267', '·', '·', %q{·}, '', %q{}, 'Middle dot ' ], - ['¸', 184, '270', '\302\270', '¸', '¸', '¸', '', '', 'Cedilla ' ], - ['¹', 185, '271', '\302\271', '¹', '¹', '¹', '', '', 'Superscript 1 ¹' ], - ['º', 186, '272', '\302\272', 'º', 'º', 'º', '', '', 'Masculine ordinal º' ], - ['»', 187, '273', '\302\273', '»', '»', '»', '', '', 'Right angle quote ' ], - ['¼', 188, '274', '\302\274', '¼', '¼', '¼', '', '', 'Fraction one quarter ¼' ], - ['½', 189, '275', '\302\275', '½', '½', '½', '', '', 'Fraction on half ½' ], - ['¾', 190, '276', '\302\276', '¾', '¾', '¾', '', '', 'Fraction three quarters ¾' ], - ['¿', 191, '277', '\302\277', '¿', '¿', '¿', '', '', 'Inverted question mark ¿' ], - ['À', 192, '300', '\303\200', 'À', 'À', 'À', '\`{A}', '', 'Capital A, grave accent À' ], - ['Á', 193, '301', '\303\201', 'Á', 'Á', 'Á', %q{\'{A}}, '', 'Capital A, acute accent Á' ], - ['Â', 194, '302', '\303\202', 'Â', 'Â', 'Â', '^{A}', '', 'Capital A, circumflex accent Â' ], - ['Ã', 195, '303', '\303\203', 'Ã', 'Ã', 'Ã', '~{A}', '', 'Capital A, tilde Ã' ], - ['Ä', 196, '304', '\303\204', 'Ä', 'Ä', 'Ä', '"{A}', '', 'Capital A, umlaut Ä' ], - ['Å', 197, '305', '\303\205', 'Å', 'Å', 'Å', 'r{A}', '', 'Capital A, ring Å' ], - ['Æ', 198, '306', '\303\206', 'Æ', 'Æ', 'Æ', 'AE', '', 'Capital AE ligature Æ' ], - ['Ç', 199, '307', '\303\207', 'Ç', 'Ç', 'Ç', '', '', 'Capital C, cedilla Ç' ], - ['È', 200, '310', '\303\210', 'È', 'È', 'È', '`{E}', '', 'Capital E, grave accent È' ], - ['É', 201, '311', '\303\211', 'É', 'É', 'É', ''{E}', '', 'Capital E, acute accent É' ], - ['Ê', 202, '312', '\303\212', 'Ê', 'Ê', 'Ê', '^{E}', '', 'Capital E, circumflex accent Ê' ], - ['Ë', 203, '313', '\303\213', 'Ë', 'Ë', 'Ë', '"{E}', '', 'Capital E, umlaut Ë' ], - ['Ì', 204, '314', '\303\214', 'Ì', 'Ì', 'Ì', '`{I}', '', 'Capital I, grave accent Ì' ], - ['Í', 205, '315', '\303\215', 'Í', 'Í', 'Í', ''{I}', '', 'Capital I, acute accent Í' ], - ['Î', 206, '316', '\303\216', 'Î', 'Î', 'Î', '^{I}', '', 'Capital I, circumflex accent Î' ], - ['Ï', 207, '317', '\303\217', 'Ï', 'Ï', 'Ï', '"{I}', '', 'Capital I, umlaut Ï' ], - ['Ð', 208, '320', '\303\220', 'Ð', 'Ð', 'Ð', '', '', 'Capital eth, Icelandic ' ], - ['Ñ', 209, '321', '\303\221', 'Ñ', 'Ñ', 'Ñ', '', '', 'Capital N, tilde Ñ' ], - ['Ò', 210, '322', '\303\222', 'Ò', 'Ò', 'Ò', '`{O}', '', 'Capital O, grave accent Ò' ], - ['Ó', 211, '323', '\303\223', 'Ó', 'Ó', 'Ó', ''{O}', '', 'Capital O, acute accent Ó' ], - ['Ô', 212, '324', '\303\224', 'Ô', 'Ô', 'Ô', '^{O}', '', 'Capital O, circumflex accent Ô' ], - ['Õ', 213, '325', '\303\225', 'Õ', 'Õ', 'Õ', '~{O}', '', 'Capital O, tilde Õ' ], - ['Ö', 214, '326', '\303\226', 'Ö', 'Ö', 'Ö', '"{O}', '', 'Capital O, umlaut Ö' ], - ['×', 215, '327', '\303\227', '×', '×', '×', '', '', 'Multiply sign ×' ], - ['Ø', 216, '330', '\303\230', 'Ø', 'Ø', 'Ø', 'O', '', 'Capital O, slash Ø' ], - ['Ù', 217, '331', '\303\231', 'Ù', 'Ù', 'Ù', '', '', 'Capital U, grave accent Ù' ], - ['Ú', 218, '332', '\303\232', 'Ú', 'Ú', 'Ú', '', '', 'Capital U, acute accent Ú' ], - ['Û', 219, '333', '\303\233', 'Û', 'Û', 'Û', '', '', 'Capital U, circumflex accent Û' ], - ['Ü', 220, '334', '\303\234', 'Ü', 'Ü', 'Ü', '', '', 'Capital U, umlaut Ü' ], - ['Ý', 221, '335', '\303\235', 'Ý', 'Ý', 'Ý', '', '', 'Capital Y, acute accent Ý' ], - ['Þ', 222, '336', '\303\236', 'Þ', 'Þ', 'Þ', '', '', 'Capital thorn, Icelandic Þ' ], - ['ß', 223, '337', '\303\237', 'ß', 'ß', 'ß', '', '', 'Small sz ligature, German ß' ], - ['à', 224, '340', '\303\240', 'à', 'à', 'à', '\`{a}', '', 'Small a, grave accent à' ], - ['á', 225, '341', '\303\241', 'á', 'á', 'á', %q{\'{a}}, '', 'Small a, acute accent á' ], - ['â', 226, '342', '\303\242', 'â', 'â', 'â', '\^{a}', '', 'Small a, circumflex accent â' ], - ['ã', 227, '343', '\303\243', 'ã', 'ã', 'ã', '\~{a}', '', 'Small a, tilde ã' ], - ['ä', 228, '344', '\303\244', 'ä', 'ä', 'ä', '\"{a}', '', 'Small a, umlaut ä' ], - ['å', 229, '345', '\303\245', 'å', 'å', 'å', '\r{a}', '', 'Small a, ring å' ], - ['æ', 230, '346', '\303\246', 'æ', 'æ', 'æ', '\ae', '', 'Small ae ligature æ' ], - ['ç', 231, '347', '\303\257', 'ç', 'ç', 'ç', '', '', 'Small c, cedilla ç' ], - ['è', 232, '350', '\303\250', 'è', 'è', 'è', '\`{e}', '', 'Small e, grave accent è' ], - ['é', 233, '351', '\303\251', 'é', 'é', 'é', %q{\'{e}}, '', 'Small e, acute accent é' ], - ['ê', 234, '352', '\303\252', 'ê', 'ê', 'ê', '\^{e}', '', 'Small e, circumflex accent ê' ], - ['ë', 235, '353', '\303\253', 'ë', 'ë', 'ë', '\"{e}', '', 'Small e, umlaut ë' ], - ['ì', 236, '354', '\303\254', 'ì', 'ì', 'ì', '\`{i}', '', 'Small i, grave accent ì' ], - ['í', 237, '355', '\303\255', 'í', 'í', 'í', '\'{i}', '', 'Small i, acute accent í' ], - ['î', 238, '356', '\303\256', 'î', 'î', 'î', '\^{i}', '', 'Small i, circumflex accent î' ], - ['ï', 239, '357', '\303\257', 'ï', 'ï', 'ï', '\"{i}', '', 'Small i, umlaut ï' ], - ['ð', 240, '360', '\303\260', 'ð', 'ð', 'ð', '', '', 'Small eth, Icelandic ð' ], - ['ñ', 241, '361', '\303\261', 'ñ', 'ñ', 'ñ', '', '', 'Small n, tilde ñ' ], - ['ò', 242, '362', '\303\262', 'ò', 'ò', 'ò', '\`{o}', '', 'Small o, grave accent ò' ], - ['ó', 243, '363', '\303\263', 'ó', 'ó', 'ó', %q{\'{o}}, '', 'Small o, acute accent ó' ], - ['ô', 244, '364', '\303\264', 'ô', 'ô', 'ô', '\^{o}', '', 'Small o, circumflex accent ô' ], - ['õ', 245, '365', '\303\265', 'õ', 'õ', 'õ', '\^{o}', '', 'Small o, tilde õ' ], - ['ö', 246, '366', '\303\266', 'ö', 'ö', 'ö', '\"{o}', '', 'Small o, umlaut ö' ], - ['÷', 247, '367', '\303\267', '÷', '÷', '÷', '', '', 'Divide sign ÷' ], - ['ø', 248, '370', '\303\270', 'ø', 'ø', 'ø', '', '', 'Small o, slash ø' ], - ['ù', 249, '371', '\303\271', 'ù', 'ù', 'ù', '\`{u}', '', 'Small u, grave accent ù' ], - ['ú', 250, '372', '\303\272', 'ú', 'ú', 'ú', %q{\'{u}}, '', 'Small u, acute accent ú' ], - ['û', 251, '373', '\303\273', 'û', 'û', 'û', '\^{u}', '', 'Small u, circumflex accent û' ], - ['ü', 252, '374', '\303\274', 'ü', 'ü', 'ü', '\"{u}', '', 'Small u, umlaut ü' ], - ['ý', 253, '375', '\303\275', 'ý', 'ý', 'ý', '', '', 'Small y, acute accent ý' ], - ['þ', 254, '376', '\303\276', 'þ', 'þ', 'þ', '', '', 'Small thorn, Icelandic þ' ], - ['ÿ', 255, '377', '\303\277', 'ÿ', 'ÿ', 'ÿ', '', '', 'Smally y, umlaut ÿ' ], - ['∝', , '', '', '∝', '∝', '∝', '', '', 'proportional to U+221D (8733) ∝' ], - ['∞', , '', '', '∞', '∞', '∞', '', '', 'infinity U+221E (8734) ∞' ], -] - end - end -end -__END__ diff --git a/lib/sisu/v2/constants.rb b/lib/sisu/v2/constants.rb deleted file mode 100644 index 6c949d53..00000000 --- a/lib/sisu/v2/constants.rb +++ /dev/null @@ -1,204 +0,0 @@ -# coding:utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - constants - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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/copyleft/gpl.html> - - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -Sfx={:txt=>'.txt',:html=>'.html',:xhtml=>'.xhtml',:xml=>'.xml',:epub=>'.epub',:epub_xhtml=>'.xhtml',:odt=>'.odt',:pdf=>'.pdf'} -Ax,Xx,Mx,Rx,Hx,Dx,Px,Db,Gt,Tex=Array.new(10){{}} -Ax[:tab]="\t" -Xx[:protect]='☞' -Xx[:segment]='Ф' -Mx[:meta_o],Mx[:meta_c]='〔@','〕' -Mx[:lv_o_1],Mx[:lv_o_2],Mx[:lv_o_3],Mx[:lv_o_4],Mx[:lv_o_5],Mx[:lv_o_6],Mx[:lv_o_7],Mx[:lv_o_8],Mx[:lv_o_9]=1,2,3,4,5,6,7,8,9; -Mx[:lv_o],Mx[:lv_c]='〔','〕' -Mx[:en_a_o]='【'; Mx[:en_a_c]='】' #endnote Mx[:en_a_o]='~{'; Mx[:en_a_c]='}~' -Mx[:en_b_o]='〖'; Mx[:en_b_c]='〗' #endnote Mx[:en_b_o]='~['; Mx[:en_b_c]=']~' -Mx[:gr_o]='〔'; Mx[:gr_c]='〕' #group text mark -Mx[:id_o]='〔'; Mx[:id_c]='〕' #object id mark -Mx[:tc_o]='『'; Mx[:tc_c]="』" #table row mark #Mx[:tc_c]="』\n" -Mx[:tc_p]='┆' #table col/misc mark -Mx[:pa_o]='〔'; Mx[:pa_c]='〕' #affects paragraph mark -Mx[:mk_o]='〔'; Mx[:mk_c]='〕' #generic mark -Mx[:gl_o]='〔'; Mx[:gl_c]='〕' #glyph -Mx[:fa_o]='〔'; Mx[:fa_o_c]='¤'; Mx[:fa_c_o]='¤'; Mx[:fa_c]='〕' -Mx[:fa_bold_o]= "#{Mx[:fa_o]}b#{Mx[:fa_o_c]}"; Mx[:fa_bold_c]= "#{Mx[:fa_c_o]}b#{Mx[:fa_c]}" -Mx[:fa_italics_o]= "#{Mx[:fa_o]}i#{Mx[:fa_o_c]}"; Mx[:fa_italics_c]= "#{Mx[:fa_c_o]}i#{Mx[:fa_c]}" -Mx[:fa_underscore_o]= "#{Mx[:fa_o]}u#{Mx[:fa_o_c]}"; Mx[:fa_underscore_c]= "#{Mx[:fa_c_o]}u#{Mx[:fa_c]}" -Mx[:fa_cite_o]= "#{Mx[:fa_o]}cite#{Mx[:fa_o_c]}"; Mx[:fa_cite_c]= "#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}" -Mx[:fa_insert_o]= "#{Mx[:fa_o]}ins#{Mx[:fa_o_c]}"; Mx[:fa_insert_c]= "#{Mx[:fa_c_o]}ins#{Mx[:fa_c]}" -Mx[:fa_strike_o]= "#{Mx[:fa_o]}del#{Mx[:fa_o_c]}"; Mx[:fa_strike_c]= "#{Mx[:fa_c_o]}del#{Mx[:fa_c]}" -Mx[:fa_superscript_o]="#{Mx[:fa_o]}sup#{Mx[:fa_o_c]}"; Mx[:fa_superscript_c]="#{Mx[:fa_c_o]}sup#{Mx[:fa_c]}" -Mx[:fa_subscript_o]= "#{Mx[:fa_o]}sub#{Mx[:fa_o_c]}"; Mx[:fa_subscript_c]= "#{Mx[:fa_c_o]}sub#{Mx[:fa_c]}" -Mx[:fa_hilite_o]= "#{Mx[:fa_o]}hi#{Mx[:fa_o_c]}"; Mx[:fa_hilite_c]= "#{Mx[:fa_c_o]}hi#{Mx[:fa_c]}" -Mx[:fa_monospace_o]= "#{Mx[:fa_o]}mono#{Mx[:fa_o_c]}"; Mx[:fa_monospace_c]= "#{Mx[:fa_c_o]}mono#{Mx[:fa_c]}" -Mx[:gl_bullet]= "#{Mx[:gl_o]}●#{Mx[:gl_c]}" - Mx[:pa_non_object_dummy_heading]="#{Mx[:pa_o]}-##{Mx[:pa_c]}" #unnumbered paragraph, delete when not required [used in dummy headings, eg. for segmented html] (place marker at end of paragraph) - Mx[:pa_non_object_no_heading]="#{Mx[:pa_o]}~##{Mx[:pa_c]}" #unnumbered paragraph (place marker at end of paragraph) -Mx[:idx_o]='▢ '; Mx[:idx_c]='▢ ' # -Mx[:nbsp]= '░' #'▭ ' -Mx[:br_line]= '▌' #lB ▌ 9612 #'┘' #'¶' -Mx[:br_paragraph]= '█' #FB █ 9608 # PP ∥ 8741 #'▐' #'┘' #'¶' #FB █ 9608 lB ▌ 9612 RB ▐ 9616 -Mx[:br_nl]= '』' # '┘' -Mx[:obj_ln_sep]= 'obj_ln_sep'; Hx[:obj_ln_sep]= {:obj=>Mx[:obj_ln_sep]} # line sep -Mx[:br_page]= 'break_page'; Hx[:br_page]= {:obj=>Mx[:br_page]} # newpage -Mx[:br_page_new]= 'break_page_new'; Hx[:br_page_new]= {:obj=>Mx[:br_page_new]} # clearpage -Mx[:br_endnotes]= "#{Mx[:mk_o]}ENDNOTES#{Mx[:mk_c]}" -Mx[:br_eof]= "#{Mx[:mk_o]}EOF#{Mx[:mk_c]}" -Mx[:lnk_o]='⌠'; Mx[:lnk_c]='⌡' #'⌈' '⌋' '⌠' '⌡' #Mx[:lnk_o]='◁'; Mx[:lnk_c]='▷' #‹ › -Mx[:url_o]='「'; Mx[:url_c]='」' -Mx[:rel_o]='⌈'; Mx[:rel_c]='⌋' -Mx[:tag_o]='⌊'; Mx[:tag_c]='⌉' -Mx[:sm_set_o]='《'; Mx[:sm_set_c]='》' -Mx[:sm_subset_o]='《 '; Mx[:sm_subset_c]='》' -Mx[:vline]='┆' # ¦ | -#Mx[:sm_set_o]='∈ '; Mx[:sm_set_c]='∋ ' -#Mx[:sm_subset_o]='∈ '; Mx[:sm_subset_c]='∋ ' -Rx[:mx_fa_clean]= /#{Mx[:fa_o]}.+?#{Mx[:fa_c]}|#{Mx[:pa_o]}.+?#{Mx[:pa_c]}|#{Mx[:mk_o]}.+?#{Mx[:mk_c]}/ -Rx[:lv],Rx[:lv_1],Rx[:lv_2],Rx[:lv_3],Rx[:lv_4],Rx[:lv_5],Rx[:lv_6],Rx[:lv_7],Rx[:lv_8],Rx[:lv_9]= - /〔([1-9]):(\S*?)〕/,/#{Mx[:lv_o_1]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_2]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_3]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_4]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_5]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_6]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_7]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_8]}(\S*?)#{Mx[:lv_c]}/,/#{Mx[:lv_o_9]}(\S*?)#{Mx[:lv_c]}/ -Rx[:meta]=/#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}/ -Dx[:url_o]='‹'; Dx[:url_c]='›' -Dx[:url_o_xml]='<'; Dx[:url_c_xml]='>' -Dx[:rel_o]='‹'; Dx[:rel_c]='›' # Dx[:rel_o]='「'; Dx[:rel_c]='」' -Tex[:backslash]="\\\\" -Tex[:backslash]="\\\\" -Tex[:tilde]='\\\\\\~' -#Px[:emphasis_o]= '*'; Px[:emphasis_c]= '*' -#Px[:bold_o]= '!'; Px[:bold_c]= '!' -Px[:bold_o]= '*'; Px[:bold_c]= '*' -Px[:italics_o]= '/'; Px[:italics_c]= '/' -Px[:underscore_o]= '_'; Px[:underscore_c]= '_' -Px[:cite_o]= '"'; Px[:cite_c]= '"' -Px[:insert_o]= '+'; Px[:insert_c]= '+' -Px[:strike_o]= '-'; Px[:strike_c]= '-' -Px[:superscript_o]='^'; Px[:superscript_c]='^' -Px[:subscript_o]= '['; Px[:subscript_c]= ']' -Px[:hilite_o]= '*'; Px[:hilite_c]= '*' -Px[:monospace_o]= ''; Px[:monospace_c]= '' -Px[:lv1]= '*' -Px[:lv2]= '=' -Px[:lv3]= '=' -#Px[:lv2_3]= '=' -Px[:lv4]= '-' -Px[:lv5]= '.' -Px[:lv6]= '.' -#Px[:lv5_6]= '.' -Db[:name_prefix]="SiSU#{SiSU_version_dir}c_" -Db[:name_prefix_db]="sisu_#{SiSU_version_dir}c_" -Db[:col_title]=800 -Db[:col_title_part]=400 -Db[:col_title_edition]=10 -Db[:col_name]=600 -Db[:col_creator_misc_short]=100 -Db[:col_language]=100 -Db[:col_language_char]=3 -Db[:col_date_text]=10 -Db[:col_classify_txt_long]=600 -Db[:col_classify_txt_short]=600 -Db[:col_classify_short]=200 -Db[:col_classify_identify]=256 -Db[:col_classify_library]=30 -Db[:col_classify_small]=16 -Db[:col_filename]=256 -Db[:col_digest]=64 -Db[:col_filesize]=10 -Db[:col_info_note]=2500 -Gt[:grotto]='sisu:' -Gt[:txt]='txt' -Gt[:image]='images' -Gt[:conf]='conf' -__END__ -consider: - 〔comment〕 - 〔links?????〕 - import document? -check: - bold line - -┆┆⋮┇┊┋ -『』 -「」 -〔〕 -【】 - -· -¤ - #˝ " λ Ω β α π Ѫ Ж Я Ѳ ѳ Ф ㈣ - Ѳ ѳ Ф - ♩ ♭ ✠ ▭ ▬ ▪ -【】〖〗《》「」 - ‹ › ∗ -'〔lv1〕','〔lv2〕','〔lv3〕','〔lv4〕','〔lv5〕','〔lv6〕','〔lv7〕','〔lv8〕','〔lv9〕' -'〔 Ѳ1〕','〔 Ѳ2〕','〔 Ѳ3〕','〔 Ѳ4〕','〔 Ѳ5〕','〔Ѳ6〕','〔Ѳ7〕','〔Ѳ8〕','〔Ѳ9〕' -◁▷ -◀this is text or an image▶ http:// -p __FILE__ +':'+ __LINE__.to_s -p __FILE__ + ' ' + __LINE__.to_s + ' ' + html -puts "#{__FILE__} #{__LINE__} #{o.inspect}" -puts __FILE__ + ' ' + __LINE__.to_s + '--> ' + o.inspect -puts %{-\t#{__FILE__}::#{__LINE__}::#{caller}:\n"#{name}"} -p "\t" + txt.obj + " << #{__FILE__} #{__LINE__} >>" -p (__FILE__ + ' ' + __LINE__.to_s + '--> ' + dob.inspect) if dob.is=='heading' -data.each {|o| p (__FILE__ + ' ' + __LINE__.to_s + '--> ' + o.inspect) if o.is=='heading'} -puts "#{__FILE__} #{__LINE__} #{para}" if @opt.cmd =~/M/ -puts "#{__FILE__} #{__LINE__} #{t_o}" if @opt.cmd =~/M/ - dr ┌ 9484 dR ┍ 9485 Dr ┎ 9486 DR ┏ 9487 dl ┐ 9488 dL ┑ 9489 Dl ┒ 9490 LD ┓ 9491 ur └ 9492 uR ┕ 9493 Ur ┖ 9494 UR ┗ 9495 ul ┘ 9496 uL ┙ 9497 Ul ┚ 9498 UL ┛ 9499 vr ├ - dr ┌ 9484 dR ┍ 9485 Dr ┎ 9486 DR ┏ 9487 dl ┐ 9488 dL ┑ 9489 Dl ┒ 9490 LD ┓ 9491 ur └ 9492 uR ┕ 9493 Ur ┖ 9494 UR ┗ 9495 ul ┘ 9496 uL ┙ 9497 Ul ┚ 9498 UL ┛ 9499 vr ├ - └ ┘ -Iu ⌠ 8992 Il ⌡ <7 ⌈ 8968 >7 ⌉ 8969 7< ⌊ 8970 7> ⌋ 8971 -<" 『 12302 >" 』 12303 -<' 「 12300 >' 」 12301 diff --git a/lib/sisu/v2/dal.rb b/lib/sisu/v2/dal.rb deleted file mode 100644 index fd09f64e..00000000 --- a/lib/sisu/v2/dal.rb +++ /dev/null @@ -1,475 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: preprocessing, (document abstraction), data abstraction used - in subsequent processing - -=end -module SiSU_DAL - require "#{SiSU_lib}/defaults" # defaults.rb - include SiSU_Viz - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - require "#{SiSU_lib}/param" # param.rb - include SiSU_Param - require "#{SiSU_lib}/dal_doc_objects" # dal_doc_objects.rb - require "#{SiSU_lib}/dal_syntax" # dal_syntax.rb - include SiSU_Syntax - require "#{SiSU_lib}/dal_doc_str" # dal_doc_str.rb - require "#{SiSU_lib}/dal_idx" # dal_idx.rb - require "#{SiSU_lib}/dal_numbering" # dal_numbering.rb - require "#{SiSU_lib}/dal_hash_digest" # dal_hash_digest.rb - require "#{SiSU_lib}/dal_endnotes" # dal_endnotes.rb - require "#{SiSU_lib}/dal_images" # dal_images.rb - require "#{SiSU_lib}/dal_metadata" # dal_metadata.rb - require "#{SiSU_lib}/dal_character_check" # dal_character_check.rb - require "#{SiSU_lib}/dal_substitutions_and_insertions" # dal_substitutions_and_insertions.rb - require "#{SiSU_lib}/dal_expand_insertions" # dal_expand_insertions.rb - require "#{SiSU_lib}/i18n" # i18n.rb - require "#{SiSU_lib}/shared_sem" # shared_sem.rb - class Instantiate < SiSU_Param::Parameters::Instructions - def initialize - @@flag_vocab=0 - @@line_mode='' - end - end - class Source <Instantiate - @@dal_array=[] - @@idx_arr={:sst=>[],:tex=>[],:html=>[],:xhtml=>[]} - @@map_arr={:nametags=>[],:ocn_htmlseg=>[]} - @@fns=nil - def initialize(opt) - @opt=opt - @@fns||@opt.fns - @make_fns=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - @fnm=@make_fns.marshal.dal_metadata - @fnc=@make_fns.marshal.dal_content - @idx_sst=@make_fns.marshal.dal_idx_sst_rel_html_seg - @idx_tex=@make_fns.marshal.dal_idx_sst_rel - @idx_html=@make_fns.marshal.dal_idx_html - @idx_xhtml=@make_fns.marshal.dal_idx_xhtml - @map_nametags=@make_fns.marshal.dal_map_nametags - @map_ocn_htmlseg=@make_fns.marshal.dal_map_ocn_htmlseg - SiSU_Env::Create_system_link.new.images - @env=SiSU_Env::Info_env.new - end - def read #creates dal - begin - dal=[] - @@dal_array=[] - @@fns=@opt.fns - create_dal - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get #reads dal, unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@dal_array=[] - end - dal=(@@dal_array.empty?) ? read_fnc : @@dal_array.dup - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_idx_sst #reads dal idx.sst, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@idx_arr[:sst]=[] - end - dal=(@@idx_arr[:sst].empty?) ? read_idx_sst : @@idx_arr[:sst].dup #check - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_idx_tex #reads dal idx.tex, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@idx_arr[:tex]=[] - end - dal=(@@idx_arr[:tex].empty?) ? read_idx_tex : @@idx_arr[:tex].dup #check - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_idx_html #reads dal idx.html, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@idx_arr[:html]=[] - end - dal=(@@idx_arr[:html].empty?) ? read_idx_html : @@idx_arr[:html].dup - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_idx_xhtml #reads dal idx.xhtml, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@idx_arr[:xthml]=[] - end - dal=(@@idx_arr[:xhtml].empty?) ? read_idx_xhtml : @@idx_arr[:xhtml].dup - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_map_nametags #reads dal map.nametags, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@map_arr[:nametags]=[] - end - dal=(@@map_arr[:nametags].empty?) ? read_map_nametags : @@map_arr[:nametags].dup - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - def get_map_ocn_htmlseg #reads dal map.ocn_htmlseg, #unless does not exist then creates first - begin - dal=[] - unless @@fns==@opt.fns - @@fns=@opt.fns - @@map_arr[:ocn_htmlseg]=[] - end - dal=(@@map_arr[:ocn_htmlseg].empty?) ? read_map_ocn_htmlseg : @@map_arr[:ocn_htmlseg].dup - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - Instantiate.new - end - end - protected - def create_dal - dal_array=[] - unless @opt.cmd =~/q/ - tell=(@opt.cmd=~/[vVM]/) \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Document Abstraction') \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Document Abstraction',@opt.fns) - tell.green_title_hi - end - file_array=@env.read_source_file(@opt.fns) - file_array.each do |l| - if l =~/\r\n/; l.gsub!(/\r\n/,"\n") - end - end - meta=file_array.dup - meta=meta.join.split("\n\n") #check whether can be eliminated, some of these are large objects to have twice - @md=SiSU_Param::Parameters::Instructions.new(meta,@opt).extract - meta=nil - dal=SiSU_DAL::Make.new(@md,file_array).song - if @opt.cmd =~/[vM]/ - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"~meta/#{@opt.fns}.meta").output if @opt.cmd =~/v/i - SiSU_Screen::Ansi.new(@opt.cmd,"dal -> #{@make_fns.meta}").txt_grey if @opt.cmd =~/M/ - end - dal.each{|s| dal_array << s} - dal_array - end - def read_fnm - dal=[] - dal=if FileTest.file?(@fnm) - (RUBY_VERSION < '1.9') \ - ? (File.open(@fnm){ |f| dal=Marshal.load(f)}) \ - : (File.open(@fnm,'r:utf-8'){ |f| dal=Marshal.load(f)}) - else SiSU_DAL::Source.new(@opt).create_dal - end - end - def read_fnc - dal=[] - dal=if FileTest.file?(@fnc) - (RUBY_VERSION < '1.9') \ - ? (File.open(@fnc){ |f| dal=Marshal.load(f)}) \ - : (File.open(@fnc,'r:utf-8'){ |f| dal=Marshal.load(f)}) - else SiSU_DAL::Source.new(@opt).create_dal - end - end - def read_idx_sst - m=[] - m=if FileTest.file?(@idx_sst) - (RUBY_VERSION < '1.9') \ - ? (File.open(@idx_sst){ |f| m=Marshal.load(f)}) \ - : (File.open(@idx_sst,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - def read_idx_tex - m=[] - m=if FileTest.file?(@idx_tex) - (RUBY_VERSION < '1.9') \ - ? (File.open(@idx_tex){ |f| m=Marshal.load(f)}) \ - : (File.open(@idx_tex,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - def read_idx_html - m=[] - m=if FileTest.file?(@idx_html) - (RUBY_VERSION < '1.9') \ - ? (File.open(@idx_html){ |f| m=Marshal.load(f)}) \ - : (File.open(@idx_html,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - def read_idx_xhtml - m=[] - m=if FileTest.file?(@idx_xhtml) - (RUBY_VERSION < '1.9') \ - ? (File.open(@idx_xhtml){ |f| m=Marshal.load(f)}) \ - : (File.open(@idx_xhtml,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - def read_map_nametags - m=[] - m=if FileTest.file?(@map_nametags) - (RUBY_VERSION < '1.9') \ - ? (File.open(@map_nametags){ |f| m=Marshal.load(f)}) \ - : (File.open(@map_nametags,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - def read_map_ocn_htmlseg - m=[] - m=if FileTest.file?(@map_ocn_htmlseg) - (RUBY_VERSION < '1.9') \ - ? (File.open(@map_ocn_htmlseg){ |f| m=Marshal.load(f)}) \ - : (File.open(@map_ocn_htmlseg,'r:utf-8'){ |f| m=Marshal.load(f)}) - else nil - end - end - end - class Output - def initialize(md,data) - @md,@data=md,data - @make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @dir=SiSU_Env::Info_env.new(@md.fns) - end - def screen_dump(o) - if defined? o.of - print %{OF: #{o.of}; } - end - if defined? o.is - print %{IS: #{o.is}; } - end - if defined? o.ocn - print %{OCN: #{o.ocn}; } - end - if defined? o.node - print %{NODE: #{o.node}; } - end - if defined? o.parent - print %{Parent: #{o.parent}; } - end - if defined? o.obj and not o.obj.empty? - puts %{\n#{o.obj}; } - else "\n" - end - end - def screen_print(t_o) - if defined? t_o - print ' ' + t_o.to_s - end - end - def screen_output(data) - data.each do |o| - print o.class - screen_print(o.ocn) - screen_print(o.obj) - puts "\n" - end - end - def hard_output - if @md.cmd =~/M/ - filename_meta=@make.file_meta - @data.each {|o| filename_meta.puts o.inspect.sub(/:0x[0-9a-f]{8}\s/,': ')} #to make diffing easier - filename_txt=@make.file_txt - @data.each do |o| - if defined? o.ocn - filename_txt.puts case o.is - when 'heading' - "[#{o.is} #{o.lv}~#{o.name} [#{o.ocn}]] #{o.obj}" - else "[#{o.is} [#{o.ocn}]] #{o.obj}" - end - else - filename_txt.puts case o.is - when 'meta' - "[m~#{o.tag}] #{o.obj}" - else "[#{o.is}] #{o.obj}" - end - end - end - filename_debug=@make.file_debug - @data.each do |o| - if defined? o.ocn - case o.is - when 'heading' - filename_debug.puts "#{o.is} #{o.lv}~#{o.name} odv=#{o.odv} osp=#{o.osp} [#{o.ocn}] -->\n\t#{o.obj}" - end - end - end - else - hard="#{@dir.path.dal}/#{@md.fns}.meta" - File.unlink(hard) if FileTest.file?(hard) - hard="#{@dir.path.dal}/#{@md.fns}.txt" - File.unlink(hard) if FileTest.file?(hard) - hard="#{@dir.path.dal}/#{@md.fns}.debug.txt" - File.unlink(hard) if FileTest.file?(hard) - end - end - def make_marshal_content - marshal_dal=@make.marshal.dal_content - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def make_marshal_metadata - marshal_dal=@make.marshal.dal_metadata - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def idx_html_hard_output - if @md.book_idx \ - and @md.cmd =~/M/ - filename_meta=@make.file_meta_idx_html - unless @data.nil? #REMOVE earliest possible - @data.each {|s| p s.inspect + "\n" unless s.class==String} - @data.each {|s| filename_meta.puts s.strip + "\n" unless s.strip.empty?} - end - else - hard_idx_html="#{@dir.path.dal}/#{@md.fns}.idx.html" - File.unlink(hard_idx_html) if FileTest.file?(hard_idx_html) - end - end - def make_marshal_idx_sst_html_seg - marshal_dal=@make.marshal.dal_idx_sst_rel_html_seg - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def make_marshal_idx_sst_rel - marshal_dal=@make.marshal.dal_idx_sst_rel - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def make_marshal_idx_html - marshal_dal=@make.marshal.dal_idx_html - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def make_marshal_idx_xhtml - marshal_dal=@make.marshal.dal_idx_xhtml - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Array - end - def make_marshal_map_nametags - marshal_dal=@make.marshal.dal_map_nametags - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Hash - end - def make_marshal_map_name_ocn_htmlseg - marshal_dal=@make.marshal.dal_map_ocn_htmlseg - File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.class==Hash - end - end - class Make - def initialize(md,data) - @md,@data=md,data - @env=SiSU_Env::Info_env.new(@md.fns) - end - def reset - @@flag_vocab=0 - @@line_mode='' - end - def song - reset - data=@data - my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - data=data.join.split("\n\n") - data=SiSU_insertions::Insertions.new(@md,data).expand_insertions? # dal_expand_insertions.rb - data=SiSU_substitute_and_insert::SI.new(@md,data).substitutions_and_insertions? # dal_substitutions_and_insertions.rb - data,metadata=SiSU_document_structure_extract::Build.new(@md,data).identify_parts # dal_doc_str.rb - data=SiSU_Syntax::Markup.new(@md,data).songsheet # dal_syntax.rb - data,endnote_array=SiSU_character_check::Check.new(data).character_check_and_oldstyle_endnote_array # dal_character_check.rb - data=SiSU_images::Images.new(@md,data).images # dal_images.rb - data,tags_map,ocn_html_seg_map=SiSU_numbering::Numbering.new(@md,data).numbering_song # dal_numbering.rb - data,book_index_rel,book_index_rel_html_seg,html_idx,xhtml_idx=SiSU_book_index::Book_index.new(@md,data,@env).indexing_song if @md.book_idx # dal_idx.rb - data=SiSU_endnotes::Endnotes.new(@md,data,endnote_array).endnotes # dal_endnotes.rb - outputdata=data - if @md.cmd =~/[mM]/ - SiSU_DAL::Output.new(@md,outputdata).hard_output - SiSU_DAL::Output.new(@md,outputdata).make_marshal_content - SiSU_DAL::Output.new(@md,metadata).make_marshal_metadata - SiSU_DAL::Output.new(@md,html_idx).idx_html_hard_output - SiSU_DAL::Output.new(@md,book_index_rel_html_seg).make_marshal_idx_sst_html_seg - SiSU_DAL::Output.new(@md,book_index_rel).make_marshal_idx_sst_rel - SiSU_DAL::Output.new(@md,html_idx).make_marshal_idx_html - SiSU_DAL::Output.new(@md,xhtml_idx).make_marshal_idx_xhtml - SiSU_DAL::Output.new(@md,tags_map).make_marshal_map_nametags - SiSU_DAL::Output.new(@md,ocn_html_seg_map).make_marshal_map_name_ocn_htmlseg - end - reset - outputdata - end - protected - end -end -__END__ diff --git a/lib/sisu/v2/dal_doc_objects.rb b/lib/sisu/v2/dal_doc_objects.rb deleted file mode 100644 index bc0020b2..00000000 --- a/lib/sisu/v2/dal_doc_objects.rb +++ /dev/null @@ -1,425 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: document abstraction - -=end -module SiSU_document_structure - class Extract - def extract(h,o) - obj=h ? h : o - end - end - class Object_metadata - attr_accessor :is,:of,:tags,:obj,:digest - def initialize - @tags={} - @is=@tmp=@digest=nil - @of='meta' - end - def metadata(tags) - of= @of #String, classification - group - is= 'meta' #String, classification - specific type - tags= tags || ((defined? o.tags) ? o.tags : {}) #String, metadata type/tag - obj= nil - @of,@is,@tags,@obj=of,is,tags,obj - self - end - end - class Object_meta - attr_accessor :obj,:is,:of,:tag,:digest,:tmp - def initialize - @is=@obj=@tag=@digest=@digest=@tmp=nil - @of='meta' - end - def metadata(h,o=nil) - of= @of #String, classification - group - is= 'meta' #String, classification - specific type - tag= h[:tag] || ((defined? o.tag) ? o.tag : nil) #String, metadata type/tag - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - @of,@is,@tag,@obj,@digest,@tmp=of,is,tag,obj,digest,tmp - self - end - end - class Object_heading - attr_accessor :obj,:is,:tags,:of,:lv,:ln,:toc_,:name,:idx,:ocn,:odv,:osp,:node,:parent,:ocn_,:note_,:autonum_,:digest,:tmp - def initialize - @of='para' - @is=@obj=@lv=@ln=@toc_=@name=@idx=@size=@ocn=@odv=@osp=@node=@parent=@ocn_=@note_=@autonum_=@digest=@tmp=nil - @tags=[] - end - def heading_ln(lv) - ln=case lv - when /A/; 1 - when /B/; 2 - when /C/; 3 - when /1/; 4 - when /2/; 5 - when /3/; 6 - when /4/; 7 - when /5/; 8 - when /6/; 9 - end - end - def heading_lv(ln) - lv=case ln.to_s - when /1/; 'A' - when /2/; 'B' - when /3/; 'C' - when /4/; '1' - when /5/; '2' - when /6/; '3' - when /7/; '4' - when /8/; '5' - when /9/; '6' - end - end - def heading(h,o=nil) - if not h[:ln] and (h[:lv] and h[:lv]=~/[1-6A-C]/) - h[:ln]=heading_ln(h[:lv]) - elsif not h[:lv] and (h[:ln] and h[:ln].to_s=~/[1-9]/) - h[:lv]=heading_lv(h[:ln]) - end - of= @of #String, classification - group - is= 'heading' #String, classification - specific type - name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - node= h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - lv= h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-C then 1-6 - ln= h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 - toc_= h[:toc_] || ((defined? o.toc_) ? o.toc_ : false) #Bool, do not include in toc, (relevant to headings) - ocn_=if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - autonum_= if h[:autonum_].nil?; ((defined? o.autonum_) ? o.autonum_ : true) #Bool? auto-numbering if requested default on, false suppresses - else h[:autonum_] - end - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@lv,@ln,@name,@tags,@obj,@idx,@ocn,@odv,@osp,@node,@parent,@toc_,@ocn_,@note_,@autonum_,@digest,@tmp=of,is,lv,ln,name,tags,obj,idx,ocn,odv,osp,node,parent,toc_,ocn_,note_,autonum_,digest,tmp - self - end - def heading_insert(h,o=nil) - heading(h,o=nil) - @is= 'heading_insert' #String, classification - specific type - self - end - end - class Object_para - attr_accessor :obj,:is,:tags,:of,:name,:idx,:bullet_,:indent,:ocn,:odv,:osp,:parent,:note_,:image_,:ocn_,:digest,:tmp - def initialize - @of='para' - @is=@obj=@name=@idx=@bullet_=@indent=@size=@ocn=@odv=@osp=@parent=@note_=@image_=@ocn_=@digest=@tmp=nil - @tags=[] - end - def paragraph(h,o=nil) - of= @of #String, classification - group - is= 'para' #String, classification - specific type - name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - indent= h[:indent].to_s || ((defined? o.indent) ? o.indent.to_s : nil) #Integer, indent level - bullet_=h[:bullet_] || ((defined? o.bullet_) ? o.bullet_ : false) #Bool, bulleted? - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - image_= h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) - ocn_=if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@name,@tags,@obj,@indent,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp - self - end - def docinfo(h,o=nil) - of= @of #String, classification - group - is= 'docinfo' #String, classification - specific type - name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? - tags= h[:tags] || ((defined? o.tags) ? o.tags : nil) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= nil #String, book index provided? - ocn= nil #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - indent= nil #Integer, indent level - bullet_=false #Bool, bulleted? - note_= false #Bool, endnotes/footnotes? (processing optimization) - image_= h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) - ocn_=if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@name,@tags,@obj,@indent,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp - self - end - end - class Object_group - attr_accessor :obj,:is,:of,:tags,:idx,:ocn,:odv,:osp,:parent,:note_,:number_,:ocn_,:digest,:tmp - def initialize - @of='group' - @is=@obj=@idx=@ocn=@odv=@osp=@parent=@note_=@number_=@ocn_=@digest=@tmp=nil - @tags=[] - end - def code(h,o=nil) - of= @of #String, classification - group #alt 'code' - is= 'code' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - number_= h[:number_] || ((defined? o.number_) ? o.number_ : false) #Bool, numbered or not? - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - ocn_= if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@number_,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,number_,note_,ocn_,digest,tmp - self - end - def group(h,o=nil) - of= @of #String, classification - group - is= 'group' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - ocn_= if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp - self - end - def alt(h,o=nil) #see group - of= @of #String, classification - group - is= 'alt' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - ocn_= if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp - self - end - def verse(h,o=nil) #part of poem decide how you deal with this - of= @of #String, classification - group - is= 'verse' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - ocn_= if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp - @h=nil - self - end - end - class Object_table - attr_accessor :obj,:is,:of,:lv,:tags,:name,:idx,:indent,:size,:ocn,:number,:head_,:cols,:widths,:odv,:osp,:parent,:note_,:ocn_,:digest,:tmp - def initialize - @of='group' - @is=@obj=@lv=@name=@idx=@indent=@size=@ocn,@number,@head_,@cols,@widths=@odv=@osp=@parent=@note_=@ocn_=@digest=@tmp=nil - @tags=[] - end - def table(h,o=nil) - of= @of #String, classification - group - is= 'table' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - cols= h[:cols] || ((defined? o.cols) ? o.cols : nil) - widths= h[:widths] || ((defined? o.widths) ? o.widths : nil) - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - head_= h[:head_] || ((defined? o.head_) ? o.head_ : false) - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - ocn_=if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@cols,@widths,@obj,@idx,@ocn,@odv,@osp,@parent,@head_,@note_,@ocn_,@digest,@tmp=of,is,tags,cols,widths,obj,idx,ocn,odv,osp,parent,head_,note_,ocn_,digest,tmp - self - end - end - class Object_image - attr_accessor :obj,:is,:of,:lv,:idx,:size,:ocn,:parent,:note_,:ocn_,:digest,:tmp - def initialize - @of='image' - @is=@obj=@lv=@idx=@size=@ocn=@parent=@note_=@ocn_=@tmp=@digest=nil - @tags=[] - end - def image(h,o=nil) #not yet used, and what of a paragraph containing several images, consider - of= @of #String, classification - group - is= 'image' #String, classification - specific type - tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - size= h[:size] || ((defined? o.size) ? o.size : nil) - idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? - ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects - odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) - osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) - parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] - note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) - ocn_=if h[:ocn_].nil?; ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider - else h[:ocn_] - end - digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@tags,@obj,@size,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,size,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp - self - end - end - class Object_structure - attr_accessor :obj,:tag,:node,:lv,:ln,:status,:is,:of,:tmp - def initialize - @of='structure' - @is=@obj=@node=@lv=@ln=@status=@tmp=nil - end - def xml_dom(h,o=nil) - of= @of #String, classification - group - is= 'xml_dom' #String, classification - specific type - obj= h[:obj] || ((defined? o.obj) ? o.obj : '') #String, text content - lv= h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-C then 1-6 - ln= h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 - node= h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] - status= h[:status] || ((defined? o.status) ? o.status : nil) #tag status open or close - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@obj,@status,@node,@lv,@ln,@tmp=of,is,obj,status,node,lv,ln,tmp - self - end - end - class Object_comment - attr_accessor :obj,:is,:of,:tmp - def initialize - @of='comment' - @is=@obj=@tmp=nil - end - def comment(h,o=nil) - of= @of #String, classification - group - is= 'comment' #String, classification - specific type - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@obj,@tmp=of,is,obj,tmp - self - end - end - class Object_layout - attr_accessor :obj,:is,:of,:tmp - def initialize - @of='layout' - @is=@obj=@tmp=nil - end - def break(h,o=nil) #decide how to deal with, perhaps no obj? - of= @of #String, classification - group - is= 'break' #String, classification - specific type - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@obj,@tmp=of,is,obj,tmp - self - end - def insert(h,o=nil) #decide how to deal with, could mimic paragraph? - of= @of #String, classification - group - is= 'insert' #String, classification - specific type - obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content - tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use - @of,@is,@obj,@tmp=of,is,obj,tmp - self - end - end -end -__END__ -# ~# |-# no paragraph number # -# not included in toc diff --git a/lib/sisu/v2/dal_doc_str.rb b/lib/sisu/v2/dal_doc_str.rb deleted file mode 100644 index 6fd7eff2..00000000 --- a/lib/sisu/v2/dal_doc_str.rb +++ /dev/null @@ -1,1184 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: document abstraction - -=end -module SiSU_document_structure_extract - class Instantiate < SiSU_Param::Parameters::Instructions - @@flag={} #Beware!! - def initialize - @@flag['table_to']=false - @@counter=@@column=@@columns=0 - @@line_mode='' - end - end - class Build - @@flag={} #Beware!! - def initialize(md,data) - @md,@data=md,data - Instantiate.new - @pb=SiSU_document_structure::Object_layout.new.break(Hx[:br_page]) - @pbn=SiSU_document_structure::Object_layout.new.break(Hx[:br_page_new]) - end - def ln_get(lv) - ln=case lv - when /A/; 1 - when /B/; 2 - when /C/; 3 - when /1/; 4 - when /2/; 5 - when /3/; 6 - when /4/; 7 - when /5/; 8 - when /6/; 9 - end - end - def image_test(str) - boolean=(str=~/\{\s*\S+?\.png.+?\}https?:\/\/\S+/ ? true : false) - end - def bullet_test(str) - bool=((str=~/\*/) ? true : false) - end - def indent_test(str) - num=((str=~/^_([1-9])/) ? $1 : 0) - end - def endnote_test?(str) - bool=((str=~/~\{.+?\}~|~\[.+?\]~/) ? true : false) - end - def extract_tags(str,nametag=nil) - tags=[] - if str.nil? - else - if str =~/(?:^|[ ])\*~([a-z0-9._-]+)(?=[ #{Mx[:br_nl]}]|$)/ - str.gsub!(/(^|[ ])\*~([a-z0-9._-]+)(?=[ #{Mx[:br_nl]}]|$)/i, - "\\1#{Mx[:tag_o]}\\2#{Mx[:tag_c]}") - str.gsub!(/ [ ]+/i,' ') - tags=str.scan(/#{Mx[:tag_o]}(\S+?)#{Mx[:tag_c]}/).flatten - str.gsub!(/[ ]?#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}[ ]?/,' ') #may be issues with spaces would leave one, but "code" blocks? - end - tags=nametag ? (tags << nametag) : tags - end - [str,tags] - end - def identify_parts - data=@data - tuned_file=[] - @tuned_group,@tuned_code=[],[] - @@counter,@verse_count=0,0 - @metadata={} - @data.each do |t_o| - t_o.gsub!(/(?:\n\s*\n)+/m,"\n") unless @@flag['code'] - if t_o !~/^(?:code|poem|alt|group)\{|^\}(?:code|poem|alt|group)|^(?:table\{|\{table)[ ~]/ \ - and not @@flag['code'] \ - and not @@flag['poem'] \ - and not @@flag['group'] \ - and not @@flag['alt'] \ - and not @@flag['table'] - unless t_o =~/^(?:@\S+?:|%+)\s/ # extract book index for paragraph if any - idx=if t_o=~/^=\{(.+)\}\s*$\Z/m; m=$1 - t_o.gsub!(/\n=\{.+\}\s*$\Z/m,'') - m - else nil - end - end - t_o=case t_o - when /^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/ #metadata, header - if t_o=~/^#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*(.+)/m - tag,obj=$1,$2 - @metadata[tag]=obj - end - t_o=nil - when /^%+\s/ #comment - t_o=if t_o=~/^%+\s+(.+)/ - h={:obj=>$1} - SiSU_document_structure::Object_comment.new.comment(h) - else nil - end - when /^:?([A-C1-6])\~/ #heading / lv - lv=$1 - ln=ln_get(lv) - t_o=if t_o=~/^:?[A-C1-6]\~\s+(.+)/m - obj=$1 - note=endnote_test?(obj) - obj,tags=extract_tags(obj) - h={:lv=>lv,:ln=>ln,:obj=>obj,:idx=>idx,:tags=>tags} - SiSU_document_structure::Object_heading.new.heading(h) - elsif t_o=~/^:?[A-C1-6]\~(\S+?)-\s+(.+)/m - name,obj=$1,$2 - note=endnote_test?(obj) - obj,tags=extract_tags(obj) - h={:lv=>lv,:name=>name,:obj=>obj,:idx=>idx,:autonum_=>false,:tags=>tags} - SiSU_document_structure::Object_heading.new.heading(h) - elsif t_o=~/^:?[A-C1-6]\~(\S+)\s+(.+)/m - name,obj=$1,$2 - note=endnote_test?(obj) - obj,tags=extract_tags(obj,name) - h={:lv=>lv,:name=>name,:obj=>obj,:idx=>idx,:tags=>tags} - SiSU_document_structure::Object_heading.new.heading(h) - else nil - end - when /^(?:_[1-9]|_[1-9]?\*)\s+/ #indented and/or bullet paragraph - t_o=if t_o=~/^(_(?:[1-9]?\*|[1-9])\s+)(.+)/m - tst,obj=$1,$2 - indent=indent_test(tst) - bullet=bullet_test(tst) - image=image_test(obj) - note=endnote_test?(obj) - obj,tags=extract_tags(obj) - unless obj=~/\A\s*\Z/m - h={:bullet_=>bullet,:indent=>indent,:obj=>obj,:idx=>idx,:note_=>note,:image_=>image,:tags=>tags} - SiSU_document_structure::Object_para.new.paragraph(h) - end - else nil - end - when /^<?:p[bn]>?\s*$/ - if t_o =~/^<?:pn>?\s*$/ - SiSU_document_structure::Object_layout.new.break(Hx[:br_page_new]) - else SiSU_document_structure::Object_layout.new.break(Hx[:br_page]) - end - when /^<?:(?:ols|---)>?\s*$/ - SiSU_document_structure::Object_layout.new.break(Hx[:obj_ln_sep]) - else #paragraph - image=image_test(t_o) - note=endnote_test?(t_o) - obj,tags=extract_tags(t_o) - unless obj=~/\A\s*\Z/m - h={:bullet_=>false,:indent=>0,:obj=>obj,:idx=>idx,:note_=>note,:image_=>image,:tags=>tags} - SiSU_document_structure::Object_para.new.paragraph(h) - end - end - elsif not @@flag['code'] - if t_o =~/^code\{/ - @@flag['code']=true - @@counter=1 - @codeblock_numbered=(t_o =~/^code\{#/) ? true : false - h={:obj=>'code block start'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - elsif t_o =~/^poem\{/ - @@flag['poem']=true - h={:obj=>'poem start'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - tuned_file << t_o - elsif t_o =~/^group\{/ - @@flag['group']=true - h={:obj=>'group text start'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - tuned_file << t_o - elsif t_o =~/^alt\{/ - @@flag['alt']=true - h={:obj=>'alt text start'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - tuned_file << t_o - elsif t_o =~/^(?:table\{|\{table)[ ~]/ - h={:obj=>'table start'} #introduce a counter - ins=SiSU_document_structure::Object_comment.new.comment(h) #ins=SiSU_document_structure::Object_layout.new.insert(h) - tuned_file << ins - if t_o=~/^table\{(?:~h)?\s+/ - @@flag['table']=true - @rows='' - case t_o - when /table\{~h\s+c(\d+);\s+(.+)/ - cols=$1 - col=$2.scan(/\d+/) - heading=true - when /table\{\s+c(\d+);\s+(.+)/ - cols=$1 - col=$2.scan(/\d+/) - heading=false - end - @h={:head_=>heading,:cols=>cols,:widths=>col,:idx=>idx} - elsif t_o=~/^\{table(?:~h)?(?:\s+\d+;?)?\}\n.+\Z/m - m1,m2,hd=nil,nil,nil - tbl=/^\{table(?:~h)?(?:\s+\d+;?)?\}\n(.+)\Z/m.match(t_o)[1] #two table representations should be consolidated as one - hd=((t_o =~/^\{table~h/) ? true : false) - tbl,tags=extract_tags(tbl) - rws=tbl.split(/\n/) - rows='' - cols=nil - rws.each do |r| - cols=(cols ? cols : (r.scan('|').length) +1) - r.gsub!(/\s*\|\s*/m,"#{Mx[:tc_p]}") #r.gsub!(/\|/m,"#{Mx[:tc_p]}") - rows += r + Mx[:tc_c] - end - col=[] - if t_o =~/^\{table(?:~h)?\s+(\d+);?\}/ #width of col 1 given as %, usually when wider than rest that are even - c1=$1.to_i - width=(100 - c1)/(cols - 1) - col=[ c1 ] - (cols - 1).times { col << width } - else #all columns of equal width - width=100.00/cols - cols.times { col << width } - end - h={:head_=>hd,:cols=>cols,:widths=>col,:obj=>rows,:idx=>idx,:tags=>tags} - t_o=SiSU_document_structure::Object_table.new.table(h) unless h.nil? - tuned_file << t_o - h={:obj=>'table end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) - t_o - elsif t_o=~/^\{table(?:~h)?\s+/ - m1,m2,hd=nil,nil,nil - h=case t_o - when /\{table~h\s+(.+?)\}\n(.+)\Z/m #two table representations should be consolidated as one - m1,tbl,hd=$1,$2,true - when /\{table\s+(.+?)\}\n(.+)\Z/m #two table representations should be consolidated as one - m1,tbl,hd=$1,$2,false - else nil - end - tbl,tags=extract_tags(tbl) - col=m1.scan(/\d+/) - rws=tbl.split(/\n/) - rows='' - rws.each do |r| - r.gsub!(/\s*\|\s*/m,"#{Mx[:tc_p]}") #r.gsub!(/\|/m,"#{Mx[:tc_p]}") - rows += r + Mx[:tc_c] - end - h={:head_=>hd,:cols=>col.length,:widths=>col,:obj=>rows,:idx=>idx,:tags=>tags} - t_o=SiSU_document_structure::Object_table.new.table(h) unless h.nil? - tuned_file << t_o - h={:obj=>'table end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) - t_o - end - end - t_o - end - if @@flag['table'] - if @@flag['table'] \ - and t_o =~/^\}table/ #two table representations should be consolidated as one - @@flag['table']=false - headings,columns,widths,idx=@h[:head_],@h[:cols],@h[:widths],@h[:idx] - @h={:head_=>headings,:cols=>columns,:widths=>widths,:idx=>idx,:obj=>@rows} - t_o=SiSU_document_structure::Object_table.new.table(@h) - tuned_file << t_o - @h,@rows=nil,'' - t_o - h={:obj=>'table end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - t_o - else - if t_o !~/^table\{/ \ - and not t_o.nil? - t_o.gsub!(/^\n+/m,'') #check added for ruby 1.9.2 not needed in 1.8 series - t_o.gsub!(/\n/m,"#{Mx[:tc_p]}") - @rows += t_o + Mx[:tc_c] - end - t_o=nil - end - end - if @@flag['code'] - if t_o =~/^\}code/ - @@flag['code']=false - obj,tags=extract_tags(@tuned_code.join("\n")) - h={:obj=>obj,:tags=>tags,:number_=>@codeblock_numbered} - t_o=SiSU_document_structure::Object_group.new.code(h) - @tuned_code=[] - tuned_file << t_o - h={:obj=>'code block end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - end - if @@flag['code'] \ - and t_o.class==String \ - and not t_o.nil? #you may need to introduce t_o.class==String test more widely - sub_array=t_o.dup + "#{Mx[:br_nl]}" - @line_mode=sub_array.scan(/.+/) - @line_mode=[] - sub_array.scan(/.+/) {|w| @line_mode << w if w =~/[\S]+/} - t_o=SiSU_document_structure_extract::Build.new(@md,@line_mode).build_lines('code').join - @tuned_code << t_o - t_o=nil - end - elsif @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['alt'] - if @@flag['poem'] \ - and t_o =~/^\}poem/ - @@flag['poem']=false - h={:obj=>'poem end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - elsif ( @@flag['group'] \ - and t_o =~/^\}group/ ) - @@flag['group']=false - obj,tags=extract_tags(@tuned_group.join("\n")) - h={:obj=>obj,:tags=>tags} - @tuned_group=[] - t_o=SiSU_document_structure::Object_group.new.group(h) - tuned_file << t_o - h={:obj=>'group text end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - elsif ( @@flag['alt'] \ - and t_o =~/^\}alt/ ) - @@flag['alt']=false - obj,tags=extract_tags(@tuned_group.join("\n")) - h={:obj=>obj,:tags=>tags} - t_o=SiSU_document_structure::Object_group.new.alt(h) - @tuned_group=[] - tuned_file << t_o - h={:obj=>'alt text end'} #introduce a counter - t_o=SiSU_document_structure::Object_comment.new.comment(h) #t_o=SiSU_document_structure::Object_layout.new.insert(h) - end - if @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['alt'] \ - and t_o =~/\S/ \ - and t_o !~/^(?:\}(?:verse|code|alt|group)|(?:verse|code|alt|group)\{)/ # fix logic - sub_array=t_o.dup - @line_mode=sub_array.scan(/.+/) - type=if @@flag['poem']; 'poem' - t_o=SiSU_document_structure_extract::Build.new(@md,@line_mode).build_lines(type).join - poem=t_o.split(/\n\n/) - poem.each do |v| - v.gsub!(/\n/m,"#{Mx[:br_nl]}\n") - obj,tags=extract_tags(v) - h={:obj=>obj,:tags=>tags} - t_o=SiSU_document_structure::Object_group.new.verse(h) - tuned_file << t_o - end - else 'group' - end - @verse_count+=1 if @@flag['poem'] - end - end - if not @@flag['code'] - if @@flag['poem'] \ - or @@flag['group'] \ - or @@flag['alt'] - if t_o.class==String - t_o.gsub!(/\n/m,"#{Mx[:br_nl]}") - t_o.gsub!(/[ ][ ]/m,"#{Mx[:nbsp]*2}") - t_o.gsub!(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") - t_o=t_o + Mx[:br_nl] if t_o =~/\S+/ - elsif t_o.is=='group' \ - or t_o.is=='alt' \ - or t_o.is=='verse' - t_o.obj.gsub!(/\n/m,"#{Mx[:br_nl]}") - t_o.obj.gsub!(/[ ][ ]/m,"#{Mx[:nbsp]*2}") - t_o.obj.gsub!(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") - end - @tuned_group << t_o if t_o =~/\S+/ - else tuned_file << t_o - end - else tuned_file << t_o - end - end - if @md.flag_endnotes - tuned_file << @pb - h={:ln=>2,:obj=>'Endnotes',:autonum_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:ln=>4,:obj=>'Endnotes',:name=>'endnotes',:autonum_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:obj=>'Endnotes'} - end - if @md.book_idx - tuned_file << @pb - h={:ln=>2,:obj=>'Index',:autonum_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:ln=>4,:obj=>'Index',:name=>'book_index',:autonum_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:obj=>'Index'} - end - tuned_file << @pb - h={:ln=>2,:obj=>'Metadata',:autonum_=>false,:ocn_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:ln=>4,:obj=>'SiSU Metadata, document information',:name=>'metadata',:autonum_=>false,:ocn_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - tuned_file << @pb - h={:ln=>2,:obj=>'Manifest',:autonum_=>false,:ocn_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - h={:ln=>4,:obj=>'SiSU Manifest, alternative outputs etc.',:name=>'sisu_manifest',:autonum_=>false,:ocn_=>false} - tuned_file << SiSU_document_structure::Object_heading.new.heading_insert(h) - tuned_file - h={:obj=>'eof'} - meta=SiSU_document_structure::Object_metadata.new.metadata(@metadata) - [tuned_file,meta] - end - def table_rows_and_columns_array(table_str) - table=[] - table_str.split(/#{Mx[:tc_c]}/).each do |table_row| - table_row_with_columns=table_row.split(/#{Mx[:tc_p]}/) - table << table_row_with_columns - end - table - end - def meta_heading(h) - h={:lv=>h[:lv],:ln=>h[:ln],:name=>h[:name],:obj=>h[:obj],:ocn=>'0'} - SiSU_document_structure::Object_heading.new.heading(h) - end - def meta_para(str) - h={:obj=>str,:ocn_=>false} - SiSU_document_structure::Object_para.new.paragraph(h) - end - def metadata - meta=[] - dir=SiSU_Env::Info_env.new(@md.fns) - base_html="#{dir.url.root}/#{@md.fnb}" - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - language=l[:l] - tr=SiSU_Translate::Source.new(@md,language) - meta << @pb - h={:ln=>2,:obj=>'Metadata',:ocn_=>false} - meta << SiSU_document_structure::Object_heading.new.heading(h) - h={:ln=>4,:name=>'metadata',:obj=>'Metadata',:autonum_=>false,:ocn_=>false} - meta << SiSU_document_structure::Object_heading.new.heading(h) #add ocnm - s="Document Manifest @\n #{base_html}/#{@md.fn[:manifest]}" - meta << meta_para(s) - s="#{Mx[:fa_bold_o]}Dublin Core#{Mx[:fa_bold_c]} (DC)" #add ocnm - meta << meta_para(s) - s="#{Mx[:fa_italics_o]}DC tags included with this document are provided here.#{Mx[:fa_italics_c]}" #add ocnm - meta << meta_para(s) - if defined? @md.title.full \ - and @md.title.full=~/\S+/ - s="#{tr.full_title}: #{Mx[:fa_underscore_o]}#{@md.title.full}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ - s="\n#{tr.author}: #{Mx[:fa_underscore_o]}#{@md.creator.author}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.translator \ - and @md.creator.translator=~/\S+/ - s="#{tr.translator}: #{Mx[:fa_underscore_o]}#{@md.creator.translator}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.illustrator \ - and @md.creator.illustrator=~/\S+/ - s="#{tr.illustrator}: #{Mx[:fa_underscore_o]}#{@md.creator.illustrator}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.prepared_by \ - and @md.creator.prepared_by=~/\S+/ - s="\n#{tr.prepared_by}: #{Mx[:fa_underscore_o]}#{@md.creator.prepared_by}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.digitized_by \ - and @md.creator.digitized_by=~/\S+/ - s="#{tr.digitized_by}: #{Mx[:fa_underscore_o]}#{@md.creator.digitized_by}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.rights.all \ - and @md.rights.all=~/\S+/ - s="\n#{tr.rights}: #{Mx[:fa_underscore_o]}#{@md.rights.all}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.notes.description \ - and @md.notes.description=~/\S+/ - s="#{tr.description}: #{Mx[:fa_underscore_o]}#{@md.notes.description}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.subject \ - and @md.classify.subject=~/\S+/ - s="#{tr.subject}: #{Mx[:fa_underscore_o]}#{@md.classify.subject}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.publisher \ - and @md.publisher=~/\S+/ - s="\n#{tr.publisher}: #{Mx[:fa_underscore_o]}#{@md.publisher}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.creator.contributor \ - and @md.creator.contributor=~/\S+/ - s="\n#{tr.contributor}: #{Mx[:fa_underscore_o]}#{@md.creator.contributor}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.notes.abstract \ - and @md.notes.abstract=~/\S+/ - s="\n#{tr.abstract}: #{Mx[:fa_underscore_o]}#{@md.notes.abstract}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.created \ - and @md.date.created=~/\S+/ - s="\n#{tr.date_created}: #{Mx[:fa_underscore_o]}#{@md.date.created}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.issued \ - and @md.date.issued=~/\S+/ - s="\n#{tr.date_issued}: #{Mx[:fa_underscore_o]}#{@md.date.issued}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.available \ - and @md.date.available=~/\S+/ - s="\n#{tr.date_available}: #{Mx[:fa_underscore_o]}#{@md.date.available}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.modified \ - and @md.date.modified=~/\S+/ - s="\n#{tr.date_modified}: #{Mx[:fa_underscore_o]}#{@md.date.modified}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.valid \ - and @md.date.valid=~/\S+/ - s="\n#{tr.date_valid}: #{Mx[:fa_underscore_o]}#{@md.date.valid}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.date.published \ - and @md.date.published=~/\S+/ - s="\n#{tr.date}: #{Mx[:fa_underscore_o]}#{@md.date.published}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.loc \ - and @md.classify.loc=~/\S+/ - s="\n#{tr.cls_loc}: #{Mx[:fa_underscore_o]}#{@md.classify.loc}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.dewey \ - and @md.classify.dewey=~/\S+/ - s="\n#{@cls_dewey}: #{Mx[:fa_underscore_o]}#{@md.classify.dewey}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.pg \ - and @md.classify.pg=~/\S+/ - s="\n#{tr.cls_gutenberg}: #{Mx[:fa_underscore_o]}#{@md.classify.pg}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.isbn \ - and @md.classify.isbn=~/\S+/ - s="\n#{tr.cls_isbn}: #{Mx[:fa_underscore_o]}#{@md.classify.isbn}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.notes.comment \ - and @md.notes.comment=~/\S+/ - s="\n#{tr.comments}: #{Mx[:fa_underscore_o]}#{@md.notes.comment}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.notes.prefix_a \ - and @md.notes.prefix_a=~/\S+/ - s="\n#{tr.prefix_a}: #{Mx[:fa_underscore_o]}#{@md.notes.prefix_a}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.notes.prefix_b \ - and @md.notes.prefix_b=~/\S+/ - s="\n#{tr.prefix_b}: #{Mx[:fa_underscore_o]}#{@md.notes.prefix_b}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.identifier \ - and @md.classify.identifier=~/\S+/ - s="\n#{tr.identifier}: #{Mx[:fa_underscore_o]}#{@md.classify.identifier}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.original.source \ - and @md.original.source=~/\S+/ - s="\n#{tr.source}: #{Mx[:fa_underscore_o]}#{@md.original.source}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.title.language \ - and @md.title.language=~/\S+/ - s="\n#{tr.language}: #{Mx[:fa_underscore_o]}#{@md.title.language}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.original.language \ - and @md.original.language=~/\S+/ - s="\n#{tr.language_original}: #{Mx[:fa_underscore_o]}#{@md.original.language}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.format \ - and @md.classify.format=~/\S+/ - s="\n#{tr.format}: #{Mx[:fa_underscore_o]}#{@md.classify.format}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.relation \ - and @md.classify.relation=~/\S+/ - s="\n#{tr.relation}: #{Mx[:fa_underscore_o]}#{@md.classify.relation}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.coverage \ - and @md.classify.coverage=~/\S+/ - s="\n#{tr.coverage}: #{Mx[:fa_underscore_o]}#{@md.classify.coverage}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.classify.keywords \ - and @md.classify.keywords=~/\S+/ - s="\n#{tr.keywords}: #{Mx[:fa_underscore_o]}#{@md.classify.keywords}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - s="#{Mx[:fa_bold_o]}Version Information#{Mx[:fa_bold_c]}" - meta << meta_para(s) - if defined? @md.fns \ - and @md.fns=~/\S+/ - s="#{tr.sourcefile}: #{Mx[:fa_underscore_o]}#{@md.fns}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.file_encoding \ - and @md.file_encoding=~/\S+/ - s="Filetype: #{Mx[:fa_underscore_o]}#{@md.file_encoding}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.dgst \ - and @md.dgst.class==Array - s="Source Digest: #{@md.dgst[0]} #{Mx[:fa_underscore_o]}#{@md.dgst[1]}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - if defined? @md.dgst_skin \ - and @md.dgst_skin.class==Array - s="Skin Digest: #{@md.dgst_skin[0]} #{Mx[:fa_underscore_o]}#{@md.dgst_skin[1]}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - end - s="#{Mx[:fa_bold_o]}Generated#{Mx[:fa_bold_c]}" - meta << meta_para(s) - s="#{tr.last_generated}: #{Mx[:fa_underscore_o]}#{Time.now}#{Mx[:fa_underscore_c]}" - meta << meta_para(s) - s="#{tr.sisu_version}: #{Mx[:fa_underscore_o]}#{@md.sisu_version[:project]}#{Mx[:fa_underscore_c]} #{Mx[:fa_underscore_o]}#{@md.sisu_version[:version]}#{Mx[:fa_underscore_c]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" - meta << meta_para(s) - meta - end - def build_lines(type='') - data=@data - data.each do |line| - if line =~/\S/ \ - and line !~/^code\{|^\}code/ \ - and line.class != Hash - line.gsub!(/\s\s/,"#{Mx[:nbsp]*2}") - line.gsub!(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") - line.gsub!(/^/,"#{Mx[:gr_o]}codeline#{Mx[:gr_c]}") if type=='code' # REMOVE try sort for texpdf special case - if line =~/(?:https?|file|ftp):\/\/\S+$/ - line.gsub!(/\s*$/," #{Mx[:br_nl]}") - else line.gsub!(/\s*$/,"#{Mx[:br_nl]}") #unless type=='code' - end - if @@flag['code']; @@counter+=1 - else - end - elsif line =~/^\s*$/ - line.gsub!(/\s*$/,"#{Mx[:br_nl]}") - end - end - data - end - end - class Structure # this must happen early - def initialize(md,dob) - @md,@dob=md,dob - end - def structure - structure_markup_normalize - structure_markup - @dob - end - def structure_markup #build structure where structure provided only in meta header - @dob=if @dob.is =~/para/ \ - and @dob.indent !~/[1-9]/ \ - and not @dob.bullet_ - @dob=case @dob.obj - when /^#{@md.lv1}/ - h={:lv=>'A',:ln=>1} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - when /^#{@md.lv2}/ - h={:lv=>'B',:ln=>2} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - when /^#{@md.lv3}/ - h={:lv=>'C',:ln=>3} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - when /^#{@md.lv4}/ - h={:lv=>'1',:ln=>4} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - when /^#{@md.lv5}/ - h={:lv=>'2',:ln=>5} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - when /^#{@md.lv6}/ - h={:lv=>'3',:ln=>6} - SiSU_document_structure::Object_heading.new.heading(h,@dob) - else @dob - end - else @dob - end - @dob - end - def structure_markup_normalize #needs a bit of thinking - dob=if @md.markup_version.determined < 0.38 #%convert internal representation, consider making 0.38 structure default ([A-C1-6] instead of [1-9]), requires downstream changes - @dob.gsub!(/^[456]~/,'!_') - @dob.gsub!(/^3~(\S+)/,"#{Mx[:lv_o]}6:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^3~\s+/,"#{Mx[:lv_o]}6:#{Mx[:lv_c]}") - @dob.gsub!(/^2~(\S+)/,"#{Mx[:lv_o]}5:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^2~\s+/,"#{Mx[:lv_o]}5:#{Mx[:lv_c]}") - @dob.gsub!(/^1~(\S+)/,"#{Mx[:lv_o]}4:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^1~\s+/,"#{Mx[:lv_o]}4:#{Mx[:lv_c]}") - @dob.gsub!(/^:?C~(\S+)/,"#{Mx[:lv_o]}3:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^:?C~\s+/,"#{Mx[:lv_o]}3:#{Mx[:lv_c]}") - @dob.gsub!(/^:?B~(\S+)/,"#{Mx[:lv_o]}2:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^:?B~\s+/,"#{Mx[:lv_o]}2:#{Mx[:lv_c]}") - @dob.gsub!(/^:?A~(\S+)/,"#{Mx[:lv_o]}1:\\1#{Mx[:lv_c]}") - @dob.gsub!(/^:?A~\s+/,"#{Mx[:lv_o]}1:#{Mx[:lv_c]}") - @dob=if @dob =~/^@(?:level|markup):\s/ - @dob.gsub!(/3/,'6') - @dob.gsub!(/2/,'5') - @dob.gsub!(/1/,'4') - @dob.gsub!(/:?C/,'3') - @dob.gsub!(/:?B/,'2') - @dob.gsub!(/:?A/,'1') - @dob - else @dob - end - else @dob - end - end - def structure_marks - t_o=if @md.markup_version.determined < 0.38 - @t_o.gsub!(/^1~(\S+)/,"#{Mx[:lv_o]}1:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^1~\s+/,"#{Mx[:lv_o]}1:#{Mx[:lv_c]}") - @t_o.gsub!(/^2~(\S+)/,"#{Mx[:lv_o]}2:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^2~\s+/,"#{Mx[:lv_o]}2:#{Mx[:lv_c]}") - @t_o.gsub!(/^3~(\S+)/,"#{Mx[:lv_o]}3:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^3~\s+/,"#{Mx[:lv_o]}3:#{Mx[:lv_c]}") - @t_o.gsub!(/^4~(\S+)/,"#{Mx[:lv_o]}4:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^4~\s+/,"#{Mx[:lv_o]}4:#{Mx[:lv_c]}") - @t_o.gsub!(/^5~(\S+)/,"#{Mx[:lv_o]}5:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^5~\s+/,"#{Mx[:lv_o]}5:#{Mx[:lv_c]}") - @t_o.gsub!(/^6~(\S+)/,"#{Mx[:lv_o]}6:\\1#{Mx[:lv_c]}") - @t_o.gsub!(/^6~\s+/,"#{Mx[:lv_o]}6:#{Mx[:lv_c]}") - @t_o.gsub!(/^[789]~/,'!_') - @t_o - else @t_o - end - end - end - class OCN - def initialize(md,data) - @md,@data=md,data - end - def ocn #and auto segment numbering increment - data=@data - @o_array=[] - node=ocn=ocn_dv=ocn_sp=ocnh=ocnh1=ocnh2=ocnh3=ocnh4=ocnh5=ocnh6=ocno=ocnp=ocnt=ocnc=ocng=ocni=ocnm=ocnu=ocnk=nm=0 # h heading, o other, t table, g group, i image - node_count_flag=false - regex_exclude_ocn_and_node = /#{Rx[:meta]}|^@\S+?:\s|^4~endnotes|^#{Mx[:lv_o]}4:endnotes#{Mx[:lv_c]}|^\^~ |<:e[:_]\d+?>|^<:\#|<:- |<[:!]!4|<hr width|#{Mx[:br_endnotes]}|\A\s*\Z/mi #ocn here # added with Tune.code #¡ - parent=node1=node2=node3=node4=node5=node6=nil - data.each do |dob| - h={} - if dob.obj !~ regex_exclude_ocn_and_node \ - and dob.of !~/(?:comment|layout|meta)/ \ - and dob.obj !~/#{Mx[:pa_non_object_no_heading]}|#{Mx[:pa_non_object_dummy_heading]}/ \ - and dob.ocn_ - #dob.ln now is determined, and set earlier, check how best to remove this --> - if dob.is=='heading' - ln=case dob.lv - when 'A'; 1 - when 'B'; 2 - when 'C'; 3 - when '1'; 4 - when '2'; 5 - when '3'; 6 - when '4'; 7 - when '5'; 8 - when '6'; 9 - end - end - if not dob.obj =~/<:#>|~#|-#/ \ - or not dob.toc_ # fix this no longer in dob.obj - ocn+=1 - if dob.is=='heading' \ - and (ln.to_s =~/^[1-9]/ \ - or ln.to_s =~@md.lv1 \ - or ln.to_s =~@md.lv2 \ - or ln.to_s =~@md.lv3 \ - or ln.to_s =~@md.lv4 \ - or ln.to_s =~@md.lv5 \ - or ln.to_s =~@md.lv6) - ocnh+=1 - if ln==1 \ - or ln=~@md.lv1; ocnh1+=1 #heading - node1="1:#{ocnh1};#{ocn}" - node,ocn_sp,parent=node1,"h#{ocnh}",0 #FIX - elsif ln==2 \ - or ln=~@md.lv2; ocnh2+=1 - node2="2:#{ocnh2};#{ocn}" - node,ocn_sp,parent=node2,"h#{ocnh}",node1 - elsif ln==3 \ - or ln=~@md.lv3; ocnh3+=1 - node3="3:#{ocnh3};#{ocn}" - node,ocn_sp,parent=node3,"h#{ocnh}",node2 - elsif ln==4 \ - or ln=~@md.lv4; ocnh4+=1 - node4="4:#{ocnh4};#{ocn}" - node,ocn_sp,parent=node4,"h#{ocnh}",node3 - elsif ln==5 \ - or ln=~@md.lv5; ocnh5+=1 - node5="5:#{ocnh5};#{ocn}" - node,ocn_sp,parent=node5,"h#{ocnh}",node4 - elsif ln==6 \ - or ln=~@md.lv6; ocnh6+=1 - node6="6:#{ocnh6};#{ocn}" - node,ocn_sp,parent=node6,"h#{ocnh}",node5 - end - else - ocno+=1 - if dob.is=='table' - ocnt+=1 - ocn_sp,parent="t#{ocnt}",node - elsif dob.is=='code' - ocnc+=1 - ocn_sp,parent="c#{ocnc}",node - elsif dob.is=~/^(?:group|alt|verse)/ - ocng+=1 #group, poem - ocn_sp,parent="g#{ocng}",node - elsif dob.is=~/image|#{Mx[:lnk_o]}\S+?\.(?:png|jpg|gif)\s+/m - ocni+=1 - ocn_sp,parent="i#{ocni}",node - else ocnp+=1 #paragraph - ocn_sp,parent="p#{ocnp}",node - end - end - if dob.is=='heading' - dob.ln,dob.node,dob.ocn,dob.odv,dob.osp,dob.parent=ln,node,ocn,ocn_dv,ocn_sp,parent - else - unless dob.of=~/meta|comment|layout/ - dob.ocn,dob.odv,dob.osp,dob.parent=ocn,ocn_dv,ocn_sp,parent - end - end - else ocnu+=1 - dob.obj.gsub!(/#{Mx[:fa_o]}~##{Mx[:fa_c]}/,'') if dob.obj - ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}" - dob.ocn,dob.odv,dob.osp=ocn,ocn_dv,ocn_sp - end - h - elsif dob.obj=~/#{Mx[:pa_non_object_no_heading]}/ - dob.obj.gsub!(/#{Mx[:pa_non_object_no_heading]}/,'') - if dob.is=='para' - h={:obj=>dob.obj,:ocn_=>false,:ocn=>nil} - dob=SiSU_document_structure::Object_para.new.paragraph(h,dob) - elsif dob.is=='heading' - h={:obj=>dob.obj,:ocn_=>false,:ocn=>nil,:toc_=>true} - dob=SiSU_document_structure::Object_heading.new.heading(h,dob) - end - elsif dob.obj=~/#{Mx[:pa_non_object_dummy_heading]}/ - dob.obj.gsub!(/#{Mx[:pa_non_object_dummy_heading]}/,'') - if dob.is=='para' - h={:obj=>dob.obj,:ocn_=>false,:ocn=>nil} - dob=SiSU_document_structure::Object_para.new.paragraph(h,dob) - elsif dob.is=='heading' - h={:obj=>dob.obj,:ocn_=>false,:ocn=>nil,:toc_=>false} - dob=SiSU_document_structure::Object_heading.new.heading(h,dob) - end - else dob - end - dob.obj.gsub!(/\n\n/,"\n") if dob.is =~/(?:code|verse|alt|group)/ #newlines taken out - @o_array << dob - end - @o_array - end - end - class XML - def initialize(md,data) - @data,@md=data,md - end - def dom - @s=['0', - 'A', - 'B', - 'C', - '1', - '2', - '3' - ] - @sp=' ' - tuned_file=structure_build - tuned_file - end - def structure_build - data=@data - tuned_file=[] - hs=[0,false,false,false] - t={:lv =>@s[0],:status =>'open'} - tuned_file << tags(t) - if @md.cmd =~/V/ - puts "\nXML sisu structure outline --->\n" - puts "<#{@s[0]}>" - end - data.each_with_index do |o,i| - if o.is =~/^heading/ - case o.ln - when 1 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs=[1,true,false,false] - when 2 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs=[2,true,true,false] - when 3 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs=[3,true,true,true] - when 4 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs[0]=4 - when 5 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs[0]=5 - when 6 - tuned_file << tag_close(o.ln,hs) - tuned_file << tag_open(o,@s) - if @md.cmd =~/V/ - puts_tag_close(o.ln,hs) - puts_tag_open(o,@s) - end - hs[0]=6 - end - end - tuned_file << o - end - puts_tag_close(0,hs) if @md.cmd =~/V/ - tuned_file << tag_close(0,hs) - tuned_file.flatten! - tuned_file - end - def tags(o) - tag=if o[:status]=='open' - %{<#{o[:lv]} id="#{o[:node]}">} - else "</#{o[:lv]}>" - end - ln=case o[:lv] - when 'A'; 1 - when 'B'; 2 - when 'C'; 3 - when '1'; 4 - when '2'; 5 - when '3'; 6 - when '4'; 7 - when '5'; 8 - when '6'; 9 - end - h={:tag=>tag,:node=>o[:node],:lv =>o[:lv],:ln =>ln,:status =>o[:status]} - SiSU_document_structure::Object_structure.new.xml_dom(h) #downstream code utilise else ignore like comments - end - def tag_open(o,tag) - t={:lv =>tag[o.ln],:node =>o.node,:status =>'open'} - t_o=tags(t) - t_o - end - def tag_close(lev,hs) - ary=[] - case hs[0] - when 1 - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - when 2 - if (lev <= 2) and hs[2] - t={:lv =>@s[2],:status =>'close'} - ary << tags(t) - end - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - when 3 - if (lev <= 3) and hs[3] - t={:lv =>@s[3],:status =>'close'} - ary << tags(t) - end - if (lev <= 2) and hs[2] - t={:lv =>@s[2],:status =>'close'} - ary << tags(t) - end - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - when 4 - if (lev <= 4) - t={:lv =>@s[4],:status =>'close'} - ary << tags(t) - end - if (lev <= 3) and hs[3] - t={:lv =>@s[3],:status =>'close'} - ary << tags(t) - end - if (lev <= 2) and hs[2] - t={:lv =>@s[2],:status =>'close'} - ary << tags(t) - end - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - when 5 - if (lev <= 5) - t={:lv =>@s[5],:status =>'close'} - ary << tags(t) - end - if (lev <= 4) - t={:lv =>@s[4],:status =>'close'} - ary << tags(t) - end - if (lev <= 3) and hs[3] - t={:lv =>@s[3],:status =>'close'} - ary << tags(t) - end - if (lev <= 2) and hs[2] - t={:lv =>@s[2],:status =>'close'} - ary << tags(t) - end - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - when 6 - if (lev <= 6) - t={:lv =>@s[6],:status =>'close'} - ary << tags(t) - end - if (lev <= 5) - t={:lv =>@s[5],:status =>'close'} - ary << tags(t) - end - if (lev <= 4) - t={:lv =>@s[4],:status =>'close'} - ary << tags(t) - end - if (lev <= 3) and hs[3] - t={:lv =>@s[3],:status =>'close'} - ary << tags(t) - end - if (lev <= 2) and hs[2] - t={:lv =>@s[2],:status =>'close'} - ary << tags(t) - end - if (lev <= 1) and hs[1] - t={:lv =>@s[1],:status =>'close'} - ary << tags(t) - end - if (lev==0) - t={:lv =>@s[0],:status =>'close'} - ary << tags(t) - end - end - ary - end - def puts_tag_open(o,tag) - puts %{#{@sp*o.ln}<#{tag[o.ln]} id="#{o.node}">} - end - def puts_tag_close(lev,hs) - case hs[0] - when 1 - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - when 2 - puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - when 3 - puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] - puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - when 4 - puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) - puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] - puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - when 5 - puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5) - puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) - puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] - puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - when 6 - puts "#{@sp*6}</#{@s[6]}>" if (lev <= 6) - puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5) - puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) - puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] - puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] - puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] - puts "</#{@s[0]}>" if (lev==0) - end - end - end -end -__END__ diff --git a/lib/sisu/v2/dal_expand_insertions.rb b/lib/sisu/v2/dal_expand_insertions.rb deleted file mode 100644 index f7adb76e..00000000 --- a/lib/sisu/v2/dal_expand_insertions.rb +++ /dev/null @@ -1,198 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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/copyleft/gpl.html> - - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -module SiSU_insertions - class Insertions - def initialize(md,data) - @md,@data=md,data - end - def output_filetypes_in_cmd(cmd_shortcut,source=nil) #make list of file types in shortcut command (as configured), e.g. when sisu -3 is used - cf_defaults=SiSU_Env::Info_processing_flag.new - cmd_list=case cmd_shortcut.inspect - when /0/; cf_defaults.cf_0 - when /1/; cf_defaults.cf_1 - when /2/; cf_defaults.cf_2 - when /3/; cf_defaults.cf_3 - when /4/; cf_defaults.cf_4 - when /5/; cf_defaults.cf_5 - end - file_type_names={} - file_type_names[:gen],file_type_names[:src]=[],[] - file_type_names[:gen] <<= if cmd_list =~ /y/; 'sisu_manifest.html' - end - file_type_names[:gen] <<= if cmd_list =~ /h/; ['toc.html', 'doc.html'] - end - file_type_names[:gen] <<= if cmd_list =~ /e/; ['.epub'] - end - file_type_names[:gen] <<= if cmd_list =~ /p/; ['landscape.pdf', 'portrait.pdf'] - end - file_type_names[:gen] <<= if cmd_list =~ /o/; 'opendocument.odt' - end - file_type_names[:gen] <<= if cmd_list =~ /b/; 'scroll.xhtml' - end - file_type_names[:gen] <<= if cmd_list =~ /x/; 'sax.xml' - end - file_type_names[:gen] <<= if cmd_list =~ /X/; 'dom.xml' - end - file_type_names[:gen] <<= if cmd_list =~ /a/; 'plain.txt' - end - file_type_names[:gen] <<= if cmd_list =~ /g/; 'wiki.txt' - end - file_type_names[:gen] <<= if cmd_list =~ /w/; 'concordance.html' - end - file_type_names[:gen] <<= if cmd_list =~ /N/; 'digest.txt' - end - file_type_names[:src] <<= if source and cmd_shortcut =~ /s/; source - end - file_type_names[:src] <<= if cmd_shortcut =~ /S/; "#{source}.zip" - end - file_type_names[:gen]=file_type_names[:gen].flatten - file_type_names[:src]=file_type_names[:src].flatten - file_type_names - end - def expand_insertions? - data=@data - tuned_file,tuned_file_tmp=[],[] - data.each do |para| - if para !~/^%+\s/ \ - and para =~/\{(?:~\^\s+)?(.+?)\s\[(?:\d(?:[sS]*))\]\}(?:\.\.\/\S+?\/|\S+?\.ss[tm]\b)/ - txt,cmd,source,url_dir,note,manifest=nil,nil,nil,nil,nil,nil - @u=SiSU_Env::Info_env.new.url - if defined? @u.remote - if para =~/(.+?)\{(.+?)\s\[(\d[sS]*)\]\}((\S+?)\.ss[tm]\b)(.*)/m - pre,txt,cmd,source,url_dir,note="#{$1.strip} ",$2,$3,$4,$5,$6 - elsif para =~/\{(.+?)\s\[(\d[sS]*)\]\}((\S+?)\.ss[tm]\b)(.*)/ - pre,txt,cmd,source,url_dir,note='',$1,$2,$3,$4,$5 - end - manifest="#{pre}{#{txt} }#{@u.remote}/#{url_dir}/toc.html#{note}\n\n" - else - puts "error, does currently support relative paths (reltive paths were removed, as had problems for citation, and was not suited to all output types should possibly reconsider) #{__FILE__} #{__LINE__}" - if para =~/\{(?:~\^\s+)?(.+?)\s\[(\d[sS]*)\]\}\.\.\/(\S+?)\/(\s+#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]})?/ - txt,cmd,url_dir,note=$1,$2,$3,$4 - manifest="{ #{txt} }../#{url_dir}/toc.html#{note}\n\n" - end - end - tuned_file_tmp << manifest - output_filetypes=output_filetypes_in_cmd(cmd,source) - output_filetypes[:gen].each do |o_f| - describe = case o_f - when /sisu_manifest.html/; '~^ document manifest' - when /toc.html/; ' html, segmented text' - when /doc.html/; ' html, scroll, document in one' - when /\.epub/; ' epub' - when /landscape.pdf/; ' pdf, landscape' - when /portrait.pdf/; ' pdf, portrait' - when /opendocument.odt/; ' odf:odt, open document text' - when /scroll.xhtml/; ' xhtml scroll' - when /sax.xml/; ' xml, sax' - when /dom.xml/; ' xml, dom' - when /plain.txt/; ' plain text utf-8' - #when /manpage.1/; ' man, 1' - when /wiki.txt/; ' wiki text' - when /concordance.html/; ' concordance' - when /digest.txt/; ' dcc, document content certificate (digests)' - else nil - end - if describe - tuned_file_tmp << if @u.remote #to double space <:br> at beginning of entry - if describe =~/epub/ - "#{Mx[:nbsp]*4} { #{describe} }#{@u.remote}/epub/#{url_dir}#{o_f} " - elsif describe =~/^~\^ / - "#{Mx[:nbsp]*4} {#{describe} }#{@u.remote}/#{url_dir}/#{o_f} " - else "#{Mx[:nbsp]*4} { #{describe} }#{@u.remote}/#{url_dir}/#{o_f} " - end - else - if describe =~/epub/ - "#{Mx[:nbsp]*4} { #{describe} }../epub/#{url_dir}#{o_f} " - elsif describe =~/^~\^ / - "#{Mx[:nbsp]*4} {#{describe} }../#{url_dir}/#{o_f} " - else "#{Mx[:nbsp]*4} { #{describe} }../#{url_dir}/#{o_f} " - end - end - end - end - output_filetypes[:src].each do |o_f| - describe=case o_f - when /#{source}\.zip/; ' markup source (zipped) pod' - when /#{source}/; ' markup source text' - else nil - end - if describe - tuned_file_tmp << if @u.remote - x=if describe =~/zip/ - "#{Mx[:nbsp]*4} {#{describe} }#{@u.src_pod}/#{o_f} " - else "#{Mx[:nbsp]*4} {#{describe} }#{@u.src_txt}/#{o_f} " - end - else - x=if describe =~/zip/ - "#{Mx[:nbsp]*4} { #{describe} }../pod/#{o_f} " - else "#{Mx[:nbsp]*4} { #{describe} }../zip/#{o_f} " - end - end - end - end - tuned_file << 'group{' << tuned_file_tmp.join("\n") << '}group' - tuned_file_tmp=[] - else tuned_file << para - end - end - tuned_file - end - end -end -__END__ diff --git a/lib/sisu/v2/dal_syntax.rb b/lib/sisu/v2/dal_syntax.rb deleted file mode 100644 index 35505d12..00000000 --- a/lib/sisu/v2/dal_syntax.rb +++ /dev/null @@ -1,522 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: Syntax for markup, input markup syntaxes, determined here - -=end -module SiSU_Syntax - class Words - def initialize(line,md,mkp) - @line,@md,@mkp=line,md,mkp - end - end - class Markup - def initialize(md='',data='') - @data,@md=data,md - @vz=SiSU_Env::Get_init.instance.skin - @data_new=[] - url_and_stub=SiSU_Env::Info_env.new.url - @output_url="#{url_and_stub.remote}" - @env=SiSU_Env::Info_env.new - emph_set=if defined? @md.make.emphasis \ - and not @md.make.emphasis.nil? - @md.make.emphasis - else @env.markup_emphasis - end - @emph=case emph_set - when /bold/ - emph_italics=false - {:o =>Mx[:fa_bold_o], :c =>Mx[:fa_bold_c] } - when /italics/ - emph_italics=true - {:o =>Mx[:fa_italics_o], :c =>Mx[:fa_italics_c] } - when /underscore/ - emph_italics=false - {:o =>Mx[:fa_underscore_o], :c =>Mx[:fa_underscore_c] } - else p __LINE__.to_s + '::' + __FILE__ - end - @http_m=%r{\{.+?\}https?://\S+|https?:\S+|:\S+|\.\.\/\S+|#\S+|\S+?\.png\b|[*]~\S+|^#{Mx[:meta_o]}.+|#{Mx[:gr_o]}(?:code|group|alt|verse)(?:-end)?#{Mx[:gr_c]}|#{Mx[:fa_o]}:br#{Mx[:fa_c]}} - @manmkp_ital=emph_italics \ - ? '[i/*]\\{.+?\\}[i/*]' \ - : '[i/]\\{.+?\\}[i/]' - tail_m_ital=%q{(?:\s|[.,;:?!'")]|~\^|~\\\{\s|$)} - tail_m_bold=%{(?:(?:#{Mx[:fa_italics_c]})?(?:\s|[.,;:?!'")]|~\^|~\\\{\s|$))?} - bold_line=%{^!_\s.+?(?:#{Mx[:br_line]}|\n|$)} - ital_line=%{^/_\s.+?(?:#{Mx[:br_line]}|\n|$)} - @line_scan_ital=if defined? @md.make.italics[:str] \ - and defined? @vz.markup_make_italic[:str] - /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|(?:#{@md.make.italics[:str]}|#{@vz.markup_make_italic[:str]})#{tail_m_ital}|\S+|\n/ - elsif defined? @md.make.italics[:str] - /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@md.make.italics[:str]}#{tail_m_ital}|\S+|\n/ - elsif defined? @vz.markup_make_italic[:str] - /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@vz.markup_make_italic[:str]}#{tail_m_ital}|\S+|\n/ - end - @manmkp_bold=emph_italics \ - ? '^!_\s.+?(?:\n|$)|[!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[!]' \ - : '^!_\s.+?(?:\n|$)|[*!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[*!]' - @line_scan_bold=if (defined? @md.make.bold[:str] \ - and @md.make.bold[:str]) \ - and (defined? @vz.markup_make_bold[:str] \ - and @vz.markup_make_bold[:str]) - /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/ - elsif defined? @md.make.bold[:str] \ - and @md.make.bold[:str] - /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]})#{tail_m_bold}|\S+|\n/ - elsif defined? @vz.markup_make_bold[:str] \ - and @vz.markup_make_bold[:str] - /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/ - end - end - def songsheet - @data.compact! - @data.each do |dob| - dob=breaks(dob) - dob=if @md.sem_tag then sem(dob) else dob end #revisit - dob=wordlist_italics(dob) - dob=wordlist_bold(dob) - dob=bodymarkup(dob) - @data_new << dob unless dob.nil? - end - @data_new - end - def sem(dob) #revisit - dob=SiSU_sem::Tags.new(dob,@md).rm.all - end - def breaks(dob) - if dob.is !~/^(?:meta|comment|code|table)/ - dob.obj.gsub!(/ \\\\(?: |$)/,"#{Mx[:br_line]}") - dob.obj.gsub!(/(?:<:?br>|<br \/>)/,"#{Mx[:br_line]}") # depreciated - end - dob - end - def wordlist_italics(dob) - dob=dob.dup - if (defined? @md.make.italics[:str] \ - and @md.make.italics[:str]) \ - or (defined? @vz.markup_make_italic[:str] \ - and @vz.markup_make_italic[:str]) - dob.obj=if dob.is !~/^(?:meta|heading|code|comment)/ - word=dob.obj.scan(@line_scan_ital) - word.flatten! - word.compact! #reinstated - line_array=[] - word.each do |w| - unless /#{@manmkp_ital}|#{@http_m}/.match(w) - if defined? @md.make.italics[:regx] \ - and @md.make.italics[:regx] - w.gsub!(@md.make.italics[:regx], - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") - elsif defined? @vz.markup_make_italic \ - and @vz.markup_make_italic - w.gsub!(@vz.markup_make_italic, - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") - else w - end - end - line_array << w - end - line_array.join(' ') - else dob.obj - end - end - dob - end - def embolden(given) - given.gsub!(/^!_\s+((?:\{|#{Mx[:lnk_o]})(?:~^ )?.+?(?:\}|#{Mx[:lnk_o]})https?:\/\/\S+.*?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, - "#{Mx[:fa_bold_o]} \\1 #{Mx[:fa_bold_c]}\\2") - given.gsub!(/^!_\s+((?:\{|#{Mx[:lnk_o]})(?:~^ )?.+?(?:\}|#{Mx[:lnk_o]})https?:\/\/\S+.*)/, - "#{Mx[:fa_bold_o]} \\1 #{Mx[:fa_bold_c]}") - given.gsub!(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, - "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2") - given.gsub!(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)\s+((?:[*]~\S+\s*)+)/, - "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2") - given.gsub!(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)\s*([~-]#)$/, - "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2") - given.gsub!(/(?:^!_\s+|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]}\s*)(.*)?\s*$/, - "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") - end - def italicise(given) - given.gsub!(/^\/_\s*(.+?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2") - given.gsub!(/^\/_\s*(.+?)\s+((?:[*]~\S+\s*)+)/, - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2") - given.gsub!(/^\/_\s*(.+?)\s*([~-]#)$/, - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2") - given.gsub!(/^\/_\s+(.*)?\s*$/, - "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") - end - def wordlist_bold(dob) - dob=dob.dup - if (defined? @md.make.bold[:str] \ - and @md.make.bold[:str]) \ - or (defined? @vz.markup_make_bold[:str] \ - and @vz.markup_make_bold[:str]) - dob.obj=if dob.is !~/^(?:meta|heading|code|comment|table)/ - line_array=[] - word=dob.obj.scan(@line_scan_bold) - word.flatten! - word.compact! - word.each do |w| - unless /#{@manmkp_bold}|#{@http_m}/.match(w) - if defined? @md.make.bold[:regx] \ - and @md.make.bold[:regx] #document header: @bold: [bold word list] - w.gsub!(@md.make.bold[:regx],"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") - elsif defined? @vz.markup_make_bold \ - and @vz.markup_make_bold #defaults and skin adjusted bold word list - w.gsub!(@vz.markup_make_bold,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") - end - else - if w =~ /(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s+/; embolden(w) #bold paragraph/emphasize #may wish to remove think about 7{ 8{ conversion not satisfactory, as information is lost! - elsif w =~/^\/_\s+/; italicise(w) - else w - end - end - line_array << w - end - line_array.join(' ') - else dob.obj - end - else - if dob.is !~/^(?:heading|comment|meta)/ \ - and dob.obj =~ /^!_\s+/ - embolden(dob.obj) - elsif dob.is=='heading' \ - and dob.ln.to_s =~/[7-9]/ - embolden(dob.obj) - end - if dob.obj =~ /\/_\s+/ - italicise(dob.obj) - end - end - dob - end - def fontface(dob) - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)\*\{(.+?)\}\*/m, - "\\1#{@emph[:o]}\\2#{@emph[:c]}") #emphasis - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)!\{(.+?)\}!/m, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}") #bold - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\(|\>)\/\{(.+?)\}\//m, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}") #italics - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)_\{(.+?)\}_/m, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}") #underscore - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)#\{(.+?)\}#/m, - "\\1#{Mx[:fa_monospace_o]}\\2#{Mx[:fa_monospace_c]}") #monospace - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\"\{(.+?)\}\"/m, - "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}") #cite /blockquote? - dob.obj.gsub!(/(^|[^\\])\^\{(.+?)\}\^/m, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") #superscript - dob.obj.gsub!(/(^|[^\\]),\{(.+?)\},/m, - "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}") #subscript - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\+\{(.+?)\}\+/m, - "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}") #inserted text - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)-\{(.+?)\}-/m, - "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}") #strikethrough - deleted text - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>|\d+)\^(\S+?)\^/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") #superscript single word, watch digit added - dob - end - def bodymarkup(dob) - # << http://www.jus.uio.no/sisu/sisu_markup_table/markup >> - # See: data/sisu/sample/document_samples_sisu_markup/ - ## fontface - # *{emphasis}* e{emphasis}e <strong>emphasis</strong> - # !{bold text}! b{bold}b <b>bold text</b> - # _{underline}_ u{underline}u <u>underline</u> - # /{italics}/ i{italics}i <i>italics</i> - # "{citation}" c{citation}c <cite>citation</cite> #blockquote? - # ^{superscript}^ <sup>superscript</sup> - # ,{subscript}, <sub>subscript</sub> - # +{inserted text}+ <ins>inserted text</ins> - # -{deleted text}- <del>deleted text</del> - # #{monospace text}# - # - # {url address}:url - # {image.png}imageurl - # {image.png}png - # ~{endnote}~ <!e endnote !> - # !_ #bold/emphasise paragraph - # _" #blockquote paragraph - # _1 <:i1> #indent paragraph 1 step - # _2 <:i2> #indent paragraph 2 steps - # _3 <:i3> #indent paragraph 3 steps - # _4 <:i4> #indent paragraph 4 steps - # _* #bullet (list) ● - # _1* #bullet (list) indented - # _1* #bullet (list) indented - # # #numbered (list) level 1 - # _# #numbered (list) level 2 - dob=dob.dup - if dob.is !~/^(?:meta|comment|code|table)/ - line_array=[] - word=dob.obj.scan(/\S+|\n/) #unless line =~/^(?:#{Mx[:meta_o]}|%+\s)/ #visit - if word - word.each do |w| # _ - / # | : ! ^ ~ - unless w =~/~\{|\}~|~\[|\]~|^\^~|~\^|\*~\S+|~#|\{t?~|\{table|https?:\/\/\S+/ # do something earlier about table!! - w.gsub!(/\\?~/,"#{Mx[:gl_o]}#126#{Mx[:gl_c]}") #escaped special character - end - w.gsub!(/^\<$/,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}") #escaped special character - w.gsub!(/^\>$/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}") #escaped special character - line_array << w - end - dob.obj=line_array.join(' ') - dob.obj=dob.obj.strip - end - dob.obj.gsub!(/^([*#-.]{1,12})$/,'\1 ~#') #ocn off for these paragraph separators - dob.obj.gsub!(/~\{(.+?)\}~/m,Mx[:en_a_o] + '\1' + Mx[:en_a_c]) - dob.obj.gsub!(/~\[([^*+].+?)\]~/m,Mx[:en_b_o] + '* \1' + Mx[:en_b_c]) #default if markup does not specify - dob.obj.gsub!(/~\[(.+?)\]~/m,Mx[:en_b_o] + '\1' + Mx[:en_b_c]) - if dob.is =='heading' \ - and dob.ln ==1 - dob.obj.gsub!(/\s*@title\b/," #{@md.title.full}") - if defined? @md.creator.author \ - and @md.creator.author - dob.obj.gsub!(/\s+(?:@creator|@author)/,",#{Mx[:br_line]}#{@md.creator.author}") - else dob.obj.gsub!(/\s+(?:@creator|@author)/,'') - end - end - if dob.is =='heading' - dob.obj.gsub!(/^\s*@title\s*$/,@md.title.full) if dob.lv =~/1/ # - if dob.lv =~/[23]/ \ - and defined? @md.creator.author \ - and @md.creator.author - dob.obj.gsub!(/^\s*(?:(by\s+)?(?:@creator|@author))\s*$/,"\\1#{@md.creator.author}") - else dob.obj.gsub!(/^\s*(?:(by\s+)?(?:@creator|@author))\s*$/,'\1') - end - end - dob.obj.gsub!(/<(https?:\/\/\S+?)>/,'< \1 >') #catch problem markup - dob.obj.gsub!(/<:=(\S+?)>/,'{ c_\1.png 14x14 }http://www.jus.uio.no/sisu') #adjustment 2005w30 - dob.obj.gsub!(/<!(\S+)!>/,'<:\1>') #escaped special character - dob.obj.gsub!(/ /,"#{Mx[:nbsp]}") #escaped special character - dob.obj.gsub!(/\\~/,"#{Mx[:gl_o]}#126#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\{/,"#{Mx[:gl_o]}#123#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\}/,"#{Mx[:gl_o]}#125#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\<</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}#{Mx[:gl_o]}#lt#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\>>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}#{Mx[:gl_o]}#gt#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\_/,"#{Mx[:gl_o]}#095#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\-/,"#{Mx[:gl_o]}#045#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\+/,"#{Mx[:gl_o]}#043#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\//,"#{Mx[:gl_o]}#047#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\#/,"#{Mx[:gl_o]}#035#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\&/,"#{Mx[:gl_o]}#038#{Mx[:gl_c]}") #& #escaped special character - dob.obj.gsub!(/\\\|/,"#{Mx[:gl_o]}#124#{Mx[:gl_c]}") #not really a sisu special character but made available as possibility - dob.obj.gsub!(/\\\:/,"#{Mx[:gl_o]}#058#{Mx[:gl_c]}") #not really a sisu special character but made available as possibility - dob.obj.gsub!(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}") #not really a sisu special character but made available as possibility - dob.obj.gsub!(/\\\^/,"#{Mx[:gl_o]}#094#{Mx[:gl_c]}") #not really a sisu special character but made available as possibility - dob.obj.gsub!(/\\\,/,"#{Mx[:gl_o]}#044#{Mx[:gl_c]}") #not really a sisu special character but made available as possibility - dob.obj.gsub!(/\\\\/,"#{Mx[:gl_o]}#092#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\*/,"#{Mx[:gl_o]}#042#{Mx[:gl_c]}") #escaped special character - dob.obj.gsub!(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}") #escaped special character - if dob.obj=~/(?:https?:|ftp:|\{([^{}]+?)\}(?:#|:|[.]{1,2}\/))\S+/m - if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m - dob.obj.gsub!(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ ([^}]+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3 #{Mx[:en_a_o]}\\3 \\4#{Mx[:en_a_c]}") # watch - end - if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m - dob.obj.gsub!(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (.+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4 #{Mx[:en_a_o]}\\3#{Mx[:en_a_c]} ") - end - dob.obj.gsub!(/(^|[^#])\{\s*([^{}]+?)\s*\}((?:https?:|:|[.]{2}\/|#)\S+?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3") #linked (text or image, however text cannot include modified face, e.g. bold, ital, underline) - dob.obj.gsub!(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])((?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}) - dob.obj.gsub!(/#{Mx[:lnk_c]}#(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}\\1#{Mx[:rel_c]}\\2}) - dob.obj.gsub!(/#{Mx[:lnk_c]}:(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}) - dob.obj.gsub!(/#{Mx[:lnk_c]}[.]{2}\/(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}) - end - if dob.obj=~/_(?:https?|ftp):\S+/m # _http://url #CHECK - dob.obj.gsub!(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])(_(?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}) - end - dob=fontface(dob) - dob.obj.gsub!(/<[:e]\s+(.+?)!?>/, - "#{Mx[:en_a_o]}\\1#{Mx[:en_a_c]}") #not tested - dob.obj.gsub!(/^\s*_\*\s*/, - "#{Mx[:gl_bullet]}") #bullets, shortcut - dob.obj.gsub!(/=\{(.+?)\}/, - "#{Mx[:idx_o]}\\1#{Mx[:idx_c]}") - dob.obj.gsub!(/^\s*_([1-9])\*\s*/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:gl_bullet]}") #bullets, shortcut - dob.obj.gsub!(/^\s*_([1-9])\s+/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}") #indent - dob.obj.gsub!(/<:hi>/,"#{Mx[:fa_hilite_o]}") #'<span style="background-color: rgb(255,240,196)">') # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200) - dob.obj.gsub!(/<:\/hi>/,"#{Mx[:fa_hilite_c]}") #'</span>') - dob.obj.gsub!(/(#{Mx[:gr_o]}verse#{Mx[:gr_c]}.+)/m,"\\1\n") - dob.obj.gsub!(/[ ]+($)/,'\1') - dob.obj.gsub!(/\{\s*(.+?)\s*\}(https?:\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3") #any remaining linked text or image - dob.obj.gsub!(/\{\s*(.+?)\s*\}(#{Mx[:url_o]}\S+?#{Mx[:url_c]})/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2") #any remaining linked text or image - dob.obj.gsub!(/(^|\s)([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)/,"\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}") - dob.obj.gsub!(/(^|[ ])\{\s*(.+?)\s*\}(\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4") #any remaining linked text or image - dob.obj.gsub!(/\{\s*(.+?)\s*\}#([a-zA-Z0-9][a-zA-Z0-9_-]*)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:rel_o]}\\2#{Mx[:rel_c]}\\3") #any remaining linked text or image, check need - dob.obj.gsub!(/\{\s*(.+?)\s*\}(#{Mx[:rel_o]}\S+?#{Mx[:rel_c]})/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2") #any remaining linked text or image, check need - dob.obj.gsub!(/\{\s*(.+?)\s*\}(image)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2") #linked image - elsif dob.is=='table' - dob=fontface(dob) - elsif dob.is =='code' - dob.obj.gsub!(/#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*/,'@\1: ') - dob.obj.gsub!(/([<>])/,'_\1') - dob.obj.gsub!(/_<:(\S+?)_>/,'<:\1>') #convert <:\S+> back, clumsy - dob.obj.gsub!(/_<(br(?: \/)?)_>/,'<\1>') #convert <br> <br /> back, clumsy - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)<(br(?: \/)?)>([\s,.]|$)/,'\1<\2>\3') #convert <br> <br /> back, clumsy - if dob.number_ - codeline=[] - ln=1 - dob.obj.split(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}|<br(?: \/)?>|\n/).each_with_index do |cl,i| - unless i == 0 - cl.gsub!(Mx[:br_nl],'') - w=3-ln.to_s.length - cl = "#{ln}#{Mx[:nbsp]*w}#{Mx[:vline]}#{Mx[:nbsp]}#{Mx[:nbsp]}#{cl}#{Mx[:br_nl]}" - ln +=1 - end - codeline << cl - end - codeline= codeline.join("") - dob.obj=codeline - else - dob.obj.gsub!(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}/, - "\n#{Mx[:nbsp]}#{Mx[:nbsp]}") #temporary fix, prefer: #line.gsub!(/<:codeline>/,"\n") - end - dob - else # @\S+?: - end - dob - end - def tech #script markup planned to be more strict for technical documents - # *{emphasis}* e{emphasis}e <strong>emphasis</strong> - # !{bold text}! b{bold}b <b>bold text</b> - # _{underline}_ u{underline}u <u>underline</u> - # /{italics}/ i{italics}i <i>italics</i> - # "{citation}" c{citation}c <cite>citation</cite> - # ^{superscript}^ <sup>superscript</sup> - # ,{subscript}, <sub>subscript</sub> - # +{inserted text}+ <ins>inserted text</ins> - # -{deleted text}- <del>deleted text</del> - # #{monospace text}# - # {url address}:url - # {image.png}imageurl - # {image.png}png - # ~{endnote}~ <!e endnote !> - # +1 <!i1!> - # +2 <!i2!> - puts 'tech' - @data.each do |line| - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)e\{(.+?)\}e/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}") #emphasis - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)b\{(.+?)\}b/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}") #bold - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)u\{(.+?)\}u/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}") #underscore - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)c\{(.+?)\}c/, - "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}") #cite - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)i\{(.+?)\}i/, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}") #italics - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)!\{(.+?)\}!/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}") #bold - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)\*\{(.+?)\}\*/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}") #emphasis - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)_\{(.+?)\}_/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}") #underscore - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\(|\>)\/\{(.+?)\}\//, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}") #italics - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\"\{(.+?)\}\"/, - "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^\{(.+?)\}\^/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)9\{(.+?)\}9/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>),\{(.+?)\},/, - "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)6\{(.+?)\}6/, - "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\+\{(.+?)\}\+/, - "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)v\{(.+?)\}v/, - "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)-\{(.+?)\}-/, - "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)x\{(.+?)\}x/, - "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}") - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\*(\S+?)\*/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}") #emphasise single word, watch - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\!(\S+?)\!/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}") #bold single word, watch - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\/([\(\)a-zA-Z0-9']+?)\/([ ,.;:'"~$]|[^a-zA-Z0-9])/, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}\\3") #italics single word, watch - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)_(\S+?)_/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}") #underscore single word, watch - line.gsub!(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^(\S+?)\^/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") #check #superscript single word, watch digit added - line.gsub!(/^\s*_\([1-9]\)\(\*\+\)\s*/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:fa_o]}\\2#{Mx[:fa_c_o]}") #bullets, shortcut - line.gsub!(/^\s*_\([1-9]\)\s+/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}") - line.gsub!(/#{Mx[:br_line]}\s*_[12]\s+/, - "#{Mx[:br_line]} ") #indent used in endnotes, not implemented, replace when ready with: line.gsub!(/(?:<br>|<br \/>)\s*_([12])\s+/,'<br><:i\1> ') - end - @data - end - end -end -__END__ diff --git a/lib/sisu/v2/db_dbi.rb b/lib/sisu/v2/db_dbi.rb deleted file mode 100644 index 1a3825b9..00000000 --- a/lib/sisu/v2/db_dbi.rb +++ /dev/null @@ -1,93 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: modules shared by the different db types, dbi, postgresql, - sqlite - -=end -module SiSU_DB_DBI - require "#{SiSU_lib}/db_columns" # db_columns.rb - require "#{SiSU_lib}/db_tests" # db_tests.rb - require "#{SiSU_lib}/db_create" # db_create.rb - require "#{SiSU_lib}/db_select" # db_select.rb - require "#{SiSU_lib}/db_indexes" # db_indexes.rb - require "#{SiSU_lib}/db_drop" # db_drop.rb - require "#{SiSU_lib}/db_remove" # db_remove.rb - require "#{SiSU_lib}/db_load_tuple" # db_load_tuple.rb - require "#{SiSU_lib}/db_import" # db_import.rb - class Column_size < SiSU_DB_columns::Column_size # db_columns.rb - end - class Test < SiSU_DB_tests::Test # db_tests.rb - end - class Create <SiSU_DB_create::Create # db_create.rb - end - class Case <SiSU_DB_select::Case # db_select.rb - end - class Index <SiSU_DB_index::Index # db_indexes.rb - end - class Drop <SiSU_DB_drop::Drop # db_drop.rb - end - class Remove <SiSU_DB_remove::Remove # db_remove.rb - end - class Load_documents <SiSU_DB_tuple::Load_documents # db_load_tuple.rb - end - class Load_metadata <SiSU_DB_tuple::Load_metadata # db_load_tuple.rb - end - class Load_urls <SiSU_DB_tuple::Load_urls # db_update urls - end - class Import <SiSU_DB_import::Import #<SiSU_DB::Column_size # db_import.rb - end -end -__END__ diff --git a/lib/sisu/v2/epub_tune.rb b/lib/sisu/v2/epub_tune.rb deleted file mode 100644 index 9c9223a0..00000000 --- a/lib/sisu/v2/epub_tune.rb +++ /dev/null @@ -1,416 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: epub generation, epub pre-processing - -=end -require "#{SiSU_lib}/param" -module SiSU_EPUB_Tune - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env; include SiSU_Screen - require "#{SiSU_lib}/epub_format" # epub_format.rb #watch - @@line_mode='' - @@endnote_array=[] - @@endnote_call_counter=1 - @@table_align='<table summary='' width="96%" border="0" bgcolor="white" cellpadding="0" col="3"> -<tr ...><td width="2%" align="right"> - \;</td> -<td width="94%" valign="top" align="justify">' - @@table_align_close='</td> -<td width="4%" align="right" valign="top"> -<font size="1" color="#777777"> - </font> </td></tr></table>' - @@counter,@@column,@columns=0,0,0 - class Output - def initialize(data,md) - @data,@md=data,md - @cX=SiSU_Screen::Ansi.new(@md.cmd).cX - end - def hard_output - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @filename_tune=my_make.file_tune - data=[] - @data.each{|x| x.obj.strip; data << x if not x.obj.empty?} #1.9 array? - data.each do |dob| - @filename_tune.puts dob, "\n" #check - end - end - def marshal - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @marshal_tune=my_make.marshal_tune - File.open(@marshal_tune,'w') {|f| Marshal.dump(@data.to_a,f)} - end - end - class Clean_xhtml - def initialize(html='') - @html=html - end - def clean - html=@html - str=if html.class==String - html - else html.obj - end - str.gsub!(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;') - str.gsub!(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - str.gsub!(/\*/u,'*') # * - str.gsub!(/\+/u,'+') # + - str.gsub!(/¢/u,'¢') # ¢ - str.gsub!(/£/u,'£') # £ - str.gsub!(/¥/u,'¥') # ¥ - str.gsub!(/§/u,'§') # § - str.gsub!(/©/u,'©') # © - str.gsub!(/ª/u,'ª') # ª - str.gsub!(/«/u,'«') # « - str.gsub!(/®/u,'®') # ® - str.gsub!(/°/u,'°') # ° - str.gsub!(/±/u,'±') # ± - str.gsub!(/²/u,'²') # ² - str.gsub!(/³/u,'³') # ³ - str.gsub!(/µ/u,'µ') # µ - str.gsub!(/¶/u,'¶') # ¶ - str.gsub!(/¹/u,'¹') # ¹ - str.gsub!(/º/u,'º') # º - str.gsub!(/»/u,'»') # » - str.gsub!(/¼/u,'¼') # ¼ - str.gsub!(/½/u,'½') # ½ - str.gsub!(/¾/u,'¾') # ¾ - str.gsub!(/×/u,'×') # × - str.gsub!(/÷/u,'÷') # ÷ - str.gsub!(/¿/u,'¿') # ¿ - str.gsub!(/À/u,'À') # À - str.gsub!(/Á/u,'Á') # Á - str.gsub!(/Â/u,'Â') #  - str.gsub!(/Ã/u,'Ã') # à - str.gsub!(/Ä/u,'Ä') # Ä - str.gsub!(/Å/u,'Å') # Å - str.gsub!(/Æ/u,'Æ') # Æ - str.gsub!(/Ç/u,'Ç') # Ç - str.gsub!(/È/u,'È') # È - str.gsub!(/É/u,'É') # É - str.gsub!(/Ê/u,'Ê') # Ê - str.gsub!(/Ë/u,'Ë') # Ë - str.gsub!(/Ì/u,'Ì') # Ì - str.gsub!(/Í/u,'Í') # Í - str.gsub!(/Î/u,'Î') # Î - str.gsub!(/Ï/u,'Ï') # Ï - str.gsub!(/Ð/u,'Ð') # Ð - str.gsub!(/Ñ/u,'Ñ') # Ñ - str.gsub!(/Ò/u,'Ò') # Ò - str.gsub!(/Ó/u,'Ó') # Ó - str.gsub!(/Ô/u,'Ô') # Ô - str.gsub!(/Õ/u,'Õ') # Õ - str.gsub!(/Ö/u,'Ö') # Ö - str.gsub!(/Ø/u,'Ø') # Ø - str.gsub!(/Ù/u,'Ù') # Ù - str.gsub!(/Ú/u,'Ú') # Ú - str.gsub!(/Û/u,'Û') # Û - str.gsub!(/Ü/u,'Ü') # Ü - str.gsub!(/Ý/u,'Ý') # Ý - str.gsub!(/Þ/u,'Þ') # Þ - str.gsub!(/ß/u,'ß') # ß - str.gsub!(/à/u,'à') # à - str.gsub!(/á/u,'á') # á - str.gsub!(/â/u,'â') # â - str.gsub!(/ã/u,'ã') # ã - str.gsub!(/ä/u,'ä') # ä - str.gsub!(/å/u,'å') # å - str.gsub!(/æ/u,'æ') # æ - str.gsub!(/ç/u,'ç') # ç - str.gsub!(/è/u,'è') # è - str.gsub!(/é/u,'é') # é - str.gsub!(/ê/u,'ê') # ê - str.gsub!(/ë/u,'ë') # ë - str.gsub!(/ì/u,'ì') # ì - str.gsub!(/í/u,'í') # í - str.gsub!(/î/u,'î') # î - str.gsub!(/ï/u,'ï') # ï - str.gsub!(/ð/u,'ð') # ð - str.gsub!(/ñ/u,'ñ') # ñ - str.gsub!(/ò/u,'ò') # ò - str.gsub!(/ó/u,'ó') # ó - str.gsub!(/ô/u,'ô') # ô - str.gsub!(/õ/u,'õ') # õ - str.gsub!(/ö/u,'ö') # ö - str.gsub!(/ø/u,'ø') # ø - str.gsub!(/ù/u,'ù') # ú - str.gsub!(/ú/u,'ú') # û - str.gsub!(/û/u,'û') # ü - str.gsub!(/ü/u,'ü') # ý - str.gsub!(/þ/u,'þ') # þ - str.gsub!(/ÿ/u,'ÿ') # ÿ - str.gsub!(/ý/u,'ý') - str.gsub!(/<br>/u,'<br />') - str.gsub(/#{Mx[:nbsp]}/u,' ') - str - end - end - class Tune - def initialize(data,md) - @data,@md=data,md - @vz=SiSU_Env::Get_init.instance.skin - @env=SiSU_Env::Info_env.new(@md.fns) - @sys=SiSU_Env::System_call.new - @env=SiSU_Env::Info_env.new(@md.fns) - @brace_url=SiSU_Viz::Skin.new.url_decoration - end - def songsheet - begin - @cX=SiSU_Screen::Ansi.new(@md.cmd).cX - SiSU_Screen::Ansi.new(@md.cmd,'Tune').txt_grey if @md.cmd =~/[MVv]/ - data=Tune.new(@data,@md).amp_html - data=Tune.new(data,@md).endnotes_html - data=Tune.new(data,@md).url_markup - data=Tune.new(data,@md).markup - if @md.cmd =~/M/ #Hard Output Tune Optional on/off here - data=Output.new(data,@md).hard_output - Output.new(data,@md).marshal - end - tuned=Tune.new(@data,@md).output - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - ensure - end - end - def para_numbers - data=@data - @tuned_file=[] - data.each do |dob| - dob.gsub!(/#{Mx[:lv_o]}\d:(\S?)#{Mx[:lv_c]}/,'\0#\1. ') #fix Mx[:lv_o] - @tuned_file << dob - end - end - def markup - @tuned_file=[] - @data.each do |dob| - dob.obj.gsub!(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is=='table' - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>') - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>') - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>') - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>') - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>') # tt, kbd - dob.obj.gsub!(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'') - dob.obj.gsub!(/^#{Mx[:gl_bullet]}/m,'● ') - dob.obj.gsub!(/#{Mx[:nbsp]}/,' ') - dob.obj.gsub!(/<(p|br)>/,'<\1 />') - dob=SiSU_EPUB_Tune::Clean_xhtml.new(dob).clean - @tuned_file << dob - end - end - def urls(data) - @words=[] - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map #p map_nametags - data.each do |word| - @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ - http_=true - if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/.match(word).captures - elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ - http_=false - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/.match(word).captures - elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image/ - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(image)/.match(word).captures - end - case m - when /\.png|\.jpg|\.gif|c=|\s\d+x\d+/ - w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ - w=%{width="#{w}"} if w - h=%{height="#{h}"} if h - c=m[/"(.+?)"/m,1] - caption=%{<br /><p class="caption">#{c}</p>} if c - png=m.scan(/\S+/)[0] - image_path='./image' - ins=if u \ - and u.strip !~/^image$/ - %{<a href="#{u}"><img src="#{@env.url.images_epub}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0" /></a>#{caption}} - else %{<img src="#{@env.url.images_epub}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0" />#{caption}} - end - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) - else - link=m[/(.+)/m] - png=m.scan(/\S+/)[0].strip - link=link.strip - u.sub!(/^#*/,'') #make neater - if map_nametags[u] \ - and map_nametags[u][:segname] - if u=~/^\d+$/ - u.gsub!(/^(\d+)$/,"#{map_nametags[u][:segname]}#{Sfx[:xhtml]}#o\\1") if u !~/\// unless http_ - else - u.gsub!(/(\S+)/,"#{map_nametags[u][:segname]}#{Sfx[:xhtml]}#\\1") if u !~/\// unless http_ - end - elsif u =~/^:/ - u.gsub!(/^:/,"#{@env.url.root}/") - elsif u =~/^\.\.\// - u.gsub!(/^\.\.\//,"#{@env.url.root}/") - elsif u =~/https?:\/\// - else p "NOT FOUND name_tags: #{u}" - end - ins=%{<a href="#{u}">#{link}</a>} - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins) - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) - end - word - else word - end - word - end - @words=@words.join(' ') - end - def url_markup - data=@data - @tuned_file=[] - data.each do |dob| - unless dob.is=='code' - if dob.obj =~/<::\s+/ #watch - dob.obj.gsub!(/<::\s+(\S+?)\s+!>/, - %{<img src="#{@env.url.images_epub}/c_\\1.png" alt="\\1" width="14" height="14" align="bottom" border="0" />}) - end - if dob.obj =~/<:image\s+/ - dob.obj.gsub!(/<:image\s+(http\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+>/, - %{<a href="\\1"><img src="#{@env.url.images_epub}/\\2" \\3 \\4 naturalsizeflag="0" align="bottom" border="0" /></a>}) - dob.obj.gsub!(/<:image\s+(http\S+)\s+(\S+)\s+>/, - %{<a href="\\1"><img src="#{@env.url.images_epub}/\\2" naturalsizeflag="0" align="bottom" border="0" /></a>}) - dob.obj.gsub!(/<:image\s+(\S+)\s+(\S+)\s+(\S+)\s+>/, - %{<img src="#{@env.url.images_epub}/\\1" \\2 \\3 naturalsizeflag="0" align="bottom" border="0" />}) - dob.obj.gsub!(/<:image\s+(\S+)\s+>/, - %{<img src="#{@env.url.images_epub}/\\1" naturalsizeflag="0" align="bottom" border="0" />}) - end - if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ - @word_mode=dob.obj.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)[()\[\]]*[,.;:!?'"]{0,2}|(?:#{Mx[:gl_o]}\S+?#{Mx[:gl_c]})+|[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+/mu) - words=urls(@word_mode) - dob.obj.gsub!(/.+/m,words) - end - dob.obj.gsub!(/\\copyright/i,%{<sup>©</sup>}) - if (dob.obj !~/\<:ad\s+\.\.\//) - dob.obj.gsub!(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*!\>/, - %{\n<center><a href="http:\/\/\\1" target="external"><img src="#{@env.url.images_epub}/\\2" alt="\\3" /></a></center>\n}) - else - dob.obj.gsub!(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*\>/, - %{\n<center><a href="\\1" target="_top"><img src="#{@env.url.images_epub}/\\2" alt="\\3" /></a></center>\n}) - end - dob.obj.gsub!(/!pick/,%{<img border="0" height="15" width="15" src="#{@env.url.images_epub}/#{@vz.icon_choice}" alt="stellar" />}) - dob.obj.gsub!(/!new/,%{ <img border="0" height="15" width="15" src="#{@env.url.images_epub}/#{@vz.icon_new}" alt="new" />}) - dob.obj.gsub!(/<:h(.{1,7}?)>/,'<a href="#h\1">\1</a>') - dob.obj.gsub!(/<:to(\d{1,7}?)>/,'<a href="#to\1">to { \1 }</a> ') - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>') #http ftp matches escaped, no decoration - dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="mailto:\\1">\\1</a>#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration - if dob.obj =~/..\/\S+/ \ - and dob.obj !~/(\"..\/\S+?\"|>\s*..\/\S+<)/ - dob.obj.gsub!(/(\.\.\/\S+)/,'<a href="\1">\1</a>') - end - dob.obj.gsub!(/<a href="\.\.\//,%{<a href="#{@vz.url_site}/}) - else - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') - end - @tuned_file << dob - end - end - def amp_html - data=@data - data.each do |dob| - dob.obj.gsub!(/&/u,'&') - end - data - end - def endnotes_html - data=@data - @tuned_file=[] - a,s='_a','_s' - ast,pls='*','+' - data.each do |dob| - unless dob.is =~/^code/ - dob.obj.gsub!(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note\\2">#{Mx[:nbsp]}<sup id="note_ref\\2">\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1\\2 <a href="#note_ref\\2">#{Mx[:nbsp]}<sup id="note\\2">\\2.</sup></a> \\3 \\4}) #endnote- note- (careful may have switched) - dob.obj.gsub!(/(#{Mx[:en_b_o]})[*](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note_astx\\2">#{Mx[:nbsp]}<sup id="note_ref_astx\\2">#{ast}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{ast}\\2 <a href="#note_ref_astx\\2">#{Mx[:nbsp]}<sup id="note_astx\\2">#{ast}\\2.</sup></a> \\3 \\4}) #endnote- note- (careful may have switched) - dob.obj.gsub!(/(#{Mx[:en_b_o]})[+](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note_plus\\2">#{Mx[:nbsp]}<sup id="note_ref_plus\\2">#{pls}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{pls}\\2 <a href="#note_ref_plus\\2">#{Mx[:nbsp]}<sup id="note_plus\\2">#{pls}\\2.</sup></a> \\3 \\4}) #endnote- note- (careful may have switched) # double-check there may here be a bug - if dob.obj =~/#{Mx[:en_a_o]}([*+]+)\s+.+?#{Mx[:en_a_c]}/ - m=$1.length.to_i - dob.obj.gsub!(/(#{Mx[:en_a_o]})[*]+\s+(.+?)(#{Mx[:en_a_c]})/, - %{#{Mx[:nbsp]}<a href="#note#{a*m}">#{Mx[:nbsp]}<sup id="note_ref#{a*m}">#{ast*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{ast*m} <a href="#note_ref#{a*m}">#{Mx[:nbsp]}<sup id="note#{a*m}">#{ast*m}</sup></a> \\2 \\3}) #endnote- note- (careful may have switched) - dob.obj.gsub!(/(#{Mx[:en_a_o]})([+]+)\s+(.+?)(#{Mx[:en_a_c]})/, - %{#{Mx[:nbsp]}<a href="#note#{s*m}">#{Mx[:nbsp]}<sup id="note_ref#{s*m}">#{pls*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{pls*m} <a href="#note_ref#{s*m}">#{Mx[:nbsp]}<sup id="note#{s*m}">#{pls*m}</sup></a> \\2 \\3}) #endnote- note- (careful may have switched) - end - end - @tuned_file << dob - end - end - def output - data=@data - @tuned_file=[] - data.each do |dob| - dob.obj.strip! - dob.obj.chomp! - @tuned_file << dob - end - @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove - @tuned_file - end - end -end -__END__ diff --git a/lib/sisu/v2/harvest.rb b/lib/sisu/v2/harvest.rb deleted file mode 100644 index 2a01910e..00000000 --- a/lib/sisu/v2/harvest.rb +++ /dev/null @@ -1,101 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - harvest metadata from document corpus (suitable for medium sized sites) - (concept example, [to remove size constraint: implement SQL equivalent]) - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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/copyleft/gpl.html> - - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -def help - puts <<WOK - harvest --harvest extracts document index metadata - -WOK -end -def css(opt) - require "#{SiSU_lib}/css" # css.rb - css=SiSU_Style::CSS.new - fn_css=SiSU_Env::CSS_default.new - style=File.new("#{@env.path.pwd}/#{fn_css.harvest}",'w') - style << css.harvest - style.close -end -def cases(opt) - case opt.mod.inspect - when/--harvest/i - css(opt) if opt.cmd.inspect =~/M/ - HARVEST_authors::Songsheet.new(opt).songsheet - HARVEST_topics::Songsheet.new(opt).songsheet - if opt.cmd.inspect =~/R/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(opt).rsync_harvest - end - else - help - end -end -require "#{SiSU_lib}/options" # options.rb -require "#{SiSU_lib}/harvest_topics" # harvest_topics.rb -require "#{SiSU_lib}/harvest_authors" # harvest_authors.rb -require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env -@env=SiSU_Env::Info_env.new -@@the_idx_topics,@@the_idx_authors={},{} -argv=$* -opt=SiSU_commandline::Options.new(argv) -argv.shift -mkdir_p(@env.path.output_md_harvest) unless FileTest.directory?(@env.path.output_md_harvest) -cases(opt) -__END__ diff --git a/lib/sisu/v2/harvest_authors.rb b/lib/sisu/v2/harvest_authors.rb deleted file mode 100644 index dfb2b654..00000000 --- a/lib/sisu/v2/harvest_authors.rb +++ /dev/null @@ -1,316 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - metadata harvest, extract authors and their writings from document set - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: simple xml representation (sax style) - -=end -module HARVEST_authors - require "#{SiSU_lib}/author_format" # author_format.rb - @@the_idx_authors=[] - class Songsheet - def initialize(opt) - @opt=opt - @file_list=opt.files - @env=SiSU_Env::Info_env.new - end - def songsheet - files,idx_array=[],[] - @file_list.each do |f| - (f =~/.+?\.ss[tm]$/) \ - ? (files << f[/(.+?\.ss[tm])$/,1]) \ - : (print "not .sst or .ssm ? << #{f} >> ") - end - files.each do |filename| - file_array=[] - File.open(filename,'r') do |file| - file.each_line("\n\n") do |line| - if line =~/^@(?:title|creator|date):(?:\s|$)/m - file_array << line - elsif line =~/^@\S+?:(?:\s|$)/m \ - or line =~/^(?:\s*\n|%+ )/ - else break - end - end - end - idx_array=HARVEST_authors::Harvest.new(file_array,filename,idx_array).extract_harvest - end - the_idx=HARVEST_authors::Index.new(idx_array,@@the_idx_authors).construct_book_author_index - HARVEST_authors::Output_index.new(@opt,the_idx).html_print.html_songsheet - puts "file://#{@env.path.output_md_harvest}/harvest_authors.html" - puts "file://#{@env.path.pwd}/harvest_authors.html" if @opt.cmd.inspect =~/M/ - end - end - class Harvest - def initialize(data,filename,idx_array) - @data,@filename,@idx_array=data,filename,idx_array - end - def extract_harvest - data,filename,idx_array=@data,@filename,@idx_array - @title,@subtitle,@fulltitle,@author,@author_format,@date=nil,nil,nil,nil,nil,nil - @authors=[] - rgx={} - rgx[:author]=/^@creator:(?:[ ]+|.+?:author:[ ]+)(.+?)(?:\||\n)/m - rgx[:title]=/^@title:[ ]+(.+)/ - rgx[:subtitle]=/^@title:.+?:subtitle:[ ]+(.+?)\n/m - rgx[:date]=/^@date:(?:[ ]+|.+?:published:[ ]+)(\d{4})/m - data.each do |para| - if para=~ rgx[:title] - @title=rgx[:title].match(para)[1] - end - if para=~ rgx[:subtitle] - @subtitle=rgx[:subtitle].match(para)[1] - end - if para=~ rgx[:author] - @author_format=rgx[:author].match(para)[1] - end - if para=~ rgx[:date] - @date=rgx[:date].match(para)[1] - end - break if @title and @subtitle and @author and @date - end - @fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title - if @title and @author_format - creator=FORMAT::Author.new(@author_format.strip).author_details - @authors,@authorship=creator[:authors],creator[:authorship] - file=if filename=~/~[a-z]{2,3}\.ss[mt]$/ - lang='.' + /~([a-z]{2,3})\.ss[mt]$/.match(filename)[1] - filename.sub(/~[a-z]{2,3}\.ss[mt]$/,'') - else - lang='' - filename.sub(/\.ss[mt]$/,'') - end - page="sisu_manifest#{lang}.html" - idx_array <<= { :filename => filename, :file => file, :date => @date, :title => @fulltitle, :author => creator, :page => page } - else - #p "missing author field: #{@filename} title: #{@title}; author: #{@author_format}" - end - idx_array.flatten! - idx_array - end - end - class Index - def initialize(idx_array,the_idx) - @idx_array,@the_idx=idx_array,the_idx - @@the_idx_authors=@the_idx - end - def capital(txt) - txt[0].chr.capitalize + txt[1,txt.length] - end - def construct_book_author_index - idx_array=@idx_array - idx_array.each do |idx| - idx[:author][:last_first_format_a].each do |author| - author.strip! - if @@the_idx_authors[author].class==NilClass - @@the_idx_authors[author]={:md => []} - end - @@the_idx_authors[author][:md] << { :filename => idx[:filename], :file => idx[:file], :author => idx[:author], :title => idx[:title], :date => idx[:date], :page => idx[:page] } - end - end - @the_idx=@@the_idx_authors - end - end - class Output_index - def initialize(opt,the_idx) - @opt,@the_idx=opt,the_idx - @env=SiSU_Env::Info_env.new - @rc=Get_init.instance.yamlrc - @alph=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - @letter=@alph.shift - @vz=SiSU_Env::Get_init.instance.skin - end - def html_file_open - @output={} - @output[:html]=File.new("#{@env.path.output_md_harvest}/harvest_authors.html",'w') - @output[:html_mnt]=(@opt.cmd.inspect =~/M/) \ - ? File.new("#{@env.path.pwd}/harvest_authors.html",'w') \ - : nil - end - def html_file_close - @output[:html].close - @output[:html_mnt].close if @output[:html_mnt].class==File - end - def html_print - def html_songsheet - html_file_open - html_head - html_alph - html_body - html_tail - html_file_close - end - def html_head_adjust(type='') - css_path=(type !~/maintenance/) \ - ? '../_sisu/css/harvest.css' \ - : 'harvest.css' - sv=SiSU_Env::Info_version.instance.get_version - <<WOK -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>SiSU Metadata Harvest - Authors</title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -<meta name="dc.title" content= "SiSU metadata harvest, Authors - SiSU information Structuring Universe, Structured information Serialised Units" /> -<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" /> -<meta name="generator" content="#{sv[:project]} #{sv[:version]} of #{sv[:date_stamp]} (n*x and Ruby!)" /> -<link rel="generator" href="http://www.jus.uio.no/sisu/SiSU" /> -<link rel="stylesheet" href="#{css_path}" type="text/css" /> -<link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> -</head> -<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> -<a name="top" id="top"></a> -<a name="up" id="up"></a> -<a name="start" id="start"></a> -<h1>SiSU Metadata Harvest - Authors</h1> -<p>[<a href="../index.html"> HOME </a>] also see <a href="harvest_topics.html">SiSU Metadata Harvest - Topics</a></p> -<p>#{@env.widget_static.search_form}</p> -<hr /> -WOK - end - def html_head - @output[:html_mnt] << html_head_adjust('maintenance') if @opt.cmd.inspect =~/M/ - @output[:html] << html_head_adjust - end - def html_alph - a=[] - a << '<p>' - @alph.each do |x| - a << ((x =~/[0-9]/) ? '' : %{<a href="##{x}">#{x}</a>, }) - end - @output[:html_mnt] << a.join if @output[:html_mnt].class==File - @output[:html] << a.join - end - def html_tail - a=[] - a <<<<WOK -<hr /> -<a name="bottom" id="bottom"></a> -<a name="down" id="down"></a> -<a name="end" id="end"></a> -<a name="finish" id="finish"></a> -<a name="stop" id="stop"></a> -<a name="credits"></a> -#{@vz.credits_sisu} -</body> -</html> -WOK - @output[:html_mnt] << a if @output[:html_mnt].class==File - @output[:html] << a - end - def do_html(html) - @output[:html_mnt] << html if @output[:html_mnt].class==File - @output[:html] << html - end - def do_string(attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(html) - end - def do_string_name(attrib,string) - f=/^(\S)/.match(string[0])[1] - if @letter < f - while @letter < f - if @alph.length > 0 - @letter=@alph.shift - if @output[:html_mnt].class==File - @output[:html_mnt] << %{\n<p class="letter"><a name="#{@letter}"></p>#{@letter}</a><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - end - @output[:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - else break - end - end - end - end - def html_body - the_idx=@the_idx - the_idx.sort.each do |a| - do_string_name('',a) - name=a[0].sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') - x = %{<p class="author"><a name="#{name}">#{a[0]}</a></p>} - if @output[:html_mnt].class==File - @output[:html_mnt] << x - end - @output[:html] << x - works=[] - a[1][:md].each do |x| - work=[ "#{x[:date]} #{x[:title]}", %{<p class="publication">#{x[:date]} <a href="../#{x[:file]}/#{x[:page]}">#{x[:title]}</a>, #{x[:author][:authors_s]}</p>} ] - works<<=(@output[:html_mnt].class==File) \ - ? (work.concat([%{<p class="publication">[<a href="#{x[:file]}.sst">src</a>] #{x[:date]} <a href="file://#{@env.path.output}/#{x[:file]}/#{x[:page]}">#{x[:title]}</a>, #{x[:author][:authors_s]} -- [<a href="#{x[:file]}.sst">#{x[:file]}.sst</a>]</p>}])) \ - : work - end - works.sort_by {|x| x[0]}.each do |x| - @output[:html] << x[1] - @output[:html_mnt] << x[2] if @output[:html_mnt].class==File - end - end - end - self - end - def screen_print - def cycle - the_idx=@the_idx - the_idx.sort.each do |a| - puts a[0] - a[1][:md].each do |x| - puts "\t" + x[:file] - end - end - end - self - end - end -end -__END__ diff --git a/lib/sisu/v2/harvest_topics.rb b/lib/sisu/v2/harvest_topics.rb deleted file mode 100644 index 45b14496..00000000 --- a/lib/sisu/v2/harvest_topics.rb +++ /dev/null @@ -1,559 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - metadata harvest, extract topics and associated writings from document set - (topics use topic_register header) - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: simple xml representation (sax style) - -=end -module HARVEST_topics - require "#{SiSU_lib}/author_format" # author_format.rb - class Songsheet - def initialize(opt) - @opt=opt - @file_list=opt.files - @env=SiSU_Env::Info_env.new - end - def songsheet - files,idx_array=[],[] - @file_list.each do |f| - (f =~/.+?\.ss[tm]$/) \ - ? (files << f[/(.+?\.ss[tm])$/,1]) \ - : (print "not .sst or .ssm ? << #{f} >> ") - end - files.each do |filename| - file_array=[] - File.open(filename,'r') do |file| - file.each_line("\n\n") do |line| - if line =~/^@(?:title|creator|classify):(?:\s|$)/m - file_array << line - elsif line =~/^@\S+?:(?:\s|$)/m \ - or line =~/^(?:\s*\n|%+ )/ - else break - end - end - end - idx_array=HARVEST_topics::Harvest.new(@opt,file_array,filename,idx_array).extract_harvest - end - the_idx=HARVEST_topics::Index.new(idx_array,@@the_idx_topics).construct_book_topic_index - #HARVEST_topics::Output_index.new('',the_idx).screen_print.cycle if @opt.cmd.inspect =~/[VM]/ - HARVEST_topics::Output_index.new(@opt,the_idx).html_print.html_songsheet - puts "file://#{@env.path.output_md_harvest}/harvest_topics.html" - puts "file://#{@env.path.pwd}/harvest_topics.html" if @opt.cmd.inspect =~/M/ - end - end - class Harvest - def initialize(opt,data,filename,idx_array) - @opt,@data,@filename,@idx_array=opt,data,filename,idx_array - end - def extract_harvest - data,filename,idx_array=@data,@filename,@idx_array - @idx_lst,@title,@subtitle,@fulltitle,@author,@author_format=nil,nil,nil,nil,nil,nil - rgx={} - rgx[:author]=/^@creator:(?:[ ]+|.+?:author:[ ]+)(.+?)(?:\||\n)/m - rgx[:title]=/^@title:[ ]+(.+)/ - rgx[:subtitle]=/^@title:.+?:subtitle:[ ]+(.+?)\n/m - rgx[:idx]=/^@classify:.+?:topic_register:[ ]+(.+?)\n/m - data.each do |para| - if para=~ rgx[:idx] - @idx_list=rgx[:idx].match(para)[1] - end - if para=~ rgx[:title] - @title=rgx[:title].match(para)[1] - end - if para=~ rgx[:subtitle] - @subtitle=rgx[:subtitle].match(para)[1] - end - if para=~ rgx[:author] - @author_format=rgx[:author].match(para)[1] - end - break if @title and @subtitle and @author and @idx_lst - end - @fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title - if @title \ - and @author_format \ - and @idx_list - creator=FORMAT::Author.new(@author_format.strip).author_details - @authors,@authorship=creator[:authors],creator[:authorship] - file=if filename=~/~[a-z]{2,3}\.ss[mt]$/ - lang='.' + /~([a-z]{2,3})\.ss[mt]$/.match(filename)[1] - filename.sub(/~[a-z]{2,3}\.ss[mt]$/,'') - else - lang='' - filename.sub(/\.ss[mt]$/,'') - end - page="sisu_manifest#{lang}.html" - idx_array <<=if @idx_list =~/;/ - g=@idx_list.scan(/[^;]+/) - idxl=[] - g.each do |i| - i.strip! - idxl << { :filename =>filename,:file =>file,:rough_idx =>i,:title =>@fulltitle,:author =>creator,:page =>page} - end - idxl - else { :filename =>filename,:file =>file,:rough_idx =>@idx_list,:title =>@fulltitle,:author =>creator,:page =>page} - end - else - p "missing required field in #{@filename} - [title]: <<#{@title}>>; [author]: <<#{@author_format}>>; [idx]: <<#{@idx_list}>>" if @opt.cmd.inspect =~/[VM]/ - end - idx_array.flatten! - idx_array - end - end - class Index - def initialize(idx_array,the_idx) - @idx_array,@the_idx=idx_array,the_idx - @@the_idx_topics=@the_idx - end - def capital(txt) - txt[0].chr.capitalize + txt[1,txt.length] - end - def contents(hash,idx) - names='' - idx[:author][:last_first_format_a].each do |n| - s=n.sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') - names += %{<a href="harvest_authors.html##{s}">#{n}</a>, } - end - hash << { :filename =>idx[:filename],:file =>idx[:file],:author =>names,:title =>idx[:title],:page =>idx[:page]} - end - def construct_book_topic_index - idx_array=@idx_array - idx_array.each do |idx| - @lv0,@lv1,@lv2,@lv3,@lv4={},{},{},{},{} - if idx[:rough_idx] - idx_lst=idx[:rough_idx].scan(/[^:]+/) - else - puts "no topic register in: << #{idx[:filename]} >>" - next - end - idx_lst_alt=[] - idx_lst.each {|lev| idx_lst_alt << lev.scan(/[^|]+/)} - depth = idx_lst_alt.length - 1 - range = 0..depth - range.each do |t| - if idx_lst_alt[t] - case t - when 0 - lev0=idx_lst_alt[t] - lev0.each do |lv0| - lv0=capital(lv0) - if @@the_idx_topics[lv0].class==NilClass - @@the_idx_topics[lv0]={:md => []} - end - @lv0=lv0 if lev0.length==1 - j=@@the_idx_topics[lv0][:md] - contents(j,idx) if idx_lst_alt.length - 1 == t - end - when 1 - lev1=idx_lst_alt[t] - lev1.each do |lv1| - lv1=capital(lv1) - if @@the_idx_topics[@lv0][lv1].class==NilClass - @@the_idx_topics[@lv0][lv1]={:md => []} - end - @lv1=lv1 if lev1.length==1 - j=@@the_idx_topics[@lv0][lv1][:md] - contents(j,idx) if idx_lst_alt.length - 1 == t - end - when 2 - lev2=idx_lst_alt[t] - lev2.each do |lv2| - lv2=capital(lv2) - if @@the_idx_topics[@lv0][@lv1][lv2].class==NilClass - @@the_idx_topics[@lv0][@lv1][lv2]={:md => []} - end - @lv2=lv2 if lev2.length==1 - j=@@the_idx_topics[@lv0][@lv1][lv2][:md] - contents(j,idx) if idx_lst_alt.length - 1 == t - end - when 3 - lev3=idx_lst_alt[t] - lev3.each do |lv3| - lv3=capital(lv3) - if @@the_idx_topics[@lv0][@lv1][@lv2][lv3].class==NilClass - @@the_idx_topics[@lv0][@lv1][@lv2][lv3]={:md => []} - end - @lv3=lv3 if lev3.length==1 - j=@@the_idx_topics[@lv0][@lv1][@lv2][lv3][:md] - contents(j,idx) if idx_lst_alt.length - 1 == t - end - when 4 - lev4=idx_lst_alt[t] - lev4.each do |lv4| - lv4=capital(lv4) - if @@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4].class==NilClass - @@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4]={:md => []} - end - @lv4=lv4 if lev4.length==1 - j=@@the_idx_topics[@lv0][@lv1][@lv2][@lv3][lv4][:md] - contents(j,idx) if idx_lst_alt.length - 1 == t - end - end - end - end - end - @the_idx - end - end - class Output_index - def initialize(opt,the_idx) - @opt,@the_idx=opt,the_idx - @env=SiSU_Env::Info_env.new - @rc=Get_init.instance.yamlrc - @alph=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] - @letter=@alph.shift - @vz=SiSU_Env::Get_init.instance.skin - end - def html_file_open - @output={} - @output[:html]=File.new("#{@env.path.output_md_harvest}/harvest_topics.html",'w') - if @opt.cmd.inspect =~/-M/ - @output[:html_mnt]=File.new("#{@env.path.pwd}/harvest_topics.html",'w') - end - end - def html_file_close - @output[:html].close - @output[:html_mnt].close if @output[:html_mnt].class==File - end - def html_print - def html_songsheet - html_file_open - html_head - html_alph - html_body - html_tail - html_file_close - end - def html_head_adjust(type='') - css_path=(type !~/maintenance/) \ - ? '../_sisu/css/harvest.css' \ - : 'harvest.css' - sv=SiSU_Env::Info_version.instance.get_version - <<WOK -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" -"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>SiSU Metadata Harvest - Topics</title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -<meta name="dc.title" content= "SiSU metadata harvest, Topics - SiSU information Structuring Universe, Structured information Serialised Units" /> -<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" /> -<meta name="generator" content="#{sv[:project]} #{sv[:version]} of #{sv[:date_stamp]} (n*x and Ruby!)" /> -<link rel="generator" href="http://www.jus.uio.no/sisu/SiSU" /> -<link rel="stylesheet" href="#{css_path}" type="text/css" /> -<link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> -</head> -<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> -<a name="top" id="top"></a> -<a name="up" id="up"></a> -<a name="start" id="start"></a> -<h1>SiSU Metadata Harvest - Topics</h1> -<p>[<a href="../index.html"> HOME </a>] also see <a href="harvest_authors.html">SiSU Metadata Harvest - Authors</a></p> -<p>#{@env.widget_static.search_form}</p> -<hr /> -WOK - end - def html_head - @output[:html_mnt] << html_head_adjust('maintenance') if @opt.cmd.inspect =~/M/ - @output[:html] << html_head_adjust - end - def html_alph - a=[] - a << '<p>' - @alph.each do |x| - a << (x =~/[0-9]/) \ - ? '' \ - : %{<a href="##{x}">#{x}</a>, } - end - @output[:html_mnt] << a if @opt.cmd.inspect =~/M/ - @output[:html] << a.join - end - def html_tail - a=[] - a <<<<WOK -<hr /> -<a name="bottom" id="bottom"></a> -<a name="down" id="down"></a> -<a name="end" id="end"></a> -<a name="finish" id="finish"></a> -<a name="stop" id="stop"></a> -<a name="credits"></a> -#{@vz.credits_sisu} -</body> -</html> -WOK - @output[:html_mnt] << a if @output[:html_mnt].class==File - @output[:html] << a - end - def do_html(html) - @output[:html] << html - end - def do_html_maintenance(html) - @output[:html_mnt] << html if @output[:html_mnt].class==File - end - def do_string(attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(html) - do_html_maintenance(html) if @output[:html_mnt].class==File - end - def do_string_default(attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(html) - end - def do_string_maintenance(attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html_maintenance(html) if @output[:html_mnt].class==File - end - def do_string_name(attrib,string) - f=/^(\S)/.match(string)[1] - if @letter < f - while @letter < f - if @alph.length > 0 - @letter=@alph.shift - if @output[:html_mnt].class==File - @output[:html_mnt] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - end - @output[:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - else break - end - end - end - name=string.strip.gsub(/\s+/,'_') - html=%{<p class="#{attrib}"><a name="#{name}">#{string}</a></p>} - do_html(html) - do_html_maintenance(html) if @output[:html_mnt].class==File - end - def do_array(lv,array) - lv+=1 - array.each do |b| - do_case(lv,b) - end - end - def do_hash_md(attrib,hash) - html=%{<a href="../#{hash[:file]}/#{hash[:page]}">#{hash[:title]}</a> - #{hash[:author]}} - do_string_default(attrib,html) - end - def do_hash_md_maintenance(attrib,hash) - if @output[:html_mnt].class==File #should not be run for presentation output - html=%{[<a href="#{hash[:file]}.sst">src</a>] <a href="file://#{@env.path.output}/#{hash[:file]}/#{hash[:page]}">#{hash[:title]}</a> - #{hash[:author]}} - do_string_maintenance(attrib,html) - end - end - def do_hash(lv,hash) - lv+=1 - key=[] - hash.each_key do |m| - if m == :md - do_case(lv,hash[m]) - elsif m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page - key << m - elsif m == :title - do_hash_md('work',hash) - do_hash_md_maintenance('work',hash) - end - end - if key.length > 0 - key.sort.each do |m| - attrib="lev#{lv}" - lv==0 ? do_string_name(attrib,m) : do_string(attrib,m) - do_case(lv,hash[m]) - end - end - end - def do_case(lv,a) - y = a.class - case - when y==String - attrib="lev#{lv}" - lv==0 ? do_string_name(attrib,a) : do_string(attrib,a) - when y==Array - do_array(lv,a) - when y==Hash - do_hash(lv,a) - end - end - def html_body - the_idx=@the_idx - the_idx.sort.each do |a| - do_case(-1,a) - end - end - self - end - def screen_print - def do_string(lv,string) - s=' '*4 - puts s*lv + string - end - def do_array(lv,array) - lv+=1 - array.each do |b| - do_case(lv,b) - end - end - def do_hash_md(lv,hash) - string=hash[:title] + ' - ' + hash[:author] - do_string(lv,string) - end - def do_hash(lv,hash) - lv+=1 - key=[] - hash.each_key do |m| - if m == :md - do_case(lv,hash[m]) - elsif m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page - key << m - elsif m == :title - do_hash_md(lv,hash) - end - end - if key.length > 0 - key.sort.each do |m| - do_string(lv,m) - do_case(lv,hash[m]) - end - end - end - def do_case(lv,a) - s=' '*4 - y = a.class - case - when y==String - do_string(lv,a) - when y==Array - do_array(lv,a) - when y==Hash - do_hash(lv,a) - end - end - def cycle - the_idx=@the_idx - the_idx.each do |a| - do_case(-1,a) - end - end - self - end - def screen_print_unsorted - def do_string(lv,string) - s=' '*4 - puts s*lv + string - end - def do_array(lv,array) - lv+=1 - array.each do |b| - do_case(lv,b) - end - end - def do_hash_md(lv,hash) - string=hash[:title] + ' - ' + hash[:author] - do_string(lv,string) - end - def do_hash(lv,hash) - lv+=1 - hash.each_key do |m| - if m == :md - do_case(lv,hash[m]) - else - if m != :title and m != :author and m != :filename and m != :file and m != :rough_idx and m != :page - do_string(lv,m) - do_case(lv,hash[m]) - elsif m == :title - do_hash_md(lv,hash) - else - end - end - end - end - def do_case(lv,a) - s=' '*4 - y = a.class - case - when y==String - do_string(lv,a) - when y==Array - do_array(lv,a) - when y==Hash - do_hash(lv,a) - end - end - def cycle - the_idx=@the_idx - the_idx.each do |a| - do_case(-1,a) - end - end - self - end - end -end -__END__ -terms -|_ t{tl1} -|_ {fa}[fa]{filenames and other details} - | |_ {tl2} -|_ {fa}[fa]{filenames and other details} - | | |_{tl3} -|_ {fa}[fa]{filenames and other details} - | | | |_{tl4} - {fa}[fa]{filenames and other details} - | | | | - | | | |_{tl4a} - {fa}[fa]{filenames and other details} - | | | | - | | | |_{tl4b} - {fa}[fa]{filenames and other details} - | | | | - | | | |_ ... - | | | - | | |_{tl3a} - {fa}[fa]{filenames and other details} - | | - | |_{tl2a} - {fa}[fa]{filenames and other details} - | - |_ t{tl1a} -|_ {fa}[fa]{filenames and other details} - |_ ... diff --git a/lib/sisu/v2/html_tune.rb b/lib/sisu/v2/html_tune.rb deleted file mode 100644 index 99ce1b0f..00000000 --- a/lib/sisu/v2/html_tune.rb +++ /dev/null @@ -1,371 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: html generation, html pre-processing - -=end -require "#{SiSU_lib}/param" -module SiSU_HTML_Tune - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env; include SiSU_Screen - require "#{SiSU_lib}/html_format" # html_format.rb #watch - @@line_mode='' - @@endnote_array=[] - @@endnote_call_counter=1 - @@table_align='<table summary='' width="96%" border="0" bgcolor="white" cellpadding="0" col="3"> -<tr ...><td width="2%" align="right"> - \;</td> -<td width="94%" valign="top" align="justify">' - @@table_align_close='</td> -<td width="4%" align="right" valign="top"> -<font size="1" color="#777777"> - </font> </td></tr></table>' - @@counter,@@column,@columns=0,0,0 - class Output - def initialize(data,md) - @data,@md=data,md - @cX=SiSU_Screen::Ansi.new(@md.cmd).cX - end - def hard_output - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @filename_tune=my_make.file_tune - data=[] - @data.each{|x| x.obj.strip; data << x if not x.obj.empty?} #1.9 array? - data.each do |dob| - @filename_tune.puts dob, "\n" - end - end - def marshal - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @marshal_tune=my_make.marshal_tune - File.open(@marshal_tune,'w') {|f| Marshal.dump(@data.to_a,f)} - end - end - class Clean_html - def initialize(html='') - @html=html - end - def clean - html=@html - str=if html.class==String - html - else html.obj - end - str.gsub!(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;') - str.gsub!(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - str.gsub!(/¢/u,'¢') # ¢ - str.gsub!(/£/u,'£') # £ - str.gsub!(/¥/u,'¥') # ¥ - str.gsub!(/§/u,'§') # § - str.gsub!(/©/u,'©') # © - str.gsub!(/ª/u,'ª') # ª - str.gsub!(/«/u,'«') # « - str.gsub!(/®/u,'®') # ® - str.gsub!(/°/u,'°') # ° - str.gsub!(/±/u,'±') # ± - str.gsub!(/²/u,'²') # ² - str.gsub!(/³/u,'³') # ³ - str.gsub!(/µ/u,'µ') # µ - str.gsub!(/¶/u,'¶') # ¶ - str.gsub!(/¹/u,'¹') # ¹ - str.gsub!(/º/u,'º') # º - str.gsub!(/»/u,'»') # » - str.gsub!(/¼/u,'¼') # ¼ - str.gsub!(/½/u,'½') # ½ - str.gsub!(/¾/u,'¾') # ¾ - str.gsub!(/×/u,'×') # × - str.gsub!(/÷/u,'÷') # ÷ - str.gsub!(/¿/u,'¿') # ¿ - str.gsub!(/À/u,'À') # À - str.gsub!(/Á/u,'Á') # Á - str.gsub!(/Â/u,'Â') #  - str.gsub!(/Ã/u,'Ã') # à - str.gsub!(/Ä/u,'Ä') # Ä - str.gsub!(/Å/u,'Å') # Å - str.gsub!(/Æ/u,'Æ') # Æ - str.gsub!(/Ç/u,'Ç') # Ç - str.gsub!(/È/u,'È') # È - str.gsub!(/É/u,'É') # É - str.gsub!(/Ê/u,'Ê') # Ê - str.gsub!(/Ë/u,'Ë') # Ë - str.gsub!(/Ì/u,'Ì') # Ì - str.gsub!(/Í/u,'Í') # Í - str.gsub!(/Î/u,'Î') # Î - str.gsub!(/Ï/u,'Ï') # Ï - str.gsub!(/Ð/u,'Ð') # Ð - str.gsub!(/Ñ/u,'Ñ') # Ñ - str.gsub!(/Ò/u,'Ò') # Ò - str.gsub!(/Ó/u,'Ó') # Ó - str.gsub!(/Ô/u,'Ô') # Ô - str.gsub!(/Õ/u,'Õ') # Õ - str.gsub!(/Ö/u,'Ö') # Ö - str.gsub!(/Ø/u,'Ø') # Ø - str.gsub!(/Ù/u,'Ù') # Ù - str.gsub!(/Ú/u,'Ú') # Ú - str.gsub!(/Û/u,'Û') # Û - str.gsub!(/Ü/u,'Ü') # Ü - str.gsub!(/Ý/u,'Ý') # Ý - str.gsub!(/Þ/u,'Þ') # Þ - str.gsub!(/ß/u,'ß') # ß - str.gsub!(/à/u,'à') # à - str.gsub!(/á/u,'á') # á - str.gsub!(/â/u,'â') # â - str.gsub!(/ã/u,'ã') # ã - str.gsub!(/ä/u,'ä') # ä - str.gsub!(/å/u,'å') # å - str.gsub!(/æ/u,'æ') # æ - str.gsub!(/ç/u,'ç') # ç - str.gsub!(/è/u,'è') # è - str.gsub!(/é/u,'é') # é - str.gsub!(/ê/u,'ê') # ê - str.gsub!(/ë/u,'ë') # ë - str.gsub!(/ì/u,'ì') # ì - str.gsub!(/í/u,'í') # í - str.gsub!(/î/u,'î') # î - str.gsub!(/ï/u,'ï') # ï - str.gsub!(/ð/u,'ð') # ð - str.gsub!(/ñ/u,'ñ') # ñ - str.gsub!(/ò/u,'ò') # ò - str.gsub!(/ó/u,'ó') # ó - str.gsub!(/ô/u,'ô') # ô - str.gsub!(/õ/u,'õ') # õ - str.gsub!(/ö/u,'ö') # ö - str.gsub!(/ø/u,'ø') # ø - str.gsub!(/ù/u,'ù') # ú - str.gsub!(/ú/u,'ú') # û - str.gsub!(/û/u,'û') # ü - str.gsub!(/ü/u,'ü') # ý - str.gsub!(/þ/u,'þ') # þ - str.gsub!(/ÿ/u,'ÿ') # ÿ - str.gsub!(/ý/u,'ý') - str - end - end - class Tune - def initialize(data,md) - @data,@md=data,md - @vz=SiSU_Env::Get_init.instance.skin - @env=SiSU_Env::Info_env.new(@md.fns) - @sys=SiSU_Env::System_call.new - @env=SiSU_Env::Info_env.new(@md.fns) - @brace_url=SiSU_Viz::Skin.new.url_decoration - end - def songsheet - begin - @cX=SiSU_Screen::Ansi.new(@md.cmd).cX - SiSU_Screen::Ansi.new(@md.cmd,'Tune').txt_grey if @md.cmd =~/[MVv]/ - data=Tune.new(@data,@md).endnotes_html - data=Tune.new(data,@md).url_markup - data=Tune.new(data,@md).markup - if @md.cmd =~/M/ #Hard Output Tune Optional on/off here - data=Output.new(data,@md).hard_output - Output.new(data,@md).marshal - end - tuned=Tune.new(@data,@md).output - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - ensure - end - end - def para_numbers - data=@data - @tuned_file=[] - data.each do |dob| - dob.gsub!(/#{Mx[:lv_o]}\d:(\S?)#{Mx[:lv_c]}/,'\0<a name="H#\1">#\1.</a> ') #fix Mx[:lv_o] - @tuned_file << dob - end - end - def markup - @tuned_file=[] - @data.each do |dob| - dob.obj.gsub!(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is=='table' - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>') - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>') - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>') - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>') - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>') # tt, kbd - dob.obj.gsub!(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'<a name="\1"></a>') - dob.obj.gsub!(/^#{Mx[:gl_bullet]}/m,'● ') - dob.obj.gsub!(/#{Mx[:nbsp]}/,' ') - dob.obj.gsub!(/<(p|br)>/,'<\1 />') - dob=SiSU_HTML_Tune::Clean_html.new(dob).clean - @tuned_file << dob - end - end - def urls(data) - @words=[] - data.each do |word| - @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ - http_=true - if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/.match(word).captures - elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}:\S+?#{Mx[:rel_c]}/ - #http_=false - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}:(\S+?)#{Mx[:rel_c]}/.match(word).captures - u='../' + u - elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ - http_=false - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/.match(word).captures - elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image/ - m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(image)/.match(word).captures - end - case m - when /\.png|\.jpg|\.gif|c=|\s\d+x\d+/ - w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ - w=%{width="#{w}"} if w - h=%{height="#{h}"} if h - c=m[/"(.+?)"/m,1] - caption=%{<br /><p class="caption">#{c}</p>} if c - png=m.scan(/\S+/)[0] - image_path=if @md.fns =~/\.-ss[tm]$/; @env.url.images_external - else @env.url.images_local - end - ins=if u \ - and u.strip !~/^image$/ - %{<a href="#{u}"><img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0"></a>#{caption}} - else %{<img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0">#{caption}} - end - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) - else - link=m[/(.+)/m] - png=m.scan(/\S+/)[0].strip - link=link.strip - u.gsub!(/(\S+)/,"#{Xx[:segment]}#\\1") if u !~/\// unless http_ #marker: in scroll remove; in seg replace - ins=%{<a href="#{u}">#{link}</a>} - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins) - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) - end - word - else word - end - word - end - @words=@words.join(' ') - end - def url_markup - data=@data - @tuned_file=[] - data.each do |dob| - unless dob.is=='code' - if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ - @word_mode=dob.obj.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)[()\[\]]*[,.;:!?'"]{0,2}|(?:#{Mx[:gl_o]}\S+?#{Mx[:gl_c]})+|[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+/mu) - words=urls(@word_mode) - dob.obj.gsub!(/.+/m,words) - end #consider change, do a while loop - dob.obj.gsub!(/\\copyright/i,%{<sup>©</sup>}) - if (dob.obj !~/\<:ad\s+\.\.\//) - dob.obj.gsub!(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*!\>/, - %{\n<center><a href="http:\/\/\\1" target="external"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) - else - dob.obj.gsub!(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*\>/, - %{\n<center><a href="\\1" target="_top"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) - end - dob.obj.gsub!(/!pick/,%{<img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_choice}" alt="stellar">}) - dob.obj.gsub!(/!new/,%{ <img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_new}" alt="new">}) - dob.obj.gsub!(/<:h(.{1,7}?)>/,'<a href="#h\1">\1</a>') - dob.obj.gsub!(/<:to(\d{1,7}?)>/,'<a href="#to\1">to { \1 }</a> ') - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>') #http ftp matches escaped, no decoration - dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="mailto:\\1">\\1</a>#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration - if dob.obj =~/..\/\S+/ \ - and dob.obj !~/(\"..\/\S+?\"|>\s*..\/\S+<)/ - dob.obj.gsub!(/(\.\.\/\S+)/,'<a href="\1">\1</a>') - end - dob.obj.gsub!(/<a href=":/,%{<a href="#{@vz.url_site}/}) - dob.obj.gsub!(/<a href="\.\.\//,%{<a href="#{@vz.url_site}/}) - else - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') - end - @tuned_file << dob - end - end - def endnotes_html - data=@data - @tuned_file=[] - data.each do |dob| - unless dob.is =~/^code/ - dob.obj.gsub!(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4') #endnote- note- (careful may have switched) - dob.obj.gsub!(/(#{Mx[:en_b_o]})([*+]\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4') #endnote- note- (careful may have switched) - dob.obj.gsub!(/(#{Mx[:en_a_o]})([*+]+)\s+(.+?)(#{Mx[:en_a_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2</sup></a> \3 \4') #endnote- note- (careful may have switched) - end - @tuned_file << dob - end - end - def output - data=@data - @tuned_file=[] - data.each do |dob| - dob.obj.strip! - dob.obj.chomp! - @tuned_file << dob - end - @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove - @tuned_file - end - end -end -__END__ diff --git a/lib/sisu/v2/hub.rb b/lib/sisu/v2/hub.rb deleted file mode 100644 index 9c4fb714..00000000 --- a/lib/sisu/v2/hub.rb +++ /dev/null @@ -1,580 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: SiSU information Structuring Universe, text structuring, - processing, publishing, search - -=end -module SiSU - require "#{SiSU_lib}/constants" # constants.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Screen - @@pwd=Dir.pwd - class Op - @@env=SiSU_Env::Info_env.new - def initialize(opt,req,message) - @opt,@req,@message=opt,req,message - @n_do=0 - end - def pod_output(fns_pod) - dir_pwd=@@env.path.pwd - dir_pod=@@env.sisupod_gen(fns_pod) - Dir.chdir(dir_pod) - content=Dir.glob("*.ss[mt]").join(' ') - if content =~/\.ss[mt]/ - Dir.chdir(dir_pwd) - @opt.fns=content #check - system("cd #{dir_pod} - sisu -CC #{@opt.cmd} #{@opt.mod.join(' ')} #{content} - cd - - ") - end - @pwd=`pwd`.strip - Dir.chdir(@pwd) - end - def select - require "#{SiSU_lib}/#{@req}" - if @req =~/^conf$/ # -C - SiSU_Initialize::Source.new(@opt).read - end - if not @opt.files.empty? - @opt.files.each do |fns| - env=SiSU_Env::Info_env.new(fns) - if fns =~ /sisupod(?:\.zip)?|\S+?(?:\.ss[mt]\.zip|\.ssp)$/ - require "#{SiSU_lib}/remote" # remote.rb #check - pod_name=SiSU_Remote::Remote_download.new(fns).pod.name - SiSU_Screen::Ansi.new(@opt.cmd,pod_name).puts_blue unless @opt.cmd =~/q/ - @opt.files.shift - pod_output(pod_name) - break - else - put=fns.gsub(/(.+)?\.ssm\.sst$/,'\1.ssm') - @opt.fns=fns - if @req !~/(?:urls|remote)$/ - if @req=~/^dal$/ \ - and FileTest.file?(@opt.fns) \ - and @opt.fns =~ /\.(?:(?:-|ssm\.)?sst|ssm)$/ - if fns =~ /\.ssm$/ - require "#{SiSU_lib}/composite" # composite.rb #pre-processing - SiSU_Assemble::Composite.new(@opt).read - @opt.fns=fns.gsub(/\.ssm$/,'.ssm.sst') - end - SiSU_DAL::Source.new(@opt).read # -m - elsif FileTest.file?(env.source_file_with_path) - case @opt.fns - when /\.(?:(?:-|ssm\.)?sst|ssm)$/ - case @req - when /^dal$/ - if fns =~ /\.ssm$/ - require "#{SiSU_lib}/composite" # composite.rb #pre-processing - SiSU_Assemble::Composite.new(@opt).read - @opt.fns=fns.gsub(/\.ssm$/,'.ssm.sst') - end - SiSU_DAL::Source.new(@opt).read # -m - when /^git$/; SiSU_Git::Source.new(@opt).read # -g - when /^concordance$/; SiSU_Concordance::Source.new(@opt).read # -w - when /^share_src$/; SiSU_Markup::Source.new(@opt).read # -s - when /^sisupod_make$/; SiSU_Doc::Source.new(@opt).read # -S - when /^source_kdissert$/; SiSU_Kdi_source::Source.new(@opt).read ## -S - when /^digests$/; SiSU_Digest_view::Source.new(@opt).read # -N - when /^xml_scaffold$/; SiSU_XML_scaffold::Source.new(@opt).read # -k - when /^plaintext$/; SiSU_Plaintext::Source.new(@opt).read # -t -a - #when /^wikispeak$/; SiSU_Wikispeak::Source.new(@opt).read # -g - when /^epub$/; SiSU_EPUB::Source.new(@opt).read # -e - when /^odf$/; SiSU_ODF::Source.new(@opt).read # -o - when /^xml_md_oai_pmh_dc$/; SiSU_XML_metadata::OAI_PMH.new(@opt).read # -O - when /^texpdf$/; SiSU_TeX::Source.new(@opt).read # -p - when /^manpage$/; SiSU_Manpage::Source.new(@opt).read # -i - when /^texinfo$/; SiSU_TexInfo::Source.new(@opt).read # -I - when /^html$/; SiSU_HTML::Source.new(@opt).read # -h -H - when /^xml$/; SiSU_XML_SAX::Source.new(@opt).read # -x - when /^xml_dom$/; SiSU_XML_DOM::Source.new(@opt).read # -X - when /^xml_fictionbook$/; SiSU_XML_Fictionbook::Source.new(@opt).read # -f - when /^xhtml$/; SiSU_XHTML::Source.new(@opt).read # -b - when /^embedded$/; SiSU_Embedded::Source.new(@opt).read # -m (image and other content) - when /^manifest$/; SiSU_Manifest::Source.new(@opt).read # -y - when /^sitemaps$/; SiSU_Sitemaps::Source.new(@opt).read # -Y - when /^zap$/; SiSU_Zap::Source.new(@opt).read # -Z - when /^dbi$/; SiSU_DBI::SiSU_SQL.new(@opt).connect # -D -d - end - @n_do=@n_do+1 - SiSU_Screen::Ansi.new(@opt.cmd,@n_do,"#{@req.upcase} processed").files_processed if @opt.cmd =~/[MVv]/ - ObjectSpace.garbage_collect - else #print "not processed --> ", fns, "\n" - end - else - if @req !~/^conf$/ \ - and @opt.fns !~/http:\/\// - Operations.new(@opt).not_found - end - end - elsif FileTest.file?(put) - if @opt.mod.inspect !~/harvest/ #decide whether should permit harvest in single operation - case @req - when /^urls$/; SiSU_urls::Source.new(@opt).read # -u -v -V -M - when /^remote$/ - case @message - when /scp/; SiSU_Remote::Put.new(@opt).scp # -r - when /rsync/; SiSU_Remote::Put.new(@opt).rsync # -R - else #SiSU_Remote::Put.new(put,@opt.cmd).scp - end - end - @n_do=@n_do+1 - SiSU_Screen::Ansi.new(@opt.cmd,@n_do,"#{@req.upcase} processed").files_processed if @opt.cmd =~/[MVv]/ - end - else Operations.new(@opt).not_found - end - end - end - elsif @req =~/^dbi$/; SiSU_DBI::SiSU_SQL.new(@opt).connect # -D -d - elsif @req=~/^sisupod_make$/; SiSU_Doc::Source.new(@opt).read # -S - end - Operations.new.counter - end - end - class Operations - @@n_do=0 - def initialize(opt='') - @opt=opt - @cX=SiSU_Screen::Ansi.new(@opt).cX - end - def counter - @@n_do=0 - end - def remote_put_base_site_rsync # -CR -p "here #{__FILE__} #{__LINE__}" if @opt =~/M/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(@opt).rsync_base - end - def remote_put_base_site_rsync_match # -CCRZ -p "here #{__FILE__} #{__LINE__}" if @opt =~/M/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(@opt).rsync_base_sync - end - def remote_put_base_site # -Cr -p "here #{__FILE__} #{__LINE__}" if @opt =~/M/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(@opt).scp_base - end - def remote_put_base_site_all # -CCr -p "here #{__FILE__} #{__LINE__}" if @opt =~/M/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(@opt).scp_base_all - end - def cgi # -F - require "#{SiSU_lib}/cgi" # cgi.rb - SiSU_CGI::SiSU_search.new(@opt).read - end - def encoding # -K build character encoding db (uses KirbyBase) - require "#{SiSU_lib}/character_encoding" # character_encoding.rb - SiSU_character_encode::Create.new.db - end - def termsheet # -t - system("sisu_termsheet #{@opt.cmd} #{@opt.fns}\n") - @@n_do=@@n_do+1 - SiSU_Screen::Ansi.new(@opt.cmd,@@n_do,'Termsheet(s) processed').term_sheet_title unless @opt.cmd =~/q/ - end - def webrick # -W - port=prt=@fns - prt=if prt !~/\d+/ - 'webrick default (sysenv)' - else "webrick port set to #{prt}" - end - puts %{#{@cX.blue}<<#{@cX.off}#{@cX.green}Start Webrick web server on port: #{prt}#{@cX.off}#{@cX.blue}>> #{@cX.off*2} } - system("sisu_webrick #{port}&\n") - end - def not_found - puts "\n#{@cX.fuschia}FILE NOT FOUND:#{@cX.off} << #{@opt.fns} >> - requested #{@opt.cmd} processing skipped\n" - end - def convert_name_message(fns,type,i,o,rune) - %{\nIn filename: "#{@cX.fuschia}#{fns}#{@cX.off}" << #{type} >> #{@cX.fuschia}is apre 0.36 markup filename.#{@cX.off} #{@cX.brown}Please rename your file.#{@cX.off}\n\tAs of sisu-0.37, SiSU markup files with #{@cX.brown}the extensions #{i} should be re-named #{o}#{@cX.off}\n\tif you have the program called 'rename' installed, the following rune should do the trick:\n\t\t#{rune}\n\talternatively try:\n\t\tsisu --convert --36to37 #{fns}\n\trequested #{@opt.cmd} processing skipped\n} - end - def not_recognised - case @opt.fns - when /(\.s[123])$/ - type=@opt.fns.gsub(/\S+?(#{$1})/,'\1') - rune=%q{rename 's/\.s[123]$/\.sst/' *.s{1,2,3}} - puts convert_name_message(@opt.fns,type,'.s1 .s2 and .s3','.sst',rune) - when /(\.r[123])$/ - type=@opt.fns.gsub(/\S+?(#{$1})/,'\1') - rune=%q{rename 's/\.r[123]$/\.ssm/' *.r{1,2,3}} - puts convert_name_message(@opt.fns,type,'.r1 .r2 and .r3','.sst',rune) - puts %{\n\tNote also that you will need to change the names of the files called/required\n\twithin the document text to build the composite document\n\t\t.s1 .s2 .s3 should be .sst \n\t\t.si should be .ssi\n\trequested #{@opt.cmd} processing skipped\n} - when /(\.ssi)$/ - puts "\n#{@cX.fuschia}component filetype:#{@cX.off} << #{@opt.fns} >> - is not a processed filetype, (it may be used as a component of a .ssm markup file)\n\trequested #{@opt.cmd} processing skipped\n" - else - puts "\n#{@cX.fuschia}FILETYPE NOT RECOGNISED:#{@cX.off} << #{@opt.fns} >> - is not a recognized filetype,\n\trequested #{@opt.cmd} processing skipped\n" - end - end - end - class Processing - require 'fileutils' - include FileUtils - @@env=SiSU_Env::Info_env.new - attr_accessor :op - def initialize(opt) - @opt=opt - @msg,@msgs='',nil - @tell=lambda { SiSU_Screen::Ansi.new(@opt.cmd,@msg,"#{@msgs.inspect if @msgs}") } - end - def op(req,msg) - Op.new(@opt,req,msg).select if req and msg - end - def actions - if @opt.cmd =~/P/ - require 'profile' - end - if @opt.mod.inspect =~/--harvest/ - require "#{SiSU_lib}/harvest" # harvest.rb - end - if @opt.mod.inspect =~/--convert|--to|--from/ - require "#{SiSU_lib}/sst_convert_markup" # sst_convert_markup.rb - end - if @opt.cmd =~/([AabCcDdeFfgGHhIiJjkLMmNnOopQqrRSsTtUuVvwWXxYyZ_0-9])/ \ - and @opt.cmd =~/^-/ \ - and @opt.mod.inspect !~/--(?:sitemaps|query|identify)/ \ - or @opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/ #and - @@tell=SiSU_Screen::Ansi.new(@opt.cmd) - @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX - flag=SiSU_Env::Info_processing_flag.new - extra='' - if @opt.cmd !~/[mn]/ - extra+=if @opt.cmd =~/[abegHhIiNOopTtwXxyz]/ \ - and @opt.cmd !~/[mn]/ - 'm' #% add dal - elsif ((@opt.cmd =~/[Dd]/ \ - or (@opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/)) \ - and @opt.mod.inspect !~/(?:remove|(?:(?:re)?create(?:all)?|dropall|drop)$)/) \ - and @opt.cmd !~/[mn]/ - 'm' #% add dal - else '' - end - end - if @opt.cmd !~/y/ - extra+=if @opt.cmd =~/[abeHhIiNopsSstwXxz]/ \ - and @opt.cmd !~/y/ - 'ym' #% add manifest - elsif (@opt.cmd =~/[Dd]/ \ - or @opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/) \ - and @opt.files[0] !~/^remove$/ \ - and @opt.cmd !~/y/ - 'ym' #% add manifest - else '' - end - end - @opt.cmd=@opt.cmd + extra - opt=@opt.cmd.scan(/CC|\S/) - @opt.cmd=opt.uniq.join - if @opt.cmd =~/[vVM]/ #% version information - if @opt.cmd =~/V/ \ - and @opt.files.empty? #% environment - SiSU_Help::Help.new('env',@opt).environment - else SiSU_Help::Help.new('env',@opt).sisu_version - end - end - if @opt.cmd =~/^-L$/ #% version information - SiSU_Help::Help.new('license',@opt).help_request - end - if @opt.cmd =~/m/i #% -m for -C - path={} - path[:css]=@@env.path.output + '/_sisu/css' - path[:xml]=@@env.path.output + '/_sisu/xml' - path[:xsd]=path[:xml] + '/xsd' - path[:xsd]=path[:xml] + '/rnc' - path[:xsd]=path[:xml] + '/rng' - re_p=/(sisupod(?:\.zip)?|\S+?\.ss[mt]\.zip|[^\/]+?\.ssp)$/ - unless @opt.files.join(',') =~ re_p #do not mix pods with source markup files in command line - unless ( FileTest.directory?(path[:css]) \ - and FileTest.directory?(path[:xsd]) ) - @opt.cmd=@opt.cmd +='C' unless @opt.cmd =~/C/ #FIX - end - if @opt.cmd =~/M/ - $VERBOSE=false #debug $VERBOSE=true - end - end - end - if @opt.cmd =~/C/ #% -C initialize/configure - op('conf','configure site') - if @opt.cmd =~/R/ - if @opt.mod.inspect =~/--init(?:ialize)?=site/ \ - and @opt.cmd =~/RZ/ - Operations.new(@opt).remote_put_base_site_rsync_match - else Operations.new(@opt).remote_put_base_site_rsync - end - elsif @opt.cmd =~/r/ - if @opt.mod.inspect =~/--init(?:ialize)?=site/ \ - and @opt.cmd =~/CCr/ - Operations.new(@opt).remote_put_base_site_all - else Operations.new(@opt).remote_put_base_site - end - end - end - if @opt.cmd =~/F/ #% -F cgi sample search form - Operations.new(@opt).cgi - end - if @opt.cmd =~/W/ #% -W webrick #@argv==port - Operations.new(@opt).webrick - end - if @opt.cmd =~/Z/ #% -Z wipe previous output clean - op('zap','Zap, deletions') - end - if @opt.cmd =~/s/ #% -s sisu source - op('share_src','SiSU markup source') - end - if @opt.cmd =~/g/ #% -g sisu git - op('git','SiSU Git') - end - if @opt.cmd =~/m/ #% -m is remote url requested? (download if) - @retry_count= -1 - begin - path_image='./_sisu/processing/external_document/image' - path_skin='./_sisu/processing/external_document/skin/doc' - @get_s,@get_p=[],[] - re_s=/((?:https?|file):\/\/\S+?\.sst)$/ - re_p=/((?:https?|file):\/\/\S+?(?:\/\S+?\.ss[mt]\.zip|sisupod(?:\.zip)?|\.ssp))/ - @opt.files.each do |fns| - if fns =~re_s - @get_s << re_s.match(fns)[1] if re_s - end - if fns =~re_p - @get_p << re_p.match(fns)[1] if re_p - end - end - if @get_s.length > 0 #% remote markup file .sst - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Get.new(@opt,@get_s).fns - Operations.new.counter - end - if @get_p.length > 0 #% remote sisupod - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Get.new(@opt,@get_p).sisupod - end - rescue - SiSU_Errors::Info_error.new($!,$@,@opt,@fns).error #ok - @retry_count +=1 - retry unless @retry_count > 1 - ensure - end - @opt.files=@opt.files.collect {|x| x=x.gsub(/(?:https?|file):\/\/\S+\/(\S+)\.sst$/,'\1.-sst') } - end - if @opt.cmd=~/m/ #% -m dal - op('dal','dal') - end - @opt.files=@opt.files.collect {|x| x=x.gsub(/\.ssm$/,'.ssm.sst') } - if @opt.cmd =~/S/ - op('sisupod_make','sisupod (zip)') #% -S make sisupod - if @opt.fns=~/\.kdi._sst/ - op('share_src_kdissert','kdissert (kdi)') #% -S share kdissert source - end - end - if @opt.cmd =~/N/; op('digests','digests') #% -N digest tree - end - if @opt.cmd =~/[hHz]/; op('html','html') #% -h -H -z html css - end - if @opt.cmd =~/[at]/; op('plaintext','plaintext') #% -t -a #-A -f -e -E plaintext -a creates ms-dos type; -A creates unix type, plaintext file - end - #if @opt.cmd =~/g/; op('git','git') #% -g git - #end - #if @opt.cmd =~/g/; op('wikispeak','wikispeak') #% -g wiki - #end - if @opt.cmd =~/e/; op('epub','ePub') #% -e epub - end - if @opt.cmd =~/o/; op('odf','OpenDocument') #% -o opendocument - end - if @opt.cmd =~/x/; op('xml','xml sax') #% -x xml sax type - end - if @opt.cmd =~/X/; op('xml_dom','xml dom') #% -X xml dom type - end - if @opt.cmd =~/f/; op('xml_fictionbook','xml fictionbook') #% -f xml fictionbook - end - if @opt.cmd =~/b/; op('xhtml','xhtml sax') #% -b xhtml sax type - end - if @opt.cmd =~/w/; op('concordance','Concordance') #% -w concordance - end - if @opt.cmd =~/O/; op('xml_md_oai_pmh_dc','OAI PMH') #% -O open archive initiative, metadata harvesting - end - if @opt.cmd =~/T/ #% -T termsheet/standard form - SiSU_Help::Help.new('termsheet').help_request - @opt.files.each do |fns| - if FileTest.file?(fns) - @opt.fns=fns - case @opt.fns - when /\.(termsheet.rb)$/; Operations.new(@opt).termsheet - else #print "not processed --> ", fns, "\n" - end - else Operations.new(@opt).not_found - end - end - Operations.new.counter - end - if @opt.cmd =~/k/; op('xml_scaffold','XML scaffold') #% -T temporary tests - end - if @opt.cmd =~/p/; op('texpdf','LaTeX pdf') #% -p latex/ texpdf - end - if @opt.cmd =~/i/; op('manpage','manpage') #% -i manpage - end - if @opt.cmd =~/I/; op('texinfo','TeX Info') #% -I texinfo (i taken by db import) - end - if @opt.cmd =~/D/ \ - or @opt.mod.inspect =~/--pgsql/; op('dbi','postgresql') #% -D DB postgresql - end - if @opt.cmd =~/d/ \ - or @opt.mod.inspect =~/--sqlite/; op('dbi','sqlite') #% -d DB sqlite - end - if @opt.cmd =~/G/; Operations.new(@opt).cgi #% -G cgi - used to make dbi intecface - end - if @opt.cmd=~/m/; op('embedded','Embedded Content') #% -m embedded content - end - if @opt.cmd =~/y/; op('manifest','Manifest') #% -y manifest - end - if @opt.cmd =~/Y/; op('sitemaps','Sitemap') #% -Y sitemap - end - if @opt.mod.inspect !~/--harvest/ - if @opt.cmd =~/r/; op('remote','scp') #% -r copy to remote server - end - if @opt.cmd =~/R/; op('remote','rsync') #% -R copy to remote server - end - else - end - op('urls','urls') - @msg,@msgs="\tsisu -W [to start ruby web-server on output directory]\n",nil unless @opt.cmd =~/q/ - @tell.call.print_brown if @opt.cmd =~/[uUvVM]/ unless @opt.files.join.empty? - if defined? @@env.path.processing \ - and @@env.user \ - and FileTest.directory?(@@env.path.processing) \ - and @@env.path.processing =~/#{@@env.user}$/ #clean temporary processing directory of content as is located in public area - cd(@@env.path.processing_base_tmp) do - rm_rf(@@env.user) unless @opt.cmd =~/M/ - end end - elsif @opt.mod.inspect =~/--query/ - require "#{SiSU_lib}/sst_identify_markup" # sst_identify_markup.rb - puts SiSU_Markup::Markup_history.new(@opt).query - elsif @opt.mod.inspect =~/--identify/ - require "#{SiSU_lib}/sst_identify_markup" # sst_identify_markup.rb - markup_version=SiSU_Markup::Markup_identify.new(@opt).markup_version? - elsif @opt.mod.inspect =~/--about/ #% help instructions - if @opt.mod.inspect =~/--about/ \ - and not @opt.what.empty? - SiSU_Help::Help.new(@opt.what,'color_off').help_request - else SiSU_Help::Help.new('list','color_off').help_request - end - elsif @opt.mod.inspect =~/--sitemaps/ #% sitemaps - require "#{SiSU_lib}/sitemaps" # sitemaps.rb - SiSU_Sitemaps::Source.new(@opt).read - if @opt.cmd =~/R/ - require "#{SiSU_lib}/remote" # remote.rb - SiSU_Remote::Put.new(@opt).rsync_sitemaps - end - else #% help instructions - unless @opt.mod.inspect =~/--convert|--to|--from|--harvest/ - if @opt.mod.inspect =~/--help/ \ - and not @opt.what.empty? - SiSU_Help::Help.new(@opt.what).help_request - elsif @opt.mod.inspect =~/--help/; SiSU_Help::Help.new('list').help_request - else SiSU_Help::Help.new('env',@opt).sisu_version - tell=SiSU_Screen::Ansi.new(''," for HELP type:\n\tsisu --help [help request]\n\tman sisu\n or see the system or online documentation on SiSU:\n #{Config::CONFIG['datadir']}/doc/sisu/\n <http://www.jus.uio.no/sisu/>\n <http://sisudoc.org/>"); tell.puts_grey - end - end - end - @opt.files.each do |fns| - if FileTest.file?(fns) - @opt.fns=fns - unless @opt.fns =~ /(?:\.(?:(?:-|ssm\.)?sst|ssm|ssp|sx[sdn]\.xml|termsheet.rb)|\S+?\.ss[mt]\.zip|sisupod(?:\.zip)?|\S+?\.ssp)$/ - if @opt.fns=~/\.kdi$/ \ - and @opt.mod.inspect =~/--(?:convert(?:-from)?|from)[=-]kdi/ - elsif @opt.fns=~/\.sx[sdn]\.xml$/ \ - and @opt.mod.inspect =~/--(?:(?:convert(?:-from)?|from)[=-])?(?:xml2sst|sxml)/ - elsif @opt.fns=~/\.ssi$/ \ - and @opt.mod.inspect =~/--identify/ - else Operations.new(@opt).not_recognised - end - end - if @opt.fns =~/\.ssm\.sst$/ \ - and @opt.cmd !~/[S_M]/ # rework necessry, revist, the _ flag is a hack, to keep ._sst files - @msg,@msgs='temporary file removed',nil - @tell.call.warn unless @opt.cmd =~/V/ - File.unlink(@opt.fns) if File.exist?(@opt.fns) #CONSIDER - end - else #Operations.new(fns,'html').not_found - end - end - end - end - begin #% select what to do - if RUBY_VERSION < '1.9' - require 'jcode' - $KCODE='UTF8' - end - require "#{SiSU_lib}/constants" # constants.rb - require "#{SiSU_lib}/options" # options.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env; include SiSU_Screen - require "#{SiSU_lib}/param" # param.rb - include SiSU_Param - require "#{SiSU_lib}/defaults" # defaults.rb - include SiSU_Viz - require "#{SiSU_lib}/help" # help.rb - include SiSU_Help - require 'uri' - home=ENV['HOME'] - argv=$* - @opt=SiSU_commandline::Options.new(argv) - Processing.new(@opt).actions - rescue; STDERR.puts SiSU_Screen::Ansi.new(@opt,$!,$@,nil).rescue #fix - ensure - Dir.chdir(@@pwd) - end -end -__END__ diff --git a/lib/sisu/v2/manifest.rb b/lib/sisu/v2/manifest.rb deleted file mode 100644 index 82756e67..00000000 --- a/lib/sisu/v2/manifest.rb +++ /dev/null @@ -1,713 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: summary of generated outputs and metadata - -=end -module SiSU_Manifest - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - require "#{SiSU_lib}/i18n" # i18n.rb - require "#{SiSU_lib}/particulars" # particulars.rb - include SiSU_Particulars - require "#{SiSU_lib}/html_minitoc" # html_minitoc.rb - require "#{SiSU_lib}/html" # html.rb - include SiSU_HTML_Format - require "#{SiSU_lib}/param" # param.rb - include SiSU_Param - include SiSU_Viz - class Source - def initialize(opt) - @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) - l=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) - @doc_language=l[:l] - end - def read - begin - @env=SiSU_Env::Info_env.new(@opt.fns) - @md=SiSU_Param::Parameters.new(@opt).get - SiSU_Env::Info_skin.new(@md).select - xbrowser=@env.program.web_browser - browser=@env.program.console_web_browser - webserv_url=@env.path.url.output_tell - unless @opt.cmd =~/q/ - url_html="#{webserv_url}/#{@md.fnb}/#{@md.fn[:manifest]}" - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',"#{xbrowser} #{url_html}").green_hi_blue \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',@opt.fns).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,"#{browser} #{url_html}").grey_tab if @opt.cmd =~/v/i - end - data=SiSU_HTML::Source::Html_environment.new(@particulars).tuned_file_instructions - Output_Info.new(@md).check_output(data) - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - private - class Output_Info <Source - def initialize(md) - @manifest={ :txt=>[],:html=>[] } - @md,@fns=md,md.fns - @env=SiSU_Env::Info_env.new(@md.fns) - @fnb=@md.fnb - @base_url,@base_url_src,@base_url_pod,@base_url_epub="#{@env.url.root}/#{@fnb}",@env.url.src_txt,@env.url.src_pod,@env.url.epub - @base_path,@base_path_src,@base_path_pod,@base_path_epub="#{@env.path.output}/#{@fnb}",@env.path.output_src,@env.path.output_pod,@env.path.output_epub - @@dg ||=SiSU_Env::Info_env.new.digest.type - @dg=@@dg - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - @language=l[:l] - @translate=SiSU_Translate::Source.new(@md,@language) - @brace_url=SiSU_Viz::Skin.new.url_decoration - end - def output - SiSU_Env::SiSU_file.new(@md).mkdir - manifest=SiSU_Env::SiSU_file.new(@md,@md.fn[:manifest]).mkfile - @manifest[:html].each do |x| - manifest << x - end - end - def summarize(id,file,img='● ') - size=(File.size("#{@base_path}/#{file}")/1024.00).to_s - kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] - @manifest[:txt] << "#{file} #{id} #{kb}\n" - @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="#{file}">#{img}#{id}</a></p></th><td><p class="small"><a href="#{file}">#{file}</a></p><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right">#{kb}</p></td></tr>\n} - end - def summarize_epub(id,file,img='● ') - size=(File.size("#{@base_path_epub}/#{file}")/1024.00).to_s - kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] - @manifest[:txt] << "#{file} #{id} #{kb}\n" - @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="../epub/#{file}">#{img}#{id}</a></p></th><td><p class="small"><a href="../epub/#{file}">#{file}</a></p><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url_epub}/#{file}">#{@base_url_epub}/#{file}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right">#{kb}</p></td></tr>\n} - end - def summarize_source(id,file) - sys=SiSU_Env::System_call.new - dgst =if @dg =~/^sha(?:2|256)$/; sys.sha256("#{@base_path_src}/#{file}") - else sys.md5("#{@base_path_src}/#{file}") - end - SiSU_Screen::Ansi.new(@md.cmd,"#{dgst[1]} #{file}").warn if @md.cmd =~/[vVM]/ - size=(File.size("#{@base_path_src}/#{file}")/1024.00).to_s - kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] - @manifest[:txt] << "#{file} #{id} #{kb}\n" - @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="../src/#{file}">#{id}</a></p></th><td class="right"><p class="tiny"><a href="../src/#{file}">#{file}</a> #{dgst[1]}<br />#{@brace_url.xml_open}<a href="#{@base_url_src}/#{file}">#{@base_url_src}/#{file}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right">#{kb}</p> - </td></tr>\n} if kb and kb =~/\d+/ - end - def summarize_pod(id,file) - sys=SiSU_Env::System_call.new - dgst =if @dg =~/^sha(?:2|256)$/; sys.sha256("#{@base_path_pod}/#{file}") - else sys.md5("#{@base_path_pod}/#{file}") - end - SiSU_Screen::Ansi.new(@md.cmd,"#{dgst[1]} #{file}").warn if @md.cmd =~/[vVM]/ - size=(File.size("#{@base_path_pod}/#{file}")/1024.00).to_s - kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] - @manifest[:txt] << "#{file} #{id} #{kb}\n" - @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="../pod/#{file}">#{id}</a></p></th><td class="right"><p class="tiny"><a href="../pod/#{file}">#{file}</a> #{dgst[1]}<br />#{@brace_url.xml_open}<a href="#{@base_url_pod}/#{file}">#{@base_url_pod}/#{file}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right">#{kb}</p> - </td></tr>\n} if kb and kb =~/\d+/ - end - def languages(id,file) - flv=@env.published_manifests?(@base_path) - @manifest[:html] << %{<tr><th class="left"><div id="horizontal_links"><ul id="horizontal">\n} - flv.each do |l| - lang=SiSU_Translate::Source.new(@md,@language,l[:l]).language_list - @manifest[:txt] << "#{l[:m]} #{lang}\n" - @manifest[:html] << %{<li class="norm"><a href="#{l[:m]}">#{lang}</a> </li>} - end - @manifest[:html] << %{</ul></div></th></tr>\n} - end - def published_languages(id,file) - flv=@env.published_manifests?(@base_path) - flv.each do |l| - lang=SiSU_Translate::Source.new(@md,@language,l[:l]).language_list - @manifest[:txt] << "#{l[:m]} #{lang}\n" - @manifest[:html] << %{<tr><th class="left"><p class="bold"><a href="#{l[:m]}">#{lang}</a></p></th><td><p class="norm">#{lang}</p><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{l[:m]}">#{@base_url}/#{l[:m]}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right"> </p></td></tr>\n} - end - end - def metadata(id,info) - info.to_s.gsub!(/#{Mx[:br_line]}/,'<br />') - @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{id}:</p></th><td><p class="left">#{info}</p></td></tr>\n} - end - def links(url,lnk,target) - static=if url =~/^\.\//; url.gsub(/^\.(\.)?/,@base_url) - elsif url =~/^\.\.\//; url.gsub(/^\.(\.)?/,@env.url.root) - else url - end - @manifest[:html] << %{<tr><th class="right" width=5%><p class="norm">●</p></th><td class="left"><p class="norm"><a href="#{url}">#{lnk}</a></p><p class="tiny"> #{@brace_url.xml_open}<a href="#{static}">#{static}</a>#{@brace_url.xml_close}</p></td></tr>\n} - end - def output_tests - if FileTest.file?("#{@base_path}/#{@md.fn[:toc]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_toc.png" alt="TOC linked" /> ' - id,file='HTML, table of contents (for segmented text)',@md.fn[:toc] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:doc]}")==true - img='<img border="0" height="15" width="15" src="../_sisu/image_sys/b_doc.png" alt="Full Text" /> ' - id,file='HTML, full length document',@md.fn[:doc] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:book_index]}")==true - id,file='HTML, (book type) index',@md.fn[:book_index] - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:concordance]}")==true - id,file='HTML, concordance file',@md.fn[:concordance] - summarize(id,file) - end - if FileTest.file?("#{@base_path_epub}/#{@md.fn[:epub]}")==true - img='<img border="0" height="18" width="18" src="../_sisu/image_sys/b_epub.png" alt="EPUB" /> ' - id,file='EPUB (Electronic Publication, e-book standard)',@md.fn[:epub] - summarize_epub(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_letter]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_pdf.png" alt="PDF portrait" /> ' - id,file="PDF, U.S. letter size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_letter] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_letter]}")==true - img='<img border="0" height="15" width="18" src="../_sisu/image_sys/b_pdf.png" alt="PDF landscape" /> ' - id,file="PDF, U.S. letter size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_letter] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_a4]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_pdf.png" alt="PDF portrait" /> ' - id,file="PDF, A4 size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_a4] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_a4]}")==true - img='<img border="0" height="15" width="18" src="../_sisu/image_sys/b_pdf.png" alt="PDF landscape" /> ' - id,file="PDF, A4 size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_a4] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_a5]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_pdf.png" alt="PDF portrait" /> ' - id,file="PDF, A5 (book) size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_a5] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_a5]}")==true - img='<img border="0" height="15" width="18" src="../_sisu/image_sys/b_pdf.png" alt="PDF landscape" /> ' - id,file="PDF, A5 (book) size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_a5] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_b5]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_pdf.png" alt="PDF portrait" /> ' - id,file="PDF, B5 (book) size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_b5] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_b5]}")==true - img='<img border="0" height="15" width="18" src="../_sisu/image_sys/b_pdf.png" alt="PDF landscape" /> ' - id,file="PDF, B5 (book) size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_b5] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p_legal]}")==true - img='<img border="0" height="18" width="15" src="../_sisu/image_sys/b_pdf.png" alt="PDF portrait" /> ' - id,file="PDF, U.S. legal size, portrait/vertical document (recommended for printing)",@md.fn[:pdf_p_legal] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l_legal]}")==true - img='<img border="0" height="15" width="18" src="../_sisu/image_sys/b_pdf.png" alt="PDF landscape" /> ' - id,file="PDF, U.S. legal size, landscape/horizontal document (recommended for screen viewing)",@md.fn[:pdf_l_legal] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:odf]}")==true - img='<img border="0" height="18" width="18" src="../_sisu/image_sys/b_odf.png" alt="ODF/ODT" /> ' - id,file='ODF:ODT (Open Document Format)',@md.fn[:odf] - summarize(id,file,img) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:xhtml]}")==true - id,file='XHTML',@md.fn[:xhtml] - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:sax]}")==true - id,file='XML SAX',@md.fn[:sax] - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:dom]}")==true - id,file='XML DOM',@md.fn[:dom] - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:plain]}")==true - if @md.cmd =~/a/; id,file='Plaintext (Unix (UTF-8) with footnotes)',@md.fn[:plain] - elsif @md.cmd =~/e/; id,file='Plaintext (Unix (UTF-8) with endnotes)',@md.fn[:plain] - elsif @md.cmd =~/A/; id,file='Plaintext (dos (UTF-8) with footnotes)',@md.fn[:plain] - elsif @md.cmd =~/E/; id,file='Plaintext (dos (UTF-8) with endnotes)',@md.fn[:plain] - else id,file='Plaintext (UTF-8)',@md.fn[:plain] - end - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true - id,file='LaTeX (portrait)',"#{@md.fns}.tex" - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fns}.tex")==true - id,file='LaTeX (landscape)',"#{@md.fns}.landscape.tex" - summarize(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fn[:digest]}")==true - id,file="Digest/DCC - Document Content Certificate (#{@dg})",@md.fn[:digest] - summarize(id,file) - end - end - def published_versions - if FileTest.file?("#{@base_path}/sisu_manifest.html")==true - id,file='Markup (SiSU source)',@md.fns - languages(id,file) - end - end - def language_versions - if FileTest.file?("#{@base_path}/sisu_manifest.html")==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 - req=@md.fns - if FileTest.file?("#{@base_path_src}/#{req}")==true - id,file='Markup Composite File (SiSU source)',req - summarize_source(id,file) - end - else - if FileTest.file?("#{@base_path_src}/#{@md.fns}")==true - id,file='Markup (SiSU source)',@md.fns - summarize_source(id,file) - end - end - if FileTest.file?("#{@base_path_pod}/#{@md.fn[:sisupod]}")==true - id,file='SiSU doc (zip)',@md.fn[:sisupod] - summarize_pod(id,file) - end - if FileTest.file?("#{@base_path}/#{@md.fnb}")==true \ - and @md.fnb =~/\.kdi$/ - id,file='Kdissert (.kdi source)',@md.fnb - summarize_pod(id,file) - end - end - def metadata_tests - if defined? @md.title.full \ - and @md.title.full=~/\S+/ - id,info=@translate.full_title,@md.title.full - metadata(id,info) - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ - id,info=@translate.author,@md.creator.author - 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) - 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.classify.subject \ - and @md.classify.subject=~/\S+/ - id,info=@translate.subject,@md.classify.subject - 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.type \ - and @md.type=~/\S+/ #dc - id,info=@translate.type,@md.type - 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) - 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.format \ - and @md.classify.format=~/\S+/ - id,info=@transate.format,@md.classify.format - metadata(id,info) - end - if defined? @md.classify.identifier \ - and @md.classify.identifier=~/\S+/ - id,info=@translate.identifier,@md.classify.identifier - 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.classify.relation \ - and @md.classify.relation=~/\S+/ - id,info=@translate.relation,@md.classify.relation - metadata(id,info) - end - if defined? @md.classify.coverage \ - and @md.classify.coverage=~/\S+/ - id,info=@translate.coverage,@md.classify.coverage - 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.notes.comment \ - and @md.notes.comment=~/\S+/ - id,info=@translate.comments,@md.notes.comment - 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.classify.oclc \ - and @md.classify.oclc=~/\S+/ - id,info=@translate.cls_oclc,@md.classify.oclc - @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{id}:</p></th><td>\n} - @manifest[:html] << %{<p class="left"><a href="http://worldcat.org/oclc/#{info}">#{info}</a></p>\n} - @manifest[:html] << %{</td></tr>\n} - end - if defined? @md.classify.pg \ - and @md.classify.pg=~/\S+/ - id,info=@translate.cls_gutenberg,@md.classify.pg - metadata(id,info) - end - if defined? @md.classify.isbn \ - and @md.classify.isbn=~/\S+/ - id,info=@translate.cls_isbn,@md.classify.isbn - 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.topic_register_array \ - and @md.topic_register_array.length > 0 - @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{@translate.topic_register}:</p></th><td>\n} - @md.topic_register_array.each do |t| - t.each_with_index do |st,i| - if st.class==Array - st.each do |v| - @manifest[:html] << %{<p class="it#{i}">#{v}</p>\n} - end - else @manifest[:html] << %{<p class="it#{i}">#{st}</p>\n} - end - end - end - @manifest[:html] << %{</td></tr>\n} - 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 - if @md.generated - id,info=@translate.last_generated,@md.generated - metadata(id,info) - end - if @md.sisu_version - id,info=@translate.sisu_version,"#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" - metadata(id,info) - end - if @md.ruby_version - id,info=@translate.ruby_version,@md.ruby_version - metadata(id,info) - end - end - def links_tests - if defined? @md.lnk \ - and @md.lnk - @md.lnk.each do |l| - if defined? l[:say] - target=if l[:url] !~/^\.(\.)?\//; 'external' - else '_top' - end - url,lnk=l[:url],l[:say] - unless url.nil? \ - or url.empty? - links(url,lnk,target) - end - end - end - end - end - def check_output(data) - begin - minitoc=SiSU_HTML_minitoc::Toc_mini.new(@md,data).songsheet.join("\n") - id,file='','' - vz=SiSU_Env::Get_init.instance.skin - banner_table=if vz.banner_home_button_only !~ /http:\/\/www\.jus\.uio\.no\/sisu/ \ - and vz.banner_home_button_only !~ /sisu\.home\.png/ -<<WOK -<table summary="band" border="0" cellpadding="3" cellspacing="0"> -<tr><td align="left" width="15%" bgcolor="#ffffff">#{vz.banner_band}</td> -<td width="70%"><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td> -<td>#{@env.widget_static.search_form}</td></tr> -</table> -WOK -#<<WOK -#<table summary="band" width="100%" border="0" cellpadding="3" cellspacing="0"> -#<tr><td align="left" bgcolor="#ffffff">#{vz.banner_band}</td><td width="60%"><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td><td width="20%">#{@env.widget_static.search_form}</td><td><a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" src="#{vz.url_path_image_sys}/sisu.png" alt="SiSU -->" /></a></td></tr> -#</table> -#WOK - else -<<WOK -<table summary="band" border="0" cellpadding="3" cellspacing="0"> -<tr><td align="left" bgcolor="#ffffff"><a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" src="#{vz.url_path_image_sys}/sisu.png" alt="SiSU -->" /></a></td> -<td><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td> -<td>#{@env.widget_static.search_form}</td></tr> -</table> -WOK - end - @manifest[:html] <<<<WOK -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title> -SiSU manifest: #{@md.title.full} -</title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -<meta name="sourcefile" content="#{@md.fns}" /> -<link rel="generator" href="http://www.jus.uio.no/sisu" /> -<link rel="shortcut icon" href="../_sisu/image_sys/rb7.ico" /> -<link rel="stylesheet" href="../#{@env.path.style}/html.css" type="text/css" /> -</head> -<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> -#{banner_table} -WOK - if @env.manifest_minitoc? - @manifest[:html] <<<<WOK -<div class="toc"> -#{minitoc.to_s} -</div> -<div class="content"> -WOK - else - @manifest[:html] <<<<WOK -<div> -WOK - end - @manifest[:html] <<<<WOK -<h1 class="small">#{@translate.manifest_description}</h1> -<h2 class="small">#{@md.title.full}</h2> -<p class="bold">#{@md.author}</p> -<p class="small"> - <a href="#output">Document, Available Filetypes</a> -</p> -<p class="small"> - <a href="#metadata">Document Metadata</a> -</p> -<p class="tiny"> - <a href="#links">(metadata suggested links (if any)</a> -</p> -<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -WOK - published_versions - @manifest[:html] << '</table>' - @manifest[:html] <<<<WOK -<h2 class="small"><a name="output">#{@translate.manifest_description_output}</a></h2> -<table summary="available output/filetypes" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -<tr> <th class="left"><p class="bold">#{@translate.filetype_description}</p></th><th class="left"><p class="bold">#{@translate.filename}</p></th><th class="right"><p class="right"><b>#{@translate.file_size}</b></p><p class="tiny_right">(kB)</p></th></tr> - -WOK - output_tests - @manifest[:html] << '</table>' - @manifest[:html] <<<<WOK -<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -WOK - source_tests - @manifest[:html] << '</table>' - @manifest[:html] <<<<WOK -<h2 class="small"><a name="metadata">#{@translate.manifest_description_metadata}</a></h2> -<table summary="document metadata" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -<tr> <th class="left"><p class="bold">#{@translate.metadata}</p></th><th class="left"><p class="bold">#{@translate.description}</p></th></tr> -WOK - metadata_tests - @manifest[:html] <<<<WOK -</table> -WOK - @manifest[:html] <<<<WOK -<p class="bold"><a name="links">#{@translate.suggested_links}:</a></p> -<table summary="suggested links" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -WOK - links_tests - @manifest[:html] <<<<WOK -</table> -WOK - @manifest[:html] <<<<WOK -<h2 class="small"><a name="languages">#{@translate.language_version_list}</a></h2> -<table summary="language versions" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> -<tr> <th class="left"><p class="bold">#{@translate.filename}</p></th><th class="left"><p class="bold">#{@translate.description}</p></th><th class="right"><p class="right"> </p></th></tr> - -WOK - language_versions - @manifest[:html] <<<<WOK -</table> -</div> -<div> -<br /> -#{vz.credits_sisu_manifest} -</div> -</body> -</html> -WOK - output - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - ensure - end - end - end - end -end -__END__ diff --git a/lib/sisu/v2/manpage.rb b/lib/sisu/v2/manpage.rb deleted file mode 100644 index f9c75227..00000000 --- a/lib/sisu/v2/manpage.rb +++ /dev/null @@ -1,420 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: manpage text generation, stripped manpage output (unix, - linefeed) - -=end -module SiSU_Manpage - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - include SiSU_Param - include SiSU_Viz - require "#{SiSU_lib}/manpage_format" # manpage_format.rb - include SiSU_Manpage_format - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - pwd=Dir.pwd - @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 - @@tablefoot='' - class Source - def initialize(opt) - @opt=opt - if @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/ - @@dostype='unix endnotes' - else puts "#{sf} not a processed file type" - end - end - def read - begin - @md=SiSU_Param::Parameters.new(@opt).get - @env=SiSU_Env::Info_env.new(@opt.fns) - path=@env.path.output_tell - tool=(@opt.cmd =~/[MVv]/) \ - ? "#{@env.program.text_editor} #{path}/man/#{@md.fn[:manpage]}" \ - : '' - SiSU_Screen::Ansi.new(@opt.cmd,'Manpage',tool).green_hi_blue unless @opt.cmd =~/q/ - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/man/#{@md.fn[:manpage]}").flow if @opt.cmd =~/[MV]/ - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - @dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here - SiSU_Manpage::Source::Scroll.new(@md,@dal_array).songsheet - SiSU_Env::Info_skin.new(@md).select #watch - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - private - class Scroll <Source - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - @@endnotes={ :para=>[],:end=>[] } - def initialize(md,data) - @md,@data=md,data - @brace_url=SiSU_Viz::Skin.new.url_decoration - @vz=SiSU_Env::Get_init.instance.skin - @tab="\t" - @br="\n" - @@dostype='unix endnotes' - @manpage={ :body=>[],:open=>[],:close=>[],:head=>[],:metadata=>[],:tail=>[],:endnotes=>[] } - end - def songsheet - manpage=markup(@data) - publish(manpage) - end - # Used for extraction of endnotes from paragraphs - def extract_endnotes(para='') - notes=para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)\s*(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m) - @n=[] - notes.each do |n| #high cost to deal with <br> appropriately within manpage, consider - n=n.dup.to_s - if n =~/#{Mx[:br_line]}/ - fix = n.split(/\s*#{Mx[:br_line]}+\s*/) #watch #added - fix.each do |x| - unless x.empty?; @n << x - end - end - else @n << n - end - end - notes=@n.flatten - notes.each do |e| - util=if e.to_s =~/^\[[\d*+]+\]:/; SiSU_text_utils::Wrap.new(e.to_s,78,4,1) - else SiSU_text_utils::Wrap.new(e.to_s,78,0,1) - end - wrap=util.line_wrap - if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m - wrap.gsub!(/(^| |#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*') #man page requires - wrap.gsub!(/\s\.(\S+)/,' \\.\1') - wrap.gsub!(/^\s*([\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB -.TP -.BI \\1. -\\2 -GSUB - ) - else - wrap.gsub!(/^\s*(.+)\Z/m, <<GSUB -\\1 -GSUB - ) - end - @@endnotes[:para] << wrap - @@endnotes[:end] << wrap << "\n.br" - @@endnotes - end - end - def manpage_metadata - @manpage[:metadata]=Metadata::Summary.new(@md).manpage.metadata - end - def manpage_tail - SiSU_Env::Info_skin.new(@md).select - vz=SiSU_Env::Get_init.instance.skin - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[: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 - @manpage[:tail] <<<<WOK -#{@br} -.TP -Other versions of this document: -.TP -manifest: <#{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:manifest]}> -.TP -at: <#{vz.url_site}> -.TP -#{sc} -.TP -* #{generator} -.TP -* #{rubyv} -.TP -* #{lastdone} -.TP -* SiSU #{vz.url_sisu} -WOK - end - def manpage_structure(dob='',hname='') #% Used to extract the structure of a document - if dob.is=='heading' - lv=dob.ln - n=dob.ln - 1 - n3=dob.ln + 2 - else lv=nil - end - wrapped=if dob.is=='para' \ - or dob.is=='heading' - paragraph=dob.obj - if dob.is=='para' - if dob.indent =~/[1-9]/ - util=if dob.bullet_ - SiSU_text_utils::Wrap.new("* #{paragraph}",78,dob.indent.to_i*2) - else SiSU_text_utils::Wrap.new(paragraph,78,dob.indent.to_i*2) - end - else - util=if dob.bullet_ - SiSU_text_utils::Wrap.new("* #{paragraph}",78,0) - else SiSU_text_utils::Wrap.new(paragraph,78,0) - end - end - else util=SiSU_text_utils::Wrap.new(paragraph,78,0) - end - w=util.line_wrap - w.gsub!(/^(\\\.)/,' \1') - w - end - if lv - times=wrapped.length - times=78 if times > 78 - @manpage[:body] << case lv - when 1; '.SH ' << wrapped.upcase << @br << '.br' - when 2..3; '.SH ' << wrapped.upcase << @br << '.br' - when 4; '.SH ' << wrapped.upcase << @br << '.br' - when 5..6; '.SH ' << wrapped.upcase << @br - end - else - @manpage[:body] << if wrapped =~/^\.BI\s/ # main text, contents, body KEEP - '.TP' << @br << wrapped.gsub!(/^\.BI\s/,'.B ') # sleight ... simpler output - else - '.br' << @br << wrapped - end - end - if @@endnotes[:para] \ - and @@dostype =~/footnote/ #edit out to switch off endnotes following paragraph to which they belong - @manpage[:body] << @br - @@endnotes[:para].each { |e| @manpage[:body] << e << @br } - elsif @@endnotes[:para] \ - and @@dostype =~/endnote/ - @manpage[:body] << @br*2 - end - @@endnotes[:para]=[] - end - def markup(data) # Used for major markup instructions - dir=SiSU_Env::Info_env.new(@md.fns) - @data_mod,@endnotes,@level,@cont,@copen,@manpage_contents_close=Array.new(6){[]} - (0..6).each { |x| @cont[x]=@level[x]=false } - (4..6).each { |x| @manpage_contents_close[x]='' } - manpage_tail #($1,$2) - table_message='[table omitted, see other document formats]' - fix=[] - manpage_metadata - data.each do |dob| - if dob.is=='comment' \ - or dob.is=='heading_insert' - dob.obj='' - end - dob.obj.gsub!(/.+?<-#>/,'') # remove dummy headings (used by html) #check - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^\1^') - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'[\1]') - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'++\1++') - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'--\1--') - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"') - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\1') - dob.obj.gsub!(/\A\s*#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}#{Mx[:br_line]}/m,"#{Mx[:br_line]}.I \\1#{Mx[:br_line]}") - dob.obj.gsub!(/\s*#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/m,"#{Mx[:br_line]}.I \\1#{Mx[:br_line]}") - dob.obj.gsub!(/\A\s*#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}#{Mx[:br_line]}/m,"#{Mx[:br_line]}.BI \\1#{Mx[:br_line]}") - dob.obj.gsub!(/\s*#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,"#{Mx[:br_line]}.B \\1#{Mx[:br_line]}") - dob.obj.gsub!(/\s*#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,"#{Mx[:br_line]}.I \\1#{Mx[:br_line]}") - unless dob.is=='code' - dob.obj.gsub!(/(?:^|\s)#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"\\1 #{@brace_url.txt_open}\\2#{@brace_url.txt_close}") - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"\\1#{@brace_url.txt_open}\\2#{@brace_url.txt_close}") - @manpage[:endnotes]=extract_endnotes(dob.obj) - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s*(?:.+?)#{Mx[:en_a_c]}/m,'[^\1]') # endnote marker marked up - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s*(?:.+?)#{Mx[:en_b_c]}/m,'[^\1]') # endnote marker marked up - dob.obj.gsub!(/#{Mx[:gl_o]}#amp#{Mx[:gl_c]}/,'&') ##{Mx[:gl_o]}#095#{Mx[:gl_c]} - dob.obj.gsub!(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!') - dob.obj.gsub!(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#') - dob.obj.gsub!(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*') - dob.obj.gsub!(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-') - dob.obj.gsub!(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/') - dob.obj.gsub!(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_') - dob.obj.gsub!(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{') - dob.obj.gsub!(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}') - dob.obj.gsub!(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~') - dob.obj.gsub!(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©') - else - dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/,"\n") # watch - end - dob.obj.gsub!(/(^| |#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*') #man page requires - dob.obj.gsub!(/┆/,'|') - dob.obj.gsub!(/\s\.(\S+)/,' \\.\1') - dob.obj.gsub!(/(\n\.)(\S\S\S+)/m,'\1\\.\2') - dob.obj.gsub!(/-/,'\-') #manpages use this - dob.obj.gsub!(/~/,'~') if dob.obj #manpages use this - if dob.is =~/group|verse|alt|code/ - if dob.is =='code' - dob.obj.gsub!(/(^|[^}])_([<>])/m,'\1\2') # _> _< - dob.obj.gsub!(/(^|[^}])_([<>])/m,'\1\2') # _<_< - dob.obj.gsub!(/\A(.+)?\Z/m,".nf\n\n\\1\n\n.fi") - end - else - dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,"\n\n") #unless para =~/#{Mx[:lv_o]}\d:/ #watch introduces a bug - end - dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/,"\n\n.br\n\n") # watch - blit=dob.obj.scan(/\[[^\]]+\]|[^\[]+/) - blit_array=[] - blit.each do |x| - if x =~/^\[/ - x.gsub!(/\s+/,' \ ') #manpages use this - else x - end - blit_array << x - end - dob.obj=blit_array.join - dob.obj.gsub!(/#{Mx[:gl_o]}:name#\S+?#{Mx[:gl_c]}/mi,'') #added - dob.obj.gsub!(/\s\\\s+(#{Mx[:br_line]}|#{Mx[:br_nl]})/,'\1') #a messy solution - dob.obj.gsub!(/#{Mx[:br_page]}\s*|#{Mx[:br_page_new]}/,'') # remove page breaks - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1\2') - dob.obj.gsub!(/<a href=".+?">(.+?)<\/a>/m,'\1') - dob.obj.gsub!(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links - dob.obj.gsub!(/ |#{Mx[:nbsp]}/,' ') # decide on - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]') #"[ #{dir.url.images_local}\/\\1 ]") - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]') #"[ #{dir.url.images_local}\/\\1 ]") - dob.obj.gsub!(/^(?:^|[^_\\])#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*#{Mx[:lnk_c]}\S+/,'[image: "\1"]') - wordlist=dob.obj.scan(/\S+/) - if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ - if dob.obj =~@regx #/.+?<~\d+;\w\d+;\w\d+>.*/ #watch change - paranum=dob.obj[@regx,3] - @p_num=SiSU_Manpage_format::Paragraph_number.new(paranum) - end - x=SiSU_Manpage_format::Format_text_object.new(@md,dob) - if dob.is=='heading' - manpage_structure(dob) - dob.obj=case dob.ln - when 1; x.heading_body1 - when 2; x.heading_body2 - when 3; x.heading_body3 - when 4; x.heading_body4 - when 5; x.heading_body5 - when 6; x.heading_body6 - end - elsif dob.is=='para' - manpage_structure(dob) - else - if dob.obj =~/#{table_message}/ - @manpage[:body] << dob.obj << @br - end - end - if (dob.obj =~/<a name="n\d+">/ \ - and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote - dob.obj='' - end - if dob.obj - dob.obj.gsub!(/\s(\[)/m,' \ \1') - dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})/,"\n\n") - dob.obj.gsub!(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~') - dob.obj.gsub!(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{') - dob.obj.gsub!(/#{Mx[:pa_o]}\S+#{Mx[:pa_c]}/,' ') - dob.obj.gsub!(/<!.+!>/,' ') - dob.obj.gsub!(/<:\S+>/,' ') - end - dob - end - end - @manpage - end - def publish(manpage) - divider='=' - content=[] - date=if defined? @md.date.modified \ - and @md.date.modified - @md.date.modified - elsif defined? @md.date.published \ - and @md.date.published - @md.date.published - else SiSU_Env::Info_date.new.year #date missing decide on action - end - manpage_name,manpage_synopsis='','' - manpg={} - proj=SiSU_Env::Info_version.instance.get_version - manpage[:open] = %{.TH "#{@md.fnb}" "#{@md.make.manpage['section']}" "#{date}" "#{proj[:version]}" "#{@md.title.main}"#{@md.make.manpage['name']}#{@md.make.manpage['synopsis']}} - content << manpage[:open] - content << manpage[:head] - content << manpage[:body] - content << @@endnotes[:end] if @@dostype =~/endnotes/ - content << manpage[:metadata] - content << manpage[:tail] - Output.new(@md,content).manpage - @@endnotes={ :para=>[],:end=>[] } - end - end - class Output <Source - include SiSU_Param - include SiSU_Env - def initialize(md,content) - @md,@content=md,content - end - def manpage #%manpage output - SiSU_Env::SiSU_file.new(@md).mkdir - filename_manpage=SiSU_Env::SiSU_file.new(@md,@md.fn[:manpage]).mkfile_man - @sisu=[] - @content.each do |para| # this is a hack - if para.class==Array \ - and para.length > 0 - para.each do |line| - line.gsub!(/\s+$/m,'') - filename_manpage.puts line #unix manpage - end - else filename_manpage.puts para #unix manpage # /^([*=-]|\.){5}/ - end - end - filename_manpage.close - end - end - end -end -__END__ diff --git a/lib/sisu/v2/odf.rb b/lib/sisu/v2/odf.rb deleted file mode 100644 index 2880cdfe..00000000 --- a/lib/sisu/v2/odf.rb +++ /dev/null @@ -1,735 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: opendocument text generation - -=end -module SiSU_ODF - require "#{SiSU_lib}/particulars" # particulars.rb - include SiSU_Particulars - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - include SiSU_Viz - require "#{SiSU_lib}/odf_format" # odf_format.rb - include SiSU_ODF_format - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 - class Source - require 'zlib' - require 'find' - require 'fileutils' - include FileUtils - def initialize(opt) - @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) - @@endnotes_para=[] - end - def read - begin - @env,@md,@dal_array=@particulars.env,@particulars.md,@particulars.dal_array - opendoc=@md.fn[:odf] - path=@env.path.output_tell - unless @opt.cmd =~/q/ - tool=(@opt.cmd =~/[MVv]/) \ - ? "#{@env.program.odf_viewer} #{path}/#{@md.fnb}/#{opendoc}" \ - : @opt.fns - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Opendocument (ODF:ODT)',tool).green_hi_blue \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Opendocument (ODF:ODT)',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/#{@md.fnb}/#{opendoc}").flow if @opt.cmd =~/[MV]/ - end - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - SiSU_ODF::Source::Scroll.new(@particulars).songsheet - SiSU_Env::Info_skin.new(@md).select - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - private - class Scroll <Source - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - @@img_count=0 - @@odf={ :body=>[],:open=>[],:close=>[],:head=>[],:metadata=>[],:tail=>[],:endnotes=>[] } - @@docstart=true - @@fns=nil - def initialize(particulars) - @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @vz=SiSU_Env::Get_init.instance.skin - @tab="\t" - @brace_url=SiSU_Viz::Skin.new.url_decoration - @br=(@md.cmd =~/M/) ? '' : '' - #@br=(@md.cmd =~/M/) ? "\n" : '' - end - def songsheet - pre - @data=markup(@dal_array) - post - publish - end - # Used for extraction of endnotes from paragraphs - def extract_endnotes(dob='') - notes=dob.obj.scan(/#{Mx[:en_a_o]}(\d+\s+.+?)#{Mx[:en_a_c]}/)[1] #FIX - @n=[] - notes.each do |n| #high cost to deal with <br> appropriately within odf, consider - n=n.dup.to_s - if n =~/#{Mx[:br_line]}/ - fix=n.split(/#{Mx[:br_line]}/) #watch #added - fix.each do |x| - if x =~/\S+/; @n << x - end - end - else @n << n - end - end - end - def odf_metadata - @@odf[:metadata]=Metadata::Summary.new(@md).odf.metadata - end - def odf_tail - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] - lastdone="Last Generated on: #{Time.now}" - rubyv="Ruby version: #{@md.ruby_version}" - sc=if @md.sc_info - "Source file: #{@md.sc_filename}\nVersion number: #{@md.sc_number}\nVersion date: #{@md.sc_date}\n" - else '' - end - url=@md.fnb - fn=@md.fn[:manifest] - manifest="#{@env.url.root}/#{@md.fnb}/#{@md.fn[:manifest]}" - @@odf[:tail] << %{<text:p text:style-name="P1">Available document outputs: <br /> <<text:a xlink:type="simple" xlink:href="#{manifest}">#{manifest}</text:a>></text:p>} - @@odf[:tail] << %{\n<text:p text:style-name="P1">SiSU: <<text:a xlink:type="simple" xlink:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xlink:type="simple" xlink:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>} - @@odf[:tail] << "\n</office:text></office:body></office:document-content>" - end - def heading(dob) - dob.obj.gsub!(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'') #check - m=/#{$1}/ - breakpage='' - if @md.fns \ - and @md.fns != '' \ - and @md.fns !=@@fns - @@docstart=true - @@fns=@md.fns - end - unless @@docstart - breakpage=if (@md.pagenew or @md.pagebreak) \ - and (@md.pagenew =~ m or @md.pagebreak =~m) - '<text:p text:style-name="P9"> </text:p>' - else '' - end - end - @@docstart=false - dob.obj=%{#{breakpage}<text:h text:style-name="Heading_20_#{dob.ln}" text:outline-level="#{dob.ln}">#{dob.obj}</text:h>} - dob - end - def image_src(i) - image_source=if @md.fns =~/\.ss[tm]$/ \ - and FileTest.file?("#{@env.path.image_source_local_tex}/#{i}") #review - @env.path.image_source_local_tex - elsif @md.fns =~/\.-ss[tm]$/ \ - and FileTest.file?("#{@env.path.image_source_remote_tex}/#{i}") - @env.path.image_source_remote_tex - elsif FileTest.file?("#{@env.path.image_source_tex}/#{i}") - @env.path.image_source_tex - else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{i}" missing},"search locations: #{@env.path.image_source_local_tex},#{@env.path.image_source_remote_tex} and #{@env.path.image_source_tex}").error2 unless @md.cmd =~/q/ - nil - end - end - def image_odf(img) - # copy image to od image directory (unless exists) - # divide pixel dimension by 37.79485 and retain 3 decimal places - m,u=img[1],img[2] - i=/^(\S+?\.(?:png|jpg|gif))/.match(m).captures.join if m =~/^(\S+?\.(?:png|jpg|gif))/ - c=/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/.match(m).captures.join if m =~/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/ - w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ - w=(w.to_i/37.79485).to_s - h=(h.to_i/37.79485).to_s - h=/([0-9]+\.\d{0,3})/.match(h).captures.join - w=/([0-9]+\.\d{0,3})/.match(w).captures.join - image_source=image_src(i) - pwd=Dir.pwd - cp("#{image_source}/#{i}","#{@env.path.odf}/Pictures/#{i}") if image_source - img=if i.to_s =~/jpg|png|gif/ \ - and h.to_s =~/\d/ \ - and w.to_s =~/\d/ - @@img_count +=1 - %{<draw:frame draw:style-name="fr1" draw:name="graphics#{@@img_count}" text:anchor-type="as-char" svg:width="#{w}cm" svg:height="#{h}cm" draw:z-index="2"><draw:image xlink:href="Pictures/#{i}" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>#{c}} #anchor-type: as-char or paragraph or char or ... - else %{<text:p text:style-name="P1">[image omitted]</text:p>} - end - end - def image(dob) - m=if dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ - dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/) - elsif dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}image/ - dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}(image))/) - else nil - end - if m; m.each do |i| - cont,url=i[1],i[2] - cont.gsub!(/([)(\]\[])/,"\\\\\\1") - cont.gsub!(/([+?])/,"\\\\\\1") # incorrect handling of + - url.gsub!(/([+?])/,"\\\\\\1") - dob.obj.sub!(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}image/m,image_odf(i)) - dob.obj.sub!(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,image_odf(i)) - dob.obj.gsub!(/\\([)(\]\[?])/,'\1') #clumsy fix - end - m=nil - end - dob - end - def text_link_odf(txt,url,trail) - txt.gsub!(/(\\\+)/,'+') #this is convoluted, and risky :-( - url.gsub!(/(\\\+)/,'+') #this is convoluted, and risky :-( - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map - t=case url - when /^https?:/ - %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} - when /^:/ # site same document collection html link - url.gsub!(/^:/,"#{@env.url.root}/") - %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} - when /^\.\.\// # site same document collection html link - url.gsub!(/^\.\.\//,"#{@env.url.root}/") - %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} - else # document internal link - if map_nametags[url] \ - and map_nametags[url][:segname] - else p "NOT FOUND name_tags: #{url}" - end - t=map_nametags[url] \ - && map_nametags[url][:segname] \ - ? %{<text:a xlink:type="simple" xlink:href="#{@env.url.root}/#{@md.fnb}/#{map_nametags[url][:segname]}#{Sfx[:html]}##{url}">#{txt.strip}</text:a>#{trail}} \ - : %{#{txt.strip}#{trail}} - end - t - end - def text_link(dob) - m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/) #sort - if m - m.each do |i| - txt,url,trail=i[1],i[2] - txt.gsub!(/([)(\]\[])/,"\\\\\\1") - txt.gsub!(/([+?*])/,"\\\\\\1") # problems with + - url.gsub!(/([+?])/,"\\\\\\1") # problems with + - dob.obj.gsub!(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,text_link_odf(txt,url,trail)) #make sure trailing ']' are not caught in url - dob.obj.gsub!(/\\([)(\]\[?])/,'\1') #clumsy fix - end - m=nil - end - dob - end - def text_link_relative(dob) - m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]})/) #sort - if m - m.each do |i| - txt,url,trail=i[1],i[2] - txt.gsub!(/([)(\]\[])/,"\\\\\\1") - txt.gsub!(/([+?*])/,"\\\\\\1") # problems with + - url.gsub!(/([+?])/,"\\\\\\1") # problems with + - dob.obj.gsub!(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{url}#{Mx[:rel_c]}/m,text_link_odf(txt,url,trail)) #make sure trailing ']' are not caught in url - dob.obj.gsub!(/\\([)(\]\[?])/,'\1') #clumsy fix - end - m=nil - end - dob - end - def normal(dob) #P1 - P3 - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration - dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration - dob.obj= if dob.is=='para' and dob.indent.to_s =~/[0-9]/ # and t_o.bullet_==true - %{<text:p text:style-name="P1#{dob.indent}">#{dob.obj}</text:p>} - else %{<text:p text:style-name="P1">#{dob.obj}</text:p>} - end - dob - end - def fontface(dob) - end - def footnote_urls(str) - str.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) - str=text_link(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ - str=text_link_relative(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ - str - end - def footnote(t_o) - str=if defined? t_o.obj; t_o.obj - elsif t_o.class==String; t_o - end - if str - @astx||=10000 - @astxs||=20000 - if str =~/#{Mx[:en_a_o]}\d+\s+/ - str.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,'<text:note text:id="ftn\1" text:note-class="footnote"><text:note-citation>\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>') - end - if str =~/#{Mx[:en_a_o]}([*]+)\s+/ - a=$1.gsub(/([*])/,"\\\\\\1") - str.gsub!(/#{Mx[:en_a_o]}([*]+)\s+(.+?)#{Mx[:en_a_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) - @astxs+=1 - end - if str=~/#{Mx[:en_a_o]}[*+]+\s/ - asterisk=str.scan(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/) - asterisk.each do |x| - a=x[0].gsub(/([*+])/,"\\\\\\1") - str=group_clean(str) - str=footnote_urls(str) - str.gsub!(/#{Mx[:en_a_o]}(#{a})\s+(.+?)#{Mx[:en_a_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) - @astx+=1 - end - end - if str=~/#{Mx[:en_b_o]}[*+]\d+\s/ - asterisk=str.scan(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/) - asterisk.each do |x| - a=x[0].gsub(/([*+])/,"\\\\\\1") - str=group_clean(str) - str=footnote_urls(str) - str.gsub!(/#{Mx[:en_b_o]}(#{a})\s+(.+?)#{Mx[:en_b_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) - @astx+=1 - end - end - end - if defined? t_o.obj; t_o.obj=str - elsif t_o.class==String; t_o=str - end - t_o - end - def group_clean(str) - str.gsub!(/&nbsp;| |#{Mx[:nbsp]}/,' ') - str.gsub!(/</,'<'); str.gsub!(/>/,'>') - str.gsub!(/<(text:span text:style-name="T[1-5]"|\/text:span)>/,'<\1>') #works, not ideal - str.gsub!(/#{Mx[:br_line]}/,'<br />') - str.gsub!(/<br(?:\s+\/)?>/,'<br />') - str - end - def poem(dob) #P4 #same as group - parray=[] - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parray << %{<text:p text:style-name="P4">#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join + '<text:p text:style-name="Standard"/>' - dob - end - def group(dob) #P4 #same as verse - parray=[] - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration - dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parablock.gsub!(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'<text:a xlink:type="simple" xlink:href="\1">') - parablock.gsub!(/<(\/text:a)>/,'<\1>') - parablock.gsub!(/<(text:note text:id=.+?)>/,'<\1>') - parablock.gsub!(/<(text:p text:style-name="Footnote")>/,'<\1>') - parablock.gsub!(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') - parablock=footnote(parablock) - parray << %{<text:p text:style-name="P4">#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join + '<text:p text:style-name="Standard"/>' - dob - end - def code(dob) #P5 - if dob.is=='code' - dob.obj.gsub!(/\s\s/,'  ') - parray=[] - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parablock.gsub!(/^\s*$/,'<br />') - parablock.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration - parray << %{<text:p text:style-name="P20">#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join + '<text:p text:style-name="Standard"/>' - end - dob - end - def table(dob) # - if dob.is =='table' - table=SiSU_ODF_format::Table.new(@md,dob) - dob=table.table - end - dob - end - def obj_break(dob) - if dob.is =='break' - br=SiSU_ODF_format::Format_obj_break.new(@md,dob) - if dob.obj==Mx[:br_page] \ - or dob.obj==Mx[:br_page_new] - dob=br.br_page - elsif dob.obj==Mx[:obj_ln_sep] - dob=br.obj_sep - end - end - dob - end - def odf_structure(md,dob) - @md,@dob=md,dob - dob=if dob.is !='code' - dob=image(dob) if dob.obj =~/#{Mx[:lnk_o]}[ ]*\S+?\.(?:png|jpg|gif)\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ - dob=text_link(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ - dob=text_link_relative(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ - dob - else dob - end - dob=footnote(dob) - if dob.is=='heading' - @@odf[:body] << heading(dob).obj << @br*2 - elsif dob.is =='verse' - @@odf[:body] << poem(dob).obj << @br*2 - elsif dob.is=='group' - @@odf[:body] << group(dob).obj << @br*2 - elsif dob.is=='code' - @@odf[:body] << code(dob).obj << @br*2 - elsif dob.is=='table' #elsif dob.obj =~ /<!Th?¡/u - @@odf[:body] << table(dob).obj << @br*2 - elsif dob.is=='break' - @@odf[:body] << obj_break(dob).obj << @br*2 - else - @@odf[:body] << normal(dob).obj << @br*2 # main text, contents, body KEEP - end - @@endnotes_para=[] - end - def tidywords(wordlist) - wordlist - end - def markup(data) # Used for major markup instructions - safe_characters=/[^a-zA-Z0-9}{\/?,."';:)(><\-_&!@%~#\]\[*=$| \n+`#{Mx[:tc_p]}]/u - dir=SiSU_Env::Info_env.new(@md.fns) - dir.path.odf_bld - @data_mod,@endnotes,@level,@cont,@copen,@odf_contents_close=Array.new(6){[]} - @rcdc=false - (0..6).each { |x| @cont[x]=@level[x]=false } - (4..6).each { |x| @odf_contents_close[x]='' } - odf_tail #($1,$2) - fix=[] - bullet=image_src('bullet_09.png') - cp("#{bullet}/bullet_09.png","#{@env.path.odf}/Pictures/.") #if image_src('bullet_09.png') - odf_metadata - data.each do |dob| - #p dob.obj if dob.obj =~safe_characters and @md.cmd =~/V/ #KEEP - dob.obj='' if dob.obj =~/#{Mx[:lv_o]}\d+:.*?#{Mx[:lv_c]}.+?#{Mx[:pa_non_object_dummy_heading]}/ #fix Mx[:lv_o] - para_array=[] - dob.obj.gsub!(/</,'<'); dob.obj.gsub!(/>/,'>') - word=dob.obj.scan(/\S+|\n/) - if word - word.each do |w| # _ - / # | : ! ^ ~ - unless dob =~/^(?:#{Rx[:meta]}|%+ )/m - w.gsub!(/&#(?:126|152);/,'~') #126 usual - w.gsub!(/ /,' ') - if w !~/&\S{2,7}?;/ - w.gsub!(/&/,'&') - end - w.gsub!(/(&\S{1,7};)+&/,'\1&') #could break things - end - para_array << w - end - dob.obj=para_array.join(' ') - dob.obj=dob.obj.strip - end - if dob.is=='code' #{Mx[:gr_o]}code#{Mx[:gr_c]}/ #fix #code-block: angle brackets special characters #fix - dob.obj.gsub!(/(^|[^}])_(?:<|<)/m,'\1<'); dob.obj.gsub!(/(^|[^}])_(?:>|>)/m,'\1>') - dob.obj.gsub!(/(^|[^}])_(?:<|<)/m,'\1<'); dob.obj.gsub!(/(^|[^}])_(?:>|>)/m,'\1>') - end - if dob.of=='group' - dob.obj.gsub!(/#{Mx[:gl_bullet]}/,'● ') - end - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>') - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>') - dob.obj.gsub!(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'') #check - dob.obj.gsub!(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:mk_o]}[~-]##{Mx[:mk_c]}/,'') - if dob.is=='para' \ - and dob.bullet_ - dob.obj='<draw:frame draw:style-name="gr1" text:anchor-type="as-char" svg:width="0.22cm" svg:height="0.22cm" draw:z-index="2"><draw:image xlink:href="Pictures/bullet_09.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame> ' + - dob.obj - end - dob.obj.gsub!(/#{Mx[:br_line]}/,'<br />') - dob.obj.gsub!(/©/,'©') #too arbitrary - dob.obj.gsub!(/.+?<-#>/,'') # remove dummy headings (used by html) #check - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, - '<text:span text:style-name="T1">\1</text:span>') - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, - '<text:span text:style-name="T2">\1</text:span>') - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, - '<text:span text:style-name="T3">\1</text:span>') - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, - '<text:span text:style-name="T4">\1</text:span>') - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, - '<text:span text:style-name="T5">\1</text:span>') - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, - '<text:span text:style-name="T7">\1</text:span>') - dob.obj.gsub!(//u,'-') - dob.obj.gsub!(/ /u, ' ') # space identify - dob.obj.gsub!(/ /u, ' ') # space identify - dob.obj.gsub!(/·/u,'*') - dob.obj.gsub!(/[–—]/u,'-') #— – chk - dob.obj.gsub!(/ < /i,'<') - dob.obj.gsub!(/\\copy(?:right)?\b/,'©') - dob.obj.gsub!(/\\trademark\b|\\tm\b/,'®') - dob.obj.gsub!(/\44/,'$') #$ watch - dob.obj.gsub!(/<a href=".+?">(.+?)<\/a>/,'\1') - dob.obj.gsub!(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links - wordlist=dob.obj.scan(/\S+/) - dob.obj=tidywords(wordlist).join(' ').strip - @rcdc=true if @rcdc==false \ - and (dob.obj =~/~metadata/ or dob =~/#{Mx[:lv_o]}1:meta#{Mx[:lv_x]}\s*Document Information/) #fix Mx[:lv_o] - if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ - if defined? dob.ocn and dob.ocn =~/\d+/ - @p_num=SiSU_ODF_format::Paragraph_number.new(dob.ocn) - end - if dob.is=~/heading|para|group|verse|code|table|break/ # extend, include other types - odf_structure(@md,dob) - end - dob.obj.gsub!(/<!.+!>/,' ') if dob.obj ## Clean Prepared Text - dob.obj.gsub!(/#{Mx[:tc_o]}.+?#{Mx[:tc_c]}/,' ') if dob.obj ## CHECK Clean Prepared Text - dob.obj.gsub!(/<:\S+>/,' ') if dob.obj ## Clean Prepared Text - end - end - end - def pre - table=if @md.flag_tables - x=<<WOK - <style:style style:name="Table1" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> - <style:style style:name="Table1.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> - <style:style style:name="Table1.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> - <style:style style:name="Table1.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> - <style:style style:name="Table1.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> - <style:style style:name="Table1.E" style:family="table-column"><style:table-column-properties style:column-width="3.399cm" style:rel-column-width="13107*"/></style:style> - <style:style style:name="Table1.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> - <style:style style:name="Table1.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> - <style:style style:name="Table1.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> - <style:style style:name="Table2" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> - <style:style style:name="Table2.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> - <style:style style:name="Table2.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> - <style:style style:name="Table2.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> - <style:style style:name="Table2.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> - <style:style style:name="Table2.E" style:family="table-column"><style:table-column-properties style:column-width="3.999cm" style:rel-column-width="13107*"/></style:style> - <style:style style:name="Table2.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> - <style:style style:name="Table2.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> - <style:style style:name="Table2.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> - <style:style style:name="Table2.I" style:family="table-column"><style:table-column-properties style:column-width="1.8887cm" style:rel-column-width="7281*"/></style:style> - <style:style style:name="Table2.J" style:family="table-column"><style:table-column-properties style:column-width="1.6999cm" style:rel-column-width="6553*"/></style:style> - <style:style style:name="Table2.K" style:family="table-column"><style:table-column-properties style:column-width="1.5453cm" style:rel-column-width="5957*"/></style:style> - <style:style style:name="Table2.L" style:family="table-column"><style:table-column-properties style:column-width="1.416cm" style:rel-column-width="5461*"/></style:style> - <style:style style:name="Table2.M" style:family="table-column"><style:table-column-properties style:column-width="1.307" style:rel-column-width="5041*"/></style:style> - <style:style style:name="Table2.N" style:family="table-column"><style:table-column-properties style:column-width="1.214cm" style:rel-column-width="4681*"/></style:style> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - else '' - end - breakpage=if @md.pagenew \ - or @md.pagebreak - ' fo:break-before="page"' - else '' - end - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0"><office:scripts/> -<office:font-face-decls><style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-adornments="Book" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="Inconsolata" svg:font-family="Inconsolata" style:font-adornments="Regular" style:font-pitch="fixed"/><style:font-face style:name="Liberation Mono" svg:font-family="'Liberation Mono'" style:font-adornments="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-adornments="ExtraLight" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/><style:font-face style:name="DejaVu Serif" svg:font-family="'DejaVu Sans'" style:font-adornments="ExtraLight" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/></office:font-face-decls> -<office:automatic-styles> -#{table} - <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false"/></style:style> - <style:style style:name="P6" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-before="page"/></style:style> - <style:style style:name="P7" style:family="paragraph" style:parent-style-name="Table_20_Contents"><style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P8" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-before="page"/></style:style> - <style:style style:name="P9" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-after="page"/></style:style> - <style:style style:name="P10" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> - <style:style style:name="P11" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="1cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P12" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="2cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P13" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="3cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P14" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="4cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P15" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="5cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P16" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="6cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P17" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="7cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P18" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="8cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P19" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="8cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> - <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false"/><style:text-properties style:font-name="DejaVu Sans Mono" fo:font-size="9pt" fo:font-weight="normal" fo:background-color="#e6e6e6"/></style:style> - <style:style style:name="T1" style:family="text"><style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/></style:style> - <style:style style:name="T2" style:family="text"><style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/></style:style> - <style:style style:name="T3" style:family="text"><style:text-properties style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/></style:style> - <style:style style:name="T4" style:family="text"><style:text-properties style:text-position="super 58%"/></style:style> - <style:style style:name="T5" style:family="text"><style:text-properties style:text-position="sub 58%"/></style:style> - <style:style style:name="T6" style:family="text"><style:text-properties style:font-name="Courier 10 Pitch" fo:font-size="12pt"/></style:style> - <style:style style:name="T7" style:family="text"><style:text-properties style:font-name="DejaVu Sans Mono" fo:font-size="10pt" fo:font-weight="normal" fo:background-color="#e6e6e6"/></style:style> - <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics"><style:graphic-properties style:wrap="none" style:horizontal-pos="left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/></style:style> - <style:style style:name="gr1" style:family="graphic"><style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:image-opacity="100%" style:mirror="none" style:run-through="background" style:wrap="none" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" style:flow-with-text="false"/></style:style> - <style:style style:name="gr2" style:family="graphic"><style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:image-opacity="100%" style:mirror="none" style:run-through="background" style:wrap="none" style:vertical-pos="middle" style:vertical-rel="baseline" style:horizontal-pos="left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" style:flow-with-text="false"/></style:style> -</office:automatic-styles> -<office:body> - <office:text><office:forms form:automatic-focus="false" form:apply-design-mode="false"/> - <text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - @@odf[:head] << x - end - def post - end - def publish - divider='=' - content=[] - data=@data - content << @@odf[:open] - content << @@odf[:head] - content << @@odf[:body] - content << @@odf[:metadata] - content << @@odf[:tail] - Output.new(content,@md,@env).odf - @@odf[:head],@@odf[:body],@@odf[:tail],@@odf[:metadata]=[],[],[],[] - end - end - class Output <Source - def initialize(content,md,env) - @content,@md,@env=content,md,env - end - def odf #%odf output - SiSU_Env::SiSU_file.new(@md).mkdir - header=SiSU_ODF_format::ODT_head.new(@md) - filename="#{@env.path.odf}/META-INF/manifest.xml" - od=File.new(filename,'w+') - od << header.meta_inf_manifest_xml - od.close - filename="#{@env.path.odf}/meta.xml" - od=File.new(filename,'w+') - od << header.meta_xml - od.close - filename="#{@env.path.odf}/settings.xml" - od=File.new(filename,'w+') - od << header.settings_xml - od.close - filename="#{@env.path.odf}/styles.xml" - od=File.new(filename,'w+') - od << header.styles_xml - od.close - filename="#{@env.path.odf}/mimetype" - od=File.new(filename,'w+') - od << header.mimetype - od.close - filename="#{@env.path.odf}/content.xml" - od=File.new(filename,'w+') - @content.each do |para| # this is a hack - od.puts para unless para =~/\A\s*\Z/ - end - od.close - opendoc=@md.fn[:odf] - system(" - cd #{@env.path.odf} - zip -qr #{opendoc} * - mv #{opendoc} #{@env.path.output}/#{@md.fnb}/. - cd #{Dir.pwd} - ") - end - end - end -end -__END__ -todo: -* table of contents -* page header/footer? - -done: -headings * -footnotes * -bold underscore italics strikethrough * -superscript subscript * -extended ascii set * -indents * - [autonomy_markup0.sst] * -groups - poem * - code * - tables -images -bullet -line break -page break - -notes?? [you could add a note number for every object/paragraph!] - - cd(@env.path.odf) - structure=[] - Find.find(@env.path.odf) do |f| - structure << puts f - end - open(opendoc,'wb') do |f| - zip=Zlib::ZipWriter.new(f) - structure.each |z| do - zip << z - end - zip.close - end - #zip -qr #{opendoc} * - mv(opendoc,"#{@env.path.output}/#{@md.fnb}/.") - cd(Dir.pwd) -● -<text:span text:style-name="T6">●</text:span> #bullet -dob.obj.gsub!(/^(#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]})\s*#{Mx[:gl_bullet]}/,'\1 <text:span text:style-name="T6">·</text:span> ') #bullet -dob.obj.gsub!(/^#{Mx[:gl_bullet]}/,'<text:span text:style-name="T6">·</text:span> ') #bullet diff --git a/lib/sisu/v2/odf_format.rb b/lib/sisu/v2/odf_format.rb deleted file mode 100644 index 1b5f2e9b..00000000 --- a/lib/sisu/v2/odf_format.rb +++ /dev/null @@ -1,468 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: opendocument formatting, default opendocument template - -=end -module SiSU_ODF_format - require "#{SiSU_lib}/param" # param.rb - include SiSU_Param - include SiSU_Viz - class Paragraph_number - def initialize(paranum) - @paranum=/(\d+)/m.match(paranum)[1] - end - def display - @paranum.gsub(/(\d+)/,'<font size="1" color="#777777"> \1</font>') - end - def name - @paranum.gsub(/(\d+)/,'<a name="\1"></a>') - end - def goto - @paranum.gsub(/(\d+)/,'<a href="#\1">') - end - end - class Format_text_object - def initialize(md,t_o) - @md,@t_o=md,t_o - if t_o.class==Hash - @txt =t_o[:txt] || nil - else - p t_o.class - p caller - end - rgx=/#{Mx[:en_a_o]}\d+\s+(.+?)#{Mx[:en_a_c]}/ - @txt.gsub!(rgx,'\1') if @txt =~rgx - @vz=SiSU_Env::Get_init.instance.skin - end - def scr_endnote_body - "<endnote>#{@txt}</endnote> " - end - def heading_body1 - end - def heading_body2 - end - def heading_body3 - end - def heading_body4 - end - def heading_body5 - end - def heading_body6 - end - end - class Table - @@tablehead,@@table_counter=0,0 #reinitialise on new file - @@tablefoot=[] #watch - @@fns='' - def initialize(md,dob) - @md,@dob,@txt,@vz=md,dob,dob.obj,SiSU_Env::Get_init.instance.skin - if @md.fns != @@fns - @@table_counter=0 - @@fns=@md.fns - end - end - def table_head_open(count) - type=if @dob.head_; 1 - else 2 - end - alpha=case @dob.cols - when 1; 'A' - when 2; 'B' - when 3; 'C' - when 4; 'D' - when 5; 'E' - when 6; 'F' - when 7; 'G' - when 8; 'H' - when 9; 'I' - when 10; 'J' - when 11; 'K' - when 12; 'L' - when 13; 'M' - when 14; 'N' - else 'D' - end - %{<table:table table:name="Table#{count}" table:style-name="Table#{type}">#{@br}} + - %{<table:table-column table:style-name="Table#{type}.#{alpha}" table:number-columns-repeated="#{@dob.cols}"/>#{@br}} - end - def table_close(tablefoot='') - '</table:table>' - end - def table_tag_cell(str,i) - txt_name_cell=if i==0 \ - and @dob.head_ - 'Table_20_Heading' - else 'P7' - end - str.gsub!(/^~$/,'') # tilde / empty cell - %{<table:table-cell office:value-type="string">#{@br}} + - %{<text:p text:style-name="#{txt_name_cell}">#{@br}} + - %{#{str}} + - %{</text:p>#{@br}} + - %{</table:table-cell>#{@br}} - end - def table_tag_row(str,i) - %{<table:table-row>#{@br}} + - %{#{str}} + - %{</table:table-row>#{@br}} - end - def table_tag_row_dump(str,i) - txt_name_row=if i==0 \ - and @dob.head_ - 'Table_20_Heading' - else 'P7' - end - %{<table:table-row>#{@br}} + - %{<table:table-cell office:value-type="string">#{@br}} + - %{<text:p text:style-name="#{txt_name_row}">#{@br}} - %{#{str}} + - %{</text:p>#{@br}} + - %{</table:table-cell>#{@br}} + - %{</table:table-row>#{@br}} - end - def table_row(row,i) - row='' if row =~/^<!$/ - m=row[/<!f(.+?)!>/,1] - @@tablefoot << m if m - row.gsub!(/<!f.+?!>/,'') - @cells=[] - row.split(/\s*#{Mx[:tc_p]}/).each do |cell| - @cells << table_tag_cell(cell,i) - end - row=@cells.join - row=table_tag_row(row,i) - row - end - def table - @@table_counter+=1 - table_head_open(@@table_counter) - @table=[] - @dob.obj.split(/\s*#{Mx[:tc_c]}/).each_with_index do |r,i| - @table << table_row(r,i) - end - @dob.obj= table_head_open(@@table_counter) + @table.join + table_close - @dob - end - end - class ODT_head - def initialize(md) - @md=md - @generator="#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" - end - def meta_inf_manifest_xml - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd"> -<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"> - <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:full-path="/"/> - <manifest:file-entry manifest:media-type="application/vnd.sun.xml.ui.configuration" manifest:full-path="Configurations2/"/> - <manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/"/> - <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/> - <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/> - <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/> - <manifest:file-entry manifest:media-type="" manifest:full-path="Thumbnails/thumbnail.png"/> - <manifest:file-entry manifest:media-type="" manifest:full-path="Thumbnails/"/> - <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/> -</manifest:manifest> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - end - def meta_xml - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.0"> - <office:meta> - <meta:generator>#{@generator}</meta:generator> - <meta:creation-date>#{@md.generated}</meta:creation-date> - <dc:date>#{@md.generated}</dc:date> - <dc:language>en-US</dc:language> - <meta:editing-cycles>4</meta:editing-cycles> - </office:meta> -</office:document-meta> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - end - def settings_xml - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.0"> - <office:settings> - <config:config-item-set config:name="ooo:view-settings"> - <config:config-item config:name="ViewAreaTop" config:type="int">0</config:config-item> - <config:config-item config:name="ViewAreaLeft" config:type="int">0</config:config-item> - <config:config-item config:name="ViewAreaWidth" config:type="int">21459</config:config-item> - <config:config-item config:name="ViewAreaHeight" config:type="int">22068</config:config-item> - <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> - <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> - <config:config-item-map-indexed config:name="Views"> - <config:config-item-map-entry> - <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> - <config:config-item config:name="ViewLeft" config:type="int">3002</config:config-item> - <config:config-item config:name="ViewTop" config:type="int">11008</config:config-item> - <config:config-item config:name="VisibleLeft" config:type="int">0</config:config-item> - <config:config-item config:name="VisibleTop" config:type="int">0</config:config-item> - <config:config-item config:name="VisibleRight" config:type="int">21458</config:config-item> - <config:config-item config:name="VisibleBottom" config:type="int">22066</config:config-item> - <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> - <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> - <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> - </config:config-item-map-entry> - </config:config-item-map-indexed> - </config:config-item-set> - <config:config-item-set config:name="ooo:configuration-settings"> - <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> - <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> - <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> - <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> - <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> - <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> - <config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> - <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> - <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> - <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> - <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> - <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> - <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> - <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> - <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> - <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> - <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> - <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> - <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> - <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> - <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> - <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> - <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> - <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> - <config:config-item config:name="PrinterName" config:type="string"/> - <config:config-item config:name="PrintFaxName" config:type="string"/> - <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> - <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> - <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> - <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> - <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> - <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> - <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> - <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> - <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> - <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> - <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> - <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> - <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> - <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> - </config:config-item-set> - </office:settings> -</office:document-settings> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - end - def styles_xml - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0"> - <office:font-face-decls> - <style:font-face style:name="HG Mincho Light J" svg:font-family="'HG Mincho Light J', 'MS Mincho', 'HG Mincho J', 'HG Mincho L', 'HG Mincho', Mincho, 'MS PMincho', 'HG Mincho Light J', 'MS Gothic', 'HG Gothic J', 'HG Gothic B', 'HG Gothic', Gothic, 'MS PGothic', 'Andale Sans UI', 'Arial Unicode MS', 'Lucida Sans Unicode', Tahoma" style:font-pitch="variable"/> - <style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/> - <style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/> - <style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/> - <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> - </office:font-face-decls> - <office:styles> - <style:default-style style:family="graphic"> - <style:graphic-properties draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> - <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> - <style:tab-stops/> - </style:paragraph-properties> - <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none"/> - </style:default-style> - <style:default-style style:family="paragraph"> - <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> - <style:text-properties style:use-window-font-color="true" style:font-name="Nimbus Roman No9 L" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Nimbus Sans L" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Nimbus Sans L" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> - </style:default-style> - <style:default-style style:family="table"> - <style:table-properties table:border-model="collapsing"/> - </style:default-style> - <style:default-style style:family="table-row"> - <style:table-row-properties fo:keep-together="auto"/> - </style:default-style> - <style:style style:name="Standard" style:family="paragraph" style:class="text"/> - <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"> - <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm"/> - </style:style> - <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"> - <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/> - <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="14pt" style:font-name-asian="HG Mincho Light J" style:font-size-asian="14pt" style:font-name-complex="Tahoma" style:font-size-complex="14pt"/> - </style:style> - <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="1"> - <style:text-properties fo:font-size="120%" fo:font-weight="bold" style:font-size-asian="120%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="2"> - <style:text-properties fo:font-size="115%" fo:font-weight="bold" style:font-size-asian="115%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="3"> - <style:text-properties fo:font-size="110%" fo:font-weight="bold" style:font-size-asian="110%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="4"> - <style:text-properties fo:font-size="100%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="100%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="100%" style:font-style-complex="italic" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Heading_20_5" style:display-name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="5"> - <style:text-properties fo:font-size="90%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="90%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="90%" style:font-style-complex="italic" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Heading_20_6" style:display-name="Heading 6" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="6"> - <style:text-properties fo:font-size="80%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="80%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="80%" style:font-style-complex="italic" style:font-weight-complex="bold"/> - </style:style> - <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"> - <style:paragraph-properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="-0.499cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> - <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/> - </style:style> - <style:style style:name="Footnote_20_Symbol" style:display-name="Footnote Symbol" style:family="text"/> - <style:style style:name="Footnote_20_anchor" style:display-name="Footnote anchor" style:family="text"> - <style:text-properties style:text-position="super 58%"/> - </style:style> - <style:style style:name="Graphics" style:family="graphic"> - <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/> - </style:style> - <text:outline-style> - <text:outline-level-style text:level="1" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="2" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="3" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="4" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="5" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="6" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="7" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="8" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="9" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - <text:outline-level-style text:level="10" style:num-format=""> - <style:list-level-properties text:min-label-distance="0.381cm"/> - </text:outline-level-style> - </text:outline-style> - <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_20_Symbol" text:citation-body-style-name="Footnote_20_anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> - <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> - <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> - </office:styles> - <office:automatic-styles> - <style:page-layout style:name="pm1"> - <style:page-layout-properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> - <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> - </style:page-layout-properties> - <style:header-style/> - <style:footer-style/> - </style:page-layout> - </office:automatic-styles> - <office:master-styles> - <style:master-page style:name="Standard" style:page-layout-name="pm1"/> - </office:master-styles> -</office:document-styles> -WOK - x.strip! - x.gsub!(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - end - def mimetype - x=<<WOK -application/vnd.oasis.opendocument.text -WOK - x.strip! - end - end - class Format_obj_break - def initialize(md,t_o) - @md,@t_o=md,t_o - end - def br_page - @t_o.obj='<text:p text:style-name="P8"> </text:p>' - @t_o - end - def obj_sep #center later - sep='--- ' - @t_o.obj=%{<text:p text:style-name="P1">#{sep*20}</text:p>} - @t_o - end - end - class XML - end -end -__END__ diff --git a/lib/sisu/v2/options.rb b/lib/sisu/v2/options.rb deleted file mode 100644 index 4997e35d..00000000 --- a/lib/sisu/v2/options.rb +++ /dev/null @@ -1,217 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: SiSU information Structuring Universe, command line options - parsing - -=end -module SiSU_commandline - require "#{SiSU_lib}/sysenv" # sysenv.rb - class Options - attr_accessor :cmd,:mod,:files,:fns,:fnb,:fnc,:fncb,:what - def initialize(a) - @cmd,@files,@fns,@fnb,@fnc,@fncb,@what,c,w,s='','','','','','','','','','','' - @files,@mod,m,f,z,ca=[],[],[],[],[],[] - @env=SiSU_Env::Info_env.new - shortcut=SiSU_Env::Info_processing_flag.new - a.each do |x| - y=case x - when /0/ - (x=~/^-1\S+/) \ - ? x.gsub(/^-0(\S+)/,shortcut.cf_0 + ' -\1') \ - : x.gsub(/^-0/,shortcut.cf_0 + ' ') - when /1/ - (x=~/^-1\S+/) \ - ? x.gsub(/^-1(\S+)/,shortcut.cf_1 + ' -\1') \ - : x.gsub(/^-1/,shortcut.cf_1 + ' ') - when /2/ - (x=~/^-2\S+/) \ - ? x.gsub(/^-2(\S+)/,shortcut.cf_2 + ' -\1') \ - : x.gsub(/^-2/,shortcut.cf_2 + ' ') - when /3/ - (x=~/^-3\S+/) \ - ? x.gsub(/^-3(\S+)/,shortcut.cf_3 + ' -\1') \ - : x.gsub(/^-3/,shortcut.cf_3 + ' ') - when /4/ - (x=~/^-4\S+/) \ - ? x.gsub(/^-4(\S+)/,shortcut.cf_4 + ' -\1') \ - : x.gsub(/^-4/,shortcut.cf_4 + ' ') - when /5/ - (x=~/^-5\S+/) \ - ? x.gsub(/^-5(\S+)/,shortcut.cf_5 + ' -\1') \ - : x.gsub(/^-5/,shortcut.cf_5 + ' ') - when /6/ - (x=~/^-6\S+/) \ - ? x.gsub(/^-6(\S+)/,shortcut.cf_5 + ' -\1') \ - : x.gsub(/^-6/,shortcut.cf_5 + ' ') - else x - end - s << " #{y}" unless y.empty? - end - s.strip! - a=s.split(/\s+/) - a.each do |x| - if x =~/^-[a-z0-5]+/i \ - or x =~/^--\S+/ - if x =~/^-([a-z0-5]+)/i; c << $1 - end - if x =~/^--\S+/; m << x - end - elsif x =~ /(?:\.(?:(?:-|ssm\.)?sst(?:\.xml)?|ssm|ssi|sx[sdn]\.xml|s[1-3]|kdi|ssp)|\S+?\.ss[mt]\.zip|sisupod(\.zip)?)$/ - if x =~/^(?:https?|file):\/\/\S+/; f << x - elsif FileTest.file?(x); f << x - else puts "file not found: #{x}" - end - elsif x =~ /\.termsheet\.rb$/ - if FileTest.file?(x); f << x - else puts "file not found: #{x}" - end - else w=x - puts "#{x} in #{a.join(' ')}?" - end - end - unless m.empty? - m.each do |m| - case m - when /^--(?:color-toggle)$/; c=c+'c' - when /^--(?:configure)$/; c=c+'CC' - when /^--(?:dal?|machine|abstraction|abs)$/; c=c+'m' - when /^--(?:txt|text|plaintext)$/; c=c+'t' - when /^--(?:html)$/; c=c+'h' - when /^--(?:epub)$/; c=c+'e' - when /^--(?:od[ft])$/; c=c+'o' - when /^--(?:pdf)$/; c=c+'p' - when /^--(?:concordance|wordmap)$/; c=c+'w' - when /^--(?:manpage)$/; c=c+'i' - when /^--(?:texinfo)$/; c=c+'I' - when /^--(?:xhtml)$/; c=c+'b' - when /^--(?:xml-sax)$/; c=c+'x' - when /^--(?:xml-dom)$/; c=c+'X' - when /^--(?:digest)$/; c=c+'N' - when /^--(?:termsheet)$/; c=c+'T' - when /^--(?:manifest)$/; c=c+'y' - when /^--(?:sqlite)$/; c=c+'d' - when /^--(?:pg|pg?sql|postgresql)$/; c=c+'D' - when /^--(?:remote|rsync)$/; c=c+'R' - when /^--(?:scp)$/; c=c+'r' - when /^--(?:source)$/; c=c+'s' - when /^--(?:sisupod|pod)$/; c=c+'S' - when /^--(?:git)$/; c=c+'g' - when /^--(?:urls)$/; c=c+'U' - when /^--(?:zap|delete)$/; c=c+'Z' - when /^--(?:sample-search-form)$/; c=c+'F' - when /^--(?:webserv|webrick)$/; c=c+'W' - when /^--(?:maintenance|keep-processing-files)$/; c=c+'M' - when /^--(?:verbose[=-]3)$/; c=c+'VM' - when /^--(?:verbose[=-]2|Verbose|VERBOSE)$/; c=c+'V' - when /^--(?:verbose(?:[=-]1)?)$/; c=c+'v' - when /^--(?:verbose[=-]0|quiet|silent)$/; c=c+'q' - else @mod << m - end - end - end - unless c.empty? - c.gsub!(/-/,'') - c.scan(/CC|\S/) {|x| ca << x} - @cmd= '-' + ca.uniq.join - end - unless w.empty? ; @what=w - end - @files << f - @files.flatten! - if @files.length > 0 \ - and @cmd.empty? \ - and @mod.length==0 #% if no other action called on filename given, default is sisu -0 [filename(s)] configured as flag default - @cmd=shortcut.cf_0 - end - SiSU_Screen::Ansi.new(@cmd,"\tsisu " + @cmd + ' ' + @mod.join(' ') + ' ' + @files.join(' ') + "\n").print_brown if @cmd =~/[vVM]/ - @files.uniq! - end - def cmd - @cmd - end - def mod - @mod - end - def fns - @fns - end - def what - @what - end - def fnb - unless fns.empty? - fns[/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/,1] - end - end - def fnc - @fnc=if @fns =~/\.(?:ssm\.sst|ssm)$/; fnb + '.ssm.sst' - else @fns - end - end - def fncb - @fncb=if @fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; fnb + '.ssm.sst' - else @fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') - end - end - end -end -__END__ -note usually named @opt -is carried in Param usually as @md -@opt is a subset of @md -where @md is passed, contents of @opt are available -passing @opt as well is duplication -check for fns & fnb diff --git a/lib/sisu/v2/plaintext.rb b/lib/sisu/v2/plaintext.rb deleted file mode 100644 index ba146978..00000000 --- a/lib/sisu/v2/plaintext.rb +++ /dev/null @@ -1,419 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: plaintext text generation, stripped plaintext output (unix, - linefeed) - -=end -module SiSU_Plaintext - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - require "#{SiSU_lib}/plaintext_format" # plaintext_format.rb - include SiSU_Plaintext_format - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_Param - include SiSU_Viz - pwd=Dir.pwd - @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 - @@tablefoot='' - class Source - def initialize(opt) - @opt=opt - unless @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/ - puts "#{sf} not a processed file type" - end - end - def read - begin - md=SiSU_Param::Parameters.new(@opt).get - env=SiSU_Env::Info_env.new(@opt.fns) - unless @opt.cmd =~/q/ - path=env.path.output_tell - tool=(@opt.cmd =~/[MVv]/) \ - ? "#{env.program.text_editor} #{path}/#{md.fnb}/#{md.fn[:plain]}" \ - : @opt.fns - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Plaintext',tool).green_hi_blue \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Plaintext',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{path}/#{md.fnb}/#{md.fn[:plain]}").flow if @opt.cmd =~/[MV]/ - end - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here - wrap_width=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 - else 78 - end - #wrap_width=(defined? md.make.plaintext_wrap) ? md.make.plaintext_wrap : 78 - SiSU_Plaintext::Source::Scroll.new(dal_array,md,wrap_width).songsheet - SiSU_Env::Info_skin.new(md).select #watch - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - private - class Scroll <Source - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - @@endnotes={ :para=>[],:end=>[] } - def initialize(data,md,wrap_width) - @data,@md,@wrap_width=data,md,wrap_width - @brace_url=SiSU_Viz::Skin.new.url_decoration - @tab="\t" - @@endnotes_=case md.mod.inspect - when /--footnote/; false - when /--endnote/; true - else true - end - @br=case md.mod.inspect - when /--dos/; "\r\n" - when /--unix/; "\n" - else "\n" - end - @plaintext={ :body=>[],:open=>[],:close=>[],:head=>[],:metadata=>[],:tail=>[] } - end - def songsheet - plaintext=markup(@data) - publish(plaintext) - end - # Used for extraction of endnotes from paragraphs - def extract_endnotes(dob='') - notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/) - @n=[] - notes.flatten.each do |n| #high cost to deal with <br> appropriately within plaintext, consider - n=n.dup.to_s - if n =~/#{Mx[:br_line]}|#{Mx[:br_nl]}/ - fix = n.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/) #watch #added - fix.each do |x| - unless x.empty?; @n << x - end - end - else @n << n - end - end - notes=@n.flatten - notes.each do |e| - util=(e.to_s =~/^\[[\d*+]+\]:/) \ - ? (SiSU_text_utils::Wrap.new(e.to_s,@wrap_width,4,1)) \ - : (SiSU_text_utils::Wrap.new(e.to_s,@wrap_width,1,1)) - wrap=util.line_wrap - if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m - wrap.gsub!(/^(\s*)([\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB -\\1[\\2]: \\3 -GSUB - ) - else - wrap.gsub!(/^(.+)\Z/m, <<GSUB -\\1 -GSUB - ) - end - @@endnotes[:para] << "-#{wrap}" - @@endnotes[:end] << '' << wrap - end - @@endnotes - end - def plaintext_metadata - array=Metadata::Summary.new(@md).plaintext.metadata - array.each do |meta| - tag,inf=meta.scan(/^.+?:\s|.+/) - if tag and inf - util=SiSU_text_utils::Wrap.new(inf,@wrap_width,15,1) - txt=util.line_wrap - @plaintext[:metadata] <<<<WOK - -#{@tab}#{tag}#{txt} -WOK - end - end - end - def plaintext_tail - SiSU_Env::Info_skin.new(@md).select - env=SiSU_Env::Info_env.new(@md.fns) - vz=SiSU_Env::Get_init.instance.skin - base_url="#{env.url.root}/#{@md.fnb}" - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[: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 - @plaintext[:tail] <<<<WOK -#{@br} -plaintext (plain text): - #{base_url}/#{@md.fn[:plain]}#{@br} -Other versions of this document: #{@br} -manifest: - #{base_url}/#{@md.fn[:manifest]}#{@br} -at: - #{env.url.root}#{@br} - -#{sc} -* #{generator} -* #{rubyv} -* #{lastdone} -* SiSU #{vz.url_sisu} -WOK - end - def plaintext_structure(dob='') #% Used to extract the structure of a document - lv=n=n3=nil - if dob.is=='heading' - lv=dob.ln - n=lv - 1 - n3=lv + 2 - end - util=nil - wrapped=if dob.is =='para' \ - or dob.is=='heading' - if dob.is=='para' - if dob.indent =~/[1-9]/ - util=if dob.bullet_ - SiSU_text_utils::Wrap.new("* #{dob.obj}",@wrap_width,dob.indent.to_i*2) - else SiSU_text_utils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2) - end - else - util=if dob.bullet_ - SiSU_text_utils::Wrap.new("* #{dob.obj}",@wrap_width,0) - else SiSU_text_utils::Wrap.new(dob.obj,@wrap_width,0) - end - end - else util=SiSU_text_utils::Wrap.new(dob.obj,@wrap_width,0) - end - util.line_wrap - end - if lv - times=wrapped.length - times=@wrap_width if times > @wrap_width - @plaintext[:body] << case lv - when 1; wrapped.upcase << @br << Px[:lv1]*times << @br - when 2; wrapped.upcase << @br << Px[:lv2]*times << @br - when 3; wrapped.upcase << @br << Px[:lv3]*times << @br - #when 2..3; wrapped.upcase << @br << Px[:lv2_3]*times << @br - when 4; wrapped.upcase << @br << Px[:lv4]*times << @br - when 5; wrapped.upcase << @br << Px[:lv5]*times << @br - when 6; wrapped.upcase << @br << Px[:lv6]*times << @br - #when 5..6; wrapped.upcase << @br << Px[:lv5_6]*times << @br - end - else - @plaintext[:body] << wrapped << @br # main text, contents, body KEEP - end - if @@endnotes[:para] \ - and not @@endnotes_ - @plaintext[:body] << @br - @@endnotes[:para].each {|e| @plaintext[:body] << e << @br} - elsif @@endnotes[:para] \ - and @@endnotes_ - @plaintext[:body] << @br*2 - end - @@endnotes[:para]=[] - end - def markup(data) # Used for major markup instructions - dir=SiSU_Env::Info_env.new(@md.fns) - @data_mod,@endnotes,@level,@cont,@copen,@plaintext_contents_close=Array.new(6){[]} - (0..6).each { |x| @cont[x]=@level[x]=false } - (4..6).each { |x| @plaintext_contents_close[x]='' } - plaintext_tail #($1,$2) - plaintext_metadata - table_message='[table omitted, see other document formats]' - fix=[] - data.each do |dob| - dob.obj.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{@br}#{table_message}") #fix - dob.obj.gsub!(/.+?#{Mx[:gl_o]}-##{Mx[:gl_c]}/,'') # remove dummy headings (used by html) #check also [~-]# - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, - "#{Px[:bold_o]}\\1#{Px[:bold_c]}") - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, - "#{Px[:italics_o]}\\1#{Px[:italics_c]}") - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, - "#{Px[:underscore_o]}\\1#{Px[:underscore_c]}") - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, - "#{Px[:subscript_o]}\\1#{Px[:subscript_c]}") - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, - "#{Px[:superscript_o]}\\1#{Px[:superscript_c]}") - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/, - "#{Px[:insert_o]}\\1#{Px[:insert_c]}") - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/, - "#{Px[:cite_o]}\\1#{Px[:cite_c]}") - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/, - "#{Px[:strike_o]}\\1#{Px[:strike_c]}") - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, - "#{Px[:monospace_o]}\\1#{Px[:monospace_c]}") - unless dob.is=='code' - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,'\1') - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1') - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1 [link: <\2>]') - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/,'\1 [link: local image]') - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"#{@brace_url.txt_open}\\1#{@brace_url.txt_close}") - extract_endnotes(dob) - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'[^\1]') # endnote marker marked up - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'[^\1]') # endnote marker marked up - dob.obj.gsub!(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<') - dob.obj.gsub!(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>') - dob.obj.gsub!(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&') - dob.obj.gsub!(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!') - dob.obj.gsub!(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#') - dob.obj.gsub!(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*') - dob.obj.gsub!(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-') - dob.obj.gsub!(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/') - dob.obj.gsub!(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_') - dob.obj.gsub!(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{') - dob.obj.gsub!(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}') - dob.obj.gsub!(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~') - dob.obj.gsub!(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©') - end - if dob.of=='group' # watch - dob.obj.gsub!(/#{Mx[:gl_o]}●#{Mx[:gl_c]}/,"* ") - dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n") - else dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n\n") - end - if dob.is=='code' - dob.obj.gsub!(/(^|[^}])_([<>])/m,'\1\2') # _> _< - dob.obj.gsub!(/(^|[^}])_([<>])/m,'\1\2') # _<_< - end - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1') - dob.obj.gsub!(/<a href=".+?">(.+?)<\/a>/m,'\1') - dob.obj.gsub!(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'') # remove name links - dob.obj.gsub!(/ |#{Mx[:nbsp]}/,' ') # decide on - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]') #"[ #{dir.url.images_local}\/\\1 ]") - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]') - dob.obj.gsub!(/(?:^|[^_\\])\{\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*\}\S+/,'[image: "\1"]') - wordlist=dob.obj.scan(/\S+/) - if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ - if defined? dob.ocn and dob.ocn.to_s =~/\d+/ - paranum=dob.ocn.to_s - @p_num=SiSU_Plaintext_format::Paragraph_number.new(paranum) - end - if dob.is=='heading' \ - or dob.is=='para' - plaintext_structure(dob) - elsif dob.is=='group' \ - or dob.is=='verse' \ - or dob.is=='code' \ - or dob.is=='table' - @plaintext[:body] << dob.obj << @br - elsif dob.is=='break' - sp=' ' - ln='-' - @plaintext[:body] <<=if dob.obj==Mx[:br_page] \ - or dob.obj==Mx[:br_page_new] - "#{@br}#{ln*40}#{@br*2}" - elsif dob.obj ==Mx[:obj_ln_sep] - "#{@br}#{sp*20}* * *#{@br*2}" - end # following empty line (@br) missing, fix - end - dob='' if (dob.obj =~/<a name="n\d+">/ \ - and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote - dob.obj.gsub!(/<!.+!>/,' ') if dob ## Clean Prepared Text - dob.obj.gsub!(/<:\S+>/,' ') if dob ## Clean Prepared Text - end - end - @plaintext - end - def publish(plaintext) - divider='=' - content=[] - content << plaintext[:open] - content << plaintext[:head] - content << plaintext[:body] - content << @@endnotes[:end] if @@endnotes_ - content << "#{@br}#{divider*@wrap_width}#{@br}" - content << plaintext[:metadata] - content << "#{@br}#{divider*@wrap_width}#{@br}" if @md.stmp =~/\w+/ #not used? - content << plaintext[:tail] - Output.new(content,@md).plaintext - @@endnotes={ :para=>[],:end=>[] } - end - end - class Output <Source - include SiSU_Param - include SiSU_Env - def initialize(content,md) - @content,@md=content,md - end - def plaintext #%plaintext output - SiSU_Env::SiSU_file.new(@md).mkdir - file_plaintext=SiSU_Env::SiSU_file.new(@md,@md.fn[:plain]).mkfile - @sisu=[] - emptyline=0 - @content.each do |para| # this is a hack - if para.class==Array \ - and para.length > 0 - para.each do |line| - if line - line.gsub!(/\s+$/m,'') - line.gsub!(/^\A[ ]*\Z/m,'') - if line=~/^\A[ ]*\Z/m - emptyline+=1 - else emptyline=0 - end - file_plaintext.puts line if emptyline < 2 #remove extra line spaces (fix upstream) - end - end - else file_plaintext.puts para #unix plaintext # /^([*=-]|\.){5}/ - end - end - file_plaintext.close - end - end - end -end -__END__ -!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# diff --git a/lib/sisu/v2/shared_markup_alt.rb b/lib/sisu/v2/shared_markup_alt.rb deleted file mode 100644 index 52ecfe24..00000000 --- a/lib/sisu/v2/shared_markup_alt.rb +++ /dev/null @@ -1,318 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - #___# - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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/copyleft/gpl.html> - - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -module SiSU_text_representation - class Alter - def initialize(x) - if x.class==String - @t_o,@s=nil,x - else - @t_o,@s=x,x.obj.dup - end - end - def strip_clean_of_extra_spaces # dal output tuned - @s=@s.dup - @s=@s.gsub(/[ ]+([,.;:?](?:$|\s))/,'\1') unless @s =~/#{Mx[:en_a_o]}|#{Mx[:en_b_o]}/ - @s=@s.gsub(/ [ ]+/,' ') - @s=@s.gsub(/^ [ ]+/,'') - @s=@s.gsub(/ [ ]+$/,'') - @s=@s.gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') - @s=@s.gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') - end - def strip_clean_of_markup # text form used in sql db search, used for digest, define rules, make same as in db clean - @s=@s.dup #% same as db clean --> - @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_superscript_o]}(\d+)#{Mx[:fa_superscript_c]}/,'[\1]') - @s=@s.gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'\1') - @s=@s.gsub(/#{Mx[:fa_hilite_o]}(.+?)#{Mx[:fa_hilite_c]}/,'\1') - @s=@s.gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') - @s=@s.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'') # endnote removed - @s=@s.gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'') # endnote removed - @s=@s.gsub(/(?:#{Mx[:nbsp]})+/,' ') - @s=@s.gsub(/(?:#{Mx[:br_nl]})+/,"\n") - @s=@s.gsub(/(?:#{Mx[:br_paragraph]})+/,"\n") - @s=@s.gsub(/(?:#{Mx[:br_line]})+/,"\n") - @s=@s.gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<') - @s=@s.gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>') - @s=@s.gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&') - @s=@s.gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!') - @s=@s.gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#') - @s=@s.gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*') - @s=@s.gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-') - @s=@s.gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/') - @s=@s.gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_') - @s=@s.gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{') - @s=@s.gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}') - @s=@s.gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~') - @s=@s.gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©') - @s=@s.gsub(/\s\s+/,' ') - @s=@s.gsub(/\s\s+/,' ') - @s=@s.strip - end - def semi_revert_markup # used for digest, define rules, make same as in db clean - if @t_o - @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'*{\1}*') - @s=@s.gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'/{\1}/') - @s=@s.gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'_{\1}_') - @s=@s.gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"{\1}"') - @s=@s.gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+') - @s=@s.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-') - @s=@s.gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^{\1}^') - @s=@s.gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,',{\1},') - @s=@s.gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') - @s=@s.gsub(/#{Mx[:en_a_o]}([\d*+]+\s+.+?)#{Mx[:en_a_c]}/,'~{\1}~') # endnote marker marked up - @s=@s.gsub(/#{Mx[:en_b_o]}([\d*+]+\s+.+?)#{Mx[:en_b_c]}/,'~[\1]~') # endnote marker marked up - if @t_o.is=='heading' or @t_o.is=='para' - @s=@s.gsub(/ [ ]+/,' ') - @s=@s.gsub(/(?:#{Mx[:nbsp]})+/,' ') - if @t_o.is=='heading' - @s=@t_o.lv + '~ ' + @s - end - if @t_o.is=='para' - if @t_o.bullet_ - @s='_* ' + @s - end - if @t_o.indent.to_i > 0 - @s="_#{@t_o.indent} " + @s - @s=@s.gsub(/^(_[1-9])\s_\*\s/,'\1* ') - end - end - end - if @t_o.is=='group' or @t_o.is=='code' - @s=@s.gsub(/#{Mx[:nbsp]}/,' ') - @s="#{@t_o.is}{\n\n#{@s}\n\n}#{@t_o.is}" - @s=@s.gsub(/(?:#{Mx[:br_nl]}|\n)+/m,"\n\n") - end - #dealing with poem and verse calls for change in dal, where start and end verse of poem are marked as such - @s=@s.strip - end - @s - end - def html_lite #test whether eventually can be used in db_import replacing shared_html_lite (search for SiSU_Format_Shared) - if @t_o - @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - @s=@s.gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - @s=@s.gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - @s=@s.gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"') - @s=@s.gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+') - @s=@s.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-') - @s=@s.gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>') - @s=@s.gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>') - @s=@s.gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') - if @t_o.is !='code' - if @s =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ - wm=@s.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)|\S+/) - words=urls(wm) - @s=@s.gsub(/.+/m,words) - end - @s=@s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;') - @s=@s.gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - @s=@s.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>') #http ftp matches escaped, no decoration - @s=@s.gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>\3') #special case \{ e.g. \}http://url - @s=@s.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@url_brace.xml_open}<a href="\\1" target="_top">\\1</a>#{@url_brace.xml_close}}) #http ftp matches with decoration - else - @s=@s.gsub(/(^|[^}])_</m,'\1<'); @s.gsub(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters - @s=@s.gsub(/(^|[^}])_</m,'\1<'); @s.gsub(/(^|[^}])_>/m,'\1>') - end - if @t_o.is=='paragraph' - if @t_o.bullet_ - @s=@s - end - if @t_o.indent > 0 - @s=@s - end - end - if @t_o.is=='heading' - @s=@s - end - else - p __FILE__ +':'+ __LINE__.to_s - end - @s - end - end - class Modified_text_plus_Hash_digest - def initialize(md,x) - @md=md - if x.class==String - @t_o,@s=nil,x - else - @t_o,@s=x,x.obj.dup - end - @env ||=SiSU_Env::Info_env.new(@md.fns) - @sha_ =((@env.digest.type =='sha256') ? true : false) - @sha_ ? (require 'digest/sha2') : (require 'digest/md5') - end - def digest(txt) - d=nil - if @sha_ - for hash_class in [ Digest::SHA256 ] - d=hash_class.hexdigest(txt) - end - else - for hash_class in [ Digest::MD5 ] - d=hash_class.hexdigest(txt) - end - end - d - end - def strip_clean_of_markup - def txt - SiSU_text_representation::Alter.new(@s).strip_clean_of_markup - end - def dgst - en_dgst,img_dgst={},{} - txt_dgst=digest(txt) - {:txt=>txt,:dgst_txt=>txt_dgst} - end - self - end - def semi_revert_markup - def txt - SiSU_text_representation::Alter.new(@s).semi_revert_markup - end - def dgst - txt_dgst=digest(txt) - {:txt=>txt,:dgst_txt=>txt_dgst} - end - self - end - def composite - def stripped_clean(txt) - SiSU_text_representation::Alter.new(txt).strip_clean_of_markup - end - def markup_reverted(txt) - SiSU_text_representation::Alter.new(txt).semi_revert_markup - end - def images(imgs) - sys=SiSU_Env::System_call.new - line_image=[] - img_dgst={} - if imgs and imgs.length > 0 - @image_name,@image_dgst,@img=[],[],[] - imgs.each do |i| - image_source=if FileTest.file?("#{@env.path.image_source_local_tex}/#{i}") - @env.path.image_source_local_tex - elsif FileTest.file?("#{@env.path.image_source_remote_tex}/#{i}") - @env.path.image_source_remote_tex - elsif FileTest.file?("#{@env.path.image_source_tex}/#{i}") - @env.path.image_source_tex - else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:", %{"#{i}" missing}, "search locations: #{@env.path.image_source_local_tex}, #{@env.path.image_source_remote_tex} and #{@env.path.image_source_tex}").error2 unless @md.cmd =~/q/ - nil - end - img_type = /\S+\.(png|jpg|gif)/.match(i)[1] - not_found_msg='image not found' - if image_source - para_image = image_source + '/' + i - image_name = i - image_dgst =(@sha_ ? sys.sha256(para_image) : sys.md5(para_image)) - else - image_name = i + ' [image missing]' - image_dgst = '' - end - line_image << {:img_dgst=>image_dgst[1],:img_name=>image_name,:img_type=>img_type} - end - end - line_image - end - def endnotes(en) - en_dgst=[] - if en and en.length > 0 - en.flatten.each do |e| - note_no=e.gsub(/^([\d*+]+)\s+.+/,'\1') - e=digest(stripped_clean(e)) - note_dgst=digest(e) - en_dgst << {:note_number=>note_no,:note_dgst=>note_dgst} - end - end - en_dgst - end - def dgst - if @t_o.of !='comment' and @t_o.of !='structure' and @t_o.of !='layout' - en_dgst,img_dgst={},{} - txt_stripped_dgst=digest(stripped_clean(@t_o)) - txt_markup_reverted_dgst=digest(markup_reverted(@t_o)) - endnotes_dgst=[] - rgx_notes=/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/ - notes=@t_o.obj.scan(rgx_notes) - endnotes_dgst=endnotes(notes) - rgx_image=/#{Mx[:lnk_o]}(\S+\.(?:png|jpg|gif))\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ - imgs=if (@t_o.is=='para' or @t_o.is=='image') \ - and @t_o.obj =~rgx_image - imgs=@t_o.obj.scan(rgx_image).flatten - line_image=images(imgs) - end - dgst={:is=>@t_o.is,:ocn=>@t_o.ocn,:dgst_stripped_txt=>txt_stripped_dgst,:dgst_markedup_txt=>txt_markup_reverted_dgst} - dgst[:endnotes]=endnotes_dgst if endnotes_dgst and endnotes_dgst.length > 0 - dgst[:images]=line_image if line_image and line_image.length > 0 - end - dgst - end - self - end - end -end -__END__ diff --git a/lib/sisu/v2/shared_metadata.rb b/lib/sisu/v2/shared_metadata.rb deleted file mode 100644 index f27cf5ba..00000000 --- a/lib/sisu/v2/shared_metadata.rb +++ /dev/null @@ -1,800 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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/copyleft/gpl.html> - - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -module Metadata - class Summary - attr_accessor :tag,:inf,:class,:attrib - def initialize(md,display_heading=false) - @md,@display_heading=md,display_heading - @tag,@inf,@class,@attrib=nil - end - def metadata_base - meta,tag=[],[] - dir=SiSU_Env::Info_env.new(@md.fns) - base_html="#{dir.url.root}/#{@md.fnb}" - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - language=l[:l] - tr=SiSU_Translate::Source.new(@md,language) - @attrib='md' - if @display_heading - @tag,@inf=%{<b><u>Document Metadata</u></b>},'' - meta << self.meta_para - end - if defined? @md.title.full \ - and @md.title.full=~/\S+/ - @tag,@inf,@class=tr.full_title,@md.title.full,'dc' #1 - meta << self.meta_para - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ - @tag,@inf,@class=tr.author,@md.creator.author,'dc' #2 - meta << self.meta_para - end - if defined? @md.creator.translator \ - and @md.creator.translator=~/\S+/ - @tag,@inf,@class=tr.translator,@md.creator.translator,'ext' - meta << self.meta_para - end - if defined? @md.creator.illustrator \ - and @md.creator.illustrator=~/\S+/ - @tag,@inf,@class=tr.illustrator,@md.creator.illustrator,'ext' - meta << self.meta_para - end - if defined? @md.creator.prepared_by \ - and @md.creator.prepared_by=~/\S+/ - @tag,@inf,@class=tr.prepared_by,@md.creator.prepared_by,'ext' - meta << self.meta_para - end - if defined? @md.creator.digitized_by \ - and @md.creator.digitized_by=~/\S+/ - @tag,@inf,@class=tr.digitized_by,@md.creator.digitized_by,'ext' - meta << self.meta_para - end - if defined? @md.rights.all \ - and @md.rights.all=~/\S+/ - @tag,@inf,@class=tr.rights,@md.rights.all,'dc' #15 - meta << self.meta_para - end - if defined? @md.classify.subject \ - and @md.classify.subject=~/\S+/ - @tag,@inf,@class=tr.subject,@md.classify.subject,'dc' #3 - meta << self.meta_para - end - if defined? @md.notes.description \ - and @md.notes.description=~/\S+/ - @tag,@inf,@class=tr.description,@md.notes.description,'dc' #4 - meta << self.meta_para - end - if defined? @md.publisher \ - and @md.publisher=~/\S+/ - @tag,@inf,@class=tr.publisher,@md.publisher,'dc' #5 - meta << self.meta_para - end - if defined? @md.creator.contributor \ - and @md.creator.contributor=~/\S+/ - @tag,@inf,@class=tr.contributor,@md.creator.contributor,'dc' #6 - meta << self.meta_para - end - if defined? @md.notes.abstract \ - and @md.notes.abstract=~/\S+/ - @tag,@inf,@class=tr.abstract,@md.notes.abstract,'ext' - meta << self.meta_para - end - if defined? @md.date.created \ - and @md.date.created=~/\S+/ - @tag,@inf,@class=tr.date_created,@md.date.created,'dc' #7 - meta << self.meta_para - end - if defined? @md.date.issued \ - and @md.date.issued=~/\S+/ - @tag,@inf,@class=tr.date_issued,@md.date.issued,'dc' #7 - meta << self.meta_para - end - if defined? @md.date.available \ - and @md.date.available=~/\S+/ - @tag,@inf,@class=tr.date_available,@md.date.available,'dc' #7 - meta << self.meta_para - end - if defined? @md.date.modified \ - and @md.date.modified=~/\S+/ - @tag,@inf,@class=tr.date_modified,@md.date.modified,'dc' #7 - meta << self.meta_para - end - if defined? @md.date.valid \ - and @md.date.valid=~/\S+/ - @tag,@inf,@class=tr.date_valid,@md.date.valid,'dc' #7 - meta << self.meta_para - end - if defined? @md.date.published \ - and @md.date.published=~/\S+/ - @tag,@inf,@class=tr.date,@md.date.published,'dc' #7 - meta << self.meta_para - end - if defined? @md.type \ - and @md.date=~/\S+/ - @tag,@inf,@class=tr.type,@md.type,'dc' #8 - meta << self.meta_para - end - if defined? @md.classify.loc \ - and @md.classify.loc=~/\S+/ - @tag,@inf,@class=tr.cls_loc,@md.classify.loc,'id' - meta << self.meta_para - end - if defined? @md.classify.dewey \ - and @md.classify.dewey=~/\S+/ - @tag,@inf,@class=tr.cls_dewey,@md.classify.dewey,'id' - meta << self.meta_para - end - if defined? @md.classify.pg \ - and @md.classify.pg=~/\S+/ - @tag,@inf,@class=tr.cls_gutenberg,@md.classify.pg,'id' - meta << self.meta_para - end - if defined? @md.classify.isbn \ - and @md.classify.isbn=~/\S+/ - @tag,@inf,@class=tr.cls_isbn,@md.classify.isbn,'id' - meta << self.meta_para - end - if defined? @md.notes.comment \ - and @md.notes.comment=~/\S+/ - @tag,@inf,@class=tr.comments,@md.notes.comment,'ext' - meta << self.meta_para - end - if defined? @md.notes.prefix_a \ - and @md.notes.prefix_a=~/\S+/ - @tag,@inf,@class=tr.prefix_a,@md.notes.prefix_a,'inf' - meta << self.meta_para - end - if defined? @md.notes.prefix_b \ - and @md.notes.prefix_b=~/\S+/ - @tag,@inf,@class=tr.prefix_b,@md.notes.prefix_b,'inf' - meta << self.meta_para - end - if defined? @md.classify.identifier \ - and @md.classify.identifier=~/\S+/ - @tag,@inf,@class=tr.identifier,@md.classify.identifier,'dc' #10 - meta << self.meta_para - end - if defined? @md.original.source \ - and @md.original.source=~/\S+/ - @tag,@inf,@class=tr.source,@md.original.source,'dc' #11 - meta << self.meta_para - end - if defined? @md.title.language \ - and @md.title.language=~/\S+/ - @tag,@inf,@class=tr.language,@md.title.language,'dc' #12 - meta << self.meta_para - end - if defined? @md.original.language \ - and @md.original.language=~/\S+/ - @tag,@inf,@class=tr.language_original,@md.original.language,'ext' - meta << self.meta_para - end - if defined? @md.classify.format \ - and @md.classify.format=~/\S+/ - @tag,@inf,@class=tr.format,@md.classify.format,'dc' #9 - meta << self.meta_para - end - if defined? @md.classify.relation \ - and @md.classify.relation=~/\S+/ - @tag,@inf,@class=tr.relation,@md.classify.relation,'dc' #13 - meta << self.meta_para - end - if defined? @md.classify.coverage \ - and @md.classify.coverage=~/\S+/ - @tag,@inf,@class=tr.coverage,@md.classify.coverage,'dc' #14 - meta << self.meta_para - end - if defined? @md.classify.keywords \ - and @md.classify.keywords=~/\S+/ - @tag,@inf,@class=tr.keywords,@md.classify.keywords,'ext' - meta << self.meta_para - end - if @display_heading - @tag,@inf=%{<b><u>Version Information</u></b>},'' - meta << self.meta_para - end - if defined? @md.fns \ - and @md.fns=~/\S+/ - @tag,@inf,@class=tr.sourcefile,@md.fns,'src' - meta << self.meta_para - end - if defined? @md.file_encoding \ - and @md.file_encoding=~/\S+/ - @tag,@inf,@class='Filetype',@md.file_encoding,'src' - meta << self.meta_para - end - if defined? @md.dgst \ - and @md.dgst.class==Array - @tag,@inf,@class='Source Digest',"#{@md.dgst[0]} #{@md.dgst[1]}",'src' - meta << self.meta_para - end - if defined? @md.dgst_skin \ - and @md.dgst_skin.class==Array - @tag,@inf,@class='Skin Digest',"#{@md.dgst_skin[0]} #{@md.dgst_skin[1]}",'src' - meta << self.meta_para - end - if @display_heading - @tag,@inf=%{<b><u>Generated</u></b>},'' - meta << self.meta_para - end - if defined? @md.sisu_version \ - and @md.sisu_version[:version]=~/\S+/ - v="#{tr.sisu_version}: " + - "#{@md.sisu_version[:project]} " + - "#{@md.sisu_version[:version]} " + - "of #{@md.sisu_version[:date_stamp]} " + - "(#{@md.sisu_version[:date]})" - @tag,@inf,@class='Generated by',v,'ver' - meta << self.meta_para - end - if defined? @md.ruby_version \ - and @md.ruby_version=~/\S+/ - @tag,@inf,@class=tr.ruby_version,@md.ruby_version,'ver' - meta << self.meta_para - end - if defined? @md.generated \ - and @md.generated.class==Time - @tag,@inf,@class=tr.last_generated,@md.generated,'date' - meta << self.meta_para - end - meta - end - def char_enc(str) - @s=str - def utf8 - if @s \ - and @s.class==String - @s.gsub!(/<br(?: \/)?>/u,Mx[:br_paragraph]) - @s.gsub!(/</um,'<') # '<' # < - @s.gsub!(/</um,'<') # '<' # < - @s.gsub!(/>/um,'>') # '>' # > - @s.gsub!(/¢/um,'¢') # '¢' # ¢ - @s.gsub!(/£/um,'£') # '£' # £ - @s.gsub!(/¥/um,'¥') # '¥' # ¥ - @s.gsub!(/§/um,'§') # '§' # § - @s.gsub!(/©/um,'©') # '©' # © - @s.gsub!(/ª/um,'ª') # 'ª' # ª - @s.gsub!(/«/um,'«') # '«' # « - @s.gsub!(/®/um,'®') # '®' # ® - @s.gsub!(/°/um,'°') # '°' # ° - @s.gsub!(/±/um,'±') # '±' # ± - @s.gsub!(/²/um,'²') # '²' # ² - @s.gsub!(/³/um,'³') # '³' # ³ - @s.gsub!(/µ/um,'µ') # 'µ' # µ - @s.gsub!(/¶/um,'¶') # '¶' # ¶ - @s.gsub!(/¹/um,'¹') # '¹' # ¹ - @s.gsub!(/º/um,'º') # 'º' # º - @s.gsub!(/»/um,'»') # '»' # » - @s.gsub!(/¼/um,'¼') # '¼' # ¼ - @s.gsub!(/½/um,'½') # '½' # ½ - @s.gsub!(/¾/um,'¾') # '¾' # ¾ - @s.gsub!(/×/um,'×') # '×' # × - @s.gsub!(/÷/um,'÷') # '÷' # ÷ - @s.gsub!(/¿/um,'¿') # '¿' # ¿ - @s.gsub!(/À/um,'À') # 'À' # À - @s.gsub!(/Á/um,'Á') # 'Á' # Á - @s.gsub!(/Â/um,'Â') # 'Â' #  - @s.gsub!(/Ã/um,'Ã') # 'Ã' # à - @s.gsub!(/Ä/um,'Ä') # 'Ä' # Ä - @s.gsub!(/Å/um,'Å') # 'Å' # Å - @s.gsub!(/Æ/um,'Æ') # 'Æ' # Æ - @s.gsub!(/Ç/um,'Ç') # 'Ç' # Ç - @s.gsub!(/È/um,'È') # 'È' # È - @s.gsub!(/É/um,'É') # 'É' # É - @s.gsub!(/Ê/um,'Ê') # 'Ê' # Ê - @s.gsub!(/Ë/um,'Ë') # 'Ë' # Ë - @s.gsub!(/Ì/um,'Ì') # 'Ì' # Ì - @s.gsub!(/Í/um,'Í') # 'Í' # Í - @s.gsub!(/Î/um,'Î') # 'Î' # Î - @s.gsub!(/Ï/um,'Ï') # 'Ï' # Ï - @s.gsub!(/Ð/um,'Ð') # 'Ð' # Ð - @s.gsub!(/Ñ/um,'Ñ') # 'Ñ' # Ñ - @s.gsub!(/Ò/um,'Ò') # 'Ò' # Ò - @s.gsub!(/Ó/um,'Ó') # 'Ó' # Ó - @s.gsub!(/Ô/um,'Ô') # 'Ô' # Ô - @s.gsub!(/Õ/um,'Õ') # 'Õ' # Õ - @s.gsub!(/Ö/um,'Ö') # 'Ö' # Ö - @s.gsub!(/Ø/um,'Ø') # 'Ø' # Ø - @s.gsub!(/Ù/um,'Ù') # 'Ù' # Ù - @s.gsub!(/Ú/um,'Ú') # 'Ú' # Ú - @s.gsub!(/Û/um,'Û') # 'Û' # Û - @s.gsub!(/Ü/um,'Ü') # 'Ü' # Ü - @s.gsub!(/Ý/um,'Ý') # 'Ý' # Ý - @s.gsub!(/Þ/um,'Þ') # 'Þ' # Þ - @s.gsub!(/ß/um,'ß') # 'ß' # ß - @s.gsub!(/à/um,'à') # 'à' # à - @s.gsub!(/á/um,'á') # 'á' # á - @s.gsub!(/â/um,'â') # 'â' # â - @s.gsub!(/ã/um,'ã') # 'ã' # ã - @s.gsub!(/ä/um,'ä') # 'ä' # ä - @s.gsub!(/å/um,'å') # 'å' # å - @s.gsub!(/æ/um,'æ') # 'æ' # æ - @s.gsub!(/ç/um,'ç') # 'ç' # ç - @s.gsub!(/è/um,'è') # 'è' # è - @s.gsub!(/é/um,'é') # '´' # é - @s.gsub!(/ê/um,'ê') # 'ˆ' # ê - @s.gsub!(/ë/um,'ë') # 'ë' # ë - @s.gsub!(/ì/um,'ì') # 'ì' # ì - @s.gsub!(/í/um,'í') # '´' # í - @s.gsub!(/î/um,'î') # 'î' # î - @s.gsub!(/ï/um,'ï') # 'ï' # ï - @s.gsub!(/ð/um,'ð') # 'ð' # ð - @s.gsub!(/ñ/um,'ñ') # 'ñ' # ñ - @s.gsub!(/ò/um,'ò') # 'ò' # ò - @s.gsub!(/ó/um,'ó') # 'ó' # ó - @s.gsub!(/ô/um,'ô') # 'ô' # ô - @s.gsub!(/õ/um,'õ') # 'õ' # õ - @s.gsub!(/ö/um,'ö') # 'ö' # ö - @s.gsub!(/ø/um,'ø') # 'ø' # ø - @s.gsub!(/ù/um,'ú') # 'ù' # ú - @s.gsub!(/ú/um,'û') # 'ú' # û - @s.gsub!(/û/um,'ü') # 'û' # ü - @s.gsub!(/ü/um,'ý') # 'ü' # ý - @s.gsub!(/þ/um,'þ') # 'þ' # þ - @s.gsub!(/ÿ/um,'ÿ') # 'ÿ' # ÿ - @s.gsub!(/‘/um,'‘') # '‘' # ‘ - @s.gsub!(/’/um,'’') # '’' # ’ - @s.gsub!(/“/um,'“') # “ # “ - @s.gsub!(/”/um,'”') # ” # ” - @s.gsub!(/–/um,'–') # – # – - @s.gsub!(/—/um,'—') # — # — - @s.gsub!(/∝/um,'∝') # ∝ # ∝ - @s.gsub!(/∞/um,'∞') # ∞ # ∞ - @s.gsub!(/™/um,'™') # ™ # ™ - @s.gsub!(/✠/um,'✠') # ✗ # ✠ - @s.gsub!(/ /um,' ') # space identify - @s.gsub!(/ /um,' ') # space identify - @s.gsub!(/#{Mx[:br_paragraph]}/u,'<br />') - end - @s - end - self - end - def xml_sax - def meta_para - inf_xml=char_enc(@inf).utf8 - <<WOK -<metadata> -#{Ax[:tab]}<meta>#{@tag.capitalize}:</meta> -#{Ax[:tab]}<data class="#{@attrib}"> -#{Ax[:tab]*2}#{inf_xml} -#{Ax[:tab]}</data> -</metadata> -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - def xml_dom - def meta_para - inf_xml=char_enc(@inf).utf8 - <<WOK -#{Ax[:tab]}<header> -#{Ax[:tab]*2}<meta>#{@tag.capitalize}:</meta> -#{Ax[:tab]*2}<#{@attrib}> -#{Ax[:tab]*3}#{inf_xml} -#{Ax[:tab]*2}</#{@attrib}> -#{Ax[:tab]}</header> -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - def xhtml_scroll - def meta_para - inf_xml=char_enc(@inf).utf8 - <<WOK -#{Ax[:tab]}<metadata> -#{Ax[:tab]}<meta>#{@tag.capitalize}:</meta> -#{Ax[:tab]}<#{@attrib} class="#{@class}"> -#{Ax[:tab]*2}#{inf_xml} -#{Ax[:tab]}</#{@attrib}> -#{Ax[:tab]}</metadata> - <br /> -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - def xhtml_display - def meta_para - inf_xml=char_enc(@inf).utf8 - %{<p class="norm"> - <b>#{@tag}</b>: #{inf_xml} -</p>} - end - def metadata - Metadata::Summary.new(@md,true).metadata_base - end - self - end - def odf - def meta_para - url_brace=SiSU_Viz::Skin.new.url_decoration - if @inf.class==String - @inf.gsub!(/</,'<'); @inf.gsub!(/>/,'>') - @inf.gsub!(/<br(?: \/)?>/,'<br />') - if @inf =~/&/ - inf_array=[] - word=@inf.scan(/\S+|\n/) - word.each do |w| # _ - / # | : ! ^ ~ - w.gsub!(/ /,' ') - if w !~/&\S{2,7}?;/ - w.gsub!(/&/,'&') - end - inf_array << w - end - @inf=inf_array.join(' ') - end - @inf.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration - @inf.gsub!(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - '\1<text:a xlink:type="simple" xlink:href="\2">\2</text:a>') #special case \{ e.g. \}http://url - if @inf =~/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/ - @inf.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration - else - @inf.gsub!(/(https?:\/\/[^<>()'"\s]+)/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration - end - @inf.gsub!(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{url_brace.xml_close}}) if @inf !~/http:\/\// # improve upon, document crash where url contains '@' symbol - end - <<WOK -<text:p text:style-name="P1">#{@tag.capitalize}: #{@inf}</text:p> -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - def plaintext - def meta_para - <<WOK - -#{@tag.capitalize}: #{@inf} -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - def manpage - def meta_para - <<WOK - -.TP -#{@tag.capitalize}: -.I #{@inf} -WOK - end - def metadata - Metadata::Summary.new(@md).metadata_base - end - self - end - end - class TeX_metadata - def initialize(md) - @md=md - @br="\\\\\n" - end - def meta_para(tag,inf,sc=true) - inf=((inf.class==String && sc) ? spec_char(inf) : inf) - %{\\begin\{bfseries\}#{tag}:\\end\{bfseries\} #{inf} -} - end - def spec_char(inf) - SiSU_TeX_Pdf::Special_characters.new(@md,inf).special_characters - end - def word_break_points(inf) - SiSU_TeX_Pdf::Special_characters.new(@md,inf).special_word_break_points - end - def number_break_points(inf) - SiSU_TeX_Pdf::Special_characters.new(@md,inf).special_number_break_points - end - def metadata_tex - meta=[] - dir=SiSU_Env::Info_env.new(@md.fns) - base_html="#{dir.url.root}/#{@md.fnb}" - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - language=l[:l] - tr=SiSU_Translate::Source.new(@md,language) - tag="Document Manifest @" - inf="#{@br}#{base_html}/#{@md.fn[:manifest]}" - meta << meta_para(tag,inf) - if defined? @md.title.full \ - and @md.title.full=~/\S+/ - tag,inf=tr.full_title,@md.title.full - meta << meta_para(tag,inf) - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ - tag,inf=tr.author,@md.creator.author - meta << meta_para(tag,inf) - end - if defined? @md.creator.translator \ - and @md.creator.translator=~/\S+/ - tag,inf=tr.translator,@md.creator.translator - meta << meta_para(tag,inf) - end - if defined? @md.creator.illustrator \ - and @md.creator.illustrator=~/\S+/ - tag,inf=tr.illustrator,@md.creator.illustrator - meta << meta_para(tag,inf) - end - if defined? @md.creator.prepared_by \ - and @md.creator.prepared_by=~/\S+/ - tag,inf=tr.prepared_by,@md.creator.prepared_by - meta << meta_para(tag,inf) - end - if defined? @md.creator.digitized_by \ - and @md.creator.digitized_by=~/\S+/ - tag,inf=tr.digitized_by,@md.creator.digitized_by - meta << meta_para(tag,inf) - end - if defined? @md.rights.all \ - and @md.rights.all=~/\S+/ - tag,inf=tr.rights,@md.rights.all - meta << meta_para(tag,inf) - end - if defined? @md.notes.description \ - and @md.notes.description=~/\S+/ - tag,inf=tr.description,@md.notes.description - meta << meta_para(tag,inf) - end - if defined? @md.classify.subject \ - and @md.classify.subject=~/\S+/ - tag,inf=tr.subject,@md.classify.subject - meta << meta_para(tag,inf) - end - if defined? @md.publisher \ - and @md.publisher=~/\S+/ - tag,inf=tr.publisher,@md.publisher - meta << meta_para(tag,inf) - end - if defined? @md.creator.contributor \ - and @md.creator.contributor=~/\S+/ - tag,inf=tr.contributor,@md.creator.contributor - meta << meta_para(tag,inf) - end - if defined? @md.notes.abstract \ - and @md.notes.abstract=~/\S+/ - tag,inf=tr.abstract,@md.notes.abstract - meta << meta_para(tag,inf) - end - if defined? @md.date.created \ - and @md.date.created=~/\S+/ - tag,inf=tr.date_created,@md.date.created - meta << meta_para(tag,inf) - end - if defined? @md.date.issued \ - and @md.date.issued=~/\S+/ - tag,inf=tr.date_issued,@md.date.issued - meta << meta_para(tag,inf) - end - if defined? @md.date.available \ - and @md.date.available=~/\S+/ - tag,inf=tr.date_available,@md.date.available - meta << meta_para(tag,inf) - end - if defined? @md.date.modified \ - and @md.date.modified=~/\S+/ - tag,inf=tr.date_modified,@md.date.modified - meta << meta_para(tag,inf) - end - if defined? @md.date.valid \ - and @md.date.valid=~/\S+/ - tag,inf=tr.date_valid,@md.date.valid - meta << meta_para(tag,inf) - end - if defined? @md.date.published \ - and @md.date.published=~/\S+/ - tag,inf=tr.date,@md.date.published - meta << meta_para(tag,inf) - end - if defined? @md.classify.topic_register \ - and @md.classify.topic_register=~/\S+/ - tag,inf=tr.topic_register,@md.classify.topic_register - inf=word_break_points(inf) - meta << meta_para(tag,inf) - end - if defined? @md.classify.loc \ - and @md.classify.loc=~/\S+/ - tag,inf=tr.cls_loc,@md.classify.loc - meta << meta_para(tag,inf) - end - if defined? @md.classify.dewey \ - and @md.classify.dewey=~/\S+/ - tag,inf=tr.cls_dewey,@md.classify.dewey - meta << meta_para(tag,inf) - end - if defined? @md.classify.oclc \ - and @md.classify.oclc=~/\S+/ - tag,inf=tr.cls_oclc,@md.classify.oclc - meta << meta_para(tag,inf) - end - if defined? @md.classify.pg \ - and @md.classify.pg=~/\S+/ - tag,inf=tr.cls_gutenberg,@md.classify.pg - meta << meta_para(tag,inf) - end - if defined? @md.classify.isbn \ - and @md.classify.isbn=~/\S+/ - tag,inf=tr.cls_isbn,@md.classify.isbn - meta << meta_para(tag,inf) - end - if defined? @md.notes.comment \ - and @md.notes.comment=~/\S+/ - tag,inf=tr.comments,@md.notes.comment - meta << meta_para(tag,inf) - end - if defined? @md.notes.prefix_a \ - and @md.notes.prefix_a=~/\S+/ - tag,inf=tr.prefix_a,@md.notes.prefix_a - meta << meta_para(tag,inf) - end - if defined? @md.notes.prefix_b \ - and @md.notes.prefix_b=~/\S+/ - tag,inf=tr.prefix_b,@md.notes.prefix_b - meta << meta_para(tag,inf) - end - if defined? @md.classify.identifier \ - and @md.classify.identifier=~/\S+/ - tag,inf=tr.identifier,@md.classify.identifier - meta << meta_para(tag,inf) - end - if defined? @md.original.source \ - and @md.original.source=~/\S+/ - tag,inf=tr.source,@md.original.source - meta << meta_para(tag,inf) - end - if defined? @md.title.language \ - and @md.title.language=~/\S+/ - tag,inf=tr.language,@md.title.language - meta << meta_para(tag,inf) - end - if defined? @md.original.language \ - and @md.original.language=~/\S+/ - tag,inf=tr.language_original,@md.original.language - meta << meta_para(tag,inf) - end - if defined? @md.classify.format \ - and @md.classify.format=~/\S+/ - tag,inf=tr.format,@md.classify.format - meta << meta_para(tag,inf) - end - if defined? @md.classify.relation \ - and @md.classify.relation=~/\S+/ - tag,inf=tr.relation,@md.classify.relation - meta << meta_para(tag,inf) - end - if defined? @md.classify.coverage \ - and @md.classify.coverage=~/\S+/ - tag,inf=tr.coverage,@md.classify.coverage - meta << meta_para(tag,inf) - end - if defined? @md.classify.keywords \ - and @md.classify.keywords=~/\S+/ - tag,inf=tr.keywords,@md.classify.keywords - meta << meta_para(tag,inf) - end - meta << %{#{@br}\\begin\{bfseries\}Version Information \\end\{bfseries\}} - if defined? @md.fns \ - and @md.fns=~/\S+/ - fn=spec_char(@md.fns) - fn=word_break_points(fn) - fn="\\begin\{footnotesize\}#{fn}\\end\{footnotesize\}" - tag,inf=tr.sourcefile,fn - meta << meta_para(tag,inf,false) - end - if defined? @md.file_encoding \ - and @md.file_encoding=~/\S+/ - tag,inf='Filetype',@md.file_encoding - meta << meta_para(tag,inf) - end - if defined? @md.dgst \ - and @md.dgst.class==Array - hash_of=spec_char(@md.dgst[0]) - hash_of=word_break_points(hash_of) - dgst=number_break_points(@md.dgst[1]) - tag,inf='Source Digest',"\\begin\{footnotesize\}#{hash_of}\\end\{footnotesize\}\\-\\begin\{scriptsize\}#{dgst}\\end\{scriptsize\}" - meta << meta_para(tag,inf,false) - end - if defined? @md.dgst_skin \ - and @md.dgst_skin.class==Array - hash_of=spec_char(@md.dgst_skin[0]) - hash_of=word_break_points(hash_of) - dgst=number_break_points(@md.dgst_skin[1]) - tag,inf='Skin Digest',"\\begin\{footnotesize\}#{hash_of}\\end\{footnotesize\}\\-\\begin\{scriptsize\}#{dgst}\\end\{scriptsize\}" - meta << meta_para(tag,inf,false) - end - meta << %{#{@br}\\begin\{bfseries\}Generated \\end\{bfseries\}} - if defined? @md.generated \ - and @md.generated.class==Time - tag,inf=tr.last_generated,@md.generated - meta << meta_para(tag,inf) - end - if defined? @md.sisu_version \ - and @md.sisu_version[:version]=~/\S+/ - tag=tr.sisu_version - inf="#{@md.sisu_version[:project]} " + - "#{@md.sisu_version[:version]} " + - "of #{@md.sisu_version[:date_stamp]} " + - "(#{@md.sisu_version[:date]})" - meta << meta_para(tag,inf) - end - if defined? @md.ruby_version \ - and @md.ruby_version=~/\S+/ - tag,inf=tr.ruby_version,@md.ruby_version - meta << meta_para(tag,inf) - end - meta - end - end -end -__END__ diff --git a/lib/sisu/v2/shared_xml.rb b/lib/sisu/v2/shared_xml.rb deleted file mode 100644 index e82f51bf..00000000 --- a/lib/sisu/v2/shared_xml.rb +++ /dev/null @@ -1,706 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: common file for xml generation -=end -module SiSU_XML_munge - class Trans - require "#{SiSU_lib}/defaults" # defaults.rb - def initialize(md) - @md=md - @sys=SiSU_Env::System_call.new - @dir=SiSU_Env::Info_env.new(@md.fns) - @brace_url=SiSU_Viz::Skin.new.url_decoration - if @md.sem_tag - @ab ||=semantic_tags.default - end - end - def semantic_tags - def default - { - :pub => 'publication', - :conv => 'convention', - :vol => 'volume', - :pg => 'page', - :cty => 'city', - :org => 'organization', - :uni => 'university', - :dept => 'department', - :fac => 'faculty', - :inst => 'institute', - :co => 'company', - :com => 'company', - :conv => 'convention', - :dt => 'date', - :y => 'year', - :m => 'month', - :d => 'day', - :ti => 'title', - :au => 'author', - :ed => 'editor', #editor? - :v => 'version', #edition - :n => 'name', - :fn => 'firstname', - :mn => 'middlename', - :ln => 'lastname', - :in => 'initials', - :qt => 'quote', - :ct => 'cite', - :ref => 'reference', - :ab => 'abreviation', - :def => 'define', - :desc => 'description', - :trans => 'translate', - } - end - self - end - def char_enc #character encode - def utf8(dob='') - if @sys.locale =~/utf-?8/i # instead ucs for utf8 #require 'iconv' ? Iñtërnâtiônàlizætiøn - str=if defined? dob.obj; dob.obj - elsif dob.class==String; dob - end - if str - #¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûü - #¢£¥§©ª«®°±²³µ¶¹º»¼½¾×÷ - str.gsub!(/</um,'<') # '<' # < - str.gsub!(/>/um,'>') # '>' # > - str.gsub!(/¢/um,'¢') # '¢' # ¢ - str.gsub!(/£/um,'£') # '£' # £ - str.gsub!(/¥/um,'¥') # '¥' # ¥ - str.gsub!(/§/um,'§') # '§' # § - str.gsub!(/©/um,'©') # '©' # © - str.gsub!(/ª/um,'ª') # 'ª' # ª - str.gsub!(/«/um,'«') # '«' # « - str.gsub!(/®/um,'®') # '®' # ® - str.gsub!(/°/um,'°') # '°' # ° - str.gsub!(/±/um,'±') # '±' # ± - str.gsub!(/²/um,'²') # '²' # ² - str.gsub!(/³/um,'³') # '³' # ³ - str.gsub!(/µ/um,'µ') # 'µ' # µ - str.gsub!(/¶/um,'¶') # '¶' # ¶ - str.gsub!(/¹/um,'¹') # '¹' # ¹ - str.gsub!(/º/um,'º') # 'º' # º - str.gsub!(/»/um,'»') # '»' # » - str.gsub!(/¼/um,'¼') # '¼' # ¼ - str.gsub!(/½/um,'½') # '½' # ½ - str.gsub!(/¾/um,'¾') # '¾' # ¾ - str.gsub!(/×/um,'×') # '×' # × - str.gsub!(/÷/um,'÷') # '÷' # ÷ - str.gsub!(/¿/um,'¿') # '¿' # ¿ - str.gsub!(/À/um,'À') # 'À' # À - str.gsub!(/Á/um,'Á') # 'Á' # Á - str.gsub!(/Â/um,'Â') # 'Â' #  - str.gsub!(/Ã/um,'Ã') # 'Ã' # à - str.gsub!(/Ä/um,'Ä') # 'Ä' # Ä - str.gsub!(/Å/um,'Å') # 'Å' # Å - str.gsub!(/Æ/um,'Æ') # 'Æ' # Æ - str.gsub!(/Ç/um,'Ç') # 'Ç' # Ç - str.gsub!(/È/um,'È') # 'È' # È - str.gsub!(/É/um,'É') # 'É' # É - str.gsub!(/Ê/um,'Ê') # 'Ê' # Ê - str.gsub!(/Ë/um,'Ë') # 'Ë' # Ë - str.gsub!(/Ì/um,'Ì') # 'Ì' # Ì - str.gsub!(/Í/um,'Í') # 'Í' # Í - str.gsub!(/Î/um,'Î') # 'Î' # Î - str.gsub!(/Ï/um,'Ï') # 'Ï' # Ï - str.gsub!(/Ð/um,'Ð') # 'Ð' # Ð - str.gsub!(/Ñ/um,'Ñ') # 'Ñ' # Ñ - str.gsub!(/Ò/um,'Ò') # 'Ò' # Ò - str.gsub!(/Ó/um,'Ó') # 'Ó' # Ó - str.gsub!(/Ô/um,'Ô') # 'Ô' # Ô - str.gsub!(/Õ/um,'Õ') # 'Õ' # Õ - str.gsub!(/Ö/um,'Ö') # 'Ö' # Ö - str.gsub!(/Ø/um,'Ø') # 'Ø' # Ø - str.gsub!(/Ù/um,'Ù') # 'Ù' # Ù - str.gsub!(/Ú/um,'Ú') # 'Ú' # Ú - str.gsub!(/Û/um,'Û') # 'Û' # Û - str.gsub!(/Ü/um,'Ü') # 'Ü' # Ü - str.gsub!(/Ý/um,'Ý') # 'Ý' # Ý - str.gsub!(/Þ/um,'Þ') # 'Þ' # Þ - str.gsub!(/ß/um,'ß') # 'ß' # ß - str.gsub!(/à/um,'à') # 'à' # à - str.gsub!(/á/um,'á') # 'á' # á - str.gsub!(/â/um,'â') # 'â' # â - str.gsub!(/ã/um,'ã') # 'ã' # ã - str.gsub!(/ä/um,'ä') # 'ä' # ä - str.gsub!(/å/um,'å') # 'å' # å - str.gsub!(/æ/um,'æ') # 'æ' # æ - str.gsub!(/ç/um,'ç') # 'ç' # ç - str.gsub!(/è/um,'è') # 'è' # è - str.gsub!(/é/um,'é') # '´' # é - str.gsub!(/ê/um,'ê') # 'ˆ' # ê - str.gsub!(/ë/um,'ë') # 'ë' # ë - str.gsub!(/ì/um,'ì') # 'ì' # ì - str.gsub!(/í/um,'í') # '´' # í - str.gsub!(/î/um,'î') # 'î' # î - str.gsub!(/ï/um,'ï') # 'ï' # ï - str.gsub!(/ð/um,'ð') # 'ð' # ð - str.gsub!(/ñ/um,'ñ') # 'ñ' # ñ - str.gsub!(/ò/um,'ò') # 'ò' # ò - str.gsub!(/ó/um,'ó') # 'ó' # ó - str.gsub!(/ô/um,'ô') # 'ô' # ô - str.gsub!(/õ/um,'õ') # 'õ' # õ - str.gsub!(/ö/um,'ö') # 'ö' # ö - str.gsub!(/ø/um,'ø') # 'ø' # ø - str.gsub!(/ù/um,'ú') # 'ù' # ú - str.gsub!(/ú/um,'û') # 'ú' # û - str.gsub!(/û/um,'ü') # 'û' # ü - str.gsub!(/ü/um,'ý') # 'ü' # ý - str.gsub!(/þ/um,'þ') # 'þ' # þ - str.gsub!(/ÿ/um,'ÿ') # 'ÿ' # ÿ - str.gsub!(/‘/um,'‘') # '‘' # ‘ - str.gsub!(/’/um,'’') # '’' # ’ - str.gsub!(/“/um,'“') # “ # “ - str.gsub!(/”/um,'”') # ” # ” - str.gsub!(/–/um,'–') # – # – - str.gsub!(/—/um,'—') # — # — - str.gsub!(/∝/um,'∝') # ∝ # ∝ - str.gsub!(/∞/um,'∞') # ∞ # ∞ - str.gsub!(/™/um,'™') # ™ # ™ - str.gsub!(/✠/um,'✠') # ✗ # ✠ - str.gsub!(/ /um,' ') # space identify - str.gsub!(/ /um,' ') # space identify - end - dob=if defined? dob.obj - dob.obj=str - dob - elsif dob.class==String; dob - end - dob - end - end - def html(dob='') - if @sys.locale =~/utf-?8/i # instead ucs for utf8 #require 'iconv' ? Iñtërnâtiônàlizætiøn - dob.obj.gsub!(/ /u,' ') # space identify - dob.obj.gsub!(/ /u,' ') # space identify - else - dob.obj.gsub!(/¢/u,'¢') # ¢ - dob.obj.gsub!(/£/u,'£') # £ - dob.obj.gsub!(/¥/u,'¥') # ¥ - dob.obj.gsub!(/§/u,'§') # § - dob.obj.gsub!(/©/u,'©') # © - dob.obj.gsub!(/ª/u,'ª') # ª - dob.obj.gsub!(/«/u,'«') # « - dob.obj.gsub!(/®/u,'®') # ® - dob.obj.gsub!(/°/u,'°') # ° - dob.obj.gsub!(/±/u,'±') # ± - dob.obj.gsub!(/²/u,'²') # ² - dob.obj.gsub!(/³/u,'³') # ³ - dob.obj.gsub!(/µ/u,'µ') # µ - dob.obj.gsub!(/¶/u,'¶') # ¶ - dob.obj.gsub!(/¹/u,'¹') # ¹ - dob.obj.gsub!(/º/u,'º') # º - dob.obj.gsub!(/»/u,'»') # » - dob.obj.gsub!(/¼/u,'¼') # ¼ - dob.obj.gsub!(/½/u,'½') # ½ - dob.obj.gsub!(/¾/u,'¾') # ¾ - dob.obj.gsub!(/×/u,'×') # × - dob.obj.gsub!(/÷/u,'÷') # ÷ - dob.obj.gsub!(/¿/u,'¿') # ¿ - dob.obj.gsub!(/À/u,'À') # À - dob.obj.gsub!(/Á/u,'Á') # Á - dob.obj.gsub!(/Â/u,'Â') #  - dob.obj.gsub!(/Ã/u,'Ã') # à - dob.obj.gsub!(/Ä/u,'Ä') # Ä - dob.obj.gsub!(/Å/u,'Å') # Å - dob.obj.gsub!(/Æ/u,'Æ') # Æ - dob.obj.gsub!(/Ç/u,'Ç') # Ç - dob.obj.gsub!(/È/u,'È') # È - dob.obj.gsub!(/É/u,'É') # É - dob.obj.gsub!(/Ê/u,'Ê') # Ê - dob.obj.gsub!(/Ë/u,'Ë') # Ë - dob.obj.gsub!(/Ì/u,'Ì') # Ì - dob.obj.gsub!(/Í/u,'Í') # Í - dob.obj.gsub!(/Î/u,'Î') # Î - dob.obj.gsub!(/Ï/u,'Ï') # Ï - dob.obj.gsub!(/Ð/u,'Ð') # Ð - dob.obj.gsub!(/Ñ/u,'Ñ') # Ñ - dob.obj.gsub!(/Ò/u,'Ò') # Ò - dob.obj.gsub!(/Ó/u,'Ó') # Ó - dob.obj.gsub!(/Ô/u,'Ô') # Ô - dob.obj.gsub!(/Õ/u,'Õ') # Õ - dob.obj.gsub!(/Ö/u,'Ö') # Ö - dob.obj.gsub!(/Ø/u,'Ø') # Ø - dob.obj.gsub!(/Ù/u,'Ù') # Ù - dob.obj.gsub!(/Ú/u,'Ú') # Ú - dob.obj.gsub!(/Û/u,'Û') # Û - dob.obj.gsub!(/Ü/u,'Ü') # Ü - dob.obj.gsub!(/Ý/u,'Ý') # Ý - dob.obj.gsub!(/Þ/u,'Þ') # Þ - dob.obj.gsub!(/ß/u,'ß') # ß - dob.obj.gsub!(/à/u,'à') # à - dob.obj.gsub!(/á/u,'á') # á - dob.obj.gsub!(/â/u,'â') # â - dob.obj.gsub!(/ã/u,'ã') # ã - dob.obj.gsub!(/ä/u,'ä') # ä - dob.obj.gsub!(/å/u,'å') # å - dob.obj.gsub!(/æ/u,'æ') # æ - dob.obj.gsub!(/ç/u,'ç') # ç - dob.obj.gsub!(/è/u,'è') # è - dob.obj.gsub!(/é/u,'´') # é - dob.obj.gsub!(/ê/u,'ˆ') # ê - dob.obj.gsub!(/ë/u,'ë') # ë - dob.obj.gsub!(/ì/u,'ì') # ì - dob.obj.gsub!(/í/u,'´') # í - dob.obj.gsub!(/î/u,'î') # î - dob.obj.gsub!(/ï/u,'ï') # ï - dob.obj.gsub!(/ð/u,'ð') # ð - dob.obj.gsub!(/ñ/u,'ñ') # ñ - dob.obj.gsub!(/ò/u,'ò') # ò - dob.obj.gsub!(/ó/u,'ó') # ó - dob.obj.gsub!(/ô/u,'ô') # ô - dob.obj.gsub!(/õ/u,'õ') # õ - dob.obj.gsub!(/ö/u,'ö') # ö - dob.obj.gsub!(/ø/u,'ø') # ø - dob.obj.gsub!(/ù/u,'ù') # ú - dob.obj.gsub!(/ú/u,'ú') # û - dob.obj.gsub!(/û/u,'û') # ü - dob.obj.gsub!(/ü/u,'ü') # ý - dob.obj.gsub!(/þ/u,'þ') # þ - dob.obj.gsub!(/ÿ/u,'ÿ') # ÿ - dob.obj.gsub!(/‘/u,'&#lsquo;') # ‘ # ‘ - dob.obj.gsub!(/’/u,'&#rsquo;') # ’ # ’ - dob.obj.gsub!(/“/u,'“') # “ # “ - dob.obj.gsub!(/”/u,'”') # ” # ” - dob.obj.gsub!(/–/u,'–') # – # – - dob.obj.gsub!(/—/u,'—') # — # — - dob.obj.gsub!(/∝/u,'∝') # ∝ # ∝ - dob.obj.gsub!(/∞/u,'∞') # ∞ # ∞ - dob.obj.gsub!(/™/u,'™') # ™ # ™ - dob.obj.gsub!(/✠/u,'✠') # ✠ - #par.obja.gsub!(/✠/u '†') # † # † incorrect replacement † - dob.obj.gsub!(/ /u,' ') # space identify - dob.obj.gsub!(/ /u,' ') # space identify - end - end - self - end - def tidywords(wordlist) - wordlist.each do |x| - #imperfect solution will not catch all possible cases - x.gsub!(/&/,'&') unless x =~/&\S+;/ - x.gsub!(/&([A-Z])/,'&\1') - end - end - def markup(dob='') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - unless dob.is=='table' - dob.obj.gsub!(/#{Mx[:br_line]}/u,'<br />') - dob.obj.gsub!(/#{Mx[:br_paragraph]}/u,'<br />') - dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') - end - dob.obj.gsub!(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,'') - dob.obj.gsub!(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s+)<\s+/,'\1< '); dob.obj.gsub!(/\s+>(\s+|$)/,' >\1') - #dob.obj.gsub!(/#{Mx[:fa_emphasis_o]}(.+?)#{Mx[:fa_emphasis_c]}/,'<em>\1</em>') #reinstate - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/m,'<b>\1</b>') - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/m,'<i>\1</i>') - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - dob.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>') - dob.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>') - dob.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>') - dob.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>') - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>') - dob.obj.gsub!(/<:pb>\s*/,'') #Fix - dob.obj.gsub!(/<+[-~]#>+/,'') - if dob.is !~/^code/ - #embeds a red-bullet image --> - dob.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - dob.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - dob.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - dob.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is=='table' - dob.obj.gsub!(/#{Mx[:br_page]}\s*/,'') - dob.obj.gsub!(/#{Mx[:br_page_new]}\s*/,'') - dob.obj.gsub!(/#{Mx[:pa_non_object_no_heading]}|#{Mx[:pa_non_object_dummy_heading]}/,''); dob.obj.gsub!(/<[-~]#>/,'') - dob.obj.gsub!(/href="#{Xx[:segment]}/m,'href="') - dob.obj.gsub!(/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{Mx[:rel_c]}]+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\.\.\/\S+?)#{Mx[:rel_c]}/, - '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\2">\1</link>') - dob.obj.gsub!(/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{Mx[:rel_c]}]+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}:(\S+?)#{Mx[:rel_c]}/, - '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="../\2">\1</link>') - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/, - '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="#\2">\1</link>') - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))[ ]+(\d+)x(\d+)(\s+[^}]+)?#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@dir.url.images_local}/\\1" width="\\2" height="\\3" />[\\1] \\4}) - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))([ ]+[^}]+)?#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@dir.url.images_local}/\\1"/>\\1}) - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))[ ]+(\d+)x(\d+)(\s+[^}]+)?#{Mx[:lnk_c]}image/, - %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@dir.url.images_local}/\\1" width="\\2" height="\\3" />[\\1] \\4}) - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))([ ]+[^}]+)?#{Mx[:lnk_c]}image/, - %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@dir.url.images_local}/\\1"/>\\1}) - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\2">\1</link>') #watch, compare html_tune - dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\\1">\\1</link>#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\1">\1</link>') #escaped urls not linked, deal with later - else - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters - dob.obj.gsub!(/(^|[^}])_</m,'\1<'); dob.obj.gsub!(/(^|[^}])_>/m,'\1>') - end - if dob.of=='group' - dob.obj.gsub!(/#{Mx[:gl_bullet]}/,'● ') - end - dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}\\1#{@brace_url.xml_close}}) - dob.obj.gsub!(/#{Dx[:url_o]}/,"#{Dx[:url_o_xml]}") - dob.obj.gsub!(/#{Dx[:url_c]}/,"#{Dx[:url_c_xml]}") - dob.obj.gsub!(/ |#{Mx[:nbsp]}/m,' ') - dob - end - def markup_light(dob='') - dob.obj.gsub!(/\/\{(.+?)\}\//,'<i>\1</i>') - dob.obj.gsub!(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>') - dob.obj.gsub!(/_\{(.+?)\}_/,'<u>\1</u>') - dob.obj.gsub!(/-\{(.+?)\}-/,'<del>\1</del>') - dob.obj.gsub!(/<br(\s*\/)?>/,'<br />') - dob.obj.gsub!(/<:pb>\s*/,'') - dob.obj.gsub!(/<[-~]#>/,'') - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& ') #sort - dob.obj.gsub!(/&([^;]{1,5})/,'&\1') #sort, rough estimate, revisit #WATCH found in node not sax - dob.obj.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, - "<image.path>#{@dir.url.images_local}\/\\1</image.path>") - dob.obj.gsub!(/ |#{Mx[:nbsp]}/,' ') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - dob - end - def markup_fictionbook(dob='') - dob.obj.gsub!(/~\{([\d*+]+).+?\}~/,'[\1]') - dob.obj.gsub!(/\/\{(.+?)\}\//,'<i>\1</i>') - dob.obj.gsub!(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>') - dob.obj.gsub!(/_\{(.+?)\}_/,'<u>\1</u>') - dob.obj.gsub!(/-\{(.+?)\}-/,'<del>\1</del>') - dob.obj.gsub!(/<br(?:\s*\/)?>/,'<br />') - dob.obj.gsub!(/<:pb>\s*/,'') - dob.obj.gsub!(/<[-~]#>/,'') - #temporary --> - dob.obj.gsub!(/<:\S+?>/,'') - #<-- temporary - dob.obj.gsub!(/<[-~]#>/,'') - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& ') #sort - dob.obj.gsub!(/&([^;]{1,5})/,'&\1') #sort, rough estimate, revisit #WATCH found in node not sax - dob.obj.gsub!(/(#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, - "<image.path>#{@dir.url.images_local}\/\\1</image.path>") - dob.obj.gsub!(/ |#{Mx[:nbsp]}/,' ') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - dob - end - def markup_group(dob='') - dob.obj.gsub!(/</,'<'); dob.obj.gsub!(/>/,'>') - dob.obj.gsub!(/<:?br(?:\s+\/)?>/,'<br />') - dob.obj.gsub!(/<(link xmlns:xlink=".+?")>/,'<\1>') - dob.obj.gsub!(/<(\/link)>/,'<\1>') - dob.obj.gsub!(/<(\/?en)>/,'<\1>') - dob - end - def xml_sem_block_paired(matched) # colon depth: many, recurs - matched.gsub!(/\b(au):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:au]} depth="many">\\2</sem:#{@ab[:au]}>}) - matched.gsub!(/\b(vol):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:vol]} depth="many">\\2</sem:#{@ab[:vol]}>}) - matched.gsub!(/\b(pub):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:pub]} depth="many">\\2</sem:#{@ab[:pub]}>}) - matched.gsub!(/\b(ref):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ref]} depth="many">\\2</sem:#{@ab[:ref]}>}) - matched.gsub!(/\b(desc):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:desc]} depth="many">\\2</sem:#{@ab[:desc]}>}) - matched.gsub!(/\b(conv):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:conv]} depth="many">\\2</sem:#{@ab[:conv]}>}) - matched.gsub!(/\b(ct):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ct]} depth="many">\\2</sem:#{@ab[:ct]}>}) - matched.gsub!(/\b(cty):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:cty]} depth="many">\\2</sem:#{@ab[:cty]}>}) - matched.gsub!(/\b(org):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:org]} depth="many">\\2</sem:#{@ab[:org]}>}) - matched.gsub!(/\b(dt):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:dt]} depth="many">\\2</sem:#{@ab[:dt]}>}) - matched.gsub!(/\b(n):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:n]} depth="many">\\2</sem:#{@ab[:n]}>}) - matched.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m,'<sem:\1 depth="many">\2</sem:\1>') - end - def xml_semantic_tags(dob) - if @md.sem_tag - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj.gsub!(/:\{(.+?)\}:au\b/m, %{<sem:#{@ab[:au]} depth="one">\\1</sem:#{@ab[:au]}>}) - dob.obj.gsub!(/:\{(.+?)\}:n\b/m, %{<sem:#{@ab[:n]} depth="one">\\1</sem:#{@ab[:n]}>}) - dob.obj.gsub!(/:\{(.+?)\}:ti\b/m, %{<sem:#{@ab[:ti]} depth="one">\\1</sem:#{@ab[:ti]}>}) - dob.obj.gsub!(/:\{(.+?)\}:ref\b/m, %{<sem:#{@ab[:ref]} depth="one">\\1</sem:#{@ab[:ref]}>}) - dob.obj.gsub!(/:\{(.+?)\}:desc\b/m, %{<sem:#{@ab[:desc]} depth="one">\\1</sem:#{@ab[:desc]}>}) - dob.obj.gsub!(/:\{(.+?)\}:cty\b/m, %{<sem:#{@ab[:cty]} depth="one">\\1</sem:#{@ab[:cty]}>}) - dob.obj.gsub!(/:\{(.+?)\}:org\b/m, %{<sem:#{@ab[:org]} depth="one">\\1</sem:#{@ab[:org]}>}) - dob.obj.gsub!(/:\{(.+?)\}:([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="one">\1</sem:\2>') - dob.obj.gsub!(/;\{([^}]+(?![;]))\};ti\b/m, %{<sem:#{@ab[:ti]} depth="zero">\\1</sem:#{@ab[:ti]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};qt\b/m, %{<sem:#{@ab[:qt]} depth="zero">\\1</sem:#{@ab[:qt]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};ref\b/m, %{<sem:#{@ab[:ref]} depth="zero">\\1</sem:#{@ab[:ref]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};ed\b/m, %{<sem:#{@ab[:ed]} depth="zero">\\1</sem:#{@ab[:ed]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};v\b/m, %{<sem:#{@ab[:v]} depth="zero">\\1</sem:#{@ab[:v]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};desc\b/m, %{<sem:#{@ab[:desc]} depth="zero">\\1</sem:#{@ab[:desc]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};def\b/m, %{<sem:#{@ab[:def]} depth="zero">\\1</sem:#{@ab[:def]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};trans\b/m, %{<sem:#{@ab[:trans]} depth="zero">\\1</sem:#{@ab[:trans]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};y\b/m, %{<sem:#{@ab[:y]} depth="zero">\\1</sem:#{@ab[:y]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};ab\b/m, %{<sem:#{@ab[:ab]} depth="zero">\\1</sem:#{@ab[:ab]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};pg\b/m, %{<sem:#{@ab[:pg]} depth="zero">\\1</sem:#{@ab[:pg]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};fn?\b/m, %{<sem:#{@ab[:fn]} depth="zero">\\1</sem:#{@ab[:fn]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};mn?\b/m, %{<sem:#{@ab[:mn]} depth="zero">\\1</sem:#{@ab[:mn]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};ln?\b/m, %{<sem:#{@ab[:ln]} depth="zero">\\1</sem:#{@ab[:ln]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};in\b/m, %{<sem:#{@ab[:in]} depth="zero">\\1</sem:#{@ab[:in]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};uni\b/m, %{<sem:#{@ab[:uni]} depth="zero">\\1</sem:#{@ab[:uni]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};fac\b/m, %{<sem:#{@ab[:fac]} depth="zero">\\1</sem:#{@ab[:fac]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};inst\b/m, %{<sem:#{@ab[:inst]} depth="zero">\\1</sem:#{@ab[:inst]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};dept\b/m, %{<sem:#{@ab[:dpt]} depth="zero">\\1</sem:#{@ab[:dept]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};org\b/m, %{<sem:#{@ab[:org]} depth="zero">\\1</sem:#{@ab[:org]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};com?\b/m, %{<sem:#{@ab[:com]} depth="zero">\\1</sem:#{@ab[:com]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};cty\b/m, %{<sem:#{@ab[:cty]} depth="zero">\\1</sem:#{@ab[:cty]}>}) - dob.obj.gsub!(/;\{([^}]+(?![;]))\};([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="zero">\1</sem:\2>') - end - dob - end - end -end -module SiSU_XML_tags #Format - require "#{SiSU_lib}/param" # param.rb - include SiSU_Param - include SiSU_Viz - class RDF - def initialize(md='',seg_name=[],tracker=0) - @full_title=@subtitle=@author=@subject=@description=@publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@copyright=@owner=@keywords='' - @md=md - @rdfurl=%{ rdf:about="http://www.jus.uio.no/lm/toc"\n} - if defined? @md.title.full \ - and @md.title.full # DublinCore 1 - title - @rdf_title=%{ dc.title="#{seg_name}#{@md.title.full}"\n} - @full_title=%{ <meta name="dc.title" content="#{@md.title.full}" />\n} - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ # DublinCore 2 - creator/author (author) - @rdf_author=%{ dc.author="#{@md.creator.author}"\n} - content=meta_content_clean(@md.creator.author) - @author=%{ <meta name="dc.author" content="#{content}" />\n} - end - if defined? @md.classify.subject \ - and @md.classify.subject=~/\S+/ # DublinCore 3 - subject (us library of congress, eric or udc, or schema???) - @rdf_subject=%{ dc.subject="#{@md.classify.subject}"\n} - content=meta_content_clean(@md.classify.subject) - @subject=%{ <meta name="dc.subject" content="#{content}" />\n} - end - if defined? @md.notes.description \ - and @md.notes.description=~/\S+/ # DublinCore 4 - description - @rdf_description=%{ dc.description="#{@md.notes.description}"\n} - content=meta_content_clean(@md.notes.description) - @description=%{ <meta name="dc.description" content="#{content}" />\n} - end - if defined? @md.publisher \ - and @md.publisher # DublinCore 5 - publisher (current copy published by) - @rdf_publisher=%{ dc.publisher="#{@md.publisher}"\n} - content=meta_content_clean(@md.publisher) - @publisher=%{ <meta name="dc.publisher" content="#{content}" />\n} - end - if defined? @md.creator.contributor \ - and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor - @rdf_contributor=%{ dc.contributor="#{@md.creator.contributor}"\n} - content=meta_content_clean(@md.creator.contributor) - @contributor=%{ <meta name="dc.contributor" content="#{content}" />\n} - end - if defined? @md.date.published \ - and @md.date.published=~/\S+/ # DublinCore 7 - date year-mm-dd - @rdf_date=%{ dc.date="#{@md.date.published}"\n} - @date=%{ <meta name="dc.date" content="#{@md.date.published}" #{@md.date_scheme} />\n} # fix @md.date_scheme - end - if defined? @md.date.created \ - and @md.date.created=~/\S+/ # DublinCore 7 - date.created year-mm-dd - @rdf_date_created=%{ dc.date.created="#{@md.date.created}"\n} - @date_created=%{ <meta name="dc.date.created" content="#{@md.date.created}" #{@md.date_scheme} />\n} - end - if defined? @md.date.issued \ - and @md.date.issued=~/\S+/ # DublinCore 7 - date.issued year-mm-dd - @rdf_date_issued=%{ dc.date.issued="#{@md.date.issued}"\n} - @date_issued=%{ <meta name="dc.date.issued" content="#{@md.date.issued}" #{@md.date_scheme} />\n} - end - if defined? @md.date.available \ - and @md.date.available=~/\S+/ # DublinCore 7 - date.available year-mm-dd - @rdf_date_available=%{ dc.date.available="#{@md.date.available}"\n} - @date_available=%{ <meta name="dc.date.available" content="#{@md.date.available}" #{@md.date_scheme} />\n} - end - if defined? @md.date.valid \ - and @md.date.valid=~/\S+/ # DublinCore 7 - date.valid year-mm-dd - @rdf_date_valid=%{ dc.date.valid="#{@md.date.valid}"\n} - @date_valid=%{ <meta name="dc.date.valid" content="#{@md.date.valid}" #{@md.date_scheme} />\n} - end - if defined? @md.date.modified \ - and @md.date.modified=~/\S+/ # DublinCore 7 - date.modified year-mm-dd - @rdf_date_modified=%{ dc.date.modified="#{@md.date.modified}"\n} - @date_modified=%{ <meta name="dc.date.modified" content="#{@md.date.modified}" #{@md.date_scheme} />\n} - end - if defined? @md.type \ - and @md.type # DublinCore 8 - type (genre eg. report, convention etc) - @rdf_type=%{ dc.type="#{@md.type}"\n} - content=meta_content_clean(@md.type) - @type=%{ <meta name="dc.type" content="#{content}" />\n} - end - if defined? @md.classify.format \ - and @md.classify.format=~/\S+/ # DublinCore 9 - format (use your mime type) - @rdf_format=%{ dc.format="#{@md.classify.format}"\n} - content=meta_content_clean(@md.classify.format) - @format=%{ <meta name="dc.format" content="#{content}" />\n} - end - if defined? @md.classify.identifier \ - and @md.classify.identifier=~/\S+/ # DublinCore 10 - identifier (your identifier, could use urn which is free) - @rdf_identifier=%{ dc.identifier="#{@md.classify.identifier}"\n} - content=meta_content_clean(@md.classify.identifier) - @identifier=%{ <meta name="dc.identifier" content="#{content}" />\n} - end - if defined? @md.original.source \ - and @md.original.source=~/\S+/ # DublinCore 11 - source (document source) - @rdf_source=%{ dc.source="#{@md.original.source}"\n} - content=meta_content_clean(@md.original.source) - @source=%{ <meta name="dc.source" content="#{content}" />\n} - end - if defined? @md.title.language \ - and @md.title.language=~/\S+/ # DublinCore 12 - language (English) - @rdf_language=%{ dc.language="#{@md.title.language}"\n} - @language=%{ <meta name="dc.language" content="#{@md.title.language}" />\n} - end - if defined? @md.original.language \ - and @md.original.language=~/\S+/ - @rdf_language_original=%{ dc.language="#{@md.original.language}"\n} - @language_original=%{ <meta name="dc.language" content="#{@md.original.language}" />\n} - end - if defined? @md.classify.relation \ - and @md.classify.relation=~/\S+/ # DublinCore 13 - relation - @rdf_relation=%{ dc.relation="#{@md.classify.relation}"\n} - content=meta_content_clean(@md.classify.relation) - @relation=%{ <meta name="dc.relation" content="#{content}" />\n} - end - if defined? @md.classify.coverage \ - and @md.classify.coverage=~/\S+/ # DublinCore 14 - coverage - @rdf_coverage=%{ dc.coverage="#{@md.classify.coverage}"\n} - content=meta_content_clean(@md.classify.coverage) - @coverage=%{ <meta name="dc.coverage" content="#{content}" />\n} - end - if defined? @md.rights.all \ - and @md.rights.all # DublinCore 15 - rights - @rdf_rights=%{ dc.rights="#{@md.rights.all}"\n} - content=meta_content_clean(@md.rights.all) - @rights=%{ <meta name="dc.rights" content="#{content}" />\n} - end - content=meta_content_clean(@md.keywords) - @keywords=%{ <meta name="keywords" content="#{content}" />\n} if @md.keywords - @vz=SiSU_Env::Get_init.instance.skin - end - def meta_content_clean(content='') - content - unless content.nil? - content.tr!('"',"'") - content=SiSU_XML_munge::Trans.new(@md).char_enc.utf8(content) - end - content - end - def rdfseg #segHead - rdftoc - end - def comment_xml(extra='') - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] - lastdone="Last Generated on: #{Time.now}" - rubyv="Ruby version: #{@md.ruby_version}" - sc=if @md.sc_info - "Source file: #{@md.sc_filename} version: #{@md.sc_number} of: #{@md.sc_date}" - else '' - end - if extra.empty? -<<WOK -<!-- Document processing information: - * #{generator} - * #{rubyv} - * #{sc} - * #{lastdone} - * SiSU http://www.jus.uio.no/sisu ---> -WOK - else -<<WOK -<!-- Document processing information: - * #{extra} - * #{generator} - * #{rubyv} - * #{sc} - * #{lastdone} - * SiSU http://www.jus.uio.no/sisu ---> -WOK - end - end - def comment_xml_sax - desc='SiSU XML, SAX type representation' - comment_xml(desc) - end - def comment_xml_node - desc='SiSU XML, Node type representation' - comment_xml(desc) - end - def comment_xml_dom - desc='SiSU XML, DOM type representation' - comment_xml(desc) - end - def metatag_html #values strung together, because some empty, and resulting output (line breaks) is much better -<<WOK -#{@full_title}#{@subtitle}#{@author}#{@subject}#{@description}#{@publisher}#{@contributor}#{@date}#{@date_created}#{@date_issued}#{@date_available}#{@date_valid}#{@date_modified}#{@type}#{@format}#{@identifier}#{@source}#{@language}#{@relation}#{@coverage}#{@rights}#{@copyright}#{@owner} -#{@vz.txt_generator} -#{@vz.png_ico} -WOK - end - end -end -module SiSU_Tables - require "#{SiSU_lib}/xml_tables" # xml_tables.rb -end -__END__ diff --git a/lib/sisu/v2/sisupod_make.rb b/lib/sisu/v2/sisupod_make.rb deleted file mode 100644 index 188e3315..00000000 --- a/lib/sisu/v2/sisupod_make.rb +++ /dev/null @@ -1,338 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: create sisupod filetype and copy it to output directory! - -=end -module SiSU_Doc - require 'fileutils' - include SiSU_Env - class Source - include FileUtils #::Verbose - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/response" # response.rb - def initialize(opt) - @opt=opt - m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @date=SiSU_Env::Info_date.new.dt - @env=SiSU_Env::Info_env.new(@opt.fns) - @ver=SiSU_Env::Info_version.instance.get_version - @ans=SiSU_Response::Response.new - pod_path="#{@env.path.processing}/sisupod" - @v=if @opt.cmd =~/[VM]/; 'v' - else '' - end - @local_path="#{@env.path.output_pod}" #@local_path="#{@env.path.output}/#{@env.fnb}" - @zipfile=if @opt.fns =~/\.ssm\.sst$/; @opt.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm') - else @opt.fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') - end - mkdir_p(pod_path) unless FileTest.directory?(pod_path) - rm_rf("#{@env.path.processing}sisupod/*") if FileTest.directory?("#{@env.path.processing}sisupod") - end - def read - unless @opt.cmd =~/q/ - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (zip)',@opt.fns).green_hi_blue \ - : SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (zip)',@opt.fns).green_title_hi - end - unless @opt.fns.empty? - unless @opt.cmd =~/q/ - SiSU_Screen::Ansi.new(@opt.cmd,'Make sisu document (zip) and place in output directory',"#{@opt.fns} -> file://#{@env.path.output_pod}/#{@zipfile}.zip").warn if @opt.cmd =~/[MVv]/ - end - directories - sisupod_build - sisupod_zip - #sisupod_7zip - else - if @opt.cmd =~/[MVv]/ - SiSU_Screen::Ansi.new(@opt.cmd,'Make (zip) of sisu work directory',"#{@env.stub_pwd}\_#{@date}.zip").warn - SiSU_Screen::Ansi.new(@opt.cmd,'').blue_tab - end - ans=@ans.response?('make sisupod of entire directory?') - if ans; sisupod_zip_directory - end - end - end - def sisupod_zip_directory - sisupod_directory="sisupod-#{@env.stub_pwd}-#{@date}.ssp" # "sisupod-#{@env.stub_pwd}-#{@date}.zip" - unless File.symlink?('sisupod'); File.symlink(Dir.pwd,'sisupod') - end - re_base_dir='^sisupod/([^.][^/]*\.(ssm|ssi|sst)$|_sisu/)' - re_files='/[a-zA-Z0-9.~_-]+\.(ssm|ssi|sst|rb|css|png|jpg|gif|yaml)$' - re_ignore='/[.~_-][^/]+$' - if File.symlink?('sisupod') - info="SiSU sisupod #{@ver[:version]} directory contents #{sisupod_directory}" - system(%{ - echo "#{info}" - echo "#{info}" > sisu_zip.txt - zip -qz #{sisupod_directory} sisu_zip.txt < sisu_zip.txt - for I in `find -H sisupod -print | \ - egrep "#{re_base_dir}" | \ - egrep "#{re_files}" | \ - egrep -v "#{re_ignore}" ` - do zip #{sisupod_directory} $I - done - }) - else puts "the required systemlink 'sisupod' could not be created on the current directory: remove the file or directory named 'sisupod' within #{Dir.pwd}" - end - if @opt.cmd =~/[MVv]/ - SiSU_Screen::Ansi.new(@opt.cmd,'Share SiSU Document (tar gzip)',@opt.fns).green_hi_blue - SiSU_Screen::Ansi.new(@opt.cmd,'Zipped directory',sisupod_directory).warn - SiSU_Screen::Ansi.new('',sisupod_directory).blue_tab - end - end - def directories - SiSU_Env::Info_env.new.sisupod - end - def select(skin='') # skin loading logic here - load "#{SiSU_lib}/defaults.rb" - @skin={} - skin_path = [ - "#{@env.path.pwd}/_sisu/skin", - "#{@env.path.home}/.sisu/skin", - '/etc/sisu/skin', - "#{@env.path.processing}/external_document/skin" - ] - sk_doc,sk_dir="doc/#{skin}.rb","dir/skin_#{@env.stub_pwd}.rb" - skin_path.each do |v| #document skin priority 1 - if FileTest.file?("#{v}/#{sk_doc}") - @skin[:name],@skin[:type]="#{v}/#{sk_doc}",'doc' - break - end - end - unless @skin.length > 0 - skin_path.each do |v| #directory skin priority 2 - if FileTest.file?("#{v}/#{sk_dir}") - @skin[:name],@skin[:type]="#{v}/#{sk_dir}",'dir' - break - end - end - end - @skin - end - def sisupod_build #see also sisupod in sysenv - @rgx_rb_image=/["'](\S+?\.(?:png|jpg|gif))["']/ - @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ - @rgx_skin=/^\s+:skin:\s+(\S+)/ - @rgx_doc_import=/^%\s\s*\|(\S+?\.ss[ti])\|@\|\^\|>>ok/ - use_file=@opt.fns =~/(?:\.ssm|\.ssm\.sst)$/ \ - ? "#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst" \ - : @opt.fns - file_array=IO.readlines(use_file,'') - skin,images,doc_import=[],[],[] - file_array.each do |f| #% work area - if f !~/^%+\s/ - skin << f.scan(@rgx_skin).uniq.flatten if f =~@rgx_skin - if f !~/^%+\s/ \ - and f =~@rgx_image - images << f.scan(@rgx_image).uniq - end - elsif f =~/^%\s/ \ - and @opt.fns =~/\.ssm\.sst$/ - doc_import << f.scan(@rgx_doc_import).uniq if f =~@rgx_doc_import - end - end - docskin=nil - if skin \ - and skin.length > 0 - docskin=skin.pop.flatten.join - skin_source=select(docskin) - else - skin_source=select - end - docskin_place="#{@env.path.processing}/sisupod/_sisu/skin/#{skin_source[:type]}" - if skin_source[:type] =~/dir/ - docskin_with_path="#{docskin_place}/skin_#{@env.stub_pwd}.rb" - docskin=[docskin_with_path.gsub(/.+?\/(skin_\S+?)\.rb/,'\1')] - docskin='skin_sisupod' - end - if skin_source \ - and docskin #imperfect, revisit - unless skin_source[:name].nil? \ - or skin_source[:name].empty? - cp_r(skin_source[:name],"#{docskin_place}/#{docskin}.rb") - skinfile_array=IO.readlines(skin_source[:name],'') - para_images=[] - skinfile_array.each do |f| #% work area - unless f =~/^%+ / #hmmm - images << f.scan(@rgx_rb_image).uniq if f =~@rgx_rb_image #and FileTest.file?(f.scan(@rgx_rb_image).uniq) - #does not really discriminate, may duplicate images in sisu file, and may take images from default image pool - end - end - end - end - #1. mapping in doc dir? - #2. need images used by skin, scan skin?? - if images \ - and images.length > 1 - images.flatten! - images.uniq! - images.delete_if {|x| x =~/https?:\/\// } - #images.sort! - image_path_pwd='_sisu/image' - path_pod_conf="#{@env.path.processing}/sisupod/_sisu" - images_path_pod="#{path_pod_conf}/image" - #unattractive hard coding ... ! - images_pwd="#{@env.path.pwd}/#{image_path_pwd}" - ##sequence copies base images, defaults used in all html outputs - #image_source_base='/usr/share/sisu/image' - #dir_pwd=Dir.pwd - #Dir.chdir(image_source_base) - #base_images=Dir.glob('*') - #base_images.each do |i| - # cp_r(i,"#{images_path_pod}/#{i}") - #end - #Dir.chdir(dir_pwd) - if FileTest.directory?(image_path_pwd) - images=images.uniq - images.each do |i| - cp_r("#{images_pwd}/#{i}","#{images_path_pod}/#{i}") if FileTest.file?("#{images_pwd}/#{i}") - end - #chmod(0755, dir_images_www) - else puts "\tWARN, did not find - #{image_path_pod}" - end - end - x=@env.document_language_versions_found #check multiple document language versions (param not used) - if doc_import.flatten.length > 0 \ - and @opt.fns =~/\.ssm\.sst$/ - doc_import.flatten.each do |f| - cp_r("#{@env.path.pwd}/#{f}","#{@env.path.processing}/sisupod/#{f}") - end - end - if x[:f] \ - and x[:f].length > 1 #store multiple document language versions, sisupod - x[:f].each do |f| - cp_r("#{@env.path.pwd}/#{f}","#{@env.path.processing}/sisupod/#{f}") - end - elsif @opt.fns =~/\.ssm\.sst/ - ssm=@opt.fns.gsub(/\.ssm\.sst/,'.ssm') - cp_r("#{@env.path.pwd}/#{ssm}","#{@env.path.processing}/sisupod/#{ssm}") - else cp_r("#{@env.path.pwd}/#{@opt.fns}","#{@env.path.processing}/sisupod/#{@opt.fns}") - end #NB not all possibilies met, revisit, also in case of composite file may wish to add README - end - def sisupod_7zip #look at later - mkdir_p(@local_path) unless FileTest.directory?(@local_path) - system(%{ - cd #{@env.path.processing} - echo "SiSU sisupod #{@ver[:version]}" > sisu_zip.txt - #7zip -qz #{@opt.fns}.7z sisu_zip.txt < sisu_zip.txt - 7zr a -t7z -m0=lzma -mx=9 -ms=on #{@zipfile}.7z sisu_zip.txt - 7zr a -t7z -m0=lzma -mx=9 -ms=on #{@zipfile}.7z sisupod - #7zip -qr #{@zipfile}.7z sisupod - mv #{@zipfile}.7z #{@local_path}/. & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@opt.fns}.7z").blue_tab unless @opt.cmd =~/q/ - end - def sisupod_zip - mkdir_p(@local_path) unless FileTest.directory?(@local_path) - system(%{ - cd #{@env.path.processing} - echo "SiSU sisupod #{@ver[:version]}" > sisu_zip.txt - zip -qz #{@zipfile}.zip sisu_zip.txt < sisu_zip.txt - zip -qr #{@zipfile}.zip sisupod - mv #{@zipfile}.zip #{@local_path}/. & - rm -r sisupod/* && cd #{@env.path.pwd} - }) - SiSU_Screen::Ansi.new('',"#{@zipfile}.zip").blue_tab if @opt.cmd =~/[MVv]/ - end - end -end -__END__ -question?: should you permit the packing of multiple files in single .gz ? - - open @opt.fns, parse file - extract from file content: - images and copy each image from whatever image source to _sisu/sisupod/sisu/_sisu/image - skin and copy active skin from whatever source to _sisu/sisupod/sisu/_sisu/skin/doc - extract from skin images required by skin - - remove previously existing contents of _/sisu/sisupod & - make directory structure: - - _sisu - sisupod - sisu - content.sst [file content] - filename.sst [link to content.sst] - _sisu - conf - skin/ - doc [relevant skin if any other than default] - image [all images for specific document gathered here] - -sisu - _sisu - sisurc.yml - skin/ - dir/ - doc/ - misc/ - site/ - yaml/ - convert/ - standard_terms/ - image - processing - dal/ - tex/ - texinfo/ - tune/ - sisupod - -special case - -composite file (master), e.g. -SiSU.ssm diff --git a/lib/sisu/v2/sysenv.rb b/lib/sisu/v2/sysenv.rb deleted file mode 100644 index 38ea24a2..00000000 --- a/lib/sisu/v2/sysenv.rb +++ /dev/null @@ -1,3366 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2011, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: system environment, resource control and configuration details - -=end -@@cX=nil -@@current_document=Dir.pwd #nil #'' -module SiSU_Env - require "#{SiSU_lib}/constants" # constants.rb - require 'fileutils' - include FileUtils::Verbose - require 'singleton' - @@noyaml=false - class Info_date - require 'date' - attr_accessor :dt,:t - def initialize - @dt,@t=Date.today.to_s,Time.now - end - def week - w=@t.strftime('%W') - "#{@t.year}w#{w}" - end - def month - "#{@t.year}#{@t.month}" - end - def year - @t.year - end - def weekonly - @t.strftime('%W') - end - def monthonly - @t.month - end - def year_static - '2010' - end - end - class Info_system - require 'rbconfig' - include Singleton - @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@rc,@@ad=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD'],Config::CONFIG['sysconfdir'] + '/sisu',Config::CONFIG['host'],Config::CONFIG['arch'],%x{ruby -v}.strip,Config::CONFIG['archdir'],Config::CONFIG['sitearchdir'],Config::CONFIG['bindir'],%x{locale charmap}.strip,nil,{} # %x{ruby -v}.strip # Config::CONFIG['rb_ver'] - out=Config::CONFIG['localstatedir'] - etc=Config::CONFIG['sysconfdir'] + '/sisu' - share=Config::CONFIG['datadir'] + '/sisu' - data=Config::CONFIG['datadir'] + '/doc/sisu' - m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @stub_pwd ||=@@pwd[m,1] - prcss_dir='_sisu_processing_' - prcss_dir_tmp_root="/tmp/#{prcss_dir}" - prcss_dir_stub="#{prcss_dir}/#{@stub_pwd}" - if @@user - tmp_processing="#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" - tmp_processing_individual="#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" - else #error - tmp_processing=tmp_processing_individual="/tmp/#{prcss_dir_stub}" - end - tmp_processing_home=if @@home \ - and File.writable?("#{@@home}/.") - "#{@@home}/#{prcss_dir_stub}" - else prcss_dir_stub - end - processing_path=tmp_processing_individual - processing_dir=prcss_dir - processing_git="#{Dir.pwd}/#{Gt[:grotto]}" - user=ENV['USER'] - port_pgsql=if defined? ENV['PGPORT'] \ - and not (ENV['PGPORT'].nil? \ - or ENV['PGPORT'].empty?) \ - and ENV['PGPORT']=~/^\d+$/ - ENV['PGPORT'] - else '5432' - end - IMAGES=:images - SISU_ETC=:sisu_etc - SISU_SHARE=:sisu_share - SAMPLE_DATA_PATH=:sample_data_path - IMAGE_STUB=:image_stub - STYLESHEET_STUB=:stylesheet_stub - IMAGE_LOCAL=:image_local - WEBSERV_PATH=:webserv_path - WEBSERV_MAN=:webserv_man - WEBSERV_PHP=:webserv_php - WEBSERV_CGI=:webserv_cgi - WEBSERV_RSS=:webserv_rss - WEBSERV_SQLITE=:webserv_sqlite - OUTPUT_LOCAL=:output_local - PROCESSING_DIR=:processing_dir - PROCESSING_PATH=:processing_path - PROCESSING_DIR_TMP_ROOT=:processing_dir_tmp_root - PROCESSING_PATH_TMP_BASE=:processing_path_tmp_base - PROCESSING_DAL=:processing_dal - PROCESSING_TUNE=:processing_tune - PROCESSING_LATEX=:processing_latex - PROCESSING_TEXINFO=:processing_texinfo - PROCESSING_LOUT=:processing_lout - PROCESSING_SQLITE=:processing_sqlite - PROCESSING_POSTGRESQL=:processing_postgresql - PROCESSING_ENCODING=:processing_encoding - PROCESSING_GIT=:processing_git - PAPERSIZE=:papersize - LANGUAGE=:language - LANGUAGE_CODE=:language_code - MULTILINGUAL=:multilingual - CONCORD_MAX=:concord_max - DIGEST=:digest - WEBSERV_HOST_CGI=:webserv_host_cgi - WEBSERV_PORT_CGI=:webserv_port_cgi - POSTGRESQL_USER=:postgresql_user - POSTGRESQL_PORT=:postgresql_port - SQLITE_USER=:sqlite_user - SQLITE_PATH=:sqlite_path - SQLITE_PORT=:sqlite_port - DEFAULT_DIR={ - IMAGES => '_sisu/image', - SISU_ETC => etc, - SISU_SHARE => share, - SAMPLE_DATA_PATH => data, - IMAGE_STUB => '_sisu/image', - STYLESHEET_STUB => '_sisu/css', - IMAGE_LOCAL => @@pwd + '/_sisu/image', - WEBSERV_PATH => out + '/www', - #WEBSERV_DIR => www, # uncomment for urls... - #WEBSERV_IMAGE => out + '/www/_sisu/image', - WEBSERV_MAN => out + '/www/man', #alter - WEBSERV_PHP => out + '/www/php', - WEBSERV_CGI => '/usr/lib/cgi-bin', - WEBSERV_RSS => out + '/www/feed', - WEBSERV_SQLITE => out + '/www/sqlite', - OUTPUT_LOCAL => @@home + '/sisu_www', - PROCESSING_DIR => processing_dir, - PROCESSING_PATH => processing_path, - PROCESSING_DIR_TMP_ROOT => prcss_dir_tmp_root, - PROCESSING_PATH_TMP_BASE => processing_path, - PROCESSING_DAL => 'dal', - PROCESSING_TUNE => 'tune', - PROCESSING_LATEX => 'tex', - PROCESSING_TEXINFO => 'texinfo', - PROCESSING_LOUT => 'lout', - PROCESSING_SQLITE => 'sqlite', - PROCESSING_POSTGRESQL=> 'postgresql', - PROCESSING_ENCODING => 'encoding', - PROCESSING_GIT => processing_git, - #TEXINFO_STUB => 'texinfo', - PAPERSIZE => 'A4', #A4, US_letter, book_b5, book_a5, US_legal - LANGUAGE => 'English', - LANGUAGE_CODE => 'en', #change, unecessary duplication though currently used - MULTILINGUAL => true, - CONCORD_MAX => 260000, - DIGEST => 'sha256', - WEBSERV_HOST_CGI => ' http://localhost', - WEBSERV_PORT_CGI => 8081, #8111,8123,8081 - POSTGRESQL_USER => @@user, #'ralph', # change user !!! - POSTGRESQL_PORT => port_pgsql, - #POSGRESQL_LINKS_PATH => '', - SQLITE_USER => @@user, - SQLITE_PATH => @@user, #?? - SQLITE_PORT => '**', - } - @@default_dir=DEFAULT_DIR - m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - stub_pwd=@@pwd[m,1] - @@rc_path=["#{@@pwd}/_sisu/#{SiSU_version_dir}","#{@@pwd}/_sisu","#{@@home}/.sisu/#{SiSU_version_dir}","#{@@home}/.sisu","#{@@sisu_etc}/#{SiSU_version_dir}"] - @@yamlrc_path=(stub_pwd !~/^sisupod$/) \ - ? (["#{@@pwd}/_sisu/#{SiSU_version_dir}","#{@@pwd}/_sisu","#{@@home}/.sisu/#{SiSU_version_dir}","#{@@home}/.sisu","#{@@sisu_etc}/#{SiSU_version_dir}"]) \ - : ["#{@@home}/.sisu/#{SiSU_version_dir}","#{@@home}/.sisu","#{@@sisu_etc}/#{SiSU_version_dir}"] #security policy: prevent reading of sisurc.yml in sisupod - @@ad_path=(stub_pwd !~/^sisupod$/) \ - ? (["#{@@pwd}/_sisu/skin/yml","#{@@home}/.sisu/skin/yml","#{@@sisu_etc}/skin/yml"]) \ - : ["#{@@home}/.sisu",@@sisu_etc] - attr_accessor :user,:home,:hostname,:pwd,:host,:arch,:rbver,:dir_arch,:dir_sitearch,:dir_bin,:locale,:webserv_path,:webserv_host_cgi,:webserv_port_cgi,:default_dir,:rc_path,:yamlrc_path,:ad_path - def initialize - @user,@home,@hostname,@pwd,@sisu_etc,@host,@arch,@rbver,@dir_arch,@dir_sitearch,@dir_bin,@locale,@default_dir,@rc_path,@yamlrc_path,@ad_path=@@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@default_dir,@@rc_path,@@yamlrc_path,@@ad_path - #note rbver is duplicated in Info_version - end - end - class Load - def initialize(prog,mandatory=false) - @prog,@mandatory=prog,mandatory - end - def prog - load_prog=false - pp='' - $:.each do |reqpath| - if FileTest.exist?("#{reqpath}/#{@prog}.rb") - load_prog=true - break - end - end - if load_prog \ - and @prog=~/dbi/ - require 'dbi' #revisit - end - if load_prog - require @prog - else - @mandatory \ - ? (SiSU_Screen::Ansi.new(@cmd,"module required: #{@prog}").warn) \ - : (SiSU_Screen::Ansi.new(@cmd,"#{@prog} load requested").warn) - end - load_prog - end - def prog? - load_prog=false - $:.each do |reqpath| - if FileTest.exist?("#{reqpath}/#{@prog}.rb"); load_prog=true - break - end - end - load_prog - end - end - class Get_init < Info_system - include Singleton - @@noyaml=false - @@rc,@@vz,@@tx=nil,nil,nil - @@ad={ :promo=>nil,:promo_list=>nil,:flag_promo=>false } - attr_accessor :yaml - def initialize - super() - end - def skin - @@vz ||=SiSU_Viz::Skin.new - end - def tex - @@tx ||=SiSU_Viz::TeX.new - end - def yamlrc - unless @@rc - @yamlrc_path.each do |v| - if @@noyaml \ - or FileTest.exist?("#{v}/noyaml") - puts "WARNING - YAML loading switched off, to enable delete the file:\n\t#{v}/noyaml\n\n" unless @@noyaml - @@noyaml=true - break - else - if FileTest.exist?("#{v}/sisurc.yml") - unless @@rc - require 'yaml' - @@rc ||= YAML::load(File::open("#{v}/sisurc.yml")) - end - break - end - unless @@rc - if FileTest.exist?("#{v}/sisurc.yaml") - unless @@rc - require 'yaml' - @@rc ||= YAML::load(File::open("#{v}/sisurc.yaml")) - end - break - end - end - end - end - end - @@rc - end - def ads #WORK AREA - tell_no_yaml='WARNING - YAML loading switched off, to enable delete the file:' - @ad_path.each do |v| - if @@noyaml \ - or FileTest.exist?("#{v}/noyaml") - puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml - @@noyaml=true - break - else - if FileTest.exist?("#{v}/list.yml") - unless @@ad[:promo_list] - require 'yaml' - @@ad[:promo_list] ||= YAML::load(File::open("#{v}/list.yml")) - end - @@ad[:flag_promo]=true - break - end - @@ad[:flag_promo]=false - end - end - @ad_path.each do |v| - if @@noyaml \ - or FileTest.exist?("#{v}/noyaml") - puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml - @@noyaml=true - break - else - if FileTest.exist?("#{v}/promo.yml") - unless @@ad[:promo] - require 'yaml' - @@ad[:promo] ||= YAML::load(File::open("#{v}/promo.yml")) - end - @@ad[:flag_promo]=true - break - end - @@ad[:flag_promo]=false - end - end - @@ad - end - end - class Env_call - @@rc,@@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=nil,nil,nil,nil,nil,nil,nil - @@ad={} - attr_accessor :rc,:fnn,:fnb,:fnt,:fnv,:fnz,:ad - def initialize(fns='') - super() - @fns=fns - @sys=Info_system.instance - @rc=Get_init.instance.yamlrc - @ad=Get_init.instance.ads - if @fns \ - and @fns != '' \ - and @fns !=@@fns - @@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=@fns,nil,nil,nil,nil,nil - end - if @fns \ - and @fns != '' #watch - if multilingual - m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst|ssm)$/ - @@fnn ||=@fns[m,1] - @@fnb ||=@fns[m,2] - @@fnt ||=@fns[m,3] - @@flv ||=document_language_versions_found[:f] - unless @@fns =~/\S+?\.zip/ - @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.zip' - elsif @@fnb; @@fnb + '.sst.zip' - else '' # e.g. termsheet - end - end - else m=/(.+?)\.((?:-|ssm\.)?sst|ssm)$/ - @@fnb ||=@fns[m,1] - @@fnt ||=@fns[m,2] - unless @@fns =~/\S+?\.zip/ - @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.zip' - else @@fnb + '.sst.zip' - end - end - end - end - @fnn,@fnb,@fnt,@flv,@fnz=@@fnn,@@fnb,@@fnt,@@flv,@@fnz - end - def multilingual - if defined? @rc['default']['multilingual'] \ - and @rc['default']['multilingual'] != nil - @rc['default']['multilingual'] - else true - end - end - def document_language_versions_found - @fn={} - unless (@fns.nil? \ - or @fns.empty?) - if multilingual - m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ - @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] - else m=/(.+?)\.((?:-|ssm\.)?sst$)/ - @fn[:b]=@fn[:m]=@fns[m,1] - @fn[:t]=@fns[m,2] - end - end - lang=SiSU_Env::Standardise_language.new - langs=lang.codes - x=[] - if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" - end - x << @fns - langs.each do |l| - lng=SiSU_Env::Standardise_language.new(l) - if FileTest.file?("#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") - x << "#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" - elsif FileTest.file?("#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") - x << "#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" - end - end - @fn[:f]=x.uniq! - @fn - end - def published_manifests?(output_base) - ob=output_base - @fn={} - @m=[] - unless (@fns.nil? \ - or @fns.empty?) - if multilingual - m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ - @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] - else m=/(.+?)\.((?:-|ssm\.)?sst$)/ - @fn[:b]=@fn[:m]=@fns[m,1] - @fn[:t]=@fns[m,2] - end - end - lang=SiSU_Env::Standardise_language.new - langs=lang.codes - x=[] - if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" - end - dir=SiSU_Env::Info_env.new(@fns) - @m << {:m => 'sisu_manifest.html', :l => 'English' } #fix later, default language - langs.each do |l| - lng=SiSU_Env::Standardise_language.new(l) - fns_c="#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" - fns_l="#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" - if FileTest.file?(fns_c) - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(fns_c) - lng=fn_set_lang[:l] - fn=SiSU_Env::Env_call.new(fns_c).lang(fn_set_lang[:c]) - @m << {:m => fn[:manifest], :l => lng } - elsif FileTest.file?(fns_l) - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(fns_l) - @fnl=dir.i18n.lang_filename(fn_set_lang[:c]) - fn=SiSU_Env::Env_call.new(fns_l).lang(fn_set_lang[:c]) - @m << {:m => fn[:manifest], :l => lng } - end - end - @m.uniq! - @m - end - def filename(code,name,suffix) - d=SiSU_Env::Info_env.new(@fns) - fnl=d.i18n.lang_filename(code) - if code - "#{fnl[:pre]}#{name}#{fnl[:mid]}#{suffix}#{fnl[:post]}" - else "#{name}#{suffix}" - end - end - def lang(code) - @fn={ - :html => filename(code,'','.html'), - :book_index => filename(code,'book_index','.html'), - :concordance => filename(code,'concordance','.html'), - :sax => filename(code,'sax','.xml'), - :dom => filename(code,'dom','.xml'), - :docbook => filename(code,'docbook','.xml'), - :xhtml => filename(code,'scroll','.xhtml'), - :pdf_l => filename(code,'landscape','.pdf'), - :pdf_p => filename(code,'portrait','.pdf'), - :pdf_l_a4 => filename(code,'landscape.a4','.pdf'), - :pdf_p_a4 => filename(code,'portrait.a4','.pdf'), - :pdf_l_a5 => filename(code,'landscape.a5','.pdf'), - :pdf_p_a5 => filename(code,'portrait.a5','.pdf'), - :pdf_l_b5 => filename(code,'landscape.b5','.pdf'), - :pdf_p_b5 => filename(code,'portrait.b5','.pdf'), - :pdf_l_letter => filename(code,'landscape.letter','.pdf'), - :pdf_p_letter => filename(code,'portrait.letter','.pdf'), - :pdf_l_legal => filename(code,'landscape.legal','.pdf'), - :pdf_p_legal => filename(code,'portrait.legal','.pdf'), - :toc => filename(code,'toc','.html'), - :doc => filename(code,'doc','.html'), - :index => filename(code,'index','.html'), - :odf => filename(code,'opendocument','.odt'), - :epub => filename(code,@fnb,'.epub'), - :plain => filename(code,'plain','.txt'), - :manpage => filename(code,@fnb,'.1'), #fix, section number - :wiki => filename(code,'wiki','.txt'), - :digest => filename(code,'digest','.txt'), - :metadata => filename(code,'metadata','.html'), #chk - :manifest => filename(code,'sisu_manifest','.html'), - :oai_pmh => filename(code,'oai_pmh','.xml'), - :sitemap => filename(code,'sitemap','.xml'), - :sitemap_touch => filename(code,"sitemap_#{@fnb}",'.xml'), - :sxs => filename(code,@fnb,'.sxs.xml'), - :sxd => filename(code,@fnb,'.sxd.xml'), - :sxn => filename(code,@fnb,'.sxn.xml'), - :sisupod => filename(nil,@fnz,''), - :book_idx_html => filename(code,'book_index','.html'), - :book_idx_epub => filename(code,'book_index','.xhtml'), - :epub_concord => filename(code,'concordance','.xhtml'), - } - @fn - end - end - class System_call - @@locale_flag=false - def initialize(input='',output='',cmd='') - @input,@output,@cmd=input,output,cmd - @prog=SiSU_Env::Info_program.new - @sys=Info_system.instance - end - def program_found?(program) - found=`whereis #{program}` - (found =~/bin\/#{program}\b/) ? true : false - end - def locale #locales utf8 or other - unless @@locale_flag - @@locale_flag=true - end - @sys.locale - end - def file_encoding(filename,cmd='') #file encoding - program='file' - fnsp=Info_env.new(filename).source_file_with_path - if program_found?(program) - encoding=%x{file -L #{fnsp}}.strip - encoding.gsub!(/#{fnsp}:(\s+|$)/,'') - encoding=if encoding \ - and not encoding.empty? - encoding - else 'UTF-8 assumed, encoding undetermined' - end - puts encoding if cmd =~/[VM]/ - encoding - else encoding='UTF-8 assumed, file encoding check program unavailable' - end - end - def wc #word count - program='wc' - if program_found?(program) \ - and locale !~/utf-?8/i - true - else - program_ref="(not available)" unless program_found?(program) - program_ref="(UTF-8)" if locale =~/utf-?8/i - false - end - end - def rcs #rcs for document markup data - program='rcs' - program_ref="\n\t\tdocument version information requested" - if program_found?(program); true - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def cvs #cvs for document markup data - program='cvs' - program_ref="\n\t\tdocument version information requested" - if program_found?(program); true - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def openssl #openssl for digests - program='openssl' - program_ref="\n\t\tused to generate requested source document identification digest" - if program_found?(program); true - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def md5(filename) #md5 dgst - program='openssl' - program_ref="\n\t\tmd5 digest requested" - if program_found?(program) - pwd=Dir.pwd - Dir.chdir(File.dirname(filename)) - dgst=%x{openssl dgst -md5 #{File.basename(filename)}}.strip #use file name without file path - Dir.chdir(pwd) - dgst.scan(/\S+/) - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def sha256(filename) #sha dgst - program='openssl' - program_ref="\n\t\tsha digest requested" - if program_found?(program) - pwd=Dir.pwd - Dir.chdir(File.dirname(filename)) - dgst=%x{openssl dgst -sha256 #{File.basename(filename)}}.strip #use file name without file path - Dir.chdir(pwd) - dgst.scan(/\S+/) - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def psql #psql - program='psql' - program_ref="\n\t\tpsql requested" - if program_found?(program); true - else puts "\tWARN: #{program} is not installed #{program_ref}" #if @cmd =~/v/ - false - end - end - def create_pg_db(dbname_stub=nil) #createdb - unless dbname_stub - @pwd ||=Dir.pwd - m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - dbname_stub=@pwd[m,1] - end - program='createdb' - db_name="#{Db[:name_prefix]}#{dbname_stub}" - program_ref="\n\t\tcreatedb dbname #{db_name} #for postgresql database creation" - if program_found?(program); system("createdb #{dbname_name}") - else puts "\tWARN: #{program} is not available #{program_ref}" #if @cmd =~/v/ - end - end - def relaxng(cmd='') #trang - convert between different schema languages for XML - program='trang' - program_ref="\n\t\tsee http://www.thaiopensource.com/relaxng/trang.html" - if program_found?(program); system("trang #{@input} #{@output}") - else puts "\tWARN: #{program} is not installed #{program_ref}" if cmd =~/V/ - end - end - def imagemagick #imagemagick is a image manipulation program - program='identify' - program_ref="\n\t\tsee http://www.imagemagick.org/" - found=(program_found?(program)) ? true : false - puts "\tWARN: #{program} is not installed #{program_ref}" unless found - found - end - def graphicksmagick #graphicsmagick is a image manipulation program - program='gm' - program_ref="\n\t\tsee http://www.graphicsmagick.org/" - found=(program_found?(program)) ? true : false - puts "\tWARN: #{program} is not installed #{program_ref}" unless found - found - end - def well_formed? #tidy - check for well formed xml xhtml etc. - program=@prog.tidy - program_ref="\n\t\tsee http://tidy.sourceforge.net/" - if program_found?(program); system("#{@prog.tidy} -xml #{@input} > #{@output}") - else puts "\tWARN: #{program} is not installed #{program_ref}" - end - end - def tex2pdf_engine - prog=['xetex','xelatex','pdflatex','pdfetex','pdftex'] - @pdfetex_flag=false - @cmd ||='' - @texpdf=nil - prog.each do |program| - if program_found?(program) - @texpdf=program if program =~/xetex|xelatex|pdftex|pdflatex/ - @pdfetex_flag=true - break - end - end - if @pdfetex_flag==false - @texpdf=prog.join(', ') - end - @texpdf - end - def latex2pdf(md,papersize='a4') #convert from latex to pdf - tell=((@cmd =~/[MVv]/) ? '' : '> /dev/null' ) - mode='batchmode' - #mode='nonstopmode' - program_ref="\n\t\tSee http://www.tug.org/applications/pdftex/\n\t\tOn Debian this is is included in tetex-extra" - texpdf=tex2pdf_engine - if @pdfetex_flag; - texpdf_cmd=case texpdf - when /xetex/ - @input =~/landscape\.tex$/ \ - ? %{#{texpdf} -interaction=#{mode} -fmt=xelatex -papersize="#{papersize} -l" #{@input} #{tell}\n} \ - : %{#{texpdf} -interaction=#{mode} -fmt=xelatex -papersize="#{papersize}" #{@input} #{tell}\n} - when /xelatex/ - @input =~/landscape\.tex$/ \ - ? %{#{texpdf} -interaction=#{mode} -papersize="#{papersize} -l" #{@input} #{tell}\n} \ - : %{#{texpdf} -interaction=#{mode} -papersize="#{papersize}" #{@input} #{tell}\n} - when /pdftex/; "#{texpdf} -interaction=#{mode} -fmt=pdflatex #{@input} #{tell}\n" - when /pdflatex/; "#{texpdf} -interaction=#{mode} #{@input} #{tell}\n" - end - system(texpdf_cmd) - else puts "\tWARN: none of the following programs are installed: #{program[0]}, #{program[1]}, #{program[2]} is installed. #{program_ref}" - end - end - def makeinfo #texinfo - program='makeinfo' - program_ref="\n\t\tsee http://www.gnu.org/software/texinfo/" - (program_found?(program)) \ - ? system("#{program} #{@input}\n") \ - : (puts "\tWARN: #{program} is not installed #{program_ref}") - end - def scp - program='scp' - puts "scp -Cr #{@input} #{@output}" if @cmd =~/[vVM]/ - (program_found?(program)) \ - ? system("scp -Cr #{@input} #{@output}") \ - : (puts "\tWARN: #{program} not found" ) - end - def rsync(action='') - program='rsync' - if program_found?(program) - vb=if @cmd =~/q/; 'q' - elsif @cmd =~/v/; 'v' - else '' - end - msg='' - msg=" && echo 'OK: #{@input} -> #{@output}'" unless @cmd =~/q/ - puts "rsync -az#{vb} #{action} #{@input} #{@output}" if @cmd =~/[vVM]/ - system("rsync -az#{vb} #{action} #{@input} #{@output} #{msg}") - else puts "\tWARN: #{program} not found" - end - end - def rm - if @cmd =~/^-Z[mMvVq]*$/; rm_rf(@input) - elsif @cmd =~/V/; rm(@input) - elsif @cmd !~/q/; rm(@input) - elsif @cmd =~/q/; rm(@input) - else puts "\tWARN: operation ignored" - end - end - end - class Standardise_language - def initialize(l='') - @language=l - if @language.empty? - @language=Info_env.new.defaults[:language] - end - end - def language #use ISO_639-2 - lang={} - case @language - when /American|^us$/i; d,c,l=false,'en','American English' #depreciated, see iso 639-2 - when /English|^en$/i; d,c,l=false,'en','English' - when /French|Francais|^fr$/i; d,c,l=false,'fr','French' - when /German|^de$/i; d,c,l=false,'de','German' - when /Italian|^it$/i; d,c,l=false,'it','Italian' - when /Spanish|Espanol|^es$/i; d,c,l=false,'es','Spanish' - when /Brazilian(?: Portuguese)?|^br$/i; d,c,l=false,'pt','Brazilian Portuguese' #depreciated, see iso 639-2 - when /Portuguese|^pt$/i; d,c,l=false,'pt','Portuguese' - when /Swedish|Svensk|^sv$/i; d,c,l=false,'sv','Swedish' - when /Danish|Dansk|^da$/i; d,c,l=false,'da','Danish' - when /Finnish|Finsk|Suomi|^fi$/i; d,c,l=false,'fi','Finnish' - when /Norwegian|Norsk|^no$/i; d,c,l=false,'no','Norwegian' - when /Icelandic|^is$/i; d,c,l=false,'is','Icelandic' - when /Dutch|^nl$/i; d,c,l=false,'nl','Dutch' - when /Estonian|^et$/i; d,c,l=false,'et','Estonian' - when /Hungarian|^hu$/i; d,c,l=false,'hu','Hungarian' - when /Polish|^pl$/i; d,c,l=false,'pl','Polish' - when /Romanian|^ro$/i; d,c,l=false,'ro','Romanian' - when /Russian|^ru$/i; d,c,l=false,'ru','Russian' - when /Greek|^el$/i; d,c,l=false,'el','Greek' - when /Ukranian|^uk$/i; d,c,l=false,'uk','Ukranian' - when /Turkish|^tr$/i; d,c,l=false,'tr','Turkish' - #when /Serbian/i; d,c,l=false,'', 'Serbian' - #when /Welsh/i; d,c,l=false,'', 'Welsh' - #when /Basque/i; d,c,l=false,'', 'Basque' - #when /Breton/i; d,c,l=false,'', 'Breton' - #when /Catalan/i; d,c,l=false,'', 'Catalan' - #when /Galician/i; d,c,l=false,'', 'Galician' - #when /Saa?mi/i; d,c,l=false,'', 'Saami' - #when /Hebrew/i; d,c,l=false,'', 'Hebrew' - #when /Latin/i; d,c,l=false,'', 'Latin' - #when /Esperanto/i; d,c,l=false,'', 'Esperanto' - when /Slovenian|^sl$/i; d,c,l=false,'sl','Slovenian' - when /Croatian|^hr$/i; d,c,l=false,'hr','Croatian' - when /Slovak(?:ian)?|^sk$/i; d,c,l=false,'sk','Slovakian' - when /Czech|^cs$/i; d,c,l=false,'cs','Czech' - when /Bulgarian|^bg$/i; d,c,l=false,'bg','Bulgarian' - else d,c,l=true,'en','English (default)' - #else d,c,l=true,'xx','Default' - end - lang[:d],lang[:c],lang[:l]=d,c,l - lang - end - def name - language[:l].downcase - end - def title - language[:l] - end - def code - language[:c] - end - def file_to_language(file) - m=/.+?\~(\w{2,3})\.(?:-|ssm\.)?sst$/ - @language=if file =~m ; file[m,1] - else '' - end - language - end - def codes - codes=['us','en','fr','de','it','es','br','pt','sv','da','fi','no','is','nl','et','hu','pl','ro','ru','el','uk','tr','sk','hr','sl','cs','bg'] # remove us and br see iso-639-2 - end - end - class Info_env < Env_call - require 'fileutils' - include FileUtils - attr_accessor :filename,:sys,:home,:hostname,:user,:env,:rc,:www,:fnb,:fnn,:fnt,:flv,:webserv_path,:stub_pwd,:stub_src,:webserv_host_cgi,:webserv_port_cgi,:processing,:processing_git,:etc,:yamlrc_dir - @@image_flag,@@local_image=true,true #warning on @@image_flag - @@fb=@@man_path=nil,nil - def initialize(fns='',md=nil) - super() #you may not want to re-execute this static info so frequently! - @fns,@md=fns,md - @env=Env_call.new(fns) if fns - fnb=if @md \ - and defined? @md.fnb - @md.fnb - elsif defined? @env.fnb \ - and @env.fnb - @env.fnb - elsif not @fns.nil? \ - and not @fns.empty? - m=/(.+)?\.(?:(?:-|ssm\.)?sst|ssm)$/m - @fns[m,1] if not @fns.empty? - end - if fnb; @@fb ||=fnb - end - @sys=Info_system.instance - @fnb ||=@@fb #clean up this... used primarily for zap which is not passed normal parameters - @fixed_websev_root='' # @home - @pwd=@@pwd||=Dir.pwd - m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @stub_pwd=@@pwd[m,1] - @stub_epub=@stub_pwd + '/epub' - @stub_src=@stub_pwd + '/src' - @stub_pod=@stub_pwd + '/pod' - @stub_md=@stub_pwd + '/sisu_site_metadata' - end - def user - @sys.user - end - def hostname - @sys.hostname - end - def host - @sys.host - end - def arch - @sys.arch - end - def rbver - @sys.rbver - end - def locale - @sys.locale - end - def concord_max - ((defined? @rc['processing']['concord_max']) \ - && @rc['processing']['concord_max']) \ - ? @rc['processing']['concord_max'] \ - : (defaults[:concord_max]) - end - def markup_emphasis - if defined? @rc['default']['emphasis'] \ - and @rc['default']['emphasis'] \ - and @rc['default']['emphasis']=~/bold/ - 'bold' - elsif defined? @rc['default']['emphasis'] \ - and @rc['default']['emphasis'] \ - and @rc['default']['emphasis']=~/italic/ - 'italics' - elsif defined? @rc['default']['emphasis'] \ - and @rc['default']['emphasis'] \ - and @rc['default']['emphasis']=~/underscore/ - 'underscore' - else 'bold' - end - end - def plaintext_wrap - ((defined? @rc['default']['text_wrap']) \ - && (@rc['default']['text_wrap']) \ - && (@rc['default']['text_wrap'].to_s=~/\d\d+/) \ - && (@rc['default']['text_wrap'].to_i > 19) \ - && (@rc['default']['text_wrap'].to_i < 201)) \ - ? @rc['default']['text_wrap'].to_i \ - : 78 - end - def current_document - @@current_document||=Dir.pwd - @@current_document - end - def stub_pwd #200412 - @stub_pwd - end - def stub_md_harvest - @stub_md - end - def stub_src - @stub_src - end - def stub_pod - @stub_pod - end - def sisupod - #path.processing - # sisupod - # sisu - # content.sst [file content] - # filename.sst [link to content.sst] - # _sisu - # conf - # skin/ - # doc [relevant skin if any other than default] - # image [all images for specific document gathered here] - sisupod_processing_path="#{path.processing}/sisupod" - if FileTest.directory?(sisupod_processing_path) \ - or FileTest.file?(sisupod_processing_path) - rm_rf(sisupod_processing_path) - end - paths=[] - paths=["#{path.processing}/sisupod/_sisu/skin/doc","#{path.processing}/sisupod/_sisu/skin/dir","#{path.processing}/sisupod/_sisu/skin/site","#{path.processing}/sisupod/_sisu/image"] - paths.each {|x| mkdir_p(x) unless FileTest.directory?(x) } - end - def defaults #multiple default directories - @default_dir ||=@sys.default_dir #DEFAULT_DIR - end - def manifest_minitoc? - flag=if defined? @rc['manifest']['minitoc'] \ - and not @rc['manifest']['minitoc'].nil? - @rc['manifest']['minitoc'] - else false - end - end - def widget #needs (md) #move - @rc=SiSU_Env::Get_init.instance.yamlrc - @ad=SiSU_Env::Get_init.instance.ads - @vz=SiSU_Env::Get_init.instance.skin - @flag={ :ad=>false,:md=>false,:sk=>false,:rc=>false } - def promo? - @flag[:ad]=if @md.flag_promo && @ad[:flag_promo] - @flag[:md]=true - true - elsif defined? @vz.widget_promo \ - and not @vz.widget_promo.nil? \ - and @vz.widget_promo.class==Array \ - and @vz.widget_promo.length > 0 - @flag[:sk]=true - true - elsif defined? @rc['promo'] \ - and not @rc['promo'].nil? \ - and @rc['promo'].length > 0 - @flag[:rc]=true - true - else false - end - @flag - end - def search? - searches=['sisu','hyperestraier'] - flag=false - if defined? @rc['search'] - searches.each do |type| - flag=if defined? @rc['search'][type] \ - and defined? @rc['search'][type]['action'] \ - and @rc['search'][type]['flag']==true \ - and @rc['search'][type]['action'] =~/https?:\/\// - flag=if promo?[:ad] - false - elsif defined? @vz.widget_search \ - and @vz.widget_search==true - true - elsif defined? @rc['search'][type]['flag'] \ - and @rc['search'][type]['flag']==true - true - else false - end - else false - end - end - else false - end - flag - end - def search_fixed? - searches=['sisu','hyperestraier'] - flag=if defined? @rc['search'] - searches.each do |type| - if defined? @rc['search'][type] \ - and defined? @rc['search'][type]['action'] \ - and @rc['search'][type]['action'] =~/https?:\/\// \ - and defined? @rc['search'][type]['db'] \ - and @rc['search'][type]['db'] =~/\S+/ - flag=if promo?[:ad] - false - elsif defined? @vz.widget_search \ - and @vz.widget_search==true - true - elsif defined? @rc['search'][type]['flag'] \ - and @rc['search'][type]['flag']==true - true - else false - end - else false - end - end - else false - end - end - def search_form(type='sisusearch',action=nil,db=nil,table=false) - rc=SiSU_Env::Get_init.instance.yamlrc - create_form_sisu=if action \ - and db \ - and action =~/https?:\/\// \ - and db =~/\S+/ - true - elsif widget.search? - db=if rc['search']['sisu']['flag']==true \ - and rc['search']['sisu']['db']=~/\S+/ - (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ - ? rc['search']['sisu']['db'] \ - : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" - else nil - end - action=rc['search']['sisu']['action'] - true - elsif defined? rc['search']['sisu']['flag'] \ - and defined? rc['search']['sisu']['action'] \ - and rc['search']['sisu']['flag']==true \ - and rc['search']['sisu']['action'] =~/https?:\/\// - true - else false - end - if table - table_open='<td align="center" bgcolor="#ffffff">' - table_close='</td>' - else - table_open='' - table_close='<br />' - end - form=if create_form_sisu \ - and type=~/sisusearch/ \ - and defined? rc['search']['sisu'] \ - and defined? rc['search']['sisu']['action'] - <<WOK -<!-- SiSU Search --> -#{table_open} -<a name="search"></a> -<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> -<font size="2"> -<input type="text" name="s1" size="24" maxlength="255" /> -<input type="hidden" name="db" value="#{db}" /> -<input type="hidden" name="ltd" value="1000" /> -<input type="hidden" name="off" value="0" /> -<input type="hidden" name="doc" value="#{@md.fnb}" /><br /> -<input type="submit" name="search" value="search doc" /> -<input type="submit" name="search" value="search db" /> -</font></form> -#{table_close} -<!-- SiSU Search --> -WOK - else '' - end - form - end - def search_form_static(action=nil,db=nil) - rc=SiSU_Env::Get_init.instance.yamlrc - create_form=if rc['search']['sisu']['flag']==true \ - and action \ - and db \ - and action =~/https?:\/\// \ - and db =~/\S+/ - true - elsif widget.search_fixed? - db=if rc['search']['sisu']['flag']==true \ - and rc['search']['sisu']['db']=~/\S+/ - (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ - ? rc['search']['sisu']['db'] \ - : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" - else nil - end - action=rc['search']['sisu']['action'] - true - else false - end - if create_form - %{<td align="center" bgcolor="#ffffff"> -<!-- SiSU Search --> -<a name="search"></a> -<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> -<font size="2"> -<input type="text" name="s1" size="24" maxlength="255" /> -<br /> -<input type="hidden" name="db" value="#{db}" /> -<input type="hidden" name="ltd" value="1000" /> -<input type="hidden" name="off" value="0" /> -<input type="hidden" name="doc" value="#{@md.fnb}" /> -<input type="submit" name="search" value="search doc" /> -<input type="submit" name="search" value="search db" /> -</font> -</form> -<!-- SiSU Search --> -</td> } - else '' - end - end - def search_action #check - action=if search? - else '' - end - end - self - end - def widget_static - @rc=SiSU_Env::Get_init.instance.yamlrc - @vz=SiSU_Env::Get_init.instance.skin - @flag={ :ad=>false,:md=>false,:sk=>false,:rc=>false } - def search? - flag=if defined? @rc['search'] \ - and defined? @rc['search']['sisu'] \ - and defined? @rc['search']['sisu']['action'] \ - and @rc['search']['sisu']['action'] =~/https?:\/\// \ - and defined? @rc['search']['sisu']['db'] \ - and @rc['search']['sisu']['db'] =~/\S+/ \ - and defined? @rc['search']['sisu']['db'] \ - and @rc['search']['sisu']['db'] =~/\S+/ - flag=if defined? @vz.widget_search \ - and @vz.widget_search==true - true - elsif defined? @rc['search']['sisu']['flag'] \ - and @rc['search']['sisu']['flag']==true - true - else - false - end - else - false - end - end - def search_fixed? - flag=if defined? @rc['search'] \ - and defined? @rc['search']['sisu'] \ - and defined? @rc['search']['sisu']['action'] \ - and @rc['search']['sisu']['action'] =~/https?:\/\// \ - and defined? @rc['search']['sisu']['db'] \ - and @rc['search']['sisu']['db'] =~/\S+/ \ - and defined? @rc['search']['sisu']['db'] \ - and @rc['search']['sisu']['db'] =~/\S+/ - flag=if defined? @vz.widget_search \ - and @vz.widget_search==true - true - elsif defined? @rc['search']['sisu']['flag'] \ - and @rc['search']['sisu']['flag']==true - true - else - false - end - else - false - end - end - def search_form(action=nil,db=nil) - rc=SiSU_Env::Get_init.instance.yamlrc - create_form=if defined? rc['search']['sisu']['flag'] \ - and rc['search']['sisu']['flag']==true \ - and action \ - and db \ - and action =~/https?:\/\// \ - and db =~/\S+/ - true - elsif widget_static.search? \ - and rc['search']['sisu']['flag']==true - db=if rc['search']['sisu']['db']=~/\S+/ - (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ - ? rc['search']['sisu']['db'] \ - : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" - else nil - end - action=rc['search']['sisu']['action'] - true - else false - end - if create_form \ - and @fnb \ - and @fnb=~/\S+/ - %{<!-- SiSU Search --> -<a name="search"></a> -<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> -<font size="2"> -<input type="text" name="s1" size="24" maxlength="255" /> -<br /> -<input type="hidden" name="db" value="#{db}" /> -<input type="hidden" name="doc" value="#{@fnb}" /> -<input type="submit" name="search" value="search doc" /> -<input type="submit" name="search" value="search db" /> -</font> -</form> -<!-- SiSU Search --> } - elsif create_form - %{<!-- SiSU Search --> -<a name="search"></a> -<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> -<font size="2"> -<input type="text" name="s1" size="24" maxlength="255" /> -<br /> -<input type="hidden" name="db" value="#{db}" /> -<input type="submit" name="search" value="search db" /> -</font> -</form> -<!-- SiSU Search --> } - else '' - end - end - def search_action #check - action=if search? - else '' - end - end - self - end - def source_file_path - file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') - pth=unless file =~/\.ssm\.sst$/; "#{Dir.pwd}" - else "#{path.composite_file}" - end - end - def source_file_with_path - file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') - "#{source_file_path}/#{file}" - end - def read_source_file(fns) - fns_array=if RUBY_VERSION < '1.9' - x=unless fns =~/\.ssm.sst$/ - IO.readlines(fns,'') - else IO.readlines("#{path.composite_file}/#{fns}",'') - end - else #ruby version >= '1.9' - x=unless fns =~/\.ssm.sst$/ - IO.readlines(fns,'r:utf-8') - else IO.readlines("#{path.composite_file}/#{fns}",'r:utf-8') - end - end - end - def font - def texpdf - (defined? @rc['default']['texpdf_font']) \ - && (@rc['default']['texpdf_font']=~/\S{3,}/) \ - ? @rc['default']['texpdf_font'] \ - : 'Liberation Sans' #'Liberation Sans' #'Liberation Serif' - end - self - end - def path #dir - def home - @sys.home - end - def pwd - @sys.pwd - end - def stub_pwd - @stub_pwd - end - def stub_epub - @stub_epub - end - def stub_src - @stub_src - end - def stub_pod - @stub_pod - end - def stub_md_harvest - @stub_md - end - def etc - defaults[:sisu_etc] #live/dynamic - end - def arch - @sys.dir_arch - end - def sitearch - @sys.dir_sitearch - end - def bin - @sys.dir_bin - end - def share #shared data repository source directory - defaults[:sisu_share] - end - def style - defaults[:stylesheet_stub] - end - def sample_data #sample data repository source directory - defaults[:sample_data_path] - end - def rc - @sys.rc_path - end - def yamlrc - rc.each do |v| - if FileTest.exist?("#{v}/sisurc.yml") - @yamlrc_dir="#{v}/sisurc.yml" - break - end - end - unless @yamlrc_dir - rc.each do |v| - if FileTest.exist?("#{v}/sisurc.yaml") - @yamlrc_dir="#{v}/sisurc.yaml" - break - end - end - end - @yamlrc_dir - end - def man #check use - (defined? @rc['webserv']['man']) \ - ? "#{webserv}/#{@rc['webserv']['man']}" \ - : defaults[:webserv_man] - end - def webserv_path #testing, check need, remove - webserv - end - def webserv #separation required for webrick which cannot use path.output (different requirements as no file is passed) - man_path=if @@man_path.nil? - man_path=if defined? @rc['webserv']['path'] \ - and @rc['webserv']['path'] =~/\S\S+/ - man_path=@@man_path=File.expand_path(@rc['webserv']['path']) - else defaults[:webserv_path] - end - else @@man_path - end - man_path_head=man_path.gsub(/(\S+)\/[^\/\s]+$/,'\1') - unless FileTest.directory?(man_path) - mkdir_p(man_path) if File.writable?("#{man_path_head}/.") - end - @webserv_path=if defined? man_path \ - and File.writable?("#{man_path}/.") - man_path #web server path as configured in rc file - elsif FileTest.directory?(defaults[:webserv_path]) \ - and File.writable?("#{defaults[:webserv_path]}/.") #web server path default - defaults[:webserv_path] - else #create default directory under home and place output there - unless FileTest.directory?(defaults[:output_local]) - mkdir_p(defaults[:output_local]) - end - defaults[:output_local] - end - end - def webserv_stub_ensure - mkdir_p(path.webserv) unless FileTest.directory?(path.webserv) - mkdir_p("#{path.webserv}/#{@stub_pwd}") unless FileTest.directory?("#{path.webserv}/#{@stub_pwd}") - end - def webserv_map_pwd #dir - "#{path.webserv}/#{stub_pwd}" - end - def webserv_dir #fixed/hard path to /www web/presentation directory, on Debian /var/www subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) - defaults[:webserv_dir] - end - def webserv_image #web/presentation directory, subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) - images=if defined? @rc['webserv']['images'] - @rc['webserv']['images'] - else defaults[:images] - end - "#{path.webserv}/#{images}" - end - def output #web/webserv output directory... subdirectory into which further subdirectories are made based on file names - "#{path.webserv}/#{@stub_pwd}" - end - def output_src - "#{path.output}/src" - end - def output_md_harvest - "#{path.output}/sisu_site_metadata" - end - def output_pod - "#{path.output}/pod" - end - def output_epub - "#{path.output}/epub" - end - def output_harvest - "#{path.output}/sisu_site_metadata" - end - def manpage - "#{path.output}/man" - end - def sitemaps - "#{path.output}/sitemaps" - end - def encoding - pth="#{processing}/#{defaults[:processing_encoding]}" - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def processing_base_tmp - defaults[:processing_path_tmp_base] - end - def processing_dir_tmp_root - defaults[:processing_dir_tmp_root] - end - def processing_path_root - proposed_path_base=if defined? @rc['processing']['path'] \ - and not @rc['processing']['path'].nil? \ - and not @rc['processing']['path'].empty? - x=if @rc['processing']['path'] =~/^(?:~|home)$/ - home #fix - else @rc['processing']['path'] - end - else nil - end - proposed_dir=if defined? @rc['processing']['dir'] \ - and not @rc['processing']['dir'].nil? \ - and not @rc['processing']['dir'].empty? - @rc['processing']['dir'] - else defaults[:processing_dir] - end - path=if proposed_path_base \ - and FileTest.directory?(proposed_path_base) \ - and File.writable?("#{proposed_path_base}/.") - x=if proposed_dir - "#{proposed_path_base}/#{proposed_dir}" - else - "#{proposed_path_base}/#{defaults[:processing_dir]}" - end - else defaults[:processing_dir_tmp_root] - end - end - def processing_path_usr? - case processing_path_root - when /^\/home/; false - else true - end - end - def processing_path - (processing_path_usr?) \ - ? ("#{processing_path_root}/#{user}/#{stub_pwd}") \ - : ("#{processing_path_root}/#{stub_pwd}") # see defaults[:processing_path] - end - def processing #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) - unless FileTest.directory?(processing_path_root) - mkdir_p(processing_path_root) - File.chmod(0777,processing_path_root) - end - if processing_path_usr? - processing_path_usr="#{processing_path_root}/#{user}" - mkdir_p(processing_path_usr) unless FileTest.directory?(processing_path_usr) - File.chmod(0700,processing_path_usr) - end - mkdir_p(processing_path) unless FileTest.directory?(processing_path) - File.chmod(0700,processing_path) - path_processing=[processing_path,defaults[:processing_path],defaults[:processing_path_home]] - processing=nil - path_processing.each do |v| # - processing=v - unless FileTest.directory?(processing) - puts "a processing directory (#{processing}) is being created for use by sisu" - mkdir_p(processing) - File.chmod(0700,processing) - end - break - end - processing - end - def processing_path_git - proposed_dir=if defined? @rc['git']['dir'] \ - and not @rc['git']['dir'].nil? \ - and not @rc['git']['dir'].empty? - x=(@rc['git']['dir'] =~/^(?:~|home)$/) \ - ? home + '/' + 'sisu:' \ - : @rc['git']['dir'] + '/' + 'sisu:' - else defaults[:processing_git] - end - end - def processing_git - unless FileTest.directory?(processing_path_git) - mkdir_p(processing_path_git) - File.chmod(0700,processing_path_git) - end - processing_path_git - end - def epub - "#{processing}/epub/#{@fnb}" - end - def sql - pth="#{processing}/sql" - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def composite_file - pth=path.dal #"#{processing}/composite" - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def dal - pth=if defined? @rc['processing']['dal'] \ - and not @rc['processing']['dal'].nil? \ - and not @rc['processing']['dal'].empty? - "#{processing}/#{@rc['processing']['dal']}" - else "#{processing}/#{defaults[:processing_dal]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def tune - pth=if defined? @rc['processing']['tune'] \ - and not @rc['processing']['tune'].nil? \ - and not @rc['processing']['tune'].empty? - "#{processing}/#{@rc['processing']['tune']}" - else "#{processing}/#{defaults[:processing_tune]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def odf #_bld - pth="#{processing}/odf" - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def odf_bld - rm_rf(path.odf) - mkdir_p(path.odf) unless FileTest.directory?(path.odf) - mkdir_p("#{path.odf}/Configurations2") unless FileTest.directory?("#{path.odf}/Configurations2") - mkdir_p("#{path.odf}/META-INF") unless FileTest.directory?("#{path.odf}/META-INF") - mkdir_p("#{path.odf}/Pictures") unless FileTest.directory?("#{path.odf}/Pictures") - mkdir_p("#{path.odf}/Thumbnails") unless FileTest.directory?("#{path.odf}/Thumbnails") - path.odf - end - def epub_bld - mkdir_p(path.epub) unless FileTest.directory?(path.epub) - mkdir_p("#{path.epub}/META-INF") unless FileTest.directory?("#{path.epub}/META-INF") - mkdir_p("#{path.epub}/OPS/image") unless FileTest.directory?("#{path.epub}/OPS/image") - mkdir_p("#{path.epub}/OPS/css") unless FileTest.directory?("#{path.epub}/OPS/css") - images=%W[bullet_09.png arrow_next_red.png arrow_prev_red.png arrow_up_red.png] - path.epub - end - def epub_cp_images(md) - pth="#{path.epub}/OPS/image" - mkdir_p(pth) unless FileTest.directory?(pth) - src="#{path.share}/image" - images=%W[bullet_09.png arrow_next_red.png arrow_prev_red.png arrow_up_red.png] - images.each do |i| #move to avoid repeated tests - cp("#{src}/#{i}","#{pth}/#{i}") unless FileTest.file?("#{pth}/#{i}") - end - pth - end - def tex - pth=if defined? @rc['processing']['latex'] \ - and not @rc['processing']['latex'].nil? \ - and not @rc['processing']['latex'].empty? - "#{processing}/#{@rc['processing']['latex']}" - else "#{processing}/#{defaults[:processing_latex]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def texi - pth=if defined? @rc['processing']['texinfo'] \ - and not @rc['processing']['texinfo'].nil? \ - and not @rc['processing']['texinfo'].empty? - "#{processing}/#{@rc['processing']['texinfo']}" - else "#{processing}/#{defaults[:processing_texinfo]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def texinfo #texinfo webserv, check - "#{processing}/#{defaults[:processing_texinfo]}" - end - def lout - pth=if defined? @rc['processing']['lout'] \ - and not @rc['processing']['lout'].nil? \ - and not @rc['processing']['lout'].empty? - "#{processing}/#{@rc['processing']['lout']}" - else "#{processing}/#{defaults[:processing_lout]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def sqlite - pth=if defined? @rc['processing']['sqlite'] \ - and not @rc['processing']['sqlite'].nil? \ - and not @rc['processing']['sqlite'].empty? - "#{processing}/#{@rc['processing']['sqlite']}" - else "#{processing}/#{defaults[:processing_sqlite]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def postgresql - pth=if defined? @rc['processing']['postgresql'] \ - and not @rc['processing']['postgresql'].nil? \ - and not @rc['processing']['postgresql'].empty? - "#{processing}/#{@rc['processing']['postgresql']}" - else "#{processing}/#{defaults[:processing_postgresql]}" - end - mkdir_p(pth) unless FileTest.directory?(pth) - pth - end - def feed - (defined? @rc['webserv']['feed']) \ - ? ("#{public_output}/#{@rc['webserv']['feed']}") \ - : (defaults[:webserv_feed]) - end - def feed_home - "#{public_output}/#{@rc['webserv']['feed_home']}" - end - def scripts #used previously only to include tla version info - if defined? @rc['project']['path']; "#{home}/#{@rc['project']['path']}" - end - end - def cgi - (defined? @rc['webserv']['cgi']) \ - ? "#{@rc['webserv']['cgi']}" \ - : (defaults[:webserv_cgi]) - end - def php - (defined? @rc['webserv']['php']) \ - ? "#{public_output}/#{@rc['webserv']['php']}" \ - : (defaults[:webserv_php]) - end - # programs - def output_tell - url.webserv_map_pwd - end - def image_source #image repository source directory - image_path=if defined? @rc['image']['path'] \ - and defined? @rc['image']['public'] - pth="#{@rc['image']['path']}" - "#{pth}/#{@rc['image']['public']}" - else "#{share}/image" - end - end - def image_source_tex #image repository source directory - image_path=if defined? @rc['image']['path'] \ - and defined? @rc['image']['public'] - pth="#{@rc['image']['path']}" - "#{pth}/#{@rc['image']['public']}" - else - image=defaults[:image_stub] - "#{share}/image" - end - end - def image_external - "#{processing}/external_document/image" - end - def image_source_local_tex - if FileTest.directory?(defaults[:image_local]); defaults[:image_local] - end - end - def image_source_remote_tex - if FileTest.directory?(image_external); image_external - end - end - self - end - def url - def hostname - "http://#{@sys.hostname}" - end - def dir_url - "file://#{path.webserv}/#{stub_pwd}" - end - def localhost - "http://localhost/#{stub_pwd}" - end - def local - "http://#{hostname}/#{@stub_pwd}" - end - def root - if defined? @rc['webserv']['url_root'] \ - and @rc['webserv']['url_root'] =~/https?:\/\// - "#{@rc['webserv']['url_root']}/#{@stub_pwd}" - elsif defined? @rc['webserv']['url_root'] \ - and @rc['webserv']['url_root'] =~/localhost/ - "http://localhost/#{@stub_pwd}" - else "file://#{path.output}" - end - end - def remote - root - end - def epub - "#{root}/epub" - end - def src_txt - "#{root}/src" - end - def src_pod - "#{root}/pod" - end - def webserv_host_base - if defined? @rc['webserv']['host'] - case @rc['webserv']['host'] - when /https?:\/\//; @rc['webserv']['host'] - when /\S+/; "http://#{@rc['webserv']['host']}" - else defaults[:webserv_host_cgi] - end - else defaults[:webserv_host_cgi] - end - end - def webrick_port - if @md \ - and @md.cmd.inspect=~/-F/ \ - and @md.mod.inspect=~/port=(\d+)/ - $1 - else - if defined? @rc['webserv_cgi']['port'] - if @rc['webserv_cgi']['port'].nil? \ - and (defined? @md.mod \ - and not @md.mod.nil? \ - and @md.mod.inspect=~/webrick/) - defaults[:webserv_port_cgi] - elsif not @rc['webserv_cgi']['port'].nil? - @rc['webserv_cgi']['port'] - else defaults[:webserv_port_cgi] - end - else defaults[:webserv_port_cgi] - end - end - end - def webserv_port_cgi - if @md \ - and @md.cmd.inspect=~/-F/ \ - and @md.mod.inspect=~/port=(\d+)/ - $1 - else - if defined? @rc['webserv_cgi']['port'] - if @rc['webserv_cgi']['port'].nil? \ - and (defined? @md.mod \ - and not @md.mod.nil? \ - and @md.mod.inspect=~/webrick/) - defaults[:webserv_port_cgi] - elsif not @rc['webserv_cgi']['port'].nil? - @rc['webserv_cgi']['port'] - else nil - end - else nil - end - end - end - def webserv_cgi #web url for local webserv (localhost, or hostname) - if defined? @rc['webserv_cgi']['host'] \ - and not @rc['webserv_cgi']['host'].nil? - http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') #check https? missing - if webserv_port_cgi - "#{http}#{@rc['webserv_cgi']['host']}:#{webserv_port_cgi}/#{@stub_pwd}" - else "#{http}#{@rc['webserv_cgi']['host']}/#{@stub_pwd}" - end - else - http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') - if webserv_port_cgi - "#{http}#{webserv_host_base}:#{webserv_port_cgi}/#{@stub_pwd}" - else "#{http}#{webserv_host_base}/#{@stub_pwd}" - end - end - end - def webserv_base_cgi #web url for local webserv (localhost, or hostname) - if defined? @rc['webserv_cgi']['host'] \ - and not @rc['webserv_cgi']['host'].nil? - http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') - if webserv_port_cgi - "#{http}#{@rc['webserv_cgi']['host']}:#{webserv_port_cgi}" - else "#{http}#{@rc['webserv_cgi']['host']}" - end - else - http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') - if webserv_port_cgi - "#{http}#{webserv_host_base}:#{webserv_port_cgi}" - else "#{http}#{webserv_host_base}" - end - end - end - def webrick #must have a port #REMOVE - if defined? @rc['webserv_cgi']['host'] \ - and not @rc['webserv_cgi']['host'].nil? - http=if @rc['webserv_cgi']['host'] =~/http:\/\// - 'http://' - elsif @rc['webserv_cgi']['host'] =~/https:\/\// - 'https://' - else defaults - end - "#{http}#{@rc['webserv_cgi']['host']}" - elsif webserv_host_base \ - and not webserv_host_base.nil? - "#{http}#{webserv_host_base}" - else "#{http}localhost" end - end - def webserv #web url for local webserv (localhost, or hostname) - if path.webserv_dir \ - and path.webserv =~ /#{path.webserv_dir}/ #revisit - "#{path.webserv}/#{@stub_pwd}".gsub(/#{path.webserv_dir}/,"#{url.hostname}/#{@stub_pwd}") - elsif defined? @rc['webserv']['webrick_url'] \ - and @rc['webserv']['webrick_url']==false - "file://#{path.webserv}/#{@stub_pwd}" - elsif webserv_port_cgi =~/\S+/ - "#{url.hostname}:#{webserv_port_cgi}/#{@stub_pwd}" - else "#{url.hostname}/#{@stub_pwd}" - end - end - def webserv_base #web url for local webserv (localhost, or hostname) - if path.webserv_dir \ - and path.webserv =~ /#{path.webserv_dir}/ #revisit - "#{path.webserv}/#{@stub_pwd}".gsub(/#{path.webserv_dir}/,"#{url.hostname}") - elsif defined? @rc['webserv']['webrick_url'] \ - and @rc['webserv']['webrick_url']==false - "file://#{path.webserv}" - else "#{url.webrick_base}" - end - end - def webserv_files_from_db #sort this out, messy - if defined? @rc['webserv_cgi']['file_links'] - case @rc['webserv_cgi']['file_links'] - when /webserv_cgi/; url.webserv_base_cgi - when /webserv/; @rc['webserv']['url_root'] - when /https?:\/\//; @rc['webserv_cgi']['file_links'] - when /\S+/; "http://#{@rc['webserv_cgi']['file_links']}" - else webserv_base_cgi - end - else webserv_base_cgi - end - end - def sample_search_form_title - if defined? @rc['search']['sisu']['title'] \ - and @rc['search']['sisu']['title'] =~/\S+/ - @rc['search']['sisu']['title'] - else %{(SiSU (generated sample) search form} - end - end - def output_tell - output_type=if defined? @rc['show_output_on'] \ - and @rc['show_output_on'] =~/^(?:filesystem|webserv|(?:local|remote)(?:_webserv)?|webrick)/ - @rc['show_output_on'] - else 'filesystem' - end - output=case output_type - when /^filesystem(?:_url)?/; url.dir_url - when /^remote(?:_webserv)?/; url.remote - when /^(?:webserv|local_webserv)/; url.local - when /^local(:\d+)/; url.hostname + $1 + '/' + stub_pwd - when /^localhost(:\d+)/; url.localhost + $1 + '/' + stub_pwd - when /^localhost/; url.localhost - when /^webrick/; url.webrick - when /^path/; url.webserv_map_pwd - else url.webserv_map_pwd - end - end - def images - '../_sisu/image' - end - def images_local - if FileTest.directory?(defaults[:image_local]) - if @@image_flag - images=Dir.glob("#{defaults[:image_local]}/*.{png,jpg,gif}") - pth="#{path.webserv}/#{@stub_pwd}" - mkdir_p("#{pth}/_sisu/image") unless FileTest.directory?("#{pth}/_sisu/image") - images.each { |i| File.install(i,"#{pth}/#{i}") } unless images.length > 0 - @@image_flag=false - end - '../_sisu/image' - else - if @@local_image==true - cmd=if @cmd; @cmd - else '' - end - SiSU_Screen::Ansi.new(cmd,"WARNING - no local image directory or images:", defaults[:image_local] ).warn unless cmd =~/q/ - @@local_image=false - end - url.images - end - end - def images_external - if FileTest.directory?(image_external) - if @@image_flag - images=Dir.glob("#{image_external}/*.{png,jpg,gif}") - pth="#{path.webserv}/#{@stub_pwd}" - mkdir_p("#{pth}/_sisu/image_external") unless FileTest.directory?("#{pth}/_sisu/image_external") - images.each { |i| File.install(i,"#{pth}/#{i}") } unless images.length > 0 - @@image_flag=false - end - '../_sisu/image_external' - else - if @@local_image==true - SiSU_Screen::Ansi.new(@cmd,"WARNING - image directory for external images or no such images:", :image_external ).warn unless @cmd =~/q/ - @@local_image=false - end - url.images_external - end - end - def images_epub - './image' - end - self - end - def digest - def type - if defined? @rc['default']['digest'] \ - and @rc['default']['digest'] != nil - case @rc['default']['digest'] - when /^sha(?:2|256)?$/; 'sha256' - when /^md5$/; 'md5' - else 'sha256' - end - else 'sha256' - end - end - def length - case digest.type - when /sha256/; 64 - when /md5/; 32 - else 64 - end - end - def pattern - "[0-9a-f]{#{digest.length}}" #/[0-9a-f]{#{digest.length}}/ - end - self - end - def program - def text_editor - if defined? @rc['program_select']['editor'] \ - and @rc['program_select']['editor'] =~/\S\S+/ - @rc['program_select']['editor'] - elsif defined? @rc['program_select']['text_editor'] \ - and @rc['program_select']['text_editor'] =~/\S\S+/ - @rc['program_select']['text_editor'] - else 'editor' #'gvim -c :R -c :S' - end - end - def pdf_viewer - ((defined? @rc['program_select']['pdf_viewer']) \ - && @rc['program_select']['pdf_viewer'] =~/\S\S+/) \ - ? @rc['program_select']['pdf_viewer'] \ - : 'pdf-viewer' #'evince' - end - def web_browser - if defined? @rc['program_select']['www_browser'] \ - and @rc['program_select']['www_browser'] =~/\S\S+/ - @rc['program_select']['www_browser'] - elsif defined? @rc['program_select']['web_browser'] \ - and @rc['program_select']['web_browser'] =~/\S\S+/ - @rc['program_select']['web_browser'] - else 'x-www-browser' #'firefox' 'iceweasel' 'kazehakase' 'galeon' - end - end - def www_browser - web_browser - end - def console_web_browser - if defined? @rc['program_select']['console_www_browser'] \ - and @rc['program_select']['console_www_browser'] =~/\S\S+/ - @rc['program_select']['console_www_browser'] - elsif defined? @rc['program_select']['console_web_browser'] \ - and @rc['program_select']['console_web_browser'] =~/\S\S+/ - @rc['program_select']['console_web_browser'] - else 'console-www-browser' #'lynx' 'links2' 'elinks' 'epiphany' - end - end - def console_www_browser - web_browser - end - def epub_viewer - if defined? @rc['program_select']['epub_viewer'] \ - and @rc['program_select']['epub_viewer'] =~/\S\S+/ - @rc['program_select']['epub_viewer'] - elsif defined? @rc['program_select']['epub_viewer'] \ - and @rc['program_select']['epub_viewer'] =~/\S\S+/ - @rc['program_select']['epub_viewer'] - else 'ebook-viewer' #'calibre' 'fbreader' - end - end - def xml_viewer - ((defined? @rc['program_select']['xml_viewer']) \ - && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ - ? @rc['program_select']['xml_viewer'] \ - : text_editor - end - def xml_editor - xml_viewer - end - def odf_viewer - ((defined? @rc['program_select']['odf_viewer']) \ - && @rc['program_select']['odf_viewer'] =~/\S\S+/) \ - ? @rc['program_select']['odf_viewer'] \ - : 'lowriter' #'odf-viewer','oowriter' - end - def manpage_viewer - 'man' - end - def manpage_generator - ((defined? @rc['program_select']['man']) \ - && @rc['program_select']['man'] =~/\S\S+/) \ - ? @rc['program_select']['man'] \ - : 'nroff -man' #'nroff -man' #'groff -man -Tascii' - end - def file_encoding - is=(defined? @rc['program_set']['file_encoding']) ? @rc['program_set']['encoding'] : '' - (is.nil? || is==true) ? 'encoding' : is - end - def wc #wordcount - is=(defined? @rc['program_set']['wc']) ? @rc['program_set']['wc'] : '' - (is.nil? || is==true) ? 'wc' : is - end - def tidy - is=(defined? @rc['program_set']['tidy']) ? @rc['program_set']['tidy'] : nil - (is.nil? || is==true) ? 'tidy' : is - end - def rmagick - is=(defined? @rc['program_set']['rmagick']) ? @rc['program_set']['rmagick'] : nil - (is.nil? || is==true) ? 'rmagick' : is - end - def rexml #should be part of ruby 1.8 but apparently not always - is=(defined? @rc['program_set']['rexml']) ? @rc['program_set']['rexml'] : '' - (is.nil? || is==true) ? 'rexml' : is - end - def pdflatex - is=(defined? @rc['program_set']['pdflatex']) ? @rc['program_set']['pdflatex'] : '' - (is.nil? || is==true) ? 'pdflatex' : is - end - def postgresql - is=(defined? @rc['program_set']['postgresql']) ? @rc['program_set']['postgresql'] : '' - (is.nil? || is==true) ? 'postgresql' : is - end - def sqlite - is=(defined? @rc['program_set']['sqlite']) ? @rc['program_set']['sqlite'] : '' - (is.nil? || is==true) ? 'sqlite' : is - end - self - end - def i18n - def language # language settings - m=/.+\/\S+?\~(\S+)/ - pwd=Dir.pwd - conf=(defined? @rc['default']['language']) ? @rc['default']['language'] : nil - l=if pwd=~ m; pwd[m,1] #2 directory: by visible directory name - elsif conf; @rc['default']['language'] #3 config: from sisurc.yaml - else defaults[:language] #4 sisu: program default - end #1 document: param gets - SiSU_Env::Standardise_language.new(l) - end - def multilingual - ((defined? @rc['default']['multilingual']) \ - && @rc['default']['multilingual'] != nil) \ - ? @rc['default']['multilingual'] \ - : (defaults[:multilingual]) - end - def lang_filename(l) - @lang={} - x=if multilingual - (( defined? @rc['default']['language_file']) \ - && @rc['default']['language_file'] != nil) \ - ? @rc['default']['language_file'] \ - : 1 - else 0 - end - if (l != defaults[:language_code]) \ - or (language.code != defaults[:language_code]) #watch - if x==1; @lang[:pre],@lang[:mid],@lang[:post]="#{l}.",'','' - elsif x==2; @lang[:pre],@lang[:mid],@lang[:post]='',".#{l}",'' - elsif x==3; @lang[:pre],@lang[:mid],@lang[:post]='','',".#{l}" - else @lang[:pre],@lang[:mid],@lang[:post]='','','' - end - else @lang[:pre],@lang[:mid],@lang[:post]='','','' - end - @lang - end - self - end - def file_encoding - is='' - if defined? @rc['program_set']['file_encoding']; is=@rc['program_set']['encoding'] - end - if is.nil? \ - or is==true; is='encoding' - end - is - end - def papersize # paper settings, default overidden in param if set within document - (defined? @rc['default']['papersize']) \ - ? @rc['default']['papersize'].downcase \ - : (defaults[:papersize].downcase) - end - def odf_structure - rm_rf("#{path.processing}/odf") - system("unzip -q #{path.share}/#{SiSU_version_dir}/odf/odt.zip -d #{path.processing}") - end - def sisupod_gen(fns_pod) - pwd=Dir.pwd - sisupod_processing_path="#{path.processing}/sisupod" - if FileTest.directory?(sisupod_processing_path) \ - or FileTest.file?(sisupod_processing_path) - rm_rf(sisupod_processing_path) - end - unless FileTest.directory?(sisupod_processing_path) - mkdir_p(sisupod_processing_path) - end - if FileTest.file?("#{Dir.pwd}/#{fns_pod}") - system("unzip -q #{Dir.pwd}/#{fns_pod} -d #{path.processing}") - else - SiSU_Screen::Ansi.new('',"file not found: #{fns_pod}").warn unless @cmd=~/q/ - end - sisupod_processing_path - end - end - class Info_processing_flag - attr_accessor :color,:cf_0,:cf_1,:cf_2,:cf_3,:cf_4,:cf_5 - def initialize - @rc=Get_init.instance.yamlrc - end - def color #processing flag shortcuts - (defined? @rc['flag']['color']) ? @rc['flag']['color'] : false - end - def cf_0 #processing flag shortcuts - if defined? @rc['flag']['default'] \ - and not (@rc['flag']['default'].nil? \ - or @rc['flag']['default'].empty?) - @rc['flag']['default'] - else '-NhwepoabxXyYv' - end - end - def cf_1 #processing flag shortcuts - if defined? @rc['flag']['i'] \ - and not (@rc['flag']['i'].nil? \ - or @rc['flag']['i'].empty?) - @rc['flag']['i'] - else '-hwepoay' - end - end - def cf_2 #processing flag shortcuts - if defined? @rc['flag']['ii'] \ - and not (@rc['flag']['ii'].nil? \ - or @rc['flag']['ii'].empty?) - @rc['flag']['ii'] - else '-NhwepoabxXy' - end - end - def cf_3 #processing flag shortcuts - if defined? @rc['flag']['iii'] \ - and not (@rc['flag']['iii'].nil? \ - or @rc['flag']['iii'].empty?) - @rc['flag']['iii'] - else '-NhwepoabxXyY' - end - end - def cf_4 #processing flag shortcuts - if defined? @rc['flag']['iv'] \ - and not (@rc['flag']['iv'].nil? \ - or @rc['flag']['iv'].empty?) - @rc['flag']['iv'] - else '-NhwepoabxXDyY --update' - end - end - def cf_5 #processing flag shortcuts - if defined? @rc['flag']['v'] \ - and not (@rc['flag']['v'].nil? \ - or @rc['flag']['v'].empty?) - @rc['flag']['v'] - else '-NhwepoabxXDyYv --update' - end - end - end - class Info_settings < Info_env - def permission?(prog) #program defaults - (defined? @rc['permission_set'][prog]) ? @rc['permission_set'][prog] : false - end - def program?(prog) #program defaults - (defined? @rc['program_set'][prog]) ? @rc['program_set'][prog] : false - end - end - class File_map < Info_env - attr_accessor :local_sisu_source - def initialize(opt='') #watch - super() - @opt=opt #,opt.fns,opt.cmd - @env=(@opt.fns && !(@opt.fns.empty?) \ - ? (SiSU_Env::Info_env.new(@opt.fns)) \ - : (SiSU_Env::Info_env.new('dummy.sst'))) - if @opt.cmd =~/m/; @md=SiSU_Param::Parameters.new(@opt).get - end - ft=[] - if @md \ - and defined? @md.fn \ - and @md.fn # used for multilingual - if @md.cmd =~ /[hH]/ - ft << @md.fn[:html] - end - if @md.cmd =~ /w/ \ - and @md.cmd !~ /[hH]/ - ft << @md.fn[:concordance] - end - if @md.cmd =~ /y/ \ - and @md.cmd !~ /[hH]/ - ft << @md.fn[:manifest] - end - if @md.cmd =~ /[at]/; ft << @md.fn[:plain] - end - if @md.cmd =~ /b/; ft << @md.fn[:xhtml] - end - if @md.cmd =~ /e/; ft << @md.fn[:epub] - end - if @md.cmd =~ /g/; ft << @md.fn[:wiki] - end - if @md.cmd =~ /i/; ft << @md.fn[:manpage] - end - if @md.cmd =~ /N/; ft << @md.fn[:digest] - end - if @md.cmd =~ /o/; ft << @md.fn[:odf] - end - if @md.cmd =~ /O/; ft << @md.fn[:oai_pmh] - end - if @md.cmd =~ /p/; ft << @md.fn[:pdf_l] << @md.fn[:pdf_p] - end - if @md.cmd =~ /s/; ft << @md.fns - end - if @md.cmd =~ /S/; ft << @md.fn[:sisupod] << '.kdi' - end - if @md.cmd =~ /x/; ft << @md.fn[:sax] - end - if @md.cmd =~ /X/; ft << @md.fn[:dom] - end - @fnb=@md.fnb - else # still needed where/when param is not parsed - if @opt.cmd =~ /[hH]/; ft << '.html' << '.html.??' - end - if @opt.cmd =~ /w/ \ - and @opt.cmd !~ /[hH]/ - ft << 'concordance.html' << '??.concordance.html' << 'concordance.??.html' - end - if @opt.cmd =~ /y/ \ - and @opt.cmd !~ /[hH]/ - ft << 'sisu_manifest.html' << '??.sisu_manifest.html' << 'sisu_manifest.??.html' - end - if @opt.cmd =~ /a/; ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' - end - if @opt.cmd =~ /b/; ft << 'scroll.xhtml' << '??.scroll.xhtml' << 'scroll.??.xhtml' - end - if @opt.cmd =~ /e/; ft << @fnb << '.epub' - end - if @opt.cmd =~ /g/; ft << 'wiki.txt' << '??.wiki.txt' << 'wiki.??.txt' - end - if @opt.cmd =~ /i/; ft << '.1' << '??.man.1' << 'man.??.1' - end - if @opt.cmd =~ /N/; ft << 'digest.txt' << '??.digest.txt' << 'digest.??.txt' - end - if @opt.cmd =~ /o/; ft << 'opendocument.odt' << '??.opendocument.odt' << 'opendocument.??.odt' - end - if @opt.cmd =~ /O/; ft << 'oai_pmh.xml' - end - if @opt.cmd =~ /p/; ft << 'landscape.pdf' << 'portrait.pdf' << '.pdf' - end - if @opt.cmd =~ /s/; ft << '.sst' << '.ssi' << '.ssm' - end - if @opt.cmd =~ /S/; ft << '.zip' << '.kdi' - end - if @opt.cmd =~ /x/; ft << 'sax.xml' << '??.sax.xml' << 'sax.??.xml' - end - if @opt.cmd =~ /X/; ft << 'dom.xml' << '??.dom.xml' << 'dom.??.xml' - end - if @opt.mod.inspect =~ /sxm|sxs|xml/; ft << @fnb << '.sxs.xml' - end - if @opt.mod.inspect =~ /sxd/; ft << @fnb << '.sxd.xml' - end - if @opt.mod.inspect =~ /sxn/; ft << @fnb << '.sxn.xml' - end - end - ft=ft.uniq - filetypes=ft.join(',') - @filetypes=if filetypes !~/..+/; '' # -r called alone, copy all - elsif @opt.cmd =~/u/; '' # -u added, copy all, (used to create remote directory tree see output path), not the usual function of -u - elsif filetypes =~/\S+?,\S+/; '*{' + filetypes + '}' # more than one relevant file type - else '*' + filetypes # one relevant file type - end - @source_path=(@fnb && !(@fnb.empty?) \ - ? "#{@env.path.output}/#{@fnb}" \ - : @env.path.output) - @source_path_epub=(@fnb && !(@fnb.empty?) \ - ? "#{@env.path.output}/epub" \ - : @env.path.output_epub) - @source_path_src=(@fnb && !(@fnb.empty?) \ - ? "#{@env.path.output}/src" \ - : @env.path.output_src) - @source_path_pod=(@fnb && !(@fnb.empty?) \ - ? "#{@env.path.output}/pod" \ - : @env.path.output_pod) - @source_path_harvest=(@fnb && !(@fnb.empty?) \ - ? "#{@env.path.output}/sisu_site_metadata" \ - : @env.path.output_harvest) - @local_sisu_source=(@filetypes =~/\S/) \ - ? "#{@source_path}/#{@filetypes}" \ - : @source_path - end - end - class Clean_output - require 'fileutils' - include FileUtils::Verbose - def initialize(opt) - @opt=opt - z=File_map.new(@opt) - @zap=z.local_sisu_source - if @opt.cmd =~ /[hH]/ - @zap=Dir.glob(@zap).join(' ') - if @opt.cmd !~ /w/; @zap.gsub!(/#{@source_path}\/concordance.html/,'') - end - end - @env=SiSU_Env::Info_env.new - end - def zap - def main_output - (@zap !~/\/\//) \ - ? (rm_rf(@zap) if FileTest.directory?(@zap)) \ - : (puts 'suspect zap request, ignored') - end - def site_map - if @opt.fnb \ - and not @opt.fnb.empty? - sm="#{@env.path.output}/sitemaps/sitemap_#{@opt.fnb}.xml" - rm(sm) if FileTest.file?(sm) - end - end - def epub - if @opt.fnb \ - and not @opt.fnb.empty? - sm="#{@env.path.output}/epub/#{@opt.fnb}.epub" - rm(sm) if FileTest.file?(sm) - end - end - def src # consider - if @opt.fnb \ - and not @opt.fnb.empty? - sm="#{@env.path.output}/pod/#{@opt.fns}.zip" - rm(sm) if FileTest.file?(sm) - sm="#{@env.path.output}/src/#{@opt.fns}" - rm(sm) if FileTest.file?(sm) - end - end - self - end - end - class Info_remote_host - def initialize - @rc=Get_init.instance.yamlrc - end - def remote_host #see Info_remote remote_host_base_general - r=[] - r=if (defined? @rc['remote'] \ - and @rc['remote'].class==Array) - r_array=@rc['remote'] - r_array.each_with_index do |renv,i| - r[i]={} - if defined? renv['user'] \ - and defined? renv['host'] - end - r[i][:user]=renv['user'] - r[i][:host]=renv['host'] - r[i][:path]=if defined? renv['path'] - renv['path'] - else '' - end - r[i][:name]="#{r[i][:user]}@#{r[i][:host]}:#{r[i][:path]}" - end - r - elsif (defined? @rc['remote'] \ - and @rc['remote'].class==Hash \ - and defined? @rc['remote']['user'] \ - and defined? @rc['remote']['host']) - r[0]={} - r[0][:user]=@rc['remote']['user'] - r[0][:host]=@rc['remote']['host'] - r[0][:path]=if defined? @rc['remote']['path'] - @rc['remote']['path'] - else '' - end - r[0][:name]="#{r[0][:user]}@#{r[0][:host]}:#{r[0][:path]}" - r - else - r[0]={} - r[0][:name]='.' - r[0][:user]='' - r[0][:host]='' - r[0][:path]='' - #puts "no remote host or user" - r - end - end - def rhost - def r1 - (defined? SiSU_Env::Info_remote_host.new.remote_host[0][:name]) \ - ? (SiSU_Env::Info_remote_host.new.remote_host[0][:name]) \ - : nil - end - def r2 - (defined? SiSU_Env::Info_remote_host.new.remote_host[1][:name]) \ - ? (SiSU_Env::Info_remote_host.new.remote_host[1][:name]) \ - : nil - end - def r3 - (defined? SiSU_Env::Info_remote_host.new.remote_host[2][:name]) \ - ? (SiSU_Env::Info_remote_host.new.remote_host[2][:name]) \ - : nil - end - def r4 - (defined? SiSU_Env::Info_remote_host.new.remote_host[3][:name]) \ - ? (SiSU_Env::Info_remote_host.new.remote_host[3][:name]) \ - : nil - end - def r5 - (defined? SiSU_Env::Info_remote_host.new.remote_host[4][:name]) \ - ? (SiSU_Env::Info_remote_host.new.remote_host[4][:name]) \ - : nil - end - def r6 - (defined? SiSU_Env::Info_remote_host.new.remote_host[5][:name]) \ - ? (@ls + SiSU_Env::Info_remote_host.new.remote_host[5][:name]) \ - : nil - end - self - end - end - class Info_remote < File_map - @@flag_remote=false - require 'socket' - def initialize(opt) - super(opt) # - @opt=opt - @rc=Get_init.instance.yamlrc - end - def remote_host_base_general - SiSU_Env::Info_remote_host.new.remote_host - end - def remote_host_base - remote_host_base_general.each do |remote_conn| - @@flag_remote=true if remote_conn[:name] =~/\S+?@\S+/ - end - remote_host_base_general - end - def scp #sort out later using ruby libraries #not ideal, first time each file is sent, -r must be called separately for subdir to be built - self.remote_host_base.each do |remote_conn| - local_gen=@source_path - remote_gen=case @opt.cmd - when /u/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." #creates remote directory tree, this is not the usual function of u - when /[abhHNopwxXy]/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/#{@fnb}/." - else "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - end - local_epub=@source_path_epub - local_src=@source_path_src - local_pod=@source_path_pod - remote_epub="#{remote_conn[:name]}/#{@env.path.stub_epub}/." - remote_src="#{remote_conn[:name]}/#{@env.path.stub_src}/." - remote_pod="#{remote_conn[:name]}/#{@env.path.stub_pod}/." - src_txt=@opt.fnc - src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.zip') - if (local_gen =~/\S/ \ - and local_gen !~/\/\//) \ - and (remote_gen =~/\S/ \ - and remote_gen !~/\/\//) \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - System_call.new(local_gen,remote_gen).scp - if FileTest.file?("#{local_src}/#{src_txt}") - System_call.new("#{local_src}/#{src_txt}",remote_src).scp - end - if FileTest.file?("#{local_pod}/#{src_pod}") - System_call.new("#{local_src}/#{src_pod}",remote_pod).scp - end - if FileTest.file?("#{local_epub}/#{@opt.fnb}.epub") - System_call.new("#{local_epub}/#{@opt.fnb}.epub",remote_epub,@opt.cmd).scp - end - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "#{local_gen} -> #{remote_gen}" - if FileTest.file?("#{local_src}/#{src_doc}") - puts "#{local_src}/#{src_doc}* -> #{remote_src}" - end - if FileTest.file?("#{local_pod}/#{src_doc}.zip") - puts "#{local_pod}/#{src_doc}* -> #{remote_pod}" - end - else - puts 'suspect scp request, ignored' - puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" - puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def rsync - self.remote_host_base.each do |remote_conn| - local_gen=@source_path - local_gen_image="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" - local_gen_image_external="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external" - remote_gen="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - remote_images="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/image/." - remote_images_external="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/image_external/." - local_epub=@source_path_epub - local_src=@source_path_src - local_pod=@source_path_pod - remote_epub="#{remote_conn[:name]}/#{@env.path.stub_epub}/." - remote_src="#{remote_conn[:name]}/#{@env.path.stub_src}/." - remote_pod="#{remote_conn[:name]}/#{@env.path.stub_pod}/." - src_txt=@opt.fnc - src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.zip') - if (local_gen =~/\S/ \ - and local_gen !~/\/\//) \ - and (remote_gen =~/\S/ \ - and remote_gen !~/\/\//) \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - delete_extra_files='--delete' # '--delete-after' - System_call.new(local_gen,remote_gen,@opt.cmd).rsync(delete_extra_files) - if FileTest.file?("#{local_src}/#{src_txt}") - System_call.new("#{local_src}/#{src_txt}",remote_src,@opt.cmd).rsync - if defined? @md.ec[:image] and not @md.ec[:image].empty? - images="#{local_gen_image}/" + @md.ec[:image].join(" #{local_gen_image}/") - System_call.new(images,remote_images,@opt.cmd).rsync - images_external="#{local_gen_image_external}/" + @md.ec[:image].join(" #{local_gen_image_external}/") - System_call.new(images_external,remote_images_external,@opt.cmd).rsync - end - end - if FileTest.file?("#{local_epub}/#{@opt.fnb}.epub") - System_call.new("#{local_epub}/#{@opt.fnb}.epub",remote_epub,@opt.cmd).rsync - end - if FileTest.file?("#{local_pod}/#{src_pod}") - System_call.new("#{local_pod}/#{src_pod}",remote_pod,@opt.cmd).rsync - end - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "#{local_gen} -> #{remote_gen}" - if FileTest.file?("#{local_src}/#{src_doc}") \ - or FileTest.file?("#{local_src}/#{src_doc}.zip") - puts "#{local_src}/#{src_doc}* -> #{remote_src}" - end - else - puts 'suspect rsync request, ignored' - puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" - puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def scp_base #base site - self.remote_host_base.each do |remote_conn| - local=@source_path - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - if defined? @rc['permission_set']['remote_base_site'] \ - and @rc['permission_set']['remote_base_site'] \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - puts "begin scp_base: #{local} -> #{remote}" - System_call.new("#{local}/#{@env.path.style}/",remote).scp - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "begin scp_base: #{local} -> #{remote}" - puts "#{local}/#{@env.path.style}/ -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def scp_base_all #base site - self.remote_host_base.each do |remote_conn| - local=@source_path - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - if defined? @rc['permission_set']['remote_base_site'] \ - and @rc['permission_set']['remote_base_site'] \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - puts "begin scp_base_all: #{local} -> #{remote}" - System_call.new("#{local}/_sisu/image_sys/",remote).scp - System_call.new("#{local}/_sisu/image/",remote).scp - System_call.new("#{local}/#{@env.path.style}/",remote).scp - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "scp_base_all: #{local} -> #{remote}" - puts "#{local}/_sisu/image_sys/ -> #{remote}" - puts "#{local}/_sisu/image/ -> #{remote}" - puts "#{local}/#{@env.path.style}/ -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def rsync_base #base site - ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu" - image_sys="#{@env.path.webserv}/_sisu/image_sys" - images="#{@env.path.webserv}/_sisu/image" - self.remote_host_base.each do |remote_conn| - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - remote_conf="#{remote_conn[:name]}/_sisu" - if defined? @rc['permission_set']['remote_base_site'] \ - and @rc['permission_set']['remote_base_site'] \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - System_call.new("#{image_sys}","#{remote_conf}").rsync - System_call.new("#{images}","#{remote_conf}").rsync - System_call.new("#{ldest}","#{remote}").rsync - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "rsync_base: #{local} -> #{remote}" - puts "#{local}/_sisu/image -> #{remote}" - puts "#{local}/_sisu/image_sys/ -> #{remote}" - puts "#{local}/#{@env.path.style}/ -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def rsync_base_sync #base site - self.remote_host_base.each do |remote_conn| - local=@source_path - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - if defined? @rc['permission_set']['remote_base_site'] \ - and @rc['permission_set']['remote_base_site'] \ - and @@flag_remote==true \ - and @opt.cmd !~/U/ - delete_extra_files='--delete' # '--delete-after' - puts "begin rsync_base_sync: #{local} -> #{remote}" - System_call.new("#{local}/_sisu/image_sys/",remote).rsync(delete_extra_files) - System_call.new("#{local}/_sisu/image/",remote).rsync(delete_extra_files) - System_call.new("#{local}/#{@env.path.style}/",remote).rsync(delete_extra_files) - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "rsync_base_sync: #{local} -> #{remote}" - puts "#{local}/_sisu/image_sys/ -> #{remote}" - puts "#{local}/_sisu/image/ -> #{remote}" - puts "#{local}/#{@env.path.style}/ -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def rsync_sitemaps #sitemap directory - self.remote_host_base.each do |remote_conn| - local="#{@source_path}/sitemapindex.xml" - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - if @@flag_remote - delete_extra_files='--delete' # '--delete-after' - System_call.new(local,remote).rsync(delete_extra_files) - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "rsync_sitemaps: #{local} -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - def rsync_harvest - self.remote_host_base.each do |remote_conn| - local=@source_path_harvest - remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." - if @@flag_remote - delete_extra_files='--delete' # '--delete-after' - System_call.new(local,remote).rsync(delete_extra_files) - elsif @opt.cmd =~/U/ - puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - puts "rsync_sitemaps: #{local} -> #{remote}" - else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ - end - end - end - end - class Info_version <Info_env - include Singleton - require 'rbconfig' - @@lib_path=nil - def get_version - @version={} - @pwd=ENV['PWD'] - yst_ver="#{defaults[:sisu_share]}/#{SiSU_version_dir}/v/version.yml" - lib_path=@@lib_path ? @@lib_path : `echo $RUBYLIB`.split(':') - @@lib_path ||=lib_path - if File.exist?(yst_ver); @version=YAML::load(File::open(yst_ver)) #unless @@noyaml - end - @version - end - def rbversion - %x{ruby -v}.strip - end - end - class Create_system_link #< Info_env #revisit problems created 2004w41 - def initialize - @env=SiSU_Env::Info_env.new - end - def images - unless FileTest.directory?("#{@env.path.output}/_sisu") - mkdir_p("#{@env.path.output}/_sisu") - end - unless File.exist?("#{@env.path.output}/_sisu/image_sys") \ - or File.symlink?("#{@env.path.output}/_sisu/image_sys") - File.symlink("../../_sisu/image_sys", "#{@env.path.output}/_sisu/image_sys") - end - end - def man_forms - #File.symlink("../../man/form", "#{@env.path.output}/man/form") unless File.symlink?("#{@env.path.output}/man/form")==true - end - def man_pdf - #File.symlink("../../man/form", "#{@env.path.output}/man/pdf") unless File.symlink?("#{@env.path.output}/man/pdf")==true - end - end - class Info_file < Info_env - def initialize(fns='') - @env=SiSU_Env::Info_env.new - @fns=fns - end - def basefilename - m=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/m - fnb=@fns[m,1] - end - def project - "#{@env.development}/sisu.lnk" - end - def project_info - "#{@env.datapriv_i}/sisu.er3" - end - def project_todo - "#{@env.development}/todo.txt" - end - def admin_self - "#{@env.path.home}/.corundum/dots.lnk" - end - def admin_root - '/root/.corundum/admin.txt' - end - end - class Info_db < Info_env - @@rc=nil - def initialize - @@pwd ||=Dir.pwd - @pwd=Dir.pwd - @env=SiSU_Env::Info_env.new - m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @pwd_stub=@pwd[m,1] - @rc=@@rc ||=Get_init.instance.yamlrc - @defaults=Info_env.new.defaults - end - def share_source? - ((defined? @rc['db']['share_source']) \ - && @rc['db']['share_source']==true) \ - ? @rc['db']['share_source'] \ - : false - end - def engine - def default - ((defined? @rc['db']['engine']['default']) \ - && @rc['db']['engine']['default']=~/postgresql|sqlite/) \ - ? @rc['db']['engine']['default'] \ - : 'sqlite' - end - self - end - def psql - def user - ((defined? @rc['db']['postgresql']['user']) \ - && @rc['db']['postgresql']['user']=~/\S+/) \ - ? @rc['db']['postgresql']['user'] \ - : @env.user - end - def db #db_name - "#{Db[:name_prefix]}#{@pwd_stub}" - end - def port #PGPORT - ((defined? @rc['db']['postgresql']['port']) \ - && ( @rc['db']['postgresql']['port'] =~/\d+/ \ - || @rc['db']['postgresql']['port'].class==Fixnum)) \ - ? @rc['db']['postgresql']['port'] \ - : (@defaults[:postgresql_port]) - end - def password - ((defined? @rc['db']['postgresql']['password']) \ - && @rc['db']['postgresql']['password']=~/\S+/) \ - ? @rc['db']['postgresql']['password'] \ - : '' - end - def host - ((defined? @rc['db']['postgresql']['host']) \ - && @rc['db']['postgresql']['host']=~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ - ? @rc['db']['postgresql']['host'] \ - : '' - end - def dbi - (psql.host =~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ - ? "DBI:Pg:database=#{psql.db};host=#{psql.host};port=#{psql.port}" \ - : "DBI:Pg:database=#{psql.db};port=#{psql.port}" - end - def conn_dbi - DBI.connect(psql.dbi,psql.user,psql.db) - end - self - end - def mysql - def db - #"#{Db[:name_prefix]}#{@pwd_stub}" - end - def port - '**' - end - def dbi - "dbi:Mysql:database=#{mysql.db};port=#{mysql.port}" - end - self - end - def sqlite - def db - "#{@env.path.webserv}/#{@pwd_stub}/sisu_sqlite.db" - end - def dbi - "DBI:SQLite3:#{sqlite.db}" #sqlite3 ? - end - def sqlite3 - sqlite.db #sqlite3 ? - end - def conn_dbi - DBI.connect(sqlite.dbi) - end - def conn_sqlite3 - SQLite3::Database.new(sqlite.sqlite3) - end - self - end - end - class Info_port < Info_env - def initialize - @env=SiSU_Env::Info_env.new - end - def webrick - @env.url.webrick_port - end - end - class Info_program < Info_env #revisit - attr_accessor :editor,:wc,:tidy,:rexml,:pdflatex,:postgresql,:sqlite - def initialize - prog=SiSU_Env::Info_env.new.program - @editor,@wc,@tidy,@rexml,@pdflatex,@postgresql,@sqlite=prog.text_editor,prog.wc,prog.tidy,prog.rexml,prog.pdflatex,prog.postgresql,prog.sqlite - end - end - class Info_skin - def initialize(md=nil,skin=nil) - @md=md - @d_sk=if skin.class==String ; skin - elsif defined? md.doc_skin \ - and md.doc_skin - md.doc_skin - else nil - end - @home,@pwd=ENV['HOME'],ENV['PWD'] - m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @pwd_stub=@pwd[m,1] - @env=SiSU_Env::Info_env.new - end - def select # skin loading logic here - load "#{SiSU_lib}/defaults.rb" - skin_path=[] - @env.sys.rc_path.each{|x| skin_path << "#{x}/skin"} - skin_path << "#{@env.path.processing}/external_document/skin" - skin=true - if @pwd_stub =~/^sisupod$/ \ - and @md.mod.inspect !~/--trust/ - skin=false #security only run skins on sisupod if --trust flag is provided - end - doc_skin,dir_skin=nil,nil - if skin - unless @d_sk.nil? - sk_doc="doc/#{@d_sk}.rb" - skin_path.each do |v| #document skin priority 1 - if FileTest.file?("#{v}/#{sk_doc}") - doc_skin="#{v}/#{sk_doc}" - load doc_skin - break - end - end - end - unless doc_skin - sk_dir="dir/skin_#{@pwd_stub}.rb" - skin_path.each do |v| #directory skin priority 2 - if FileTest.file?("#{v}/#{sk_dir}") - dir_skin="#{v}/#{sk_dir}" - load dir_skin - break - end - end - end - end - sk=if doc_skin; doc_skin - elsif dir_skin; dir_skin - else nil - end - end - end - class CSS_default - def html - 'html.css' - end - def html_tables - 'html_tables.css' - end - def xhtml - 'xhtml.css' - end - def xml_sax - 'sax.css' - end - def xml_dom - 'dom.css' - end - def docbook_xml - 'docbook.css' - end - def homepage - 'homepage.css' - end - def harvest - 'harvest.css' - end - end - class CSS_select < Info_env - def initialize(md) - @md=md - @env=SiSU_Env::Info_env.new - end - def html - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html.css") - "#{@md.doc_css}_html.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_html.css") - "#{@env.path.stub_pwd}_html.css" - else CSS_default.new.html - end - end - def html_tables - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html_tables.css") - "#{@md.doc_css}_html_tables.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_html_tables.css") - "#{@env.path.stub_pwd}_html_tables.css" - else CSS_default.new.html_tables - end - end - def xhtml - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xhtml.css") - "#{@md.doc_css}_xhtml.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xhtml.css") - "#{@env.path.stub_pwd}_xhtml.css" - else CSS_default.new.xhtml - end - end - def xml_sax - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_sax.css") - "#{@md.doc_css}_xml_sax.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xml_sax.css") - "#{@env.path.stub_pwd}_xml_sax.css" - else CSS_default.new.xml_sax - end - end - def xml_dom - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_dom.css") - "#{@md.doc_css}_xml_dom.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xml_dom.css") - "#{@env.path.stub_pwd}_xml_dom.css" - else CSS_default.new.xml_dom - end - end - def docbook_xml - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_docbook.css") - "#{@md.doc_css}_xml_dom.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_docbook.css") - "#{@env.path.stub_pwd}_docbook.css" - else CSS_default.new.docbook_xml - end - end - def homepage - css=if @md.doc_css \ - and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_homepage.css") - "#{@md.doc_css}_homepage.css" - elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_homepage.css") - "#{@env.path.stub_pwd}_homepage.css" - else CSS_default.new.homepage - end - end - end - class CSS_stylesheet - def initialize(md) - @md=md - @css=CSS_select.new(@md) - @env=SiSU_Env::Info_env.new - end - def html - %{ <link rel="stylesheet" href="../#{@env.path.style}/#{@css.html}" type="text/css" />} - end - def html_tables - %{ <link rel="stylesheet" href="../#{@env.path.style}/#{@css.html_tables}" type="text/css" />} - end - def xhtml_epub - %{ <link rel="stylesheet" href="css/xhtml.css" type="text/css" />} - end - end - class SiSU_file <Info_env #todo unify with Create_file - def initialize(md,fno='') - begin - @fno,@fns,@fnb=fno,md.fns,md.fnb - @env=SiSU_Env::Info_env.new(@fns) - @env_out="#{@env.path.output}/#{@fnb}" - rescue; STDERR.puts SiSU_Screen::Ansi.new(@cmd,$!,$@).rescue - ensure - end - end - def make_file(path,filename) - if File.writable?("#{path}/."); File.new("#{path}/#{filename}",'w+') - else SiSU_Screen::Ansi.new('',"is the file or directory writable?, could not create #{filename}").warn - end - end - def touch_file(path,filename) - if File.writable?("#{path}/."); - system("touch #{path}/#{filename}") - else SiSU_Screen::Ansi.new('',"is the file or directory writable?, could not create #{filename}").warn - end - end - def make_path(path) - mkdir_p(path) unless FileTest.directory?(path) - end - def mkdir_initialize # not used but consider using - mkdir_p(@env.path.output) unless FileTest.directory?(@env.path.output) - mkdir_p("#{@env.path.output}/#{@fnb}") unless FileTest.directory?("#{@env.path.output}/#{@fnb}") - mkdir_p("#{@env.path.output}/#{@env.path.style}") unless FileTest.directory?("#{@env.path.output}/#{@env.path.style}") - mkdir_p(@env.path.dal) unless FileTest.directory?(@env.path.dal) - mkdir_p(@env.path.tune) unless FileTest.directory?(@env.path.tune) - end - def mkdir - dir=@env.path.output - txt_path="#{dir}/#{@fnb}" - mkdir_p(dir) unless FileTest.directory?(dir) - mkdir_p(txt_path) unless FileTest.directory?(txt_path) - mkdir_p("#{dir}/#{@env.path.style}") unless FileTest.directory?("#{dir}/#{@env.path.style}") - mkdir_p(@env.path.dal) unless FileTest.directory?(@env.path.dal) - mkdir_p(@env.path.tune) unless FileTest.directory?(@env.path.tune) - end - def mkfile #consider using more - path="#{@env.path.output}/#{@fnb}" - filename=@fno - file=make_file(path,filename) - end - def mkfile_man - path="#{@env.path.output}/man" - make_path(path) - filename=@fno - file=make_file(path,filename) - end - def mkfile_pwd - path=Dir.pwd - filename=@fno - file=make_file(path,filename) - end - end - class Create_file <Info_env #todo unify with SiSU_file - def initialize(cmd,fns,operation='') - @cmd=cmd - begin - super(fns) - @env=SiSU_Env::Info_env.new(fns) - ver=Info_version.instance - if operation.class.inspect =~/SiSU_Param/ - @md=operation - end - case operation #watch - when /pdf/; @env_out='' - when /sql/ - when /xml|plaintext|ascii/; @env_out="#{@env.path.output}/#{@fnb}" #check change of name to plaintext from ascii - else - if defined? @md.sfx_src \ - and @md.sfx_src =~/ss[ftsumc]/ - @env_suf='lm' - @env_out_root=@env.path.output - @env_out="#{@env.path.output}/#{@fnb}" - @env_tex=@env.path.tex - @env_lout=@env.path.lout - @@publisher='SiSU http://www.jus.uio.no/sisu' - @env_pdf="#{@env_out_root}/pdf" - end - end - rescue; STDERR.puts SiSU_Screen::Ansi.new(@cmd,$!,$@).rescue - ensure - end - end - def param_instantiate - @cX||=SiSU_Screen::Ansi.new(@cmd) - @@date=Info_date.new - @@proc=@@filename_txt=@@filename_texinfo=@@filename_lout_portrait=@@filename_lout_landscape=@@filename_html_scroll=@@filename_html_index=@@filename_html_segtoc=@@filename_semantic=@@filename_rss=@@newfile=@@drr=@@yaml=@@yamladdr=nil - @@publisher='SiSU scribe' - end - def marshal - def dal_content - "#{@env.path.dal}/#{@fns}.content.rbm" - end - def dal_idx_sst_rel_html_seg - "#{@env.path.dal}/#{@fns}.idx_sst.rbm" - end - def dal_idx_sst_rel - "#{@env.path.dal}/#{@fns}.idx_tex.rbm" - end - def dal_idx_html - "#{@env.path.dal}/#{@fns}.idx_html.rbm" - end - def dal_idx_xhtml - "#{@env.path.dal}/#{@fns}.idx_xhtml.rbm" - end - def dal_metadata - "#{@env.path.dal}/#{@fns}.metadata.rbm" - end - def dal_map_nametags - "#{@env.path.dal}/#{@fns}.map_name_tags.rbm" - end - def dal_map_ocn_htmlseg - "#{@env.path.dal}/#{@fns}.map_ocn_htmlseg.rbm" - end - self - end - def html_root - #@env.path.output - end - def mkdir_pdf - Dir.mkdir(@env.path.tex) unless FileTest.directory?(@env.path.tex) - end - def file_generic(output_file='') - filename="#{@env.path.output}/#{@fnb}/#{output_file}" - File.new(filename,'w+') - end - def file_error - File.new('/tmp/errorlog.sisu','w+') - end - def file_txt - File.new("#{@env.path.dal}/#{@fns}.txt",'w+') - end - def file_debug - File.new("#{@env.path.dal}/#{@fns}.debug.txt",'w+') - end - def file_meta - File.new("#{@env.path.dal}/#{@fns}.meta",'w+') - end - def file_meta_idx_html - File.new("#{@env.path.dal}/#{@fns}.idx.html",'w+') - end - def file_note - File.new("#{Dir.pwd}/#{@fns}.fn",'w+') - end - def meta - "#{@env.path.dal}/#{@fns}.meta" - end - def file_tune - File.new("#{@env.path.tune}/#{@fns}.tune",'w+') - end - def marshal_tune - "#{@env.path.tune}/#{@fns}.marshal_tune" - end - def file_semantic - filename_semantic="./semantic.yaml" - @@filename_semantic=File.new(filename_semantic,'w+') - end - def file_rss - filename_rss="./semantic.xml" - @@filename_rss=File.new(filename_rss,'w+') - end - def file_html_scroll(md) - filename_scroll="#{@env.path.output}/#{md.fnb}/#{md.fnl[:pre]}doc#{md.fnl[:mid]}.html#{md.fnl[:post]}" - @@filename_html_scroll=File.new(filename_scroll,'w+') - end - def file_html_index(md) - filename_index="#{@env.path.output}/#{md.fnb}/#{md.fnl[:pre]}index#{md.fnl[:mid]}.html#{md.fnl[:post]}" - @@filename_html_index=File.new(filename_index,'w+') - end - def file_html_segtoc(md) - filename_segtoc="#{@env.path.output}/#{md.fnb}/#{md.fnl[:pre]}toc#{md.fnl[:mid]}.html#{md.fnl[:post]}" - File.new(filename_segtoc,'w+') - end - def epub - @pth=@env.path.epub - def xhtml_index - filename_index="#{@pth}/OPS/index.xhtml" - File.new(filename_index,'w+') - end - def xhtml_segtoc - filename_segtoc="#{@pth}/OPS/toc.xhtml" - File.new(filename_segtoc,'w+') - end - def mimetype #fixed application/epub+zip ~/grotto/theatre/dbld/builds/epub_sample/mimetype - File.new("#{@pth}/mimetype",'w') - end - def metadata #variable matadata ~/grotto/theatre/dbld/builds/epub_sample/metadata.opf - File.new("#{@pth}/OPS/epb.opf",'w') - end - def toc_ncx #variable toc ~/grotto/theatre/dbld/builds/epub_sample/toc.ncx - File.new("#{@pth}/OPS/epb.ncx",'w') - end - def metainf_cont #variable content ~/grotto/theatre/dbld/builds/epub_sample/META-INF/container.xml - File.new("#{@pth}/META-INF/container.xml",'w') - end - def xhtml_css #fixed epub xhtml css - File.new("#{@pth}/OPS/css/xhtml.css",'w') - end - self - end - def file_texinfo - File.new("#{@env.path.texinfo}/#{@fnb}.texinfo",'w+') - end - end - class Create_site < Info_env - require "#{SiSU_lib}/css" # css.rb - include SiSU_Style - def initialize(cmd) - @cmd=cmd - @env=SiSU_Env::Info_env.new - @home,@pwd=ENV['HOME'],ENV['PWD'] #@pwd=Dir.pwd - @rc=Get_init.instance.yamlrc - @vz=SiSU_Env::Get_init.instance.skin - @vz_home=SiSU_Viz::Home.new - end - def homepage - homepage_path=nil - @env.sys.rc_path.each do |v| - if FileTest.file?("#{v}/home/index.html") - homepage_path="#{v}/home/index.html" - break - end - end - mkdir_p("#{@env.path.webserv}/#{@env.path.stub_pwd}") unless FileTest.directory?("#{@env.path.webserv}/#{@env.path.stub_pwd}") - if homepage_path \ - and FileTest.file?(homepage_path) - cp(homepage_path,"#{@env.path.webserv}/#{@env.path.stub_pwd}/index.html") - cp(homepage_path,"#{@env.path.webserv}/#{@env.path.stub_pwd}/toc.html") - else - doc_skin=nil - sk_doc='doc/skin_sisu.rb' - @env.sys.rc_path.each do |v| #document skin priority 1 - if FileTest.file?("#{v}/skin/#{sk_doc}") - doc_skin="#{v}/skin/#{sk_doc}" - load doc_skin - break - end - end - filename_homepage=File.new("#{@env.path.webserv}/#{@env.path.stub_pwd}/index.html",'w') - filename_homepage_toc=File.new("#{@env.path.webserv}/#{@env.path.stub_pwd}/toc.html",'w') - filename_homepage << @vz_home.homepage - filename_homepage_toc << @vz_home.homepage - end - end - def html_seg_title_banner? - ((defined? @rc['html']['seg_title_banner']) \ - && @rc['html']['seg_title_banner']==true) \ - ? @rc['html']['seg_title_banner'] \ - : false - end - def html_quick_ref? - ((defined? @rc['html']['quick_ref']) \ - && @rc['html']['quick_ref']==true) \ - ? @rc['html']['quick_ref'] \ - : false - end - def cp_images(src_path,dest_path) - if FileTest.directory?(src_path) - cd(src_path) - source=Dir.glob("*.{png,jpg,gif,ico}") - mkdir_p(dest_path) unless FileTest.directory?(dest_path) - chmod(0755,dest_path) - source.each do |i| - cp_r(i,"#{dest_path}/#{i}") - chmod(0644,"#{dest_path}/#{i}") - end - cd(@pwd) - else puts "\tWARN, did not find - #{src_path}" - end - end - def cp_local_images - src="#{@pwd}/_sisu/image" - dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" - cp_images(src,dest) - end - def cp_external_images - src="#{@env.path.processing}/external_document/image" - dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external" - cp_images(src,dest) - end - def cp_webserver_images - src=@env.path.image_source - dest="#{@env.path.webserv}/_sisu/image" - cp_images(src,dest) - end - def cp_webserver_images_local #this should not have been necessary - src=@env.path.image_source - dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" - cp_images(src,dest) - end - def cp_base_images #fix images - src="#{@env.path.share}/image" - dest="#{@env.path.webserv}/_sisu/image_sys" - cp_images(src,dest) - end - def cp_css - mkdir_p("#{@env.path.output}/#{@env.path.style}") unless FileTest.directory?("#{@env.path.output}/#{@env.path.style}") - css_path=['/etc/sisu/css',"#{@home}/.sisu/css","#{@pwd}/_sisu/css"] #BROKEN - if defined? @rc['permission_set']['css_modify'] \ - and @rc['permission_set']['css_modify'] - SiSU_Screen::Ansi.new(@cmd,"modify is css set to: #{@rc['permission_set']['css_modify']}").warn if @cmd=~/[MV]/ - css_path.each do |x| - if FileTest.directory?(x) - cd(x) - source=Dir.glob("*.{css}") - source.each do |i| - cp(i,"#{@env.path.output}/#{@env.path.style}") - end - cd(@pwd) - end - end - else SiSU_Screen::Ansi.new(@cmd,"modify css is not set or is set to: false").warn if @cmd=~/[MV]/ - end - fn_css=SiSU_Env::CSS_default.new - css=SiSU_Style::CSS.new - path_style="#{@env.path.output}/#{@env.path.style}" - mkdir_p(path_style) unless FileTest.directory?(path_style) - style=File.new("#{path_style}/#{fn_css.homepage}",'w') - style << css.homepage - style.close - style=File.new("#{path_style}/#{fn_css.html_tables}",'w') - style << css.html_tables - style.close - style=File.new("#{path_style}/#{fn_css.html}",'w') - style << css.html - style.close - style=File.new("#{path_style}/#{fn_css.xml_sax}",'w') - style << css.xml_sax - style.close - style=File.new("#{path_style}/#{fn_css.xml_dom}",'w') - style << css.xml_dom - style=File.new("#{path_style}/#{fn_css.docbook_xml}",'w') - style << css.docbook_xml - style.close - style=File.new("#{path_style}/#{fn_css.xhtml}",'w') - style << css.xhtml - style=File.new("#{path_style}/#{fn_css.harvest}",'w') - style << css.harvest - style.close - end - end -end -module SiSU_Screen - require "#{SiSU_lib}/screen_text_color" # screen_text_color.rb -end -module SiSU_Errors - require "#{SiSU_lib}/errors" # errors.rb -end -__END__ -https? intro check 2007-09-22 - -fns_array=unless fns =~/\.ssm.sst$/ - if RUBY_VERSION < '1.9' - IO.readlines(fns,'') - else IO.readlines(fns,'r:utf-8') - end -else - if RUBY_VERSION < '1.9' - IO.readlines("#{path.composite_file}/#{fns}",'') - else IO.readlines("#{path.composite_file}/#{fns}",'r:utf-8') - end -end diff --git a/lib/sisu/v2/texpdf.rb b/lib/sisu/v2/texpdf.rb deleted file mode 100644 index 6503c931..00000000 --- a/lib/sisu/v2/texpdf.rb +++ /dev/null @@ -1,830 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: LaTeX generation - -=end -module SiSU_TeX - require 'pstore' - require "#{SiSU_lib}/defaults" # defaults.rb - include SiSU_Viz - require "#{SiSU_lib}/particulars" # particulars.rb - include SiSU_Particulars - require "#{SiSU_lib}/texpdf_format" # texpdf_format.rb - include SiSU_TeX_Pdf - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - @tex_file=@@tex_footnote_array=@@tex_col_w=[] - @@tabular="{tabular}" - @@column_instruct=@@squigle_close=@@tex_line_mode=@@tex_word_mode=@@line_mode='' - @@tex_debug_counter=@@table_pagebreak_counter=@@tex_footnote_call_counter=@@tex_table_flag=@@tex_counter=@@tex_column=@@tex_columns=@@tex_columns=@@counting=0 - @@tex_pattern_margin_number=/\\\\begin\\\{tiny\\\}\\\\hspace\\\{0mm\\\}\\\\end\\\{tiny\\\}\\\{\\\\marginpar.+?\s+/ - @@n=@@tableheader=@@rights=nil - @@date ||=SiSU_Env::Info_date.new - class Source - require 'pstore' - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env - include SiSU_Viz - require "#{SiSU_lib}/dal" # dal.rb - include SiSU_DAL - include SiSU_TeX - def initialize(opt) - @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) - @md=@particulars.md - @env=@particulars.env - end - def directories - begin - @dir_out_root=@env.path.output - case @opt.fns - when /\.(?:-|ssm\.)?sst$/ - SiSU_Env::SiSU_file.new(@md).mkdir - Dir.mkdir(@env.path.tex) unless FileTest.directory?(@env.path.tex) - end - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - def read - song - end - def song - begin - @md=@particulars.md - SiSU_Screen::Ansi.new(@opt.cmd,'LaTeX/PDF',@md.fns).green_title_hi unless @opt.cmd =~/q/ - if @opt.cmd =~/[MVv]/ - path=@env.url.output_tell - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.program.pdf_viewer} #{path}/#{@md.fnb}/#{@md.fn[:pdf_l]}").flow - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.program.pdf_viewer} #{path}/#{@md.fnb}/#{@md.fn[:pdf_p]}").flow - end - @md=@particulars.md - SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - $flag=@md.cmd #introduced to pass 0 for no object citation numbers... to texpdf_format - @dir_o="#{@env.path.output}/#{@opt.fnb}" - directories - #% needed needs to be reprogrammed !!! - SiSU_Env::Info_skin.new(@md).select - dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here - SiSU_TeX::Source::LaTeX_create.new(@particulars).songsheet - dal_array='' - pwd=Dir.pwd - SiSU_TeX::Source::LaTeX_to_pdf.new(@md,@particulars.env).latexrun_selective - Dir.chdir(pwd) - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - unless @opt.cmd =~/[MV]/ #check maintenance flag - texfiles=Dir["#{@env.path.tex}/#{@opt.fns}*"] - texfiles.each do |f| - if FileTest.file?(f) - File.unlink(f) - end - end - end - @tex_file=@@tex_footnote_array=[] - @@column_instruct='' - @@squigle_close=@@tex_line_mode=@@tex_word_mode=@@line_mode='' - @@tex_debug_counter=@@table_pagebreak_counter=@@tex_footnote_call_counter=@@tex_table_flag=@@tex_counter=@@tex_column=@@tex_columns=@@tex_columns=@@counting=0 - @@tex_col_w=[] - @@n=@@tableheader=@@rights=nil - @@date=SiSU_Env::Info_date.new - @@flag={} - $flag=1 #remove at some stage - SiSU_Env::Create_file.new(@opt.cmd,@opt.fns).param_instantiate - end - end - private - class LaTeX_to_pdf - require 'fileutils' - include FileUtils #::Verbose - @@n_lpdf||=0 #change - def initialize(md,env) - @md,@env=md,env - end - def latex_do(texfilename,papersize) - @texfilename=texfilename - @@n_lpdf=@@n_lpdf+1 - SiSU_Screen::Ansi.new(@md.cmd,"#{papersize} portrait ->").dark_grey_title_hi if @md.cmd =~/[MVv]/ - tex_fn_base=@texfilename.gsub(/\.tex$/,'') - cmd=SiSU_Env::System_call.new("#{tex_fn_base}.tex",'',@md.cmd) - tell=SiSU_Screen::Ansi.new(@md.cmd) - tell.grey_open if @md.cmd =~/[MVv]/ - if "#{tex_fn_base}" =~/\w+/ \ - and "#{papersize}" =~/\w+/ - 2.times { |i| cmd.latex2pdf(@md,papersize) } - end - tell.p_off if @md.cmd =~/[MVv]/ - SiSU_Screen::Ansi.new(@md.cmd,"#{papersize} landscape ->").dark_grey_title_hi if @md.cmd =~/[MVv]/ - cmd=SiSU_Env::System_call.new("#{tex_fn_base}.landscape.tex",'',@md.cmd) - tell.grey_open if @md.cmd =~/[MVv]/ - if "#{tex_fn_base}" =~/\w+/ \ - and "#{papersize}" =~/\w+/ - 2.times { |i| cmd.latex2pdf(@md,papersize) } - end - tell.p_off if @md.cmd =~/[MVv]/ - pwd=Dir.pwd - portrait_pdf="#{pwd}/#{tex_fn_base}.pdf" - landscape_pdf="#{pwd}/#{tex_fn_base}.landscape.pdf" - case papersize - when /a4/; pdf_p=@md.fn[:pdf_p_a4]; pdf_l=@md.fn[:pdf_l_a4] - when /a5/; pdf_p=@md.fn[:pdf_p_a5]; pdf_l=@md.fn[:pdf_l_a5] - when /b5/; pdf_p=@md.fn[:pdf_p_b5]; pdf_l=@md.fn[:pdf_l_b5] - when /letter/; pdf_p=@md.fn[:pdf_p_letter]; pdf_l=@md.fn[:pdf_l_letter] - when /legal/; pdf_p=@md.fn[:pdf_p_legal]; pdf_l=@md.fn[:pdf_l_legal] - else pdf_p=@md.fn[:pdf_p_a4]; pdf_l=@md.fn[:pdf_l_a4] - end - if FileTest.file?(portrait_pdf) - cp(portrait_pdf,"#{@dir_sisu}/#{@md.fnb}/#{pdf_p}") - rm(portrait_pdf) - else p "#{__FILE__}:#{__LINE__} NOT FOUND: #{portrait_pdf}" if @md.cmd.inspect =~/M/ - end - if FileTest.file?(landscape_pdf) - cp(landscape_pdf,"#{@dir_sisu}/#{@md.fnb}/#{pdf_l}") - rm(landscape_pdf) - else p "#{__FILE__}:#{__LINE__} NOT FOUND: #{landscape_pdf}" if @md.cmd.inspect =~/M/ - end - SiSU_Screen::Ansi.new(@md.cmd,@@n_lpdf,'processed (SiSU LaTeX to pdf - using pdfetex aka. pdftex or pdflatex)').generic_number if @md.cmd =~/[MVv]/ - end - def latexrun_selective - begin - pwd=Dir.pwd - Dir.chdir(pwd) #watch - @tex_f_no=0 - info={} - if FileTest.file?(@env.source_file_with_path) - @md.papersize_array.each do |ps| - if @md.fns =~/\.(?:-|ssm\.)?sst$/ - @dirout=SiSU_Env::Info_env.new(@md.fns) - case @md.fns - when /\.(?:-|ssm\.)?sst$/ - if FileTest.directory?(@env.path.tex)==true - Dir.chdir(@env.path.tex) - @dir_sisu=@dirout.path.output - texfile=@md.fns.gsub(/$/,".#{ps}.tex") - texfile=texfile.gsub(/~/,'-') - if File.exist?(texfile) \ - and File.size(texfile) > 0 - @tex_f_no+=1 - #p "#{__FILE__}:#{__LINE__} texpdf generation disabled" if @md.cmd.inspect =~/M/ #%% disable temporarily, re-enable - latex_do(texfile,ps) - else - puts "\tzero file size #{@env.path.tex}/#{texfile}" - end - end - end - end - end - outputdir="#{@dir_sisu}/#{@md.fnb}" - case @md.papersize_array[0] #default pdf - when /a4/; pdf_p=@md.fn[:pdf_p_a4]; pdf_l=@md.fn[:pdf_l_a4] - when /a5/; pdf_p=@md.fn[:pdf_p_a5]; pdf_l=@md.fn[:pdf_l_a5] - when /b5/; pdf_p=@md.fn[:pdf_p_b5]; pdf_l=@md.fn[:pdf_l_b5] - when /letter/; pdf_p=@md.fn[:pdf_p_letter]; pdf_l=@md.fn[:pdf_l_letter] - when /legal/; pdf_p=@md.fn[:pdf_p_legal]; pdf_l=@md.fn[:pdf_l_legal] - else pdf_p=@md.fn[:pdf_p_a4]; pdf_l=@md.fn[:pdf_l_a4] - end - if FileTest.file?("#{outputdir}/#{pdf_p}") - system(" - cd #{outputdir} - rm portrait.pdf - ln -s #{pdf_p} portrait.pdf - ") - end - if FileTest.file?("#{outputdir}/#{pdf_l}") - system(" - cd #{outputdir} - rm landscape.pdf - ln -s #{pdf_l} landscape.pdf - ") - end - else - SiSU_Screen::Ansi.new(@md.cmd,"FILE NOT FOUND: << #{@md.fns} >> - requested latex system processing skipped").warn - end - lst=Dir["*.{aux,log,out}"] - lst.each {|file| File.unlink(file)} if lst - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - end - end - end - class LaTeX_create - @@tex_head={ - 'a4'=> {:p => nil, :l => nil}, - 'a5'=> {:p => nil, :l => nil}, - 'b5'=> {:p => nil, :l => nil}, - 'letter'=>{:p => nil, :l => nil}, - 'legal'=> {:p => nil, :l => nil}, - 'book'=> {:p => nil, :l => nil} - } - @@prefix_b=nil - def initialize(particulars) - @particulars=particulars - @md=@particulars.md - @env=@particulars.env - @data=@particulars.dal_array # dal file drawn here - @st={ :tex=>{} } - @tex_ml=SiSU_TeX_Pdf::Use_TeX.new(@md) - @vz=SiSU_Env::Get_init.instance.skin - @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern - @brace_url=SiSU_Viz::Skin.new.url_decoration - vz=SiSU_Env::Get_init.instance.skin - @skin_no_ocn=if defined? vz.ocn_display_off \ - and vz.ocn_display_off==true - true - else false - end - end - def songsheet - begin - data=@data - @@tex_footnote_array=[] - @@rights=nil - SiSU_Screen::Ansi.new(@md.cmd,"pdfTex portrait & landscape").txt_grey if @md.cmd=~/[MVvz]/ - if defined? @md.rights.all \ - and not @md.rights.all.empty? - rght=@md.rights #.author.dup #dup is necessary, else contents of :rights changed - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,rght.copyright.all) - copymark=@md.author_copymark \ - ? '{\begin{small}\copyright\end{small}} ' \ - : '' - copymark='Copyright {\begin{small}\copyright\end{small}} ' - copyright=sp_char.special_characters_safe.gsub(/^\s*Copyright \(C\)/, copymark) - @@rights||="\n #{Tex[:backslash]*2}[3]\\ \\linebreak #{copyright}" - end - if defined? @md.notes.prefix_b \ - and not @md.notes.prefix_b.empty? - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,@md.notes.prefix_b) - prefix_b=sp_char.special_characters_safe - @@prefix_b="\n #{Tex[:backslash]*2}[3]\\ \\linebreak \\ #{prefix_b}\n" unless @@prefix_b - end - data=pre(data) - data=footnote(data) - if @md.flag_tables #WORK ON 2009 - data=tables(data) #uncomment to start experimenting with tables - end - ocn=if @md.markup.inspect =~/no_ocn/ \ - or @md.mod.inspect =~/--no-ocn/ \ - or @skin_no_ocn - false - else true - end - data=number_paras(data) - data=markup(data) - output(data) - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - ensure - end - end - protected - def pre(data) - @tex_file=[] - data.each do |dob| - # DEBUG 2003w16 this is a kludge, because i could not get parameters - # from param, Sort out ... revert to more elegant solution - # even more of a kludge as had to insert newlines where code is used not satisfactory, think about - dob.tmp=dob.obj #.dup - if dob.is=='para' \ - or dob.is=='heading' - dob.tmp.gsub!(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,'') - dob.tmp=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp).special_characters - if dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ - dob.tmp=SiSU_TeX_Pdf::Format_text_object.new(@md,dob.tmp).url_str_internal(dob.tmp) - end - elsif dob.is =='code' - dob.tmp=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp).special_characters_code - elsif dob.is =='break' - if dob.obj==Mx[:br_page]; dob.tmp='\newpage' - elsif dob.obj==Mx[:br_page_new]; dob.tmp='\clearpage' - elsif dob.obj==Mx[:obj_ln_sep]; dob.tmp='\parasep' - end - elsif dob.is=='comment' \ - or dob.is=='meta' - dob.tmp='' #dob.tmp=nil - end - end - data - end - def footnote(data) - data.each do |dob| - # EMBEDDED FOOTNOTES / ENDNOTES should be straightforward but not quite a synch. - if dob.tmp =~/#{Mx[:en_a_o]}[\d*+]+\s|#{Mx[:en_b_o]}([*+]\d+)\s/ - dob.tmp.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m,"\\footnote[\\1]{%\n \\2} ") - dob.tmp.gsub!(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/m,"\\FootnoteA{\\1}{%\n \\2} ") - dob.tmp.gsub!(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/m,"\\FootnoteA{\\1}{%\n \\2} ") - end - end - data - end - def tables_hash(md,dob) - @block={} - @dob=dob - @md.papersize_array.each do |ps| - @@tableheader={ ps => { :p => 0, :l => 0 }} - dob.tmp={:tmp =>dob.tmp,:paper_size =>ps} - format_l=SiSU_TeX_Pdf::Format_text_object.new(md,dob) - dob.tmp={:tmp =>dob.tmp,:paper_size =>ps} - format_p=SiSU_TeX_Pdf::Format_text_object.new(md,dob) - @block[ps]={ - :l => format_l.longtable_landscape, - :p => format_p.longtable_portrait - } - end - @dob.tmp=@block - @dob - end - def tables(data) - @tex_file=[] - data.each do |dob| - @tex_file << if dob.class==String \ - or dob.class==Hash; dob - elsif dob.is=='table' - tables_hash(@md,dob) #Hash result - else dob - end - end - @tex_file - end - def enclose(dob) - dob - end - def markup_common(dob) - tex_f=nil - txt_obj={:dal =>dob} - if dob.of=='group' - @lineone=case dob.is - when /alt|group|verse/ - dob.tmp.gsub!(/#{Mx[:nbsp]}/m,'{~}') - dob.tmp.gsub!(/#{Mx[:gl_bullet]}/m,'$\txtbullet$\hspace{\enspace}') #Bullet environment not used for grouped text, ∴ no hanging indent here - dob.tmp.gsub!(/#{Mx[:br_nl]}+/m,"\n\n") #match not ideal, but currently not inserting extra newlines anyway - ocn=SiSU_TeX_Pdf::Format_text_object.new(@md).ocn_display(dob) - dob.tmp=if dob.is=='group' \ - or dob.is=='alt' - ocn \ - + @tex_ml.paraskip_small \ - + "\n" \ - + ' \\begin{footnotesize}' \ - + "\n\n" \ - + dob.tmp \ - + '\\end{footnotesize}' \ - + "\n" \ - + @tex_ml.paraskip_normal - elsif dob.is=~/verse/ - ocn \ - + @tex_ml.paraskip_tiny \ - + "\n" \ - + ' \\begin{footnotesize}' \ - + "\n\n" \ - + dob.tmp \ - + '\\end{footnotesize}' \ - + "\n" \ - + @tex_ml.paraskip_normal \ - + "\n\\linebreak\n" - end - dob - when /code/ - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob.tmp,dob.is) - dob.tmp=sp_char.special_characters_safe - dob.tmp.gsub!(/#{Mx[:nbsp]}/,'{~}') #dob.tmp.gsub!(/#{Mx[:nbsp]}\s*/,'{~}') - dob.tmp.gsub!(/#{Mx[:vline]}/m,'\vline') - dob.tmp.gsub!(/ \\( |#{Mx[:br_nl]})/,' {\textbackslash}\1') - dob.tmp.gsub!(/#{Mx[:br_nl]}\s*\Z/m,'') - dob.tmp.gsub!(/#{Mx[:br_nl]}{2}/,'\newline \\\\\\ ') - dob.tmp.gsub!(/#{Mx[:br_nl]}/,' \\\\\\ ') - dob.tmp.gsub!(/\n\n\n/m," \\newline\n\n") - ocn=SiSU_TeX_Pdf::Format_text_object.new(@md).ocn_display(dob) - dob.tmp = ocn \ - + @tex_ml.paraskip_small \ - + '\begin{Codeblock}' \ - + dob.tmp \ - + ' \end{Codeblock}' \ - + "\n" \ - + @tex_ml.paraskip_normal - dob - else 'error' #should never occur - end - if dob.tmp =~/<=curly/ #takes care of escaped curly braces, expand - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob) - dob.tmp=sp_char.special_characters_curly(dob.tmp) - end - dob=enclose(dob) unless dob.tmp =~/^$/ - dob - else - tst=SiSU_TeX_Pdf::Format_text_object.new(@md,dob) - case dob.is - when 'heading' - case dob.ln - when 1..3 - tst.heading_major - when 4 - tst.level4 - when 5 - tst.level5 - when 6 - tst.level6 - else dob - end - when 'heading_insert' - br="\n\\\\\n" - if dob.name=='book_index' - h=tst.heading_major - heading="\\clearpage\n" + h.tmp - idx_arr=[] - idx=SiSU_Particulars::Combined_singleton.instance.get_idx_tex(@md.opt).tex_idx - idx.each do |x| - x=if x.class==String - x=SiSU_TeX_Pdf::Special_characters.new(@md,x).special_characters - x=SiSU_TeX_Pdf::Format_text_object.new(@md,x).url_str_internal(x,true) - else x=nil - end - idx_arr << x.sub(/,$/,'') if x.class==String - end - idx_str=idx_arr.join(br) - l=heading + br + idx_str - p=heading + br + - '\begin{multicols}{2}' + br + - idx_str + br + - '\end{multicols}' - dob.tmp={:l =>l,:p =>p} - elsif dob.ln==2 \ - and dob.obj=~/Metadata\b/ - tst.heading_major - elsif dob.ln==4 \ - and dob.obj=~/Metadata\b/ - h=tst.level4 - metadata=Metadata::TeX_metadata.new(@md).metadata_tex - dob.tmp=h.tmp + ' ' + '\begin{scriptsize}' + metadata.join(br) + '\end{scriptsize}' - else dob.tmp='' # dob.tmp={:l =>'',:p =>''} - end - when 'para' - if dob.bullet_ - dob.tmp=tst.bullet - elsif dob.indent \ - and dob.indent =~/[1-9]/ - dob.tmp=tst.indent - else - dob.tmp.strip! - dob=enclose(dob) unless dob.tmp =~/^$/ - end - else - dob.tmp.strip! - dob=enclose(dob) unless dob.tmp =~/^$/ - end - if dob.class==String - dob.tmp.gsub!(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,' \newline ') #% tread with care - dob.tmp.gsub!(/(\.#{Tex[:tilde]}\S*\s*|<:\S+>|#{Mx[:fa_o]}.*?#{Mx[:fa_c]}|#{Mx[:gr_o]}.*?#{Mx[:gr_c]}|<!.*?!>|<!>)/,' ') #% tread with care - end - if dob.tmp =~/<=curly/ #takes care of escaped curly braces, expand - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,dob) - dob.tmp=sp_char.special_characters_curly(dob.tmp) - end - dob - end - if dob.tmp =~/(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image\b)/m \ - and dob.is !='code' - dob=SiSU_TeX_Pdf::Bare_urls.new(@md,dob).bare_urls - tst=SiSU_TeX_Pdf::Format_text_object.new(@md,dob) - dob=tst.urls_txt_and_images - dob - elsif dob.tmp =~/https?:\/\/\S+\b/m \ - and dob.is =='code' - dob=SiSU_TeX_Pdf::Bare_urls.new(@md,dob).bare_urls_in_code - dob - end - if dob.class !=Hash and dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\b/ \ - and dob.is !='code' - tst=SiSU_TeX_Pdf::Format_text_object.new(@md,dob) - end - dob - end - def markup(data) - @tex_file=[] - md={} - home=@vz.txt_home.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}|#{Mx[:br_paragraph]}|\\\\/,' - ') #no line splitting in heading neither html nor latex - title=@md.title.full.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}|#{Mx[:br_paragraph]}|\\\\/,' - ') #no line splitting in heading neither html nor latex - @md.papersize_array.each do |ps| - txt_obj={:txt =>"#{home}: - #{title}",:paper_size =>ps,:orientation =>'portrait'} - orient_portrait=SiSU_TeX_Pdf::Format_head.new(@md,txt_obj) - txt_obj={:txt =>"#{home}: - #{title}",:paper_size =>ps,:orientation =>'landscape'} - orient_landscape=SiSU_TeX_Pdf::Format_head.new(@md,txt_obj) - @@tex_head[ps][:p]=orient_portrait.document_head_with_orientation - @@tex_head[ps][:l]=orient_landscape.document_head_with_orientation - end - @tex_file <<<<WOK -#{@tex_ml.header}#{@tex_ml.footer} -\\tolerance=300 -\\clubpenalty=300 -\\widowpenalty=300 -\\makeatother -\\makeatother -\\chardef\\txtbullet="2022 -\\chardef\\tilde="7E -%\\chardef\\asterisk="2A -\\def\\asterisk{{\\rm \\char42} } -\\definecolor{Light}{gray}{.92} -\\newcommand{\\Codeblock}[1]{\\normaltext\\raggedright\\small\\ttfamily\\texbackslash#1} -\\newcommand{\\monosp}[1]{\\normaltext\\ttfamily\\texbackslash#1} -\\newcommand{\\parasep}{\\\\ \\begin{center}*\\hspace{2em}*\\hspace{2em}*\\end{center} \\\\} -\\newcommand{\\hardspace}{{~}} -%\\newcommand{\\hardspace}{\\hspace{.5em}} -% \\sloppy -\\begin{document} -WOK - sisu_rc_footnote=if @md.sc_info; @tex_ml.doc_sc_info_footnote_full - else @tex_ml.doc_sc_info_footnote_brief - end - @copymark='' #check and remove as now is superflous - x={} - txt_obj={:title =>@md.title.full} - x[:l]=SiSU_TeX_Pdf::Format_text_object.new(@md,txt_obj).title_landscape - x[:p]=SiSU_TeX_Pdf::Format_text_object.new(@md,txt_obj).title_portrait - @tex_file << x - x=nil - if defined? @md.creator.author \ - and @md.creator.author - sp_char=SiSU_TeX_Pdf::Special_characters.new(@md,@md.creator.author) - author=sp_char.special_characters - @tex_file << if @md.author_home - <<WOK - -\\author{\\href{#{@md.author_home}}{#{@copymark} \\textnormal{#{author}}}} -WOK - else "\n\\author{#{@copymark} \\textnormal{#{author}}}" - end - end - @tex_file << unless @md.fnb =~/^mail\s*$/; @tex_ml.site - else '\date' - end - @tex_file <<<<WOK -\\pagenumbering{roman}\\maketitle -\\pagestyle{fancy} -WOK - if defined? @md.rights.all \ - and @md.rights.all - @tex_file << "\\newpage\n" - @tex_file << @@rights - @tex_file << @@prefix_b if defined? @md.creator.prefix_b and @md.creator.prefix_b - end - x={} - x[:l] =<<WOK -#{@tex_ml.newpage('landscape')} -\\pagestyle{fancy} -\\tableofcontents -#{@tex_ml.newpage('landscape')} -\\pagenumbering{arabic} -#{@tex_ml.paraskip_normal} -#{@tex_ml.newpage('landscape')} -WOK - x[:p] =<<WOK -#{@tex_ml.newpage('portrait')} -\\pagestyle{fancy} -\\tableofcontents -#{@tex_ml.newpage('portrait')} -\\pagenumbering{arabic} -#{@tex_ml.paraskip_normal} -#{@tex_ml.newpage('portrait')} -WOK - @tex_file << x - x=nil - data.each do |dob| #% case follows with levels 1-6 indents & graphics - if dob.class==Hash - elsif dob.of=='para' \ - or dob.of=='group' #GATEWAY FIX FIX stuff - dob=markup_common(dob) - elsif dob.is=='table' - if ( dob.tmp['a4'] \ - or dob.tmp['a5'] \ - or dob.tmp['b5'] \ - or dob.tmp['letter'] \ - or dob.tmp['legal']) - @md.papersize_array.each do |ps| - if dob.tmp[ps] - if (dob.tmp[ps][:p] and dob.tmp[ps][:l]) - dob.tmp[ps]={ - :p => markup_common(dob.tmp[ps][:p]), - :l => markup_common(dob.tmp[ps][:l]) - } - else p "#{__FILE__}:#{__LINE__}" if @md.cmd.inspect =~/M/ - end - end - end - elsif dob.tmp.class==Hash \ - and (dob.tmp[:p] and dob.tmp[:l]) - dob = { - :p => markup_common(dob.tmp[:p]), - :l => markup_common(dob.tmp[:l]) - } - else p "#{__FILE__}:#{__LINE__}" if @md.cmd.inspect =~/M/ - end - end - @tex_file << dob - end - @st[:tex][:stmp]||=@md.stmpd - stamp=@st[:tex][:stmp] if @st[:tex][:stmp] - if stamp - use=stamp.gsub(/\n/,"#{Tex[:backslash]*2}\n") - @tex_file << "\n\\newpage\n" - @tex_file << "\\section*" + - "{#{@tex_ml.owner_chapter}}\n" + - "\\addcontentsline{toc}" + - "{section}{#{@tex_ml.owner_chapter}}\n" - @tex_file << "#{use}\n" - @tex_file << @@rights if @@rights - end - @tex_file << "\n\\end{document}" - end - def number_paras_numbering(dob) # need tables and other types of object - if dob.of =~/para/ #\ - paranum=dob.ocn ? dob.ocn : '' - paranum = '' if paranum.to_i==0 - paranumber_display=if @md.markup.inspect =~/no_ocn/ \ - or @md.mod.inspect =~/--no-ocn/ \ - or not dob.ocn_ - '' - else - tags='' - #[keep] code that follows inserts "name tags" as hypertargets, currently using ocn (converting nametags to ocn) for internal linking, related code: |texpdf_format.rb|@|uses nametags directly| - #if dob.tags.length > 0 # insert tags "hypertargets" - # dob.tags.each do |t| - # tags=tags +"\\hspace{0mm}\\hypertarget{#{t}}{\\hspace{0mm}}" - # end - #end - "\\begin{tiny}\\hspace{0mm}\\end{tiny}{\\marginpar{\\begin{tiny}\\hspace{0mm}\\hypertarget{#{dob.ocn}}{#{dob.ocn}}#{tags}\\end{tiny}}}" #ocn object citation numbering - end - dob.tmp = paranumber_display + dob.tmp - end - dob - end - def number_paras(data) - tex_file=[] - data.each do |dob| - dob=if dob.class==Hash - if ( dob['a4'] \ - or dob['a5'] \ - or dob['b5'] \ - or dob['letter'] \ - or dob['legal']) - para_hash={} - @md.papersize_array.each do |ps| - if defined? dob.tmp and dob.tmp[ps] - if (dob.tmp[ps][:p] and dob.tmp[ps][:l]) - para_hash[ps]={ - :p => number_paras_numbering(dob.tmp[ps][:p]), - :l => number_paras_numbering(dob.tmp[ps][:l]) - } - dob.tmp=para_hash - else p "#{__FILE__}:#{__LINE__}" if @md.cmd.inspect =~/M/ - end - end - end - elsif (dob.tmp[:p] and dob.tmp[:l]) - dob.tmp = { - :p => number_paras_numbering(dob.tmp[:p]), - :l => number_paras_numbering(dob.tmp[:l]) - } - else p "#{__FILE__}:#{__LINE__}" if @md.cmd.inspect =~/M/ - end - else - dob=if dob.of !~/comment|meta|layout/ - number_paras_numbering(dob) - else dob - end - end - end - data - end - def output_morph_hash(o) - ps,h,fn=o[:ps],o[:h],o[:filename] - if h[ps] \ - and (h[ps][:p] and h[ps][:l]) - h[ps][:p].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[ps][:p] - h[ps][:l].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[ps][:l] - h[ps][:p].gsub!(/\n\n\n+/m,"\n\n") if h[ps][:p] - h[ps][:l].gsub!(/\n\n\n+/m,"\n\n") if h[ps][:l] - if h[ps][:p] !~/\A\s*\Z/ - fn[:portrait].puts h[ps][:p],"\n" - end - if h[ps][:l] !~/\A\s*\Z/ - fn[:landscape].puts h[ps][:l],"\n" - end - elsif (h[:p] and h[:l]) - h[:p].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[:p] - h[:l].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[:l] - h[:p].gsub!(/\n\n\n+/m,"\n\n") if h[:p] - h[:l].gsub!(/\n\n\n+/m,"\n\n") if h[:l] - if h[:p] !~/\A\s*\Z/ - fn[:portrait].puts h[:p],"\n" - end - if h[:l] !~/\A\s*\Z/ - fn[:landscape].puts h[:l],"\n" - end - else p "#{__FILE__}:#{__LINE__}" if @md.cmd.inspect =~/M/ - end - end - def output(array) - array.flatten! - array.compact! - @array=array - fns_l=@md.fns.gsub(/~/,'-') #this is a sorry fix, but necessary as it appears latex programs like not ~ - @md.papersize_array.each do |ps| - file={ - :landscape =>File.new("#{@env.path.tex}/#{fns_l}.#{ps}.landscape.tex",'w+'), - :portrait =>File.new("#{@env.path.tex}/#{fns_l}.#{ps}.tex",'w+') - } - file[:portrait] << @@tex_head[ps][:p] - file[:landscape] << @@tex_head[ps][:l] - array.each do |morph| - if morph.class==String - morph.gsub!(/^\s+/,'') - if morph !~/\A\s*\Z/ - file[:portrait].puts morph,"\n" - file[:landscape].puts morph,"\n" - end - elsif morph.class.inspect =~ /SiSU_document_structure/ \ - and morph.tmp \ - and morph.tmp.class==String - unless morph.of=='group' - morph.tmp.gsub!(/^\s+/,'') - else morph.tmp.gsub!(/^ +/,'') - end - if morph.tmp !~/\A\s*\Z/ \ - or morph.is=='code' - file[:portrait].puts morph.tmp,"\n" - file[:landscape].puts morph.tmp,"\n" - end - elsif morph.class==Hash #inserted headers and the like, only - h={:ps =>ps,:h =>morph,:filename =>file} - output_morph_hash(h) - elsif morph.tmp.class==Hash #tables & images? - h={:ps =>ps,:h =>morph.tmp,:filename =>file} - output_morph_hash(h) - end - end - array=@array - file[:portrait].close - file[:landscape].close - end - @@tex_head={ - 'a4'=> {:p => nil, :l => nil}, - 'a5'=> {:p => nil, :l => nil}, - 'b5'=> {:p => nil, :l => nil}, - 'letter'=>{:p => nil, :l => nil}, - 'legal'=> {:p => nil, :l => nil}, - 'book'=> {:p => nil, :l => nil} - } - array=[] - end - end - end -end -__END__ diff --git a/lib/sisu/v2/update.rb b/lib/sisu/v2/update.rb deleted file mode 100644 index 21b766e2..00000000 --- a/lib/sisu/v2/update.rb +++ /dev/null @@ -1,130 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: update previous output (with similar output file type formats) - -=end -module SiSU_Update_control_flag - require "#{SiSU_lib}/sysenv" # sysenv.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::Info_env.new(@md.fns) - out=@env.path.output - base_path="#{out}/#{@md.fnb}" - SiSU_Screen::Ansi.new(@md.cmd,'Checking previous output',base_path).green_hi_blue unless @md.cmd =~/q/ - Set_CF.new(@md).set_flags - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error - ensure - end - end - private - class Set_CF - def initialize(md) - @md=md - @env=SiSU_Env::Info_env.new(@md.fns) - out=@env.path.output - @base_path="#{out}/#{@md.fnb}" - end - def set_flags #-mNhwpoabxXyv - flag='-v' - if FileTest.file?("#{@base_path}/#{@md.fn[:doc]}")==true - flag=flag + 'a' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:toc]}")==true \ - or FileTest.file?("#{@base_path}/#{@md.fn[:doc]}")==true - flag=flag + 'h' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:xhtml]}")==true - flag=flag + 'b' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:sax]}")==true - flag=flag + 'x' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:dom]}")==true - flag=flag + 'X' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:odf]}")==true - flag=flag + 'o' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:pdf_p]}")==true \ - or FileTest.file?("#{@base_path}/#{@md.fn[:pdf_l]}")==true - flag=flag + 'p' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:concordance]}")==true - flag=flag + 'w' - end - if FileTest.file?("#{@base_path}/#{@md.fn[:digest]}")==true - flag=flag + 'N' - end - if FileTest.file?("#{@base_path}/#{@md.fns}")==true - flag=flag + 's' - end - if FileTest.file?("#{@base_path}/sisupod.tgz")==true - flag=flag + 'S' - end - puts flag - flag - end - end - end -end -__END__ diff --git a/lib/sisu/v2/urls.rb b/lib/sisu/v2/urls.rb deleted file mode 100644 index d2493edd..00000000 --- a/lib/sisu/v2/urls.rb +++ /dev/null @@ -1,279 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: urls for output files - -=end -module SiSU_urls - require "#{SiSU_lib}/particulars" # particulars.rb - include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env; include SiSU_Screen - class Source - attr_reader :opt - def initialize(opt) - @opt=opt - end - def read - begin - SiSU_urls::Output_urls.new(@opt).songsheet if @opt.fnb #fnb[/.+?\.(?:[_-]?sst|ssm)$/] - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd).error - ensure - end - end - end - class Output_urls - attr_reader :fns,:fnb,:cmd,:dir,:m_regular,:u - def initialize(opt) - @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_env_md(opt) - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) - @cmd=@opt.cmd - @md=@particulars.md - @env=@particulars.env - @fnb=@env.fnb - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) - @fnl=@env.i18n.lang_filename(fn_set_lang[:c]) - @fn=SiSU_Env::Env_call.new(@opt.fns).lang(fn_set_lang[:c]) - @m_regular=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/ - @prog=@env.program - source=if @opt.fns =~/\.sst$/; @opt.fns - elsif @opt.fns =~/\.ssm\.sst/; "#{@fnb}.ssm.sst" - else 'not recognised file' - end - @u ||= { - 'a (Plain-text (footnotes))'=>@fn[:plain], - 'A (Plain-text (footnotes) dos)'=>@fn[:plain], - 'b (XHTML)'=>@fn[:xhtml], - 'D[iu] (DBI import/update postgresql)'=>'dbi psql', - 'd[iu] (DBI import/update sqlite)'=>'dbi sqlite3', - 'e (EPUB)'=>@fn[:epub], - 'h (HTML segmented)'=>@fn[:toc], - 'H (HTML segmented)'=>@fn[:toc], - 'h (HTML scroll)'=>@fn[:doc], - 'H (HTML scroll)'=>@fn[:doc], - 'I (Info file)'=>'info', - 'i (manpage)'=>'manpage', - 'm (Document Abstraction)'=>'dal', - 'N (Digests md5/sha256)'=>@fn[:digest], - 'o (ODF:ODT - Open Document)'=>@fn[:odf], - 'p (PDF landscape)'=>@fn[:pdf_l], - 'p (PDF portrait)'=>@fn[:pdf_p], - 'P (Ruby profiler)'=>'profile', - 's (sisu markup)'=>source, - 'S (sisupod)'=>@fn[:sisupod], - 't (Plain-text (endnotes))'=>@fn[:plain], - 'x (XML sax type)'=>@fn[:sax], - 'X (XML dom type)'=>@fn[:dom], - 'y (Manifest, html)'=>@fn[:manifest], - 'Y (Sitemap, xml)'=>@fn[:sitemap], - 'w (Concordance, html)'=>@fn[:concordance], - }.sort {|a,b| a[0].downcase<=>b[0].downcase} - end - def songsheet - begin - @opt.cmd=~/U/ ? urls_all : (urls_select unless @opt.cmd=~/q/) - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - def urls_maintenance(opt,x,y) - if x=~/^([abcehHmNoptwxXy])/ \ - and opt.cmd =~/[abcehHmNoptwxXy]/ \ - and x=~/^[#{opt.cmd}]/ \ - and opt.cmd =~/M/ - m=$1 - f=y - tool=@prog.text_editor - if x =~/^m/ \ - and @opt.cmd=~/m/ \ - and x=~/^[#{opt.cmd}]/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.path.dal}/#{@opt.fns}.meta").maintenance if @opt.cmd =~/[MVv]/ - end - if x=~/^([hHw])/ \ - and @opt.cmd=~/[hHw]/ \ - and x=~/^[#{@opt.cmd}]/ - f=if x !~/segmented/; "#{y}.html" - else "#{y}.index.html" - end - end - if x=~/^p/ \ - and @opt.cmd=~/p/ \ - and x=~/^[#{@opt.cmd}]/ - tool=@prog.pdf_viewer - fns=@opt.fns.gsub(/~/,'-') - unless @opt.cmd =~/q/ - tell=if y =~/landscape/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.path.tex}/#{fns}.landscape.tex") - else SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.path.tex}/#{fns}.tex") - end - tell.maintenance if @opt.cmd =~/[MVv]/ - end - end - if x=~/^o/ \ - and @opt.cmd=~/o/ \ - and x=~/^[#{@opt.cmd}]/ - tool=@prog.odf_viewer - end - if x=~/^e/ \ - and @opt.cmd=~/e/ \ - and x=~/^[#{@opt.cmd}]/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.path.epub}/OPS/toc.xhtml").maintenance if @opt.cmd =~/[MVv]/ - end - if x !~/^[me]/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{tool} #{@env.path.output}/#{@fnb}/#{y}").maintenance if @opt.cmd =~/[MVv]/ - end - @opt.cmd.gsub!(/#{m}/,'') - end - end - def urls_select - unless @opt.cmd =~/q/ - i="(output manifest) #{@env.url.output_tell}/#{@fnb}/sisu_manifest.html" - @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'URLs').grey_title_hi \ - : SiSU_Screen::Ansi.new(@opt.cmd,'URL',i).green_hi_blue - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output}/#{@fnb}").flow if @opt.cmd =~/[MVv]/ - end - m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m - @pwd_stub="#{@env.url.output_tell}"[m,1] - unless @opt.cmd =~/q/ - @u.each do |x,y| - if @opt.fns =~ @m_regular - if @opt.cmd =~/[MVv]/ - if x=~/^([abchHNoptwxXyY])/ \ - and @opt.cmd=~/[abchHNoptwxXyY]/ \ - and x=~/^[#{@opt.cmd}]/ - m=$1 - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.web_browser} #{@env.url.output_tell}/#{@fnb}/#{y}").result - @opt.cmd.gsub!(/#{m}/,'') - end - if x=~/^I/ \ - and @opt.cmd =~/I/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","cd #{@env.path.texinfo}; pinfo ./#{@fnb}.#{y}; cd -").result - @opt.cmd.gsub!(/I/,'') - end - if x=~/^D/ \ - and @opt.cmd =~/D/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x} DBI psql","#{@pwd_stub}::#{@opt.fns}",y).result - @opt.cmd.gsub!(/D/,'') - end - if x=~/^d/ \ - and @opt.cmd =~/d/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x} DBI sqlite","sqlite3 #{@env.path.output}/sisu_sqlite.db", "#{y}").result - @opt.cmd.gsub!(/d/,'') - end - if x=~/^e/ \ - and @opt.cmd =~/e/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.epub_viewer} #{@env.path.output}/epub/#{y}").result - @opt.cmd.gsub!(/e/,'') - end - if x=~/^i/ \ - and @opt.cmd =~/i/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.manpage_viewer} #{@env.path.manpage}/#{@fnb}.1").result - @opt.cmd.gsub!(/i/,'') - end - if x=~/^P/ \ - and @opt.cmd =~/P/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x} Profile","#{@pwd_stub}::#{@opt.fns}",y).result - @opt.cmd.gsub!(/P/,'') - end - if x=~/^s/ \ - and @opt.cmd =~/s/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.web_browser} #{@env.url.output_tell}/src/#{y}").result - @opt.cmd.gsub!(/s/,'') - end - if x=~/^S/ \ - and @opt.cmd =~/S/ - zipfile=if @opt.fns =~/\.ssm\.sst$/; y.gsub(/(?:\~\S{2,3})?(\.ssm\.sst\.zip)$/,'.ssm.zip') - else y.gsub(/(?:\~\S{2,3})?(\.sst\.zip)$/,'\1') - end - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.web_browser} #{@env.url.output_tell}/pod/#{y}").result - @opt.cmd.gsub!(/S/,'') - end - end - urls_maintenance(@opt,x,y) if @opt.cmd =~/[MV]/ - end - end - end - end - def urls_all - i="(output manifest) #{@env.url.output_tell}/#{@fnb}/sisu_manifest.html" - SiSU_Screen::Ansi.new(@opt.cmd,'URLs',i).grey_title_hi - @u.each do |x,y| - tell=case x - when /^m/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} ~#{y}/#{@fnb}.#{y}") - when /^[abBcdhNopswxXy]/ - tellx=SiSU_Screen::Ansi.new(@opt.cmd,"-p (LaTeX)","#{@prog.text_editor} ~work/tex_rz/#{@fnb}.tex") if y=~/landscape/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.web_browser} #{@env.url.output_tell}/#{@fnb}/#{y}") - when /^e/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.epub_viewer} #{@env.path.output}/epub/#{y}") - when /^Y/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.web_browser} #{@env.url.output_tell}/sitemap/#{y}") - when /^I/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","cd #{@env.path.texinfo}; pinfo ./#{@fnb}.#{y}; cd -") - when /^i/ - SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.manpage_viewer} #{@env.path.manpage}/#{@fnb}.1") - end - unless @opt.cmd =~/q/ - tellx.result if tellx - tell.result if tell - end - tellx=nil - end - end - end -end -__END__ diff --git a/lib/sisu/v2/webrick.rb b/lib/sisu/v2/webrick.rb deleted file mode 100644 index ff228a65..00000000 --- a/lib/sisu/v2/webrick.rb +++ /dev/null @@ -1,176 +0,0 @@ -# coding: utf-8 -=begin - - * Name: SiSU - - * Description: a framework for document structuring, publishing and search - - * Author: Ralph Amissah - - * Copyright: (C) 1997 - 2010, 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.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> - - * SiSU uses: - * Standard SiSU markup syntax, - * Standard SiSU meta-markup syntax, and the - * Standard SiSU object citation numbering and system - - * Hompages: - <http://www.jus.uio.no/sisu> - <http://www.sisudoc.org> - - * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> - - * Ralph Amissah - <ralph@amissah.com> - <ralph.amissah@gmail.com> - - ** Description: webrick share - note sisu by default does not link with file - suffixes, see man pages for options - -=end -def brick(port,get='') - cgidir=if get=~/pwd/; Dir.pwd - else '/usr/lib/cgi-bin' # @env.path.cgi - end - port=SiSU_Env::Info_port.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::Info_error.new($!,$@,'-W',nil).error #fix - ensure - end -end -begin #% - require 'webrick' - include WEBrick - require 'time' - require 'fileutils' - include FileUtils - require "#{SiSU_lib}/sysenv" # sysenv.rb - include SiSU_Env; include SiSU_Screen - @cX=SiSU_Screen::Ansi.new('yes').cX - @env=SiSU_Env::Info_env.new - port=SiSU_Env::Info_port.new - @argv=$* - @host=@env.url.webrick - host='localhost' - @port="#{@argv[0].to_i}" - @port="#{port.webrick}" if @port =~ /^0$/ - @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.cyan}#{x}#{@cX.off}\t#{@cX.grey}see#{@cX.off} #{@cX.blue}#{@host}:#{@port}#{x}/wb.cgi#{@cX.off} #{@cX.ruby}@#{@cX.off} #{@cX.blue}#{@host}:#{@port}#{x}/#{@cX.off}" - } - puts "#{@cX.grey}" - 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 - require 'time' - require 'cgi' - require 'fcgi' - 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 {page.b{'<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 - chmod(0755,"#{y}/wb.cgi &") if FileTest.file?("#{y}/wb.cgi &") - } - puts " #{@cX.off}" - get=@argv.shift if @argv[0] =~/pwd/ #% argv - brick(@port,get) -rescue; - require "#{SiSU_lib}/sysenv" # sysenv.rb - SiSU_Errors::Info_error.new($!,$@,'-W',nil).error #fix -ensure -end -__END__ diff --git a/lib/sisu/v2/air.rb b/lib/sisu/v4/air.rb index abe0ee6c..47c0f0ba 100644 --- a/lib/sisu/v2/air.rb +++ b/lib/sisu/v4/air.rb @@ -1,4 +1,4 @@ -# coding:utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,10 +56,7 @@ =end module SiSU_Air - require "#{SiSU_lib}/particulars" # particulars.rb - #require "#{SiSU_lib}/defaults" # defaults.rb - #require "#{SiSU_lib}/sysenv" # sysenv.rb - #require "#{SiSU_lib}/param" # param.rb + require_relative 'particulars' # particulars.rb class Source @@dal_array=[] @@fns=nil diff --git a/lib/sisu/v2/author_format.rb b/lib/sisu/v4/author_format.rb index dee83eb6..36d956b7 100644 --- a/lib/sisu/v2/author_format.rb +++ b/lib/sisu/v4/author_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: system environment, resource control and configuration details =end -module FORMAT +module SiSU_FormatAuthor class Author def initialize(author_param) @author_param=author_param @@ -65,19 +64,19 @@ module FORMAT @authors,@author_array=[],[] authors=@author_param.scan(/[^;]+/) authors.each do |a| - a.strip! + a=a.strip if a =~/"(.+?)"/ - @authors << { :the => $1 } + @authors << { the: $1 } @author_array << $1.upcase else #if a =~/,/ x=a.scan(/[^,]+/) - x[0].strip! - x[1].strip! if x[1] + x[0]=x[0].strip + x[1]=x[1].strip if x[1] if x.length==1 - @authors << { :the => x[0] } + @authors << { the: x[0] } @author_array << x[0].upcase elsif x.length==2 - @authors << { :the=> x[0], :others => x[1] } + @authors << { the: x[0], others: x[1] } @author_array << "#{x[0].upcase}, #{x[1]}" else #p x.length end @@ -101,11 +100,11 @@ module FORMAT end end { - :last_first_a => authors, - :last_first_format_a => @author_array, - :authors_h => @authors, - :authors_s => authors_string, - :authors_param => @author_param + last_first_a: authors, + last_first_format_a: @author_array, + authors_h: @authors, + authors_s: authors_string, + authors_param: @author_param } end end diff --git a/lib/sisu/v2/cgi.rb b/lib/sisu/v4/cgi.rb index d9bbc9ed..b6653f51 100644 --- a/lib/sisu/v2/cgi.rb +++ b/lib/sisu/v4/cgi.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,25 +57,24 @@ =end module SiSU_CGI #% database building documents - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/cgi_pgsql" # cgi_pgsql.rb - include SiSU_CGI_pgsql - require "#{SiSU_lib}/cgi_sqlite" # cgi_sqlite.rb - class SiSU_search + require_relative 'sysenv' # sysenv.rb + require_relative 'cgi_pgsql' # cgi_pgsql.rb + require_relative 'cgi_sqlite' # cgi_sqlite.rb + class SearchSQL def initialize(opt) @opt=opt - @webserv=@opt.files[0].to_s.strip #verify @opt.files[0].class + @webserv=@opt.files[0].to_s.strip end def search_info a=%{ For help on sisu search, type: sisu --help search - } - SiSU_Screen::Ansi.new(@opt.cmd,a).print_grey + } + SiSU_Screen::Ansi.new(@opt.cmd,a).print_grey end def read - SiSU_CGI_sqlite::SiSU_search_sqlite.new(@opt,@webserv).sqlite - SiSU_CGI_pgsql::SiSU_search_pgsql.new(@opt,@webserv).pgsql + SiSU_CGI_SQLite::SearchSQLite.new(@opt,@webserv).sqlite + SiSU_CGI_PgSQL::SearchPgSQL.new(@opt,@webserv).pgsql search_info unless @opt.cmd =~/q/ end end diff --git a/lib/sisu/v2/cgi_pgsql.rb b/lib/sisu/v4/cgi_pgsql.rb index 2cac69f6..1264d922 100644 --- a/lib/sisu/v2/cgi_pgsql.rb +++ b/lib/sisu/v4/cgi_pgsql.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,19 +55,19 @@ ** Description: generates naive cgi search form for search of sisu database (pgsql sqlite) =end -module SiSU_CGI_pgsql #% database building documents - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/cgi_sql_common" # cgi_sql_common.rb - include SiSU_CGI_sql - class SiSU_search_pgsql < SiSU_CGI_common +module SiSU_CGI_PgSQL #% database building documents + require_relative 'sysenv' # sysenv.rb + require_relative 'cgi_sql_common' # cgi_sql_common.rb + include SiSU_CGI_SQL + class SearchPgSQL < CGI_Common def initialize(opt,webserv) @opt,@webserv=opt,webserv - @env=SiSU_Env::Info_env.new('',opt) - @sys=SiSU_Env::System_call.new + @env=SiSU_Env::InfoEnv.new('',opt) + @sys=SiSU_Env::SystemCall.new @image_src="#{@env.url.webserv_cgi}/_sisu/image_sys" - @common=SiSU_CGI_sql::SiSU_CGI_common.new(@webserv,@opt.cmd,@image_src,@env) - @db=SiSU_Env::Info_db.new - @cgi_file_name="#{Db[:name_prefix_db]}pgsql.cgi" + @common=SiSU_CGI_SQL::CGI_Common.new(@webserv,@opt,@image_src,@env) + @db=SiSU_Env::InfoDb.new + @cgi_file_name="#{Db[:name_prefix_db]}by_#{opt.dir_structure_by.to_s}_pgsql.cgi" end def pgsql serve=[] @@ -76,13 +75,13 @@ module SiSU_CGI_pgsql available_db_table=`psql --list` # system call requires psql available_db=available_db_table.scan(/(#{Db[:name_prefix]}\S+)/) if not available_db_table.nil? if available_db \ - and available_db.class==Array + and available_db.is_a?(Array) available_db.flatten.each do |x| serve << x.gsub(/#{Db[:name_prefix]}(\S+)/,'\1') end - else put "WARNING: no postgresql database available, (have you created one?)" + else STDERR.puts "WARNING: no postgresql database available, (have you created one?)" end - serve.sort! + serve=serve.sort f1,f2,f3='','','' serve.each do |x| f1 << %{ <option value="#{Db[:name_prefix]}#{x}">#{x}</option>\n} unless x =~/apache|sisu\/image/ #check @@ -95,7 +94,7 @@ module SiSU_CGI_pgsql f2 << " end\n" if FileTest.writable?('.') output=File.open(@cgi_file_name,'w') - output << header0 << header1 << header_desc << header2 << f1 << buttons1 << buttons1_pgsql << buttons2 << search_request << search_statement << search_statement_common << search_query1 << @common.pages << search_query2 << @common.tail << @common.main1 << f2 << dbi_connect << @common.main2 + output << header0 << header1 << header_desc << header2 << f1 << buttons1 << buttons1_pgsql << buttons2 << search_request << search_statement << search_statement_common << search_query1 << @common.pages << search_query2 << @common.tail << @common.main1 << f2 << dbi_connect << @common.main2 << @common.dir_structure << @common.main3 a=%{ generated sisu_pgsql.cgi, BASED ON ALREADY EXISTING directories that could potentially be used to populate postgresql db, (-D) } @@ -115,7 +114,7 @@ module SiSU_CGI_pgsql a="postgresql db used for present directory: #{@db.psql.db}" b="\n\t(to create and populate postgresql database see 'man sisu' and in particular the -D flag)\n\t[the database to be used for this directory (#{@db.psql.db}) will have to be created manually if it does not exist,\n\tsee 'sisu --help sql'\n\tif you have permission to create databases:\n\t'sisu -d --createdb'\n\tor using postgresql tools directly:\n\t'createdb #{@db.psql.db}'\n\tfor a list of existing databases try 'psql --list']" SiSU_Screen::Ansi.new(@opt.cmd,a,b).txt_cyan - else puts 'failed in attempt to write sisu_pgsql.cgi to present directory, is directory writable?' + else puts 'failed in attempt to write #{@cgi_file_name} to present directory, is directory writable?' end end def header0 @@ -140,23 +139,23 @@ module SiSU_CGI_pgsql end def search_statement <<-'WOK_SQL' - class Dbi_search_string + class DBI_SearchString def initialize(l,t,q,cse=false) @l,@t,@q,@c=l,t,q,cse end def string - search={ :search => [],:flag => false } + search={ search: [], flag: false } if @t =~/\S+/ or @q =~/\S+/ - if @t =~/\S+/; unescaped_search=CGI.unescape(@t) - elsif @q =~/\S+/; unescaped_search=CGI.unescape(@q) + if @t =~/\S+/ then unescaped_search=CGI.unescape(@t) + elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q) end search_construct=[] - if @c - unescaped_search.gsub!(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~\( '") - unescaped_search.gsub!(/(.+)/,"#{@l}~\( '\\1' \)") + unescaped_search=if @c + unescaped_search.gsub(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~\( '"). + gsub(/(.+)/,"#{@l}~\( '\\1' \)") else - unescaped_search.gsub!(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~*\( '") - unescaped_search.gsub!(/(.+)/,"#{@l}~*\( '\\1' \)") + unescaped_search.gsub(/\s*(AND|OR)\s*/,"' \) \\1 #{@l}~*\( '"). + gsub(/(.+)/,"#{@l}~*\( '\\1' \)") end search_construct << unescaped_search search_construct=search_construct.join(' ') @@ -171,13 +170,11 @@ module SiSU_CGI_pgsql end def search_query1 <<-'WOK_SQL' - @search_text,@search_endnotes=[],[] - search[:text].flatten.each {|x| @search_text << "#{x} AND " } - @search_text=@search_text.join.gsub!(/AND\s+$/m,'') #watch - @search_text.gsub!(/(doc_objects\.clean~[*]?\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean~[*]?\(\s*'[^']+'\s*\))+)/,'(\1)') - search[:endnotes].flatten.each{|x| @search_endnotes << "#{x} AND " } - @search_endnotes=@search_endnotes.join.gsub!(/AND\s+$/m,'') #watch - @search_endnotes.gsub!(/(endnotes\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)') + @search_text,@search_endnotes='','' + @search_text=search[:text].flatten.join(' AND ') + @search_text=@search_text.gsub(/(doc_objects\.clean~[*]?\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean~[*]?\(\s*'[^']+'\s*\))+)/,'(\1)') + @search_endnotes=search[:endnotes].flatten.join(' AND ') + @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean~\(\s*'[^']+'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean~\(\s*'[^']+'\s*\))+)/,'(\1)') end WOK_SQL end @@ -186,7 +183,7 @@ module SiSU_CGI_pgsql def sql_select_body limit ||=@@limit offset ||=@@offset - @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE (#{@search_text}) AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn} + @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE (#{@search_text}) AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn} @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;} select=@sql_statement[:body] + ' ' + @sql_statement[:range] select @@ -194,7 +191,7 @@ module SiSU_CGI_pgsql def sql_select_endnotes limit ||=@@limit offset ||=@@offset - @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE (#{@search_endnotes}) AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr} + @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE (#{@search_endnotes}) AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr} @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;} select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range] select diff --git a/lib/sisu/v2/cgi_sql_common.rb b/lib/sisu/v4/cgi_sql_common.rb index 1b043f00..18e1ab1e 100644 --- a/lib/sisu/v2/cgi_sql_common.rb +++ b/lib/sisu/v4/cgi_sql_common.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,11 @@ ** Description: generates naive cgi search form for search of sisu database (pgsql sqlite) =end -module SiSU_CGI_sql - class SiSU_CGI_common - def initialize(webserv,cmd,image_src,dir) - @webserv,@cmd,@image_src,@env=webserv,cmd,image_src,dir +module SiSU_CGI_SQL + class CGI_Common + def initialize(webserv,opt,image_src,dir) + @webserv,@opt,@image_src,@env=webserv,opt,image_src,dir + @cmd=opt.cmd end def about <<-'WOK_SQL' @@ -78,7 +78,7 @@ module SiSU_CGI_sql * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997 - 2012, Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -137,7 +137,7 @@ module SiSU_CGI_sql search_field='' if checked_echo !~/\S/ @base,@search_field,@selected_db,@result_type,@checked_sql_limit,@checked_tip,@checked_stats,@checked_searched,@checked_url,@checked_case,@checked_echo,@checked_sql,@checked_all,@checked_none,@checked_selected,@checked_default,@search_note,@the_can=base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can @tip=if checked_tip =~/\S/ - '<font size="2" color="#666666">text:__; fulltxt:__; keywords:__; title:__; author:__; topic_register:__; subject:__; description:__; publisher:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />' + '<font size="2" color="#666666">text:__; fulltxt:__; keywords:__; title:__; author:__; topic_register:__; subject:__; description:__; publisher:__; editor:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />' else '' end end @@ -229,11 +229,11 @@ module SiSU_CGI_sql end def search_request <<-'WOK_SQL' - class Search_request #% search_for - attr_accessor :text1,:fulltext,:keywords,:title,:author,:topic_register,:subject,:description,:publisher,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename + class SearchRequest #% search_for + attr_accessor :text1,:fulltext,:keywords,:title,:author,:topic_register,:subject,:description,:publisher,:editor,:contributor,:date,:type,:format,:identifier,:source,:language,:relation,:coverage,:rights,:comment,:abstract,:owner,:date_created,:date_issued,:date_modified,:date_available,:date_valid,:filename def initialize(search_field='',q='') @search_field,@q=search_field,q - @text1=@fulltext=@keywords=@title=@author=@topic_register=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename='' + @text1=@fulltext=@keywords=@title=@author=@topic_register=@subject=@description=@publisher=@editor=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@comment=@abstract=@owner=@date_created=@date_issued=@date_modified=@date_available=@date_valid=@filename='' if @search_field=~/\S/ @text1=text_to_match('text:') @fulltext=text_to_match('fulltxt:') @@ -243,6 +243,7 @@ module SiSU_CGI_sql @subject=text_to_match('subj(?:ect)?:') # DublinCore 3 - subject @description=text_to_match('description:') # DublinCore 4 - description @publisher=text_to_match('pub(?:lisher)?:') # DublinCore 5 - publisher + @editor=text_to_match('editor:') @contributor=text_to_match('contributor:') # DublinCore 6 - contributor @date=text_to_match('date:') # DublinCore 7 - date dd-mm-yy @type=text_to_match('type:') # DublinCore 8 - type @@ -274,6 +275,7 @@ module SiSU_CGI_sql @subject=q['sj'] if q['sj']=~/\S/ @description=q['dsc'] if q['dsc']=~/\S/ @publisher=q['pb'] if q['pb']=~/\S/ + @editor=q['cntr'] if q['cntr']=~/\S/ @contributor=q['cntr'] if q['cntr']=~/\S/ @date=q['dt'] if q['dt']=~/\S/ @type=q['ty'] if q['ty']=~/\S/ @@ -290,8 +292,8 @@ module SiSU_CGI_sql @date_modified=q['dtm'] if q['dtm']=~/\S/ @date_available=q['dta'] if q['dta']=~/\S/ @date_valid=q['dtv'] if q['dtv']=~/\S/ - @filename=if q['doc'] and q['search'] !~/search db/; q['doc'] - elsif q['fns']=~/\S/; q['fns'] + @filename=if q['doc'] and q['search'] !~/search db/ then q['doc'] + elsif q['fns']=~/\S/ then q['fns'] end @@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000 @@offset=q['off'] if q['off']=~/\d+/ # 0 @@ -299,21 +301,19 @@ module SiSU_CGI_sql end def text_to_match(identifier='') m={ - :string => /#{identifier}\s*(.+?)/, - :string => /#{identifier}\s*(.+?)(?:;|\n|\r|$)/, - :word => /#{identifier}[\s(]*(\S+)/ + string: /#{identifier}\s*(.+?)/, + string: /#{identifier}\s*(.+?)(?:;|\n|\r|$)/, + word: /#{identifier}[\s(]*(\S+)/ } search_string=if @search_field =~m[:word] - search_string=if @search_field =~m[:braces]; m[:braces].match(@search_field)[1] - elsif @search_field =~m[:string]; m[:string].match(@search_field)[1] + search_string=if @search_field =~m[:braces] then m[:braces].match(@search_field)[1] + elsif @search_field =~m[:string] then m[:string].match(@search_field)[1] else str=m[:word].match(@search_field)[1] - str.gsub!(/[()]/,'') + str=str.gsub(/[()]/,'') str end - search_string.strip! - search_string.gsub!(/\s+/,'+') - search_string + search_string=search_string.strip.gsub(/\s+/,'+') #else # "__" end @@ -323,119 +323,124 @@ module SiSU_CGI_sql end def search_statement_common <<-'WOK_SQL' - class Dbi_search_statement + class DBI_SearchStatement attr_reader :text_search_flag,:sql_select_body_format,:sql_select_endnotes_format,:sql_offset,:sql_limit def initialize(conn,search_for,q,c) @conn=conn @text_search_flag=false - @sql_statement={ :body=>'',:endnotes=>'',:range=>'' } + @sql_statement={ body: '', endnotes: '', range: '' } #@offset||=@@offset #@offset+=@@limit - search={ :text => [],:endnotes => [] } + search={ text: [], endnotes: [] } cse=(c =~/\S/) ? true : false - st=Dbi_search_string.new('doc_objects.clean',search_for.text1,q['s1'],cse).string - se=Dbi_search_string.new('endnotes.clean',search_for.text1,q['s1'],cse).string + st=DBI_SearchString.new('doc_objects.clean',search_for.text1,q['s1'],cse).string + se=DBI_SearchString.new('endnotes.clean',search_for.text1,q['s1'],cse).string @text_search_flag=st[:flag] if st[:flag] search[:text] << st[:search] search[:endnotes] << se[:search] end - st=Dbi_search_string.new('metadata_and_text.fulltext',search_for.fulltext,q['ft'],cse).string + st=DBI_SearchString.new('metadata_and_text.fulltext',search_for.fulltext,q['ft'],cse).string + if st[:flag] + search[:text] << st[:search] + search[:endnotes] << st[:search] + end + st=DBI_SearchString.new('metadata_and_text.classify_keywords',search_for.keywords,q['key'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_keywords',search_for.keywords,q['key'],cse).string + st=DBI_SearchString.new('metadata_and_text.title',search_for.title,q['ti'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.title',search_for.title,q['ti'],cse).string + st=DBI_SearchString.new('metadata_and_text.creator_author',search_for.author,q['au'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.creator_author',search_for.author,q['au'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_topic_register',search_for.topic_register,q['tr'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_topic_register',search_for.topic_register,q['tr'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_subject',search_for.subject,q['sj'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_subject',search_for.subject,q['sj'],cse).string + st=DBI_SearchString.new('metadata_and_text.notes_description',search_for.description,q['dsc'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.notes_description',search_for.description,q['dsc'],cse).string + st=DBI_SearchString.new('metadata_and_text.publisher',search_for.publisher,q['pb'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.publisher',search_for.publisher,q['pb'],cse).string + st=DBI_SearchString.new('metadata_and_text.creator_editor',search_for.editor,q['cntr'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.creator_contributor',search_for.contributor,q['cntr'],cse).string + st=DBI_SearchString.new('metadata_and_text.creator_contributor',search_for.contributor,q['cntr'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.date_published',search_for.date,q['dt'],cse).string + st=DBI_SearchString.new('metadata_and_text.date_published',search_for.date,q['dt'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_type',search_for.type,q['ty'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_type',search_for.type,q['ty'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_identifier',search_for.identifier,q['id'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_identifier',search_for.identifier,q['id'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.original_source',search_for.source,q['src'],cse).string + st=DBI_SearchString.new('metadata_and_text.original_source',search_for.source,q['src'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.title_language',search_for.language,q['lang'],cse).string + st=DBI_SearchString.new('metadata_and_text.language_document_char',search_for.language,q['lang'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_relation',search_for.relation,q['rel'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_relation',search_for.relation,q['rel'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.classify_coverage',search_for.coverage,q['cov'],cse).string + st=DBI_SearchString.new('metadata_and_text.classify_coverage',search_for.coverage,q['cov'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.rights_all',search_for.rights,q['cr'],cse).string + st=DBI_SearchString.new('metadata_and_text.rights_all',search_for.rights,q['cr'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.notes_comment',search_for.comment,q['co'],cse).string + st=DBI_SearchString.new('metadata_and_text.notes_comment',search_for.comment,q['co'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.notes_abstract',search_for.abstract,q['ab'],cse).string + st=DBI_SearchString.new('metadata_and_text.notes_abstract',search_for.abstract,q['ab'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] end - st=Dbi_search_string.new('metadata_and_text.src_filename',search_for.filename,q['fns'],cse).string + st=DBI_SearchString.new('metadata_and_text.src_filename',search_for.filename,q['fns'],cse).string if st[:flag] search[:text] << st[:search] search[:endnotes] << st[:search] @@ -463,7 +468,7 @@ module SiSU_CGI_sql end def previous @offset_previous >= 0 \ - ? (@@canned_search_url.to_s + '<d=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s) \ + ? (@@canned_search_url.to_s + '<d=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s) : '' end def start @@ -507,7 +512,7 @@ module SiSU_CGI_sql </center>} end else - if page.to_s =~ /^1$/; '' + if page.to_s =~ /^1$/ then '' elsif page.to_s =~ /^2$/ %{<br /><center> <a href="#{can.previous}"> @@ -531,7 +536,7 @@ module SiSU_CGI_sql WOK_SQL end def tail - v=SiSU_Env::Info_version.instance.get_version + v=SiSU_Env::InfoVersion.instance.get_version <<-WOK_SQL def tail <<-'WOK' @@ -553,7 +558,7 @@ module SiSU_CGI_sql <br /> <a href="http://www.jus.uio.no/sisu" > <b>#{v[:project]}</b></a> <sup>©</sup> Ralph Amissah - 1993, current 2010. + 1993, current 2012. All Rights Reserved. <br /> <a href="http://www.jus.uio.no/sisu" > @@ -589,7 +594,7 @@ module SiSU_CGI_sql <br />Standard SiSU meta-markup syntax, and the <br />Standard SiSU <u>object citation numbering</u> and system, (object/text positioning system) <br /> - <sup>©</sup> Ralph Amissah 1997, current 2010. + <sup>©</sup> Ralph Amissah 1997, current 2012. All Rights Reserved. </font></p> </td></tr> @@ -645,9 +650,9 @@ module SiSU_CGI_sql @counters_txt,@counters_endn,@sql_select_body,@sql_select_endnotes='','','','' FCGI.each_cgi do |cgi| begin # all code goes in begin section - @search={ :text => [],:endnotes => [] } + @search={ text: [], endnotes: [] } q=CGI.new - @db=if cgi['db'] =~/\S+/; + @db=if cgi['db'] =~/\S+/ @stub=/#{@db_name_prefix}(\S+)/.match(cgi['db'])[1] cgi['db'] else @@ -656,13 +661,13 @@ module SiSU_CGI_sql end checked_url,checked_stats,checked_searched,checked_tip,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,selected_db='','','','','','','','','' result_type=(cgi['view']=~/text/) \ - ? result_type={:index=>'',:text=>'checked'} \ - : result_type={:index=>'checked',:text=>''} + ? result_type={ index: '', text: 'checked'} + : result_type={ index: 'checked', text: ''} @@limit=if cgi['sql_match_limit'].to_s=~/2500/ - checked_sql_limit={:l1000=>'',:l2500=>'checked'} + checked_sql_limit={ l1000: '', l2500: 'checked'} '2500' else - checked_sql_limit={:l1000=>'checked',:l2500=>''} + checked_sql_limit={ l1000: 'checked', l2500: ''} '1000' end checked_echo='checked' if cgi['echo'] =~/\S/ @@ -695,7 +700,7 @@ module SiSU_CGI_sql def main2 <<-'WOK_SQL' search_field=cgi['find'] if cgi['find'] # =~/\S+/ - @search_for=Search_request.new(search_field,q) #.analyze #% search_for + @search_for=SearchRequest.new(search_field,q) #.analyze #% search_for #% searches #Canned_search.new(@base,@search_for.text1,cgi) if @search_for.text1=~/\S+/ or @search_for.fulltext=~/\S+/ or @search_for.author=~/\S+/ or @search_for.topic_register=~/\S+/ #and search_field =~/\S/ @@ -708,6 +713,7 @@ module SiSU_CGI_sql sj='&sj=' + CGI.escape(@search_for.subject) if @search_for.subject=~/\S/ dsc='&dsc=' + CGI.escape(@search_for.description) if @search_for.description=~/\S/ pb='&pb=' + CGI.escape(@search_for.publisher) if @search_for.publisher=~/\S/ + edt='&edt=' + CGI.escape(@search_for.editor) if @search_for.editor=~/\S/ cntr='&cntr=' + CGI.escape(@search_for.contributor) if @search_for.contributor=~/\S/ dt='&dt=' + CGI.escape(@search_for.date) if @search_for.date=~/\S/ ty='&ty=' + CGI.escape(@search_for.type) if @search_for.type=~/\S/ @@ -726,8 +732,8 @@ module SiSU_CGI_sql dtv='&dtv=' + CGI.escape(@search_for.date_valid) if @search_for.date_valid=~/\S/ fns='&fns=' + CGI.escape(@search_for.filename) if @search_for.filename=~/\S/ @@canned_search_url=(checked_all =~/checked/) \ - ? "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1" \ - : "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}" + ? "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}&a=1" + : "#{@base}?#{s1}#{ft}#{key}#{ti}#{au}#{tr}#{sj}#{dsc}#{pb}#{edt}#{cntr}#{dt}#{ty}#{id}#{src}#{lang}#{rel}#{cov}#{cr}#{co}#{ab}#{dtc}#{dti}#{dtm}#{dta}#{dtv}#{fns}&db=#{cgi['db']}&view=#{cgi['view']}" mod=ft=~/\S+/ ? (ft.gsub(/ft/,'s1')) : s1 @canned_base_url="#{@base}?#{mod}&db=#{cgi['db']}" if checked_case=~/\S/ @@ -747,13 +753,13 @@ module SiSU_CGI_sql elsif checked_all =~/checked/ or checked_url =~/checked/ canned_search=@@canned_search_url.scan(/(?:s1|ft|au|ti|fns|tr)=[^&]+/) af=canned_search.join('; ') - af.gsub!(/s1=/,'text: ') - af.gsub!(/ft=/,'fulltxt: ') - af.gsub!(/au=/,'author: ') - af.gsub!(/ti=/,'title: ') - af.gsub!(/fns=/,'filename: ') - af.gsub!(/tr=/,'topic_register: ') - af.gsub!(/%2B/,' ') + af=af.gsub(/s1=/,'text: '). + gsub(/ft=/,'fulltxt: '). + gsub(/au=/,'author: '). + gsub(/ti=/,'title: '). + gsub(/fns=/,'filename: '). + gsub(/tr=/,'topic_register: '). + gsub(/%2B/,' ') analyze_format=af st=af.split(/\s*;\s*/) search_field=st.join("\n") @@ -761,12 +767,13 @@ module SiSU_CGI_sql green=%{<font size="2" color="#004000">} canned_search_url_txt=CGI.escapeHTML(@@canned_search_url) the_can=%{<font size="2" color="#666666">#{canned_note} <a href="#{@@canned_search_url}">#{canned_search_url_txt}</a></font><br />} - p_text=p_fulltext=p_keywords=p_title=p_author=p_topic_register=p_subject=p_description=p_publisher=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_filename='' + p_text=p_fulltext=p_keywords=p_title=p_author=p_topic_register=p_subject=p_description=p_publisher=p_editor=p_contributor=p_date=p_type=p_format=p_identifier=p_source=p_language=p_relation=p_coverage=p_rights=p_comment=p_abstract=p_filename='' p_filename=%{filename: #{green}#{@search_for.filename}</font><br />} if @search_for.filename =~/\S+/ p_text=%{text: #{green}#{@search_for.text1}</font><br />} if @search_for.text1 =~/\S+/ p_fulltext=%{fulltxt: #{green}#{@search_for.fulltext}</font><br />} if @search_for.fulltext =~/\S+/ p_title=%{title: #{green}#{@search_for.title}</font><br />} if @search_for.title =~/\S+/ p_author=%{author: #{green}#{@search_for.author}</font><br />} if @search_for.author =~/\S+/ + p_editor=%{editor: #{green}#{@search_for.editor}</font><br />} if @search_for.editor=~/\S+/ p_contributor=%{contributor: #{green}#{@search_for.contributor}</font><br />} if @search_for.contributor =~/\S+/ p_date=%{date: #{green}#{@search_for.date}</font><br />} if @search_for.date =~/\S+/ p_rights=%{rights: #{green}#{@search_for.rights}</font><br />} if @search_for.rights =~/\S+/ @@ -788,18 +795,18 @@ module SiSU_CGI_sql <font size="2" color="#666666"> <b>database:</b> #{green}#{@db}</font>; <b>selected view:</b> #{green}#{cgi['view']}</font> <b>search string:</b> "#{green}#{analyze_format}</font>"<br /> - #{p_text} #{p_fulltext} #{p_keywords} #{p_title} #{p_author} #{p_topic_register} #{p_subject} #{p_description} #{p_publisher} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename} + #{p_text} #{p_fulltext} #{p_keywords} #{p_title} #{p_author} #{p_topic_register} #{p_subject} #{p_description} #{p_publisher} #{p_editor} #{p_contributor} #{p_date} #{p_type} #{p_format} #{p_identifier} #{p_source} #{p_language} #{p_relation} #{p_coverage} #{p_rights} #{p_comment} #{p_abstract} #{p_filename} </font> WOK #eg = %{canned search e.g.:<br /> <a href="#{url}">#{url}</a><br />find: #{analyze}<br />database: #{database}} - #dbi_canning + #% dbi_canning @header=Form.new(@base,search_field,selected_db,result_type,checked_sql_limit,checked_tip,checked_stats,checked_searched,checked_url,checked_case,checked_echo,checked_sql,checked_all,checked_none,checked_selected,checked_default,search_note,the_can).submission_form #% form unless q['s1'] =~/\S/ or q['au'] =~/\S/ or @search[:text][1] =~/\S/ print "Content-type: text/html\n\n" puts (@header+@tail) else #% searches s1=(@search_for.text1 =~/\S/) \ - ? @search_for.text1 \ + ? @search_for.text1 : 'Unavailable' if checked_case=~/\S/ @search[:text]<<%{doc_objects.clean~'#{CGI.unescape(s1)}'} @@ -808,13 +815,13 @@ module SiSU_CGI_sql @search[:text]<<%{doc_objects.clean~*'#{CGI.unescape(s1)}'} @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'} end - #dbi_request - dbi_statement=Dbi_search_statement.new(@conn,@search_for,q,checked_case) + #% dbi_request + dbi_statement=DBI_SearchStatement.new(@conn,@search_for,q,checked_case) @text_search_flag=false @text_search_flag=dbi_statement.text_search_flag s_contents=dbi_statement.contents s_endnotes=dbi_statement.endnotes - @body_main,@endnotes=[],[] + @body_main,@endnotes='','' @search_regx=nil oldtid=0 if @text_search_flag @@ -827,25 +834,98 @@ module SiSU_CGI_sql @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes else end - #text_objects_body + @hostpath="#{@hosturl_files}/#{@stub}" + @ln='en' + WOK_SQL + end + def dir_structure + case @opt.dir_structure_by + when :language + <<-'WOK_SQL' + def path_manifest(fn,ln=nil) + "#{@hostpath}/#{ln}/manifest/#{fn}.html" + end + def path_html_seg(fn,ln=nil) + "#{@hostpath}/#{ln}/html/#{fn}" + end + def path_toc(fn,ln=nil) + "#{path_html_seg(fn,ln)}/toc.html" + end + def path_filename(fn,seg,ln=nil) + "#{path_html_seg(fn,ln)}/#{seg}.html" + end + def path_endnotes(fn,ln=nil) + "#{path_html_seg(fn,ln)}/endnotes.html" + end + def path_html_doc(fn,ln=nil) + "#{@hostpath}/#{ln}/html/#{fn}.html" + end + WOK_SQL + when :filetype + <<-'WOK_SQL' + def path_manifest(fn,ln=nil) + "#{@hostpath}/manifest/#{fn}.#{ln}.html" + end + def path_html_seg(fn,ln=nil) + "#{@hostpath}/html/#{fn}" + end + def path_toc(fn,ln=nil) + "#{path_html_seg(fn,ln)}/toc.#{ln}.html" + end + def path_filename(fn,seg,ln=nil) + "#{path_html_seg(fn,ln)}/#{seg}.#{ln}.html" + end + def path_endnotes(fn,ln=nil) + "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html" + end + def path_html_doc(fn,ln=nil) + "#{@hostpath}/html/#{fn}.#{ln}.html" + end + WOK_SQL + else + <<-'WOK_SQL' + def path_manifest(fn,ln=nil) + "#{@hostpath}/#{fn}/sisu_manifest.#{ln}.html" + end + def path_html_seg(fn,ln=nil) + "#{@hostpath}/#{fn}" + end + def path_toc(fn,ln=nil) + "#{path_html_seg(fn,ln)}/toc.#{ln}.html" + end + def path_filename(fn,seg,ln=nil) + "#{path_html_seg(fn,ln)}/#{seg}.#{ln}.html" + end + def path_endnotes(fn,ln=nil) + "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html" + end + def path_html_doc(fn,ln=nil) + "#{path_html_seg(fn,ln)}/scroll.#{ln}.html" + end + WOK_SQL + end + end + def main3 + <<-'WOK_SQL' + #% text_objects_body s_contents.each do |c| #% text body location=c['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1] file_suffix=c['src_filename'][/.+?\.(_?sst|ssm)$/,1] lang=if location =~ /\S+?~(\S\S\S?)$/ l=location[/\S+?~(\S\S\S?)$/,1] - location.gsub!(/(\S+?)~\S\S\S?/,'\1') + location=location.gsub(/(\S+?)~\S\S\S?/,'\1') l=".#{l}" else '' end - #metadata_found_body + #% metadata_found_body if c['tid'].to_i != oldtid.to_i ti=c['title'] can_txt_srch=(cgi['view']=~/index/) \ - ? %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } \ - : %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } - title=%{<span style="background-color: #{@color_heading}"><a href="#{@hosturl_files}/#{@stub}/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> by #{c['creator_author']} #{can_txt_srch}<a href="#{@hosturl_files}/#{@stub}/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a> <a href="#{@hosturl_files}/#{@stub}/epub/#{location}#{lang}.epub"><img border="0" width="15" height="15" src="#{@image_src}/b_epub.png" alt="epub"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/portrait#{lang}.pdf"><img border="0" width="15" height="18" src="#{@image_src}/b_pdf.png" alt="pdf portrait"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/landscape#{lang}.pdf"><img border="0" width="18" height="15" src="#{@image_src}/b_pdf.png" alt="pdf landscape"></a></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#{@image_src}/b_odf.png" alt="odf"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ #hmm watch file_suffix + ? %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } + : %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } + title=%{<span style="background-color: #{@color_heading}"><a href="#{path_toc(location,c['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> [#{c['language_document_char']}] by #{c['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,c['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a> <a href="#{path_manifest(location,c['language_document_char'])}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ #hmm watch file_suffix title=@text_search_flag \ - ? '<br /><hr>'+title \ + ? '<br /><hr>'+title : '<br />'+title @counter_txt_doc+=1 oldtid=c['tid'].to_i @@ -867,7 +947,7 @@ module SiSU_CGI_sql search_regex=[] build=unescaped_search.scan(/\S+/).each do |g| (g.to_s =~/(AND|OR)/) \ - ? (search_regex << '|') \ + ? (search_regex << '|') : (search_regex << %{#{g.to_s}}) end search_regex=search_regex.join(' ') @@ -878,9 +958,9 @@ module SiSU_CGI_sql else nil end matched_para=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \ - ? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>})) \ + ? (c['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>})) : c['body'] - %{<hr><p><font size="2">ocn <b><a href="#{@hosturl_files}/#{@stub}/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}} + %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],@ln)}##{c['ocn']}">#{c['ocn']}</a></b>:</font></p>#{matched_para}} elsif c['suffix'] =~/1/ #doc %{#{title}<hr><p><font size="2">ocn #{c['ocn']}:#{c['body']}} end @@ -888,9 +968,9 @@ module SiSU_CGI_sql output=title+text else #elsif cgi['view']=~/index/ #% idx body if c['suffix'] !~/1/ #seg - index=%{<a href="#{@hosturl_files}/#{@stub}/#{location}/#{c['seg']}#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag - elsif c['suffix'] =~/1/ #doc - index=%{<a href="#{@hosturl_files}/#{@stub}/#{location}/doc#{lang}.html##{c['ocn']}">#{c['ocn']}</a>, } + index=%{<a href="#{path_filename(location,c['seg'],@ln)}##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag + elsif c['suffix'] =~/1/ #doc #FIX + index=%{<a href="#{path_html_doc(location,@ln)}##{c['ocn']}">#{c['ocn']}</a>, } end if c['seg'] =~/\S+/ if @text_search_flag @@ -900,7 +980,7 @@ module SiSU_CGI_sql else @counter_txt_ocn+=1 output=c['suffix'] !~/1/ \ - ? title+index \ + ? title+index : %{#{title}#{c['ocn'].sort}, } end end @@ -925,7 +1005,7 @@ module SiSU_CGI_sql file_suffix=e['src_filename'][/.+?\.(_?sst|ssm)$/,1] lang=if location =~ /\S+?~(\S\S\S?)$/ l=location[/\S+?~(\S\S\S?)$/,1] - location.gsub!(/(\S+?)~\S\S\S?/,'\1') + location=location.gsub(/(\S+?)~\S\S\S?/,'\1') l=".#{l}" else '' end @@ -934,9 +1014,9 @@ module SiSU_CGI_sql if e['metadata_tid'].to_i != oldtid.to_i ti=e['title'] can_txt_srch=(cgi['view']=~/index/) \ - ? %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } \ - : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } - title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{@hosturl_files}/#{@stub}/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> by #{e['creator_author']} #{can_txt_srch}<a href="#{@hosturl_files}/#{@stub}/#{location}/toc#{lang}.html"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a> <a href="#{@hosturl_files}/#{@stub}/epub/#{location}#{lang}.epub"><img border="0" width="15" height="15" src="#{@image_src}/b_epub.png" alt="epub"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/portrait.pdf"><img border="0" width="15" height="18" src="#{@image_src}/b_pdf.png" alt="pdf portrait"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/landscape.pdf"><img border="0" width="18" height="15" src="#{@image_src}/b_pdf.png" alt="pdf landscape"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/opendocument#{lang}.odt"><img border="0" width="15" height="15" src="#{@image_src}/b_odf.png" alt="odf"></a> <a href="#{@hosturl_files}/#{@stub}/#{location}/sisu_manifest#{lang}.html"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ + ? %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } + : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } + title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,@ln)}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,@ln)}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a> <a href="#{path_manifest(location,@ln)}"><img border="0" width="15" height="15" src="#{@image_src}/b_info.png" alt="manifest"></a><br />} if file_suffix=~/s/ @counter_endn_doc+=1 oldtid=e['metadata_tid'].to_i else title = '' @@ -944,18 +1024,19 @@ module SiSU_CGI_sql if cgi['view']=~/text/ \ or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt endnotes @counter_endn_ocn+=1 - matched_endnote=(@search_regx.to_s.class==String && @search_regx.to_s=~/\S\S+/) \ - ? matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>}) \ + matched_endnote=(@search_regx.to_s.is_a?(String) \ + && @search_regx.to_s=~/\S\S+/) \ + ? (matched=e['body'].gsub(/(<a\s+href="https?:\/\/[^><\s]+#{@search_regx}[^>]+?>|#{@search_regx})/mi,%{<span style="background-color: #{@color_match}">\\1</span>})) : e['body'] - output=%{#{title}<hr><font size="2">note <b><a href="#{@hosturl_files}/#{@stub}/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{@hosturl_files}/#{@stub}/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}} - else #elsif cgi['view']=~/index/ #% idx endnotes + output=%{#{title}<hr><font size="2">note <b><a href="#{path_endnotes(location,@ln)}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,@ln)}##{e['ocn']}">#{e['ocn']}</a>:</font> #{matched_endnote}} + else #elsif cgi['view']=~/index/ #doc #FIX #% idx endnotes @counter_endn_ocn+=1 - output=%{#{title}<a href="#{@hosturl_files}/#{@stub}/#{location}/endnotes.html#_#{e['nr']}">#{e['nr']}</a> [§ <a href="#{@hosturl_files}/#{@stub}/#{location}/doc.html##{e['ocn']}">#{e['ocn']}</a>], } + output=%{#{title}<a href="#{path_endnotes(location,@ln)}#_#{e['nr']}">#{e['nr']}</a> [§ <a href="#{path_html_doc(location,@ln)}##{e['ocn']}">#{e['ocn']}</a>], } end @counters_endn=if @counter_endn_doc > 0 if checked_stats =~/\S/ @@lt_e=@counter_endn_ocn==dbi_statement.sql_match_limit.to_i \ - ? true \ + ? true : false start=(@@offset.to_i+1).to_s range=(@@offset.to_i+@counter_endn_ocn.to_i).to_s @@ -964,17 +1045,17 @@ module SiSU_CGI_sql end end @endnotes << output #+ details - else @endnotes=[] #does not take out yet + else @endnotes='' #does not take out yet end end offset=dbi_statement.sql_offset.to_s limit=dbi_statement.sql_match_limit.to_s @@lt_t ||=false; @@lt_e ||=false canned=(@@lt_t or @@lt_e) \ - ? dbi_statement.pre_next(true,@image_src).to_s \ + ? dbi_statement.pre_next(true,@image_src).to_s : dbi_statement.pre_next(false,@image_src).to_s limit=dbi_statement.sql_match_limit.to_s - cgi.out{@header + @counters_txt + @counters_endn + canned + @body_main.join + @endnotes.join + canned + @tail} #% print cgi_output_header+counters+body+endnotes + cgi.out{@header.force_encoding("UTF-8") + @counters_txt.force_encoding("UTF-8") + @counters_endn.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @body_main.force_encoding("UTF-8") + @endnotes.force_encoding("UTF-8") + canned.force_encoding("UTF-8") + @tail.force_encoding("UTF-8")} #% print cgi_output_header+counters+body+endnotes end rescue Exception => e s='<pre>' + CGI::escapeHTML(e.backtrace.reverse.join("\n")) diff --git a/lib/sisu/v2/cgi_sqlite.rb b/lib/sisu/v4/cgi_sqlite.rb index 8ef65015..78ae0f9a 100644 --- a/lib/sisu/v2/cgi_sqlite.rb +++ b/lib/sisu/v4/cgi_sqlite.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,16 +55,17 @@ ** Description: generates naive cgi search form for search of sisu database (pgsql sqlite) =end -module SiSU_CGI_sqlite #% database building documents - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/cgi_sql_common" # cgi_sql_common.rb - include SiSU_CGI_sql - class SiSU_search_sqlite < SiSU_CGI_common +module SiSU_CGI_SQLite #% database building documents + require_relative 'sysenv' # sysenv.rb + require_relative 'cgi_sql_common' # cgi_sql_common.rb + include SiSU_CGI_SQL + class SearchSQLite < CGI_Common def initialize(opt,webserv) @opt,@webserv=opt,webserv - @env=SiSU_Env::Info_env.new('',opt) + @env=SiSU_Env::InfoEnv.new('',opt) @image_src="#{@env.url.webserv_cgi}/_sisu/image_sys" - @common=SiSU_CGI_sql::SiSU_CGI_common.new(@webserv,@opt.cmd,@image_src,@env) + @common=SiSU_CGI_SQL::CGI_Common.new(@webserv,@opt,@image_src,@env) + @cgi_file_name="#{Db[:name_prefix_db]}by_#{opt.dir_structure_by.to_s}_sqlite.cgi" end def sqlite serve=[] @@ -77,7 +77,7 @@ module SiSU_CGI_sqlite end end end - serve.sort! + serve=serve.sort f1,f2,f3='','','' serve.each do |x| f1 << %{ <option value="#{Db[:name_prefix]}#{x}">#{x}</option>\n} @@ -87,7 +87,6 @@ module SiSU_CGI_sqlite f2 << %{ when /#{Db[:name_prefix]}#{x}/; '<option value="#{Db[:name_prefix]}#{x}">#{x}</option>'\n} end f2 << " end\n" - #f3 f3 << %{ db_name='sisu_sqlite.db'\n} f3 << %{ db_sqlite=case cgi['db']\n} serve.each do |x| @@ -95,8 +94,8 @@ module SiSU_CGI_sqlite end f3 << %{ else '#{@env.path.webserv}/#{serve[0]}/sisu_sqlite.db'\n end\n} if FileTest.writable?('.') - output=File.open('sisu_sqlite.cgi','w') - output << header0 << header1 << header_desc << header2 << f1 << buttons1 << buttons2 << search_request << search_statement << search_statement_common << search_query1 << @common.pages << search_query2 << @common.tail << @common.main1 << f2 << f3 << dbi_connect << @common.main2 + output=File.open(@cgi_file_name,'w') + output << header0 << header1 << header_desc << header2 << f1 << buttons1 << buttons2 << search_request << search_statement << search_statement_common << search_query1 << @common.pages << search_query2 << @common.tail << @common.main1 << f2 << f3 << dbi_connect << @common.main2 << @common.dir_structure << @common.main3 a=%{ generated sisu_sqlite.cgi, BASED ON ALREADY CREATED sisu_sqlite.db OUTPUT, (-d) } @@ -104,16 +103,17 @@ module SiSU_CGI_sqlite c=case @webserv when /pwd/; '' else "if necessary make the directory /usr/lib/cgi-bin : - sudo cp -vi #{Dir.pwd}/sisu_sqlite.cgi /usr/lib/cgi-bin/. - sudo chmod -v 755 /usr/lib/cgi-bin/sisu_sqlite.cgi - (copy sisu_sqlite.cgi to your cgi directory) and set file permissions to 755" + sudo cp -vi #{Dir.pwd}/#{@cgi_file_name} /usr/lib/cgi-bin/. + sudo chmod -v 755 /usr/lib/cgi-bin/#{@cgi_file_name} + sudo ln -s /usr/lib/cgi-bin/#{@cgi_file_name} /usr/lib/cgi-bin/sisu_sqlite.cgi + (copy #{@cgi_file_name} to your cgi directory) set file permissions to 755, and make symbolic link to sisu_sqlite.cgi" end a=%{#{c} #{@env.webserv_base_cgi}/cgi-bin/sisu_sqlite.cgi } b='(to create and populate sisu sqlite database see "man sisu" and in particular the -d flag)' SiSU_Screen::Ansi.new(@opt.cmd,a,b).warn - else puts 'failed in attempt to write sisu_sqlite.cgi to present directory, is directory writable?' + else puts "failed in attempt to write #{@cgi_file_name} to present directory, is directory writable?" end end def header0 @@ -136,19 +136,19 @@ module SiSU_CGI_sqlite end def search_statement <<-'WOK_SQL' - class Dbi_search_string + class DBI_SearchString def initialize(l,t,q,cse=false) @l,@t,@q=l,t,q end def string - search={ :search => [],:flag => false } + search={ search: [], flag: false } if @t =~/\S+/ or @q =~/\S+/ - if @t =~/\S+/; unescaped_search=CGI.unescape(@t) - elsif @q =~/\S+/; unescaped_search=CGI.unescape(@q) + if @t =~/\S+/ then unescaped_search=CGI.unescape(@t) + elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q) end search_construct=[] - unescaped_search.gsub!(/\s*(AND|OR)\s*/,"%' \) \\1 #{@l} LIKE \( '%") - unescaped_search.gsub!(/(.+)/,"#{@l} LIKE \( '%\\1%' \)") + unescaped_search=unescaped_search.gsub(/\s*(AND|OR)\s*/,"%' \) \\1 #{@l} LIKE \( '%"). + gsub(/(.+)/,"#{@l} LIKE \( '%\\1%' \)") search_construct << unescaped_search search_construct=search_construct.join(' ') search[:search] << search_construct @@ -162,13 +162,11 @@ module SiSU_CGI_sqlite end def search_query1 <<-'WOK_SQL' - @search_text,@search_endnotes=[],[] - search[:text].flatten.each{|x| @search_text << "#{x} AND " } - @search_text=@search_text.join.gsub!(/AND\s+$/m,'') - @search_text.gsub!(/(doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)') - search[:endnotes].flatten.each{|x| @search_endnotes << "#{x} AND " } - @search_endnotes=@search_endnotes.join.gsub!(/AND\s+$/m,'') - @search_endnotes.gsub!(/(endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)') + @search_text,@search_endnotes='','' + @search_text=search[:text].flatten.join(' AND ') + @search_text=@search_text.gsub(/(doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+doc_objects\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)') + @search_endnotes=search[:endnotes].flatten.join(' AND ') + @search_endnotes=@search_endnotes.gsub(/(endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\)\s+(?:(?:AND|OR)\s+endnotes\.clean\s+LIKE\s+\(\s*'%[^']+%'\s*\))+)/,'(\1)') end WOK_SQL end @@ -177,7 +175,7 @@ module SiSU_CGI_sqlite def sql_select_body limit ||=@@limit offset ||=@@offset - @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE #{@search_text} AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn} + @sql_statement[:body]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, metadata_and_text.notes_suffix, doc_objects.body, doc_objects.seg, doc_objects.ocn, metadata_and_text.tid FROM doc_objects, metadata_and_text WHERE #{@search_text} AND doc_objects.metadata_tid = metadata_and_text.tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, doc_objects.ocn} @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;} select=@sql_statement[:body] + ' ' + @sql_statement[:range] select @@ -185,7 +183,7 @@ module SiSU_CGI_sqlite def sql_select_endnotes limit ||=@@limit offset ||=@@offset - @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE #{@search_endnotes} AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr} + @sql_statement[:endnotes]=%{SELECT metadata_and_text.title, metadata_and_text.creator_author, metadata_and_text.src_filename, metadata_and_text.language_document_char, endnotes.body, endnotes.nr, endnotes.ocn, endnotes.metadata_tid FROM metadata_and_text, endnotes WHERE #{@search_endnotes} AND metadata_and_text.tid = endnotes.metadata_tid ORDER BY metadata_and_text.language_document_char, metadata_and_text.title, metadata_and_text.src_filename, endnotes.nr} @sql_statement[:range]=%{LIMIT #{limit} OFFSET #{offset} ;} select=@sql_statement[:endnotes] + ' ' + @sql_statement[:range] select diff --git a/lib/sisu/v2/composite.rb b/lib/sisu/v4/composite.rb index 4ff53498..d73b0c73 100644 --- a/lib/sisu/v2/composite.rb +++ b/lib/sisu/v4/composite.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,22 +57,21 @@ =end module SiSU_Assemble - require 'fileutils' - require "#{SiSU_lib}/sysenv" # sysenv.rb - class Remote_image - include FileUtils + require_relative 'sysenv' # sysenv.rb + class RemoteImage def initialize - @env=SiSU_Env::Info_env.new + @env=SiSU_Env::InfoEnv.new end def image(dir) images=[] images[0]=dir images end - def download_images(download_from,images_array) - path="#{@env.path.processing}/external_document/image" - mkdir_p(path) unless FileTest.directory?(path) - images_array.each do |i| + def download_images(images_info) + path="#{@env.processing_path.processing}/external_document/image" + FileUtils::mkdir_p(path) unless FileTest.directory?(path) + download_from=images_info.shift + images_info.each do |i| image="#{path}/#{i}" imagefile=File.new(image,'w+') open("#{download_from}/#{i}") do |g| @@ -82,12 +80,12 @@ module SiSU_Assemble imagefile.close end output_path="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external" - mkdir_p(output_path) unless FileTest.directory?(output_path) - SiSU_Env::System_call.new("#{path}/*",output_path,'q').rsync + FileUtils::mkdir_p(output_path) unless FileTest.directory?(output_path) + SiSU_Env::SystemCall.new("#{path}/*",output_path,'q').rsync end def download_doc_skin(doc_skin) #first element in array is source url - path="#{@env.path.processing}/external_document/skin/doc" - mkdir_p(path) unless FileTest.directory?(path) + path="#{@env.processing_path.processing}/external_document/skin/doc" + FileUtils::mkdir_p(path) unless FileTest.directory?(path) download_from=doc_skin.shift doc_skin.each do |i| skin="#{path}/#{i}.rb" @@ -105,25 +103,31 @@ module SiSU_Assemble @@imager={} def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new + @env=SiSU_Env::InfoEnv.new end def read begin - @fns_array=IO.readlines(@opt.fns,'') + pwd=Dir.pwd + Dir.chdir(@opt.f_pth[:pth]) + @fns_array=IO.readlines(@opt.fno,'') assembled=insertions? write(assembled) - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + Dir.chdir(pwd) + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end def write(assembled) - assembled_file=File.new("#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst",'w+') - assembled.each{|a| assembled_file << a } + assembled_file=File.new("#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst",'w+') + assembled.each {|a| assembled_file << a } assembled_file.close end def download_images(download_from,images_array) - path="#{@env.path.processing}/external_document/image" - mkdir_p(path) unless FileTest.directory?(path) + path="#{@env.processing_path.processing}/external_document/image" + FileUtils::mkdir_p(path) unless FileTest.directory?(path) images_array.each do |i| image="#{path}/#{i}" unless FileTest.exists?(image) @@ -136,8 +140,8 @@ module SiSU_Assemble end end def download_doc_skin(doc_skin) #first element in array is source url - path="#{@env.path.processing}/external_document/skin/doc" - mkdir_p(path) unless FileTest.directory?(path) + path="#{@env.processing_path.processing}/external_document/skin/doc" + FileUtils::mkdir_p(path) unless FileTest.directory?(path) download_from=doc_skin.shift doc_skin.each do |i| skin="#{path}/#{i}.rb" @@ -151,22 +155,22 @@ module SiSU_Assemble end end def insertion(fni,insert_array) - file={ :prepared=>[],:images=>[] } + file={ prepared: [], images: [] } rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ file[:prepared] << "\n% |#{fni}|@|^|>>ok\n" @code_flag=false insert_array.each do |i| - @code_flag=if i =~/^code\{/; true - elsif i =~/^\}code/; false + @code_flag=if i =~/^code\{/ then true + elsif i =~/^\}code/ then false else @code_flag end if not @code_flag \ and i !~/^%+\s/ - i.gsub!(/^([123]|:?[ABC])~\? /,'% [conditional heading:] \1~ ') #off conditional heading (consider syntax) + i=i.gsub(/^([123]|:?[ABC])~\? /,'% [conditional heading:] \1~ ') #off conditional heading (consider syntax) if i =~/^@\S+?:/ - i.gsub!(/\n/m,"\n% ") - i.gsub!(/\n%\s+$/m,'') - i.gsub!(/^@\S+?:/m,"\n% [imported header:] ") #off imported headers + i=i.gsub(/\n/m,"\n% "). + gsub(/\n%\s+$/m,''). + gsub(/^@\S+?:/m,"\n% [imported header:] ") #off imported headers end end file[:prepared] << i @@ -177,8 +181,7 @@ module SiSU_Assemble end file[:prepared] << "\n% end import" << "\n\n" if file[:images].length > 0 - file[:images].flatten! - file[:images].uniq! + file[:images]=file[:images].flatten.uniq file[:images].delete_if {|x| x =~/https?:\/\// } end file @@ -186,7 +189,7 @@ module SiSU_Assemble def insertions? data=@fns_array tuned_file,imagedir=[],[] - SiSU_Screen::Ansi.new(@opt.cmd,'Composite Document',@opt.fns).grey_title_hi unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,'Composite Document',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").grey_title_hi unless @opt.cmd =~/q/ para=data.each do |para| if para =~/^<<\s+(\S+?\.ss[it])$/ \ or para =~/^<<\{(\S+?\.ss[it])\}$/ \ @@ -214,23 +217,64 @@ module SiSU_Assemble file[:prepared] else cX=SiSU_Screen::Ansi.new(@opt.cmd).cX - puts "\t #{cX.fuschia}ERROR#{cX.off} #{cX.brown}#{@opt.fns}#{cX.off} #{cX.fuschia}requires invalid or non-existent file:#{cX.off} #{cX.brown}#{loadfile}#{cX.off}" + STDERR.puts "\t #{cX.fuschia}ERROR#{cX.off} #{cX.brown}#{@opt.fns}#{cX.off} #{cX.fuschia}requires invalid or non-existent file:#{cX.off} #{cX.brown}#{loadfile}#{cX.off}" para end else tuned_file << para end - tuned_file.flatten! - tuned_file.compact! + tuned_file=tuned_file.flatten.compact end if @@imager.length >0 @@imager.each do |d,i| - i.flatten! - i.uniq! - download_images(d,i) + i=i.flatten.uniq + image_info=d + i + download_images(image_info.flatten) end end tuned_file end end + class CompositeFileList + @@imager={} + def initialize(opt) + @opt=opt + @env=SiSU_Env::InfoEnv.new + end + def read + begin + @opt.fns=@opt.fns.gsub(/\.ssm\.sst$/,'.ssm') #FIX earlier, hub + @fns_array=IO.readlines(@opt.fns,'') + files=insertions? + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def insertions? + data=@fns_array + tuned_file,imagedir=[],[] + SiSU_Screen::Ansi.new(@opt.cmd,'Composite Document',@opt.fno).grey_title_hi unless @opt.cmd =~/q/ + @ssm=[@opt.fns] + para=data.each do |para| + if para =~/^<<\s+(\S+?\.ss[it])$/ + loadfile=$1.strip + SiSU_Screen::Ansi.new(@opt.cmd,'loading:',loadfile).txt_grey if @opt.cmd =~/[MVv]/ + tuned_file << if loadfile =~ /(?:https?|file):\/\/\S+?\.ss[ti]$/ + @ssm << loadfile + elsif loadfile =~ /\.ss[ti]$/ \ + and FileTest.file?(loadfile) + @ssm << loadfile + else + cX=SiSU_Screen::Ansi.new(@opt.cmd).cX + STDERR.puts "\t #{cX.fuschia}ERROR#{cX.off} #{cX.brown}#{@opt.fns}#{cX.off} #{cX.fuschia}requires invalid or non-existent file:#{cX.off} #{cX.brown}#{loadfile}#{cX.off}" + para + end + end + end + @ssm + end + end end __END__ diff --git a/lib/sisu/v2/concordance.rb b/lib/sisu/v4/concordance.rb index 20ab8efa..84245643 100644 --- a/lib/sisu/v2/concordance.rb +++ b/lib/sisu/v4/concordance.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,67 +57,86 @@ =end module SiSU_Concordance - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/html_format" # html_format.rb + require_relative 'html_format' # html_format.rb include SiSU_HTML_Format - require "#{SiSU_lib}/html_minitoc" # html_minitoc.rb + require_relative 'html_minitoc' # html_minitoc.rb class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @env,@md=@particulars.env,@particulars.md loc=@env.url.output_tell - unless @md.cmd =~/q/ - tool=(@md.cmd =~/[MVv]/) ? "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:concordance]}" : @md.fns - @md.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@md.cmd,"Concordance",tool).grey_title_hi \ - : SiSU_Screen::Ansi.new(@md.cmd,'Concordance',tool).green_title_hi + unless @md.opt.cmd =~/q/ + tool=(@md.opt.cmd =~/[MVv]/) \ + ? "#{@env.program.web_browser} #{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" + @md.opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,"Concordance",tool).grey_title_hi + : SiSU_Screen::Ansi.new(@opt.cmd,'Concordance',tool).green_title_hi end wordmax=@env.concord_max unless @md.wc_words.nil? if @md.wc_words < wordmax SiSU_Concordance::Source::Words.new(@particulars).songsheet else - SiSU_Screen::Ansi.new(@md.cmd,"concordance skipped, large document has over #{wordmax} words (#{@md.wc_words})").warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"concordance skipped, large document has over #{wordmax} words (#{@md.wc_words})").warn unless @md.opt.cmd =~/q/ end else - SiSU_Screen::Ansi.new(@md.cmd,"wc (word count) is off, concordance will be processed for all files including those over the max set size of: #{wordmax} words").warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"wc (word count) is off, concordance will be processed for all files including those over the max set size of: #{wordmax} words").warn unless @md.opt.cmd =~/q/ SiSU_Concordance::Source::Words.new(@particulars).songsheet end - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css end end private - class Doc_title + class DocTitle include SiSU_Viz #revisit, both requires (html & shared_xml) needed for stand alone operation (sisu -w [filename]) - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - require "#{SiSU_lib}/html" # html.rb + require_relative 'shared_xml' # shared_xml.rb + require_relative 'html' # html.rb def initialize(particulars) @particulars,@md=particulars,particulars.md - @data=SiSU_HTML::Source::Html_environment.new(particulars).tuned_file_instructions - @vz=SiSU_Env::Get_init.instance.skin + @data=SiSU_HTML::Source::HTML_Environment.new(particulars).tuned_file_instructions + @file=SiSU_Env::FileOp.new(@md) + @vz=SiSU_Env::GetInit.instance.skin txt_path=%{#{@md.dir_out}} - SiSU_Env::Info_skin.new(@md).select + SiSU_Env::InfoSkin.new(@md).select @fnb=@md.fnb - @lex_button=%{<a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" height="44" width="144" valign="center" src="../_sisu/image/sisu.png" alt="SiSU home -->"></a>} + @lex_button=%{<a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" height="44" width="144" valign="center" src="#{@file.path_rel_links.html_seg_2}_sisu/image/sisu.png" alt="SiSU home -->"></a>} @doc_details =<<WOK -<table summary="links to text related to this rudimentary index" width="96%" border="0" bgcolor="white" cellpadding="0" align="center"><tr><td width="2%" align="right"> </td><td width="94%" valign="top" align="justify"><h1 class="small"><a href="#{@md.fn[:toc]}" #{@vz.js_toc}><b>#{@md.title.full}</b></a></h1><p class="bold">#{@md.author}</p></td></tr></table> +<table summary="links to text related to this rudimentary index" width="96%" border="0" bgcolor="white" cellpadding="0" align="center"><tr><td width="2%" align="right"> </td><td width="94%" valign="top" align="justify"><h1 class="small"><a href="#{@md.file.base_filename.html_segtoc}"><b>#{@md.title.full}</b></a></h1><p class="bold">#{@md.author}</p></td></tr></table> WOK end def create - head_banner=SiSU_HTML_Format::Head_toc.new(@md) - minitoc=SiSU_HTML_minitoc::Toc_mini.new(@md,@data).songsheet.join("\n") - toc='<div class="toc">' + minitoc + '</div>' + head_banner=SiSU_HTML_Format::HeadToc.new(@md) + minitoc=SiSU_HTML_MiniToc::TocMini.new(@md,@data).songsheet.join("\n") + stylesheet=SiSU_Style::CSS_HeadInfo.new(@md).stylesheet + make=SiSU_Env::ProcessingSettings.new(@md) + if make.build.manifest_minitoc? + toc='<div class="toc">' + minitoc + '</div>' + div_class='content' + else + toc='' + div_class='content0' + end + top_band=if make.build.html_top_band? + head_banner.concordance_navigation_band + else '' + end <<WOK <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> @@ -132,14 +150,12 @@ WOK <meta name="generator" content="SiSU (Linux & Ruby!)"> <link rel="generator" href="http://www.jus.uio.no/sisu" /> <link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> - <link rel="stylesheet" href="../_sisu/css/html.css" type="text/css" /> - #{@vz.js_head} + #{stylesheet.css_head_seg} </head> <body> - #{@vz.js_top} - #{head_banner.concordance_navigation_band('pdf')} + #{top_band} #{toc} -<div class="content"> +<div class="#{div_class}"> #{@doc_details} <p>Word index links are to html versions of the text the segmented version followed by the scroll (single document) version.<br />[For segmented text references [T1], [T2] or [T3] appearing without a link, indicates that the word appears in a title (or subtitle) of the text (that is identifiable by the appended object citation number).]</p> <p>(The word listing/index is Case sensitive: Capitalized words appear before lower case)</p> @@ -169,21 +185,23 @@ WOK end end class Words - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'i18n' # i18n.rb + include SiSU_i18n + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/html_format" # html_format.rb + require_relative 'html_format' # html_format.rb include SiSU_HTML_Format - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Screen @@dp=nil def initialize(particulars) @particulars=particulars begin - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @path="#{@env.path.output}/#{@md.fnb}" + @file=SiSU_Env::FileOp.new(@md) @freq=Hash.new(0) - @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern + @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern @rxp_lv1=/^#{Mx[:lv_o]}1:/ #fix @rxp_lv # Mx[:lv_o] @rxp_lv2=/^#{Mx[:lv_o]}2:/ #fix @rxp_lv # Mx[:lv_o] @rxp_lv3=/^#{Mx[:lv_o]}3:/ #fix @rxp_lv # Mx[:lv_o] @@ -194,33 +212,41 @@ WOK @rxp_excluded1=/#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ @rxp_excluded0=/^(?:#{Mx[:fa_bold_o]}|#{Mx[:fa_italics_o]})?(?:to\d+|\d+| |#{Mx[:br_endnotes]}|EOF|#{Mx[:br_eof]}|thumb_\S+|snap_\S+|_+|-+|[(]?(?:ii+|iv|vi+|ix|xi+|xiv|xv|xvi+|xix|xx)[).]?|\S+?_\S+|[\d_]+\w\S+|[\w\d]{1,2}|\d{1,3}\w?|#{@dp}|[0-9a-f]{16,64}|\d{2,3}x\d{2,3}|\S{0,2}sha\d|\S{0,3}\d{4}w\d\d|\b\w\d+|\d_all\b|e\.?g\.?)(?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})?$/mi #this regex causes and cures a stack dump in ruby 1.9 !!! @rgx_splitlist=%r{[—.,;:#{Mx[:nbsp]}-]}mi - @rgx_scanlist=%r{#{Mx[:fa_italics_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_italics_c]}|#{Mx[:fa_bold_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_bold_c]}|(?:https?|file)://\S+|<\S+?>|\w+|[a-zA-Z]+}mi - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + @alph=SiSU_i18n::Alphabet.new(@md.opt.lng).hash_arrays + @alphlst=SiSU_i18n::Alphabet.new(@md.opt.lng).hash_strings + @rgx_scanlist=%r{#{Mx[:fa_italics_o]}[#{@alphlst[:l]}#{@alphlst[:u]}0-9"\s]{2,12}#{Mx[:fa_italics_c]}|#{Mx[:fa_bold_o]}[#{@alphlst[:l]}#{@alphlst[:u]}0-9"\s]{2,12}#{Mx[:fa_bold_c]}|(?:https?|file)://\S+|<\S+?>|[#{@alphlst[:l]}#{@alphlst[:u]}]+|\w+}mi + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def songsheet begin - mkdir_p(@path) unless FileTest.directory?(@path) - @file_concordance=File.open("#{@path}/#{@md.fn[:concordance]}",'w') + FileUtils::mkdir_p(@file.output_path.html_concordance.dir) unless FileTest.directory?(@file.output_path.html_concordance.dir) + @file_concordance=File.open(@file.place_file.html_concordance.dir,'w') map_para - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure @file_concordance.close end end protected def location_scroll(wordlocation,show) - %{<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}\##{wordlocation}">#{wordlocation}</a>; } + %{<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}\##{wordlocation}">#{wordlocation}</a>; } end def location_seg(wordlocation,show) ##fix - @word_location_seg=wordlocation.gsub(/(.+?)\#(\d+)/,"#{@md.fnl[:pre]}\\1#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}#\\2") unless wordlocation.nil? + @word_location_seg=wordlocation.gsub(/(.+?)\#(\d+)/,"\\1#{@md.lang_code_insert}#{Sfx[:html]}#\\2") unless wordlocation.nil? case wordlocation when @rxp_t1 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{show}">H</a>]#{show}, } + %{[<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}##{show}">H</a>]#{show}, } when @rxp_t2 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{show}">H</a>]#{show}, } + %{[<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}##{show}">H</a>]#{show}, } when @rxp_t3 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{show}">H</a>]#{show}, } + %{[<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}##{show}">H</a>]#{show}, } else %{<a href="#{@word_location_seg}">#{show}</a>, } end end @@ -230,56 +256,63 @@ WOK @dal_array.each do |line| if defined? line.ocn \ and line.ocn.to_s =~/\d/ - if line.is =~/heading/ \ - and line.ln==4 + if (line.is ==:heading \ + || line.is ==:heading_insert) \ + && line.ln==4 @seg=line.name end ocn=line.ocn.to_s if ocn =~/\d+/ \ and ocn !~/^0$/ - line.obj.gsub!(/#{@rxp_excluded1}/,' ') + line.obj=line.obj.gsub(/#{@rxp_excluded1}/,' ') line.obj=line.obj.split(@rgx_splitlist).join(' ') #%take in word or other match for word in line.obj.scan(@rgx_scanlist) #%take in word or other match - word.gsub!(/#{Mx[:lnk_o]}|#{Mx[:lnk_c]}|#{Mx[:url_o]}|#{Mx[:url_c]}/,'') - word.gsub!(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,'') - word.gsub!(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,'') - word.gsub!(/#{Mx[:gl_o]}#[a-z]+#{Mx[:gl_c]}/,'') - word.gsub!(/#{Mx[:gl_o]}#[0-9]+#{Mx[:gl_c]}/,'') - word.gsub!(/[0-9a-f]{10,}/,' ') if word =~/[0-9]/ - word.gsub!(/#{Mx[:br_line]}/,' ') - word.gsub!(/^ +/,'') - word.gsub!(/^\S$/,'') + if word =~ /^([#{@alphlst[:l]}])/ + firstletter=$1 + flu=firstletter.tr(@alphlst[:l],@alphlst[:u]) + word=word.gsub(/^#{firstletter}/,flu ) + end + word=word.gsub(/#{Mx[:lnk_o]}|#{Mx[:lnk_c]}|#{Mx[:url_o]}|#{Mx[:url_c]}/,''). + gsub(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,''). + gsub(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,''). + gsub(/#{Mx[:gl_o]}#[a-z]+#{Mx[:gl_c]}/,''). + gsub(/#{Mx[:gl_o]}#[0-9]+#{Mx[:gl_c]}/,'') + word=word.gsub(/[0-9a-f]{10,}/,' ') if word =~/[0-9]/ + word=word.gsub(/#{Mx[:br_line]}/,' '). + gsub(/^ +/,''). + gsub(/^\S$/,'') word=nil if word.empty? word=nil if word =~@rxp_excluded0 #watch word=nil if word =~/^\S$/ if word - word.gsub!(/#{Mx[:br_nl]}|#{Mx[:br_line]}/,' ') - word.gsub!(/#{Mx[:fa_o]}[a-z]{1,7}#{Mx[:fa_o_c]}|#{Mx[:fa_c_o]}[a-z]{1,7}#{Mx[:fa_c]}/,'') - word.gsub!(/#{Mx[:en_a_o]}(?:\d|[*+])*|#{Mx[:en_b_o]}(?:\d|[*+])*|#{Mx[:en_a_c]}|#{Mx[:en_b_c]}/mi,'') - word.gsub!(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,''); word.gsub!(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,'') - word.gsub!(/<\/?\S+?>/,'') - word.gsub!(/^\@+/,'') - word.strip! - word.gsub!(/#{Mx[:tc_p]}.+/,'') - word.gsub!(/[\.,;:"]$/,'') - word.gsub!(/["]/,'') - word.gsub!(/^\s*[\(]/,'') - word.gsub!(/[\(]\s*$/,'') - word.gsub!(/^(?:See|e\.?g\.?).+/,'') - word.gsub!(/^\s*[.,;:]\s*/,'') - word.strip! - word.gsub!(/^\(?[a-zA-Z]\)$/,'') - word.gsub!(/^\d+(st|nd|rd|th)$/,'') - word.gsub!(/^(\d+\.?)+$/, '') - word.gsub!(/#{Mx[:mk_o]}|#{Mx[:mk_c]}/,'') - word.gsub!(/:name#\S+/,'') - word.gsub!(/^\S$/,'') + word=word.gsub(/#{Mx[:br_nl]}|#{Mx[:br_line]}/,' '). + gsub(/#{Mx[:fa_o]}[a-z]{1,7}#{Mx[:fa_o_c]}|#{Mx[:fa_c_o]}[a-z]{1,7}#{Mx[:fa_c]}/,''). + gsub(/#{Mx[:en_a_o]}(?:\d|[*+])*|#{Mx[:en_b_o]}(?:\d|[*+])*|#{Mx[:en_a_c]}|#{Mx[:en_b_c]}/mi,''). + gsub(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,''). + gsub(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,''). + gsub(/<\/?\S+?>/,''). + gsub(/^\@+/,''). + strip. + gsub(/#{Mx[:tc_p]}.+/,''). + gsub(/[\.,;:"]$/,''). + gsub(/["]/,''). + gsub(/^\s*[\(]/,''). + gsub(/[\(]\s*$/,''). + gsub(/^(?:See|e\.?g\.?).+/,''). + gsub(/^\s*[.,;:]\s*/,''). + strip. + gsub(/^\(?[a-zA-Z]\)$/,''). + gsub(/^\d+(st|nd|rd|th)$/,''). + gsub(/^(\d+\.?)+$/, ''). + gsub(/#{Mx[:mk_o]}|#{Mx[:mk_c]}/,''). + gsub(/:name#\S+/,''). + gsub(/^\S$/,'') word=nil if word =~/^\S$/ word=nil if word =~/^\s*$/ #watch if word unless word =~/[A-Z][A-Z]/ \ or word =~/\w+\s\w+/ - word.capitalize! + word=word.capitalize end @freq[word] +=1 @word_map[word] ||= [] @@ -302,9 +335,12 @@ WOK end scr='<font size="1" color="#777777" face=times new roman><img border="0" height="15" width="15" src="../_sisu/image/b_doc.png" alt="Full Text"> scroll: </font><font size="1" color="#222222" face=times new roman>doc# </font> ' seg='' - @file_concordance << SiSU_Concordance::Source::Doc_title.new(@particulars).create - alph=%W[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] + head=SiSU_Concordance::Source::DocTitle.new(@particulars).create + head=head.gsub(/#{Xx[:html_relative2]}/m,@file.path_rel_links.html_seg_2). + gsub(/#{Xx[:html_relative1]}/m,@file.path_rel_links.html_seg_1) + @file_concordance << head @file_concordance << '<p>' + alph=@alph[:u] alph.each {|x| @file_concordance << %{<a href="##{x}">#{x}</a>, }} @file_concordance << '</p>' letter=alph.shift @@ -332,7 +368,7 @@ WOK end credits=@vz.credits_sisu @file_concordance << %{</div></body>\n</html>} # footer - SiSU_Screen::Ansi.new(@md.cmd,@md.fns,"#{@env.path.output_tell}/#{@md.fn[:concordance]}").flow if @md.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,@md.fns,"#{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}").flow if @md.opt.cmd =~/[MV]/ end end end diff --git a/lib/sisu/v2/conf.rb b/lib/sisu/v4/conf.rb index f3f978db..8cd3e2ef 100644 --- a/lib/sisu/v2/conf.rb +++ b/lib/sisu/v4/conf.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,33 +56,31 @@ =end module SiSU_Initialize - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env include SiSU_Screen - require "#{SiSU_lib}/relaxng" # relaxng.rb - include SiSU_relaxng - require "#{SiSU_lib}/css" # css.rb + require_relative 'relaxng' # relaxng.rb + include SiSU_Relaxng + require_relative 'css' # css.rb include SiSU_Style class Source def initialize(opt) @opt=opt end def read - SiSU_Config.new(@opt).make_homepage - SiSU_Config.new(@opt).css - SiSU_Config.new(@opt).dtd - SiSU_Config.new(@opt).cp_local_images - SiSU_Config.new(@opt).cp_external_images - SiSU_Config.new(@opt).cp_webserver_images #if @opt.mod.inspect =~/--init(?:ialize)?=site/ + ConfigSite.new(@opt).make_homepage + ConfigSite.new(@opt).css + ConfigSite.new(@opt).dtd + ConfigSite.new(@opt).cp_local_images + ConfigSite.new(@opt).cp_external_images + ConfigSite.new(@opt).cp_webserver_images #if @opt.mod.inspect =~/--init(?:ialize)?=site/ end end - class SiSU_Config #config files such as css are not updated if they already exist unless forced using the --init=site modifier - require 'fileutils' - require "#{SiSU_lib}/sysenv" # sysenv.rb - include FileUtils #::Verbose + class ConfigSite #config files such as css are not updated if they already exist unless forced using the --init=site modifier + require_relative 'sysenv' # sysenv.rb def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) @suffix,@path={},{} @suffix[:rnc]='rnc' @suffix[:rng]='rng' @@ -96,31 +93,30 @@ module SiSU_Initialize end def make_homepage SiSU_Screen::Ansi.new(@opt.cmd,'invert','Make homepage','').colorize unless @opt.cmd =~/q/ - SiSU_Env::Create_site.new(@opt.cmd).homepage + SiSU_Env::CreateSite.new(@opt.cmd).homepage end def cp_local_images SiSU_Screen::Ansi.new(@opt.cmd,'invert','Copy images','').colorize unless @opt.cmd =~/q/ - SiSU_Env::Create_site.new(@opt.cmd).cp_local_images - SiSU_Env::Create_site.new(@opt.cmd).cp_webserver_images_local #this should not have been necessary - SiSU_Env::Create_site.new(@opt.cmd).cp_base_images #base images (nav etc.) used by all html + SiSU_Env::CreateSite.new(@opt.cmd).cp_local_images + SiSU_Env::CreateSite.new(@opt.cmd).cp_webserver_images_local #this should not have been necessary + SiSU_Env::CreateSite.new(@opt.cmd).cp_base_images #base images (nav etc.) used by all html end def cp_external_images SiSU_Screen::Ansi.new(@opt.cmd,'invert','Copy external images','').colorize if @opt.cmd =~/V/ - SiSU_Env::Create_site.new(@opt.cmd).cp_external_images + SiSU_Env::CreateSite.new(@opt.cmd).cp_external_images end def cp_webserver_images SiSU_Screen::Ansi.new(@opt.cmd,'invert','Copy webserver/output file images','').colorize unless @opt.cmd =~/q/ - SiSU_Env::Create_site.new(@opt.cmd).cp_webserver_images - SiSU_Env::Create_system_link.new.images + SiSU_Env::CreateSite.new(@opt.cmd).cp_webserver_images end def css SiSU_Screen::Ansi.new(@opt.cmd,'invert','Configuring CSSs','').colorize unless @opt.cmd =~/q/ - SiSU_Env::Create_site.new(@opt.cmd).cp_css + SiSU_Env::CreateSite.new(@opt.cmd).cp_css end def dtd SiSU_Screen::Ansi.new(@opt.cmd,'invert','Configuring DTDs','').colorize unless @opt.cmd =~/q/ - @rxng=SiSU_relaxng::RelaxNG.new - @path.each { |d| mkdir_p(d[1]) unless FileTest.directory?(d[1]) } + @rxng=SiSU_Relaxng::RelaxNG.new + @path.each { |d| FileUtils::mkdir_p(d[1]) unless FileTest.directory?(d[1]) } #ugly code, sort later if @rxng.methods.join =~/[^_]dtd_sax\b/ if @rxng.dtd_sax.length > 200 @@ -161,7 +157,7 @@ module SiSU_Initialize end def trang_rnc_model_output_sax s=@suffix - rnc_src=@env.path.dal + '/sax.' + s[:rnc] + rnc_src=@env.processing_path.dal + '/sax.' + s[:rnc] rnc_file=@path[:rnc] + '/' + @rxng.rnc_name.output_sax rng_file=@path[:rng] + '/' + @rxng.rng_name.output_sax xsd_file=@path[:xsd] + '/' + @rxng.xsd_name.output_sax @@ -169,18 +165,21 @@ module SiSU_Initialize rnc << @rxng.rnc_model_output_sax rnc.close #xsd - schema=SiSU_Env::System_call.new(rnc_src,xsd_file) + schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file) schema.relaxng(@opt.cmd) #rng - schema=SiSU_Env::System_call.new(rnc_src,rng_file) + schema=SiSU_Env::SystemCall.new(rnc_src,rng_file) schema.relaxng(@opt.cmd) #rnc - cp(rnc_src,rnc_file) - chmod(0644,rnc_file) + if FileTest.file?(rnc_src) + FileUtils::cp(rnc_src,rnc_file) + FileUtils::chmod(0644,rnc_file) + else STDERR.puts %{\t*WARN* did not find rnc - "#{rnc_src}" [#{__FILE__}:#{__LINE__}]} + end end def trang_rnc_model_output_dom s=@suffix - rnc_src=@env.path.dal + '/dom.' + s[:rnc] + rnc_src=@env.processing_path.dal + '/dom.' + s[:rnc] rnc_file=@path[:rnc] + '/' + @rxng.rnc_name.output_dom rng_file=@path[:rng] + '/' + @rxng.rng_name.output_dom xsd_file=@path[:xsd] + '/' + @rxng.xsd_name.output_dom @@ -188,18 +187,21 @@ module SiSU_Initialize rnc << @rxng.rnc_model_output_dom rnc.close #xsd - schema=SiSU_Env::System_call.new(rnc_src,xsd_file) + schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file) schema.relaxng(@opt.cmd) #rng - schema=SiSU_Env::System_call.new(rnc_src,rng_file) + schema=SiSU_Env::SystemCall.new(rnc_src,rng_file) schema.relaxng(@opt.cmd) #rnc - cp(rnc_src,rnc_file) - chmod(0644,rnc_file) + if FileTest.file?(rnc_src) + FileUtils::cp(rnc_src,rnc_file) + FileUtils::chmod(0644,rnc_file) + else STDERR.puts %{\t*WARN* did not find rnc - "#{rnc_src}" [#{__FILE__}:#{__LINE__}]} + end end def trang_rnc_model_output_xhtml s=@suffix - rnc_src=@env.path.dal + '/xhtml.' + s[:rnc] + rnc_src=@env.processing_path.dal + '/xhtml.' + s[:rnc] rnc_file=@path[:rnc] + '/' + @rxng.rnc_name.output_xhtml rng_file=@path[:rng] + '/' + @rxng.rng_name.output_xhtml xsd_file=@path[:xsd] + '/' + @rxng.xsd_name.output_xhtml @@ -207,41 +209,44 @@ module SiSU_Initialize rnc << @rxng.rnc_model_output_xhtml rnc.close #xsd - schema=SiSU_Env::System_call.new(rnc_src,xsd_file) + schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file) schema.relaxng(@opt.cmd) #rng - schema=SiSU_Env::System_call.new(rnc_src,rng_file) + schema=SiSU_Env::SystemCall.new(rnc_src,rng_file) schema.relaxng(@opt.cmd) #rnc - cp(rnc_src,rnc_file) - chmod(0644,rnc_file) + if FileTest.file?(rnc_src) + FileUtils::cp(rnc_src,rnc_file) + FileUtils::chmod(0644,rnc_file) + else STDERR.puts %{\t*WARN* did not find rnc - "#{rnc_src}" [#{__FILE__}:#{__LINE__}]} + end end def trang_rnc_model_input_sax - rnc_file=@env.path.dal + '/sax.rnc' + rnc_file=@env.processing_path.dal + '/sax.rnc' dtd_file=@path[:xsd] + '/' + @rxng.rng_name.input_sax rnc=File.new(rnc_file,'w') rnc << @rxng.rnc_model_output_sax rnc.close - schema=SiSU_Env::System_call.new(rnc_file,dtd_file) + schema=SiSU_Env::SystemCall.new(rnc_file,dtd_file) schema.relaxng(@opt.cmd) end def trang_rnc_model_input_dom - rnc_file=@env.path.dal + '/dom.rnc' + rnc_file=@env.processing_path.dal + '/dom.rnc' dtd_file=@path[:xsd] + '/' + @rxng.rng_name.input_dom rnc=File.new(rnc_file,'w') rnc << @rxng.rnc_model_output_dom rnc.close - schema=SiSU_Env::System_call.new(rnc_file,dtd_file) + schema=SiSU_Env::SystemCall.new(rnc_file,dtd_file) schema.relaxng(@opt.cmd) end def trang_rnc_model_input_node - rnc_file=@env.path.dal + '/node.rnc' - rng_file=@env.path.dal + '/node.rng' + rnc_file=@env.processing_path.dal + '/node.rnc' + rng_file=@env.processing_path.dal + '/node.rng' dtd_file=@path[:xsd] + '/' + @rxng.rng_name.input_node rnc=File.new(rnc_file,'w') rnc << @rxng.rnc_model_input_node rnc.close - schema=SiSU_Env::System_call.new(rnc_file,dtd_file) + schema=SiSU_Env::SystemCall.new(rnc_file,dtd_file) schema.relaxng(@opt.cmd) end end diff --git a/lib/sisu/v4/constants.rb b/lib/sisu/v4/constants.rb new file mode 100644 index 00000000..fdb6b680 --- /dev/null +++ b/lib/sisu/v4/constants.rb @@ -0,0 +1,294 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + constants + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +#Ax,Xx,Mx,Rx,Hx,Dx,Px,Ep,Db,Gt,Tex=Array.new(11){{}} +YEAR='2012' +Sfx={ txt: '.txt', html: '.html', xhtml: '.xhtml', xml: '.xml', epub: '.epub', epub_xhtml: '.xhtml', odt: '.odt', pdf: '.pdf'} +Ax={ + tab: "\t", +} +Xx={ + protect: '☞', + segment: 'Ф', + relative_path: '☼', + html_relative2: '※※', + html_relative1: '※', +} +Mx={ + meta_o: '〔@', meta_c: '〕', + lv_o_1: 1, + lv_o_2: 2, + lv_o_3: 3, + lv_o_4: 4, + lv_o_5: 5, + lv_o_6: 6, + lv_o_7: 7, + lv_o_8: 8, + lv_o_9: 9, + lv_o: '〔', lv_c: '〕', + en_a_o: '【', en_a_c: '】', #endnote Mx[:en_a_o]='~{'; Mx[:en_a_c]='}~' + en_b_o: '〖', en_b_c: '〗', #endnote Mx[:en_b_o]='~['; Mx[:en_b_c]=']~' + bl_o: '〔', bl_c: '〕', #block text mark + gr_o: '〔', gr_c: '〕', #group text mark #REPLACE & RETIRE + id_o: '〔', id_c: '〕', #object id mark + tc_o: '『', tc_c: "』", #table row mark #Mx[:tc_c]="』\n" + tc_p: '┆', #table col/misc mark + pa_o: '〔', pa_c: '〕', #affects paragraph mark + mk_o: '〔', mk_c: '〕', #generic mark + gl_o: '〔', gl_c: '〕', #glyph + fa_o: '〔', fa_o_c: '¤', fa_c_o: '¤', fa_c: '〕', + idx_o: '▢ ', idx_c: '▢ ', + nbsp: '░', #'▭ ' + br_line: '╱', #lB ▌ 9612 ┘ ¶ + br_nl: '╲', #lB ▌ 』 ┘ + br_paragraph: '█', #FB █ 9608 # PP ∥ 8741 #▐ #'┘' #'¶' #FB █ 9608 lB ▌ 9612 RB ▐ 9616 + br_obj: 'break_obj', + br_page: '┼', + br_page_new: '╋', + lnk_o: '⌠', lnk_c: '⌡', #'⌈' '⌋' '⌠' '⌡' #Mx[:lnk_o: '◁'; Mx[:lnk_c: '▷' #‹ › + url_o: '「', url_c: '」', + rel_o: '⌈', rel_c: '⌋', + tag_o: '⌊', tag_c: '⌉', + sm_set_o: '《', sm_set_c: '》', + sm_subset_o: '《 ', sm_subset_c: '》', + vline: '┆', # ¦ | +} +Mx[:fa_bold_o]= "#{Mx[:fa_o]}b#{Mx[:fa_o_c]}" +Mx[:fa_bold_c]= "#{Mx[:fa_c_o]}b#{Mx[:fa_c]}" +Mx[:fa_italics_o]= "#{Mx[:fa_o]}i#{Mx[:fa_o_c]}" +Mx[:fa_italics_c]= "#{Mx[:fa_c_o]}i#{Mx[:fa_c]}" +Mx[:fa_underscore_o]= "#{Mx[:fa_o]}u#{Mx[:fa_o_c]}" +Mx[:fa_underscore_c]= "#{Mx[:fa_c_o]}u#{Mx[:fa_c]}" +Mx[:fa_cite_o]= "#{Mx[:fa_o]}cite#{Mx[:fa_o_c]}" +Mx[:fa_cite_c]= "#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}" +Mx[:fa_insert_o]= "#{Mx[:fa_o]}ins#{Mx[:fa_o_c]}" +Mx[:fa_insert_c]= "#{Mx[:fa_c_o]}ins#{Mx[:fa_c]}" +Mx[:fa_strike_o]= "#{Mx[:fa_o]}del#{Mx[:fa_o_c]}" +Mx[:fa_strike_c]= "#{Mx[:fa_c_o]}del#{Mx[:fa_c]}" +Mx[:fa_superscript_o]= "#{Mx[:fa_o]}sup#{Mx[:fa_o_c]}" +Mx[:fa_superscript_c]= "#{Mx[:fa_c_o]}sup#{Mx[:fa_c]}" +Mx[:fa_subscript_o]= "#{Mx[:fa_o]}sub#{Mx[:fa_o_c]}" +Mx[:fa_subscript_c]= "#{Mx[:fa_c_o]}sub#{Mx[:fa_c]}" +Mx[:fa_hilite_o]= "#{Mx[:fa_o]}hi#{Mx[:fa_o_c]}" +Mx[:fa_hilite_c]= "#{Mx[:fa_c_o]}hi#{Mx[:fa_c]}" +Mx[:fa_monospace_o]= "#{Mx[:fa_o]}mono#{Mx[:fa_o_c]}" +Mx[:fa_monospace_c]= "#{Mx[:fa_c_o]}mono#{Mx[:fa_c]}" +Mx[:gl_bullet]= "#{Mx[:gl_o]}●#{Mx[:gl_c]}" +Mx[:br_endnotes]= "#{Mx[:mk_o]}ENDNOTES#{Mx[:mk_c]}" +Mx[:br_eof]= "#{Mx[:mk_o]}EOF#{Mx[:mk_c]}" +Mx[:pa_non_object_dummy_heading]="#{Mx[:pa_o]}-##{Mx[:pa_c]}" #unnumbered paragraph, delete when not required [used in dummy headings, eg. for segmented html] (place marker at end of paragraph) +Mx[:pa_non_object_no_heading]="#{Mx[:pa_o]}~##{Mx[:pa_c]}" #unnumbered paragraph (place marker at end of paragraph) +Hx={ + br_obj: { obj: Mx[:br_obj] }, # line sep + br_page: { obj: Mx[:br_page] }, # newpage + br_page_new: { obj: Mx[:br_page_new] }, # clearpage +} +#Mx[:sm_set_o]='∈ '; Mx[:sm_set_c]='∋ ' +#Mx[:sm_subset_o]='∈ '; Mx[:sm_subset_c]='∋ ' +Rx={ + mx_fa_clean: /#{Mx[:fa_o]}.+?#{Mx[:fa_c]}|#{Mx[:pa_o]}.+?#{Mx[:pa_c]}|#{Mx[:mk_o]}.+?#{Mx[:mk_c]}/, + lv: /〔([1-9]):(\S*?)〕/, + lv_1: /#{Mx[:lv_o_1]}(\S*?)#{Mx[:lv_c]}/, + lv_2: /#{Mx[:lv_o_2]}(\S*?)#{Mx[:lv_c]}/, + lv_3: /#{Mx[:lv_o_3]}(\S*?)#{Mx[:lv_c]}/, + lv_4: /#{Mx[:lv_o_4]}(\S*?)#{Mx[:lv_c]}/, + lv_5: /#{Mx[:lv_o_5]}(\S*?)#{Mx[:lv_c]}/, + lv_6: /#{Mx[:lv_o_6]}(\S*?)#{Mx[:lv_c]}/, + lv_7: /#{Mx[:lv_o_7]}(\S*?)#{Mx[:lv_c]}/, + lv_8: /#{Mx[:lv_o_8]}(\S*?)#{Mx[:lv_c]}/, + lv_9: /#{Mx[:lv_o_9]}(\S*?)#{Mx[:lv_c]}/, + meta: /#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}/, +} +Dx={ + url_o: '‹', url_c: '›', + url_o_xml: '<', url_c_xml: '>', + rel_o: '‹', rel_c: '›', + lt_xml: '<', gt_xml: '>', +} +Tex={ + backslash: "\\\\", + backslash: "\\\\", + tilde: '\\\\\\~', +} +Px={ + bold_o: '*', bold_c: '*', + italics_o: '/', italics_c: '/', + underscore_o: '_', underscore_c: '_', + #emphasis_o: '*', emphasis_c: '*', + #bold_o: '!', bold_c: '!', + cite_o: '"', cite_c: '"', + insert_o: '+', insert_c: '+', + strike_o: '-', strike_c: '-', + superscript_o: '^', superscript_c: '^', + subscript_o: '[', subscript_c: ']', + hilite_o: '*', hilite_c: '*', + monospace_o: '', monospace_c: '', + po_bold_o: '!{', po_bold_c: '}!', + po_italics_o: '/{', po_italics_c: '}/', + po_underscore_o: '_{', po_underscore_c: '}_', + po_cite_o: '"{', po_cite_c: '}"', + po_insert_o: '+{', po_insert_c: '}+', + po_strike_o: '-{', po_strike_c: '}-', + po_superscript_o: '^{', po_superscript_c: '}^', + po_subscript_o: ',{', po_subscript_c: '},', + po_hilite_o: '*{', po_hilite_c: '}*', + po_monospace_o: '#{', po_monospace_c: '}#', + lng_lst: %w[am bg bn br ca cs cy da de el en eo es et eu fi fr ga gl he hi hr hy ia is it la lo lt lv ml mr nl nn no oc pl pt pt_BR ro ru sa se sk sl sq sr sv ta te th tk tr uk ur us vi], + lv1: '*', + lv2: '=', + lv3: '=', + lv4: '-', + lv5: '.', + lv6: '.', +} +Px[:lng_lst_rgx]=Px[:lng_lst].join('|') +Ep={ + d_oebps: 'OEBPS', + f_ncx: 'toc.ncx', + f_opf: 'content.opf', +} +Db={ + name_prefix: "SiSU#{SiSU_version_dir}__", + name_prefix_db: "sisu_#{SiSU_version_dir}__", + col_title: 800, + col_title_part: 400, + col_title_edition: 10, + col_name: 600, + col_creator_misc_short: 100, + col_language: 100, + col_language_char: 6, + col_date_text: 10, + col_classify_txt_long: 600, + col_classify_txt_short: 600, + col_classify_short: 200, + col_classify_identify: 256, + col_classify_library: 30, + col_classify_small: 16, + col_filename: 256, + col_digest: 64, + col_filesize: 10, + col_info_note: 2500, +} +Gt={ + grotto: 'sisu_src', + git: 'sisu:', + src: 'src', + pods: 'pods', + sisupod: 'sisupod', + pod: 'pod', + files: 'files', + doc: 'doc', + po: 'po4a/po', + pot: 'po4a/pot', + image: 'image', + audio: 'audio', + video: 'video', + conf: 'doc/_sisu', + skin: 'doc/_sisu/skin', #Gt[:skin: 'conf/skin/doc' +} +DISABLE={ + epub: { + internal_navigation: true, + per_section_title: true, + ncx_navpoint_unique_id: true, + }, +} +DEVELOPER={ + maintenance: :false, +} +__END__ +consider: + 〔comment〕 + 〔links?????〕 + import document? +check: + bold line + +┆┆⋮┇┊┋ +『』 +「」 +〔〕 +【】 + +· +¤ + #˝ " λ Ω β α π Ѫ Ж Я Ѳ ѳ Ф ㈣ + Ѳ ѳ Ф + ♩ ♭ ✠ ▭ ▬ ▪ +【】〖〗《》「」 + ‹ › ∗ +'〔lv1〕','〔lv2〕','〔lv3〕','〔lv4〕','〔lv5〕','〔lv6〕','〔lv7〕','〔lv8〕','〔lv9〕' +'〔 Ѳ1〕','〔 Ѳ2〕','〔 Ѳ3〕','〔 Ѳ4〕','〔 Ѳ5〕','〔Ѳ6〕','〔Ѳ7〕','〔Ѳ8〕','〔Ѳ9〕' +◁▷ +◀this is text or an image▶ http:// +p __FILE__ +':'+ __LINE__.to_s +p __FILE__ + ' ' + __LINE__.to_s + ' ' + html +puts "#{__FILE__} #{__LINE__} #{o.inspect}" +puts __FILE__ + ' ' + __LINE__.to_s + '--> ' + o.inspect +puts %{-\t#{__FILE__}::#{__LINE__}::#{caller}:\n"#{name}"} +p "\t" + txt.obj + " << #{__FILE__} #{__LINE__} >>" +p (__FILE__ + ' ' + __LINE__.to_s + '--> ' + dob.inspect) if dob.is==:heading +data.each {|o| p (__FILE__ + ' ' + __LINE__.to_s + '--> ' + o.inspect) if o.is==:heading} +puts "#{__FILE__} #{__LINE__} #{para}" if @opt.cmd =~/M/ +puts "#{__FILE__} #{__LINE__} #{t_o}" if @opt.cmd =~/M/ + dr ┌ 9484 dR ┍ 9485 Dr ┎ 9486 DR ┏ 9487 dl ┐ 9488 dL ┑ 9489 Dl ┒ 9490 LD ┓ 9491 ur └ 9492 uR ┕ 9493 Ur ┖ 9494 UR ┗ 9495 ul ┘ 9496 uL ┙ 9497 Ul ┚ 9498 UL ┛ 9499 vr ├ + dr ┌ 9484 dR ┍ 9485 Dr ┎ 9486 DR ┏ 9487 dl ┐ 9488 dL ┑ 9489 Dl ┒ 9490 LD ┓ 9491 ur └ 9492 uR ┕ 9493 Ur ┖ 9494 UR ┗ 9495 ul ┘ 9496 uL ┙ 9497 Ul ┚ 9498 UL ┛ 9499 vr ├ + └ ┘ +Iu ⌠ 8992 Il ⌡ <7 ⌈ 8968 >7 ⌉ 8969 7< ⌊ 8970 7> ⌋ 8971 +<" 『 12302 >" 』 12303 +<' 「 12300 >' 」 12301 diff --git a/lib/sisu/v2/css.rb b/lib/sisu/v4/css.rb index 9856c0d0..693236c4 100644 --- a/lib/sisu/v2/css.rb +++ b/lib/sisu/v4/css.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,11 +56,103 @@ =end module SiSU_Style - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'sysenv' # sysenv.rb + require_relative 'defaults' # defaults.rb + class CSS_HeadInfo + def initialize(md,ft='html') + @md,@ft=md,ft + @env=SiSU_Env::InfoEnv.new('',md) + @fn_css ||=SiSU_Env::CSS_Default.new + @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure + css_copy + end + def stylesheet + def css_path + SiSU_Env::CSS_Stylesheet.new(@md) + end + def css_embed_content + @css_embed_content ||=SiSU_Style::CSS.new + end + def css_embed? + if @ft=='html' \ + && @o_str.dump_or_redirect? + true + else + false + end + end + def css_embed(css) + <<-WOK + <style TYPE="text/css"> + #{css} + </style> + WOK + end + def css_action + style_css=SiSU_Style::CSS.new + css=case @ft + when 'html' + css=css_embed_content.html + css_embed(css) + when 'xhtml' + css_path.xhtml + when 'xml_sax' + css_path.xml_sax + when 'xml_dom' + css_path.xml_dom + else + css_embed_content.html + end + end + def css_head + (css_embed?) \ + ? css_action + : "#{css_path.html}#{css_path.html_seg}" + end + def css_head_seg + (css_embed?) \ + ? css_action + : css_path.html_seg + end + def css_head_xml + css_action + end + self + end + def css_copy + if @o_str.dump_or_redirect? + css=SiSU_Style::CSS.new + if @o_str.dump? + css_pth="#{@md.opt.opt_act[:dump][:inst]}/#{@env.path.style}" + elsif @o_str.redirect? + css_pth="#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}/#{@env.path.style}" + end + FileUtils::mkdir_p(css_pth) unless FileTest.directory?(css_pth) + case @ft + when 'html' + style=File.new("#{css_pth}/#{@fn_css.html}",'w') + style << css.html + style.close + when 'xhtml' + style=File.new("#{css_pth}/#{@fn_css.xhtml}",'w') + style << css.xhtml + style.close + when 'xml_sax' + style=File.new("#{css_pth}/#{@fn_css.xml_sax}",'w') + style << css.xml_sax + style.close + when 'xml_dom' + style=File.new("#{css_pth}/#{@fn_css.xml_dom}",'w') + style << css.xml_dom + style.close + css_path.xml_dom + end + end + end + end class CSS def initialize - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def fonts @vz.font_fonts @@ -336,13 +427,14 @@ WOK background-color: #aaaaaa; } - .norm, .bold, .verse, .group, .alt { + .norm, .bold, .verse, .group, .block, .alt { line-height: 150%; margin-left: 0em; margin-right: 2em; margin-top: 10px; margin-bottom: 0px; - text-indent: 0mm; + padding-left: 0em; + text-indent: 0em; } p, h0, h1, h2, h3, h4, h5, h6 { display: block; @@ -357,16 +449,431 @@ WOK margin-top: 3px; margin-bottom: 3px; } + + /* indent */ + p.norm { } - p.i1 {margin-left: 1em;} - p.i2 {margin-left: 2em;} - p.i3 {margin-left: 3em;} - p.i4 {margin-left: 4em;} - p.i5 {margin-left: 5em;} - p.i6 {margin-left: 6em;} - p.i7 {margin-left: 7em;} - p.i8 {margin-left: 8em;} - p.i9 {margin-left: 9em;} + p.i1 {padding-left: 1em;} + p.i2 {padding-left: 2em;} + p.i3 {padding-left: 3em;} + p.i4 {padding-left: 4em;} + p.i5 {padding-left: 5em;} + p.i6 {padding-left: 6em;} + p.i7 {padding-left: 7em;} + p.i8 {padding-left: 8em;} + p.i9 {padding-left: 9em;} + + /* hanging indent */ + + p.h0i0 { + padding-left: 0em; + text-indent: 0em; + } + p.h0i1 { + padding-left: 1em; + text-indent: -1em; + } + p.h0i2 { + padding-left: 2em; + text-indent: -2em; + } + p.h0i3 { + padding-left: 3em; + text-indent: -3em; + } + p.h0i4 { + padding-left: 4em; + text-indent: -4em; + } + p.h0i5 { + padding-left: 5em; + text-indent: -5em; + } + p.h0i6 { + padding-left: 6em; + text-indent: -6em; + } + p.h0i7 { + padding-left: 7em; + text-indent: -7em; + } + p.h0i8 { + padding-left: 8em; + text-indent: -8em; + } + p.h0i9 { + padding-left: 9em; + text-indent: -9em; + } + + p.h1i0 { + padding-left: 0em; + text-indent: 1em; + } + p.h1i1 { + padding-left: 1em; + text-indent: 0em; + } + p.h1i2 { + padding-left: 2em; + text-indent: -1em; + } + p.h1i3 { + padding-left: 3em; + text-indent: -2em; + } + p.h1i4 { + padding-left: 4em; + text-indent: -3em; + } + p.h1i5 { + padding-left: 5em; + text-indent: -4em; + } + p.h1i6 { + padding-left: 6em; + text-indent: -5em; + } + p.h1i7 { + padding-left: 7em; + text-indent: -6em; + } + p.h1i8 { + padding-left: 8em; + text-indent: -7em; + } + p.h1i9 { + padding-left: 9em; + text-indent: -8em; + } + + p.h2i0 { + padding-left: 0em; + text-indent: 2em; + } + p.h2i1 { + padding-left: 1em; + text-indent: 1em; + } + p.h2i2 { + padding-left: 2em; + text-indent: 0em; + } + p.h2i3 { + padding-left: 3em; + text-indent: -1em; + } + p.h2i4 { + padding-left: 4em; + text-indent: -2em; + } + p.h2i5 { + padding-left: 5em; + text-indent: -3em; + } + p.h2i6 { + padding-left: 6em; + text-indent: -4em; + } + p.h2i7 { + padding-left: 7em; + text-indent: -5em; + } + p.h2i8 { + padding-left: 8em; + text-indent: -6em; + } + p.h2i9 { + padding-left: 9em; + text-indent: -7em; + } + + p.h3i0 { + padding-left: 0em; + text-indent: 3em; + } + p.h3i1 { + padding-left: 1em; + text-indent: 2em; + } + p.h3i2 { + padding-left: 2em; + text-indent: 1em; + } + p.h3i3 { + padding-left: 3em; + text-indent: 0em; + } + p.h3i4 { + padding-left: 4em; + text-indent: -1em; + } + p.h3i5 { + padding-left: 5em; + text-indent: -2em; + } + p.h3i6 { + padding-left: 6em; + text-indent: -3em; + } + p.h3i7 { + padding-left: 7em; + text-indent: -4em; + } + p.h3i8 { + padding-left: 8em; + text-indent: -5em; + } + p.h3i9 { + padding-left: 9em; + text-indent: -6em; + } + + p.h4i0 { + padding-left: 0em; + text-indent: 4em; + } + p.h4i1 { + padding-left: 1em; + text-indent: 3em; + } + p.h4i2 { + padding-left: 2em; + text-indent: 2em; + } + p.h4i3 { + padding-left: 3em; + text-indent: 1em; + } + p.h4i4 { + padding-left: 4em; + text-indent: 0em; + } + p.h4i5 { + padding-left: 5em; + text-indent: -1em; + } + p.h4i6 { + padding-left: 6em; + text-indent: -2em; + } + p.h4i7 { + padding-left: 7em; + text-indent: -3em; + } + p.h4i8 { + padding-left: 8em; + text-indent: -4em; + } + p.h4i9 { + padding-left: 9em; + text-indent: -5em; + } + + p.h5i0 { + padding-left: 0em; + text-indent: 5em; + } + p.h5i1 { + padding-left: 1em; + text-indent: 4em; + } + p.h5i2 { + padding-left: 2em; + text-indent: 3em; + } + p.h5i3 { + padding-left: 3em; + text-indent: 2em; + } + p.h5i4 { + padding-left: 4em; + text-indent: 1em; + } + p.h5i5 { + padding-left: 5em; + text-indent: 0em; + } + p.h5i6 { + padding-left: 6em; + text-indent: -1em; + } + p.h5i7 { + padding-left: 7em; + text-indent: -2em; + } + p.h5i8 { + padding-left: 8em; + text-indent: -3em; + } + p.h5i9 { + padding-left: 9em; + text-indent: -4em; + } + + p.h6i0 { + padding-left: 0em; + text-indent: 6em; + } + p.h6i1 { + padding-left: 1em; + text-indent: 5em; + } + p.h6i2 { + padding-left: 2em; + text-indent: 4em; + } + p.h6i3 { + padding-left: 3em; + text-indent: 3em; + } + p.h6i4 { + padding-left: 4em; + text-indent: 2em; + } + p.h6i5 { + padding-left: 5em; + text-indent: 1em; + } + p.h6i6 { + padding-left: 6em; + text-indent: 0em; + } + p.h6i7 { + padding-left: 7em; + text-indent: -1em; + } + p.h6i8 { + padding-left: 8em; + text-indent: -2em; + } + p.h6i9 { + padding-left: 9em; + text-indent: -3em; + } + + p.h7i0 { + padding-left: 0em; + text-indent: 7em; + } + p.h7i1 { + padding-left: 1em; + text-indent: 6em; + } + p.h7i2 { + padding-left: 2em; + text-indent: 5em; + } + p.h7i3 { + padding-left: 3em; + text-indent: 4em; + } + p.h7i4 { + padding-left: 4em; + text-indent: 3em; + } + p.h7i5 { + padding-left: 5em; + text-indent: 2em; + } + p.h7i6 { + padding-left: 6em; + text-indent: 1em; + } + p.h7i7 { + padding-left: 7em; + text-indent: 0em; + } + p.h7i8 { + padding-left: 8em; + text-indent: -1em; + } + p.h7i9 { + padding-left: 9em; + text-indent: -2em; + } + + p.h8i0 { + padding-left: 0em; + text-indent: 8em; + } + p.h8i1 { + padding-left: 1em; + text-indent: 7em; + } + p.h8i2 { + padding-left: 2em; + text-indent: 6em; + } + p.h8i3 { + padding-left: 3em; + text-indent: 5em; + } + p.h8i4 { + padding-left: 4em; + text-indent: 4em; + } + p.h8i5 { + padding-left: 5em; + text-indent: 3em; + } + p.h8i6 { + padding-left: 6em; + text-indent: 2em; + } + p.h8i7 { + padding-left: 7em; + text-indent: 1em; + } + p.h8i8 { + padding-left: 8em; + text-indent: 0em; + } + p.h8i9 { + padding-left: 9em; + text-indent: -1em; + } + + p.h9i0 { + padding-left: 0em; + text-indent: 9em; + } + p.h9i1 { + padding-left: 1em; + text-indent: 8em; + } + p.h9i2 { + padding-left: 2em; + text-indent: 7em; + } + p.h9i3 { + padding-left: 3em; + text-indent: 6em; + } + p.h9i4 { + padding-left: 4em; + text-indent: 5em; + } + p.h9i5 { + padding-left: 5em; + text-indent: 4em; + } + p.h9i6 { + padding-left: 6em; + text-indent: 3em; + } + p.h9i7 { + padding-left: 7em; + text-indent: 2em; + } + p.h9i8 { + padding-left: 8em; + text-indent: 1em; + } + p.h9i9 { + padding-left: 9em; + text-indent: 0em; + } p.it0 { margin-left: 0em; @@ -429,6 +936,8 @@ WOK line-height: 100%; } + p.block { } + p.group { } p.alt { } @@ -1024,12 +1533,12 @@ WOK padding-left: 1em; padding-right: 1em; } -/* - div.content { - margin-left: 1em; - margin-right: 1em; + div.content0, div.main_column0 { + margin: 0; + padding: 0; + border-left: 0% solid #ffffff; + padding-left: 5%; } -*/ div.scroll { margin: 0; padding: 0; @@ -1337,35 +1846,446 @@ WOK text-align: left; } text[class|="indent0"] { - margin-left: 10%; + padding-left: 10%; } text[class|="indent1"] { - margin-left: 15%; + padding-left: 15%; } text[class|="indent2"] { - margin-left: 20%; + padding-left: 20%; } text[class|="indent3"] { - margin-left: 25%; + padding-left: 25%; } text[class|="indent4"] { - margin-left: 30%; + padding-left: 30%; } text[class|="indent5"] { - margin-left: 35%; + padding-left: 35%; } text[class|="indent6"] { - margin-left: 40%; + padding-left: 40%; } text[class|="indent7"] { - margin-left: 45%; + padding-left: 45%; } text[class|="indent8"] { - margin-left: 50%; + padding-left: 50%; } text[class|="indent9"] { - margin-left: 55%; + padding-left: 55%; + } + + text[class|="hang0_indent0"] { + padding-left: 10%; + text-indent: 0%; + } + text[class|="hang0_indent1"] { + padding-left: 15%; + text-indent: -5%; + } + text[class|="hang0_indent2"] { + padding-left: 20%; + text-indent: -10%; + } + text[class|="hang0_indent3"] { + padding-left: 25%; + text-indent: -15%; + } + text[class|="hang0_indent4"] { + padding-left: 30%; + text-indent: -20%; + } + text[class|="hang0_indent5"] { + padding-left: 35%; + text-indent: -25%; + } + text[class|="hang0_indent6"] { + padding-left: 40%; + text-indent: -30%; + } + text[class|="hang0_indent7"] { + padding-left: 45%; + text-indent: -35%; + } + text[class|="hang0_indent8"] { + padding-left: 50%; + text-indent: -40%; + } + text[class|="hang0_indent9"] { + padding-left: 55%; + text-indent: -45%; + } + + text[class|="hang1_indent0"] { + padding-left: 10%; + text-indent: 5%; + } + text[class|="hang1_indent1"] { + padding-left: 15%; + text-indent: 0%; + } + text[class|="hang1_indent2"] { + padding-left: 20%; + text-indent: -5%; + } + text[class|="hang1_indent3"] { + padding-left: 25%; + text-indent: -10%; + } + text[class|="hang1_indent4"] { + padding-left: 30%; + text-indent: -15%; + } + text[class|="hang1_indent5"] { + padding-left: 35%; + text-indent: -20%; + } + text[class|="hang1_indent6"] { + padding-left: 40%; + text-indent: -25%; + } + text[class|="hang1_indent7"] { + padding-left: 45%; + text-indent: -30%; + } + text[class|="hang1_indent8"] { + padding-left: 50%; + text-indent: -35%; + } + text[class|="hang1_indent9"] { + padding-left: 55%; + text-indent: -40%; + } + + text[class|="hang2_indent0"] { + padding-left: 10%; + text-indent: 10%; + } + text[class|="hang2_indent1"] { + padding-left: 15%; + text-indent: 5%; + } + text[class|="hang2_indent2"] { + padding-left: 20%; + text-indent: 0%; + } + text[class|="hang2_indent3"] { + padding-left: 25%; + text-indent: -5%; + } + text[class|="hang2_indent4"] { + padding-left: 30%; + text-indent: -10%; + } + text[class|="hang2_indent5"] { + padding-left: 35%; + text-indent: -15%; + } + text[class|="hang2_indent6"] { + padding-left: 40%; + text-indent: -20%; + } + text[class|="hang2_indent7"] { + padding-left: 45%; + text-indent: -25%; + } + text[class|="hang2_indent8"] { + padding-left: 50%; + text-indent: -30%; + } + text[class|="hang2_indent9"] { + padding-left: 55%; + text-indent: -35%; + } + + text[class|="hang3_indent0"] { + padding-left: 10%; + text-indent: 15%; + } + text[class|="hang3_indent1"] { + padding-left: 15%; + text-indent: 10%; + } + text[class|="hang3_indent2"] { + padding-left: 20%; + text-indent: 5%; + } + text[class|="hang3_indent3"] { + padding-left: 25%; + text-indent: 0%; + } + text[class|="hang3_indent4"] { + padding-left: 30%; + text-indent: -5%; + } + text[class|="hang3_indent5"] { + padding-left: 35%; + text-indent: -10%; + } + text[class|="hang3_indent6"] { + padding-left: 40%; + text-indent: -15%; + } + text[class|="hang3_indent7"] { + padding-left: 45%; + text-indent: -20%; + } + text[class|="hang3_indent8"] { + padding-left: 50%; + text-indent: -25%; + } + text[class|="hang3_indent9"] { + padding-left: 55%; + text-indent: -30%; + } + + text[class|="hang4_indent0"] { + padding-left: 10%; + text-indent: 20%; } + text[class|="hang4_indent1"] { + padding-left: 15%; + text-indent: 15%; + } + text[class|="hang4_indent2"] { + padding-left: 20%; + text-indent: 10%; + } + text[class|="hang4_indent3"] { + padding-left: 25%; + text-indent: 5%; + } + text[class|="hang4_indent4"] { + padding-left: 30%; + text-indent: 0%; + } + text[class|="hang4_indent5"] { + padding-left: 35%; + text-indent: -5%; + } + text[class|="hang4_indent6"] { + padding-left: 40%; + text-indent: -10%; + } + text[class|="hang4_indent7"] { + padding-left: 45%; + text-indent: -15%; + } + text[class|="hang4_indent8"] { + padding-left: 50%; + text-indent: -20%; + } + text[class|="hang4_indent9"] { + padding-left: 55%; + text-indent: -25%; + } + + text[class|="hang5_indent0"] { + padding-left: 10%; + text-indent: 25%; + } + text[class|="hang5_indent1"] { + padding-left: 15%; + text-indent: 20%; + } + text[class|="hang5_indent2"] { + padding-left: 20%; + text-indent: 15%; + } + text[class|="hang5_indent3"] { + padding-left: 25%; + text-indent: 10%; + } + text[class|="hang5_indent4"] { + padding-left: 30%; + text-indent: 5%; + } + text[class|="hang5_indent5"] { + padding-left: 35%; + text-indent: 0%; + } + text[class|="hang5_indent6"] { + padding-left: 40%; + text-indent: -5%; + } + text[class|="hang5_indent7"] { + padding-left: 45%; + text-indent: -10%; + } + text[class|="hang5_indent8"] { + padding-left: 50%; + text-indent: -15%; + } + text[class|="hang5_indent9"] { + padding-left: 55%; + text-indent: -20%; + } + + text[class|="hang6_indent0"] { + padding-left: 10%; + text-indent: 30%; + } + text[class|="hang6_indent1"] { + padding-left: 15%; + text-indent: 25%; + } + text[class|="hang6_indent2"] { + padding-left: 20%; + text-indent: 20%; + } + text[class|="hang6_indent3"] { + padding-left: 25%; + text-indent: 15%; + } + text[class|="hang6_indent4"] { + padding-left: 30%; + text-indent: 10%; + } + text[class|="hang6_indent5"] { + padding-left: 35%; + text-indent: 5%; + } + text[class|="hang6_indent6"] { + padding-left: 40%; + text-indent: 0%; + } + text[class|="hang6_indent7"] { + padding-left: 45%; + text-indent: -5%; + } + text[class|="hang6_indent8"] { + padding-left: 50%; + text-indent: -10%; + } + text[class|="hang6_indent9"] { + padding-left: 55%; + text-indent: -15%; + } + + text[class|="hang7_indent0"] { + padding-left: 10%; + text-indent: 35%; + } + text[class|="hang7_indent1"] { + padding-left: 15%; + text-indent: 30%; + } + text[class|="hang7_indent2"] { + padding-left: 20%; + text-indent: 25%; + } + text[class|="hang7_indent3"] { + padding-left: 25%; + text-indent: 20%; + } + text[class|="hang7_indent4"] { + padding-left: 30%; + text-indent: 15%; + } + text[class|="hang7_indent5"] { + padding-left: 35%; + text-indent: 10%; + } + text[class|="hang7_indent6"] { + padding-left: 40%; + text-indent: 5%; + } + text[class|="hang7_indent7"] { + padding-left: 45%; + text-indent: 0%; + } + text[class|="hang7_indent8"] { + padding-left: 50%; + text-indent: -5%; + } + text[class|="hang7_indent9"] { + padding-left: 55%; + text-indent: -10%; + } + + text[class|="hang8_indent0"] { + padding-left: 10%; + text-indent: 40%; + } + text[class|="hang8_indent1"] { + padding-left: 15%; + text-indent: 35%; + } + text[class|="hang8_indent2"] { + padding-left: 20%; + text-indent: 30%; + } + text[class|="hang8_indent3"] { + padding-left: 25%; + text-indent: 25%; + } + text[class|="hang8_indent4"] { + padding-left: 30%; + text-indent: 20%; + } + text[class|="hang8_indent5"] { + padding-left: 35%; + text-indent: 15%; + } + text[class|="hang8_indent6"] { + padding-left: 40%; + text-indent: 10%; + } + text[class|="hang8_indent7"] { + padding-left: 45%; + text-indent: 5%; + } + text[class|="hang8_indent8"] { + padding-left: 50%; + text-indent: 0%; + } + text[class|="hang8_indent9"] { + padding-left: 55%; + text-indent: -5%; + } + + text[class|="hang9_indent0"] { + padding-left: 10%; + text-indent: 45%; + } + text[class|="hang9_indent1"] { + padding-left: 15%; + text-indent: 40%; + } + text[class|="hang9_indent2"] { + padding-left: 20%; + text-indent: 35%; + } + text[class|="hang9_indent3"] { + padding-left: 25%; + text-indent: 30%; + } + text[class|="hang9_indent4"] { + padding-left: 30%; + text-indent: 25%; + } + text[class|="hang9_indent5"] { + padding-left: 35%; + text-indent: 20%; + } + text[class|="hang9_indent6"] { + padding-left: 40%; + text-indent: 15%; + } + text[class|="hang9_indent7"] { + padding-left: 45%; + text-indent: 10%; + } + text[class|="hang9_indent8"] { + padding-left: 50%; + text-indent: 5%; + } + text[class|="hang9_indent9"] { + padding-left: 55%; + text-indent: 0%; + } + text[class|="indent_bullet"] { text-indent: 0%; } @@ -1399,7 +2319,7 @@ WOK text[class|="indent_bullet9"] { text-indent: 50%; } - text[class|="verse"], text[class|="group"], text[class|="code"] { + text[class|="verse"], text[class|="block"], text[class|="group"], text[class|="code"] { text-align: left; } ocn { @@ -1643,61 +2563,481 @@ WOK font-weight: bold; text-align: left; } + text[class|="indent0"] { + padding-left: 10%; + } text[class|="indent1"] { - margin-left: 10%; + padding-left: 15%; } text[class|="indent2"] { - margin-left: 15%; + padding-left: 20%; } text[class|="indent3"] { - margin-left: 20%; + padding-left: 25%; } text[class|="indent4"] { - margin-left: 25%; + padding-left: 30%; } text[class|="indent5"] { - margin-left: 30%; + padding-left: 35%; } text[class|="indent6"] { - margin-left: 35%; + padding-left: 40%; } text[class|="indent7"] { - margin-left: 40%; + padding-left: 45%; } text[class|="indent8"] { - margin-left: 45%; + padding-left: 50%; } text[class|="indent9"] { - margin-left: 50%; + padding-left: 55%; + } + + text[class|="hang0_indent0"] { + padding-left: 10%; + text-indent: 0%; + } + text[class|="hang0_indent1"] { + padding-left: 15%; + text-indent: -5%; + } + text[class|="hang0_indent2"] { + padding-left: 20%; + text-indent: -10%; + } + text[class|="hang0_indent3"] { + padding-left: 25%; + text-indent: -15%; + } + text[class|="hang0_indent4"] { + padding-left: 30%; + text-indent: -20%; + } + text[class|="hang0_indent5"] { + padding-left: 35%; + text-indent: -25%; + } + text[class|="hang0_indent6"] { + padding-left: 40%; + text-indent: -30%; + } + text[class|="hang0_indent7"] { + padding-left: 45%; + text-indent: -35%; + } + text[class|="hang0_indent8"] { + padding-left: 50%; + text-indent: -40%; + } + text[class|="hang0_indent9"] { + padding-left: 55%; + text-indent: -45%; + } + + text[class|="hang1_indent0"] { + padding-left: 10%; + text-indent: 5%; + } + text[class|="hang1_indent1"] { + padding-left: 15%; + text-indent: 0%; + } + text[class|="hang1_indent2"] { + padding-left: 20%; + text-indent: -5%; + } + text[class|="hang1_indent3"] { + padding-left: 25%; + text-indent: -10%; + } + text[class|="hang1_indent4"] { + padding-left: 30%; + text-indent: -15%; + } + text[class|="hang1_indent5"] { + padding-left: 35%; + text-indent: -20%; + } + text[class|="hang1_indent6"] { + padding-left: 40%; + text-indent: -25%; + } + text[class|="hang1_indent7"] { + padding-left: 45%; + text-indent: -30%; + } + text[class|="hang1_indent8"] { + padding-left: 50%; + text-indent: -35%; + } + text[class|="hang1_indent9"] { + padding-left: 55%; + text-indent: -40%; + } + + text[class|="hang2_indent0"] { + padding-left: 10%; + text-indent: 10%; + } + text[class|="hang2_indent1"] { + padding-left: 15%; + text-indent: 5%; + } + text[class|="hang2_indent2"] { + padding-left: 20%; + text-indent: 0%; + } + text[class|="hang2_indent3"] { + padding-left: 25%; + text-indent: -5%; + } + text[class|="hang2_indent4"] { + padding-left: 30%; + text-indent: -10%; + } + text[class|="hang2_indent5"] { + padding-left: 35%; + text-indent: -15%; + } + text[class|="hang2_indent6"] { + padding-left: 40%; + text-indent: -20%; + } + text[class|="hang2_indent7"] { + padding-left: 45%; + text-indent: -25%; + } + text[class|="hang2_indent8"] { + padding-left: 50%; + text-indent: -30%; + } + text[class|="hang2_indent9"] { + padding-left: 55%; + text-indent: -35%; + } + + text[class|="hang3_indent0"] { + padding-left: 10%; + text-indent: 15%; + } + text[class|="hang3_indent1"] { + padding-left: 15%; + text-indent: 10%; + } + text[class|="hang3_indent2"] { + padding-left: 20%; + text-indent: 5%; + } + text[class|="hang3_indent3"] { + padding-left: 25%; + text-indent: 0%; + } + text[class|="hang3_indent4"] { + padding-left: 30%; + text-indent: -5%; + } + text[class|="hang3_indent5"] { + padding-left: 35%; + text-indent: -10%; + } + text[class|="hang3_indent6"] { + padding-left: 40%; + text-indent: -15%; + } + text[class|="hang3_indent7"] { + padding-left: 45%; + text-indent: -20%; + } + text[class|="hang3_indent8"] { + padding-left: 50%; + text-indent: -25%; + } + text[class|="hang3_indent9"] { + padding-left: 55%; + text-indent: -30%; + } + + text[class|="hang4_indent0"] { + padding-left: 10%; + text-indent: 20%; + } + text[class|="hang4_indent1"] { + padding-left: 15%; + text-indent: 15%; + } + text[class|="hang4_indent2"] { + padding-left: 20%; + text-indent: 10%; + } + text[class|="hang4_indent3"] { + padding-left: 25%; + text-indent: 5%; + } + text[class|="hang4_indent4"] { + padding-left: 30%; + text-indent: 0%; + } + text[class|="hang4_indent5"] { + padding-left: 35%; + text-indent: -5%; + } + text[class|="hang4_indent6"] { + padding-left: 40%; + text-indent: -10%; + } + text[class|="hang4_indent7"] { + padding-left: 45%; + text-indent: -15%; + } + text[class|="hang4_indent8"] { + padding-left: 50%; + text-indent: -20%; + } + text[class|="hang4_indent9"] { + padding-left: 55%; + text-indent: -25%; + } + + text[class|="hang5_indent0"] { + padding-left: 10%; + text-indent: 25%; + } + text[class|="hang5_indent1"] { + padding-left: 15%; + text-indent: 20%; + } + text[class|="hang5_indent2"] { + padding-left: 20%; + text-indent: 15%; + } + text[class|="hang5_indent3"] { + padding-left: 25%; + text-indent: 10%; + } + text[class|="hang5_indent4"] { + padding-left: 30%; + text-indent: 5%; + } + text[class|="hang5_indent5"] { + padding-left: 35%; + text-indent: 0%; + } + text[class|="hang5_indent6"] { + padding-left: 40%; + text-indent: -5%; + } + text[class|="hang5_indent7"] { + padding-left: 45%; + text-indent: -10%; + } + text[class|="hang5_indent8"] { + padding-left: 50%; + text-indent: -15%; + } + text[class|="hang5_indent9"] { + padding-left: 55%; + text-indent: -20%; + } + + text[class|="hang6_indent0"] { + padding-left: 10%; + text-indent: 30%; + } + text[class|="hang6_indent1"] { + padding-left: 15%; + text-indent: 25%; + } + text[class|="hang6_indent2"] { + padding-left: 20%; + text-indent: 20%; + } + text[class|="hang6_indent3"] { + padding-left: 25%; + text-indent: 15%; + } + text[class|="hang6_indent4"] { + padding-left: 30%; + text-indent: 10%; + } + text[class|="hang6_indent5"] { + padding-left: 35%; + text-indent: 5%; + } + text[class|="hang6_indent6"] { + padding-left: 40%; + text-indent: 0%; + } + text[class|="hang6_indent7"] { + padding-left: 45%; + text-indent: -5%; + } + text[class|="hang6_indent8"] { + padding-left: 50%; + text-indent: -10%; + } + text[class|="hang6_indent9"] { + padding-left: 55%; + text-indent: -15%; + } + + text[class|="hang7_indent0"] { + padding-left: 10%; + text-indent: 35%; + } + text[class|="hang7_indent1"] { + padding-left: 15%; + text-indent: 30%; + } + text[class|="hang7_indent2"] { + padding-left: 20%; + text-indent: 25%; + } + text[class|="hang7_indent3"] { + padding-left: 25%; + text-indent: 20%; + } + text[class|="hang7_indent4"] { + padding-left: 30%; + text-indent: 15%; + } + text[class|="hang7_indent5"] { + padding-left: 35%; + text-indent: 10%; + } + text[class|="hang7_indent6"] { + padding-left: 40%; + text-indent: 5%; + } + text[class|="hang7_indent7"] { + padding-left: 45%; + text-indent: 0%; + } + text[class|="hang7_indent8"] { + padding-left: 50%; + text-indent: -5%; + } + text[class|="hang7_indent9"] { + padding-left: 55%; + text-indent: -10%; + } + + text[class|="hang8_indent0"] { + padding-left: 10%; + text-indent: 40%; + } + text[class|="hang8_indent1"] { + padding-left: 15%; + text-indent: 35%; + } + text[class|="hang8_indent2"] { + padding-left: 20%; + text-indent: 30%; + } + text[class|="hang8_indent3"] { + padding-left: 25%; + text-indent: 25%; + } + text[class|="hang8_indent4"] { + padding-left: 30%; + text-indent: 20%; + } + text[class|="hang8_indent5"] { + padding-left: 35%; + text-indent: 15%; + } + text[class|="hang8_indent6"] { + padding-left: 40%; + text-indent: 10%; + } + text[class|="hang8_indent7"] { + padding-left: 45%; + text-indent: 5%; + } + text[class|="hang8_indent8"] { + padding-left: 50%; + text-indent: 0%; + } + text[class|="hang8_indent9"] { + padding-left: 55%; + text-indent: -5%; + } + + text[class|="hang9_indent0"] { + padding-left: 10%; + text-indent: 45%; + } + text[class|="hang9_indent1"] { + padding-left: 15%; + text-indent: 40%; + } + text[class|="hang9_indent2"] { + padding-left: 20%; + text-indent: 35%; + } + text[class|="hang9_indent3"] { + padding-left: 25%; + text-indent: 30%; + } + text[class|="hang9_indent4"] { + padding-left: 30%; + text-indent: 25%; + } + text[class|="hang9_indent5"] { + padding-left: 35%; + text-indent: 20%; + } + text[class|="hang9_indent6"] { + padding-left: 40%; + text-indent: 15%; + } + text[class|="hang9_indent7"] { + padding-left: 45%; + text-indent: 10%; + } + text[class|="hang9_indent8"] { + padding-left: 50%; + text-indent: 5%; + } + text[class|="hang9_indent9"] { + padding-left: 55%; + text-indent: 0%; + } + + text[class|="indent_bullet"] { + text-indent: 0%; + } + text[class|="indent_bullet0"] { + text-indent: 0%; } text[class|="indent_bullet1"] { - margin-left: 10%; + padding-left: 10%; } text[class|="indent_bullet2"] { - margin-left: 15%; + padding-left: 15%; } text[class|="indent_bullet3"] { - margin-left: 20%; + padding-left: 20%; } text[class|="indent_bullet4"] { - margin-left: 25%; + padding-left: 25%; } text[class|="indent_bullet5"] { - margin-left: 30%; + padding-left: 30%; } text[class|="indent_bullet6"] { - margin-left: 35%; + padding-left: 35%; } text[class|="indent_bullet7"] { - margin-left: 40%; + padding-left: 40%; } text[class|="indent_bullet8"] { - margin-left: 45%; + padding-left: 45%; } text[class|="indent_bullet9"] { - margin-left: 50%; + padding-left: 50%; } - text[class|="verse"], text[class|="group"], text[class|="code"] { + text[class|="verse"], text[class|="block"], text[class|="group"], text[class|="code"] { text-align: left; } table { @@ -1859,7 +3199,7 @@ WOK margin-top: 2px; margin-bottom: 0px; } - para.verse, para.group, para.code { + para.verse, para.block, para.group, para.code { text-align: left; } para.norm { diff --git a/lib/sisu/v4/dal.rb b/lib/sisu/v4/dal.rb new file mode 100644 index 00000000..0e816091 --- /dev/null +++ b/lib/sisu/v4/dal.rb @@ -0,0 +1,510 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: preprocessing, (document abstraction), data abstraction used + in subsequent processing + +=end +module SiSU_DAL + require_relative 'defaults' # defaults.rb + include SiSU_Viz + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + require_relative 'param' # param.rb + include SiSU_Param + require_relative 'dal_doc_objects' # dal_doc_objects.rb + require_relative 'dal_syntax' # dal_syntax.rb + include SiSU_DAL_Syntax + require_relative 'dal_doc_str' # dal_doc_str.rb + require_relative 'dal_idx' # dal_idx.rb + require_relative 'dal_numbering' # dal_numbering.rb + require_relative 'dal_hash_digest' # dal_hash_digest.rb + require_relative 'dal_endnotes' # dal_endnotes.rb + require_relative 'dal_images' # dal_images.rb + require_relative 'dal_metadata' # dal_metadata.rb + require_relative 'dal_character_check' # dal_character_check.rb + require_relative 'dal_substitutions_and_insertions' # dal_substitutions_and_insertions.rb + require_relative 'dal_expand_insertions' # dal_expand_insertions.rb + require_relative 'prog_text_translation' # prog_text_translation.rb + require_relative 'shared_sem' # shared_sem.rb + class Instantiate < SiSU_Param::Parameters::Instructions + def initialize + @@flag_vocab=0 + @@line_mode='' + end + end + class Source <Instantiate + @@dal_array=[] + @@idx_arr={ sst: [], tex: [], html: [], xhtml: [] } + @@map_arr={ nametags: [], ocn_htmlseg: [] } + @@fns=nil + def initialize(opt,fnx=nil) + @opt,@fnx=opt,fnx + @@fns||@opt.fns + @make_fns=if @fnx and @fnx =~/\.ss[tmi]$/ + SiSU_Env::InfoFile.new(@fnx) + else + SiSU_Env::InfoFile.new(@opt.fns) + end + @fnm=@make_fns.marshal.dal_metadata + @fnc=@make_fns.marshal.dal_content + @idx_sst=@make_fns.marshal.dal_idx_sst_rel_html_seg + @idx_raw=@make_fns.marshal.dal_idx_sst_rel + @idx_html=@make_fns.marshal.dal_idx_html + @idx_xhtml=@make_fns.marshal.dal_idx_xhtml + @map_nametags=@make_fns.marshal.dal_map_nametags + @map_ocn_htmlseg=@make_fns.marshal.dal_map_ocn_htmlseg + @env=SiSU_Env::InfoEnv.new + end + def read #creates dal + begin + dal=[] + @@dal_array=[] + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + create_dal + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@@fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get #reads dal, unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@dal_array=[] + end + dal=(@@dal_array.empty?) \ + ? read_fnc + : @@dal_array.dup + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_idx_sst #reads dal idx.sst, #unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@idx_arr[:sst]=[] + end + dal=(@@idx_arr[:sst].empty?) ? read_idx_sst : @@idx_arr[:sst].dup #check + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_idx_raw + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@idx_arr[:tex]=[] + end + dal=(@@idx_arr[:tex].empty?) ? read_idx_raw : @@idx_arr[:tex].dup #check + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_idx_html #reads dal idx.html, #unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@idx_arr[:html]=[] + end + dal=(@@idx_arr[:html].empty?) ? read_idx_html : @@idx_arr[:html].dup + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_idx_xhtml #reads dal idx.xhtml, #unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@idx_arr[:xthml]=[] + end + dal=(@@idx_arr[:xhtml].empty?) ? read_idx_xhtml : @@idx_arr[:xhtml].dup + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_map_nametags #reads dal map.nametags, #unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@map_arr[:nametags]=[] + end + dal=(@@map_arr[:nametags].empty?) ? read_map_nametags : @@map_arr[:nametags].dup + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + def get_map_ocn_htmlseg #reads dal map.ocn_htmlseg, #unless does not exist then creates first + begin + dal=[] + unless @@fns==@opt.fns \ + or @@fns==@fnx + @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + @@map_arr[:ocn_htmlseg]=[] + end + dal=(@@map_arr[:ocn_htmlseg].empty?) ? read_map_ocn_htmlseg : @@map_arr[:ocn_htmlseg].dup + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_DAL::Instantiate.new + end + end + protected + def create_dal + dal_array=[] + unless @opt.cmd =~/q/ + tell=(@opt.cmd=~/[vVM]/) \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Document Abstraction') + : SiSU_Screen::Ansi.new(@opt.cmd,'Document Abstraction',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}") + tell.grey_title_hi + end + fn=(@fnx && @fnx =~/\.ss[tmi]$/) \ + ? @fnx + : @opt.fns + if @opt.fno =~/\.txz$/ + Dir.chdir(@opt.f_pth[:pth]) + end + meta=file_array=@env.source_file_processing_array(fn) + @md=SiSU_Param::Parameters::Instructions.new(meta,@opt).extract + meta=nil + dal=SiSU_DAL::Make.new(fn,@md,file_array).song + if @opt.cmd =~/[vM]/ + cf=SiSU_Env::CreateFile.new(fn) + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"~meta/#{@opt.fns}.meta").output if @opt.cmd =~/v/i + SiSU_Screen::Ansi.new(@opt.cmd,"dal -> #{cf.meta}").txt_grey if @opt.cmd =~/M/ + end + dal.each {|s| dal_array << s} + dal_array + end + def read_fnm + dal=[] + dal=if FileTest.file?(@fnm) + File.open(@fnm,'r:utf-8'){ |f| dal=Marshal.load(f)} + else SiSU_DAL::Source.new(@opt).create_dal + end + end + def read_fnc + dal=[] + dal=if FileTest.file?(@fnc) + File.open(@fnc,'r:utf-8'){ |f| dal=Marshal.load(f)} + else SiSU_DAL::Source.new(@opt).create_dal + end + end + def read_idx_sst + m=[] + m=if FileTest.file?(@idx_sst) + File.open(@idx_sst,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + def read_idx_raw + m=[] + m=if FileTest.file?(@idx_raw) + File.open(@idx_raw,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + def read_idx_html + m=[] + m=if FileTest.file?(@idx_html) + File.open(@idx_html,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + def read_idx_xhtml + m=[] + m=if FileTest.file?(@idx_xhtml) + File.open(@idx_xhtml,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + def read_map_nametags + m=[] + m=if FileTest.file?(@map_nametags) + File.open(@map_nametags,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + def read_map_ocn_htmlseg + m=[] + m=if FileTest.file?(@map_ocn_htmlseg) + File.open(@map_ocn_htmlseg,'r:utf-8'){ |f| m=Marshal.load(f)} + else nil + end + end + end + class Output + def initialize(fn,md,data) + @fn,@md,@data=fn,md,data + @cf=SiSU_Env::CreateFile.new(@fn) + @make=SiSU_Env::InfoFile.new(@fn) + @dir=SiSU_Env::InfoEnv.new(@fn) + end + def screen_dump(o) + if defined? o.of + print %{OF: #{o.of}; } + end + if defined? o.is + print %{IS: #{o.is.to_s}; } + end + if defined? o.ocn + print %{OCN: #{o.ocn}; } + end + if defined? o.node + print %{NODE: #{o.node}; } + end + if defined? o.parent + print %{Parent: #{o.parent}; } + end + if defined? o.obj and not o.obj.empty? + puts %{\n#{o.obj}; } + else "\n" + end + end + def screen_print(t_o) + if defined? t_o + print ' ' + t_o.to_s + end + end + def screen_output(data) + data.each do |o| + print o.class + screen_print(o.ocn) + screen_print(o.obj) + puts "\n" + end + end + def hard_output + if @md.opt.cmd =~/M/ + filename_meta=@cf.metaverse.file_meta + @data.each {|o| filename_meta.puts o.inspect.sub(/:0x[0-9a-f]{8}\s/,': ')} #to make diffing easier + filename_txt=@cf.metaverse.file_txt + @data.each do |o| + if defined? o.ocn + filename_txt.puts case o.is + when :heading + "[#{o.is.to_s} #{o.lv}~#{o.name} [#{o.ocn}]] #{o.obj}" + else "[#{o.is.to_s} [#{o.ocn}]] #{o.obj}" + end + else + filename_txt.puts case o.is + when :meta + "[m~#{o.tag}] #{o.obj}" + else "[#{o.is.to_s}] #{o.obj}" + end + end + end + filename_debug=@cf.file_debug + @data.each do |o| + if defined? o.ocn + case o.is + when :heading + filename_debug.puts "#{o.is.to_s} #{o.lv}~#{o.name} odv=#{o.odv} osp=#{o.osp} [#{o.ocn}] -->\n\t#{o.obj}" + end + end + end + else + hard="#{@dir.processing_path.dal}/#{@md.fns}.meta" + File.unlink(hard) if FileTest.file?(hard) + hard="#{@dir.processing_path.dal}/#{@md.fns}.txt" + File.unlink(hard) if FileTest.file?(hard) + hard="#{@dir.processing_path.dal}/#{@md.fns}.debug.txt" + File.unlink(hard) if FileTest.file?(hard) + end + end + def make_marshal_content + marshal_dal=@make.marshal.dal_content + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def make_marshal_metadata + marshal_dal=@make.marshal.dal_metadata + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def idx_html_hard_output + if @md.book_idx \ + and @md.opt.cmd =~/M/ + filename_meta=@cf.file_meta_idx_html + if @data.is_a?(Array) + @data.each {|s| p s.inspect + "\n" unless s.is_a?(String)} + @data.each {|s| filename_meta.puts s.strip + "\n" unless s.strip.empty?} + end + else + hard_idx_html="#{@dir.processing_path.dal}/#{@md.fns}.idx.html" + File.unlink(hard_idx_html) if FileTest.file?(hard_idx_html) + end + end + def make_marshal_idx_sst_html_seg + marshal_dal=@make.marshal.dal_idx_sst_rel_html_seg + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def make_marshal_idx_sst_rel + marshal_dal=@make.marshal.dal_idx_sst_rel + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def make_marshal_idx_html + marshal_dal=@make.marshal.dal_idx_html + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def make_marshal_idx_xhtml + marshal_dal=@make.marshal.dal_idx_xhtml + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Array) + end + def make_marshal_map_nametags + marshal_dal=@make.marshal.dal_map_nametags + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Hash) + end + def make_marshal_map_name_ocn_htmlseg + marshal_dal=@make.marshal.dal_map_ocn_htmlseg + File.open(marshal_dal,'w'){|f| Marshal.dump(@data,f)} if @data.is_a?(Hash) + end + end + class Make + def initialize(fn,md,data) + @fn,@md,@data=fn,md,data + @env=SiSU_Env::InfoEnv.new(@md.fns) + end + def reset + @@flag_vocab=0 + @@line_mode='' + end + def song + reset + data=@data + data=SiSU_DAL_Insertions::Insertions.new(@md,data).expand_insertions? # dal_expand_insertions.rb + data=SiSU_DAL_SubstituteAndInsert::SI.new(@md,data).substitutions_and_insertions? # dal_substitutions_and_insertions.rb + data,metadata=SiSU_DAL_DocumentStructureExtract::Build.new(@md,data).identify_parts # dal_doc_str.rb + data=SiSU_DAL_Syntax::Markup.new(@md,data).songsheet # dal_syntax.rb + data,endnote_array=SiSU_DAL_CharacterCheck::Check.new(data).character_check_and_oldstyle_endnote_array # dal_character_check.rb + data=SiSU_DAL_Images::Images.new(@md,data).images # dal_images.rb + data,tags_map,ocn_html_seg_map=SiSU_DAL_Numbering::Numbering.new(@md,data).numbering_song # dal_numbering.rb + data,book_index_rel,book_index_rel_html_seg,html_idx,xhtml_idx=SiSU_DAL_BookIndex::BookIndex.new(@md,data,@env).indexing_song if @md.book_idx # dal_idx.rb + data=SiSU_DAL_Endnotes::Endnotes.new(@md,data,endnote_array).endnotes # dal_endnotes.rb + outputdata=data + if @md.opt.cmd =~/[mM]/ + SiSU_DAL::Output.new(@fn,@md,outputdata).hard_output + SiSU_DAL::Output.new(@fn,@md,outputdata).make_marshal_content + SiSU_DAL::Output.new(@fn,@md,metadata).make_marshal_metadata + SiSU_DAL::Output.new(@fn,@md,html_idx).idx_html_hard_output + SiSU_DAL::Output.new(@fn,@md,book_index_rel_html_seg).make_marshal_idx_sst_html_seg + SiSU_DAL::Output.new(@fn,@md,book_index_rel).make_marshal_idx_sst_rel + SiSU_DAL::Output.new(@fn,@md,html_idx).make_marshal_idx_html + SiSU_DAL::Output.new(@fn,@md,xhtml_idx).make_marshal_idx_xhtml + SiSU_DAL::Output.new(@fn,@md,tags_map).make_marshal_map_nametags + SiSU_DAL::Output.new(@fn,@md,ocn_html_seg_map).make_marshal_map_name_ocn_htmlseg + end + reset + outputdata + end + protected + end +end +__END__ diff --git a/lib/sisu/v2/dal_character_check.rb b/lib/sisu/v4/dal_character_check.rb index a843f202..f20d4106 100644 --- a/lib/sisu/v2/dal_character_check.rb +++ b/lib/sisu/v4/dal_character_check.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_character_check +module SiSU_DAL_CharacterCheck class Check def initialize(data) @data=data @@ -64,37 +63,37 @@ module SiSU_character_check @endnote_array=[] end def character_check_and_oldstyle_endnote_array - require 'iconv' data=@data @tuned_file,@endnote_array=[],[] endnote_no=1 data.each do |dob| - unless dob.is =='table' - dob.obj.strip! - dob.obj.gsub!(/^[{~}]\s*$/,'') - dob.obj.gsub!(/~#\s*/,"#{Mx[:pa_non_object_no_heading]}") - dob.obj.gsub!(/-#\s*/,"#{Mx[:pa_non_object_dummy_heading]}") - dob.obj.gsub!(/(#{Mx[:en_a_o]})\s*\s+/,'\1 '); dob.obj.gsub!(/(~\{\s*)\s+/,'\1 ') - dob.obj.gsub!(/ \/\//,"#{Mx[:br_line]}") - dob.obj.gsub!(/<br>/,"#{Mx[:br_line]}") #needed by xml, xhtml etc. - dob.obj.gsub!(/\t/,' ') - dob.obj.gsub!(/\342\200\231/u,"'") #if dob =~/’/ #Avoid #‘ ’ #“ ” - dob.obj.gsub!(/�/u,' ') #watch, replace with char code - dob.obj.gsub!(/·/u,'*') - dob.obj.gsub!(/\\copy(?:right)?\b/,'©') - dob.obj.gsub!(/\\trademark\b|\\tm\b/,'®') + unless dob.is ==:table + dob.obj=dob.obj.strip. + gsub(/^[{~}]\s*$/,''). + gsub(/~#\s*/,"#{Mx[:pa_non_object_no_heading]}"). + gsub(/-#\s*/,"#{Mx[:pa_non_object_dummy_heading]}"). + gsub(/(#{Mx[:en_a_o]})\s*\s+/,'\1 '). + gsub(/(~\{\s*)\s+/,'\1 '). + gsub(/ \/\//,"#{Mx[:br_line]}"). + gsub(/<br>/,"#{Mx[:br_line]}"). #needed by xml, xhtml etc. + gsub(/\t/,' '). + gsub(/\342\200\231/u,"'"). #if dob =~/’/ #Avoid #‘ ’ #“ ” + gsub(/\\copy(?:right)?\b/,'©'). + gsub(/\\trademark\b|\\tm\b/,'®') dob.obj=dob.obj + "\n" - unless dob.is =~/^code/ + unless dob.is ==:code case dob.obj when /\^~/ #% Note must do this first (earlier loop) and then enter gathered data into ~^\d+ sub_dob=dob.obj.dup - @endnote_array << sub_dob.gsub!(/\n/,'').gsub!(/\^~\s+(.+)\s*/,%{#{Mx[:en_a_o]}#{endnote_no} \\1 #{Mx[:en_a_c]}}).strip + @endnote_array << sub_dob.gsub(/\n/,''). + gsub(/\^~\s+(.+)\s*/,%{#{Mx[:en_a_o]}#{endnote_no} \\1 #{Mx[:en_a_c]}}). + strip endnote_no+=1 dob=nil if dob.obj =~/\^~ .+/ #watch, removes 'binary' endnote now in endnote array for later insertion end end end - @tuned_file << dob unless dob.nil? + @tuned_file << dob if dob.is_a?(Object) end @tuned_file=@tuned_file.flatten.compact [@tuned_file,@endnote_array] diff --git a/lib/sisu/v4/dal_doc_objects.rb b/lib/sisu/v4/dal_doc_objects.rb new file mode 100644 index 00000000..f77348ec --- /dev/null +++ b/lib/sisu/v4/dal_doc_objects.rb @@ -0,0 +1,445 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: document abstraction + +=end +module SiSU_DAL_DocumentStructure + class Extract + def extract(h,o) + obj=h ? h : o + end + end + class ObjectMetadata + attr_accessor :is,:of,:tags,:obj,:digest + def initialize + @tags={} + @is=@tmp=@digest=nil + @of=:meta + end + def metadata(tags) + of= @of #String, classification - group + is= :meta #String, classification - specific type + tags= tags || ((defined? o.tags) ? o.tags : {}) #String, metadata type/tag + obj= nil + @of,@is,@tags,@obj=of,is,tags,obj + self + end + end + class ObjectMeta + attr_accessor :obj,:is,:of,:tag,:digest,:tmp + def initialize + @is=@obj=@tag=@digest=@digest=@tmp=nil + @of=:meta + end + def metadata(h,o=nil) + of= @of #String, classification - group + is= :meta #String, classification - specific type + tag= h[:tag] || ((defined? o.tag) ? o.tag : nil) #String, metadata type/tag + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + @of,@is,@tag,@obj,@digest,@tmp=of,is,tag,obj,digest,tmp + self + end + end + class ObjectHeading + attr_accessor :obj,:is,:tags,:of,:lv,:ln,:toc_,:name,:idx,:ocn,:odv,:osp,:node,:parent,:ocn_,:note_,:autonum_,:digest,:tmp + def initialize + @of=:para + @is=@obj=@lv=@ln=@toc_=@name=@idx=@size=@ocn=@odv=@osp=@node=@parent=@ocn_=@note_=@autonum_=@digest=@tmp=nil + @tags=[] + end + def heading_ln(lv) + ln=case lv + when /A/; 1 + when /B/; 2 + when /C/; 3 + when /1/; 4 + when /2/; 5 + when /3/; 6 + when /4/; 7 + when /5/; 8 + when /6/; 9 + end + end + def heading_lv(ln) + lv=case ln.to_s + when /1/; 'A' + when /2/; 'B' + when /3/; 'C' + when /4/; '1' + when /5/; '2' + when /6/; '3' + when /7/; '4' + when /8/; '5' + when /9/; '6' + end + end + def heading(h,o=nil) + if not h[:ln] and (h[:lv] and h[:lv]=~/[1-6A-C]/) + h[:ln]=heading_ln(h[:lv]) + elsif not h[:lv] and (h[:ln] and h[:ln].to_s=~/[1-9]/) + h[:lv]=heading_lv(h[:ln]) + end + of= @of #String, classification - group + is= :heading #String, classification - specific type + name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + node= h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + lv= h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-C then 1-6 + ln= h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 + toc_= h[:toc_] || ((defined? o.toc_) ? o.toc_ : false) #Bool, do not include in toc, (relevant to headings) + ocn_=if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + autonum_= if h[:autonum_].nil? then ((defined? o.autonum_) ? o.autonum_ : true) #Bool? auto-numbering if requested default on, false suppresses + else h[:autonum_] + end + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@lv,@ln,@name,@tags,@obj,@idx,@ocn,@odv,@osp,@node,@parent,@toc_,@ocn_,@note_,@autonum_,@digest,@tmp=of,is,lv,ln,name,tags,obj,idx,ocn,odv,osp,node,parent,toc_,ocn_,note_,autonum_,digest,tmp + self + end + def heading_insert(h,o=nil) + heading(h,o=nil) + @is= :heading_insert #String, classification - specific type + self + end + end + class ObjectPara + attr_accessor :obj,:is,:tags,:of,:name,:idx,:bullet_,:indent,:hang,:ocn,:odv,:osp,:parent,:note_,:image_,:ocn_,:digest,:tmp + def initialize + @of=:para + @is=@obj=@name=@idx=@bullet_=@indent=@hang=@size=@ocn=@odv=@osp=@parent=@note_=@image_=@ocn_=@digest=@tmp=nil + @tags=[] + end + def paragraph(h,o=nil) + of= @of #String, classification - group + is= :para #String, classification - specific type + name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + indent= h[:indent].to_s || ((defined? o.indent) ? o.indent.to_s : nil) #Integer, indent level + hang= h[:hang].to_s || ((defined? o.hang) ? o.hang.to_s : nil) #Integer, hanging indent level + bullet_=h[:bullet_] || ((defined? o.bullet_) ? o.bullet_ : false) #Bool, bulleted? + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + image_= h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) + ocn_=if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,hang,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp + self + end + def docinfo(h,o=nil) + of= @of #String, classification - group + is= :docinfo #String, classification - specific type + name= h[:name] || ((defined? o.name) ? o.name : nil) #String, named object? + tags= h[:tags] || ((defined? o.tags) ? o.tags : nil) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= nil #String, book index provided? + ocn= nil #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + indent= nil #Integer, indent level + hang= nil #Integer, indent level + bullet_=false #Bool, bulleted? + note_= false #Bool, endnotes/footnotes? (processing optimization) + image_= h[:image_] || ((defined? o.image_) ? o.image_ : false) #Bool, images? (processing optimization) + ocn_=if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@name,@tags,@obj,@indent,@hang,@bullet_,@idx,@ocn,@odv,@osp,@parent,@image_,@note_,@ocn_,@digest,@tmp=of,is,name,tags,obj,indent,hang,bullet_,idx,ocn,odv,osp,parent,image_,note_,ocn_,digest,tmp + self + end + end + class ObjectBlockTxt + attr_accessor :obj,:is,:of,:tags,:idx,:ocn,:odv,:osp,:parent,:note_,:number_,:ocn_,:digest,:tmp + def initialize + @of=:block + @is=@obj=@idx=@ocn=@odv=@osp=@parent=@note_=@number_=@ocn_=@digest=@tmp=nil + @tags=[] + end + def code(h,o=nil) + of= @of #String, classification - group #alt 'code' + is= :code #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + number_= h[:number_] || ((defined? o.number_) ? o.number_ : false) #Bool, numbered or not? + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_= if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@number_,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,number_,note_,ocn_,digest,tmp + self + end + def block(h,o=nil) + of= @of #String, classification - group + is= :block #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_= if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp + self + end + def group(h,o=nil) + of= @of #String, classification - group + is= :group #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_= if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp + self + end + def alt(h,o=nil) #see block + of= @of #String, classification - group + is= :alt #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_= if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp + self + end + def verse(h,o=nil) #part of poem decide how you deal with this + of= @of #String, classification - group + is= :verse #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + ocn_= if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp + @h=nil + self + end + end + class ObjectTable + attr_accessor :obj,:is,:of,:lv,:tags,:name,:idx,:indent,:hang,:size,:ocn,:number,:head_,:cols,:widths,:odv,:osp,:parent,:note_,:ocn_,:digest,:tmp + def initialize + @of=:block + @is=@obj=@lv=@name=@idx=@indent=@hang=@size=@ocn,@number,@head_,@cols,@widths=@odv=@osp=@parent=@note_=@ocn_=@digest=@tmp=nil + @tags=[] + end + def table(h,o=nil) + of= @of #String, classification - group + is= :table #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + cols= h[:cols] || ((defined? o.cols) ? o.cols : nil) + widths= h[:widths] || ((defined? o.widths) ? o.widths : nil) + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + head_= h[:head_] || ((defined? o.head_) ? o.head_ : false) + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_=if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@cols,@widths,@obj,@idx,@ocn,@odv,@osp,@parent,@head_,@note_,@ocn_,@digest,@tmp=of,is,tags,cols,widths,obj,idx,ocn,odv,osp,parent,head_,note_,ocn_,digest,tmp + self + end + end + class ObjectImage + attr_accessor :obj,:is,:of,:lv,:idx,:size,:ocn,:parent,:note_,:ocn_,:digest,:tmp + def initialize + @of=:image + @is=@obj=@lv=@idx=@size=@ocn=@parent=@note_=@ocn_=@tmp=@digest=nil + @tags=[] + end + def image(h,o=nil) #not yet used, and what of a paragraph containing several images, consider + of= @of #String, classification - group + is= :image #String, classification - specific type + tags= h[:tags] || ((defined? o.tags) ? o.tags : []) #Array, associated object tags, names if any + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + size= h[:size] || ((defined? o.size) ? o.size : nil) + idx= h[:idx] || ((defined? o.idx) ? o.idx : nil) #String, book index provided? + ocn= h[:ocn] || ((defined? o.ocn) ? o.ocn : nil) #Integer, sequential on substantive-content objects + odv= h[:odv] || ((defined? o.odv) ? o.odv : nil) + osp= h[:osp] || ((defined? o.osp) ? o.osp : nil) + parent= h[:parent] || ((defined? o.parent) ? o.parent : nil) #[Node parent] + note_= h[:note_] || ((defined? o.note_) ? o.note_ : false) #Bool, endnotes/footnotes? (processing optimization) + ocn_=if h[:ocn_].nil? then ((defined? o.ocn_) ? o.ocn_ : true) #Bool? no ocn, non-substantive content, do not include in toc #consider + else h[:ocn_] + end + digest= h[:digest] || ((defined? o.digest) ? o.digest : nil) #hash digests, either sha256 or md5 + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@tags,@obj,@size,@idx,@ocn,@odv,@osp,@parent,@note_,@ocn_,@digest,@tmp=of,is,tags,obj,size,idx,ocn,odv,osp,parent,note_,ocn_,digest,tmp + self + end + end + class ObjectStructure + attr_accessor :obj,:tag,:node,:lv,:ln,:status,:is,:of,:tmp + def initialize + @of=:structure + @is=@obj=@node=@lv=@ln=@status=@tmp=nil + end + def xml_dom(h,o=nil) + of= @of #String, classification - group + is= :xml_dom #String, classification - specific type + obj= h[:obj] || ((defined? o.obj) ? o.obj : '') #String, text content + lv= h[:lv] || ((defined? o.lv) ? o.lv : nil) #Alpha-numeric, document structure as used in markup, A-C then 1-6 + ln= h[:ln] || ((defined? o.ln) ? o.ln : nil) #Integer, document structure level, for convenience in processing 1-9 + node= h[:node] || ((defined? o.node) ? o.node : nil) #[Node relationship doc structure info] + status= h[:status] || ((defined? o.status) ? o.status : nil) #tag status open or close + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@obj,@status,@node,@lv,@ln,@tmp=of,is,obj,status,node,lv,ln,tmp + self + end + end + class ObjectComment + attr_accessor :obj,:is,:of,:tmp + def initialize + @of=:comment + @is=@obj=@tmp=nil + end + def comment(h,o=nil) + of= @of #String, classification - group + is= :comment #String, classification - specific type + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@obj,@tmp=of,is,obj,tmp + self + end + end + class ObjectLayout + attr_accessor :obj,:is,:of,:tmp + def initialize + @of=:layout + @is=@obj=@tmp=nil + end + def break(h,o=nil) #decide how to deal with, perhaps no obj? + of= @of #String, classification - group + is= :break #String, classification - specific type + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@obj,@tmp=of,is,obj,tmp + self + end + def insert(h,o=nil) #decide how to deal with, could mimic paragraph? + of= @of #String, classification - group + is= :insert #String, classification - specific type + obj= h[:obj] || ((defined? o.obj) ? o.obj : nil) #String, text content + tmp= h[:tmp] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use + @of,@is,@obj,@tmp=of,is,obj,tmp + self + end + end +end +__END__ +# ~# |-# no paragraph number # -# not included in toc diff --git a/lib/sisu/v4/dal_doc_str.rb b/lib/sisu/v4/dal_doc_str.rb new file mode 100644 index 00000000..012e7a33 --- /dev/null +++ b/lib/sisu/v4/dal_doc_str.rb @@ -0,0 +1,1044 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: document abstraction + +=end +module SiSU_DAL_DocumentStructureExtract + class Instantiate < SiSU_Param::Parameters::Instructions + @@flag={} #Beware!! + def initialize + @@flag['table_to']=false + @@counter=@@column=@@columns=0 + @@line_mode='' + end + end + class Build + @@flag={} #Beware!! + def initialize(md,data) + @md,@data=md,data + SiSU_DAL_DocumentStructureExtract::Instantiate.new + @pb=SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) + @pbn=SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) + end + def ln_get(lv) + ln=case lv + when /A/; 1 + when /B/; 2 + when /C/; 3 + when /1/; 4 + when /2/; 5 + when /3/; 6 + when /4/; 7 + when /5/; 8 + when /6/; 9 + end + end + def image_test(str) + boolean=(str=~/\{\s*\S+?\.png.+?\}https?:\/\/\S+/ ? true : false) + end + def bullet_test(str) + bool=((str=~/\*/) ? true : false) + end + def hang_and_indent_test(str) + hang_indent=if str=~/^_([1-9])[^_]/ + [$1,$1] + elsif str=~/^__([1-9])/ + [0,$1] + elsif str=~/^_([0-9])_([0-9])/ + [$1,$2] + else + [0,0] + end + hang,indent=hang_indent[0],hang_indent[1] + [hang,indent] + end + def hang_and_indent_def_test(str1,str2) + hang_indent=if str1=~/^_([1-9])[^_]/ + [$1,$1] + elsif str1=~/^__([1-9])/ + [0,$1] + elsif str1=~/^_([0-9])_([0-9])/ + [$1,$2] + else + [0,0] + end + obj=if str2 =~/^(.+?)\s+\\\\(?:\s+|\n)/ + str2.gsub(/^(.+?)(\s+\\\\(?:\s+|\n))/,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2") + else + str2.gsub(/^(.+?)\n/,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\n") + end + hang,indent=hang_indent[0],hang_indent[1] + [hang,indent,obj] + end + def endnote_test?(str) + bool=((str=~/~\{.+?\}~|~\[.+?\]~/) ? true : false) + end + def extract_tags(str,nametag=nil) + tags=[] + if str.nil? + else + if str =~/(?:^|[ ])\*~([a-z0-9._-]+)(?=[ #{Mx[:br_nl]}]|$)/ + str=str.gsub(/(^|[ ])\*~([a-z0-9._-]+)(?=[ #{Mx[:br_nl]}]|$)/i, + "\\1#{Mx[:tag_o]}\\2#{Mx[:tag_c]}"). + gsub(/ [ ]+/i,' ') + tags=str.scan(/#{Mx[:tag_o]}(\S+?)#{Mx[:tag_c]}/).flatten + str=str.gsub(/[ ]?#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}[ ]?/,' ') #may be issues with spaces would leave one, but "code" blocks? + end + tags=nametag ? (tags << nametag) : tags + end + [str,tags] + end + def identify_parts + data=@data + tuned_file=[] + @tuned_block,@tuned_code=[],[] + @@counter,@verse_count=0,0 + @metadata={} + @data.each do |t_o| + t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") unless @@flag['code'] + if t_o !~/^(?:code|poem|alt|group|block)\{|^\}(?:code|poem|alt|group|block)|^(?:table\{|\{table)[ ~]/ \ + and not @@flag['code'] \ + and not @@flag['poem'] \ + and not @@flag['group'] \ + and not @@flag['block'] \ + and not @@flag['alt'] \ + and not @@flag['table'] + unless t_o =~/^(?:@\S+?:|%+)\s/ # extract book index for paragraph if any + idx=if t_o=~/^=\{(.+)\}\s*$\Z/m; m=$1 + t_o=t_o.gsub(/\n=\{.+\}\s*$\Z/m,'') + m + else nil + end + end + t_o=case t_o + when /^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/ #metadata, header + if t_o=~/^#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*(.+)/m + tag,obj=$1,$2 + @metadata[tag]=obj + end + t_o=nil + when /^%+\s/ #comment + t_o=if t_o=~/^%+\s+(.+)/ + h={obj: $1} + SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + else nil + end + when /^:?([A-C1-6])\~/ #heading / lv + lv=$1 + ln=ln_get(lv) + t_o=if t_o=~/^:?[A-C1-6]\~\s+(.+)/m + obj=$1 + note=endnote_test?(obj) + obj,tags=extract_tags(obj) + h={ lv: lv, ln: ln, obj: obj, idx: idx, tags: tags } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) + elsif t_o=~/^:?[A-C1-6]\~(\S+?)-\s+(.+)/m + name,obj=$1,$2 + note=endnote_test?(obj) + obj,tags=extract_tags(obj) + h={ lv: lv, name: name, obj: obj, idx: idx, autonum_: false, tags: tags} + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) + elsif t_o=~/^:?[A-C1-6]\~(\S+)\s+(.+)/m + name,obj=$1,$2 + note=endnote_test?(obj) + obj,tags=extract_tags(obj,name) + h={ lv: lv, name: name, obj: obj, idx: idx, tags: tags } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) + else nil + end + when /^_(?:[1-9]!?|[1-9]?\*)\s+/ #indented and/or bullet paragraph + t_o=if t_o=~/^(_(?:[1-9]?\*|[1-9]!?)\s+)(.+)/m + tst,obj=$1,$2 + if t_o=~/^_[1-9]!\s+.+/m + hang,indent,obj=hang_and_indent_def_test(tst,obj) + else + hang,indent=hang_and_indent_test(tst) + end + bullet=bullet_test(tst) + image=image_test(obj) + note=endnote_test?(obj) + obj,tags=extract_tags(obj) + unless obj=~/\A\s*\Z/m + h={ bullet_: bullet, hang: hang, indent: indent, obj: obj, idx: idx, note_: note, image_: image, tags: tags } + SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) + end + else nil + end + when /^_[0-9]?_[0-9]!?\s+/ #hanging indent paragraph + t_o=if t_o=~/^(_[0-9]?_[0-9]!?\s+)(.+)/m + tst,obj=$1,$2 + if t_o=~/^_[0-9]?_[0-9]!\s+.+/m + hang,indent,obj=hang_and_indent_def_test(tst,obj) + else + hang,indent=hang_and_indent_test(tst) + end + image=image_test(obj) + note=endnote_test?(obj) + obj,tags=extract_tags(obj) + unless obj=~/\A\s*\Z/m + h={ hang: hang, indent: indent, obj: obj, idx: idx, note_: note, image_: image, tags: tags } + SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) + end + else nil + end + when /^<(?:br)?:(?:pa?r|o(?:bj|---)?)>\s*$/ #[br:par] #[br:obj] + SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_obj]) + when /^(?:-\\\\-|<:pb>)\s*$/ #[br:pg] + SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) + when /^(?:=\\\\=|<:pn>)\s*$/ #[br:pgn] + SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) + else #paragraph + image=image_test(t_o) + note=endnote_test?(t_o) + obj,tags=extract_tags(t_o) + unless obj=~/\A\s*\Z/m + h={ bullet_: false, indent: 0, hang: 0, obj: obj, idx: idx, note_: note, image_: image, tags: tags } + SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) + end + end + elsif not @@flag['code'] + if t_o =~/^code\{/ + @@flag['code']=true + @@counter=1 + @codeblock_numbered=(t_o =~/^code\{#/) ? true : false + h={ obj: 'code block start' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + elsif t_o =~/^poem\{/ + @@flag['poem']=true + h={ obj: 'poem start' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + tuned_file << t_o + elsif t_o =~/^group\{/ + @@flag['group']=true + h={ obj: 'group text start' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + tuned_file << t_o + elsif t_o =~/^block\{/ + @@flag['block']=true + h={ obj: 'block text start' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + tuned_file << t_o + elsif t_o =~/^alt\{/ + @@flag['alt']=true + h={ obj: 'alt text start' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + tuned_file << t_o + elsif t_o =~/^(?:table\{|\{table)[ ~]/ + h={ obj: 'table start' } #introduce a counter + ins=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #ins=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + tuned_file << ins + if t_o=~/^table\{(?:~h)?\s+/ + @@flag['table']=true + @rows='' + case t_o + when /table\{~h\s+c(\d+);\s+(.+)/ + cols=$1 + col=$2.scan(/\d+/) + heading=true + when /table\{\s+c(\d+);\s+(.+)/ + cols=$1 + col=$2.scan(/\d+/) + heading=false + end + @h={ head_: heading, cols: cols, widths: col, idx: idx } + elsif t_o=~/^\{table(?:~h)?(?:\s+\d+;?)?\}\n.+\Z/m + m1,m2,hd=nil,nil,nil + tbl=/^\{table(?:~h)?(?:\s+\d+;?)?\}\n(.+)\Z/m.match(t_o)[1] #two table representations should be consolidated as one + hd=((t_o =~/^\{table~h/) ? true : false) + tbl,tags=extract_tags(tbl) + rws=tbl.split(/\n/) + rows='' + cols=nil + rws.each do |r| + cols=(cols ? cols : (r.scan('|').length) +1) + r=r.gsub(/\s*\|\s*/m,"#{Mx[:tc_p]}") #r.gsub!(/\|/m,"#{Mx[:tc_p]}") + rows += r + Mx[:tc_c] + end + col=[] + if t_o =~/^\{table(?:~h)?\s+(\d+);?\}/ #width of col 1 given as %, usually when wider than rest that are even + c1=$1.to_i + width=(100 - c1)/(cols - 1) + col=[ c1 ] + (cols - 1).times { col << width } + else #all columns of equal width + width=100.00/cols + cols.times { col << width } + end + h={ head_: hd, cols: cols, widths: col, obj: rows, idx: idx, tags: tags } + t_o=SiSU_DAL_DocumentStructure::ObjectTable.new.table(h) unless h.nil? + tuned_file << t_o + h={ obj: 'table end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + t_o + elsif t_o=~/^\{table(?:~h)?\s+/ + m1,m2,hd=nil,nil,nil + h=case t_o + when /\{table~h\s+(.+?)\}\n(.+)\Z/m #two table representations should be consolidated as one + m1,tbl,hd=$1,$2,true + when /\{table\s+(.+?)\}\n(.+)\Z/m #two table representations should be consolidated as one + m1,tbl,hd=$1,$2,false + else nil + end + tbl,tags=extract_tags(tbl) + col=m1.scan(/\d+/) + rws=tbl.split(/\n/) + rows='' + rws.each do |r| + r=r.gsub(/\s*\|\s*/m,"#{Mx[:tc_p]}") #r.gsub!(/\|/m,"#{Mx[:tc_p]}") + rows += r + Mx[:tc_c] + end + h={ head_: hd, cols: col.length, widths: col, obj: rows, idx: idx, tags: tags } + t_o=SiSU_DAL_DocumentStructure::ObjectTable.new.table(h) unless h.nil? + tuned_file << t_o + h={ obj: 'table end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) + t_o + end + end + t_o + end + if @@flag['table'] + if @@flag['table'] \ + and t_o =~/^\}table/ #two table representations should be consolidated as one + @@flag['table']=false + headings,columns,widths,idx=@h[:head_],@h[:cols],@h[:widths],@h[:idx] + @h={ head_: headings, cols: columns, widths: widths, idx: idx, obj: @rows } + t_o=SiSU_DAL_DocumentStructure::ObjectTable.new.table(@h) + tuned_file << t_o + @h,@rows=nil,'' + t_o + h={ obj: 'table end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + t_o + else + if t_o.is_a?(String) \ + and t_o !~/^table\{/ + t_o=t_o.gsub(/^\n+/m,''). #check added for ruby 1.9.2 not needed in 1.8 series (tested in v2) + gsub(/\n+/m,"#{Mx[:tc_p]}") + @rows += t_o + Mx[:tc_c] + end + t_o=nil + end + end + if @@flag['code'] + if t_o =~/^\}code/ + @@flag['code']=false + obj=@tuned_code.join("\n") + tags=[] + h={ obj: obj, tags: tags, number_: @codeblock_numbered } + t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.code(h) + @tuned_code=[] + tuned_file << t_o + h={ obj: 'code block end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + end + if @@flag['code'] \ + and t_o.is_a?(String) + sub_array=t_o.dup + "#{Mx[:br_nl]}" + @line_mode=sub_array.scan(/.+/) + @line_mode=[] + sub_array.scan(/.+/) {|w| @line_mode << w if w =~/[\S]+/} + t_o=SiSU_DAL_DocumentStructureExtract::Build.new(@md,@line_mode).build_lines('code').join + @tuned_code << t_o + t_o=nil + end + elsif @@flag['poem'] \ + or @@flag['group'] \ + or @@flag['block'] \ + or @@flag['alt'] + if @@flag['poem'] \ + and t_o =~/^\}poem/ + @@flag['poem']=false + h={ obj: 'poem end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + elsif ( @@flag['group'] \ + and t_o =~/^\}group/ ) + @@flag['group']=false + obj,tags=extract_tags(@tuned_block.join("\n")) + h={ obj: obj, tags: tags } + @tuned_block=[] + t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.group(h) + tuned_file << t_o + h={ obj: 'group text end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + elsif ( @@flag['block'] \ + and t_o =~/^\}block/ ) + @@flag['block']=false + obj,tags=extract_tags(@tuned_block.join("\n")) + h={ obj: obj, tags: tags } + @tuned_block=[] + t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.block(h) + tuned_file << t_o + h={ obj: 'block text end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + elsif ( @@flag['alt'] \ + and t_o =~/^\}alt/ ) + @@flag['alt']=false + obj,tags=extract_tags(@tuned_block.join("\n")) + h={ obj: obj, tags: tags } + t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.alt(h) + @tuned_block=[] + tuned_file << t_o + h={ obj: 'alt text end' } #introduce a counter + t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h) #t_o=SiSU_DAL_DocumentStructure::ObjectLayout.new.insert(h) + end + if @@flag['poem'] \ + or @@flag['group'] \ + or @@flag['alt'] \ + and t_o =~/\S/ \ + and t_o !~/^(?:\}(?:verse|code|alt|group|block)|(?:verse|code|alt|group|block)\{)/ # fix logic + sub_array=t_o.dup + @line_mode=sub_array.scan(/.+/) + type=if @@flag['poem']; 'poem' + t_o=SiSU_DAL_DocumentStructureExtract::Build.new(@md,@line_mode).build_lines(type).join + poem=t_o.split(/\n\n/) + poem.each do |v| + v=v.gsub(/\n/m,"#{Mx[:br_nl]}\n") + obj,tags=extract_tags(v) + h={ obj: obj, tags: tags } + t_o=SiSU_DAL_DocumentStructure::ObjectBlockTxt.new.verse(h) + tuned_file << t_o + end + else 'group' + end + @verse_count+=1 if @@flag['poem'] + end + end + if not @@flag['code'] + if @@flag['poem'] \ + or @@flag['group'] \ + or @@flag['alt'] + if t_o.is_a?(String) + t_o=t_o.gsub(/\n/m,"#{Mx[:br_nl]}"). + gsub(/[ ][ ]/m,"#{Mx[:nbsp]*2}"). + gsub(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") + t_o=t_o + Mx[:br_nl] if t_o =~/\S+/ + elsif t_o.is==:group \ + || t_o.is==:block \ + || t_o.is==:alt \ + || t_o.is==:verse + t_o.obj=t_o.obj.gsub(/\n/m,"#{Mx[:br_nl]}"). + gsub(/[ ][ ]/m,"#{Mx[:nbsp]*2}"). + gsub(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") + end + @tuned_block << t_o if t_o =~/\S+/ + else tuned_file << t_o + end + else tuned_file << t_o + end + end + if @md.flag_endnotes + tuned_file << @pb + h={ ln: 2, obj: 'Endnotes', autonum_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ ln: 4, obj: 'Endnotes', name: 'endnotes', autonum_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ obj: 'Endnotes' } + end + if @md.book_idx + tuned_file << @pb + h={ ln: 2, obj: 'Index', autonum_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ ln: 4, obj: 'Index', name: 'book_index', autonum_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ obj: 'Index' } + end + tuned_file << @pb + h={ ln: 2, obj: 'Metadata', autonum_: false, ocn_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + h={ ln: 4, obj: 'SiSU Metadata, document information', name: 'metadata', autonum_: false, ocn_: false } + tuned_file << SiSU_DAL_DocumentStructure::ObjectHeading.new.heading_insert(h) + tuned_file + h={ obj: 'eof' } + meta=SiSU_DAL_DocumentStructure::ObjectMetadata.new.metadata(@metadata) + [tuned_file,meta] + end + def table_rows_and_columns_array(table_str) + table=[] + table_str.split(/#{Mx[:tc_c]}/).each do |table_row| + table_row_with_columns=table_row.split(/#{Mx[:tc_p]}/) + table << table_row_with_columns + end + table + end + def meta_heading(h) + h={ lv: h[:lv], ln: h[:ln], name: h[:name], obj: h[:obj], ocn: '0' } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) + end + def meta_para(str) + h={ obj: str, ocn_: false } + SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) + end + def build_lines(type='') + lines,lines_new=@data,[] + lines.each do |line| + line=if line =~/\S/ \ + and line !~/^code\{|^\}code/ \ + and not line.is_a?(Hash) + @@counter+=1 if @@flag['code'] + line=line.gsub(/\s\s/,"#{Mx[:nbsp]*2}"). + gsub(/#{Mx[:nbsp]}\s/,"#{Mx[:nbsp]*2}") + line=line.gsub(/^/,"#{Mx[:gr_o]}codeline#{Mx[:gr_c]}") if type=='code' # REMOVE try sort for texpdf special case + line=if line =~/(?:https?|file|ftp):\/\/\S+$/ + line.gsub(/\s*$/," #{Mx[:br_nl]}") + else line.gsub(/\s*$/,"#{Mx[:br_nl]}") #unless type=='code' + end + elsif line =~/^\s*$/ + line.gsub(/\s*$/,"#{Mx[:br_nl]}") + else line + end + lines_new << line + end + lines_new + end + end + class Structure # this must happen early + def initialize(md,dob) + @md,@dob=md,dob + end + def structure + structure_markup_normalize + structure_markup + @dob + end + def structure_markup #build structure where structure provided only in meta header + @dob=if @dob.is ==:para \ + && (((@dob.hang !~/[1-9]/) && (@dob.indent !~/[1-9]/)) \ + || (@dob.hang != @dob.indent)) \ + and not @dob.bullet_ + @dob=case @dob.obj + when /^#{@md.lv1}/ + h={ lv: 'A', ln: 1 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + when /^#{@md.lv2}/ + h={ lv: 'B', ln: 2 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + when /^#{@md.lv3}/ + h={ lv: 'C', ln: 3 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + when /^#{@md.lv4}/ + h={ lv: '1', ln: 4 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + when /^#{@md.lv5}/ + h={ lv: '2', ln: 5 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + when /^#{@md.lv6}/ + h={ lv: '3', ln: 6 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,@dob) + else @dob + end + else @dob + end + @dob + end + def structure_markup_normalize #needs a bit of thinking + dob=if @md.markup_version.determined < 0.38 #%convert internal representation, consider making 0.38 structure default ([A-C1-6] instead of [1-9]), requires downstream changes + @dob=@dob.gsub(/^[456]~/,'!_'). + gsub(/^3~(\S+)/,"#{Mx[:lv_o]}6:\\1#{Mx[:lv_c]}"). + gsub(/^3~\s+/,"#{Mx[:lv_o]}6:#{Mx[:lv_c]}"). + gsub(/^2~(\S+)/,"#{Mx[:lv_o]}5:\\1#{Mx[:lv_c]}"). + gsub(/^2~\s+/,"#{Mx[:lv_o]}5:#{Mx[:lv_c]}"). + gsub(/^1~(\S+)/,"#{Mx[:lv_o]}4:\\1#{Mx[:lv_c]}"). + gsub(/^1~\s+/,"#{Mx[:lv_o]}4:#{Mx[:lv_c]}"). + gsub(/^:?C~(\S+)/,"#{Mx[:lv_o]}3:\\1#{Mx[:lv_c]}"). + gsub(/^:?C~\s+/,"#{Mx[:lv_o]}3:#{Mx[:lv_c]}"). + gsub(/^:?B~(\S+)/,"#{Mx[:lv_o]}2:\\1#{Mx[:lv_c]}"). + gsub(/^:?B~\s+/,"#{Mx[:lv_o]}2:#{Mx[:lv_c]}"). + gsub(/^:?A~(\S+)/,"#{Mx[:lv_o]}1:\\1#{Mx[:lv_c]}"). + gsub(/^:?A~\s+/,"#{Mx[:lv_o]}1:#{Mx[:lv_c]}") + @dob=if @dob =~/^@(?:level|markup):\s/ + @dob=@dob.gsub(/3/,'6'). + gsub(/2/,'5'). + gsub(/1/,'4'). + gsub(/:?C/,'3'). + gsub(/:?B/,'2'). + gsub(/:?A/,'1') + @dob + else @dob + end + else @dob + end + end + def structure_marks + t_o=if @md.markup_version.determined < 0.38 + @t_o=@t_o.gsub(/^1~(\S+)/,"#{Mx[:lv_o]}1:\\1#{Mx[:lv_c]}"). + gsub(/^1~\s+/,"#{Mx[:lv_o]}1:#{Mx[:lv_c]}"). + gsub(/^2~(\S+)/,"#{Mx[:lv_o]}2:\\1#{Mx[:lv_c]}"). + gsub(/^2~\s+/,"#{Mx[:lv_o]}2:#{Mx[:lv_c]}"). + gsub(/^3~(\S+)/,"#{Mx[:lv_o]}3:\\1#{Mx[:lv_c]}"). + gsub(/^3~\s+/,"#{Mx[:lv_o]}3:#{Mx[:lv_c]}"). + gsub(/^4~(\S+)/,"#{Mx[:lv_o]}4:\\1#{Mx[:lv_c]}"). + gsub(/^4~\s+/,"#{Mx[:lv_o]}4:#{Mx[:lv_c]}"). + gsub(/^5~(\S+)/,"#{Mx[:lv_o]}5:\\1#{Mx[:lv_c]}"). + gsub(/^5~\s+/,"#{Mx[:lv_o]}5:#{Mx[:lv_c]}"). + gsub(/^6~(\S+)/,"#{Mx[:lv_o]}6:\\1#{Mx[:lv_c]}"). + gsub(/^6~\s+/,"#{Mx[:lv_o]}6:#{Mx[:lv_c]}"). + gsub(/^[789]~/,'!_') + @t_o + else @t_o + end + end + end + class OCN + def initialize(md,data) + @md,@data=md,data + end + def ocn #and auto segment numbering increment + data=@data + @o_array=[] + node=ocn=ocn_dv=ocn_sp=ocnh=ocnh1=ocnh2=ocnh3=ocnh4=ocnh5=ocnh6=ocno=ocnp=ocnt=ocnc=ocng=ocni=ocnm=ocnu=ocnk=nm=0 # h heading, o other, t table, g group, i image + node_count_flag=false + regex_exclude_ocn_and_node = /#{Rx[:meta]}|^@\S+?:\s|^4~endnotes|^#{Mx[:lv_o]}4:endnotes#{Mx[:lv_c]}|^\^~ |<:e[:_]\d+?>|^<:\#|<:- |<[:!]!4|<hr width|#{Mx[:br_endnotes]}|\A\s*\Z/mi #ocn here # added with Tune.code #¡ + parent=node1=node2=node3=node4=node5=node6=nil + data.each do |dob| + h={} + if (dob.obj !~ regex_exclude_ocn_and_node || dob.is ==:code) \ + && (dob.of !=:comment \ + && dob.of !=:layout \ + && dob.of !=:meta) \ + && dob.obj !~/#{Mx[:pa_non_object_no_heading]}|#{Mx[:pa_non_object_dummy_heading]}/ \ + && dob.ocn_ + #dob.ln now is determined, and set earlier, check how best to remove this --> + if dob.is==:heading + ln=case dob.lv + when 'A'; 1 + when 'B'; 2 + when 'C'; 3 + when '1'; 4 + when '2'; 5 + when '3'; 6 + when '4'; 7 + when '5'; 8 + when '6'; 9 + end + end + if not dob.obj =~/<:#>|~#|-#/ \ + or not dob.toc_ # fix this no longer in dob.obj + ocn+=1 + if dob.is==:heading \ + and (ln.to_s =~/^[1-9]/ \ + or ln.to_s =~@md.lv1 \ + or ln.to_s =~@md.lv2 \ + or ln.to_s =~@md.lv3 \ + or ln.to_s =~@md.lv4 \ + or ln.to_s =~@md.lv5 \ + or ln.to_s =~@md.lv6) + ocnh+=1 + if ln==1 \ + or ln=~@md.lv1; ocnh1+=1 #heading + node1="1:#{ocnh1};#{ocn}" + node,ocn_sp,parent=node1,"h#{ocnh}",0 #FIX + elsif ln==2 \ + or ln=~@md.lv2; ocnh2+=1 + node2="2:#{ocnh2};#{ocn}" + node,ocn_sp,parent=node2,"h#{ocnh}",node1 + elsif ln==3 \ + or ln=~@md.lv3; ocnh3+=1 + node3="3:#{ocnh3};#{ocn}" + node,ocn_sp,parent=node3,"h#{ocnh}",node2 + elsif ln==4 \ + or ln=~@md.lv4; ocnh4+=1 + node4="4:#{ocnh4};#{ocn}" + node,ocn_sp,parent=node4,"h#{ocnh}",node3 + elsif ln==5 \ + or ln=~@md.lv5; ocnh5+=1 + node5="5:#{ocnh5};#{ocn}" + node,ocn_sp,parent=node5,"h#{ocnh}",node4 + elsif ln==6 \ + or ln=~@md.lv6; ocnh6+=1 + node6="6:#{ocnh6};#{ocn}" + node,ocn_sp,parent=node6,"h#{ocnh}",node5 + end + else + ocno+=1 + if dob.is==:table + ocnt+=1 + ocn_sp,parent="t#{ocnt}",node + elsif dob.is==:code + ocnc+=1 + ocn_sp,parent="c#{ocnc}",node + elsif dob.is==:group \ + || dob.is==:block \ + || dob.is==:alt \ + || dob.is==:verse + ocng+=1 #group, poem + ocn_sp,parent="g#{ocng}",node + elsif dob.is==:image #check + ocni+=1 + ocn_sp,parent="i#{ocni}",node + else ocnp+=1 #paragraph + ocn_sp,parent="p#{ocnp}",node + end + end + if dob.is==:heading + dob.ln,dob.node,dob.ocn,dob.odv,dob.osp,dob.parent=ln,node,ocn,ocn_dv,ocn_sp,parent + else + if dob.of !=:meta \ + && dob.of !=:comment \ + && dob.of !=:layout + dob.ocn,dob.odv,dob.osp,dob.parent=ocn,ocn_dv,ocn_sp,parent + end + end + else ocnu+=1 + dob.obj=dob.obj.gsub(/#{Mx[:fa_o]}~##{Mx[:fa_c]}/,'') if dob.obj + ocn_dv,ocn_sp="u#{ocnu}","u#{ocnu}" + dob.ocn,dob.odv,dob.osp=ocn,ocn_dv,ocn_sp + end + h + elsif dob.obj=~/#{Mx[:pa_non_object_no_heading]}/ + dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_no_heading]}/,'') + if dob.is==:para + h={ obj: dob.obj, ocn_: false, ocn: nil } + dob=SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h,dob) + elsif dob.is==:heading + h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: true } + dob=SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,dob) + end + elsif dob.obj=~/#{Mx[:pa_non_object_dummy_heading]}/ + dob.obj=dob.obj.gsub(/#{Mx[:pa_non_object_dummy_heading]}/,'') + if dob.is==:para + h={ obj: dob.obj, ocn_: false, ocn: nil } + dob=SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h,dob) + elsif dob.is==:heading + h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: false } + dob=SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h,dob) + end + else dob + end + if dob.is==:code \ + || dob.is==:verse \ + || dob.is==:alt \ + || dob.is==:group \ + || dob.is==:block + dob.obj=dob.obj.gsub(/\n\n/,"\n") #newlines taken out + end + @o_array << dob + end + @o_array + end + end + class XML + def initialize(md,data) + @data,@md=data,md + end + def dom + @s=['0', + 'A', + 'B', + 'C', + '1', + '2', + '3' + ] + @sp=' ' + tuned_file=structure_build + tuned_file + end + def structure_build + data=@data + tuned_file=[] + hs=[0,false,false,false] + t={ lv: @s[0], status: 'open' } + tuned_file << tags(t) + if @md.opt.cmd =~/V/ + puts "\nXML sisu structure outline --->\n" + puts "<#{@s[0]}>" + end + data.each_with_index do |o,i| + if o.is ==:heading \ + || o.is ==:heading_insert + case o.ln + when 1 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs=[1,true,false,false] + when 2 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs=[2,true,true,false] + when 3 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs=[3,true,true,true] + when 4 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs[0]=4 + when 5 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs[0]=5 + when 6 + tuned_file << tag_close(o.ln,hs) + tuned_file << tag_open(o,@s) + if @md.opt.cmd =~/V/ + puts_tag_close(o.ln,hs) + puts_tag_open(o,@s) + end + hs[0]=6 + end + end + tuned_file << o + end + puts_tag_close(0,hs) if @md.opt.cmd =~/V/ + tuned_file << tag_close(0,hs) + tuned_file=tuned_file.flatten + end + def tags(o) + tag=(o[:status]=='open') \ + ? %{<#{o[:lv]} id="#{o[:node]}">} + : "</#{o[:lv]}>" + ln=case o[:lv] + when 'A'; 1 + when 'B'; 2 + when 'C'; 3 + when '1'; 4 + when '2'; 5 + when '3'; 6 + when '4'; 7 + when '5'; 8 + when '6'; 9 + end + h={ tag: tag, node: o[:node], lv: o[:lv], ln: ln, status: o[:status] } + SiSU_DAL_DocumentStructure::ObjectStructure.new.xml_dom(h) #downstream code utilise else ignore like comments + end + def tag_open(o,tag) + t={ lv: tag[o.ln], node: o.node, status: 'open' } + t_o=tags(t) + t_o + end + def tag_close(lev,hs) + ary=[] + case hs[0] + when 1 + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + when 2 + if (lev <= 2) and hs[2] + t={ lv: @s[2], status: 'close' } + ary << tags(t) + end + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + when 3 + if (lev <= 3) and hs[3] + t={ lv: @s[3], status: 'close' } + ary << tags(t) + end + if (lev <= 2) and hs[2] + t={ lv: @s[2], status: 'close' } + ary << tags(t) + end + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + when 4 + if (lev <= 4) + t={ lv: @s[4], status: 'close' } + ary << tags(t) + end + if (lev <= 3) and hs[3] + t={ lv: @s[3], status: 'close' } + ary << tags(t) + end + if (lev <= 2) and hs[2] + t={ lv: @s[2], status: 'close' } + ary << tags(t) + end + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + when 5 + if (lev <= 5) + t={ lv: @s[5], status: 'close' } + ary << tags(t) + end + if (lev <= 4) + t={ lv: @s[4], status: 'close' } + ary << tags(t) + end + if (lev <= 3) and hs[3] + t={ lv: @s[3], status: 'close' } + ary << tags(t) + end + if (lev <= 2) and hs[2] + t={ lv: @s[2], status: 'close' } + ary << tags(t) + end + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + when 6 + if (lev <= 6) + t={ lv: @s[6], status: 'close' } + ary << tags(t) + end + if (lev <= 5) + t={ lv: @s[5], status: 'close' } + ary << tags(t) + end + if (lev <= 4) + t={ lv: @s[4], status: 'close' } + ary << tags(t) + end + if (lev <= 3) and hs[3] + t={ lv: @s[3], status: 'close' } + ary << tags(t) + end + if (lev <= 2) and hs[2] + t={ lv: @s[2], status: 'close' } + ary << tags(t) + end + if (lev <= 1) and hs[1] + t={ lv: @s[1], status: 'close' } + ary << tags(t) + end + if (lev==0) + t={ lv: @s[0], status: 'close' } + ary << tags(t) + end + end + ary + end + def puts_tag_open(o,tag) + puts %{#{@sp*o.ln}<#{tag[o.ln]} id="#{o.node}">} + end + def puts_tag_close(lev,hs) + case hs[0] + when 1 + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + when 2 + puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + when 3 + puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] + puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + when 4 + puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) + puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] + puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + when 5 + puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5) + puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) + puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] + puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + when 6 + puts "#{@sp*6}</#{@s[6]}>" if (lev <= 6) + puts "#{@sp*5}</#{@s[5]}>" if (lev <= 5) + puts "#{@sp*4}</#{@s[4]}>" if (lev <= 4) + puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and hs[3] + puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and hs[2] + puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and hs[1] + puts "</#{@s[0]}>" if (lev==0) + end + end + end +end +__END__ diff --git a/lib/sisu/v2/dal_endnotes.rb b/lib/sisu/v4/dal_endnotes.rb index 95176516..4ef6f3ae 100644 --- a/lib/sisu/v2/dal_endnotes.rb +++ b/lib/sisu/v4/dal_endnotes.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_endnotes +module SiSU_DAL_Endnotes class Endnotes def initialize(md,data,endnote_array=nil) @md,@data,@endnote_array=md,data,endnote_array @@ -68,18 +67,18 @@ module SiSU_endnotes endnote_no,endnote_ref=1,1 data.each do |dob| # manually numbered endnotes <!e(\d)!> <!e_(\d)!> --> - if @md.mod.inspect =~/--no-asterisk|--no-annotate/ - dob.obj.gsub!(/#{Mx[:en_b_o]}\s.+?#{Mx[:en_b_c]}/,'') + if @md.opt.mod.inspect =~/--no-asterisk|--no-annotate/ + dob.obj=dob.obj.gsub(/#{Mx[:en_b_o]}\s.+?#{Mx[:en_b_c]}/,'') end - if @md.mod.inspect =~/--no-dagger|--no-annotate/ - dob.obj.gsub!(/#{Mx[:en_b_o]}[+]\s.+?#{Mx[:en_b_c]}/,'') + if @md.opt.mod.inspect =~/--no-dagger|--no-annotate/ + dob.obj=dob.obj.gsub(/#{Mx[:en_b_o]}[+]\s.+?#{Mx[:en_b_c]}/,'') end - if defined? dob.obj \ - and defined? dob.is \ - and dob.is !~/^code/ + if (defined? dob.obj) \ + && (defined? dob.is) \ + && dob.is !=:code case dob.obj # auto-numbered endnotes <!e!> <!e_!> --> when /#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}[*+]\s+.+?#{Mx[:en_b_c]}/ - dob.obj.gsub!(/\s*(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/,' \1') # required 2003w31 + dob.obj=dob.obj.gsub(/\s*(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/,' \1') # required 2003w31 word_mode=dob.obj.scan(/\S+/m) word_mode=endnote_call_number(word_mode) dob.obj=word_mode.join(' ') diff --git a/lib/sisu/v4/dal_expand_insertions.rb b/lib/sisu/v4/dal_expand_insertions.rb new file mode 100644 index 00000000..2ec4945f --- /dev/null +++ b/lib/sisu/v4/dal_expand_insertions.rb @@ -0,0 +1,378 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +module SiSU_DAL_Insertions + class Insertions + def initialize(md,data) + @md,@data=md,data + end + def output_filetypes_in_cmd(cmd_shortcut,lnk=nil) #make list of file types in shortcut command (as configured), e.g. when sisu -3 is used + cf_defaults=SiSU_Env::InfoProcessingFlag.new + cmd_list=case cmd_shortcut.inspect + when /0/; cf_defaults.cf_0 + when /1/; cf_defaults.cf_1 + when /2/; cf_defaults.cf_2 + when /3/; cf_defaults.cf_3 + when /4/; cf_defaults.cf_4 + when /5/; cf_defaults.cf_5 + end + file_type_names={} + file_type_names[:gen],file_type_names[:src]=[],[] + file_type_names[:gen] <<= if cmd_list =~ /y/ then "~^ { document manifest }#{lnk[:manifest]}" + end + file_type_names[:gen] <<= if cmd_list =~ /h/ then [" { html, segmented text }#{lnk[:html_toc]}"," { html, scroll, document in one }#{lnk[:html_doc]}"] + end + file_type_names[:gen] <<= if cmd_list =~ /e/ then [" { epub }#{lnk[:epub]}"] + end + file_type_names[:gen] <<= if cmd_list =~ /p/ then [" { pdf, landscape }#{lnk[:pdf_landscape]}"," { pdf, portrait }#{lnk[:pdf_portrait]}"] + end + file_type_names[:gen] <<= if cmd_list =~ /o/ then " { odf:odt, open document text }#{lnk[:odt]}" + end + file_type_names[:gen] <<= if cmd_list =~ /b/ then " { xhtml scroll }#{lnk[:xhtml]}" + end + file_type_names[:gen] <<= if cmd_list =~ /x/ then " { xml, sax }#{lnk[:xml_sax]}" + end + file_type_names[:gen] <<= if cmd_list =~ /X/ then " { xml, dom }#{lnk[:xml_dom]}" + end + file_type_names[:gen] <<= if cmd_list =~ /a/ then " { plain text utf-8 }#{lnk[:txt]}" + end + file_type_names[:gen] <<= if cmd_list =~ /g/ then 'wiki.txt' + end + file_type_names[:gen] <<= if cmd_list =~ /w/ then " { concordance }#{lnk[:html_concordance]}" + end + file_type_names[:gen] <<= if cmd_list =~ /N/ then " { dcc, document content certificate (digests) }#{lnk[:digest]}" + end + file_type_names[:src] <<= if source and cmd_shortcut =~ /s/ then " { markup source text }#{lnk[:source]}" + end + file_type_names[:src] <<= if cmd_shortcut =~ /S/ then " { markup source (zipped) pod }#{lnk[:sisupod]}" + end + file_type_names[:gen]=file_type_names[:gen].flatten + file_type_names[:src]=file_type_names[:src].flatten + file_type_names + end + def by_language(linked_doc,lng,src=nil) + @linked_doc,@lng,@src=linked_doc,lng,src + @base_path="#{@md.file.output_path.base.url}/#{@lng}" + def manifest + "#{@base_path}/manifest/#{@linked_doc}.html" + end + def html_toc + "#{@base_path}/html/#{@linked_doc}.html" + end + def html_doc + "#{@base_path}/html/#{@linked_doc}.html" + end + def html_concordance + "#{@base_path}/html/#{@linked_doc}.html" + end + def epub + "#{@base_path}/epub/#{@linked_doc}.epub" + end + def pdf_landscape + "#{@base_path}/pdf/#{@linked_doc}.pdf" + end + def pdf_portrait + "#{@base_path}/pdf/#{@linked_doc}.pdf" + end + def odt + "#{@base_path}/odt/#{@linked_doc}.odt" + end + def xhtml + "#{@base_path}/xhtml/#{@linked_doc}.xhtml" + end + def xml_sax + "#{@base_path}/xml/#{@linked_doc}.xml" + end + def xml_dom + "#{@base_path}/xml/#{@linked_doc}.xml" + end + def txt + "#{@base_path}/txt/#{@linked_doc}.txt" + end + def digest + "#{@base_path}/digest/#{@linked_doc}.txt" + end + def source + "#{@base_path}/src/#{@src}" + end + def sisupod + "#{@base_path}/pod/#{@src}.zip" + end + self + end + def by_filetype(linked_doc,lng,src=nil) + @linked_doc,@lng,@src=linked_doc,lng,src + @base_path="#{@md.file.output_path.base.url}" + def manifest + "#{@base_path}/manifest/#{@linked_doc}.#{@lng}.html" + end + def html_toc + "#{@base_path}/html/#{@linked_doc}.#{@lng}.html" + end + def html_doc + "#{@base_path}/html/#{@linked_doc}.#{@lng}.html" + end + def html_concordance + "#{@base_path}/html/#{@linked_doc}.#{@lng}.html" + end + def epub + "#{@base_path}/epub/#{@linked_doc}.#{@lng}.epub" + end + def pdf_landscape + "#{@base_path}/pdf/#{@linked_doc}.#{@lng}.pdf" + end + def pdf_portrait + "#{@base_path}/pdf/#{@linked_doc}.#{@lng}.pdf" + end + def odt + "#{@base_path}/odt/#{@linked_doc}.#{@lng}.odt" + end + def xhtml + "#{@base_path}/xhtml/#{@linked_doc}.#{@lng}.xhtml" + end + def xml_sax + "#{@base_path}/xml_sax/#{@linked_doc}.#{@lng}.xml" + end + def xml_dom + "#{@base_path}/xml_dom/#{@linked_doc}.#{@lng}.xml" + end + def txt + "#{@base_path}/txt/#{@linked_doc}.#{@lng}.txt" + end + def digest + "#{@base_path}/digest/#{@linked_doc}.#{@lng}.txt" + end + def source + "#{@base_path}/src/#{@src}" + end + def sisupod + "#{@base_path}/pod/#{@src}.zip" + end + self + end + def by_filename(linked_doc,lng,src=nil) + @linked_doc,@lng,@src=linked_doc,lng,src + @base_path="#{@md.file.output_path.base.url}/#{@linked_doc}" + def manifest + "#{@base_path}/sisu_manifest.#{@lng}.html" + end + def html_toc + "#{@base_path}/toc.#{@lng}.html" + end + def html_doc + "#{@base_path}/scroll.#{@lng}.html" + end + def html_concordance + "#{@base_path}/concordance.#{@lng}.html" + end + def epub + "#{@base_path}/epub/#{@linked_doc}.#{@lng}.epub" + end + def pdf_landscape + "#{@base_path}/landscape.#{@lng}.a4.pdf" + end + def pdf_portrait + "#{@base_path}/portrait.#{@lng}.a4.pdf" + end + def odt + "#{@base_path}/opendocument.#{@lng}.odt" + end + def xhtml + "#{@base_path}/scroll.#{@lng}.xhtml" + end + def xml_sax + "#{@base_path}/scroll.#{@lng}.sax.xml" + end + def xml_dom + "#{@base_path}/scroll.#{@lng}.dom.xml" + end + def txt + "#{@base_path}/plain.#{@lng}.txt" + end + def digest + "#{@base_path}/digest.#{@lng}.txt" + end + def source + "#{@base_path}/#{@src}" + end + def sisupod + "#{@base_path}/#{@src}.zip" + end + self + end + def expand_insertions? + data=@data + tuned_file,tuned_file_tmp=[],[] + codeblock_=false + data.each do |para| + codeblock_=if para =~/^code\{/ + true + elsif para =~/^\}code/ + false + else codeblock_ + end + if para !~/^%+\s/ \ + and not codeblock_ \ + and para =~/\{(?:~\^\s+)?(.+?)\s\[(?:\d(?:[sS]*))\]\}(?:\.\.\/\S+?\/|\S+?\.ss[tm]\b)/ + txt,cmd,source,linked_doc,note,manifest=nil,nil,nil,nil,nil,nil + @u=SiSU_Env::InfoEnv.new.url + pre=txt=cmd=source=linked_doc=note='' + if defined? @u.remote + if /(?<pre>.+?)\{(?<txt>.+?)\s\[(?<cmd>\d[sS]*)\]\}(?<source>(?<linked_doc>\S+?)\.ss[tm]\b)(?<note>.*)/m =~ para + pre=pre.strip + elsif /\{(?<txt>.+?)\s\[(?<cmd>\d[sS]*)\]\}(?<source>(?<linked_doc>\S+?)\.ss[tm]\b)(?<note>.*)/m =~ para + end + if linked_doc =~ /(\S+?)\/(\S+)/ + linked_doc,linked_doc_lang=$1,$2 + else + linked_doc,linked_doc_lang=linked_doc,@md.opt.lng_base + end + else + puts "error, does currently support relative paths (reltive paths were removed, as had problems for citation, and was not suited to all output types should possibly reconsider) #{__FILE__} #{__LINE__}" + if /\{(?:~\^\s+)?(?<txt>.+?)\s\[(?<cmd>\d[sS]*)\]\}\.\.\/(?<linked_doc>\S+?)\/(?<note>\s+#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]})?/ =~ para + end + end + lnk={} + case @md.opt.dir_structure_by + when :language + lnk={ + manifest: by_language(linked_doc,linked_doc_lang).manifest, + html_toc: by_language(linked_doc,linked_doc_lang).html_toc, + html_doc: by_language(linked_doc,linked_doc_lang).html_doc, + epub: by_language(linked_doc,linked_doc_lang).epub, + pdf_landscape: by_language(linked_doc,linked_doc_lang).pdf_landscape, + pdf_portrait: by_language(linked_doc,linked_doc_lang).pdf_landscape, + odt: by_language(linked_doc,linked_doc_lang).odt, + xhtml: by_language(linked_doc,linked_doc_lang).xhtml, + xml_sax: by_language(linked_doc,linked_doc_lang).xml_sax, + xml_dom: by_language(linked_doc,linked_doc_lang).xml_dom, + txt: by_language(linked_doc,linked_doc_lang).txt, + html_concordance: by_language(linked_doc,linked_doc_lang).html_concordance, + digest: by_language(linked_doc,linked_doc_lang).digest, + sisupod: by_language(linked_doc,linked_doc_lang,source).sisupod, + source: by_language(linked_doc,linked_doc_lang,source).source, + } + when :filetype + lnk={ + manifest: by_filetype(linked_doc,linked_doc_lang).manifest, + html_toc: by_filetype(linked_doc,linked_doc_lang).html_toc, + html_doc: by_filetype(linked_doc,linked_doc_lang).html_doc, + epub: by_filetype(linked_doc,linked_doc_lang).epub, + pdf_landscape: by_filetype(linked_doc,linked_doc_lang).pdf_landscape, + pdf_portrait: by_filetype(linked_doc,linked_doc_lang).pdf_landscape, + odt: by_filetype(linked_doc,linked_doc_lang).odt, + xhtml: by_filetype(linked_doc,linked_doc_lang).xhtml, + xml_sax: by_filetype(linked_doc,linked_doc_lang).xml_sax, + xml_dom: by_filetype(linked_doc,linked_doc_lang).xml_dom, + txt: by_filetype(linked_doc,linked_doc_lang).txt, + html_concordance: by_filetype(linked_doc,linked_doc_lang).html_concordance, + digest: by_filetype(linked_doc,linked_doc_lang).digest, + sisupod: by_filetype(linked_doc,linked_doc_lang,source).sisupod, + source: by_filetype(linked_doc,linked_doc_lang,source).source, + } + else + lnk={ + manifest: by_filename(linked_doc,linked_doc_lang).manifest, + html_toc: by_filename(linked_doc,linked_doc_lang).html_toc, + html_doc: by_filename(linked_doc,linked_doc_lang).html_doc, + epub: by_filename(linked_doc,linked_doc_lang).epub, + pdf_landscape: by_filename(linked_doc,linked_doc_lang).pdf_landscape, + pdf_portrait: by_filename(linked_doc,linked_doc_lang).pdf_landscape, + odt: by_filename(linked_doc,linked_doc_lang).odt, + xhtml: by_filename(linked_doc,linked_doc_lang).xhtml, + xml_sax: by_filename(linked_doc,linked_doc_lang).xml_sax, + xml_dom: by_filename(linked_doc,linked_doc_lang).xml_dom, + txt: by_filename(linked_doc,linked_doc_lang).txt, + html_concordance: by_filename(linked_doc,linked_doc_lang).html_concordance, + digest: by_filename(linked_doc,linked_doc_lang).digest, + sisupod: by_filename(linked_doc,linked_doc_lang,source).sisupod, + source: by_filename(linked_doc,linked_doc_lang,source).source, + } + end + linked_title="#{pre}{#{txt} }#{lnk[:manifest]}#{note}\n\n" + tuned_file_tmp << linked_title + output_filetypes=output_filetypes_in_cmd(cmd,lnk) + output_filetypes[:gen].each do |o_f| + describe = o_f + if describe + tuned_file_tmp << if @u.remote #to double space <:br> at beginning of entry + "#{Mx[:nbsp]*4} #{describe} " + else # remove ... + "[provide document placement host location]" + end + end + end + output_filetypes[:src].each do |o_f| + describe = o_f + if describe + tuned_file_tmp << if @u.remote + "#{Mx[:nbsp]*4} #{describe} " + else + "[provide document placement host location]" + end + end + end + tuned_file << 'group{' << tuned_file_tmp.join("\n") << '}group' + tuned_file_tmp=[] + else tuned_file << para + end + end + tuned_file + end + end +end +__END__ diff --git a/lib/sisu/v2/dal_hash_digest.rb b/lib/sisu/v4/dal_hash_digest.rb index a78c54f1..8718c461 100644 --- a/lib/sisu/v2/dal_hash_digest.rb +++ b/lib/sisu/v4/dal_hash_digest.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,29 +55,30 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_hash - require "#{SiSU_lib}/shared_markup_alt.rb" #shared_markup_alt.rb - class Object_digest +module SiSU_DAL_Hash + require_relative 'shared_markup_alt.rb' #shared_markup_alt.rb + class ObjectDigest def initialize(md,data,env=nil) @md,@data,@env=md,data,env - @env ||=SiSU_Env::Info_env.new(@md.fns) + @env ||=SiSU_Env::InfoEnv.new(@md.fns) end def object_digest # 1. clean/stripped text without any markup, paragraph, headings etc. without endnotes # 2. endnotes clean/stripped text digest only (there may be several endnotes within a paragraph) # 3. whole object, text with markup and any endnotes, (question: with or without the endnote digests??? presumption better without, [however may be easier to check with?]) # [digests should not include other digests] - data=@data + data=@data.compact @tuned_file=[] - data.compact! sha_ =(@env.digest.type=='sha256' ? true : false) sha_ ? (require 'digest/sha2') : (require 'digest/md5') data.each do |t_o| - unless t_o.obj.class==Array - t_o.obj.strip! + unless t_o.obj.is_a?(Array) + t_o.obj=t_o.obj.strip end - if t_o.of !~/structure|comment|layout/ \ - and t_o.ocn.class==Fixnum + if (t_o.of !=:structure \ + && t_o.of !=:comment \ + && t_o.of !=:layout) \ + && t_o.ocn.is_a?(Fixnum) if sha_ for hash_class in [ Digest::SHA256 ] @tuned_file << stamped(t_o,hash_class) @@ -101,14 +101,14 @@ module SiSU_hash when /#{Mx[:en_a_o]}|#{Mx[:en_b_o]}/ if en_plus =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/ t_o_txt,en_open,en_txt,en_close=/(.*?)(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m.match(en_plus)[1..4] - stripped_en=SiSU_text_representation::Alter.new(en_txt).strip_clean_of_markup + stripped_en=SiSU_TextRepresentation::Alter.new(en_txt).strip_clean_of_markup digest_en_strip=if @env.digest.type =~/sha256/ Digest::SHA256.hexdigest(stripped_en) else Digest::MD5.hexdigest(stripped_en) end t_o_txt + en_open + en_txt + Mx[:id_o] + digest_en_strip + Mx[:id_c] + en_close - else puts "Error Exception - problem encountered with:\n#{en_plus}" #arbitrary exception, tidy up + else STDERR.puts "Error Exception - problem encountered with:\n#{en_plus}" #arbitrary exception, tidy up end else en_plus end @@ -116,16 +116,16 @@ module SiSU_hash t_o_bit.join end def stamped(t_o,hash_class) #decide what hash information is most useful, is compromise necessary? - t_o.obj=SiSU_text_representation::Alter.new(t_o).strip_clean_of_extra_spaces + t_o.obj=SiSU_TextRepresentation::Alter.new(t_o).strip_clean_of_extra_spaces t_obj=t_o.inspect.sub(/:0x[0-9a-f]{8}\s/,': ') - stripped=SiSU_text_representation::Alter.new(t_o).strip_clean_of_markup - markup=SiSU_text_representation::Alter.new(t_o).semi_revert_markup - digests=SiSU_text_representation::Modified_text_plus_Hash_digest.new(@md,t_o).composite.dgst - unless t_o.is=='code' + stripped=SiSU_TextRepresentation::Alter.new(t_o).strip_clean_of_markup + markup=SiSU_TextRepresentation::Alter.new(t_o).semi_revert_markup + digests=SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst + unless t_o.is==:code case t_o.obj when /#{Mx[:en_a_o]}[\d*+]+\s+.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}[*+]\d+\s+.+?#{Mx[:en_b_c]}/m en_and_t_o,en_and_t_o_digest=[],[] - t_o.obj.gsub!(/\s*(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,' \1') #watch + t_o.obj=t_o.obj.gsub(/\s*(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,' \1') #watch t_o_plus_en=t_o.obj.scan(/.*?#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|.*?#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/m) t_o_tail=if t_o.obj =~/(?:.*?#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|.*?#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})+([\s\S]+)/m /(?:.*?#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|.*?#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})+.*/m.match(t_o.obj)[1] @@ -144,11 +144,11 @@ module SiSU_hash def strip_clean_extra_spaces(s) # dal output tuned s=s.dup s=s.gsub(/[ ]+([,.;:?](?:$|\s))/,'\1') unless s =~/#{Mx[:en_a_o]}|#{Mx[:en_b_o]}/ - s=s.gsub(/ [ ]+/,' ') - s=s.gsub(/^ [ ]+/,'') - s=s.gsub(/ [ ]+$/,'') - s=s.gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') - s=s.gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') + s=s.gsub(/ [ ]+/,' '). + gsub(/^ [ ]+/,''). + gsub(/ [ ]+$/,''). + gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2'). + gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') end end end diff --git a/lib/sisu/v2/dal_idx.rb b/lib/sisu/v4/dal_idx.rb index 7c00be3c..db4ba9c1 100644 --- a/lib/sisu/v2/dal_idx.rb +++ b/lib/sisu/v4/dal_idx.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,14 +55,14 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_book_index - class Book_index +module SiSU_DAL_BookIndex + class BookIndex def initialize(md,data,env=nil) @md,@data,@env=md,data,env @rgx_idx=/#{Mx[:idx_o]}(?:.+?)#{Mx[:idx_c]}\s*/ @rgx_idx_ocn_seg=/(.+?)~(\d+)~(\S+)/ @rgx_idx_ocn=/(.+?)~(\d+)/ - @env ||=SiSU_Env::Info_env.new(@md.fns) + @env ||=SiSU_Env::InfoEnv.new(@md.fns) end def indexing_song data=@data @@ -75,11 +74,16 @@ module SiSU_book_index tuned_file=[] idx_array=[] data.each do |dob| - if dob.is =~/heading/ \ - and dob.ln==4 + if (dob.is ==:heading \ + || dob.is ==:heading_insert) \ + && dob.ln==4 @seg=dob.name end - idx_array << "#{dob.idx}~#{dob.ocn}~#{@seg}" if defined? dob.idx and not (dob.idx.nil? or dob.idx.empty?) + if defined? dob.idx \ + and dob.idx.is_a?(String) \ + and not dob.idx.empty? + idx_array << "#{dob.idx}~#{dob.ocn}~#{@seg}" + end tuned_file << dob if dob end idx_array=construct_idx_array(idx_array) if idx_array.length > 0 @@ -101,48 +105,54 @@ module SiSU_book_index g=idx_list.scan(/[^;]+/) idxl=[] g.each do |i| - i.strip! - idxl << { :rough_idx => i, :ocn => ocn, :seg => seg } + i=i.strip + idxl << { rough_idx: i, ocn: ocn, seg: seg } end idxl - else { :rough_idx => idx_list, :ocn => ocn, :seg => seg } + else { rough_idx: idx_list, ocn: ocn, seg: seg } end end - idx_lst.flatten! - idx_lst + idx_lst=idx_lst.flatten end def construct_book_index(idx_array) the_idx={} idx_array.each do |idx| - idx_lst=idx[:rough_idx].scan(/[^|:]+/) - idx_lst[0].strip! - if idx_lst[0] =~/.+?\+\d+/ - use,plus=/(.+?)\+(\d+)/.match(idx_lst[0])[1,2] - else use=idx_lst[0] - end - use=use[0].chr.capitalize + use[1,use.length] - the_idx[use]={} unless the_idx[use] and defined? the_idx[use] - idx_lst.each do |i| - i.strip! - i,r=/(.+?)\+(\d+)/.match(i)[1,2] if i =~/.+?\+\d+/ - x=if idx_lst.length==1 or idx_lst[0].gsub(/\+\d+/,'')==i - the_idx[use]['term_node_lev1']=[] unless the_idx[use]['term_node_lev1'] and defined? the_idx[use]['term_node_lev1'] - x=if r - the_idx[use]['term_node_lev1'] << { :ocn => idx[:ocn], :range => "#{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}", :seg => idx[:seg] } - "#{i} #{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}" - else - the_idx[use]['term_node_lev1'] << { :ocn => idx[:ocn], :seg => idx[:seg] } - "#{i} #{idx[:ocn]}" - end - else - the_idx[use]['term_node_lev2']={} unless the_idx[use]['term_node_lev2'] and defined? the_idx[use]['term_node_lev2'] - the_idx[use]['term_node_lev2'][i]=[] unless the_idx[use]['term_node_lev2'][i] and defined? the_idx[use]['term_node_lev2'][i] - x=if r - the_idx[use]['term_node_lev2'][i] << { :ocn => idx[:ocn], :range => "#{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}", :seg => idx[:seg] } - "#{idx_lst[0]}:#{i} #{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}" + if idx[:rough_idx] =~/[|]/ \ + && idx[:rough_idx] !~/[:]/ + if @md.opt.cmd =~/[MVv]/ + p 'book index error? --> ' + idx[:rough_idx] + end + else + idx_lst=idx[:rough_idx].scan(/[^|:]+/) + idx_lst[0]=idx_lst[0].strip + if idx_lst[0] =~/.+?\+\d+/ + use,plus=/(.+?)\+(\d+)/.match(idx_lst[0])[1,2] + else use=idx_lst[0] + end + use=use[0].chr.capitalize + use[1,use.length] + the_idx[use]={} unless the_idx[use] and defined? the_idx[use] + idx_lst.each do |i| + i=i.strip + i,r=/(.+?)\+(\d+)/.match(i)[1,2] if i =~/.+?\+\d+/ + x=if idx_lst.length==1 or idx_lst[0].gsub(/\+\d+/,'')==i + the_idx[use]['term_node_lev1']=[] unless the_idx[use]['term_node_lev1'] and defined? the_idx[use]['term_node_lev1'] + x=if r + the_idx[use]['term_node_lev1'] << { ocn: idx[:ocn], range: "#{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}", seg: idx[:seg] } + "#{i} #{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}" + else + the_idx[use]['term_node_lev1'] << { ocn: idx[:ocn], seg: idx[:seg] } + "#{i} #{idx[:ocn]}" + end else - the_idx[use]['term_node_lev2'][i] << { :ocn => idx[:ocn], :seg => idx[:seg] } - "#{idx_lst[0]}:#{i} #{idx[:ocn]}" + the_idx[use]['term_node_lev2']={} unless the_idx[use]['term_node_lev2'] and defined? the_idx[use]['term_node_lev2'] + the_idx[use]['term_node_lev2'][i]=[] unless the_idx[use]['term_node_lev2'][i] and defined? the_idx[use]['term_node_lev2'][i] + x=if r + the_idx[use]['term_node_lev2'][i] << { ocn: idx[:ocn], range: "#{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}", seg: idx[:seg] } + "#{idx_lst[0]}:#{i} #{idx[:ocn]}-#{idx[:ocn].to_i+r.to_i}" + else + the_idx[use]['term_node_lev2'][i] << { ocn: idx[:ocn], seg: idx[:seg] } + "#{idx_lst[0]}:#{i} #{idx[:ocn]}" + end end end end @@ -151,28 +161,28 @@ module SiSU_book_index the_idx end def clean_xml(str) - str.gsub!(/&/,'&') - str.gsub!(/\(/,'(') - str.gsub!(/\)/,')') - str.gsub!(/\*/,'*') - str.gsub!(/\+/,'+') - str.gsub!(/,/,',') + str=str.gsub(/&/,'&'). + gsub(/\(/,'('). + gsub(/\)/,')'). + gsub(/\*/,'*'). + gsub(/\+/,'+'). + gsub(/,/,',') str end def index(the_idx) @x=1 idx={} idx[:sst_rel_html_seg],idx[:sst_rel],idx[:html],idx[:xhtml]=[],[],[],[] - h={:obj=>Mx[:br_page]} - o=SiSU_document_structure::Object_layout.new.break(h) + h={obj: Mx[:br_page]} + o=SiSU_DAL_DocumentStructure::ObjectLayout.new.break(h) idx[:sst_rel_html_seg] << o idx[:sst_rel] << o - h={:lv=>'2',:name=>'index',:obj=>"Index"} - o=SiSU_document_structure::Object_heading.new.heading(h) + h={lv: '2', name: 'index', obj: "Index"} + o=SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) idx[:sst_rel_html_seg] << o idx[:sst_rel] << o - h={:lv=>'4',:name=>'idx',:obj=>" [Index] #{Mx[:pa_non_object_dummy_heading]}"} - o=SiSU_document_structure::Object_heading.new.heading(h) + h={lv: '4', name: 'idx', obj: " [Index] #{Mx[:pa_non_object_dummy_heading]}"} + o=SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) idx[:sst_rel_html_seg] << o idx[:sst_rel] << o alph=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] @@ -194,7 +204,7 @@ module SiSU_book_index idx[:xhtml] << %{\n<p class="letter" id="numeral">0 - 9</p>} the_idx.each do |i| i.each do |x| - if x.class==String + if x.is_a?(String) f=/^(\S)/.match(x)[1] if letter < f while letter < f @@ -216,25 +226,25 @@ module SiSU_book_index @t=idx[:sst_rel].index(idx[:sst_rel].last) @q=idx[:html].index(idx[:html].last) @r=idx[:xhtml].index(idx[:xhtml].last) - print "\n" + x + ', ' if @md.cmd =~/V/ - elsif x.class==Array + print "\n" + x + ', ' if @md.opt.cmd =~/V/ + elsif x.is_a?(Array) p 'array error? -->' print x - elsif x.class==Hash - if x['term_node_lev1'].class==Array + elsif x.is_a?(Hash) + if x['term_node_lev1'].is_a?(Array) x['term_node_lev1'].each do |a| if a[:range] idx[:sst_rel_html_seg][@o]=idx[:sst_rel_html_seg][@o] + %{#{Mx[:lnk_o]}#{a[:range]}#{Mx[:lnk_c]}#{Mx[:rel_o]}/#{a[:seg]}.html##{a[:ocn]}#{Mx[:rel_c]}, } idx[:sst_rel][@t]=idx[:sst_rel][@t] + %{#{Mx[:lnk_o]}#{a[:range]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{a[:ocn]}#{Mx[:rel_c]}, } idx[:html][@q]=idx[:html][@q] + %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:range]}</a>, } idx[:xhtml][@q]=idx[:xhtml][@q] + %{<a href="#{a[:seg]}.xhtml#o#{a[:ocn]}">#{a[:range]}</a>, } - print a[:range] + ', ' if @md.cmd =~/V/ + print a[:range] + ', ' if @md.opt.cmd =~/V/ elsif a[:ocn] idx[:sst_rel_html_seg][@o]=idx[:sst_rel_html_seg][@o] + %{#{Mx[:lnk_o]}#{a[:ocn]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{a[:seg]}.html##{a[:ocn]}#{Mx[:rel_c]}, } idx[:sst_rel][@t]=idx[:sst_rel][@t] + %{#{Mx[:lnk_o]}#{a[:ocn]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{a[:ocn]}#{Mx[:rel_c]}, } idx[:html][@q]=idx[:html][@q] + %{<a href="#{a[:seg]}.html##{a[:ocn]}">#{a[:ocn]}</a>, } idx[:xhtml][@q]=idx[:xhtml][@q] + %{<a href="#{a[:seg]}.xhtml#o#{a[:ocn]}">#{a[:ocn]}</a>, } - print a[:ocn] + ', ' if @md.cmd =~/V/ + print a[:ocn] + ', ' if @md.opt.cmd =~/V/ else p 'error' end end @@ -251,20 +261,20 @@ module SiSU_book_index idx[:html][@q]=idx[:html][@q] + %{\n<p class="book_index_lev2">#{k}, } c=clean_xml(k.dup) idx[:xhtml][@r]=idx[:xhtml][@r] + %{\n<p class="book_index_lev2">#{c}, } - print "\n\t" + k + ', ' if @md.cmd =~/V/ + print "\n\t" + k + ', ' if @md.opt.cmd =~/V/ y.each do |z| if z[:range] idx[:sst_rel_html_seg][@o]=idx[:sst_rel_html_seg][@o] + %{#{Mx[:lnk_o]}#{z[:range]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{z[:seg]}.html##{z[:ocn]}#{Mx[:rel_c]}, } idx[:sst_rel][@t]=idx[:sst_rel][@t] + %{#{Mx[:lnk_o]}#{z[:range]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{z[:ocn]}#{Mx[:rel_c]}, } idx[:html][@q]=idx[:html][@q] + %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:range]}</a>, } idx[:xhtml][@q]=idx[:xhtml][@q] + %{<a href="#{z[:seg]}.xhtml#o#{z[:ocn]}">#{z[:range]}</a>, } - print z[:range] + ', ' if @md.cmd =~/V/ + print z[:range] + ', ' if @md.opt.cmd =~/V/ elsif z[:ocn] idx[:sst_rel_html_seg][@o]=idx[:sst_rel_html_seg][@o] + %{#{Mx[:lnk_o]}#{z[:ocn]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{z[:seg]}.html##{z[:ocn]}#{Mx[:rel_c]}, } idx[:sst_rel][@t]=idx[:sst_rel][@t] + %{#{Mx[:lnk_o]}#{z[:ocn]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{z[:ocn]}#{Mx[:rel_c]}, } idx[:html][@q]=idx[:html][@q] + %{<a href="#{z[:seg]}.html##{z[:ocn]}">#{z[:ocn]}</a>, } idx[:xhtml][@q]=idx[:xhtml][@q] + %{<a href="#{z[:seg]}.xhtml#o#{z[:ocn]}">#{z[:ocn]}</a>, } - print z[:ocn] + ', ' if @md.cmd =~/V/ + print z[:ocn] + ', ' if @md.opt.cmd =~/V/ else p 'error' end end @@ -278,19 +288,19 @@ module SiSU_book_index end end end - print "\n" if @md.cmd =~/V/ + print "\n" if @md.opt.cmd =~/V/ idx end def screen_print(the_idx) the_idx.each do |i| i.each do |x| - if x.class==String + if x.is_a?(String) print "\n" + x + ', ' - elsif x.class==Array + elsif x.is_a?(Array) p 'array error? -->' print x - elsif x.class==Hash - if x['term_node_lev1'].class==Array + elsif x.is_a?(Hash) + if x['term_node_lev1'].is_a?(Array) x['term_node_lev1'].each do |a| if a[:range] print a[:range] + ', ' @@ -347,7 +357,7 @@ module SiSU_book_index def clean_index(data) #check on use of dob tuned_file=[] data.each do |para| - para.gsub!(/\n*#{@rgx_idx}/m,'') + para=para.gsub(/\n*#{@rgx_idx}/m,'') tuned_file << para end tuned_file diff --git a/lib/sisu/v2/dal_images.rb b/lib/sisu/v4/dal_images.rb index 2f9eb79d..9c6dd872 100644 --- a/lib/sisu/v2/dal_images.rb +++ b/lib/sisu/v4/dal_images.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_images +module SiSU_DAL_Images class Images #require 'RMagick' #include Magick @@ -67,7 +66,7 @@ module SiSU_images data=@data tuned_file=[] @rmgk=false - imagemagick_=SiSU_Env::Info_settings.new.program?('rmagick') + imagemagick_=true #imagemagick_=SiSU_Env::InfoSettings.new.program?('rmagick') if imagemagick_ begin @rmgk=SiSU_Env::Load.new('RMagick').prog @@ -75,13 +74,13 @@ module SiSU_images @rmgk=false end else - if @md.cmd =~/[vVM]/ - SiSU_Screen::Ansi.new(@md.cmd,'use of RMagick is not enabled in sisurc.yml').warn + if @md.opt.cmd =~/[vVM]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'*WARN* use of RMagick is not enabled in sisurc.yml').warn end end data.each do |dob| - unless dob.is =~/^table/ - dob.obj.strip! + unless dob.is ==:table + dob.obj=dob.obj.strip if dob.obj =~/#{Mx[:lnk_o]}\s*\S+\.(?:png|jpg|gif)(?:\s*|\s+.+)?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ if dob.obj !~/#{Mx[:lnk_o]}\s*\S+\.(?:png|jpg|gif)\s+\d+x\d+/ m=/#{Mx[:lnk_o]}\s*(\S+\.(?:png|jpg|gif))/ @@ -89,8 +88,8 @@ module SiSU_images imgs=dob.obj.scan(m).flatten img_col=img_row=nil images=imgs.each do |image| - dir=SiSU_Env::Info_env.new(@md.fns) - path_image=[dir.path.image_source_local_tex,dir.path.image_source_remote_tex,dir.path.image_source_tex] + dir=SiSU_Env::InfoEnv.new(@md.fns) + path_image=[dir.path.image_source_include_local,dir.path.image_source_include_remote,dir.path.image_source_include] image_path=nil path_image.each do |img_pth| image_path=img_pth @@ -101,11 +100,11 @@ module SiSU_images img=Magick::ImageList.new("#{image_path}/#{image}") img_col,img_row=img.columns,img.rows else - if @md.cmd =~/[vVM]/ - SiSU_Screen::Ansi.new(@md.cmd,'RMagick not present, will attempt to use imagemagick (identify) directly').warn + if @md.opt.cmd =~/[vVM]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'*WARN* RMagick not present, will attempt to use imagemagick (identify) directly').warn end - imgk=SiSU_Env::System_call.new.imagemagick - gmgk=SiSU_Env::System_call.new.graphicksmagick + imgk=SiSU_Env::SystemCall.new.imagemagick + gmgk=SiSU_Env::SystemCall.new.graphicksmagick if imgk or gmgk if imgk imgsys=`identify #{image_path}/#{image}`.strip #system call @@ -133,18 +132,20 @@ module SiSU_images img_col=((1.00*img_row/row)*col).round end end - dob.obj.gsub!(/(#{image})/,"#{image} #{img_col}x#{img_row}") - else dob.obj.gsub!(/#{Mx[:lnk_o]}\s*(\S+)\.(png|jpg|gif).+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,'[ \1 (\2 missing) ]') + dob.obj=dob.obj.gsub(/(#{image})/,"#{image} #{img_col}x#{img_row}") + else dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}\s*(\S+)\.(png|jpg|gif).+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,'[ \1 (\2 missing) ]') end end else images=dob.obj.scan(m) do |image| - SiSU_Screen::Ansi.new(@md.cmd,'where image dimensions have not been provided RMagick or imagemagick is required',image).warn #unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'*WARN* where image dimensions have not been provided RMagick or imagemagick is required',image).warn #unless @opt.cmd =~/q/ end end end end - dob.obj.gsub!(/(#{Mx[:lnk_o]})\s*(\S+\.(?:png|jpg|gif))\s+/i,'\1\2 ') if dob.obj =~/#{Mx[:lnk_o]}\s*\S+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ + if dob.obj =~/#{Mx[:lnk_o]}\s*\S+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ + dob.obj=dob.obj.gsub(/(#{Mx[:lnk_o]})\s*(\S+\.(?:png|jpg|gif))\s+/i,'\1\2 ') + end end tuned_file << dob unless dob.nil? end diff --git a/lib/sisu/v2/dal_metadata.rb b/lib/sisu/v4/dal_metadata.rb index 77b58f86..cfdf9606 100644 --- a/lib/sisu/v2/dal_metadata.rb +++ b/lib/sisu/v4/dal_metadata.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,21 +55,21 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_metadata +module SiSU_DAL_Metadata class Metadata def initialize(md,metad) @md,@metadata=md,metad - l=SiSU_Env::Standardise_language.new.file_to_language(md.fns) - language=l[:l] + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + language=l[:n] @tr=SiSU_Translate::Source.new(md,language) end def make_para(obj,ocn) - h={:obj=>obj,:ocn=>0} - SiSU_document_structure::Object_para.new.paragraph(h) + h={ obj: obj, ocn: 0 } + SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h) end def make_heading(obj,ocn,name,lv,ln) - h={:lv=>lv,:ln=>ln,:name=>name,:obj=>obj,:ocn=>0} - SiSU_document_structure::Object_heading.new.heading(h) + h={ lv: lv, ln: ln, name: name, obj: obj, ocn: 0 } + SiSU_DAL_DocumentStructure::ObjectHeading.new.heading(h) end def metadata end diff --git a/lib/sisu/v2/dal_numbering.rb b/lib/sisu/v4/dal_numbering.rb index c052db29..f81563f3 100644 --- a/lib/sisu/v2/dal_numbering.rb +++ b/lib/sisu/v4/dal_numbering.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_numbering +module SiSU_DAL_Numbering class Numbering attr_accessor :obj,:osp,:ocn,:lv,:name,:index,:comment def initialize(md,data) @@ -77,12 +76,15 @@ module SiSU_numbering def number_plaintext_para(data) @tuned_file=[] data.each do |dob| - if dob.of !~/(?:group|comment|layout)/ and dob.ocn_ #and dob.obj !~ /#{Mx[:gr_o]}Th|#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}/ #FIX - dob.obj.gsub!(/(.+)\n/,'\1 ') #messy, but idea is that tables should retain breaks + if (dob.of !=:block \ + && dob.of !=:comment \ + && dob.of !=:layout) \ + && dob.ocn_ #and dob.obj !~ /#{Mx[:gr_o]}Th|#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}/ #FIX + dob.obj=dob.obj.gsub(/(.+)\n/,'\1 ') #messy, but idea is that tables should retain breaks end - unless dob.obj.class==Array - dob.obj.gsub!(/^\s+/,'') - dob.obj.gsub!(/\s$/,"\n") + unless dob.obj.is_a?(Array) + dob.obj=dob.obj.gsub(/^\s+/,''). + gsub(/\s$/,"\n") end @tuned_file << dob end @@ -90,37 +92,35 @@ module SiSU_numbering end def number_sub_heading(dob,num,title_no) unless dob.obj =~/\d+\.|(?:chapter|article|section|clause)\s+\d+/i #name selection arbitrary, fix - case dob.name - when /-/; dob.obj.gsub!(/^/,"#{title_no} ") - when /^#/; dob.obj.gsub!(/^/,"#{title_no} ") - when /^[a-z_\.]+/ - dob.obj.gsub!(/^/,"#{title_no} ") + dob.obj=case dob.name + when /-/; dob.obj.gsub(/^/,"#{title_no} ") + when /^#/; dob.obj.gsub(/^/,"#{title_no} ") + when /^[a-z_\.]+/; dob.obj.gsub(/^/,"#{title_no} ") else dob.name=title_no if dob.name=~/^$/ #where title contains title number - dob.obj.gsub!(/^/,"#{title_no} ") if title_no =~/\d+/ #main, where title number is to be provided #watch changed placement + dob.obj.gsub(/^/,"#{title_no} ") if title_no =~/\d+/ #main, where title number is to be provided #watch changed placement end if @md.toc_lev_limit \ and @md.toc_lev_limit < num - dob.obj.gsub!(/^/,'!_ ') #bold line, watch + dob.obj=dob.obj.gsub(/^/,'!_ ') #bold line, watch end end dob end def heading_tag_clean(heading_tag) - heading_tag.gsub!(/[ ]+/,'_') - heading_tag.gsub!(/["']/,'') - heading_tag.gsub!(/[\/]/,'-') - heading_tag.gsub!(/#{Mx[:fa_bold_o]}|#{Mx[:fa_bold_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_italics_o]}|#{Mx[:fa_italics_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_underscore_o]}|#{Mx[:fa_underscore_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_cite_o]}|#{Mx[:fa_cite_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_insert_o]}|#{Mx[:fa_insert_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_strike_o]}|#{Mx[:fa_strike_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_superscript_o]}|#{Mx[:fa_superscript_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_subscript_o]}|#{Mx[:fa_subscript_c]}/,'') - heading_tag.gsub!(/#{Mx[:fa_hilite_o]}|#{Mx[:fa_hilite_c]}/,'') - heading_tag.gsub!(/#{Mx[:gl_bullet]}/,'') - heading_tag + heading_tag=heading_tag.gsub(/[ ]+/,'_'). + gsub(/["']/,''). + gsub(/[\/]/,'-'). + gsub(/#{Mx[:fa_bold_o]}|#{Mx[:fa_bold_c]}/,''). + gsub(/#{Mx[:fa_italics_o]}|#{Mx[:fa_italics_c]}/,''). + gsub(/#{Mx[:fa_underscore_o]}|#{Mx[:fa_underscore_c]}/,''). + gsub(/#{Mx[:fa_cite_o]}|#{Mx[:fa_cite_c]}/,''). + gsub(/#{Mx[:fa_insert_o]}|#{Mx[:fa_insert_c]}/,''). + gsub(/#{Mx[:fa_strike_o]}|#{Mx[:fa_strike_c]}/,''). + gsub(/#{Mx[:fa_superscript_o]}|#{Mx[:fa_superscript_c]}/,''). + gsub(/#{Mx[:fa_subscript_o]}|#{Mx[:fa_subscript_c]}/,''). + gsub(/#{Mx[:fa_hilite_o]}|#{Mx[:fa_hilite_c]}/,''). + gsub(/#{Mx[:gl_bullet]}/,'') end def auto_number_heading_ie_title(data) #also does some segment naming @tuned_file=[] @@ -135,20 +135,20 @@ module SiSU_numbering no1=num_top; no2=(num_top + 1); no3=(num_top + 2); no4=(num_top + 3) end t_not=0 - data.compact! chapter_number_counter=0 + data=data.compact data.each do |dob| #@md.seg_names << [additions to segment names] title_no=nil - dob=SiSU_document_structure_extract::Structure.new(@md,dob).structure_markup #must happen earlier, node info etc. require - if dob.is =='heading' \ - and dob.autonum_ \ + dob=SiSU_DAL_DocumentStructureExtract::Structure.new(@md,dob).structure_markup #must happen earlier, node info etc. require + if dob.is ==:heading \ + && dob.autonum_ \ and defined? @md.make.num_top \ and @md.make.num_top !~/^$/ if dob.lv=='1' \ and dob.obj =~/^#\s|\s#(?:\s|$)/ chapter_number_counter +=1 - dob.obj.gsub!(/^#\s/,"#{chapter_number_counter} ") - dob.obj.gsub!(/#([:,]?\s|[.]?$)/,"#{chapter_number_counter}\\1") + dob.obj=dob.obj.gsub(/^#\s/,"#{chapter_number_counter} "). + gsub(/#([:,]?\s|[.]?$)/,"#{chapter_number_counter}\\1") end if dob.ln==no1 @subnumber=1 @@ -160,7 +160,7 @@ module SiSU_numbering if dob.ln==no1 t_no1+=1; t_no2=0; t_no3=0 title_no="#{t_no1}" - if not @md.seg_names.nil? \ + if @md.seg_names.is_a?(Array) \ and not @md.seg_names.include?(title_no) if dob.ln==no1 dob.name="#{title_no}" if not dob.name @@ -168,15 +168,15 @@ module SiSU_numbering tag=dob.obj.gsub(/(Article|Clause|Section|Chapter)\s+/,"\\1_#{title_no}").downcase tag=heading_tag_clean(tag) dob.tags=[tag,dob.tags].flatten if tag !~/^\d+$/ #check whether will work across file types with stop signs - (dob.obj =~/(Article|Clause|Section)\s+/) \ - ? (dob.obj.gsub!(/(Article|Clause|Section)\s+/,"\\1 #{title_no} ")) \ - : (dob.obj.gsub!(/^/,"#{title_no}. ")) #fix stop later + dob.obj=(dob.obj =~/(Article|Clause|Section)\s+/) \ + ? (dob.obj.gsub(/(Article|Clause|Section)\s+/,"\\1 #{title_no} ")) + : (dob.obj.gsub(/^/,"#{title_no}. ")) #fix stop later end if dob.ln !=no1 \ and dob.obj =~/^[\d.]+\s/ #fix -> if the title starts with a numbering scheme, do not auto-number, review dob.name ="#{title_no}" if not dob.name dob.tags=[title_no,dob.tags].flatten if title_no !~/^\d+$/ #check whether will work across file types with stop signs - dob.obj.gsub!(/^/,"#{title_no}. ") + dob.obj=dob.obj.gsub(/^/,"#{title_no}. ") end @md.seg_names << title_no end @@ -184,7 +184,7 @@ module SiSU_numbering and dob.name!~/^[a-z_\.]+$/ \ and dob.obj !~/[A-Z]\.?\s/ #bug -> tmp fix, excludes A. B. C. lettering, but not roman numerals, is arbitrary, review required # not fixed, work on dob.tags=[title_no,dob.tags].flatten if title_no !~/^\d+$/ #check whether will work across file types with stop signs - dob.obj.gsub!(/^/i,"#{title_no}. ") + dob.obj=dob.obj.gsub(/^/i,"#{title_no}. ") end end if dob.ln==no1 #watch because here you change dob.name @@ -207,7 +207,7 @@ module SiSU_numbering dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ #check whether will work across file types with stop signs dob.name.gsub(/^([a-z_\.]+)-$/,'\1') end - elsif dob.is =='heading' \ + elsif dob.is ==:heading \ and dob.autonum_ \ and @md.markup =~/num_extract/ #AS DANGEROUS force enable with document, note already does this type of numbering for cisg, locate and coordinate logic, is currently misplaced in code, chengwei inspired 2004w23/4 #here lies a bug, as is nil when run from -Dv --update, FIX @@ -229,11 +229,11 @@ module SiSU_numbering @tuned_file=@tuned_file.flatten end def ocn(data) #and auto segment numbering increment - @tuned_file=SiSU_document_structure_extract::OCN.new(@md,data).ocn + @tuned_file=SiSU_DAL_DocumentStructureExtract::OCN.new(@md,data).ocn @tuned_file end def xml(data) - @tuned_file=SiSU_document_structure_extract::XML.new(@md,data).dom + @tuned_file=SiSU_DAL_DocumentStructureExtract::XML.new(@md,data).dom @tuned_file end def minor_numbering(data) #and auto segment numbering increment @@ -241,20 +241,23 @@ module SiSU_numbering number_small,letter_small=0,0 letter=%w( a b c d e f g h i j k l m n o p q r s t u v w x y z ) data.each do |dob| - if dob.of =~/heading|para|group/ - if dob.is =='heading' \ + if dob.of ==:heading \ + || dob.of ==:heading_insert \ + || dob.of ==:para \ + || dob.of ==:block + if dob.is ==:heading \ and dob.ln.to_s=~/^[1-9]/ #% sub-number system, (baby numbering) reset with any change of major number (more obviously should be placed in number titles, but that is conditionally executed, check and move later) number_small,letter_small=0,0 - elsif dob.is =~/para/ + elsif dob.is ==:para if dob.obj =~/^#[ 1]/ \ and dob.obj !~/^#\s+(?:~#)?$/ letter_small=0 number_small=0 if dob.obj =~ /^#1/ number_small+=1 - dob.obj.gsub!(/^#[ 1]/,"#{number_small}. ") #change 2004 + dob.obj=dob.obj.gsub(/^#[ 1]/,"#{number_small}. ") end if dob.obj =~/^_# / - dob.obj.gsub!(/^_# /,"#{letter[letter_small]}. ") #change 2004 + dob.obj=dob.obj.gsub(/^_# /,"#{letter[letter_small]}. ") dob.indent='1' letter_small+=1 end @@ -282,13 +285,13 @@ module SiSU_numbering tags={} art_filename_auto=1 @counter=1 - if not @md.seg_autoname_safe and @md.cmd =~/[MV]/ + if not @md.seg_autoname_safe and @md.opt.cmd =~/[MV]/ puts 'manual segment names, numbers used as names, risk warning (segmented html)' end ocn_html_seg=[] data.each do |dob| - if dob.is=='heading' \ - and dob.ln \ + if dob.is==:heading \ + && dob.ln \ and dob.ln.to_s =~/^[456]/ if dob.ln==4 \ and not dob.name \ @@ -298,19 +301,19 @@ module SiSU_numbering if dob.name !~/^\S+/ \ and dob.obj =~/^\s*(?:\S+\s+)?([\d.,:-]+)/m #heading starts with a recognised numeric or word followed by a recognised numerical construct, use that as name possible_seg_name=$1 - possible_seg_name.gsub!(/(?:[:,-]|\W)/,'.') - possible_seg_name.gsub!(/\.$/,'') - if not @md.seg_names.nil? \ + possible_seg_name=possible_seg_name.gsub(/(?:[:,-]|\W)/,'.'). + gsub(/\.$/,'') + if @md.seg_names.is_a?(Array) \ and not @md.seg_names.include?(possible_seg_name) dob.name=possible_seg_name dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ @md.seg_names << possible_seg_name - else puts 'warn, there may be a conflicting numbering scheme' if @md.cmd =~/[VM]/ + else puts 'warn, there may be a conflicting numbering scheme' if @md.opt.cmd =~/[VM]/ end end if dob.ln==4 \ and dob.name #extract segment name from embedded document structure info - if not @md.seg_names.nil? \ + if @md.seg_names.is_a?(Array) \ and not @md.seg_names.include?(dob.name) dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ @md.seg_names << dob.name @@ -320,7 +323,7 @@ module SiSU_numbering and not dob.name #if still no segment name, provide a numerical one pf='_' #pg='' #may use e.g. '' or '~' or '_' segn_auto="#{pf}#{art_filename_auto.to_s}" - if not @md.seg_names.nil? \ + if @md.seg_names.is_a?(Array) \ and not @md.seg_names.include?(segn_auto) dob.name=segn_auto dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ #check whether will work across file types with stop signs @@ -334,18 +337,19 @@ module SiSU_numbering puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}" end end - if dob.is =~/heading/ \ - and dob.ln==4 + if (dob.is ==:heading \ + || dob.is ==:heading_insert) \ + && dob.ln==4 @seg=dob.name end - @tuned_file << if dob.is=='heading' \ - and (@md.pagenew or @md.pagebreak) + @tuned_file << if dob.is==:heading \ + && (@md.pagenew || @md.pagebreak) m=dob.ln.to_s dob_tmp=[] if @md.pagenew.inspect =~/#{m}/ - dob_tmp << SiSU_document_structure::Object_layout.new.break(Hx[:br_page_new]) << dob + dob_tmp << SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) << dob elsif @md.pagebreak.inspect =~/#{m}/ - dob_tmp << SiSU_document_structure::Object_layout.new.break(Hx[:br_page]) << dob + dob_tmp << SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) << dob end para_result=unless dob_tmp.length > 0; dob else dob_tmp @@ -354,18 +358,18 @@ module SiSU_numbering end if defined? dob.ocn \ and dob.ocn - @segname=((dob.is=='heading'|| dob.is=='heading_insert') && dob.ln==4 && (defined? dob.name)) \ - ? (dob.name) \ + @segname=((dob.is==:heading || dob.is==:heading_insert) && dob.ln==4 && (defined? dob.name)) \ + ? (dob.name) : @segname - tags["#{dob.ocn}"]={:segname=>@segname} - ocn_html_seg[dob.ocn]=if dob.is =~/heading/ + tags["#{dob.ocn}"]={ segname: @segname } + ocn_html_seg[dob.ocn]=if (dob.is==:heading || dob.is==:heading_insert) x=if dob.ln =~/[1-3]/ - {:seg=>nil,:level=> dob.ln} + { seg: nil, level: dob.ln } else #elsif dob.ln =~/[4-6]/ - {:seg=>@seg,:level=> dob.ln} + { seg: @seg, level: dob.ln } end else - {:seg=>@seg,:level=>nil} + { seg: @seg, level: nil } end end dob.tags=dob.tags.uniq if defined? dob.tags @@ -375,7 +379,7 @@ module SiSU_numbering #? (dob.name) \ #: @segname dob.tags.each do |x| - tags[x]={:ocn=>dob.ocn.to_s,:segname=>@segname} #@tags[x.to_s]=[dob.ocn.to_s,@segname.to_s] + tags[x]={ ocn: dob.ocn.to_s, segname: @segname } end end dob @@ -399,15 +403,21 @@ module SiSU_numbering end def set_heading_top(data) #% make sure no false positives unless @md.set_heading_top - puts "\tdocument contains no top level heading, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\tdocument contains no top level heading, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ @tuned_file=[] data.each do |t_o| unless @md.set_heading_top if t_o !~/^(?:#{Rx[:meta]}|@\S+:)\s/m \ and t_o !~/\A\s*\Z/m @md.set_heading_top=true - head=@md.title.main ? ([@lv='1',@obj=@md.title.main]) : ([@lv='1',@obj='[no title provided]']) - @tuned_file << head + if defined? @md.title \ + and @md.title \ + and defined? @md.title.full \ + and defined? @md.creator \ + and @md.creator + head=@md.title.main ? ([@lv='1',@obj=@md.title.main]) : ([@lv='1',@obj='[no title provided]']) + @tuned_file << head + end end end @tuned_file << t_o @@ -417,17 +427,17 @@ module SiSU_numbering end def set_heading_seg(data) #% make sure no false positives unless @md.set_heading_seg - puts "\tdocument contains no segment level, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\tdocument contains no segment level, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ @tuned_file=[] data.each do |dob| unless @md.set_heading_seg if defined? dob.ln and dob.ln.to_s !~/^[123]/m \ and dob.obj !~/\A\s*\Z/m \ - and dob.is !='layout' + and dob.is !=:layout @md.set_heading_seg=true - head=if @md.title.main ; dob.ln,dob.name,dob.obj=4,'seg',@md.title.main - else dob.ln,dob.name,dob.obj=4,'seg','[segment]' - end + head=@md.title.main \ + ? (dob.ln,dob.name,dob.obj=4,'seg',@md.title.main) + : (dob.ln,dob.name,dob.obj=4,'seg','[segment]') @tuned_file << head end end @@ -438,7 +448,7 @@ module SiSU_numbering end def set_header_title(data) #% make sure no false positives unless @md.set_header_title - puts "\t no document title provided, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\t no document title provided, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ @tuned_file=[] data.each do |t_o| unless @md.set_header_title diff --git a/lib/sisu/v2/dal_substitutions_and_insertions.rb b/lib/sisu/v4/dal_substitutions_and_insertions.rb index c598b990..8478b6e7 100644 --- a/lib/sisu/v2/dal_substitutions_and_insertions.rb +++ b/lib/sisu/v4/dal_substitutions_and_insertions.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2011, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,22 +55,22 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_substitute_and_insert +module SiSU_DAL_SubstituteAndInsert class SI def initialize(md,data) @md,@data=md,data - @skin=SiSU_Env::Info_skin.new(@md) + @skin=SiSU_Env::InfoSkin.new(@md) end def substitutions_and_insertions? data=@data data_expand=[] if data[0] =~ /^#!\s*(?:\/usr\/bin\/env sisu|\/usr\/bin\/sisu)/ # remove bang from top #! (however file is stripped, so will be removed provided no content precedes it) - data[0].gsub!(/^#!\s*\/usr\/bin\/sisu/,'') - data[0].gsub!(/^#!\s*\/usr\/bin\/env sisu/,'') + data[0]=data[0].gsub(/^#!\s*\/usr\/bin\/sisu/,''). + gsub(/^#!\s*\/usr\/bin\/env sisu/,'') end if data[0] =~ /^(SiSU\s+[\d.]*|sisu-[\d.]+)$/ # SiSU identifier - data[0].gsub!(/^(SiSU\s*[\d.]*)$/,'% \1') - data[0].gsub!(/^(sisu-[\d.]+)$/,'% \1') + data[0]=data[0].gsub(/^(SiSU\s*[\d.]*)$/,'% \1'). + gsub(/^(sisu-[\d.]+)$/,'% \1') end data.each do |para| if para =~/<:(insert\d+)!?>/ \ @@ -83,71 +82,73 @@ module SiSU_substitute_and_insert i=$1 if defined? ins.insert1 para=[] - ins.insert1.split(/\n\n/).each{|x| para << x } + ins.insert1.split(/\n\n/).each {|x| para << x } else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert2)>\s*$/ i=$1 if defined? ins.insert2 para=[] - ins.insert2.split(/\n\n/).each{|x| para << x } + ins.insert2.split(/\n\n/).each {|x| para << x } else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert3)>\s*$/ i=$1 if defined? ins.insert3 para=[] - ins.insert3.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert3.split(/\n\n/).each {|x| para << x << "\n"} else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert4)>\s*$/ i=$1 if defined? ins.insert4 para=[] - ins.insert4.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert4.split(/\n\n/).each {|x| para << x << "\n"} else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert5)>\s*$/ i=$1 if defined? ins.insert5 para=[] - ins.insert5.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert5.split(/\n\n/).each {|x| para << x << "\n"} else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert6)>\s*$/ i=$1 if defined? ins.insert6 para=[] - ins.insert6.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert6.split(/\n\n/).each {|x| para << x << "\n"} else p "skin #{i} not found in #{@skin.select}" end when /^\s*<:(insert7)>\s*$/ i=$1 if defined? ins.insert7 para=[] - ins.insert7.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert7.split(/\n\n/).each {|x| para << x << "\n"} else p "skin #{i} not found in #{@skin.select}" end end - para.each{|x| data_expand << x } + para.each {|x| data_expand << x } else data_expand << para end - data_expand.flatten! - data_expand.compact! + data_expand=data_expand.flatten.compact end + data_new=[] data_expand.each do |para| para=if @md.markup_version.determined >= 0.38 - SiSU_document_structure_extract::Structure.new(@md,para).structure_markup_normalize + SiSU_DAL_DocumentStructureExtract::Structure.new(@md,para).structure_markup_normalize else - SiSU_document_structure_extract::Structure.new(@md,para).structure_marks + SiSU_DAL_DocumentStructureExtract::Structure.new(@md,para).structure_marks end - para.gsub!(/^(:?A~)\s*$/,'\1~ @title @author') #conditional header - para.gsub!(/^((?:[1-9]|:?[A-C])~\S*)\s*$/,'\1~ [Note: heading marker::required title missing]~#') #conditional header for incorporated document 2004w12 + para=para.gsub(/^(:?A~)\s*$/,'\1~ @title @author'). #conditional header + gsub(/^((?:[1-9]|:?[A-C])~\S*)\s*$/,'\1~ [Note: heading marker::required title missing]~#') #conditional header for incorporated document 2004w12 if para =~/^@\S+?:/ - para.gsub!(/^@(\S+?):(\s+|$)/,"#{Mx[:meta_o]}\\1#{Mx[:meta_c]}\\2") - para.gsub!(/^@(\S+?):([+-])(\s+|$)/,"#{Mx[:meta_o]}\\1\\2#{Mx[:meta_c]}\\3") + para=para.gsub(/^@(\S+?):(\s+|$)/,"#{Mx[:meta_o]}\\1#{Mx[:meta_c]}\\2"). + gsub(/^@(\S+?):([+-])(\s+|$)/,"#{Mx[:meta_o]}\\1\\2#{Mx[:meta_c]}\\3") end + data_new << para end + data_new end end end diff --git a/lib/sisu/v4/dal_syntax.rb b/lib/sisu/v4/dal_syntax.rb new file mode 100644 index 00000000..b21f94a5 --- /dev/null +++ b/lib/sisu/v4/dal_syntax.rb @@ -0,0 +1,604 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: Syntax for markup, input markup syntaxes, determined here + +=end +module SiSU_DAL_Syntax + class Words + def initialize(line,md,mkp) + @line,@md,@mkp=line,md,mkp + end + end + class Markup + def initialize(md='',data='') + @data,@md=data,md + @vz=SiSU_Env::GetInit.instance.skin + @data_new=[] + url_and_stub=SiSU_Env::InfoEnv.new.url + @output_url="#{url_and_stub.remote}" + @env=SiSU_Env::InfoEnv.new + emph_set=if defined? @md.make.emphasis \ + and not @md.make.emphasis.nil? + @md.make.emphasis + else @env.markup_emphasis + end + @emph=case emph_set + when /bold/ + emph_italics=false + { o: Mx[:fa_bold_o], c: Mx[:fa_bold_c] } + when /italics/ + emph_italics=true + { o: Mx[:fa_italics_o], c: Mx[:fa_italics_c] } + when /underscore/ + emph_italics=false + { o: Mx[:fa_underscore_o], c: Mx[:fa_underscore_c] } + else p __LINE__.to_s + '::' + __FILE__ + end + @http_m=%r{\{.+?\}https?://\S+|https?:\S+|:\S+|\.\.\/\S+|#\S+|\S+?\.png\b|[*]~\S+|^#{Mx[:meta_o]}.+|#{Mx[:gr_o]}(?:code|block|group|alt|verse)(?:-end)?#{Mx[:gr_c]}|#{Mx[:fa_o]}:br#{Mx[:fa_c]}} + @manmkp_ital=emph_italics \ + ? '[i/*]\\{.+?\\}[i/*]' + : '[i/]\\{.+?\\}[i/]' + tail_m_ital=%q{(?:\s|[.,;:?!'")]|~\^|~\\\{\s|$)} + tail_m_bold=%{(?:(?:#{Mx[:fa_italics_c]})?(?:\s|[.,;:?!'")]|~\^|~\\\{\s|$))?} + bold_line=%{^!_\s.+?(?:#{Mx[:br_line]}|\n|$)} + ital_line=%{^/_\s.+?(?:#{Mx[:br_line]}|\n|$)} + @line_scan_ital=if defined? @md.make.italics[:str] \ + and defined? @vz.markup_make_italic[:str] + /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|(?:#{@md.make.italics[:str]}|#{@vz.markup_make_italic[:str]})#{tail_m_ital}|\S+|\n/i + elsif defined? @md.make.italics[:str] + /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@md.make.italics[:str]}#{tail_m_ital}|\S+|\n/i + elsif defined? @vz.markup_make_italic[:str] + /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@vz.markup_make_italic[:str]}#{tail_m_ital}|\S+|\n/i + end + @manmkp_bold=emph_italics \ + ? '^!_\s.+?(?:\n|$)|[!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[!]' + : '^!_\s.+?(?:\n|$)|[*!b]\\{.+?\\}[*!b]|[*!][a-zA-Z0-9\-_]+[*!]' + @line_scan_bold=if (defined? @md.make.bold[:str] \ + and @md.make.bold[:str]) \ + and (defined? @vz.markup_make_bold[:str] \ + and @vz.markup_make_bold[:str]) + /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i + elsif defined? @md.make.bold[:str] \ + and @md.make.bold[:str] + /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.make.bold[:str]})#{tail_m_bold}|\S+|\n/i + elsif defined? @vz.markup_make_bold[:str] \ + and @vz.markup_make_bold[:str] + /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i + end + end + def songsheet + @data=@data.compact + @data.each do |dob| + dob=breaks(dob) + dob=if @md.sem_tag then sem(dob) else dob end #revisit + dob=line_actions(dob) + dob=paragraph_set(dob) + dob=substitutions(dob) + dob=wordlist_italics(dob) + dob=wordlist_bold(dob) + dob=bodymarkup(dob) + @data_new << dob unless dob.nil? + end + @data_new + end + def sem(dob) #revisit + dob=SiSU_Sem::Tags.new(dob,@md).rm.all + end + def breaks(dob) + if dob.is !=:meta \ + && dob.is !=:comment \ + && dob.is !=:code \ + && dob.is !=:table + dob.obj=dob.obj.gsub(/^-\\\\-\s*$/,"#{Mx[:br_page]}"). + gsub(/^=\\\\=\s*$/,"#{Mx[:br_page_new]}"). + gsub(/ \\\\(?: |$)/,"#{Mx[:br_line]}"). + gsub(/(?:<:?pb>)/,"#{Mx[:br_page]}"). # depreciated + gsub(/(?:<:?pn>)/,"#{Mx[:br_page_new]}"). # depreciated + gsub(/(?:<:?br>|<br \/>)/,"#{Mx[:br_line]}") # depreciated + end + dob + end + def wordlist_italics(dob) + dob=dob.dup + if (defined? @md.make.italics[:str] \ + and @md.make.italics[:str]) \ + or (defined? @vz.markup_make_italic[:str] \ + and @vz.markup_make_italic[:str]) + dob.obj=if dob.is !=:meta \ + && dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment + word=dob.obj.scan(@line_scan_ital) + word=word.flatten.compact + line_array=[] + word.each do |w| + unless /#{@manmkp_ital}|#{@http_m}/.match(w) + if defined? @md.make.italics[:regx] \ + and @md.make.italics[:regx] + w=w.gsub(@md.make.italics[:regx], + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") + elsif defined? @vz.markup_make_italic \ + and @vz.markup_make_italic + w=w.gsub(@vz.markup_make_italic, + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") + else w + end + end + line_array << w + end + line_array.join(' ') + else dob.obj + end + end + dob + end + def embolden(given) + given=given.gsub(/^!_\s+((?:\{|#{Mx[:lnk_o]})(?:~^ )?.+?(?:\}|#{Mx[:lnk_o]})https?:\/\/\S+.*?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, + "#{Mx[:fa_bold_o]} \\1 #{Mx[:fa_bold_c]}\\2"). + gsub(/^!_\s+((?:\{|#{Mx[:lnk_o]})(?:~^ )?.+?(?:\}|#{Mx[:lnk_o]})https?:\/\/\S+.*)/, + "#{Mx[:fa_bold_o]} \\1 #{Mx[:fa_bold_c]}"). + gsub(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, + "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2"). + gsub(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)\s+((?:[*]~\S+\s*)+)/, + "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2"). + gsub(/(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s*(.+?)\s*([~-]#)$/, + "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}\\2"). + gsub(/(?:^!_\s+|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]}\s*)(.*)?\s*$/, + "#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") + end + def italicise(given) + given=given.gsub(/^\/_\s*(.+?)([#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}])/, + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2"). + gsub(/^\/_\s*(.+?)\s+((?:[*]~\S+\s*)+)/, + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2"). + gsub(/^\/_\s*(.+?)\s*([~-]#)$/, + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}\\2"). + gsub(/^\/_\s+(.*)?\s*$/, + "#{Mx[:fa_italics_o]}\\1#{Mx[:fa_italics_c]}") + end + def line_actions(dob) + dob.obj=if (dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:comment \ + && dob.is !=:meta) \ + and dob.obj =~ /^!_\s+/ + embolden(dob.obj) + elsif dob.obj =~ /^\/_\s+/ + italicise(dob.obj) + else dob.obj + end + dob + end + def paragraph_set(dob) + dob.obj=if dob.is !=:meta \ + && dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment \ + && dob.is !=:table + dob.obj.gsub(/\n/m,' '). + gsub(/ \s+/m,' ') + else dob.obj + end + dob + end + def substitutions(dob) + dob=dob.dup + dob=if defined? @md.make.substitute[:match_and_replace] \ + and @md.make.substitute[:match_and_replace].is_a?(Array) + dob=if dob.is !=:meta \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment \ + && dob.is !=:table + if dob.obj =~/#{@md.make.substitute[:matches]}/ + @md.make.substitute[:match_and_replace].each do |x| + dob.obj=if x[:case_s]==:i + dob.obj.gsub(/#{x[:match]}/mi,x[:replace]) + else + dob.obj.gsub(/#{x[:match]}/m,x[:replace]) + end + end + end + dob + else dob + end + dob + else dob + end + end + def wordlist_bold(dob) + dob=dob.dup + if (defined? @md.make.bold[:str] \ + and @md.make.bold[:str]) \ + or (defined? @vz.markup_make_bold[:str] \ + and @vz.markup_make_bold[:str]) + dob.obj=if dob.is !=:meta \ + && dob.is !=:heading \ + && dob.is !=:heading_insert \ + && dob.is !=:code \ + && dob.is !=:comment \ + && dob.is !=:table + line_array=[] + word=dob.obj.scan(@line_scan_bold) + word=word.flatten.compact + word.each do |w| + unless /#{@manmkp_bold}|#{@http_m}/.match(w) + if defined? @md.make.bold[:regx] \ + and @md.make.bold[:regx] #document header: @bold: [bold word list] + w=w.gsub(@md.make.bold[:regx],"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") + elsif defined? @vz.markup_make_bold \ + and @vz.markup_make_bold #defaults and skin adjusted bold word list + w=w.gsub(@vz.markup_make_bold,"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}") + end + else + w=if w =~ /(?:^!_|^#{Mx[:lv_o]}[7-9]:\S*?#{Mx[:lv_c]})\s+/ + embolden(w) #bold paragraph/emphasize #may wish to remove think about 7{ 8{ conversion not satisfactory, as information is lost! + elsif w =~/^\/_\s+/ + italicise(w) + else w + end + end + line_array << w + end + line_array.join(' ') + else dob.obj + end + else + dob.obj=if dob.is==:heading \ + and dob.ln.to_s =~/[7-9]/ + embolden(dob.obj) + else dob.obj + end + end + dob + end + def fontface(dob) + dob.obj=dob.obj.gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)\*\{(.+?)\}\*/m, + "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)!\{(.+?)\}!/m, + "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\(|\>)\/\{(.+?)\}\//m, + "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)_\{(.+?)\}_/m, + "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|#{Mx[:lnk_o]}|#{Mx[:br_line]}|#{Mx[:br_paragraph]}|[\(\[\{]|\>)#\{(.+?)\}#/m, + "\\1#{Mx[:fa_monospace_o]}\\2#{Mx[:fa_monospace_c]}"). #monospace + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\"\{(.+?)\}\"/m, + "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}"). #cite /blockquote? + gsub(/(^|[^\\])\^\{(.+?)\}\^/m, + "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). #superscript + gsub(/(^|[^\\]),\{(.+?)\},/m, + "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}"). #subscript + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\+\{(.+?)\}\+/m, + "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}"). #inserted text + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)-\{(.+?)\}-/m, + "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}"). #strikethrough - deleted text + gsub(/(^|#{Mx[:gl_c]}|\s+|['"]|#{Mx[:nbsp]}|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>|\d+)\^(\S+?)\^/, + "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}") #superscript single word, watch digit added + dob + end + def bodymarkup(dob) + # << http://www.jus.uio.no/sisu/sisu_markup_table/markup >> + # See: data/sisu/sample/document_samples_sisu_markup/ + ## fontface + # *{emphasis}* e{emphasis}e <strong>emphasis</strong> + # !{bold text}! b{bold}b <b>bold text</b> + # _{underline}_ u{underline}u <u>underline</u> + # /{italics}/ i{italics}i <i>italics</i> + # "{citation}" c{citation}c <cite>citation</cite> #blockquote? + # ^{superscript}^ <sup>superscript</sup> + # ,{subscript}, <sub>subscript</sub> + # +{inserted text}+ <ins>inserted text</ins> + # -{deleted text}- <del>deleted text</del> + # #{monospace text}# + # + # {url address}:url + # {image.png}imageurl + # {image.png}png + # ~{endnote}~ <!e endnote !> + # !_ #bold/emphasise paragraph + # _" #blockquote paragraph + # _1 <:i1> #indent paragraph 1 step + # _2 <:i2> #indent paragraph 2 steps + # _3 <:i3> #indent paragraph 3 steps + # _4 <:i4> #indent paragraph 4 steps + # _* #bullet (list) ● + # _1* #bullet (list) indented + # _1* #bullet (list) indented + # # #numbered (list) level 1 + # _# #numbered (list) level 2 + dob=dob.dup + if dob.is !=:meta \ + && dob.is !=:comment \ + && dob.is !=:code \ + && dob.is !=:table + line_array=[] + word=dob.obj.scan(/\S+|\n/) #unless line =~/^(?:#{Mx[:meta_o]}|%+\s)/ #visit + if word + word.each do |w| # _ - / # | : ! ^ ~ + unless w =~/~\{|\}~|~\[|\]~|^\^~|~\^|\*~\S+|~#|\{t?~|\{table|https?:\/\/\S+/ # do something earlier about table!! + w=w.gsub(/\\?~/,"#{Mx[:gl_o]}#126#{Mx[:gl_c]}") #escaped special character + end + w=w.gsub(/^\<$/,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}").gsub(/^\>$/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}") #escaped special character + line_array << w + end + dob.obj=line_array.join(' ') + dob.obj=dob.obj.strip + end + dob.obj=dob.obj.gsub(/^([*#-.]{1,12})$/,'\1 ~#'). #ocn off for these paragraph separators + gsub(/~\{(.+?)\}~/m,Mx[:en_a_o] + '\1' + Mx[:en_a_c]). + gsub(/~\[([^*+].+?)\]~/m,Mx[:en_b_o] + '* \1' + Mx[:en_b_c]). #default if markup does not specify + gsub(/~\[(.+?)\]~/m,Mx[:en_b_o] + '\1' + Mx[:en_b_c]) + if dob.is ==:heading \ + and dob.ln ==1 + dob.obj=dob.obj.gsub(/\s*@title\b/," #{@md.title.full}") + dob.obj=if defined? @md.creator.author \ + and @md.creator.author + dob.obj.gsub(/\s+(?:@creator|@author)/,",#{Mx[:br_line]}#{@md.creator.author}") + else dob.obj.gsub(/\s+(?:@creator|@author)/,'') + end + end + if defined? @md.title \ + and @md.title \ + and defined? @md.title.full \ + and defined? @md.creator \ + and @md.creator + if dob.is ==:heading + dob.obj=dob.obj.gsub(/^\s*@title\s*$/,@md.title.full) if dob.lv =~/1/ + dob.obj=if dob.lv =~/[23]/ \ + and defined? @md.creator.author \ + and @md.creator.author + dob.obj.gsub(/^\s*(?:(by\s+)?(?:@creator|@author))\s*$/,"\\1#{@md.creator.author}") + else dob.obj.gsub(/^\s*(?:(by\s+)?(?:@creator|@author))\s*$/,'\1') + end + end + end + dob.obj=dob.obj.gsub(/<(https?:\/\/\S+?)>/,'< \1 >'). #catch problem markup + gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image'). + gsub(/<!(\S+)!>/,'<:\1>'). #escaped special character + gsub(/ /,"#{Mx[:nbsp]}"). #escaped special character + gsub(/\\~/,"#{Mx[:gl_o]}#126#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\{/,"#{Mx[:gl_o]}#123#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\}/,"#{Mx[:gl_o]}#125#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\<</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}#{Mx[:gl_o]}#lt#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\>>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}#{Mx[:gl_o]}#gt#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\_/,"#{Mx[:gl_o]}#095#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\-/,"#{Mx[:gl_o]}#045#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\+/,"#{Mx[:gl_o]}#043#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\//,"#{Mx[:gl_o]}#047#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\#/,"#{Mx[:gl_o]}#035#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\&/,"#{Mx[:gl_o]}#038#{Mx[:gl_c]}"). #& #escaped special character + gsub(/\\\|/,"#{Mx[:gl_o]}#124#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility + gsub(/\\\:/,"#{Mx[:gl_o]}#058#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility + gsub(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility + gsub(/\\\^/,"#{Mx[:gl_o]}#094#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility + gsub(/\\\,/,"#{Mx[:gl_o]}#044#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility + gsub(/\\\\/,"#{Mx[:gl_o]}#092#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\*/,"#{Mx[:gl_o]}#042#{Mx[:gl_c]}"). #escaped special character + gsub(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}") #escaped special character + if dob.obj=~/(?:https?:|ftp:|\{([^{}]+?)\}(?:#|:|[.]{1,2}\/))\S+/m + if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m + dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ ([^}]+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m, + "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3 #{Mx[:en_a_o]}\\3 \\4#{Mx[:en_a_c]}") # watch + end + if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m + dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (.+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4 #{Mx[:en_a_o]}\\3#{Mx[:en_a_c]} ") + end + dob.obj=dob.obj.gsub(/(^|[^#])\{\s*([^{}]+?)\s*\}((?:https?:|:|[.]{2}\/|#)\S+?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, + "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3"). #linked (text or image, however text cannot include modified face, e.g. bold, ital, underline) + gsub(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])((?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}). + gsub(/#{Mx[:lnk_c]}#(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + %{#{Mx[:lnk_c]}#{Mx[:rel_o]}\\1#{Mx[:rel_c]}\\2}). + gsub(/#{Mx[:lnk_c]}:(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}). + gsub(/#{Mx[:lnk_c]}[.]{2}\/(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}) + end + if dob.obj=~/_(?:https?|ftp):\S+/m # _http://url #CHECK + dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])(_(?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, + %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}) + end + dob=fontface(dob) + dob.obj=dob.obj.gsub(/<[:e]\s+(.+?)!?>/, + "#{Mx[:en_a_o]}\\1#{Mx[:en_a_c]}"). #not tested + gsub(/(^|#{Mx[:br_nl]})\s*_\*\s*/, + "\\1#{Mx[:gl_bullet]}"). #bullets, shortcut + gsub(/=\{(.+?)\}/, + "#{Mx[:idx_o]}\\1#{Mx[:idx_c]}"). + gsub(/^\s*_([1-9])\*\s*/, + "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:gl_bullet]}"). #bullets, shortcut + gsub(/^\s*_([1-9])\s+/, + "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}"). #indent + gsub(/^\s*_([1-9])!\s+(.+?)\s*$/, + "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} "). #indent bold + gsub(/^\s*__([1-9])\s+/, + "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}"). #hang + gsub(/^\s*__([1-9])!\s+(.+?)\s*$/, + "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} "). #hangdef + gsub(/^\s*_([0-9])_([0-9])\s+/, + "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}"). #hang + gsub(/^\s*_([0-9])_([0-9])!\s+(.+?)\s*$/, + "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\3#{Mx[:fa_bold_c]} "). #hangdef + gsub(/<:hi>/,"#{Mx[:fa_hilite_o]}"). #'<span style="background-color: rgb(255,240,196)">') # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200) + gsub(/<:\/hi>/,"#{Mx[:fa_hilite_c]}"). #'</span>') + gsub(/(#{Mx[:gr_o]}verse#{Mx[:gr_c]}.+)/m,"\\1\n"). + gsub(/[ ]+($)/,'\1'). + gsub(/\{\s*(.+?)\s*\}(https?:\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, + "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3"). #any remaining linked text or image + gsub(/\{\s*(.+?)\s*\}(#{Mx[:url_o]}\S+?#{Mx[:url_c]})/, + "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2"). #any remaining linked text or image + gsub(/(^|\s)([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)/,"\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}"). + gsub(/(^|[ ])\{\s*(.+?)\s*\}(\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, + "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4"). #any remaining linked text or image + gsub(/\{\s*(.+?)\s*\}#([a-zA-Z0-9][a-zA-Z0-9_-]*)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, + "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:rel_o]}\\2#{Mx[:rel_c]}\\3"). #any remaining linked text or image, check need + gsub(/\{\s*(.+?)\s*\}(#{Mx[:rel_o]}\S+?#{Mx[:rel_c]})/, + "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2"). #any remaining linked text or image, check need + gsub(/\{\s*(.+?)\s*\}(image)/, + "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2") #linked image + elsif dob.is==:table + dob=fontface(dob) + elsif dob.is ==:code + dob.obj=dob.obj.gsub(/#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*/,'@\1: '). + gsub(/(^|#{Mx[:gl_c]}|\s)<(br(?: \/)?)>([\s,.]|$)/,'\1<\2>\3') #convert <br> <br /> back, clumsy + if dob.number_ + codeline=[] + ln=1 + dob.obj.split(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}|<br(?: \/)?>|\n/).each_with_index do |cl,i| + unless i == 0 + cl=cl.gsub(Mx[:br_nl],'') + w=3-ln.to_s.length + cl = "#{ln}#{Mx[:nbsp]*w}#{Mx[:vline]}#{cl}#{Mx[:br_nl]}" + ln +=1 + end + codeline << cl + end + codeline= codeline.join("") + dob.obj=codeline + else + dob.obj=dob.obj.gsub(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}/,"\n") + end + dob + else # @\S+?: + end + dob + end + def tech #script markup planned to be more strict for technical documents + # *{emphasis}* e{emphasis}e <strong>emphasis</strong> + # !{bold text}! b{bold}b <b>bold text</b> + # _{underline}_ u{underline}u <u>underline</u> + # /{italics}/ i{italics}i <i>italics</i> + # "{citation}" c{citation}c <cite>citation</cite> + # ^{superscript}^ <sup>superscript</sup> + # ,{subscript}, <sub>subscript</sub> + # +{inserted text}+ <ins>inserted text</ins> + # -{deleted text}- <del>deleted text</del> + # #{monospace text}# + # {url address}:url + # {image.png}imageurl + # {image.png}png + # ~{endnote}~ <!e endnote !> + # +1 <!i1!> + # +2 <!i2!> + puts 'tech' + @data.each do |line| + line=line.gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)e\{(.+?)\}e/, + "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)b\{(.+?)\}b/, + "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)u\{(.+?)\}u/, + "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)c\{(.+?)\}c/, + "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}"). #cite + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)i\{(.+?)\}i/, + "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)!\{(.+?)\}!/, + "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)\*\{(.+?)\}\*/, + "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)_\{(.+?)\}_/, + "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\(|\>)\/\{(.+?)\}\//, + "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\"\{(.+?)\}\"/, + "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^\{(.+?)\}\^/, + "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)9\{(.+?)\}9/, + "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>),\{(.+?)\},/, + "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)6\{(.+?)\}6/, + "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\+\{(.+?)\}\+/, + "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)v\{(.+?)\}v/, + "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)-\{(.+?)\}-/, + "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)x\{(.+?)\}x/, + "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}"). + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\*(\S+?)\*/, + "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasise single word, watch + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\!(\S+?)\!/, + "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold single word, watch + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\/([\(\)a-zA-Z0-9']+?)\/([ ,.;:'"~$]|[^a-zA-Z0-9])/, + "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}\\3"). #italics single word, watch + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)_(\S+?)_/, + "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore single word, watch + gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^(\S+?)\^/, + "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). #check #superscript single word, watch digit added + gsub(/^\s*_\([1-9]\)\(\*\+\)\s*/, + "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:fa_o]}\\2#{Mx[:fa_c_o]}"). #bullets, shortcut + gsub(/^\s*_\([1-9]\)\s+/, + "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}"). #watch + gsub(/^\s*__\([1-9]\)\s+/, + "#{Mx[:pa_o]}:h\\1#{Mx[:pa_c]}"). #watch + #line.gsub(/^\s*__\([1-9]\)!\s+/, + # "#{Mx[:pa_o]}:hd\\1#{Mx[:pa_c]}"). #watch + gsub(/#{Mx[:br_line]}\s*_[12]\s+/, + "#{Mx[:br_line]} ") #indent used in endnotes, not implemented, replace when ready with: line.gsub(/(?:<br>|<br \/>)\s*_([12])\s+/,'<br><:i\1> ') + end + @data + end + end +end +__END__ diff --git a/lib/sisu/v2/db_columns.rb b/lib/sisu/v4/db_columns.rb index c1fb6109..7c4fa9eb 100644 --- a/lib/sisu/v2/db_columns.rb +++ b/lib/sisu/v4/db_columns.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,15 +56,16 @@ sqlite =end -module SiSU_DB_columns - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/db_sqltxt" # db_sqltxt.rb - class Columns < SiSU_DB_text::Prepare +module SiSU_DbColumns + require_relative 'sysenv' # sysenv.rb + require_relative 'db_sqltxt' # db_sqltxt.rb + class Columns < SiSU_DbText::Prepare def initialize(md=nil) @md=md - @db=SiSU_Env::Info_db.new #watch - if defined? md.mod \ - and md.mod.inspect=~/import|update/ \ + @db=SiSU_Env::InfoDb.new #watch + @lang ||=SiSU_i18n::Languages.new + if defined? md.opt.mod \ + and md.opt.mod.inspect=~/import|update/ \ and FileTest.exist?(md.fns) txt_arr=IO.readlines(md.fns,'') src=txt_arr.join("\n") @@ -98,7 +98,7 @@ module SiSU_DB_columns 'title' end def create_column - "#{name} VARCHAR(#{Db[:col_title]}) NULL," + "#{name} VARCHAR(#{Db[:col_title]}) NOT NULL," end def column_comment %{COMMENT ON COLUMN metadata_and_text.#{name} @@ -108,7 +108,7 @@ module SiSU_DB_columns t=if defined? @md.title.full \ and @md.title.full=~/\S+/ txt=@md.title.full - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -120,7 +120,7 @@ module SiSU_DB_columns 'title_main' end def create_column - "#{name} VARCHAR(#{Db[:col_title_part]}) NULL," + "#{name} VARCHAR(#{Db[:col_title_part]}) NOT NULL," end def column_comment %{COMMENT ON COLUMN metadata_and_text.#{name} @@ -130,7 +130,7 @@ module SiSU_DB_columns t=if defined? @md.title.main \ and @md.title.main=~/\S+/ txt=@md.title.main - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -152,7 +152,7 @@ module SiSU_DB_columns t=if defined? @md.title.sub \ and @md.title.sub=~/\S+/ txt=@md.title.sub - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -174,7 +174,7 @@ module SiSU_DB_columns t=if defined? @md.title.short \ and @md.title.short=~/\S+/ txt=@md.title.short - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -196,7 +196,7 @@ module SiSU_DB_columns t=if defined? @md.title.edition \ and @md.title.edition=~/\S+/ txt=@md.title.edition - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -218,7 +218,7 @@ module SiSU_DB_columns t=if defined? @md.title.note \ and @md.title.note=~/\S+/ txt=@md.title.note - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -237,10 +237,9 @@ module SiSU_DB_columns IS 'metadata document language [DC12]';} end def tuple - t=if defined? @md.title.language \ - and @md.title.language=~/\S+/ - txt=@md.title.language - special_character_escape(txt) + t=if @lang.list[@md.opt.lng][:n] + txt=@lang.list[@md.opt.lng][:n] + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -259,10 +258,10 @@ module SiSU_DB_columns IS 'metadata document language iso code';} end def tuple - t=if defined? @md.title.language_char \ - and @md.title.language_char=~/\S+/ - txt=@md.title.language_char - special_character_escape(txt) + t=if defined? @md.opt.lng \ + and @md.opt.lng=~/\S+/ + txt=@md.opt.lng + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -273,6 +272,7 @@ module SiSU_DB_columns #% creator @creator: :author: + :editor: :contributor: :illustrator: :photographer: @@ -295,14 +295,14 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.author_detail \ - and @md.creator.author_detail.class==Array \ + and @md.creator.author_detail.is_a?(Array) \ and @md.creator.author_detail.length > 0 txt='' @md.creator.author_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -324,7 +324,7 @@ module SiSU_DB_columns t=if defined? @md.creator.author_hon \ and @md.creator.author_hon=~/\S+/ txt=@md.creator.author_hon - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -346,7 +346,35 @@ module SiSU_DB_columns t=if defined? @md.creator.author_nationality_detail \ and @md.creator.author_nationality=~/\S+/ txt=@md.creator.author_nationality_detail - special_character_escape(txt) + txt=special_character_escape(txt) + ["#{name}, ","'#{txt}', "] + else ['',''] + end + end + self + end + def creator_editor + def name + 'creator_editor' + end + def create_column + "#{name} VARCHAR(#{Db[:col_name]}) NULL," + end + def column_comment + %{COMMENT ON COLUMN metadata_and_text.#{name} + IS 'metadata document editor name(s)';} + end + def tuple + t=if defined? @md.creator.editor_detail \ + and @md.creator.editor_detail.is_a?(Array) \ + and @md.creator.editor_detail.length > 0 + txt=@md.creator.editor_detail #dc + txt='' + @md.creator.editor_detail.each do |h| + txt=txt + %{#{h[:the]}, #{h[:others]}; } + end + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -366,15 +394,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.contributor_detail \ - and @md.creator.contributor_detail.class==Array \ + and @md.creator.contributor_detail.is_a?(Array) \ and @md.creator.contributor_detail.length > 0 txt=@md.creator.contributor_detail #dc txt='' @md.creator.contributor_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -394,15 +422,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.illustrator_detail \ - and @md.creator.illustrator_detail.class==Array \ + and @md.creator.illustrator_detail.is_a?(Array) \ and @md.creator.illustrator_detail.length > 0 txt=@md.creator.illustrator_detail txt='' @md.creator.illustrator_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -422,15 +450,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.photographer_detail \ - and @md.creator.photographer_detail.class==Array \ + and @md.creator.photographer_detail.is_a?(Array) \ and @md.creator.photographer_detail.length > 0 txt=@md.creator.photographer_detail txt='' @md.creator.photographer_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -450,14 +478,14 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.translator_detail \ - and @md.creator.translator_detail.class==Array \ + and @md.creator.translator_detail.is_a?(Array) \ and @md.creator.translator_detail.length > 0 txt='' @md.creator.translator_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -477,15 +505,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.prepared_by_detail \ - and @md.creator.prepared_by_detail.class==Array \ + and @md.creator.prepared_by_detail.is_a?(Array) \ and @md.creator.prepared_by_detail.length > 0 txt=@md.creator.prepared_by_detail txt='' @md.creator.prepared_by_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -505,15 +533,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.digitized_by_detail \ - and @md.creator.digitized_by_detail.class==Array \ + and @md.creator.digitized_by_detail.is_a?(Array) \ and @md.creator.digitized_by_detail.length > 0 txt=@md.creator.digitized_by_detail txt='' @md.creator.digitized_by_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -533,15 +561,15 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.audio_detail \ - and @md.creator.audio_detail.class==Array \ + and @md.creator.audio_detail.is_a?(Array) \ and @md.creator.audio_detail.length > 0 txt=@md.creator.audio_detail txt='' @md.creator.audio_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -561,14 +589,14 @@ module SiSU_DB_columns end def tuple t=if defined? @md.creator.video_detail \ - and @md.creator.video_detail.class==Array \ + and @md.creator.video_detail.is_a?(Array) \ and @md.creator.video_detail.length > 0 txt='' @md.creator.video_detail.each do |h| txt=txt + %{#{h[:the]}, #{h[:others]}; } end - txt.gsub!(/[;, ]+\s*$/,'') - special_character_escape(txt) + txt=txt.gsub(/[;, ]+\s*$/,'') + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -599,10 +627,9 @@ module SiSU_DB_columns IS 'metadata document language';} end def tuple - t=if defined? @md.language.document \ - and @md.language.document=~/\S+/ - txt=@md.language.document - special_character_escape(txt) + t=if @lang.list[@md.opt.lng][:n] + txt=@lang.list[@md.opt.lng][:n] + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -614,17 +641,18 @@ module SiSU_DB_columns 'language_document_char' end def create_column - "#{name} VARCHAR(#{Db[:col_language_char]}) NULL," + "#{name} VARCHAR(#{Db[:col_language_char]}) NOT NULL," end def column_comment %{COMMENT ON COLUMN metadata_and_text.#{name} IS 'metadata document language';} end def tuple - t=if defined? @md.language.document_char \ - and @md.language.document_char=~/\S+/ - txt=@md.language.document_char - special_character_escape(txt) + #modify check, is now required, SiSUv3d_ + t=if defined? @md.opt.lng \ + and @md.opt.lng=~/\S+/ + txt=@md.opt.lng + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -646,7 +674,7 @@ module SiSU_DB_columns t=if defined? @md.language.original \ and @md.language.original=~/\S+/ txt=@md.language.original - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -668,7 +696,7 @@ module SiSU_DB_columns t=if defined? @md.language.original_char \ and @md.language.original_char=~/\S+/ txt=@md.language.original_char - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -704,7 +732,7 @@ module SiSU_DB_columns t=if defined? @md.date.added_to_site \ and @md.date.added_to_site=~/\S+/ txt=@md.date.added_to_site - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -726,7 +754,7 @@ module SiSU_DB_columns t=if defined? @md.date.available \ and @md.date.available=~/\S+/ txt=@md.date.available - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -748,7 +776,7 @@ module SiSU_DB_columns t=if defined? @md.date.created \ and @md.date.created=~/\S+/ txt=@md.date.created - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -770,7 +798,7 @@ module SiSU_DB_columns t=if defined? @md.date.issued \ and @md.date.issued=~/\S+/ txt=@md.date.issued - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -792,7 +820,7 @@ module SiSU_DB_columns t=if defined? @md.date.modified \ and @md.date.modified=~/\S+/ txt=@md.date.modified - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -814,7 +842,7 @@ module SiSU_DB_columns t=if defined? @md.date.published \ and @md.date.published=~/\S+/ txt=@md.date.published - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -836,7 +864,7 @@ module SiSU_DB_columns t=if defined? @md.date.valid \ and @md.date.valid=~/\S+/ txt=@md.date.valid - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -858,7 +886,7 @@ module SiSU_DB_columns t=if defined? @md.date.translated \ and @md.date.translated=~/\S+/ txt=@md.date.translated - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -880,7 +908,7 @@ module SiSU_DB_columns t=if defined? @md.date.original_publication \ and @md.date.original_publication=~/\S+/ txt=@md.date.original_publication - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -903,7 +931,7 @@ module SiSU_DB_columns t=if defined? @md.generated \ and @md.generated.to_s=~/\S+/ txt=@md.generated.to_s - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -929,7 +957,7 @@ module SiSU_DB_columns t=if defined? @md.publisher \ and @md.publisher=~/\S+/ txt=@md.publisher - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -951,7 +979,7 @@ module SiSU_DB_columns # t=if defined? @md.current.publisher \ # and @md.current.publisher=~/\S+/ # txt=@md.current.publisher -# special_character_escape(txt) +# txt=special_character_escape(txt) # "'#{txt}', " # end # end @@ -982,7 +1010,7 @@ module SiSU_DB_columns t=if defined? @md.original.publisher \ and @md.original.publisher=~/\S+/ txt=@md.original.publisher - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1004,7 +1032,7 @@ module SiSU_DB_columns t=if defined? @md.original.language \ and @md.original.language=~/\S+/ txt=@md.original.language - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1026,7 +1054,7 @@ module SiSU_DB_columns t=if defined? @md.original.language_char \ and @md.original.language_char=~/\S+/ txt=@md.original.language_char - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1048,7 +1076,7 @@ module SiSU_DB_columns t=if defined? @md.original.source \ and @md.original.source=~/\S+/ txt=@md.original.source - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1070,7 +1098,7 @@ module SiSU_DB_columns t=if defined? @md.original.institution \ and @md.original.institution=~/\S+/ txt=@md.original.institution - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1092,7 +1120,7 @@ module SiSU_DB_columns t=if defined? @md.original.nationality \ and @md.original.nationality=~/\S+/ txt=@md.original.nationality - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1129,7 +1157,7 @@ module SiSU_DB_columns t=if defined? @md.rights.all \ and @md.rights.all=~/\S+/ txt=@md.rights.all - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1151,7 +1179,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_text \ and @md.rights.copyright_text=~/\S+/ txt=@md.rights.copyright_text - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1173,7 +1201,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_translation \ and @md.rights.copyright_translation=~/\S+/ txt=@md.rights.copyright_translation - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1195,7 +1223,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_illustrations \ and @md.rights.copyright_illustrations=~/\S+/ txt=@md.rights.copyright_illustrations - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1217,7 +1245,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_photographs \ and @md.rights.copyright_photographs=~/\S+/ txt=@md.rights.copyright_photographs - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1239,7 +1267,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_preparation \ and @md.rights.copyright_preparation=~/\S+/ txt=@md.rights.copyright_preparation - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1261,7 +1289,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_digitization \ and @md.rights.copyright_digitization=~/\S+/ txt=@md.rights.copyright_digitization - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1283,7 +1311,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_audio \ and @md.rights.copyright_audio=~/\S+/ txt=@md.rights.copyright_audio - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1305,7 +1333,7 @@ module SiSU_DB_columns t=if defined? @md.rights.copyright_video \ and @md.rights.copyright_video=~/\S+/ txt=@md.rights.copyright_video - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1327,7 +1355,7 @@ module SiSU_DB_columns t=if defined? @md.rights.license \ and @md.rights.license=~/\S+/ txt=@md.rights.license - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1365,7 +1393,7 @@ module SiSU_DB_columns t=if defined? @md.classify.topic_register \ and @md.classify.topic_register=~/\S+/ txt=@md.classify.topic_register - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1387,7 +1415,7 @@ module SiSU_DB_columns t=if defined? @md.classify.subject \ and @md.classify.subject=~/\S+/ txt=@md.classify.subject - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1409,7 +1437,7 @@ module SiSU_DB_columns t=if defined? @md.classify.type \ and @md.classify.type=~/\S+/ txt=@md.classify.type - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1431,7 +1459,7 @@ module SiSU_DB_columns t=if defined? @md.classify.loc \ and @md.classify.loc=~/\S+/ txt=@md.classify.loc - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1453,7 +1481,7 @@ module SiSU_DB_columns t=if defined? @md.classify.dewey \ and @md.classify.dewey=~/\S+/ txt=@md.classify.dewey - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1475,7 +1503,7 @@ module SiSU_DB_columns t=if defined? @md.classify.oclc \ and @md.classify.oclc=~/\S+/ txt=@md.classify.oclc - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1497,7 +1525,7 @@ module SiSU_DB_columns t=if defined? @md.classify.pg \ and @md.classify.pg=~/\S+/ txt=@md.classify.pg - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1519,7 +1547,7 @@ module SiSU_DB_columns t=if defined? @md.classify.isbn \ and @md.classify.isbn=~/\S+/ txt=@md.classify.isbn - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1541,7 +1569,7 @@ module SiSU_DB_columns t=if defined? @md.classify.format \ and @md.classify.format=~/\S+/ txt=@md.classify.format - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1563,7 +1591,7 @@ module SiSU_DB_columns t=if defined? @md.classify.identifier \ and @md.classify.identifier=~/\S+/ txt=@md.classify.identifier - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1585,7 +1613,7 @@ module SiSU_DB_columns t=if defined? @md.classify.relation \ and @md.classify.relation=~/\S+/ txt=@md.classify.relation - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1607,7 +1635,7 @@ module SiSU_DB_columns t=if defined? @md.classify.coverage \ and @md.classify.coverage=~/\S+/ txt=@md.classify.coverage - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1629,7 +1657,7 @@ module SiSU_DB_columns t=if defined? @md.classify.keywords \ and @md.classify.keywords=~/\S+/ txt=@md.classify.keywords - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1663,7 +1691,7 @@ module SiSU_DB_columns t=if defined? @md.notes.abstract \ and @md.notes.abstract=~/\S+/ txt=@md.notes.abstract - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1685,7 +1713,7 @@ module SiSU_DB_columns t=if defined? @md.notes.comment \ and @md.notes.comment=~/\S+/ txt=@md.notes.comment - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1707,7 +1735,7 @@ module SiSU_DB_columns t=if defined? @md.notes.description \ and @md.notes.description=~/\S+/ txt=@md.notes.description - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1729,7 +1757,7 @@ module SiSU_DB_columns t=if defined? @md.notes.history \ and @md.notes.history=~/\S+/ txt=@md.notes.history - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1751,7 +1779,7 @@ module SiSU_DB_columns t=if defined? @md.notes.prefix \ and @md.notes.prefix=~/\S+/ txt=@md.notes.prefix - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1773,7 +1801,7 @@ module SiSU_DB_columns t=if defined? @md.notes.prefix_a \ and @md.notes.prefix_a=~/\S+/ txt=@md.notes.prefix_a - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1795,7 +1823,7 @@ module SiSU_DB_columns t=if defined? @md.notes.prefix_b \ and @md.notes.prefix_b=~/\S+/ txt=@md.notes.prefix_b - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1817,7 +1845,7 @@ module SiSU_DB_columns t=if defined? @md.notes.suffix \ and @md.notes.suffix=~/\S+/ txt=@md.notes.suffix - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1832,7 +1860,7 @@ module SiSU_DB_columns 'src_filename' end def create_column - "#{name} VARCHAR(#{Db[:col_filename]}) NULL," + "#{name} VARCHAR(#{Db[:col_filename]}) NOT NULL," end def column_comment %{COMMENT ON COLUMN metadata_and_text.#{name} @@ -1842,7 +1870,7 @@ module SiSU_DB_columns t=if defined? @md.fns \ and @md.fns=~/\S+/ txt=@md.fns - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1863,7 +1891,7 @@ module SiSU_DB_columns end def tuple t=if defined? @md.dgst \ - and @md.dgst.class==Array \ + and @md.dgst.is_a?(Array) \ and @md.dgst[1]=~/\S+/ txt=@md.dgst[1] ["#{name}, ","'#{txt}', "] @@ -1887,7 +1915,7 @@ module SiSU_DB_columns t=if defined? @md.filesize \ and @md.filesize=~/\S+/ txt=@md.filesize - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1909,7 +1937,7 @@ module SiSU_DB_columns t=if defined? @md.wc_words \ and @md.wc_words=~/\S+/ txt=@md.wc_words - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1928,7 +1956,7 @@ module SiSU_DB_columns IS 'sisu markup source text (if shared)';} end def tuple - t=if @md.mod.inspect=~/import|update/ \ + t=if @md.opt.mod.inspect=~/import|update/ \ and FileTest.exist?(@md.fns) ["#{name}, ","'#{@sisutxt}', "] else ['',''] @@ -1954,7 +1982,7 @@ module SiSU_DB_columns IS 'document full text clean, searchable';} end def tuple - t=if @md.mod.inspect=~/import|update/ \ + t=if @md.opt.mod.inspect=~/import|update/ \ and FileTest.exist?(@md.fns) ["#{name}, ","'#{@fulltext}', "] else ['',''] @@ -1977,7 +2005,7 @@ module SiSU_DB_columns t=if defined? @md.skin_name \ and @md.skin_name=~/\S+/ txt=@md.skin_name - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -1997,10 +2025,10 @@ module SiSU_DB_columns end def tuple t=if defined? @md.dgst_skin \ - and @md.dgst_skin.class==Array \ + and @md.dgst_skin.is_a?(Array) \ and @md.dgst_skin[1]=~/\S+/ txt=@md.dgst_skin[1] - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -2022,7 +2050,7 @@ module SiSU_DB_columns t=if defined? @md.skin \ and @md.skin=~/\S+/ txt=@md.skin - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -2045,7 +2073,7 @@ module SiSU_DB_columns t=if defined? @md.links \ and @md.links=~/\S+/ txt=@md.links - special_character_escape(txt) + txt=special_character_escape(txt) ["#{name}, ","'#{txt}', "] else ['',''] end @@ -2055,7 +2083,7 @@ module SiSU_DB_columns self end end - class Column_size + class ColumnSize def document_clean # restriction not necessary 60000 end diff --git a/lib/sisu/v2/db_create.rb b/lib/sisu/v4/db_create.rb index 2676542e..e302a94f 100644 --- a/lib/sisu/v2/db_create.rb +++ b/lib/sisu/v4/db_create.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,18 +56,18 @@ sqlite =end -module SiSU_DB_create - require "#{SiSU_lib}/db_columns" # db_columns.rb - class Create < SiSU_DB_columns::Columns - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_DbCreate + require_relative 'db_columns' # db_columns.rb + class Create < SiSU_DbColumns::Columns + require_relative 'sysenv' # sysenv.rb @@dl=nil def initialize(opt,conn,file,sql_type='pg') @opt,@conn,@file,@sql_type=opt,conn,file,sql_type @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX @comment=(@sql_type=='pg') \ - ? (Comment.new(@conn,@sql_type)) \ + ? (SiSU_DbCreate::Comment.new(@conn,@sql_type)) : nil - @@dl ||=SiSU_Env::Info_env.new.digest.length + @@dl ||=SiSU_Env::InfoEnv.new.digest.length end def available DBI.available_drivers.each do |driver| @@ -79,15 +78,15 @@ module SiSU_DB_create end end def create_db - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) tell=(@sql_type=='sqlite') \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','Create Sqlite db tables in:',%{"#{@env.path.output}/sisu_sqlite.db"}) \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','Create Sqlite db tables in:',%{"#{@file}"}) : SiSU_Screen::Ansi.new(@opt.cmd,'invert','Create PG db tables in:',%{"#{Db[:name_prefix]}#{@env.path.stub_pwd}"}) - tell.colorize if @opt.cmd =~/vVM/ - SiSU_Env::System_call.new.create_pg_db(@env.path.stub_pwd) if @sql_type=='pg' #watch use of path.stub_pwd instead of stub + tell.colorize if @opt.cmd =~/[vVM]/ + SiSU_Env::SystemCall.new.create_pg_db(@env.path.stub_pwd) if @sql_type=='pg' #watch use of path.stub_pwd instead of stub end def output_dir? - dir=SiSU_Env::Info_env.new('') + dir=SiSU_Env::InfoEnv.new('') if @opt.cmd =~/d/ dir.path.webserv_stub_ensure end @@ -99,8 +98,8 @@ module SiSU_DB_create to be populated from document files create tables metadata_and_text data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_metadata_and_text=%{ CREATE TABLE metadata_and_text ( tid BIGINT PRIMARY KEY, /* title */ @@ -116,6 +115,7 @@ module SiSU_DB_create #{column.creator_author.create_column} #{column.creator_author_honorific.create_column} #{column.creator_author_nationality.create_column} + #{column.creator_editor.create_column} #{column.creator_contributor.create_column} #{column.creator_illustrator.create_column} #{column.creator_photographer.create_column} @@ -201,16 +201,17 @@ module SiSU_DB_create /* types CHAR(1) NULL, */ /* writing_focus_nationality VARCHAR(100) NULL, */ ); - }) - @comment.psql.metadata_and_text if @comment + } + @conn.execute(create_metadata_and_text) + @comment.psql.metadata_and_text if @comment end def doc_objects # create doc_objects base print %{ to be populated from documents files create tables doc_objects data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_doc_objects=%{ CREATE TABLE doc_objects ( lid BIGINT PRIMARY KEY, metadata_tid BIGINT REFERENCES metadata_and_text, @@ -219,6 +220,7 @@ module SiSU_DB_create ocns VARCHAR(6), clean TEXT NULL, body TEXT NULL, + book_idx TEXT NULL, seg VARCHAR(256) NULL, lev_an VARCHAR(1), lev SMALLINT NULL, @@ -242,16 +244,17 @@ module SiSU_DB_create digest_all CHAR(#{@@dl}), types CHAR(1) NULL ); - }) - @comment.psql.doc_objects if @comment + } + @conn.execute(create_doc_objects) + @comment.psql.doc_objects if @comment end def endnotes print %{ to be populated from document files create tables endnotes data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_endnotes=%{ CREATE TABLE endnotes ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES doc_objects, @@ -264,16 +267,17 @@ module SiSU_DB_create digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata_and_text ); - }) - @comment.psql.endnotes if @comment + } + @conn.execute(create_endnotes) + @comment.psql.endnotes if @comment end def endnotes_asterisk print %{ to be populated from document files create tables endnotes_asterisk data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_endnotes_asterisk=%{ CREATE TABLE endnotes_asterisk ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES doc_objects, @@ -286,16 +290,17 @@ module SiSU_DB_create digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata_and_text ); - }) - @comment.psql.endnotes_asterisk if @comment + } + @conn.execute(create_endnotes_asterisk) + @comment.psql.endnotes_asterisk if @comment end def endnotes_plus print %{ to be populated from document files create tables endnotes_plus data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_endnotes_plus=%{ CREATE TABLE endnotes_plus ( nid BIGINT PRIMARY KEY, document_lid BIGINT REFERENCES doc_objects, @@ -308,8 +313,9 @@ module SiSU_DB_create digest_clean CHAR(#{@@dl}), metadata_tid BIGINT REFERENCES metadata_and_text ); - }) - @comment.psql.endnotes_plus if @comment + } + @conn.execute(create_endnotes_plus) + @comment.psql.endnotes_plus if @comment end def urls # create doc_objects file links mapping print %{ @@ -317,8 +323,8 @@ module SiSU_DB_create to be populated from doc_objects files create tables urls data import through ruby transfer - } unless @opt.cmd =~/q/ - @conn.execute(%{ + } if @opt.cmd =~/[VM]/ + create_urls=%{ CREATE TABLE urls ( metadata_tid BIGINT REFERENCES metadata_and_text, plaintext varchar(512), @@ -338,13 +344,14 @@ module SiSU_DB_create markup varchar(512), sisupod varchar(512) ); - }) - @comment.psql.urls if @comment + } + @conn.execute(create_urls) + @comment.psql.urls if @comment end self end end - class Comment < SiSU_DB_columns::Columns + class Comment < SiSU_DbColumns::Columns def initialize(conn,sql_type='pg') @conn=conn if sql_type =~ /pg/; psql @@ -375,6 +382,7 @@ module SiSU_DB_create %{#{column.creator_author.column_comment}}, %{#{column.creator_author_honorific.column_comment}}, %{#{column.creator_author_nationality.column_comment}}, + %{#{column.creator_editor.column_comment}}, %{#{column.creator_contributor.column_comment}}, %{#{column.creator_illustrator.column_comment}}, %{#{column.creator_photographer.column_comment}}, @@ -482,6 +490,8 @@ module SiSU_DB_create IS 'text object - substantive text: clean, stripped of markup';}, %{COMMENT ON COLUMN doc_objects.body IS 'text object - substantive text: light html markup';}, + %{COMMENT ON COLUMN doc_objects.book_idx + IS 'book index creation information for paragraph, if provided';}, %{COMMENT ON COLUMN doc_objects.lev1 IS 'document structure, level number 1';}, %{COMMENT ON COLUMN doc_objects.lev2 diff --git a/lib/sisu/v4/db_dbi.rb b/lib/sisu/v4/db_dbi.rb new file mode 100644 index 00000000..4e8528fb --- /dev/null +++ b/lib/sisu/v4/db_dbi.rb @@ -0,0 +1,92 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: modules shared by the different db types, dbi, postgresql, + sqlite + +=end +module SiSU_DbDBI + require_relative 'db_columns' # db_columns.rb + require_relative 'db_tests' # db_tests.rb + require_relative 'db_create' # db_create.rb + require_relative 'db_select' # db_select.rb + require_relative 'db_indexes' # db_indexes.rb + require_relative 'db_drop' # db_drop.rb + require_relative 'db_remove' # db_remove.rb + require_relative 'db_load_tuple' # db_load_tuple.rb + require_relative 'db_import' # db_import.rb + class ColumnSize < SiSU_DbColumns::ColumnSize # db_columns.rb + end + class Test < SiSU_DbTests::Test # db_tests.rb + end + class Create <SiSU_DbCreate::Create # db_create.rb + end + class Case <SiSU_DbSelect::Case # db_select.rb + end + class Index <SiSU_DbIndex::Index # db_indexes.rb + end + class Drop <SiSU_DbDrop::Drop # db_drop.rb + end + class Remove <SiSU_DbRemove::Remove # db_remove.rb + end + class LoadDocuments <SiSU_DbTuple::LoadDocuments # db_load_tuple.rb + end + class LoadMetadata <SiSU_DbTuple::LoadMetadata # db_load_tuple.rb + end + class LoadUrls <SiSU_DbTuple::LoadUrls # db_update urls + end + class Import <SiSU_DbImport::Import #<SiSU_DB::ColumnSize # db_import.rb + end +end +__END__ diff --git a/lib/sisu/v2/db_drop.rb b/lib/sisu/v4/db_drop.rb index edd08345..98db3b07 100644 --- a/lib/sisu/v2/db_drop.rb +++ b/lib/sisu/v4/db_drop.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,9 +56,9 @@ sqlite =end -module SiSU_DB_drop +module SiSU_DbDrop class Drop - require "#{SiSU_lib}/response" # response.rb + require_relative 'response' # response.rb def initialize(opt,conn,db_info,sql_type='') @opt,@conn,@db_info,@sql_type=opt,conn,db_info,sql_type @ans=SiSU_Response::Response.new @@ -90,10 +89,10 @@ module SiSU_DB_drop and File.exist?(@db_info.sqlite.db) @conn.close File.unlink(@db_info.sqlite.db) - db=SiSU_Env::Info_db.new + db=SiSU_Env::InfoDb.new conn=db.sqlite.conn_sqlite3 - sdb=SiSU_DB_DBI::Create.new(@opt,conn,@db_info,@sql_type) - sdb_index=SiSU_DB_DBI::Index.new(@opt,conn,@db_info,@sql_type) + sdb=SiSU_DbDBI::Create.new(@opt,conn,@db_info,@sql_type) + sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@db_info,@sql_type) sdb.output_dir? begin sdb.create_db @@ -104,7 +103,11 @@ module SiSU_DB_drop sdb.create_table.endnotes_plus sdb.create_table.urls sdb_index.create_indexes - rescue; SiSU_Errors::Info_error.new($!,$@,'-D').error; @sdb.output_dir? + rescue + SiSU_Errors::InfoError.new($!,$@,'-D').error do + __LINE__.to_s + ':' + __FILE__ + end + sdb.output_dir? end exit else diff --git a/lib/sisu/v2/db_import.rb b/lib/sisu/v4/db_import.rb index 4237757f..ae808cf8 100644 --- a/lib/sisu/v2/db_import.rb +++ b/lib/sisu/v4/db_import.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,27 +56,29 @@ sqlite =end -module SiSU_DB_import - require "#{SiSU_lib}/db_columns" # db_columns.rb - require "#{SiSU_lib}/db_load_tuple" # db_load_tuple.rb - require "#{SiSU_lib}/db_sqltxt" # db_sqltxt.rb - require "#{SiSU_lib}/shared_html_lite" # shared_html_lite.rb +module SiSU_DbImport + require_relative 'db_columns' # db_columns.rb + require_relative 'db_load_tuple' # db_load_tuple.rb + require_relative 'db_sqltxt' # db_sqltxt.rb + require_relative 'shared_html_lite' # shared_html_lite.rb require 'sqlite3' - class Import < SiSU_DB_text::Prepare + class Import < SiSU_DbText::Prepare include SiSU_Param include SiSU_Screen @@dl=nil @@hname=nil attr_accessor :tp - def initialize(opt,conn,file,sql_type='pg') - @opt,@conn,@file,@sql_type=opt,conn,file,sql_type + def initialize(opt,conn,file_maint,sql_type='pg') + @opt,@conn,@file_maint,@sql_type=opt,conn,file_maint,sql_type @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX - @env=SiSU_Env::Info_env.new(@opt.fns) - @dal="#{@env.path.dal}" - if @opt.fns.empty? or @opt.cmd.empty?; @fnb='' + @env=SiSU_Env::InfoEnv.new(@opt.fns) + @dal="#{@env.processing_path.dal}" + @fnb=if @opt.fns.empty? \ + or @opt.cmd.empty? + '' else @md=SiSU_Param::Parameters.new(@opt).get - @fnb=@md.fnb + @md.fnb end @suffix=@opt.fns[/(?:.+?)(?:\.ssm\.sst|\.-?sst)/,1] @fnc="#{@dal}/#{@opt.fns}.content.rbm" @@ -85,44 +86,51 @@ module SiSU_DB_import @col=Hash.new('') @col[:ocn]='' @counter={} - @db=SiSU_Env::Info_db.new + @db=SiSU_Env::InfoDb.new if @sql_type=='sqlite' @driver_sqlite3=(@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \ - ? true \ + ? true : false end sql='SELECT MAX(lid) FROM doc_objects' begin @col[:lid] ||=0 @col[:lid]=@driver_sqlite3 \ - ? @conn.execute( sql ).join.to_i \ - : @conn.execute( sql ) { |x| x.fetch_all.to_s.to_i } + ? @conn.execute( sql ).join.to_i + : @conn.execute( sql ) { |x| x.fetch_all.flatten[0] } rescue puts "#{__FILE__}:#{__LINE__}" if @opt.cmd =~/M/ end @col[:lid]=0 if @col[:lid].nil? or @col[:lid].to_s.empty? sql='SELECT MAX(nid) FROM endnotes' begin - @id_n ||=0 @id_n=@driver_sqlite3 \ - ? @conn.execute( sql ).join.to_i \ - : @id_n=@conn.execute( sql ) { |x| x.fetch_all.to_s.to_i } + ? @conn.execute( sql ).join.to_i + : @id_n=@conn.execute( sql ) { |x| x.fetch_all.flatten[0] } + @id_n ||=0 rescue puts "#{__FILE__}:#{__LINE__}" if @opt.cmd =~/M/ end @id_n =0 if @col[:lid].nil? or @col[:lid].to_s.empty? @col[:lv1]=@col[:lv2]=@col[:lv3]=@col[:lv4]=@col[:lv5]=@col[:lv6]=0 - @db=SiSU_Env::Info_db.new - @@dl ||=SiSU_Env::Info_env.new.digest.length + @db=SiSU_Env::InfoDb.new + @pdf_fn=SiSU_Env::FileOp.new(@md).base_filename + @@dl ||=SiSU_Env::InfoEnv.new.digest.length end def marshal_load - require "#{SiSU_lib}/dal" # dal.rb + require_relative 'dal' # dal.rb @dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here SiSU_Screen::Ansi.new(@opt.cmd,"#{@db.psql.db}::#{@opt.fns}").puts_blue if @opt.cmd =~/vVM/ SiSU_Screen::Ansi.new(@opt.cmd,'Marshal Load',@fnc).puts_grey if @opt.cmd =~/v/ - select_first_match=%{ SELECT metadata_and_text.tid FROM metadata_and_text WHERE metadata_and_text.src_filename = '#{@opt.fns}'; } +#% + select_first_match=%{ + SELECT metadata_and_text.tid + FROM metadata_and_text + WHERE metadata_and_text.src_filename = '#{@opt.fns}' + AND metadata_and_text.language_document_char = '#{@opt.lng}' + ;} file_exist=@sql_type=~/sqlite/ \ - ? @conn.get_first_value(select_first_match) \ + ? @conn.get_first_value(select_first_match) : @conn.select_one(select_first_match) if not file_exist t_d=[] # transaction_data @@ -158,11 +166,13 @@ module SiSU_DB_import @conn.do("COMMIT") end rescue DBI::DatabaseError => e - puts "Error code: #{e.err}" - puts "Error message: #{e.errstr}" - puts "Error SQLSTATE: #{e.state}" - SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - sqlfn="#{@env.path.sql}/#{@md.fnb}.sql" + STDERR.puts "Error code: #{e.err}" + STDERR.puts "Error message: #{e.errstr}" + STDERR.puts "Error SQLSTATE: #{e.state}" + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + sqlfn="#{@env.processing_path.sql}/#{@md.fnb}.sql" sql=File.new(sqlfn,'w') t_d.each {|i| sql.puts i} p sqlfn @@ -172,8 +182,10 @@ module SiSU_DB_import puts "#{__FILE__}:#{__LINE__}" end rescue - SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - sqlfn="#{@env.path.sql}/#{@md.fnb}.sql" + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + sqlfn="#{@env.processing_path.sql}/#{@md.fnb}.sql" sql=File.new(sqlfn,'w') t_d.each {|i| sql.puts i} p sqlfn @@ -186,8 +198,8 @@ module SiSU_DB_import end else if file_exist - @db=SiSU_Env::Info_db.new - puts "\n#{@cX.grey}file #{@cX.off} #{@cX.blue}#{@opt.fns}#{@cX.off} #{@cX.grey}already exists in database#{@cX.off} #{@cX.blue}#{@db.psql.db}#{@cX.off} #{@cX.brown}update instead?#{@cX.off}" + @db=SiSU_Env::InfoDb.new + puts "\n#{@cX.grey}file #{@cX.off} #{@cX.blue}#{@opt.fns}#{@cX.off} in language code #{cX.blue}#{@opt.lng}#{cX.off} #{@cX.grey}already exists in database#{@cX.off} #{@cX.blue}#{@db.psql.db}#{@cX.off} #{@cX.brown}update instead?#{@cX.off}" end end end @@ -206,7 +218,7 @@ module SiSU_DB_import src=special_character_escape(src) @tp[:sisutxt_f],@tp[:sisutxt_i]='sisutxt, ',"'#{src}', " txt=clean_searchable_text(txt_arr) - #special_character_escape(txt) + #txt=special_character_escape(txt) @tp[:fulltxt_f],@tp[:fulltxt_i]='fulltxt, ',"'#{txt}', " end #% title @@ -215,24 +227,24 @@ module SiSU_DB_import #@tp[:title]=@md.title.full #special_character_escape(@tp[:title]) #@tp[:title_f],@tp[:title_i]='title, ',"'#{@tp[:title]}', " - sql='SELECT MAX(tid) FROM metadata_and_text' + sql='SELECT MAX(tid) FROM metadata_and_text;' begin @@id_t ||=0 id_t=if @driver_sqlite3 @conn.execute( sql ).join.to_i # { |x| id_t=x.join.to_i } - else @conn.execute( sql ) { |x| x.fetch_all.to_s.to_i } + else + @conn.execute( sql ) { |x| x.fetch_all.flatten[0] } end @@id_t=id_t if id_t rescue puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ end - @@id_t =0 if @col[:lid].nil? or @col[:lid].to_s.empty? @@id_t+=1 #bug related, needs to be performed once at start of file, but consider moving, as, placed here it means program will fail if document header lacks @title: puts %{\n#{@cX.grey}Processing file number#{@cX.off}: #{@cX.green}#{@@id_t}#{@@cX.off}} if @opt.cmd =~/vVM/ end ################ CLEAR ############## - SiSU_DB_DBI::Test.new(self,@opt).verify #% import title names, filenames (tuple) - t=SiSU_DB_tuple::Load_metadata.new(@conn,@@id_t,@md,@file) + SiSU_DbDBI::Test.new(self,@opt).verify #% import title names, filenames (tuple) + t=SiSU_DbTuple::LoadMetadata.new(@conn,@@id_t,@md,@file_maint) tuple=t.tuple tuple end @@ -254,25 +266,32 @@ module SiSU_DB_import data.obj.gsub!(/#{Mx[:gl_o]}(●)#{Mx[:gl_c]}\s*/,'\1 ') data.obj.gsub!(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'') #check @col[:seg]=@@seg - if data.of =~/para|heading|group/ # regular text what of code-blocks grouped text etc. + if data.of ==:para \ + || :heading \ + || :heading_insert \ + || :block \ + || :group # regular text what of code-blocks grouped text etc. notedata=data.obj.dup - if data.is=='heading' \ - and data.ln.inspect=~/[123]/ + #% :headings + if data.is==:heading \ + && (data.ln.inspect=~/[123]/) @col[:lev],txt,@col[:ocn],@col[:lev_an],@col[:ocnd],@col[:ocns],@col[:t_of],@col[:t_is],@col[:node],@col[:parent],@col[:digest_clean],@col[:digest_all]=data.ln,data.obj,data.ocn,data.lv,data.odv,data.osp,data.of,data.is,data.node,data.parent,'','' @col[:lid]+=1 txt=endnotes(txt).extract_any - @col[:body]=SiSU_Format_Shared::CSS_Format.new(@md,data).lev4_minus - special_character_escape(@col[:body]) - @col[:plaintext]=@col[:body].dup - @col[:plaintext]=strip_markup(@col[:plaintext]) - @col[:plaintext]=clean_searchable_text(@col[:plaintext]) - if @en[0]; @en_a,@en_z=@en[0].first,@en[0].last + body=SiSU_FormatShared::CSS_Format.new(@md,data).lev4_minus + @col[:body]=special_character_escape(body) + plaintext=@col[:body].dup + plaintext=strip_markup(plaintext) + @col[:plaintext]=clean_searchable_text(plaintext) + book_idx=data.idx ? data.idx : '' + @col[:book_idx]=clean_searchable_text(book_idx) + if @en[0] then @en_a,@en_z=@en[0].first,@en[0].last end - if @en_ast[0]; @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last + if @en_ast[0] then @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last end - if @en_pls[0]; @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last + if @en_pls[0] then @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last end - t=SiSU_DB_tuple::Load_documents.new(@conn,@col,@opt,@file) + t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint) @tuple_array << t.tuple case @col[:lev] when /1/; @col[:lv1]+=1 @@ -280,8 +299,8 @@ module SiSU_DB_import when /3/; @col[:lv3]+=1 end @col[:lev]=@col[:plaintext]=@col[:body]='' - elsif data.is=='heading' \ - and data.ln==4 + elsif data.is==:heading \ + && data.ln==4 @@seg,txt,@col[:ocn],@col[:lev_an],@col[:ocnd],@col[:ocns],@col[:t_of],@col[:t_is],@col[:node],@col[:parent],@col[:digest_clean],@col[:digest_all]=data.name,data.obj,data.ocn,data.lv,data.odv,data.osp,data.of,data.is,data.node,data.parent,'','' @col[:seg]=@@seg @col[:lv4]+=1 @@ -292,23 +311,28 @@ module SiSU_DB_import @@hname=@col[:seg].to_s else @@hname end - @env=SiSU_Env::Info_env.new(@md.fns) + @env=SiSU_Env::InfoEnv.new(@md.fns) @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" txt=endnotes(txt).extract_any - @col[:body]=SiSU_Format_Shared::CSS_Format.new(@md,data).lev4_plus - special_character_escape(@col[:body]) - @col[:plaintext]=@col[:body].dup - @col[:plaintext]=strip_markup(@col[:plaintext]) - @col[:plaintext]=clean_searchable_text(@col[:plaintext]) + body=SiSU_FormatShared::CSS_Format.new(@md,data).lev4_plus + @col[:body]=special_character_escape(body) + plaintext=@col[:body].dup + plaintext=strip_markup(plaintext) + @col[:plaintext]=clean_searchable_text(plaintext) + book_idx=data.idx ? data.idx : '' + @col[:book_idx]=clean_searchable_text(book_idx) @en_a,@en_z=@en[0].first,@en[0].last if @en[0] @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last if @en_ast[0] @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last if @en_pls[0] - t=SiSU_DB_tuple::Load_documents.new(@conn,@col,@opt,@file) + t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint) @tuple_array << t.tuple @col[:lev]=@col[:plaintext]=@col[:body]='' - elsif data.is=='heading' and data.ln==5 + elsif data.is==:heading \ + && data.ln==5 txt,@col[:ocn],@col[:lev_an],@col[:ocnd],@col[:ocns],@col[:t_of],@col[:t_is],@col[:node],@col[:parent],@col[:digest_clean],@col[:digest_all]=data.obj,data.ocn,data.lv,data.odv,data.osp,data.of,data.is,data.node,data.parent,'','' - @@seg_full=data.name if data.is=='heading' and data.ln==5 and data.name #check data.name + @@seg_full=data.name if data.is==:heading \ + && data.ln==5 \ + && data.name #check data.name @@seg ||='' #nil # watch @col[:seg]=@@seg @col[:lv5]+=1 @@ -319,23 +343,26 @@ module SiSU_DB_import @@hname=@col[:seg].to_s else @@hname end - @env=SiSU_Env::Info_env.new(@md.fns) + @env=SiSU_Env::InfoEnv.new(@md.fns) @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" txt=endnotes(txt).extract_any - @col[:body]=SiSU_Format_Shared::CSS_Format.new(@md,data).lev4_plus - special_character_escape(@col[:body]) - @col[:plaintext]=@col[:body].dup - @col[:plaintext]=strip_markup(@col[:plaintext]) - @col[:plaintext]=clean_searchable_text(@col[:plaintext]) + body=SiSU_FormatShared::CSS_Format.new(@md,data).lev4_plus + @col[:body]=special_character_escape(body) + plaintext=@col[:body].dup + plaintext=strip_markup(plaintext) + @col[:plaintext]=clean_searchable_text(plaintext) + book_idx=data.idx ? data.idx : '' + @col[:book_idx]=clean_searchable_text(book_idx) @en_a,@en_z=@en[0].first,@en[0].last if @en[0] @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last if @en_ast[0] @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last if @en_pls[0] - t=SiSU_DB_tuple::Load_documents.new(@conn,@col,@opt,@file) + t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint) @tuple_array << t.tuple @col[:lev]=@col[:plaintext]=@col[:body]='' - elsif data.is=='heading' and data.ln==6 + elsif data.is==:heading \ + && data.ln==6 txt,@col[:ocn],@col[:lev_an],@col[:ocnd],@col[:ocns],@col[:t_of],@col[:t_is],@col[:node],@col[:parent],@col[:digest_clean],@col[:digest_all]=data.obj,data.ocn,data.lv,data.odv,data.osp,data.of,data.is,data.node,data.parent,'','' - @@seg_full=data.name if data.is=='heading' and data.ln==6 and data.name #check data.name + @@seg_full=data.name if data.is==:heading && data.ln==6 && data.name #check data.name @@seg ||='' #nil # watch @col[:seg]=@@seg @col[:lv6]+=1 @@ -346,20 +373,28 @@ module SiSU_DB_import @@hname=@col[:seg].to_s else @@hname end - @env=SiSU_Env::Info_env.new(@md.fns) + @env=SiSU_Env::InfoEnv.new(@md.fns) @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" txt=endnotes(txt).extract_any - @col[:body]=SiSU_Format_Shared::CSS_Format.new(@md,data).lev4_plus - special_character_escape(@col[:body]) - @col[:plaintext]=@col[:body].dup - @col[:plaintext]=strip_markup(@col[:plaintext]) - @col[:plaintext]=clean_searchable_text(@col[:plaintext]) + body=SiSU_FormatShared::CSS_Format.new(@md,data).lev4_plus + @col[:body]=special_character_escape(body) + plaintext=@col[:body].dup + plaintext=strip_markup(plaintext) + @col[:plaintext]=clean_searchable_text(plaintext) + book_idx=data.idx ? data.idx : '' + @col[:book_idx]=clean_searchable_text(book_idx) @en_a,@en_z=@en[0].first,@en[0].last if @en[0] @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last if @en_ast[0] @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last if @en_pls[0] - t=SiSU_DB_tuple::Load_documents.new(@conn,@col,@opt,@file) + t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint) @tuple_array << t.tuple @col[:lev]=@col[:plaintext]=@col[:body]='' + #% :structure :layout :comment + elsif data.of==:structure \ + || data.of==:layout \ + || data.of==:comment + #added watch + #% : else #% regular text @col[:lid]+=1 txt='' @@ -369,11 +404,11 @@ module SiSU_DB_import @@hname=@col[:seg].to_s else @@hname end - @env=SiSU_Env::Info_env.new(@md.fns) + @env=SiSU_Env::InfoEnv.new(@md.fns) @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" txt=endnotes(txt).extract_any if @sql_type=~/pg/ \ - and txt.size > (SiSU_DB_columns::Column_size.new.document_clean - 1) #% examine pg build & remove limitation + and txt.size > (SiSU_DbColumns::ColumnSize.new.document_clean - 1) # examine pg build & remove limitation puts "\n\nTOO LARGE (TXT - see error log)\n\n" open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| error.puts("\n#{@opt.fns}\nTEXT BODY\n#{@col[:body].size} object #{@col[:ocn]} -> #{@col[:body].slice(0..500)}") @@ -383,20 +418,30 @@ module SiSU_DB_import @en_a,@en_z=@en[0].first,@en[0].last if @en[0] @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last if @en_ast[0] @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last if @en_pls[0] - @col[:body]=if data.is=='table' - SiSU_Format_Shared::CSS_Format.new(@md,data).html_table - elsif data.is=='code' - SiSU_Format_Shared::CSS_Format.new(@md,data).code - elsif defined? data.indent and data.indent =~/[1-9]/ - SiSU_Format_Shared::CSS_Format.new(@md,data).indent(data.indent) + body=if data.is==:table + SiSU_FormatShared::CSS_Format.new(@md,data).html_table + elsif data.is==:code + SiSU_FormatShared::CSS_Format.new(@md,data).code + elsif defined? data.indent \ + and defined? data.hang \ + and data.indent =~/[1-9]/ \ + and data.indent == data.hang + SiSU_FormatShared::CSS_Format.new(@md,data).indent(data.indent) + elsif defined? data.indent \ + and defined? data.hang \ + and data.hang =~/[0-9]/ \ + and data.indent != data.hang + SiSU_FormatShared::CSS_Format.new(@md,data).hang_indent(data.hang,data.indent) else - SiSU_Format_Shared::CSS_Format.new(@md,data).norm + SiSU_FormatShared::CSS_Format.new(@md,data).norm end - special_character_escape(@col[:body]) - @col[:plaintext]=@col[:body].dup - @col[:plaintext]=strip_markup(@col[:plaintext]) - @col[:plaintext]=clean_searchable_text(@col[:plaintext]) - t=SiSU_DB_tuple::Load_documents.new(@conn,@col,@opt,@file) + @col[:body]=special_character_escape(body) + plaintext=@col[:body].dup + plaintext=strip_markup(plaintext) + @col[:plaintext]=clean_searchable_text(plaintext) + book_idx=data.idx ? data.idx : '' + @col[:book_idx]=clean_searchable_text(book_idx) + t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint) @tuple_array << t.tuple @en,@en_ast,@en_pls=[],[],[] @col[:en_a]=@col[:en_z]=nil @@ -410,10 +455,10 @@ module SiSU_DB_import nr,txt,digest_clean=$1,$2.strip,0 end @id_n+=1 - special_character_escape(txt) - body=SiSU_Format_Shared::CSS_Format.new(@md,data).endnote(nr,txt) - strip_markup(txt) - if txt.size > (SiSU_DB_columns::Column_size.new.endnote_clean - 1) + txt=special_character_escape(txt) + body=SiSU_FormatShared::CSS_Format.new(@md,data).endnote(nr,txt) + txt=strip_markup(txt) + if txt.size > (SiSU_DbColumns::ColumnSize.new.endnote_clean - 1) puts "\n\nTOO LARGE (ENDNOTE - see error log)\n\n" open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| error.puts("\n#{@opt.fns}\nENDNOTE\n#{txt.size} object #{@col[:ocn]},#{@col[:ocnd]},#{@col[:ocns]} -> #{txt.slice(0..500)}") @@ -421,19 +466,20 @@ module SiSU_DB_import txt=%{\n\nLARGE TEXT BLOCK OMITTED\n\n} end if txt - en={ :type => 'endnotes', - :id => @id_n, - :lid => @col[:lid], - :nr => nr, - :txt => txt, - :body => body, - :ocn => @col[:ocn], - :ocnd => @col[:ocnd], - :ocns => @col[:ocns], - :id_t => @@id_t, - :hash => digest_clean + en={ + type: 'endnotes', + id: @id_n, + lid: @col[:lid], + nr: nr, + txt: txt, + body: body, + ocn: @col[:ocn], + ocnd: @col[:ocnd], + ocns: @col[:ocns], + id_t: @@id_t, + hash: digest_clean } - t=SiSU_DB_tuple::Load_endnotes.new(@conn,en,@opt,@file) + t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint) @tuple_array << t.tuple end end @@ -448,10 +494,10 @@ module SiSU_DB_import nr,txt,digest_clean=$1,$2.strip,0 end @id_n+=1 - special_character_escape(txt) - body=SiSU_Format_Shared::CSS_Format.new(@md,data).endnote(nr,txt) - strip_markup(txt) - if txt.size > (SiSU_DB_columns::Column_size.new.endnote_clean - 1) + txt=special_character_escape(txt) + body=SiSU_FormatShared::CSS_Format.new(@md,data).endnote(nr,txt) + txt=strip_markup(txt) + if txt.size > (SiSU_DbColumns::ColumnSize.new.endnote_clean - 1) puts "\n\nTOO LARGE (ENDNOTE - see error log)\n\n" open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| error.puts("\n#{@opt.fns}\nENDNOTE\n#{txt.size} object #{@col[:ocn]},#{@col[:ocnd]},#{@col[:ocns]} -> #{txt.slice(0..500)}") @@ -459,19 +505,20 @@ module SiSU_DB_import txt=%{\n\nLARGE TEXT BLOCK OMITTED\n\n} end if txt - en={ :type => 'endnotes_asterisk', - :id => @id_n, - :lid => @col[:lid], - :nr => nr, - :txt => txt, - :body => body, - :ocn => @col[:ocn], - :ocnd => @col[:ocnd], - :ocns => @col[:ocns], - :id_t => @@id_t, - :hash => digest_clean + en={ + type: 'endnotes_asterisk', + id: @id_n, + lid: @col[:lid], + nr: nr, + txt: txt, + body: body, + ocn: @col[:ocn], + ocnd: @col[:ocnd], + ocns: @col[:ocns], + id_t: @@id_t, + hash: digest_clean } - t=SiSU_DB_tuple::Load_endnotes.new(@conn,en,@opt,@file) + t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint) @tuple_array << t.tuple end end @@ -486,10 +533,10 @@ module SiSU_DB_import nr,txt,digest_clean=$1,$2.strip,0 end @id_n+=1 - special_character_escape(txt) - body=SiSU_Format_Shared::CSS_Format.new(@md,data).endnote(nr,txt) - strip_markup(txt) - if txt.size > (SiSU_DB_columns::Column_size.new.endnote_clean - 1) + txt=special_character_escape(txt) + body=SiSU_FormatShared::CSS_Format.new(@md,data).endnote(nr,txt) + txt=strip_markup(txt) + if txt.size > (SiSU_DbColumns::ColumnSize.new.endnote_clean - 1) puts "\n\nTOO LARGE (ENDNOTE - see error log)\n\n" open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| error.puts("\n#{@opt.fns}\nENDNOTE\n#{txt.size} object #{@col[:ocn]},#{@col[:ocnd]},#{@col[:ocns]} -> #{txt.slice(0..500)}") @@ -497,19 +544,20 @@ module SiSU_DB_import txt=%{\n\nLARGE TEXT BLOCK OMITTED\n\n} end if txt - en={ :type => 'endnotes_plus', - :id => @id_n, - :lid => @col[:lid], - :nr => nr, - :txt => txt, - :body => body, - :ocn => @col[:ocn], - :ocnd => @col[:ocnd], - :ocns => @col[:ocns], - :id_t => @@id_t, - :hash => digest_clean + en={ + type: 'endnotes_plus', + id: @id_n, + lid: @col[:lid], + nr: nr, + txt: txt, + body: body, + ocn: @col[:ocn], + ocnd: @col[:ocnd], + ocns: @col[:ocns], + id_t: @@id_t, + hash: digest_clean } - t=SiSU_DB_tuple::Load_endnotes.new(@conn,en,@opt,@file) + t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint) @tuple_array << t.tuple end end @@ -518,7 +566,10 @@ module SiSU_DB_import end end end - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end @tuple_array @@ -537,28 +588,28 @@ module SiSU_DB_import end def standard x=(@txt =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/) \ - ? @txt.scan(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/) \ + ? @txt.scan(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/) : nil end def asterisk x=(@txt =~/#{Mx[:en_b_o]}\*.+?#{Mx[:en_b_c]}/) \ - ? @txt.scan(/#{Mx[:en_b_o]}[*](\d+).+?#{Mx[:en_b_c]}/) \ + ? @txt.scan(/#{Mx[:en_b_o]}[*](\d+).+?#{Mx[:en_b_c]}/) : nil end def plus x=(@txt =~/#{Mx[:en_b_o]}\+.+?#{Mx[:en_b_c]}/) \ - ? @txt.scan(/#{Mx[:en_b_o]}[+](\d+).+?#{Mx[:en_b_c]}/) \ + ? @txt.scan(/#{Mx[:en_b_o]}[+](\d+).+?#{Mx[:en_b_c]}/) : nil end def clean_text(base_url=nil) - if base_url - @txt.gsub!(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}) - @txt.gsub!(/#{Mx[:en_b_o]}([*]\d+).+?#{Mx[:en_b_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}) - @txt.gsub!(/#{Mx[:en_b_o]}([+]\d+).+?#{Mx[:en_b_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}) + @txt=if base_url + @txt.gsub(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}). + gsub(/#{Mx[:en_b_o]}([*]\d+).+?#{Mx[:en_b_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}). + gsub(/#{Mx[:en_b_o]}([+]\d+).+?#{Mx[:en_b_c]}/,%{<sup><a href="#{base_url}#_\\1" name="-\\1">\\1</a></sup>}) else - @txt.gsub!(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/,'<sup>\1</sup>') - @txt.gsub!(/#{Mx[:en_b_o]}([*]\d+).+?#{Mx[:en_b_c]}/,'<sup>\1</sup>') - @txt.gsub!(/#{Mx[:en_b_o]}([+]\d+).+?#{Mx[:en_b_c]}/,'<sup>\1</sup>') + @txt.gsub(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:en_b_o]}([*]\d+).+?#{Mx[:en_b_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:en_b_o]}([+]\d+).+?#{Mx[:en_b_c]}/,'<sup>\1</sup>') end @txt end @@ -581,7 +632,7 @@ module SiSU_DB_import def db_import_urls(dbi_unit,content) #% import documents OID - populate database begin @fnc=content - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) base=@env.url.root out=@env.path.output f,u={},{} @@ -589,57 +640,71 @@ module SiSU_DB_import or @fnb.nil? p 'file output path error' #remove end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:plain]}")==true - f[:txt],u[:txt]='plaintext,', "'#{base}/#{@fnb}/#{@md.fn[:plain]}'," - end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:toc]}")==true - f[:html_toc],u[:html_toc]='html_toc,', "'#{base}/#{@fnb}/#{@md.fn[:toc]}'," + if FileTest.file?("#{@md.file.output_path.txt.dir}/#{@md.file.base_filename.txt}")==true + f[:txt],u[:txt]='plaintext,', "'#{@md.file.output_path.txt.url}/#{@md.file.base_filename.txt}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:doc]}")==true - f[:html_doc],u[:html_doc]='html_doc,', "'#{base}/#{@fnb}/#{@md.fn[:doc]}'," + if FileTest.file?("#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_seg}")==true + f[:html_toc],u[:html_toc]='html_toc,', "'#{@md.file.output_path.html_seg.url}/#{@md.file.base_filename.html_seg}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:xhtml]}")==true - f[:xhtml],u[:xhtml]='xhtml,', "'#{base}/#{@fnb}/#{@md.fn[:xhtml]}'," + if FileTest.file?("#{@md.file.output_path.html_scroll.dir}/#{@md.file.base_filename.html_scroll}")==true + f[:html_doc],u[:html_doc]='html_doc,', "'#{@md.file.output_path.html_scroll.url}/#{@md.file.base_filename.html_scroll}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:sax]}")==true - f[:xml_sax],u[:xml_sax]='xml_sax,', "'#{base}/#{@fnb}/#{@md.fn[:sax]}'," + if FileTest.file?("#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}")==true + f[:xhtml],u[:xhtml]='xhtml,', "'#{@md.file.output_path.xhtml.url}/#{@md.file.base_filename.xhtml}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:dom]}")==true - f[:xml_dom],u[:xml_dom]='xml_dom,', "'#{base}/#{@fnb}/#{@md.fn[:dom]}'," + if FileTest.file?("#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}")==true + f[:xml_sax],u[:xml_sax]='xml_sax,', "'#{@md.file.output_path.xml_sax.url}/#{@md.file.base_filename.xml_sax}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:odf]}")==true - f[:odf],u[:odf]='odf,', "'#{base}/#{@fnb}/#{@md.fn[:odf]}'," + if FileTest.file?("#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}")==true + f[:xml_dom],u[:xml_dom]='xml_dom,', "'#{@md.file.output_path.xml_dom.url}/#{@md.file.base_filename.xml_dom}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:pdf_p]}")==true - f[:pdf_p],u[:pdf_p]='pdf_p,', "'#{base}/#{@fnb}/#{@md.fn[:pdf_p]}'," + if FileTest.file?("#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}")==true + f[:epub],u[:epub]='epub,', "'#{@md.file.output_path.epub.url}/#{@md.file.base_filename.epub}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:pdf_l]}")==true - f[:pdf_l],u[:pdf_l]='pdf_l,', "'#{base}/#{@fnb}/#{@md.fn[:pdf_l]}'," + if FileTest.file?("#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}")==true + f[:odf],u[:odf]='odf,', "'#{@md.file.output_path.odt.url}/#{@md.file.base_filename.odt}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:concordance]}")==true - f[:concordance],u[:concordance]='concordance,', "'#{base}/#{@fnb}/#{@md.fn[:concordance]}'," + 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_p_letter}")==true + f[:pdf_p],u[:pdf_p]='pdf_p,', "'#{@md.file.output_path.pdf.url}/#{@pdf_fn.pdf_p_a4}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.tex")==true - f[:latex_p],u[:latex_p]='latex_p,', "'#{base}/#{@fnb}/#{@opt.fns}.tex'," + if 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_l_letter}")==true + f[:pdf_l],u[:pdf_l]='pdf_l,', "'#{@md.file.output_path.pdf.url}/#{@pdf_fn.pdf_l_a4}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.landscape.tex")==true - f[:latex_l],u[:latex_l]='latex_l,', "'#{base}/#{@fnb}/#{@opt}.fns}.landscape.tex'," + if FileTest.file?("#{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}")==true + f[:concordance],u[:concordance]='concordance,', "'#{@md.file.output_path.html_concordance.url}/#{@md.file.base_filename.html_concordance}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:digest]}")==true - f[:digest],u[:digest]='digest,', "'#{base}/#{@fnb}/#{@md.fn[:digest]}'," + #if FileTest.file?("#{@md.file.output_path.x.dir}/#{@md.file.base_filename.x}")==true + # f[:latex_p],u[:latex_p]='latex_p,', "'#{@md.file.output_path.x.url}/#{@md.file.base_filename.x}'," + #end + ##if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.tex")==true + ## f[:latex_p],u[:latex_p]='latex_p,', "'#{base}/#{@fnb}/#{@opt.fns}.tex'," + ##end + #if FileTest.file?("#{@md.file.output_path.x.dir}/#{@md.file.base_filename.x}")==true + # f[:latex_l],u[:latex_l]='latex_l,', "'#{@md.file.output_path.x.url}/#{@md.file.base_filename.x}'," + #end + ##if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.landscape.tex")==true + ## f[:latex_l],u[:latex_l]='latex_l,', "'#{base}/#{@fnb}/#{@opt}.fns}.landscape.tex'," + ##end + if FileTest.file?("#{@md.file.output_path.digest.dir}/#{@md.file.base_filename.digest}")==true + f[:digest],u[:digest]='digest,', "'#{@md.file.output_path.digest.url}/#{@md.file.base_filename.digest}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@md.fn[:manifest]}")==true #revisit, was to be text, this is html - f[:manifest],u[:manifest]='manifest,', "'#{base}/#{@fnb}/#{@md.fn[:manifest]}'," + if FileTest.file?("#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}")==true #revisit, was to be text, this is html + f[:manifest],u[:manifest]='manifest,', "'#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.meta")==true - f[:markup],u[:markup]='markup,', "'#{base}/#{@fnb}/#{@opt.fns}.meta'," + if FileTest.file?("#{@md.file.output_path.src.dir}/#{@md.file.base_filename.src}")==true + f[:markup],u[:markup]='markup,', "'#{@md.file.output_path.src.url}/#{@md.file.base_filename.src}'," end - if FileTest.file?("#{out}/#{@fnb}/#{@opt.fns}.tgz")==true - f[:sisupod],u[:sisupod]='sisupod,', "'#{base}/#{@fnb}/#{@opt.fns}.tgz'," + if FileTest.file?("#{@md.file.output_path.sisupod.dir}/#{@md.file.base_filename.sisupod}")==true + f[:sisupod],u[:sisupod]='sisupod,', "'#{@md.file.output_path.sisupod.url}/#{@md.file.base_filename.sisupod}'," end - t=SiSU_DB_tuple::Load_urls.new(@conn,f,u,@@id_t,@opt,@file) + t=SiSU_DbTuple::LoadUrls.new(@conn,f,u,@@id_t,@opt,@file_maint) tuple=t.tuple - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end tuple diff --git a/lib/sisu/v2/db_indexes.rb b/lib/sisu/v4/db_indexes.rb index abd90409..99eb65cc 100644 --- a/lib/sisu/v2/db_indexes.rb +++ b/lib/sisu/v4/db_indexes.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,7 +56,7 @@ sqlite =end -module SiSU_DB_index +module SiSU_DbIndex class Index # create documents Indexes def initialize(opt,conn='',sql_type='') def initialize(opt,conn,file,sql_type='') @opt,@conn,@file,@sql_type=opt,conn,file,sql_type @@ -71,7 +70,7 @@ module SiSU_DB_index end end def base - print "\n create documents common indexes\n" unless @opt.cmd =~/q/ + print "\n create documents common indexes\n" if @opt.cmd =~/[VM]/ sql_arr=[ %{CREATE INDEX idx_ocn ON doc_objects(ocn);}, %{CREATE INDEX idx_digest_clean ON doc_objects(digest_clean);}, @@ -93,12 +92,13 @@ module SiSU_DB_index %{CREATE INDEX idx_title ON metadata_and_text(title);}, %{CREATE INDEX idx_author ON metadata_and_text(creator_author);}, %{CREATE INDEX idx_filename ON metadata_and_text(src_filename);}, + %{CREATE INDEX idx_language ON metadata_and_text(language_document_char);}, %{CREATE INDEX idx_topics ON metadata_and_text(classify_topic_register)}, ] conn_execute_array(sql_arr) end def text - print "\n create documents TEXT indexes\n" unless @opt.cmd =~/q/ + print "\n create documents TEXT indexes\n" if @opt.cmd =~/[VM]/ sql_arr=[ %{CREATE INDEX idx_clean ON doc_objects(clean);}, %{CREATE INDEX idx_endnote ON endnotes(clean);} diff --git a/lib/sisu/v2/db_load_tuple.rb b/lib/sisu/v4/db_load_tuple.rb index f1af99a0..f55ce66c 100644 --- a/lib/sisu/v2/db_load_tuple.rb +++ b/lib/sisu/v4/db_load_tuple.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,13 +56,13 @@ sqlite =end -module SiSU_DB_tuple - require "#{SiSU_lib}/db_columns" # db_columns.rb - class Load_documents - require "#{SiSU_lib}/param" # param.rb +module SiSU_DbTuple + require_relative 'db_columns' # db_columns.rb + class LoadDocuments + require_relative 'param' # param.rb include SiSU_Param - def initialize(conn,col,opt,file) - @conn,@col,@opt,@file=conn,col,opt,file + def initialize(conn,col,opt,file_maint) + @conn,@col,@opt,@file_maint=conn,col,opt,file_maint @col[:lev]=@col[:lev].to_i unless @col[:lev]=~/^[1-6]/ \ or @col[:lev]==1 \ @@ -79,22 +78,22 @@ module SiSU_DB_tuple end def tuple #% import line sql_entry=if @col[:en_a] - "INSERT INTO doc_objects (lid, metadata_tid, lev, lev_an, clean, body, ocn, ocnd, ocns, seg, lev1, lev2, lev3, lev4, lev5, lev6, en_a, en_z, t_of, t_is, node, parent, digest_clean, digest_all) " + - "VALUES (#{@col[:lid]}, #{@col[:tid]}, #{@col[:lev]}, '#{@col[:lev_an]}', '#{@col[:plaintext]}', '#{@col[:body]}', '#{@col[:ocn]}', '#{@col[:ocnd]}', '#{@col[:ocns]}', '#{@col[:seg]}', '#{@col[:lv1]}', '#{@col[:lv2]}', '#{@col[:lv3]}', '#{@col[:lv4]}', '#{@col[:lv5]}', '#{@col[:lv6]}', '#{@col[:en_a]}', '#{@col[:en_z]}', '#{@col[:t_of]}', '#{@col[:t_is]}', '#{@col[:node]}', '#{@col[:parent]}', '#{@col[:digest_clean]}', '#{@col[:digest_all]}');" + "INSERT INTO doc_objects (lid, metadata_tid, lev, lev_an, clean, body, book_idx, ocn, ocnd, ocns, seg, lev1, lev2, lev3, lev4, lev5, lev6, en_a, en_z, t_of, t_is, node, parent, digest_clean, digest_all) " + + "VALUES (#{@col[:lid]}, #{@col[:tid]}, #{@col[:lev]}, '#{@col[:lev_an]}', '#{@col[:plaintext]}', '#{@col[:body]}', '#{@col[:book_idx]}', '#{@col[:ocn]}', '#{@col[:ocnd]}', '#{@col[:ocns]}', '#{@col[:seg]}', '#{@col[:lv1]}', '#{@col[:lv2]}', '#{@col[:lv3]}', '#{@col[:lv4]}', '#{@col[:lv5]}', '#{@col[:lv6]}', '#{@col[:en_a]}', '#{@col[:en_z]}', '#{@col[:t_of]}', '#{@col[:t_is]}', '#{@col[:node]}', '#{@col[:parent]}', '#{@col[:digest_clean]}', '#{@col[:digest_all]}');" else - "INSERT INTO doc_objects (lid, metadata_tid, lev, lev_an, clean, body, ocn, ocnd, ocns, seg, lev1, lev2, lev3, lev4, lev5, lev6, t_of, t_is, node, parent, digest_clean, digest_all) " + - "VALUES (#{@col[:lid]}, #{@col[:tid]}, #{@col[:lev]}, '#{@col[:lev_an]}', '#{@col[:plaintext]}', '#{@col[:body]}', '#{@col[:ocn]}', '#{@col[:ocnd]}', '#{@col[:ocns]}', '#{@col[:seg]}', '#{@col[:lv1]}', '#{@col[:lv2]}', '#{@col[:lv3]}', '#{@col[:lv4]}', '#{@col[:lv5]}', '#{@col[:lv6]}', '#{@col[:t_of]}', '#{@col[:t_is]}', '#{@col[:node]}', '#{@col[:parent]}', '#{@col[:digest_clean]}', '#{@col[:digest_all]}');" + "INSERT INTO doc_objects (lid, metadata_tid, lev, lev_an, clean, body, book_idx, ocn, ocnd, ocns, seg, lev1, lev2, lev3, lev4, lev5, lev6, t_of, t_is, node, parent, digest_clean, digest_all) " + + "VALUES (#{@col[:lid]}, #{@col[:tid]}, #{@col[:lev]}, '#{@col[:lev_an]}', '#{@col[:plaintext]}', '#{@col[:body]}', '#{@col[:book_idx]}', '#{@col[:ocn]}', '#{@col[:ocnd]}', '#{@col[:ocns]}', '#{@col[:seg]}', '#{@col[:lv1]}', '#{@col[:lv2]}', '#{@col[:lv3]}', '#{@col[:lv4]}', '#{@col[:lv5]}', '#{@col[:lv6]}', '#{@col[:t_of]}', '#{@col[:t_is]}', '#{@col[:node]}', '#{@col[:parent]}', '#{@col[:digest_clean]}', '#{@col[:digest_all]}');" end if @opt.cmd =~/M/ if @opt.cmd =~/V/ - puts @file.inspect + puts @file_maint.inspect puts sql_entry end - @file.puts sql_entry + @file_maint.puts sql_entry else if @opt.cmd =~/V/ puts sql_entry - @file.puts sql_entry + @file_maint.puts sql_entry end end if @opt.cmd =~/v/ @@ -114,10 +113,10 @@ module SiSU_DB_tuple sql_entry end end - class Load_metadata #< SiSU_DB_columns::Columns - def initialize(conn,id,md,file) - @conn,@id,@opt,@file=conn,id,md,file - @tp=SiSU_DB_columns::Columns.new(md) + class LoadMetadata #< SiSU_DbColumns::Columns + def initialize(conn,id,md,file_maint) + @conn,@id,@md,@file_maint=conn,id,md,file_maint + @tp=SiSU_DbColumns::Columns.new(md) end def tuple sql_entry="INSERT INTO metadata_and_text ( @@ -132,6 +131,7 @@ module SiSU_DB_tuple #{@tp.column.creator_author.tuple[0]} #{@tp.column.creator_author_honorific.tuple[0]} #{@tp.column.creator_author_nationality.tuple[0]} +#{@tp.column.creator_editor.tuple[0]} #{@tp.column.creator_contributor.tuple[0]} #{@tp.column.creator_illustrator.tuple[0]} #{@tp.column.creator_photographer.tuple[0]} @@ -216,6 +216,7 @@ tid) #{@tp.column.creator_author.tuple[1]} #{@tp.column.creator_author_honorific.tuple[1]} #{@tp.column.creator_author_nationality.tuple[1]} +#{@tp.column.creator_editor.tuple[1]} #{@tp.column.creator_contributor.tuple[1]} #{@tp.column.creator_illustrator.tuple[1]} #{@tp.column.creator_photographer.tuple[1]} @@ -288,41 +289,41 @@ tid) #{@tp.column.links.tuple[1]} #{@id} );" - if @opt.cmd =~/M/ - puts "maintenance mode on: creating sql transaction file (for last transaction set (document) only):\n\t#{@file.inspect}" - @file.puts sql_entry + if @md.opt.cmd =~/M/ + puts "maintenance mode on: creating sql transaction file (for last transaction set (document) only):\n\t#{@file_maint.inspect}" + @file_maint.puts sql_entry else - @file.puts sql_entry if @opt.cmd =~/V/ + @file_maint.puts sql_entry if @md.opt.cmd =~/V/ end sql_entry end end - class Load_urls - def initialize(conn,f,u,id,opt,file) - @conn,@f,@u,@id,@opt,@file=conn,f,u,id,opt,file + class LoadUrls + def initialize(conn,f,u,id,opt,file_maint) + @conn,@f,@u,@id,@opt,@file_maint=conn,f,u,id,opt,file_maint end def tuple sql_entry="INSERT INTO urls (#{@f[:txt]} #{@f[:html_toc]} #{@f[:html_doc]} #{@f[:xhtml]} #{@f[:xml_sax]} #{@f[:xml_dom]} #{@f[:odf]} #{@f[:pdf_p]} #{@f[:pdf_l]} #{@f[:concordance]} #{@f[:latex_p]} #{@f[:latex_l]} #{@f[:manifest]} #{@f[:digest]} #{@f[:markup]} #{@f[:sisupod]} metadata_tid) " + "VALUES (#{@u[:txt]} #{@u[:html_toc]} #{@u[:html_doc]} #{@u[:xhtml]} #{@u[:xml_sax]} #{@u[:xml_dom]} #{@u[:odf]} #{@u[:pdf_p]} #{@u[:pdf_l]} #{@u[:concordance]} #{@u[:latex_p]} #{@u[:latex_l]} #{@u[:manifest]} #{@u[:digest]} #{@u[:markup]} #{@u[:sisupod]} #{@id});" if @opt.cmd =~/M/ - @file.puts sql_entry + @file_maint.puts sql_entry else - @file.puts sql_entry if @opt.cmd =~/V/ + @file_maint.puts sql_entry if @opt.cmd =~/V/ end sql_entry end end - class Load_endnotes - def initialize(conn,en,opt,file) - @conn,@en,@opt,@file=conn,en,opt,file + class LoadEndnotes + def initialize(conn,en,opt,file_maint) + @conn,@en,@opt,@file_maint=conn,en,opt,file_maint end def tuple sql_entry="INSERT INTO #{@en[:type]} (nid, document_lid, nr, clean, body, ocn, ocnd, ocns, metadata_tid, digest_clean) " + "VALUES ('#{@en[:id]}', '#{@en[:lid]}', '#{@en[:nr]}', '#{@en[:txt]}', '#{@en[:body]}', '#{@en[:ocn]}', '#{@en[:ocnd]}', '#{@en[:ocns]}', '#{@en[:id_t]}', '#{@en[:hash]}');" if @opt.cmd =~/M/ - @file.puts sql_entry + @file_maint.puts sql_entry else - @file.puts sql_entry if @opt.cmd =~/V/ + @file_maint.puts sql_entry if @opt.cmd =~/V/ end sql_entry end diff --git a/lib/sisu/v2/db_remove.rb b/lib/sisu/v4/db_remove.rb index 364f5fc7..3371a9be 100644 --- a/lib/sisu/v2/db_remove.rb +++ b/lib/sisu/v4/db_remove.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,24 +56,36 @@ sqlite =end -module SiSU_DB_remove +module SiSU_DbRemove class Remove def initialize(opt,conn,file,sql_type) @opt,@conn,@file,@sql_type=opt,conn,file,sql_type @md=SiSU_Param::Parameters.new(@opt).get @fnb=@md.fnb - @db=SiSU_Env::Info_db.new + @db=SiSU_Env::InfoDb.new end def remove driver_sqlite3=if @sql_type=='sqlite' (@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \ - ? true \ + ? true : false end del_id=if driver_sqlite3 - @conn.get_first_value(%{ SELECT tid FROM metadata_and_text WHERE src_filename = '#{@opt.fns}'; }).to_i + remove_selected=%{ + SELECT tid + FROM metadata_and_text + WHERE src_filename = '#{@opt.fns}' + AND metadata_and_text.language_document_char = '#{@opt.lng}' + ;} + @conn.get_first_value(remove_selected).to_i else - x=@conn.select_one(%{ SELECT metadata_and_text.tid FROM metadata_and_text WHERE metadata_and_text.src_filename = '#{@opt.fns}'; }) + remove_selected=%{ + SELECT metadata_and_text.tid + FROM metadata_and_text + WHERE metadata_and_text.src_filename = '#{@opt.fns}' + AND metadata_and_text.language_document_char = '#{@opt.lng}' + ;} + x=@conn.select_one(remove_selected) x ? (x.join.to_i) : nil end if del_id diff --git a/lib/sisu/v2/db_select.rb b/lib/sisu/v4/db_select.rb index 04d12acb..a013c00b 100644 --- a/lib/sisu/v2/db_select.rb +++ b/lib/sisu/v4/db_select.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,20 +56,20 @@ sqlite =end -module SiSU_DB_select +module SiSU_DbSelect class Case def initialize(opt,conn='',sql_type='pg') @opt,@conn,@sql_type=opt,conn,sql_type - @db=SiSU_Env::Info_db.new - @file=sql_maintenance_file - @sdb=SiSU_DB_DBI::Create.new(@opt,@conn,@file,@sql_type) # db_dbi.rb - @sdb_index=SiSU_DB_DBI::Index.new(@opt,@conn,@file,@sql_type) # db_dbi.rb - @sdb_no=SiSU_DB_DBI::Drop.new(@opt,@conn,@db,@sql_type) # db_dbi.rb + @db=SiSU_Env::InfoDb.new + @file_maint=sql_maintenance_file + @sdb=SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type) # db_dbi.rb + @sdb_index=SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type) # db_dbi.rb + @sdb_no=SiSU_DbDBI::Drop.new(@opt,@conn,@db,@sql_type) # db_dbi.rb if @opt.mod.inspect =~/update|import/ - @sdb_import=SiSU_DB_DBI::Import.new(@opt,@conn,@file,@sql_type) - @sdb_remove_doc=SiSU_DB_DBI::Remove.new(@opt,@conn,@file,@sql_type) + @sdb_import=SiSU_DbDBI::Import.new(@opt,@conn,@file_maint,@sql_type) + @sdb_remove_doc=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type) elsif @opt.mod.inspect =~/remove/ - @sdb_remove_doc=SiSU_DB_DBI::Remove.new(@opt,@conn,@file,@sql_type) + @sdb_remove_doc=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type) end end def db_exist? @@ -79,9 +78,9 @@ module SiSU_DB_select puts %{no connection with #{@sql_type} database established, createdb "#{@db.sqlite.db}"?} exit end - if @conn.class==NilClass + if @conn.is_a?(NilClass) db=@sql_type=='sqlite' \ - ? @db.sqlite.db \ + ? @db.sqlite.db : @db.psql.db puts %{no connection with #{@sql_type} database established, createdb "#{db}"?} exit @@ -90,12 +89,14 @@ module SiSU_DB_select def sql_maintenance_file file=if @opt.inspect =~/M/ x=if @opt.fns and not @opt.fns.empty? - @env=SiSU_Env::Info_env.new(@opt.fns) if @opt.fns - puts "\n#{@env.path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.cmd =~/M/ - @db=SiSU_Env::Info_db.new - @job="sqlite3 #{@db.sqlite.db} < #{@env.path.sqlite}/#{@opt.fns}.sql" - File.new("#{@env.path.sqlite}/#{@opt.fns}.sql",'w+') - elsif @opt.fns and @opt.fns.inspect =~/create/; nil #sort variations later + @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns + puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.cmd =~/M/ + @db=SiSU_Env::InfoDb.new + @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql" + File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') + elsif @opt.fns \ + and @opt.fns.inspect =~/create/ + nil #sort variations later else nil end else nil @@ -108,63 +109,66 @@ module SiSU_DB_select when /^--createdb$/ @sdb.output_dir? begin - @sdb.create_db + @sdb.create_db rescue; @sdb.output_dir? end when /^--(?:init(?:ialize)?|create(?:all)?)$/ @sdb.output_dir? begin - @sdb.create_table.metadata_and_text - @sdb.create_table.doc_objects - @sdb.create_table.endnotes - @sdb.create_table.endnotes_asterisk - @sdb.create_table.endnotes_plus - @sdb.create_table.urls - @sdb_index.create_indexes - rescue; SiSU_Errors::Info_error.new($!,$@,'-D').error; @sdb.output_dir? + @sdb.create_table.metadata_and_text + @sdb.create_table.doc_objects + @sdb.create_table.endnotes + @sdb.create_table.endnotes_asterisk + @sdb.create_table.endnotes_plus + @sdb.create_table.urls + @sdb_index.create_indexes + rescue + SiSU_Errors::InfoError.new($!,$@,'-D').error; @sdb.output_dir? do + __LINE__.to_s + ':' + __FILE__ + end end when /^--createtables?$/ @sdb.output_dir? begin - @sdb.create_table.metadata_and_text - @sdb.create_table.doc_objects - @sdb.create_table.endnotes - @sdb.create_table.endnotes_asterisk - @sdb.create_table.endnotes_plus - @sdb.create_table.urls - @sdb_index.create_indexes + @sdb.create_table.metadata_and_text + @sdb.create_table.doc_objects + @sdb.create_table.endnotes + @sdb.create_table.endnotes_asterisk + @sdb.create_table.endnotes_plus + @sdb.create_table.urls + @sdb_index.create_indexes rescue; @sdb.output_dir? end when /^--recreate$/ @sdb.output_dir? begin - @sdb_no.drop.tables - @sdb.create_table.metadata_and_text - @sdb.create_table.doc_objects - @sdb.create_table.endnotes - @sdb.create_table.endnotes_asterisk - @sdb.create_table.endnotes_plus - @sdb.create_table.urls - @sdb_index.create_indexes + @sdb_no.drop.tables + @sdb.create_table.metadata_and_text + @sdb.create_table.doc_objects + @sdb.create_table.endnotes + @sdb.create_table.endnotes_asterisk + @sdb.create_table.endnotes_plus + @sdb.create_table.urls + @sdb_index.create_indexes rescue; @sdb.output_dir? end when /^--cr(eate)?lex$/ @sdb.output_dir? begin - @sdb.create_table.doc_objects + @sdb.create_table.doc_objects rescue; @sdb.output_dir? end when /^--cr(eate)?metadata$/ @sdb.output_dir? begin - @sdb.create_table.metadata_and_text + @sdb.create_table.metadata_and_text rescue; @sdb.output_dir? end when /^--import$/ db_exist? @sdb_import.marshal_load tell=case @sql_type - when /sqlite/; SiSU_Screen::Ansi.new(@opt.cmd,"sqlite #{@db.sqlite.db} database?") + when /sqlite/; SiSU_Screen::Ansi.new(@opt.cmd,"sqlite3 #{@db.sqlite.db} database?") when /pg/; SiSU_Screen::Ansi.new(@opt.cmd,"pgaccess or psql #{@db.psql.db} database?") else '???' end @@ -173,14 +177,19 @@ module SiSU_DB_select db_exist? @sdb_remove_doc.remove @sdb_import.marshal_load - SiSU_Screen::Ansi.new(@opt.cmd,"pgaccess or psql #{@db.psql.db} database?").puts_grey if @opt.cmd =~/v/ + tell=case @sql_type + when /sqlite/; SiSU_Screen::Ansi.new(@opt.cmd,"sqlite3 #{@db.sqlite.db} database?") + when /pg/; SiSU_Screen::Ansi.new(@opt.cmd,"pgaccess or psql #{@db.psql.db} database?") + else '???' + end + tell.puts_grey if @opt.cmd =~/v/ when /^--remove$/ db_exist? @sdb_remove_doc.remove when /^--index$/ db_exist? @sdb_index.create_indexes - when /^droptable(s)?$/ + when /^--droptable(s)?$/ db_exist? @sdb_no.drop.tables when /^--dropindex(es)?$/ @@ -190,16 +199,21 @@ module SiSU_DB_select db_exist? @sdb_no.drop.tables when /^--(?:db=)?(?:(?:sq)?lite|pg(?:sql)?|my(?:sql)?)$/ + when /^--(?:v\d+|dev)$/ else - help=SiSU_Help::Help.new - help.summary - help.commands + #help=SiSU_Help::Help.new + #help.summary + #help.commands end if @opt.cmd =~/M/ \ and @opt.cmd =~/d/ puts @job end end + if @opt.act[:psql][:set]==:on \ + and @opt.mod.inspect !~/--(?:createdb|init(?:ialize)?|create(?:all)?|createtables?|recreate|cr(eate)?lex|cr(eate)?metadata|import|update|remove|index|droptable(s)?|dropindex(es)?|dropall|drop)/ + SiSU_Screen::Ansi.new(@opt.cmd,"--pg requires further instruction").warn unless @opt.cmd =~/[q]/ + end begin rescue; @sdb.output_dir? end diff --git a/lib/sisu/v2/db_sqltxt.rb b/lib/sisu/v4/db_sqltxt.rb index e1fbed29..53c15ed3 100644 --- a/lib/sisu/v2/db_sqltxt.rb +++ b/lib/sisu/v4/db_sqltxt.rb @@ -1,15 +1,14 @@ -# coding: utf-8 +# 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 Ralph Amissah All Rights Reserved. + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -24,7 +23,7 @@ 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 + 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 @@ -33,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -49,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,49 +55,48 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_DB_text +module SiSU_DbText class Prepare def special_character_escape(str) - str.gsub!(/'/,"''") #string.gsub!(/'/,"\047") #string.gsub!(/'/,"\\'") - str.gsub!(/(\\)/m,'\1\1') #ok but with warnings, double backslash on sqlite #str.gsub!(/[\\]/m,'\\x5C') #ok but with warnings, but not for sqlite #str.gsub!(/(\\)/m,'\1') #ok for sqlite not for pgsql - str.gsub!(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"<br />\n") - str.gsub!(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'') #check - str.gsub!(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg))(?:\s+\d+x\d+)?(.+?)#{Mx[:lnk_c]}\S+/,'[image: \1] \2') - str.gsub!(/#{Mx[:lnk_o]}\s*(.+?)\s*#{Mx[:lnk_c]}(?:file|ftp):\/\/\S+?([.,!?]?(?:\s|$))/,'\1\2') - str.gsub!(/#{Mx[:lnk_o]}\s*(.+?)\s*#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,'\1') - str + str=str.gsub(/'/,"''"). #string.gsub!(/'/,"\047") #string.gsub!(/'/,"\\'") + gsub(/(\\)/m,'\1\1'). #ok but with warnings, double backslash on sqlite #str.gsub!(/[\\]/m,'\\x5C') #ok but with warnings, but not for sqlite #str.gsub!(/(\\)/m,'\1') #ok for sqlite not for pgsql + gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"<br />\n"). + gsub(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,''). #check + gsub(/#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg))(?:\s+\d+x\d+)?(.+?)#{Mx[:lnk_c]}\S+/,'[image: \1] \2'). + gsub(/#{Mx[:lnk_o]}\s*(.+?)\s*#{Mx[:lnk_c]}(?:file|ftp):\/\/\S+?([.,!?]?(?:\s|$))/,'\1\2'). + gsub(/#{Mx[:lnk_o]}\s*(.+?)\s*#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,'\1') end def clean_searchable_text(arr) #produce clean, searchable, plaintext from document source txt_arr,en=[],[] - arr=arr.class==String ? arr.split(/\n+/m) : arr + arr=(arr.is_a?(String)) ? arr.split(/\n+/m) : arr arr.each do |s| - s.gsub!(/([*\/_-])\{(.+?)\}\1/m,'\2') - s.gsub!(/^(?:group|poem|code)\{/m,''); s.gsub!(/^\}(?:group|poem|code)/m,'') - s.gsub!(/\A(?:@\S+:\s+.+)\Z/m,'') + s=s.gsub(/([*\/_-])\{(.+?)\}\1/m,'\2'). + gsub(/^(?:block|group|poem|code)\{/m,'').gsub(/^\}(?:block|group|poem|code)/m,''). + gsub(/\A(?:@\S+:\s+.+)\Z/m,'') if s =~/^:A~/ if defined? @md.creator \ and defined? @md.creator.author \ and not @md.creator.author.empty? - s.gsub!(/@author/,@md.creator.author) + s=s.gsub(/@author/,@md.creator.author) else - SiSU_Screen::Ansi.new('v','WARNING Document Author information missing; provide @creator: :author:',@md.fnb).warn unless @md.cmd.inspect =~/q/ + SiSU_Screen::Ansi.new('v','WARNING Document Author information missing; provide @creator: :author:',@md.fnb).warn unless @md.opt.cmd.inspect =~/q/ end if defined? @md.title \ and defined? @md.title.full \ and not @md.title.full.empty? - s.gsub!(/@title/,@md.title.full) + s=s.gsub(/@title/,@md.title.full) else - SiSU_Screen::Ansi.new('v','WARNING Document Title missing; provide @title:',@md.fnb).warn unless @md.cmd.inspect =~/q/ + SiSU_Screen::Ansi.new('v','WARNING Document Title missing; provide @title:',@md.fnb).warn unless @md.opt.cmd.inspect =~/q/ end end - s.gsub!(/^(?:_[1-9]\*?|_\*)\s+/m,'') - s.gsub!(/^(?:[1-9]\~(\S+)?)\s+/m,'') - s.gsub!(/^(?::?[A-C]\~(\S+)?)\s+/m,'') - s.gsub!(/^%{1,3} .+/m,'') #removed even if contained in code block - s.gsub!(/<br>/m,' ') + s=s.gsub(/^(?:_[1-9]\*?|_\*)\s+/m,''). + gsub(/^(?:[1-9]\~(\S+)?)\s+/m,''). + gsub(/^(?::?[A-C]\~(\S+)?)\s+/m,''). + gsub(/^%{1,3} .+/m,''). #removed even if contained in code block + gsub(/<br>/m,' ') en << s.scan(/~\{\s*(.+?)\s*\}~/m) - s.gsub!(/~\{.+?\}~/m,'') - s.gsub!(/ \s+/m,' ') + s=s.gsub(/~\{.+?\}~/m,''). + gsub(/ \s+/m,' ') #special_character_escape(s) s end @@ -111,17 +107,16 @@ module SiSU_DB_text txt end def strip_markup(str) #define rules, make same as in dal clean - str.gsub!(/#{Mx[:fa_superscript_o]}(\d+)#{Mx[:fa_superscript_c]}/,'[\1]') - str.gsub!(/(?: \\;|#{Mx[:nbsp]})+/,' ') - str.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}\d+(.+)#{Mx[:tc_c]}/u,'\1') #tables - str.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}\d+#{Mx[:tc_p]}/u,' ') #tables - str.gsub!(/#{Mx[:tc_p]}/u,' ') #tables tidy later - str.gsub!(/<.+?>/,'') - str.gsub!(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}(?:file|ftp)\/\/:\S+ /,' [image] ') # else image names found in search - str.gsub!(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [image]') # else image names found in search - str.gsub!(/\s\s+/,' ') - str.strip! - str + str=str.gsub(/#{Mx[:fa_superscript_o]}(\d+)#{Mx[:fa_superscript_c]}/,'[\1]'). + gsub(/(?: \\;|#{Mx[:nbsp]})+/,' '). + gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}\d+(.+)#{Mx[:tc_c]}/u,'\1'). #tables + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}\d+#{Mx[:tc_p]}/u,' '). #tables + gsub(/#{Mx[:tc_p]}/u,' '). #tables tidy later + gsub(/<.+?>/,''). + gsub(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}(?:file|ftp)\/\/:\S+ /,' [image] '). # else image names found in search + gsub(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [image]'). # else image names found in search + gsub(/\s\s+/,' '). + strip end def unique_words(str) a=str.scan(/[a-zA-Z0-9\\\/_-]{2,}/) #a=str.scan(/\S+{2,}/) diff --git a/lib/sisu/v2/db_tests.rb b/lib/sisu/v4/db_tests.rb index 55ea2e0b..07d6d488 100644 --- a/lib/sisu/v2/db_tests.rb +++ b/lib/sisu/v4/db_tests.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,7 +56,7 @@ sqlite =end -module SiSU_DB_tests +module SiSU_DbTests class Test def initialize(info,opt) @ck,@opt=info,opt diff --git a/lib/sisu/v2/dbi.rb b/lib/sisu/v4/dbi.rb index 191d5099..cd44b808 100644 --- a/lib/sisu/v2/dbi.rb +++ b/lib/sisu/v4/dbi.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,21 +56,21 @@ =end module SiSU_DBI #% database building - require "#{SiSU_lib}/help" # help.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'help' # help.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env; include SiSU_Screen - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/db_dbi" # db_dbi.rb - include SiSU_DB_DBI - require "#{SiSU_lib}/shared_html_lite" # shared_html_lite.rb - include SiSU_Format_Shared - class SiSU_SQL + require_relative 'db_dbi' # db_dbi.rb + include SiSU_DbDBI + require_relative 'shared_html_lite' # shared_html_lite.rb + include SiSU_FormatShared + class SQL def initialize(opt) SiSU_Env::Load.new('dbi',true).prog @opt=opt - @db=SiSU_Env::Info_db.new - if @opt.cmd =~/d/i \ + @db=SiSU_Env::InfoDb.new + if @opt.cmd =~/[Dd]/ \ or @opt.mod.inspect =~/--(pg(?:sql)?|(?:sq)?lite)/ @sql_type=if @opt.cmd=~/D/ \ or @opt.mod.inspect =~/--pg(?:sql)?/ @@ -108,8 +107,6 @@ module SiSU_DBI puts %{manually create the database: "#{@db.db}" if it does not yet exist} #sudo su -p postgres; createdb #{@db.db}; #[createuser?] end - SiSU_DB_DBI::Case.new(@opt,@conn,@sql_type).cases - @conn=DBI.connect(@db.dbi,@db.user,@db.db) ensure end end @@ -126,11 +123,13 @@ module SiSU_DBI when /pg/; read_psql when /sqlite/; read_sqlite end - SiSU_Screen::Ansi.new(@opt.cmd,"DBI (#{@sql_type}) #{@opt.mod}",@opt.fns).dbi_title unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,"DBI (#{@sql_type}) #{@opt.mod}",@opt.fno).dbi_title unless @opt.cmd =~/q/ begin - SiSU_DB_DBI::Case.new(@opt,@conn,@sql_type).cases + SiSU_DbDBI::Case.new(@opt,@conn,@sql_type).cases rescue - SiSU_Errors::Info_error.new($!,$@,@cf,@opt.fns).error + SiSU_Errors::InfoError.new($!,$@,@cf,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end begin diff --git a/lib/sisu/v4/dbi_discreet.rb b/lib/sisu/v4/dbi_discreet.rb new file mode 100644 index 00000000..07814a1a --- /dev/null +++ b/lib/sisu/v4/dbi_discreet.rb @@ -0,0 +1,182 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: postgresql module, dbi import frame + +=end +module SiSU_DBI_Discreet #% database building + require_relative 'help' # help.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env; include SiSU_Screen + require_relative 'param' # param.rb + include SiSU_Param + require_relative 'db_dbi' # db_dbi.rb + include SiSU_DbDBI + require_relative 'shared_html_lite' # shared_html_lite.rb + include SiSU_FormatShared + require 'fileutils' + include FileUtils::Verbose + class SQL + def initialize(opt) + SiSU_Env::Load.new('dbi',true).prog + @opt=opt + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + @md=@particulars.md + if @opt.cmd =~/[d]/ \ + or @opt.mod.inspect =~/--((?:sq)?lite)/ + @sql_type='sqlite' + maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/ + end + @output_path=@md.file.output_path.sqlite_discreet.dir + @filename=@md.file.base_filename.sqlite_discreet + @file_maint=sql_maintenance_file + @file="#{@output_path}/#{@filename}" + end + def build + prepare + create_and_populate + end + def maintenance_check(opt,file,line) + p opt.mod + p opt.cmd + p "at #{file} #{line}" + end + def prepare + if not FileTest.directory?(@output_path) + FileUtils::mkdir_p(@output_path) + elsif @file + FileUtils::rm_rf(@file) + end + end + def db_exist?(db,conn) + msg=%{no connection with sqlite database established, createdb "#{db.sqlite.db}"?} + if (not (FileTest.file?(db.sqlite.db)) \ + or FileTest.zero?(db.sqlite.db)) + puts msg + exit + end + if conn.is_a?(NilClass) + puts msg + exit + end + end + def create_and_populate + db=SiSU_Env::DbOp.new(@md) + conn=db.sqlite_discreet.conn_sqlite3 + sdb=SiSU_DbDBI::Create.new(@opt,conn,@file,'sqlite') + sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@file,'sqlite') + sdb.output_dir? + begin + SiSU_Screen::Ansi.new(@opt.cmd,'SQLite',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_title_hi unless @opt.cmd =~/q/ + sdb.create_db + sdb.create_table.metadata_and_text + sdb.create_table.doc_objects + sdb.create_table.endnotes + sdb.create_table.endnotes_asterisk + sdb.create_table.endnotes_plus + sdb.create_table.urls + sdb_index.create_indexes + db_exist?(db,conn) + sdb_import=SiSU_DbDBI::Import.new(@opt,conn,@file_maint,'sqlite') + sdb_import.marshal_load + tell=SiSU_Screen::Ansi.new(@opt.cmd,"sqlite3 #{db.sqlite.db} database?") + tell.puts_grey if @opt.cmd =~/v/ + rescue + SiSU_Errors::InfoError.new($!,$@,'-d').error do + __LINE__.to_s + ':' + __FILE__ + end + sdb.output_dir? + end + end + def read_sqlite + begin + @conn=@db.sqlite.conn_sqlite3 + rescue + ensure + end + end + def connect + begin + sql_type='sqlite' + SiSU_Screen::Ansi.new(@opt.cmd,"DBI (#{@sql_type}) #{@opt.mod}",@opt.fns).dbi_title unless @opt.cmd =~/q/ + @db.sqlite_discreet.conn_sqlite3 + rescue + SiSU_Errors::InfoError.new($!,$@,@cf,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def populate + end + def sql_maintenance_file + file=if @opt.inspect =~/M/ + x=if @opt.fns and not @opt.fns.empty? + @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns + puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.cmd =~/M/ + @db=SiSU_Env::InfoDb.new + @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql" + File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') + elsif @opt.fns \ + and @opt.fns.inspect =~/create/ + nil #sort variations later + else nil + end + else nil + end + file + end + end +end +__END__ diff --git a/lib/sisu/v2/defaults.rb b/lib/sisu/v4/defaults.rb index 31cc449e..0b1c4d6c 100644 --- a/lib/sisu/v2/defaults.rb +++ b/lib/sisu/v4/defaults.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2011, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -22,7 +23,7 @@ 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 + 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 @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.sisudoc.org/sisu/gpl.fsf/toc.html> - <http://www.sisudoc.org/sisu/gpl.fsf/doc.html> - <http://www.sisudoc.org/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.sisudoc.org/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,16 +58,16 @@ $latex_run=nil module SiSU_Viz require 'uri' - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/css" # css.rb + require_relative 'css' # css.rb include SiSU_Style class Skin def initialize @fonts='verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman' # 'verdana, arial, georgia, tahoma, sans-serif, helvetica, "times new roman", times, roman' - @dir=SiSU_Env::Info_env.new - @date=SiSU_Env::Info_date.new #{@date.year} - @v=SiSU_Env::Info_version.instance.get_version + @dir=SiSU_Env::InfoEnv.new + @date=SiSU_Env::InfoDate.new #{@date.year} + @v=SiSU_Env::InfoVersion.instance.get_version end #% glyph def glyph_bullet # • @@ -78,114 +77,42 @@ module SiSU_Viz def html_hardspace ' ' end - #% php - def php_persist - end - #% javascript #kxjs knxjs - def js_home - end - def js_infobox - end - def js_knxjs - end - def js_head - end - def js_top - end - def js_sisu - end - def js_home - end - def js_sponsor - end - def js_books - end - def js_journals - end - def js_conferences - end - def js_services - end - def js_catalogue - end - def js_doc - end - def js_toc - end - def js_seg - end - def js_mail - end - def js_manifest - end - def js_status - end - def js_next - end - def js_prev - end - def js_plaintext - end - def js_portrait - end - def js_landscape - end - def js_pdf - end - def js_epub - end - def js_odf - end - def js_concordance - end - def js_instruments - end - def js_external - end - def js_gopher - end - def js_ftp - end - def js_law - end - def js_disclaimer - end def semantic_tags def default { - :pub => 'publication', - :conv => 'convention', - :vol => 'volume', - :pg => 'page', - :cty => 'city', - :org => 'organization', - :uni => 'university', - :dept => 'department', - :fac => 'faculty', - :inst => 'institute', - :co => 'company', - :com => 'company', - :conv => 'convention', - :dt => 'date', - :y => 'year', - :m => 'month', - :d => 'day', - :ti => 'title', - :au => 'author', - :ed => 'editor', #editor? - :v => 'version', #edition - :n => 'name', - :fn => 'firstname', - :mn => 'middlename', - :ln => 'lastname', - :in => 'initials', - :qt => 'quote', - :ct => 'cite', - :ref => 'reference', - :ab => 'abreviation', - :def => 'define', - :desc => 'description', - :trans => 'translate', + pub: 'publication', + conv: 'convention', + vol: 'volume', + pg: 'page', + cty: 'city', + org: 'organization', + uni: 'university', + dept: 'department', + fac: 'faculty', + inst: 'institute', + co: 'company', + com: 'company', + conv: 'convention', + dt: 'date', + y: 'year', + m: 'month', + d: 'day', + ti: 'title', + au: 'author', + ed: 'editor', #editor? + v: 'version', #edition + n: 'name', + fn: 'firstname', + mn: 'middlename', + ln: 'lastname', + in: 'initials', + qt: 'quote', + ct: 'cite', + ref: 'reference', + ab: 'abreviation', + def: 'define', + desc: 'description', + trans: 'translate', } end self @@ -386,13 +313,13 @@ module SiSU_Viz 'www.sisudoc.org/' end def url_path_image_base #used for html image display - '../_sisu/image' + "#{Xx[:html_relative2]}_sisu/image" end def url_path_image #used for html image display - '../_sisu/image' + "#{Xx[:html_relative2]}_sisu/image" end def url_path_image_sys #used for html image display - '../_sisu/image_sys' + "#{Xx[:html_relative2]}_sisu/image_sys" end def url_path_image_epub './image' @@ -546,7 +473,7 @@ module SiSU_Viz %{"#{color_white}"} end def color_body - %{\n<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">\n} + %{<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">} end def color_font_face #was font WATCH "#{color_black}" @@ -735,13 +662,13 @@ module SiSU_Viz when /\/i$/; 'i' else '' end - r.gsub!(/^\/(.+?)\/i?/,'\1') - r.gsub!(/\(/,'(?:') # avoid need to escape use of brackets within regex provided + r=r.gsub(/^\/(.+?)\/i?/,'\1'). + gsub(/\(/,'(?:') # avoid need to escape use of brackets within regex provided m='\b(' + r + ')\b' make[:str] - make[:regx]=if x =~/i/; /#{m}/i - else /#{m}/ - end + make[:regx]=(x =~/i/) \ + ? (/#{m}/i) + : (/#{m}/) else nil end end @@ -756,13 +683,13 @@ module SiSU_Viz when /\/i$/; 'i' else '' end - r.gsub!(/^\/(.+?)\/i?/,'\1') - r.gsub!(/\(/,'(?:') # avoid need to escape use of brackets within regex provided + r.gsub(/^\/(.+?)\/i?/,'\1'). + gsub(/\(/,'(?:') # avoid need to escape use of brackets within regex provided m='\b(' + r + ')\b' make[:str] - make[:regx]=if x =~/i/; /#{m}/i - else /#{m}/ - end + make[:regx]=(x =~/i/) \ + ? (/#{m}/i) + : (/#{m}/) else nil end make @@ -784,8 +711,6 @@ module SiSU_Viz def paragraph_table %{<p align="left"><font #{font_small} #{font_color} #{font_face}>} end - def paragraph_table_xml - end def paragraph_tiny %{<p class="tiny">} end @@ -957,7 +882,7 @@ module SiSU_Viz </a>} end def png_hp - dir=SiSU_Env::Info_env.new #(@fns) + dir=SiSU_Env::InfoEnv.new #(@fns) %{ <a href="#{url.site}"> <img border="0" width="160" height="60" src="#{@dir.url.images_local}/#{icon_home_banner}" alt="#{txt_home}" /> </a>} @@ -1029,17 +954,18 @@ module SiSU_Viz %{<img border="0" height="15" width="15" src="#{url_path_image_sys}/#{icon_external_toc}" alt="lateral hop" />} end def png_home - dir=SiSU_Env::Info_env.new #(@fns) - %{<img border="0" src="#{dir.url.images_local}/#{icon_home_button}" alt="#{txt_home} -->" />} + #dir=SiSU_Env::InfoEnv.new #(@fns) + %{<img border="0" src="#{url_path_image_base}/#{icon_home_button}" alt="#{txt_home} -->" />} + #%{<img border="0" src="#{dir.url.images_local}/#{icon_home_button}" alt="#{txt_home} -->" />} end def png_home_button - #dir=SiSU_Env::Info_env.new #(@fns) - %{<img border="0" src="#{url_path_image_base}/#{icon_home_button}" alt="#{txt_home} -->" />} + rel=@dir.path_rel_links.html_scroll_2 + %{<img border="0" src="#{rel}/#{icon_home_button}" alt="#{txt_home} -->" />} end def png_book %{<img border="2" height="15" width="15" src="#{url_path_image_sys}/#{icon_book}" alt="Cameron May Books" />} end - #% png_nav + #% png_nav #not currently used def png_nav_home end def png_nav_toc @@ -1133,6 +1059,7 @@ module SiSU_Viz </font> } end def nav_txt_manifest + #{png_manifest} document manifest %{ <font face="#{font_fonts}" size="2"> [ document manifest ] </font> } @@ -1186,7 +1113,7 @@ module SiSU_Viz #% banner def banner_home %{ <center> - <a href="#{url_site}/" target="_top" #{js_home}> + <a href="#{url_site}/" target="_top"> #{png_site} </a> <br /> @@ -1201,23 +1128,23 @@ module SiSU_Viz end def banner_home_guide %{ <br /> - <a href="#{url_site}/" target="_top" #{js_home}> + <a href="#{url_site}/" target="_top"> #{png_doc} LM toc </a> - <a href="../treaties.and.organisations/lm.chronological" target="_top" #{js_instruments}> + <a href="../treaties.and.organisations/lm.chronological" target="_top"> #{png_doc} LM 20** </a> <br />} end def banner_home_button_only - %{<a href="#{url_site}/" #{js_home}> + %{<a href="#{url_site}/"> #{png_home_button} </a>} end def banner_home_button #yellow_dark now white %{<table summary="home button" width="100%" border="0" cellpadding="3" bgcolor= "#ffffff" align="center"> <tr><td align="left" valign="middle" bgcolor="#{color_white}" width="10%"> - <a href="#{url_site}/" #{js_home}> + <a href="#{url_site}/"> #{png_home_button} </a> </td> @@ -1229,7 +1156,7 @@ module SiSU_Viz <tr><td width="20%"> <table summary="home button" width="100%" border="0" cellpadding="3" align="center"> <tr><td align="center" valign="middle" bgcolor="#{color_white}"> - <a href="#{url_site}/" target="_top" #{js_home}> + <a href="#{url_site}/" target="_top"> #{png_home} </a> </td></tr> @@ -1239,7 +1166,7 @@ module SiSU_Viz <table summary="other contents buttons" border="0" cellpadding="3" cellspacing="0"> <tr><td align="center" bgcolor=#{color_band2}> <font face="arial" size="2"> - <a href="toc" target="_top" #{js_toc}> + <a href="toc" target="_top"> This text's sub- <br /> Table of Contents @@ -1253,12 +1180,12 @@ module SiSU_Viz #{table_close}} end def banner_url_txt_sisu - %{<a href="#{url_sisu}/sisu" target="_top" #{js_home}>SiSU</a>} + %{<a href="#{url_sisu}/sisu" target="_top">SiSU</a>} end def banner_band #yellow_dark now white %{<table summary="home button" width="100%" border="0" cellpadding="3" bgcolor= "#ffffff" align="center"> <tr><td align="left" valign="middle" bgcolor="#{color_white}"> - <a href="#{url_site}/" target="_top" #{js_home}> + <a href="#{url_site}/" target="_top"> #{png_home} </a> </td> @@ -1540,7 +1467,7 @@ WOK <<WOK <p class="tiny"><font color="#666666" size="2"> Output generated by - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> #{@v[:project]} </a> #{@v[:version]} #{@v[:date]} (#{@v[:date_stamp]}) @@ -1561,7 +1488,7 @@ WOK <!-- widget sisu --> <tr><td valign="top" width="10%"> <p class="tiny_left"><font color="#666666" size="2"> - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> <img border="0" src="../_sisu/image/sisu.png" alt="SiSU" width="120" height="39" /> </a> </font></p> @@ -1569,33 +1496,33 @@ WOK <!-- SiSU Rights --> <p class="tiny_left"><font color="#666666" size="2"> Output generated by - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> #{@v[:project]} </a> #{@v[:version]} #{@v[:date]} (#{@v[:date_stamp]}) <br /> - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> <b>#{@v[:project]}</b> </a> Copyright <sup>©</sup> Ralph Amissah 1997, current #{@date.year_static}. All Rights Reserved. <br /> - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> #{@v[:project]} </a> is software for document structuring, publishing and search, <br /> - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> www.sisudoc.org/ </a> and - <a href="#{url_sisudoc}" #{js_sisu}> + <a href="#{url_sisudoc}"> www.sisudoc.org </a> <br /> <i>w3 since October 3 1993</i> - <a href="mailto:ralph@amissah.com" #{js_mail}> + <a href="mailto:ralph@amissah.com"> ralph@amissah.com </a> </font></p> @@ -1623,7 +1550,7 @@ WOK </font></p> </td><td valign="top" width="45%"> <p class="tiny_left"><font color="#666666" size="2"> - <a href="#{url_sisu}" #{js_sisu}> + <a href="#{url_sisu}"> #{@v[:project]} </a> is released under @@ -1722,9 +1649,9 @@ WOK end class Home < Skin def initialize - @v=SiSU_Env::Info_version.instance.get_version - @dir=SiSU_Env::Info_env.new - @date=SiSU_Env::Info_date.new #{@date.year} + @v=SiSU_Env::InfoVersion.instance.get_version + @dir=SiSU_Env::InfoEnv.new + @date=SiSU_Env::InfoDate.new #{@date.year} end def redirect <<WOK @@ -1744,12 +1671,12 @@ WOK <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>SiSU information Structuring Universe - Structured information, Serialized Units - software for electronic texts, documents, books, digital libraries in plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, PDF, SQL (PostgreSQL and SQLite), and for search</title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta name="dc.title" content="SiSU information Structuring Universe, Structured information Serialised Units, #{@date.year_static}" /> <meta name="dc.creator" content="Ralph Amissah" /> @@ -1767,7 +1694,7 @@ for search</title> <body> <div id="top_band"> <p class="top_band_image"> - <a href="http://www.sisudoc.org/sisu/SiSU" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU" target="_top"> <img border="0" src="./_sisu/image/sisu.png" alt="SiSU >>"> </a> </p> @@ -1777,11 +1704,11 @@ for search</title> <h2 class="top_band_tiny"> Structured information, Serialized Units - <a href="http://www.sisudoc.org" target="_top" > + <a href="http://www.sisudoc.org" target="_top"> <www.sisudoc.org> </a> or - <a href="http://www.jus.uio.no/sisu/" target="_top" > + <a href="http://www.jus.uio.no/sisu/" target="_top"> <www.jus.uio.no/sisu/> </a> </h2> @@ -1799,7 +1726,7 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P </div> <div id="column_left"> <p class="bold"> - <a href="http://www.sisudoc.org/sisu/SiSU" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU" target="_top"> SiSU </a> </p> @@ -1807,7 +1734,7 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/sisu_manual/" target="_top" > + <a href="http://www.sisudoc.org/sisu/sisu_manual/" target="_top"> SiSU Manual </a> </p> @@ -1815,7 +1742,7 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/1.html#summary" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU/1.html#summary" target="_top"> What does SiSU do? Summary </a> </p> @@ -1823,17 +1750,17 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/examples.html" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU/examples.html" target="_top"> Book Samples and Markup Examples </a> </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/sisu_site_metadata/harvest_authors.html" target="_top" > + <a href="http://www.sisudoc.org/sisu/sisu_site_metadata/harvest_authors.html" target="_top"> sorted by Author (sisu metadata) </a> </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/sisu_site_metadata/harvest_topics.html" target="_top" > + <a href="http://www.sisudoc.org/sisu/sisu_site_metadata/harvest_topics.html" target="_top"> sorted by Topic (sisu metadata) </a> </p> @@ -1841,7 +1768,7 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/1.html#ocn" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU/1.html#ocn" target="_top"> Object Citation Numbering - <i>ocn</i> </a> </p> @@ -1850,12 +1777,13 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/1.html#search" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU/1.html#search" target="_top"> Search - "<i>granular</i>" </a> +</p> <p class="tiny"> Of interest is the ease of streaming documents to a relational database, at an object (roughly paragraph) level and the potential for increased precision in the presentation of matches that results thereby. The ability to serialise html, LaTeX, XML, SQL, (whatever) is also inherent in / incidental to the design. For a description see the - <a href="http://www.sisudoc.org/sisu/sisu_provisional_patent_application_200408" target="_top" > + <a href="http://www.sisudoc.org/sisu/sisu_provisional_patent_application_200408" target="_top"> abandoned U.S. provisional patent application </a> </p> @@ -1863,15 +1791,23 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/download.html" target="_top" > - <b>Download</b> + <a href="http://git.sisudoc.org/" target="_top"> + <b>Development, SCM - Git</b> + </a><br /> + <a href="http://git.sisudoc.org/" target="_top"> + <http://git.sisudoc.org> + </a> +</p> +<p class="small"> + <a href="http://www.sisudoc.org/sisu/SiSU/download.html" target="_top"> + <b>Download</b> alternatives </a> </p> <p class="tiny"> --- </p> <p class="small"> - <a href="http://www.sisudoc.org/sisu/SiSU/changelog.html" target="_top" > + <a href="http://www.sisudoc.org/sisu/SiSU/changelog.html" target="_top"> Changelog </a> </p> @@ -1879,8 +1815,8 @@ outputs include: plaintext, html, XHTML, XML, ODF (OpenDocument), EPUB, LaTeX, P --- </p> <p class="small"> - License, SiSU is licensed under - <a href="http://www.gnu.org/licenses/gpl.html" target="_top" > + License, SiSU is licensed under + <a href="http://www.gnu.org/licenses/gpl.html" target="_top"> GPLv3 or later </a> </p> @@ -1907,7 +1843,7 @@ SiSU is an Open Source project initiated and led by Ralph Amissah <a href="mailt <p class="bold"> For less markup than the most elementary HTML you can have more. </p> -<p><a href="http://www.sisudoc.org/sisu/SiSU" target="_top" ><b>SiSU</b> - Structured information, Serialized Units</a> for electronic documents, is an information structuring, transforming, publishing and search framework with the following features:</p> +<p><a href="http://www.sisudoc.org/sisu/SiSU" target="_top"><b>SiSU</b> - Structured information, Serialized Units</a> for electronic documents, is an information structuring, transforming, publishing and search framework with the following features:</p> <p> <b>(i)</b> markup syntax: <b>(a)</b> @@ -1963,6 +1899,7 @@ document content certification and comparison considerations: the document and each object within it stamped with an md5 hash making it possible to easily check or guarantee that the substantive content of a document is unchanged, <b>(b)</b> version control, documents integrated with time based source control system, default RCS or CVS with use of $Id$ tag, which SiSU checks +</p> <p> <b>(x)</b> SiSU's minimalist markup makes for meaningful "diffing" of the substantive content of markup-files,</p> @@ -2020,7 +1957,7 @@ as a developers tool it is flexible and extensible </p> <br /> <p class="small"> -<a href="http://www.sisudoc.org"><b>SiSU</b></a> at <a href="http://www.sisudoc.org"><www.sisudoc.org></a> or <a href="http://www.jus.uio.no/sisu/"><www.jus.uio.no/sisu/></a></p> +<a href="http://www.sisudoc.org"><b>SiSU</b></a> at <a href="http://www.sisudoc.org"><www.sisudoc.org></a> or <a href="http://www.jus.uio.no/sisu/"><www.jus.uio.no/sisu/></a></p> </div> <div id="column_right"> <p class="tiny"> @@ -2033,7 +1970,7 @@ as a developers tool it is flexible and extensible <input type="hidden" name="a" value="1" /> <input type="radio" name="view" value="index" checked="checked" /> idx <input type="radio" name="view" value="text" /> txt -<a href="http://search.sisudoc.org" target="_top" ><search.sisudoc.org></a> +<a href="http://search.sisudoc.org" target="_top"><search.sisudoc.org></a> </form> <!-- Search SiSU --> </p> @@ -2059,6 +1996,7 @@ SiSU markup is fairly minimalistic, it consists of: a (largely optional) documen <a href="http://www.sisudoc.org/sisu/SiSU/"> <www.sisudoc.org/sisu/SiSU> </a> +</p> <p class="tiny"> SiSU was developed in relation to legal documents, and is strong across a wide variety of texts (law, literature...(humanities, law and part of the social sciences)). SiSU handles images but is not suitable for formulae/ statistics, or for technical writing at this time.</p> <p class="tiny"> diff --git a/lib/sisu/v2/digests.rb b/lib/sisu/v4/digests.rb index 12052631..129b6b10 100644 --- a/lib/sisu/v2/digests.rb +++ b/lib/sisu/v4/digests.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,10 @@ ** Description: document digests (md5|sha256) and structure processing =end -module SiSU_Digest_view - require "#{SiSU_lib}/particulars" # particulars.rb - require "#{SiSU_lib}/i18n" # i18n.rb - require "#{SiSU_lib}/shared_markup_alt.rb" # shared_markup_alt.rb +module SiSU_DigestView + require_relative 'particulars' # particulars.rb + require_relative 'prog_text_translation' # prog_text_translation.rb + require_relative 'shared_markup_alt.rb' # shared_markup_alt.rb pwd=Dir.pwd class Source @@dg=nil @@ -68,25 +67,27 @@ module SiSU_Digest_view @fnb=@opt.fnb @@endnotes_para=[] @@dg=nil - @dg=@@dg ||=SiSU_Env::Info_env.new.digest.type - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @dg=@@dg ||=SiSU_Env::InfoEnv.new.digest.type + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @env,@md,@dal_array=@particulars.env,@particulars.md,@particulars.dal_array unless @opt.cmd =~/q/ tool=(@opt.cmd =~/[MVv]/) \ - ? "#{@env.program.text_editor} #{@env.path.output_tell}/#{@md.fnb}/#{@md.fn[:digest]}" \ - : @opt.fns + ? "#{@env.program.text_editor} file://#{@md.file.output_path.hash_digest.dir}/#{@md.file.base_filename.hash_digest}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,"Document #{@dg} Digests",tool).green_hi_blue \ + ? SiSU_Screen::Ansi.new(@opt.cmd,"Document #{@dg} Digests",tool).green_hi_blue : SiSU_Screen::Ansi.new(@opt.cmd,"Document #{@dg} Digests",tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/#{@md.fnb}/#{@md.fn[:digest]}").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{@md.file.output_path.hash_digest.dir}/#{@md.file.base_filename.hash_digest}").flow if @opt.cmd =~/[MV]/ + end + SiSU_DigestView::Source::Scroll.new(@particulars).songsheet + SiSU_Env::InfoSkin.new(@md).select + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ end - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - SiSU_Digest_view::Source::Scroll.new(@particulars).songsheet - SiSU_Env::Info_skin.new(@md).select - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error ensure end end @@ -98,12 +99,12 @@ module SiSU_Digest_view def initialize(particulars) #data='',md='') @particulars=particulars @data,@env,@md=@particulars.dal_array,@particulars.env,@particulars.md - SiSU_Env::SiSU_file.new(@md).mkdir + SiSU_Env::FileOp.new(@md).mkdir @@dg ||=@env.digest.type @@dl ||=@env.digest.length @dg,@dl=@@dg,@@dl - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - @language=l[:l] + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + @language=l[:n] @tr=SiSU_Translate::Source.new(@md,@language) @sp=' ' end @@ -115,27 +116,28 @@ module SiSU_Digest_view output end def description(f,e='') - puts f + e.to_s if @md.cmd =~/V/ + puts f + e.to_s if @md.opt.cmd =~/V/ @@description << f << e end def digests(f,e='') - puts f if @md.cmd =~/V/ + puts f if @md.opt.cmd =~/V/ @@ds[:digests] << f + "\n" end def dal_structure_tree(f,e='') - puts f + e.to_s if @md.cmd =~/V/ + puts f + e.to_s if @md.opt.cmd =~/V/ @@ds[:tree] << f << e end def dal_structure_summary(f,e='') - puts f + e.to_s if @md.cmd =~/V/ + puts f + e.to_s if @md.opt.cmd =~/V/ @@ds[:summary] << f << e end def rcinfo(f,e='') - puts f + e.to_s if @md.cmd =~/V/ + puts f + e.to_s if @md.opt.cmd =~/V/ @@sc_info << f << e end def output - filename_digest=SiSU_Env::SiSU_file.new(@md,@md.fn[:digest]).mkfile + file=SiSU_Env::FileOp.new(@md) + filename_digest=file.write_file.hash_digest filename_digest << @@description.join << @@ds[:digests].join << @@ds[:tree].join << @@ds[:summary].join << @@sc_info.join end def rgx_txt(txt) @@ -143,7 +145,7 @@ module SiSU_Digest_view end def message_digest data=@data - sys=SiSU_Env::System_call.new + sys=SiSU_Env::SystemCall.new l=Hash.new(0) @p=[] @g,@v,@r='','','' @@ -153,9 +155,9 @@ module SiSU_Digest_view if para =~/#{Mx[:id_o]}~(\d+);((?:\w|[0-6]:)\d+);(\w\d+)#{Mx[:id_c]}#{Mx[:id_o]}([0-9a-f]{#{@dl}}):([0-9a-f]{#{@dl}})#{Mx[:id_c]}/ ocn,h1,h2,d_clean,d_all=$1,$2,$3,$4,$5 @ocn=ocn unless ocn.to_i==0 - para.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - para.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - para.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') + para=para.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') if para=~/#{Mx[:en_a_o]}[\d*+]+.+?#{Mx[:id_o]}[0-9a-f]{#{@dl}}#{Mx[:id_c]}#{Mx[:en_a_c]}/ para_endnotes << para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+).+?#{Mx[:id_o]}([0-9a-f]{#{@dl}})#{Mx[:id_c]}(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/) end @@ -191,14 +193,14 @@ module SiSU_Digest_view and images.length > 0 # then get path of image & produce digest @image_name,@image_dgst,@img=[],[],[] images.each do |i| - image_source=if FileTest.file?("#{@env.path.image_source_local_tex}/#{i}") - @env.path.image_source_local_tex - elsif FileTest.file?("#{@env.path.image_source_remote_tex}/#{i}") - @env.path.image_source_remote_tex - elsif FileTest.file?("#{@env.path.image_source_tex}/#{i}") - @env.path.image_source_tex + image_source=if FileTest.file?("#{@env.path.image_source_include_local}/#{i}") + @env.path.image_source_include_local + elsif FileTest.file?("#{@env.path.image_source_include_remote}/#{i}") + @env.path.image_source_include_remote + elsif FileTest.file?("#{@env.path.image_source_include}/#{i}") + @env.path.image_source_include else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:", %{"#{i}" missing}, "search locations: #{@env.path.image_source_local_tex}, #{@env.path.image_source_remote_tex} and #{@env.path.image_source_tex}").error2 unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:", %{"#{i}" missing}, "search locations: #{@env.path.image_source_include_local}, #{@env.path.image_source_include_remote} and #{@env.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ nil end @img << /\S+\.(png|jpg|gif)/.match(i)[1] @@ -206,9 +208,9 @@ module SiSU_Digest_view if image_source para_image = image_source + '/' + i @image_name << i - @image_dgst << if @dg =~/^sha(?:2|256)$/; sys.sha256(para_image) - else sys.md5(para_image) - end + @image_dgst << (@dg =~/^sha(?:2|256)$/) \ + ? sys.sha256(para_image) + : sys.md5(para_image) else @image_name << ' '*16 + i + ' [image missing]' @image_dgst << '' @@ -298,11 +300,11 @@ module SiSU_Digest_view data=@data endnotes=nil data.each do |t_o| - dgst=SiSU_text_representation::Modified_text_plus_Hash_digest.new(@md,t_o).composite.dgst + dgst=SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst if dgst - if t_o.is=='heading' + if t_o.is==:heading digests("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:dgst_markedup_txt]} #{dgst[:is]} #{t_o.lv}") - elsif t_o.is=='heading_insert' + elsif t_o.is==:heading_insert digests("#{@sp*0}[#{dgst[:ocn]}]#{@sp*(6-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:dgst_markedup_txt]} #{dgst[:is]} #{t_o.lv}") else digests("#{@sp*0}#{dgst[:ocn]}#{@sp*(8-dgst[:ocn].to_s.length)}#{dgst[:dgst_stripped_txt]} #{dgst[:dgst_markedup_txt]} #{dgst[:is]}") @@ -325,7 +327,7 @@ module SiSU_Digest_view dal_structure_tree("------------\n") dal_structure_tree("document structure[*]\n") data.each do |t_o| - if t_o.is=='heading' + if t_o.is==:heading x=case t_o.ln when 1; l[1] +=1 #fix Mx[:lv_o] ' '*0 +':A' @@ -342,7 +344,7 @@ module SiSU_Digest_view else nil end end - ocn=t_o.ocn if defined? t_o.ocn and t_o.is !='heading_insert' + ocn=t_o.ocn if defined? t_o.ocn and t_o.is !=:heading_insert dal_structure_tree("#{x}\n") if x and not x.empty? end dal_structure_tree(" [*] heading levels\n") diff --git a/lib/sisu/v2/embedded.rb b/lib/sisu/v4/embedded.rb index afdfd5a7..87b37fc0 100644 --- a/lib/sisu/v2/embedded.rb +++ b/lib/sisu/v4/embedded.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,18 +56,18 @@ =end module SiSU_Embedded - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env class Source - require 'fileutils' - include FileUtils def initialize(opt) @opt=opt @md=SiSU_Param::Parameters.new(@opt).get - @env=SiSU_Env::Info_env.new(@md.fns) - @rhost=SiSU_Env::Info_remote.new(@opt).remote_host_base + @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 @@ -78,58 +77,64 @@ module SiSU_Embedded audio multimedia begin - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end def images - src="#{Dir.pwd}/_sisu/image" - ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" + src="#{@base_src_dir}/_sisu/image" + src_img='_sisu/image' + ldest=@env.path.output + img_dir="#{@env.path.output}/_sisu/image" @rhost.each do |remote_conn| rdest="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/image" - if @md.cmd.inspect =~/[vVMR]/ \ + remote_rel=remote_conn[:name] + '/' + @f.output_path.stub.rcp + if @md.opt.cmd.inspect =~/[vVMR]/ \ and FileTest.directory?(src) - mkdir_p(ldest) unless FileTest.directory?(ldest) - src_ec="#{src}/" + @md.ec[:image].join(" #{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::System_call.new(src_ec,"#{ldest}/.",'q').rsync - if @md.cmd.inspect =~/R/ #rsync to remote image directory - SiSU_Env::System_call.new(src_ec,"#{rdest}/.",'q').rsync - end + SiSU_Env::SystemCall.new(src_ec,ldest,'q').rsync('--relative',@opt.base_path) + #if @md.opt.cmd.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="#{Dir.pwd}/_sisu/mm/audio" + src="#{@base_src_dir}/_sisu/mm/audio" ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/mm/audio" @rhost.each do |remote_conn| rdest="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/mm/audio" - if @md.cmd.inspect =~/[vVMR]/ \ + if @md.opt.cmd.inspect =~/[vVMR]/ \ and FileTest.directory?(src) - mkdir_p(ldest) unless FileTest.directory?(ldest) + FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest) src_ec="#{src}/" + @md.ec[:audio].join(" #{src}/") - SiSU_Env::System_call.new(src_ec,"#{ldest}/.",'q').rsync - if @md.cmd.inspect =~/R/ #rsync to remote audio directory - SiSU_Env::System_call.new(src_ec,"#{rdest}/.",'q').rsync + SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync + if @md.opt.cmd.inspect =~/R/ #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="#{Dir.pwd}/_sisu/mm/video" + src="#{@base_src_dir}/_sisu/mm/video" ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/mm/video" @rhost.each do |remote_conn| rdest="#{remote_conn[:name]}/#{@env.path.stub_pwd}/_sisu/mm/video" - if @md.cmd.inspect =~/[vVMR]/ \ + if @md.opt.cmd.inspect =~/[vVMR]/ \ and FileTest.directory?(src) - mkdir_p(ldest) unless FileTest.directory?(ldest) + FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest) src_ec="#{src}/" + @md.ec[:multimedia].join(" #{src}/") - SiSU_Env::System_call.new(src_ec,"#{ldest}/.",'q').rsync - if @md.cmd.inspect =~/R/ #rsync to remote video directory - SiSU_Env::System_call.new(src_ec,"#{rdest}/.",'q').rsync + SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync + if @md.opt.cmd.inspect =~/R/ #rsync to remote video directory + SiSU_Env::SystemCall.new(src_ec,"#{rdest}/.",'q').rsync end end end diff --git a/lib/sisu/v2/epub.rb b/lib/sisu/v4/epub.rb index 6f4ab25b..a4dce6ab 100644 --- a/lib/sisu/v2/epub.rb +++ b/lib/sisu/v4/epub.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,22 +57,22 @@ =end module SiSU_EPUB require 'pstore' - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/xhtml_table" # xhtml_table.rb - require "#{SiSU_lib}/epub_format" # epub_format.rb + require_relative 'xhtml_table' # xhtml_table.rb + require_relative 'epub_format' # epub_format.rb include SiSU_EPUB_Format - require "#{SiSU_lib}/epub_segments" # epub_segments.rb - include SiSU_EPUB_seg - require "#{SiSU_lib}/epub_tune" # epub_tune.rb + require_relative 'epub_segments' # epub_segments.rb + include SiSU_EPUB_Seg + require_relative 'epub_tune' # epub_tune.rb include SiSU_EPUB_Tune - require "#{SiSU_lib}/epub_concordance" # epub_concordance.rb + require_relative 'epub_concordance' # epub_concordance.rb class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read songsheet @@ -85,41 +84,42 @@ module SiSU_EPUB @env=@particulars.env loc=@env.path.url.output_tell unless @opt.cmd =~/q/ - tool=if @opt.cmd =~/z/; "#{@env.program.epub_viewer} #{loc}/epub/#{@fnb}.epub" - elsif @opt.cmd =~/[MVv]/; "#{@env.program.epub_viewer} #{loc}/epub/#{@fnb}.epub" - else @opt.fns - end + tool=(@opt.cmd =~/[MVvz]/) \ + ? "#{@env.program.epub_viewer} #{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'EPUB',tool).green_hi_blue \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'EPUB',tool).green_hi_blue : SiSU_Screen::Ansi.new(@opt.cmd,'EPUB',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{loc}/epub/#{@fnb}.epub").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}").flow if @opt.cmd =~/[MV]/ end - @env.path.epub_bld #(@md) - @env.path.epub_cp_images(@md) - dir_epub=@env.path.epub - SiSU_Env::Info_skin.new(@md).select + @env.processing_path.epub_bld #(@md) + @env.processing_path.epub_cp_images(@md) + dir_epub=@env.processing_path.epub + SiSU_Env::InfoSkin.new(@md).select data=nil - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns,@md) #Beware #FIX opt and md, both not necessary - SiSU_Env::SiSU_file.new(@md).mkdir - @tuned_file_array=SiSU_EPUB::Source::XHtml_environment.new(@particulars).tuned_file_instructions + SiSU_Env::FileOp.new(@md).mkdir.output.epub + @tuned_file_array=SiSU_EPUB::Source::XHTML_Environment.new(@particulars).tuned_file_instructions data=@tuned_file_array scr_endnotes=SiSU_EPUB::Source::Endnotes.new(@md,data).scroll toc=SiSU_EPUB::Source::Toc.new(@md,data).songsheet data=@tuned_file_array - scr_toc=SiSU_EPUB::Source::Scroll_head_and_segtoc.new(@md,toc).in_common #watch + scr_toc=SiSU_EPUB::Source::ScrollHeadAndSegToc.new(@md,toc).in_common #watch SiSU_EPUB::Source::Seg.new(@md,data).songsheet - SiSU_EPUB::Source::Epub_output.new(@md).songsheet - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + SiSU_EPUB::Source::Output.new(@md).songsheet + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure unless @opt.cmd =~/[MV]/ #check maintenance flag - texfiles=Dir["#{@env.path.tune}/#{@opt.fns}*"] + texfiles=Dir["#{@env.processing_path.tune}/#{@opt.fns}*"] texfiles.each do |f| if FileTest.file?(f) File.unlink(f) end end end - SiSU_Env::Create_file.new(@opt.cmd,@opt.fns).param_instantiate + SiSU_Env::Clear.new(@opt.cmd,@opt.fns).param_instantiate @@flag,@@scr,@@seg,@@seg_endnotes,@@seg_subtoc,@@seg_ad={},{},{},{},{},{} @@seg_total,@@tracker,@@loop_count,@@tablehead,@@number_of_cols=0,0,0,0,0 @@seg_name,@@seg_name_html,@@seg_subtoc_array,@@seg_endnotes_array,@@segtocband,@@tablefoot=Array.new(7){[]} @@ -128,28 +128,21 @@ module SiSU_EPUB end end private - class XHtml_environment + class XHTML_Environment def initialize(particulars) @particulars=particulars @md,@env=particulars.md,particulars.env - @vz=SiSU_Env::Get_init.instance.skin - @env,@css,@symlnk=particulars.env,SiSU_Style::CSS.new,SiSU_Env::Create_system_link.new #home - end - def link_images - @symlnk.images + @vz=SiSU_Env::GetInit.instance.skin + @env,@css=particulars.env,SiSU_Style::CSS.new end def directories - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @path={ :root=>my_make.html_root } title=File.basename(@md.fns,'.rb') - SiSU_Env::SiSU_file.new(@md).mkdir + SiSU_Env::FileOp.new(@md).mkdir.output.epub end def tuned_file_instructions - @tell=SiSU_Screen::Ansi.new(@md.cmd) - @md.cmd=@md.cmd.gsub(/H/,'h') - @md.file_type='html' if @md.cmd =~/[hon]/ + @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) + @md.opt.cmd=@md.opt.cmd.gsub(/H/,'h') directories - newfilename=%{#{@env.path.output}/#{@md.fnb}/#{@md.fn[:index]}} if @md.file_type =~/html/ dal_array=@particulars.dal_array # dal file drawn here @tuned_file_array=SiSU_EPUB_Tune::Tune.new(dal_array,@md).songsheet @tuned_file_array @@ -162,10 +155,10 @@ module SiSU_EPUB end def scroll @scr_endnotes=[] - format_head_scroll=SiSU_EPUB_Format::Head_scroll.new(@md) + format_head_scroll=SiSU_EPUB_Format::HeadScroll.new(@md) @data.each do |dob| pg=dob.dup - unless pg.is =~/^code/ + unless pg.is ==:code if pg.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[\d*+]+ / endnote_array=[] if pg.obj=~/#{Mx[:en_a_o]}[\d*+].+?#{Mx[:en_a_c]}/m @@ -178,8 +171,8 @@ module SiSU_EPUB endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d+]+(.+?)#{Mx[:en_b_c]}/m) end endnote_array.flatten.each do |note| - txt_obj={:txt =>note} - format_scroll=SiSU_EPUB_Format::Format_scroll.new(@md,txt_obj) + txt_obj={ txt: note } + format_scroll=SiSU_EPUB_Format::FormatScroll.new(@md,txt_obj) @scr_endnotes << format_scroll.endnote_body end end @@ -189,22 +182,24 @@ module SiSU_EPUB end end class Toc - @@toc={ :seg=>[],:seg_mini=>[],:scr=>[],:ncx=>[],:opf=>[] } + @@toc={ seg: [], seg_mini: [], scr: [], ncx: [], opf: [] } @@seg_url='' @@firstseg=nil def initialize(md=nil,data='') @md,@data=md,data - @vz=SiSU_Env::Get_init.instance.skin - @epub=SiSU_EPUB_Format::Head_information.new(@md) - @tell=SiSU_Screen::Ansi.new(@md.cmd) if @md + @vz=SiSU_Env::GetInit.instance.skin + @epub=SiSU_EPUB_Format::HeadInformation.new(@md) + @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) if @md + @make=SiSU_Env::ProcessingSettings.new(@md) end def songsheet #extracts toc for scroll & seg - SiSU_Screen::Ansi.new(@md.cmd,'Toc').txt_grey if @md.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'Toc').txt_grey if @md.opt.cmd =~/[MVv]/ toc=nil @@firstseg=nil - @@toc={ :seg=>[],:seg_mini=>[],:scr=>[],:ncx=>[],:opf=>[] } - md_opf_a_content,md_opf_a_spine=[],[] - @nav_no=1 + @@toc={ seg: [], seg_mini: [], scr: [], ncx: [], opf: [] } + md_opf_a_content,md_opf_a_spine,md_opf_a_guide=[],[],[] + @nav_no=0 + @s_a_no,@s_b_no,@s_c_no=0,0,0 @@toc[:ncx] << @epub.toc_ncx.open #epub ncx navmap @@toc[:ncx] << @epub.toc_ncx.head_open << @epub.toc_ncx.head << @epub.toc_ncx.head_close @@toc[:ncx] << @epub.toc_ncx.doc_title << @epub.toc_ncx.doc_author @@ -212,56 +207,85 @@ module SiSU_EPUB @@toc[:opf] << @epub.metadata_opf.package_open @@toc[:opf] << @epub.metadata_opf.metadata @@toc[:opf] << @epub.metadata_opf.manifest_open - @@toc[:ncx] << @epub.toc_ncx.navmap_sisu_toc(@nav_no) #epub ncx navmap, toc @@toc[:seg] << %{<div class="content">\n<div class="substance">} @@toc[:scr] << %{<div class="content">\n<div class="substance">} md_opf_a_content << @epub.metadata_opf.manifest_content_sisu_toc - md_opf_a_spine << @epub.metadata_opf.spine_sisu_toc + if @make.build.toc? + md_opf_a_spine << @epub.metadata_opf.spine_sisu_toc + md_opf_a_guide << @epub.metadata_opf.guide_sisu_toc + end @ncxo=[nil,false,false,false,false,false,false] @dob_toc2,@dob_toc3=nil,nil @ncx_cls=[] + @level_a_first_occurrence=true @data.each do |dob| - if dob.is=='heading' \ - or dob.is=='heading_insert' + if dob.is==:heading \ + || dob.is==:heading_insert dob_toc=dob.dup toc=case dob_toc.ln when 1 - Toc.new(@md,dob_toc).level_1 + @s_a_no +=1 + name_s_a='section_a' + @s_a_no.to_s + @nav_no+=1 + @nav_no2=@nav_no + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[3] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[2] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[1] + @ncxo[1],@ncxo[2],@ncxo[3],@ncxo[4]=true,false,false,false + @epub.sections(dob_toc,name_s_a) + @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,name_s_a) if dob_toc + if @level_a_first_occurrence \ + && @make.build.toc? + @nav_no+=1 + @@toc[:ncx] << @epub.toc_ncx.navmap_sisu_toc(@nav_no) #epub ncx navmap, toc + @level_a_first_occurrence=false + end + md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,name_s_a) + md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,name_s_a) + md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,name_s_a) + SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_1 when 2 + @s_b_no +=1 + name_s_b='section_b' + @s_b_no.to_s @nav_no+=1 @nav_no2=@nav_no - @ncx_cls << @epub.toc_ncx.navpoint_close if @ncxo[4] - @ncx_cls << @epub.toc_ncx.navpoint_close if @ncxo[3] - @ncx_cls << @epub.toc_ncx.navpoint_close if @ncxo[2] - @ncxo[2],@ncxo[3],@ncxo[4]=false,false,false - @dob_toc2=dob_toc - @ncxo[2]=true - Toc.new(@md,dob_toc).level_2 + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[3] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[2] + @ncxo[2],@ncxo[3],@ncxo[4]=true,false,false + @epub.sections(dob_toc,name_s_b) + @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,name_s_b) if dob_toc + md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,name_s_b) + md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,name_s_b) + md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,name_s_b) + SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_2 when 3 + @s_c_no +=1 + name_s_c='section_c' + @s_c_no.to_s @nav_no+=1 @nav_no3=@nav_no - @ncx_cls << @epub.toc_ncx.navpoint_close if @ncxo[4] - @ncx_cls << @epub.toc_ncx.navpoint_close if @ncxo[3] - @ncxo[3],@ncxo[4]=false,false - @dob_toc3=dob_toc - @ncxo[3]=true - Toc.new(@md,dob_toc).level_3 + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4] + @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[3] + @ncxo[3],@ncxo[4]=true,false + @epub.sections(dob_toc,name_s_c) + @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,name_s_c) if dob_toc + md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,name_s_c) + md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,name_s_c) + md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,name_s_c) + SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_3 when 4 - @@toc[:ncx] << @ncx_cls if @ncx_cls.length > 0 @ncx_cls=[] - @@toc[:ncx] << @epub.toc_ncx.navpoint_top3(@dob_toc2,@nav_no2,dob_toc.name) if @dob_toc2 #epub ncx navmap - @@toc[:ncx] << @epub.toc_ncx.navpoint_top3(@dob_toc3,@nav_no3,dob_toc.name) if @dob_toc3 #epub ncx navmap - @dob_toc2,@dob_toc3=nil,nil @nav_no+=1 @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4] - @ncxo[4]=false - @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no) if dob_toc #epub ncx navmap @ncxo[4]=true + @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no) if dob_toc md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc) md_opf_a_spine << @epub.metadata_opf.spine(dob_toc) - Toc.new(@md,dob_toc).level_4 - when 5; Toc.new(@md,dob_toc).level_5 - when 6; Toc.new(@md,dob_toc).level_6 + md_opf_a_guide << @epub.metadata_opf.guide(dob_toc) + SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_4 + when 5; SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_5 + when 6; SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_6 else nil end toc.each do |k,d| @@ -276,8 +300,10 @@ module SiSU_EPUB begin @@toc[:seg] << toc[:seg] @@toc[:scr] << toc[:seg] - @@toc[:seg_mini] << toc[:seg_mini] if toc[:seg_mini] - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end end @@ -293,46 +319,36 @@ module SiSU_EPUB @@toc[:ncx] << @epub.toc_ncx.close @@toc[:opf] << md_opf_a_content << @epub.metadata_opf.manifest_close @@toc[:opf] << @epub.metadata_opf.spine_open << md_opf_a_spine << @epub.metadata_opf.spine_close + @@toc[:opf] << @epub.metadata_opf.guide_open << md_opf_a_guide << @epub.metadata_opf.guide_close @@toc[:opf] << @epub.metadata_opf.package_close @@toc[:opf]=@@toc[:opf].flatten - Epub_output.new(@md,@@toc[:opf]).epub_metadata_opf - Epub_output.new(@md,@@toc[:ncx]).epub_toc_ncx + SiSU_EPUB::Source::Output.new(@md,@@toc[:opf]).epub_metadata_opf + SiSU_EPUB::Source::Output.new(@md,@@toc[:ncx]).epub_toc_ncx @md.firstseg=@@firstseg @@toc end - def minitoc - minitoc=@@toc[:seg_mini].join("\n") - '<div class="toc">' + minitoc + '</div>' - end protected def level_1 dob=@data linkname,link=dob.obj.strip,dob.ocn if link \ and link !~/#/ #% keep eye on link - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,link) + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,link) end - title=if dob.obj !~/Document Information/; linkname + title=if dob.obj !~/Document Information/ + linkname else link='metadata' - %{<b><a href="#{@md.fnl[:pre]}#{link}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}">#{linkname}</a></b>} + %{<b><a href="#{link}#{Sfx[:epub_xhtml]}">#{linkname}</a></b>} end toc={} - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:seg]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ #check format_toc.lev0 else format_toc.lev1 end - toc[:seg_mini]=if dob.name =~/^meta/ \ - and dob.obj =~/Document Information/ #check - x=if @md.concord_make - format_toc.mini_concord_tail - else format_toc.mini_tail - end - else format_toc.mini_lev1 - end title=if dob.ocn ==0 if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ @@ -341,13 +357,13 @@ module SiSU_EPUB end else @@toc[:scr] << '<br />' - link=if dob.ln; dob.ln - else '' - end + link=(dob.ln) \ + ? dob.ln + : '' %{<b><a href="##{link}">#{linkname}</a></b>} end - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ format_toc.lev0 @@ -360,17 +376,16 @@ module SiSU_EPUB linkname,ocn=dob.obj.strip,dob.ocn if ocn \ and ocn !~/#/ - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) end - txt_obj={:txt =>linkname} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: linkname } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev2 - toc[:seg_mini]=format_toc.mini_lev2 if p_num title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev2 end toc @@ -380,17 +395,16 @@ module SiSU_EPUB linkname,ocn=dob.obj.strip,dob.ocn if ocn \ and ocn !~/#/ - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) end - txt_obj={:txt =>linkname} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: linkname } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev3 - toc[:seg_mini]=format_toc.mini_lev3 if p_num title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev3 end toc @@ -398,26 +412,25 @@ module SiSU_EPUB def level_4 dob=@data linkname,ocn=dob.obj.strip,dob.ocn - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) if ocn + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) if ocn if dob.ln==4 - seg_link=%{ <a href="#{@md.fnl[:pre]}#{dob.name}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}"> + seg_link=%{ <a href="#{dob.name}#{Sfx[:epub_xhtml]}"> #{dob.obj} </a> } @@seg_url=dob.name elsif dob.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/ seg_link=dob.obj.gsub(/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/, - %{<a href="#{@md.fnl[:pre]}\\1#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}">} + + %{<a href="\\1#{Sfx[:epub_xhtml]}">} + %{\\1 \\2</a> }) end - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) if ocn - txt_obj={:txt =>seg_link} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) if ocn + txt_obj={ txt: seg_link } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev4 - toc[:seg_mini]=format_toc.mini_lev4 title=%{#{p_num.goto}#{linkname}</a>} if p_num - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev4 toc end @@ -427,17 +440,16 @@ module SiSU_EPUB toc={} if ocn \ and ocn !~/#/ - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}#o#{ocn}"> + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + lnk_n_txt=%{ <a href="#{@@seg_url}#{Sfx[:epub_xhtml]}#o#{ocn}"> #{linkname} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev5 - toc[:seg_mini]=format_toc.mini_lev5 title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev5 end toc @@ -448,90 +460,61 @@ module SiSU_EPUB toc={} if ocn \ and ocn !~/#/ - p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}#o#{ocn}"> + p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + lnk_n_txt=%{ <a href="#{@@seg_url}#{Sfx[:epub_xhtml]}#o#{ocn}"> #{linkname} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev6 - toc[:seg_mini]=format_toc.mini_lev6 title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_EPUB_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev6 end toc end - def level_crosslink - dob=@data - if dob !~/^4~!/ - dob.gsub!(/^4~!\s+(\S+)\s+(.+)/, - %{<table><tr><td width =\"80\"></td> - <td><a href="http://\\1"> - #{@png.crosslink_ext} - \\2 - <\/a> - </td></tr></table> -}) - else - dob.gsub!(/^4~!\s+(\S+)\s+(.+)/, - %{<table><tr><td width ="80"> - </td><td> - <a href="\\1"> - #{@png.crosslink} - \\2 - <\/a> - </td></tr></table> -}) - end - end end - class Scroll_head_and_segtoc < Toc + class ScrollHeadAndSegToc < Toc def initialize(md='',toc='',links_guide_toc='') @md,@toc,@links_guide_toc=md,toc,links_guide_toc - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def in_common toc_shared=[] segtoc=[] - SiSU_Screen::Ansi.new(@md.cmd,'Scroll & Segtoc').txt_grey if @md.cmd =~/[MVv]/ - format_head_toc=SiSU_EPUB_Format::Head_toc.new(@md) + SiSU_Screen::Ansi.new(@md.opt.cmd,'Scroll & Segtoc').txt_grey if @md.opt.cmd =~/[MVv]/ + format_head_toc=SiSU_EPUB_Format::HeadToc.new(@md) dochead=format_head_toc.head - dochead.gsub!(/toc\.(html)/,'doc.\1') #kludge + dochead=dochead.gsub(/toc\.(html)/,'doc.\1') #kludge toc_shared << dochead #<< ads.div.major segtoc << format_head_toc.head #<< ads.div.major - toc_shared << format_head_toc.toc_head_escript if SiSU_EPUB_Format::Head_toc.method_defined? :toc_head_escript - segtoc << format_head_toc.toc_head_escript if SiSU_EPUB_Format::Head_toc.method_defined? :toc_head_escript if defined? @md.rights.all \ and @md.rights.all rights=format_head_toc.rights.all - rights=SiSU_EPUB_Tune::Clean_xhtml.new(rights).clean + rights=SiSU_EPUB_Tune::CleanXHTML.new(rights).clean end if defined? @md.notes.prefix_b \ and @md.notes.prefix_b prefix_b=format_head_toc.prefix_b - prefix_b=SiSU_EPUB_Tune::Clean_xhtml.new(prefix_b).clean + prefix_b=SiSU_EPUB_Tune::CleanXHTML.new(prefix_b).clean end - seg_toc_band=format_head_toc.seg_head_navigation_band - seg_toc_band_bottom=format_head_toc.seg_head_navigation_band_bottom tmp_head=nil doc_title_endnote=@md.title.full.gsub(/(\*+)/,'<sup><a href="#endnotes">\1</a></sup>') tmp_head=doc_title_endnote + "\n" - txt_obj={:txt =>tmp_head} - format_txt_obj=SiSU_EPUB_Format::Format_text_object.new(@md,txt_obj) + txt_obj={ txt: tmp_head } + format_txt_obj=SiSU_EPUB_Format::FormatTextObject.new(@md,txt_obj) toc_shared << format_txt_obj.center_bold segtoc << format_txt_obj.center_bold if defined? @md.creator.author \ and @md.creator.author creator_endnote=@md.creator.author.gsub(/(\*+)/,%{ <sup><a href="#notes">\\1</a></sup>}) tmp_head=creator_endnote + "\n" - txt_obj={:txt =>tmp_head} - format_txt_obj=SiSU_EPUB_Format::Format_text_object.new(@md,txt_obj) + txt_obj={ txt: tmp_head } + format_txt_obj=SiSU_EPUB_Format::FormatTextObject.new(@md,txt_obj) toc_shared << format_txt_obj.center_bold segtoc << format_txt_obj.center_bold end - segtoc << seg_toc_band tmp_head=nil if defined? @md.prefix_a \ and @md.prefix_a @@ -562,28 +545,25 @@ module SiSU_EPUB segtoc << prefix_b end #Segtoc tail added here - segtoc << seg_toc_band_bottom segtoc << format_head_toc.xhtml_close - segtoc.flatten!.compact! - Epub_output.new(@md,segtoc).segtoc + segtoc=segtoc.flatten.compact #watch + SiSU_EPUB::Source::Output.new(@md,segtoc).segtoc segtoc=[] @toc[:scr],@toc[:seg]=[],[] toc_shared end end - class Table < SiSU_XHTML_table::Table_xhtml + class Table < SiSU_XHTML_Table::TableXHTML end - class Seg < SiSU_EPUB_seg::Seg + class Seg < SiSU_EPUB_Seg::Seg end - class Epub_output - require 'fileutils' - include FileUtils #::Verbose + class Output def initialize(md,output='') @md,@output=md,output - @epub_out="#{@md.env.path.output}/epub" @epub_doc="#{@md.fnb}.epub" - @epub_header=SiSU_EPUB_Format::Head_information.new(@md) - @make=SiSU_Env::Create_file.new(@md.cmd,@md.fns,@md) + @epub_header=SiSU_EPUB_Format::HeadInformation.new(@md) + @make=SiSU_Env::ProcessingSettings.new(@md) + @make_file=SiSU_Env::CreateFile.new(@md.fns) end def songsheet mimetype @@ -594,50 +574,66 @@ module SiSU_EPUB output_zip end def mimetype - out=@make.epub.mimetype + out=@make_file.epub.mimetype out<<@epub_header.mimetype out.close end def metainf_container #container.xml file in META-INF directory - out=@make.epub.metainf_cont + out=@make_file.epub.metainf_cont out<<@epub_header.metainf_container out.close end def css - out=@make.epub.xhtml_css - out << SiSU_EPUB_Format::Css.new.css_epub_xhtml + out=@make_file.epub.xhtml_css + out << SiSU_EPUB_Format::CSS.new.css_epub_xhtml out.close end def epub_toc_ncx begin - out=@make.epub.toc_ncx + out=@make_file.epub.toc_ncx @output.each do |para| unless para =~/\A\s*\Z/ out.puts para end end out.close - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def epub_metadata_opf begin - out=@make.epub.metadata + out=@make_file.epub.metadata @output.each do |para| unless para =~/\A\s*\Z/ out.puts para end end out.close - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def images - img_pth=@md.env.path.image_source_local_tex + img_pth=@md.env.path.image_source_include + img_src_pth=unless @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + @md.file.output_path.epub.rel_image + else + pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1] + pt + '/image' + end @md.ec[:image].each do |x| - if FileTest.directory?("#{@md.env.path.epub}/OPS/image") \ - and FileTest.file?("#{img_pth}/#{x}") - cp("#{img_pth}/#{x}","#{@md.env.path.epub}/OPS/image") + if FileTest.directory?("#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") \ + && FileTest.file?("#{img_src_pth}/#{x}") + FileUtils::cp("#{img_src_pth}/#{x}","#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") + elsif FileTest.directory?("#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") \ + && FileTest.file?("#{img_pth}/#{x}") + FileUtils::cp("#{img_pth}/#{x}","#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}/image") + else STDERR.puts %{\t*WARN* did not find image - "#{x}" in #{img_src_pth} or #{img_pth} [#{__FILE__}:#{__LINE__}]} end end end @@ -645,31 +641,36 @@ module SiSU_EPUB SiSU_EPUB_Concordance::Source.new(@md.opt).read end def output_zip - mkdir_p(@epub_out) unless FileTest.directory?(@epub_out) - system(" - cd #{@md.env.path.epub} - zip -qXr9D #{@epub_doc} * - mv #{@epub_doc} #{@epub_out}/. - cd #{Dir.pwd} - ") - unless @md.cmd.inspect =~/M/ - system("rm -r #{@md.env.path.epub}") + FileUtils::mkdir_p(@md.file.output_path.epub.dir) unless FileTest.directory?(@md.file.output_path.epub.dir) + if FileTest.directory?(@md.env.processing_path.epub) + pwd=Dir.pwd + Dir.chdir(@md.env.processing_path.epub) + system(" + zip -qXr9D #{@epub_doc} * + ") + FileUtils::mv(@epub_doc, @md.file.place_file.epub.dir) + Dir.chdir(pwd) + unless @md.opt.cmd.inspect =~/M/ + FileUtils::rm_r(@md.env.processing_path.epub) + end end end def segtoc begin - filename_html_segtoc=@make.epub.xhtml_segtoc - filename_html_index=@make.epub.xhtml_index - @output.each do |para| - para.strip! - unless para =~/\A\s*\Z/ - filename_html_segtoc.puts para,"\n" - filename_html_index.puts para,"\n" + if @make.build.toc? + filename_xhtml=@make_file.epub.xhtml_index + @output.each do |para| + para=para.strip + unless para =~/\A\s*\Z/ + filename_xhtml.puts para,"\n" + end end + filename_xhtml.close + end + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ end - filename_html_segtoc.close - filename_html_index.close - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error end end end diff --git a/lib/sisu/v2/epub_concordance.rb b/lib/sisu/v4/epub_concordance.rb index 301d34a2..b8db317d 100644 --- a/lib/sisu/v2/epub_concordance.rb +++ b/lib/sisu/v4/epub_concordance.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,60 +57,60 @@ =end module SiSU_EPUB_Concordance - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/epub_format" # epub_format.rb + require_relative 'epub_format' # epub_format.rb include SiSU_EPUB_Format class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @env,@md=@particulars.env,@particulars.md - loc=@env.url.output_tell - tool=((@md.cmd =~/[MVv]/) ? "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:concordance]}" : '') - SiSU_Screen::Ansi.new(@md.cmd,"Concordance",tool).grey_title_hi unless @md.cmd =~/q/ wordmax=@env.concord_max unless @md.wc_words.nil? if @md.wc_words < wordmax SiSU_EPUB_Concordance::Source::Words.new(@particulars).songsheet else - SiSU_Screen::Ansi.new(@md.cmd,"concordance skipped, large document has over #{wordmax} words (#{@md.wc_words})").warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* concordance skipped, large document has over #{wordmax} words (#{@md.wc_words})").warn unless @md.opt.cmd =~/q/ end else - SiSU_Screen::Ansi.new(@md.cmd,"wc (word count) is off, concordance will be processed for all files including those over the max set size of: #{wordmax} words").warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* wc (word count) is off, concordance will be processed for all files including those over the max set size of: #{wordmax} words").warn unless @md.opt.cmd =~/q/ SiSU_EPUB_Concordance::Source::Words.new(@particulars).songsheet end - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end private - class Doc_title + class DocTitle include SiSU_Viz #revisit, both requires (html & shared_xml) needed for stand alone operation (sisu -w [filename]) - require "#{SiSU_lib}/epub" # epub.rb + require_relative 'epub' # epub.rb def initialize(particulars) @particulars,@md=particulars,particulars.md - @data=SiSU_EPUB::Source::XHtml_environment.new(particulars).tuned_file_instructions - @vz=SiSU_Env::Get_init.instance.skin + @data=SiSU_EPUB::Source::XHTML_Environment.new(particulars).tuned_file_instructions + @vz=SiSU_Env::GetInit.instance.skin txt_path=%{#{@md.dir_out}} - SiSU_Env::Info_skin.new(@md).select + SiSU_Env::InfoSkin.new(@md).select @fnb=@md.fnb @lex_button=%{<a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" height="44" width="144" valign="center" src="../_sisu/image/sisu.png" alt="SiSU home -->"></a>} @doc_details =<<WOK -<table summary="links to text related to this rudimentary index" width="96%" border="0" bgcolor="white" cellpadding="0" align="center"><tr><td width="2%" align="right"> </td><td width="94%" valign="top" align="justify"><h1 class="small"><a href="#{@md.fn[:toc]}" #{@vz.js_toc}><b>#{@md.title.full}</b></a></h1><p class="bold">#{@md.creator.author}</p></td></tr></table> +<table summary="links to text related to this rudimentary index" width="96%" border="0" bgcolor="white" cellpadding="0" align="center"><tr><td width="2%" align="right"> </td><td width="94%" valign="top" align="justify"><h1 class="small"><a href="#{@md.file.base_filename.epub}"><b>#{@md.title.full}</b></a></h1><p class="bold">#{@md.creator.author}</p></td></tr></table> WOK end def create - @css=SiSU_Env::CSS_stylesheet.new(@particulars.md) - format_head_toc=SiSU_EPUB_Format::Head_toc.new(@md) + @css=SiSU_Env::CSS_Stylesheet.new(@particulars.md) + format_head_toc=SiSU_EPUB_Format::HeadToc.new(@md) dochead=format_head_toc.head <<WOK #{dochead} @@ -145,18 +144,18 @@ WOK end end class Words - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/epub_format" # epub_format.rb + require_relative 'epub_format' # epub_format.rb include SiSU_EPUB_Format - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Screen def initialize(particulars) @particulars=particulars begin - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @path="#{@env.path.epub}" + @path="#{@env.processing_path.epub}" @freq=Hash.new(0) @rxp_lv1=/^#{Mx[:lv_o]}1:/ #fix Mx[:lv_o] @rxp_lv2=/^#{Mx[:lv_o]}2:/ #fix Mx[:lv_o] @@ -170,14 +169,24 @@ WOK @rxp_excluded0=/^(?:#{Mx[:fa_bold_o]}|#{Mx[:fa_italics_o]})?(?:to\d+|\d+| |#{Mx[:br_endnotes]}|EOF|#{Mx[:br_eof]}|thumb_\S+|snap_\S+|_+|-+|[(]?(?:ii+|iv|vi+|ix|xi+|xiv|xv|xvi+|xix|xx)[).]?|\S+?_\S+|[\d_]+\w\S+|[\w\d]{1,2}|\d{1,3}\w?|[0-9a-f]{16,64}|\d{2,3}x\d{2,3}|\S{0,2}sha\d|\S{0,3}\d{4}w\d\d|\b\w\d+|\d_all\b|e\.?g\.?)(?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})?$/mi #this regex causes and cures a stack dump in ruby 1.9 !!! @rgx_splitlist=%r{[—.,;:-]+|#{Mx[:nbsp]}+}mi @rgx_scanlist=%r{#{Mx[:fa_italics_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_italics_c]}|#{Mx[:fa_bold_o]}[a-zA-Z0-9"\s]{2,12}#{Mx[:fa_bold_c]}|#{Mx[:url_o]}https?://\S+?#{Mx[:url_c]}|file://\S+|<\S+?>|\w+|[a-zA-Z]+}mi - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def songsheet begin + #fix to use + p __LINE__.to_s + ':' + __FILE__ + p "#{@path}/content/#{@md.fn[:epub_concord]}" + p "#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}" @file_concordance=File.open("#{@path}/content/#{@md.fn[:epub_concord]}",'w') map_para - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure @file_concordance.close end @@ -185,18 +194,18 @@ WOK protected def location_scroll(wordlocation,show) @wordlocation=wordlocation - %{<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}\##{@wordlocation}">#{@wordlocation}</a>; } + %{<a href="doc#{Sfx[:epub_xhtml]}\##{@wordlocation}">#{@wordlocation}</a>; } end def location_seg(wordlocation,show) @wordlocation,@show=wordlocation,show - @word_location_seg=wordlocation.gsub(/(.+?)\#(\d+)/,"#{@md.fnl[:pre]}\\1#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}#o\\2") unless wordlocation.nil? + @word_location_seg=wordlocation.gsub(/(.+?)\#(\d+)/,"\\1#{Sfx[:epub_xhtml]}#o\\2") unless wordlocation.nil? case @wordlocation when @rxp_t1 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}##{@show}">H</a>]#{@show}, } + %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, } when @rxp_t2 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}##{@show}">H</a>]#{@show}, } + %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, } when @rxp_t3 - %{[<a href="#{@md.fnl[:pre]}doc#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}##{@show}">H</a>]#{@show}, } + %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, } else %{<a href="#{@word_location_seg}">#{@show}</a>, } end end @@ -205,54 +214,57 @@ WOK @word_map={} @dal_array.each do |line| if defined? line.ocn - if line.is =~/heading/ and line.ln==4; @seg=line.name + if (line.is ==:heading \ + || line.is ==:heading_insert) \ + && line.ln==4 + @seg=line.name end - if line.ocn.to_s =~/\d+/; toy=line.ocn.to_s + if line.ocn.to_s =~/\d+/ then toy=line.ocn.to_s end if toy =~/\d+/ \ and toy !~/^0$/ line.obj=line.obj.split(@rgx_splitlist).join(' ') #%take in word or other match for word in line.obj.scan(@rgx_scanlist) #%take in word or other match - word.gsub!(/#{Mx[:lnk_o]}|#{Mx[:lnk_c]}|#{Mx[:url_o]}|#{Mx[:url_c]}/,'') - word.gsub!(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,'') - word.gsub!(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,'') - word.gsub!(/#{Mx[:gl_o]}#[a-z]+#{Mx[:gl_c]}/,'') - word.gsub!(/#{Mx[:gl_o]}#[0-9]+#{Mx[:gl_c]}/,'') - word.gsub!(/^\S$/,'') + word=word.gsub(/#{Mx[:lnk_o]}|#{Mx[:lnk_c]}|#{Mx[:url_o]}|#{Mx[:url_c]}/,''). + gsub(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,''). + gsub(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,''). + gsub(/#{Mx[:gl_o]}#[a-z]+#{Mx[:gl_c]}/,''). + gsub(/#{Mx[:gl_o]}#[0-9]+#{Mx[:gl_c]}/,''). + gsub(/^\S$/,'') word=nil if word.empty? word=nil if word =~@rxp_excluded0 #watch word=nil if word =~@rxp_excluded1 #watch word=nil if word =~/^\S$/ if word - word.gsub!(/#{Mx[:br_nl]}|#{Mx[:br_line]}/,' ') - word.gsub!(/#{Mx[:fa_o]}[a-z]{1,7}#{Mx[:fa_o_c]}|#{Mx[:fa_c_o]}[a-z]{1,7}#{Mx[:fa_c]}/,'') - word.gsub!(/#{Mx[:mk_o]}(?:[0-9a-f]{32}:[0-9a-f]{32}|[0-9a-f]{64}:[0-9a-f]{64})#{Mx[:mk_c]}/,'') - word.gsub!(/#{Mx[:mk_o]}(?:[0-9a-f]{32}|[0-9a-f]{64})#{Mx[:mk_c]}/,'') - word.gsub!(/#{Mx[:en_a_o]}(?:\d|[*+])*|#{Mx[:en_b_o]}(?:\d|[*+])*|#{Mx[:en_a_c]}|#{Mx[:en_b_c]}/mi,'') - word.gsub!(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,''); word.gsub!(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,'') - word.gsub!(/<\/?\S+?>/,'') - word.gsub!(/^\@+/,'') - word.strip! - word.gsub!(/#{Mx[:tc_p]}.+/,'') - word.gsub!(/[\.,;:"]$/,'') - word.gsub!(/["]/,'') - word.gsub!(/^\s*[\(]/,'') - word.gsub!(/[\(]\s*$/,'') - word.gsub!(/^(?:See|e\.?g\.?).+/,'') - word.gsub!(/^\s*[.,;:]\s*/,'') - word.strip! - word.gsub!(/^\(?[a-zA-Z]\)$/,'') - word.gsub!(/^\d+(st|nd|rd|th)$/,'') - word.gsub!(/^(\d+\.?)+$/, '') - word.gsub!(/#{Mx[:mk_o]}|#{Mx[:mk_c]}/,'') - word.gsub!(/:name#\S+/,'') - word.gsub!(/^\S$/,'') + word=word.gsub(/#{Mx[:br_nl]}|#{Mx[:br_line]}/,' '). + gsub(/#{Mx[:fa_o]}[a-z]{1,7}#{Mx[:fa_o_c]}|#{Mx[:fa_c_o]}[a-z]{1,7}#{Mx[:fa_c]}/,''). + gsub(/#{Mx[:mk_o]}(?:[0-9a-f]{32}:[0-9a-f]{32}|[0-9a-f]{64}:[0-9a-f]{64})#{Mx[:mk_c]}/,''). + gsub(/#{Mx[:mk_o]}(?:[0-9a-f]{32}|[0-9a-f]{64})#{Mx[:mk_c]}/,''). + gsub(/#{Mx[:en_a_o]}(?:\d|[*+])*|#{Mx[:en_b_o]}(?:\d|[*+])*|#{Mx[:en_a_c]}|#{Mx[:en_b_c]}/mi,''). + gsub(/#{Mx[:fa_o]}\S+?#{Mx[:fa_o_c]}/,'').gsub(/#{Mx[:fa_c_o]}\S+?#{Mx[:fa_c]}/,''). + gsub(/<\/?\S+?>/,''). + gsub(/^\@+/,''). + strip. + gsub(/#{Mx[:tc_p]}.+/,''). + gsub(/[\.,;:"]$/,''). + gsub(/["]/,''). + gsub(/^\s*[\(]/,''). + gsub(/[\(]\s*$/,''). + gsub(/^(?:See|e\.?g\.?).+/,''). + gsub(/^\s*[.,;:]\s*/,''). + strip. + gsub(/^\(?[a-zA-Z]\)$/,''). + gsub(/^\d+(st|nd|rd|th)$/,''). + gsub(/^(\d+\.?)+$/, ''). + gsub(/#{Mx[:mk_o]}|#{Mx[:mk_c]}/,''). + gsub(/:name#\S+/,''). + gsub(/^\S$/,'') word=nil if word =~/^\S$/ word=nil if word =~/^\s*$/ #watch if word unless word =~/[A-Z][A-Z]/ \ or word =~/\w+\s\w+/ - word.capitalize! + word=word.capitalize end @freq[word] +=1 @word_map[word] ||= [] @@ -275,7 +287,7 @@ WOK end scr='<font size="1" color="#777777" face=times new roman><img border="0" height="15" width="15" src="../_sisu/image/b_doc.png" alt="Full Text"> scroll: </font><font size="1" color="#222222" face=times new roman>doc# </font> ' seg='' - @file_concordance << SiSU_EPUB_Concordance::Source::Doc_title.new(@particulars).create + @file_concordance << SiSU_EPUB_Concordance::Source::DocTitle.new(@particulars).create alph=%W[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] @file_concordance << '<p>' alph.each {|x| @file_concordance << %{<a href="##{x}">#{x}</a>, }} diff --git a/lib/sisu/v2/epub_format.rb b/lib/sisu/v4/epub_format.rb index 5b452f83..70636fb1 100644 --- a/lib/sisu/v2/epub_format.rb +++ b/lib/sisu/v4/epub_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,31 +57,27 @@ =end module SiSU_EPUB_Format include SiSU_Viz - class Paragraph_number + class ParagraphNumber def initialize(md,ocn) @md,@ocn=md,ocn.to_s @ocn ||='' - vz=SiSU_Env::Get_init.instance.skin - @skin_no_ocn=if defined? vz.ocn_display_off \ - and vz.ocn_display_off==true - true - else false - end + vz=SiSU_Env::GetInit.instance.skin end def ocn_display - if @md.markup.inspect =~/no_ocn/ \ - or @md.mod.inspect =~/--no-ocn/ \ - or @skin_no_ocn - ocn_class='ocn_off' - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"> </label>}) - elsif @ocn.to_i==0 - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"> </label>}) - else + @make=SiSU_Env::ProcessingSettings.new(@md) + if @make.build.ocn? ocn_class='ocn' + if @ocn.to_i==0 + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"> </label>}) + else + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"><a href="#o\\1" class="lnk#{ocn_class}">\\1</a></label>}) + end + else + ocn_class='ocn_off' @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"><a href="#o\\1" class="lnk#{ocn_class}">\\1</a></label>}) + %{<label class="#{ocn_class}"> </label>}) end end def name @@ -95,7 +90,7 @@ module SiSU_EPUB_Format %{<a href="##{@ocn}">} end end - class Css + class CSS def css_epub_xhtml <<WOK /* SiSU epub css default stylesheet */ @@ -155,12 +150,13 @@ module SiSU_EPUB_Format margin-right: 1%; } - .norm, .bold, .verse, .group, .alt { + .norm, .bold, .verse, .group, .block, .alt { line-height: 150%; margin-left: 0em; margin-right: 2em; margin-top: 10px; margin-bottom: 0px; + padding-left: 0em; text-indent: 0mm; } p, h0, h1, h2, h3, h4, h5, h6 { @@ -177,15 +173,425 @@ module SiSU_EPUB_Format margin-bottom: 3px; } p.norm { } - p.i1 {margin-left: 1em;} - p.i2 {margin-left: 2em;} - p.i3 {margin-left: 3em;} - p.i4 {margin-left: 4em;} - p.i5 {margin-left: 5em;} - p.i6 {margin-left: 6em;} - p.i7 {margin-left: 7em;} - p.i8 {margin-left: 8em;} - p.i9 {margin-left: 9em;} + p.i1 {padding-left: 1em;} + p.i2 {padding-left: 2em;} + p.i3 {padding-left: 3em;} + p.i4 {padding-left: 4em;} + p.i5 {padding-left: 5em;} + p.i6 {padding-left: 6em;} + p.i7 {padding-left: 7em;} + p.i8 {padding-left: 8em;} + p.i9 {padding-left: 9em;} + + p.h0i0 { + padding-left: 0em; + text-indent: 0em; + } + p.h0i1 { + padding-left: 1em; + text-indent: -1em; + } + p.h0i2 { + padding-left: 2em; + text-indent: -2em; + } + p.h0i3 { + padding-left: 3em; + text-indent: -3em; + } + p.h0i4 { + padding-left: 4em; + text-indent: -4em; + } + p.h0i5 { + padding-left: 5em; + text-indent: -5em; + } + p.h0i6 { + padding-left: 6em; + text-indent: -6em; + } + p.h0i7 { + padding-left: 7em; + text-indent: -7em; + } + p.h0i8 { + padding-left: 8em; + text-indent: -8em; + } + p.h0i9 { + padding-left: 9em; + text-indent: -9em; + } + + p.h1i0 { + padding-left: 0em; + text-indent: 1em; + } + p.h1i1 { + padding-left: 1em; + text-indent: 0em; + } + p.h1i2 { + padding-left: 2em; + text-indent: -1em; + } + p.h1i3 { + padding-left: 3em; + text-indent: -2em; + } + p.h1i4 { + padding-left: 4em; + text-indent: -3em; + } + p.h1i5 { + padding-left: 5em; + text-indent: -4em; + } + p.h1i6 { + padding-left: 6em; + text-indent: -5em; + } + p.h1i7 { + padding-left: 7em; + text-indent: -6em; + } + p.h1i8 { + padding-left: 8em; + text-indent: -7em; + } + p.h1i9 { + padding-left: 9em; + text-indent: -8em; + } + + p.h2i0 { + padding-left: 0em; + text-indent: 2em; + } + p.h2i1 { + padding-left: 1em; + text-indent: 1em; + } + p.h2i2 { + padding-left: 2em; + text-indent: 0em; + } + p.h2i3 { + padding-left: 3em; + text-indent: -1em; + } + p.h2i4 { + padding-left: 4em; + text-indent: -2em; + } + p.h2i5 { + padding-left: 5em; + text-indent: -3em; + } + p.h2i6 { + padding-left: 6em; + text-indent: -4em; + } + p.h2i7 { + padding-left: 7em; + text-indent: -5em; + } + p.h2i8 { + padding-left: 8em; + text-indent: -6em; + } + p.h2i9 { + padding-left: 9em; + text-indent: -7em; + } + + p.h3i0 { + padding-left: 0em; + text-indent: 3em; + } + p.h3i1 { + padding-left: 1em; + text-indent: 2em; + } + p.h3i2 { + padding-left: 2em; + text-indent: 1em; + } + p.h3i3 { + padding-left: 3em; + text-indent: 0em; + } + p.h3i4 { + padding-left: 4em; + text-indent: -1em; + } + p.h3i5 { + padding-left: 5em; + text-indent: -2em; + } + p.h3i6 { + padding-left: 6em; + text-indent: -3em; + } + p.h3i7 { + padding-left: 7em; + text-indent: -4em; + } + p.h3i8 { + padding-left: 8em; + text-indent: -5em; + } + p.h3i9 { + padding-left: 9em; + text-indent: -6em; + } + + p.h4i0 { + padding-left: 0em; + text-indent: 4em; + } + p.h4i1 { + padding-left: 1em; + text-indent: 3em; + } + p.h4i2 { + padding-left: 2em; + text-indent: 2em; + } + p.h4i3 { + padding-left: 3em; + text-indent: 1em; + } + p.h4i4 { + padding-left: 4em; + text-indent: 0em; + } + p.h4i5 { + padding-left: 5em; + text-indent: -1em; + } + p.h4i6 { + padding-left: 6em; + text-indent: -2em; + } + p.h4i7 { + padding-left: 7em; + text-indent: -3em; + } + p.h4i8 { + padding-left: 8em; + text-indent: -4em; + } + p.h4i9 { + padding-left: 9em; + text-indent: -5em; + } + + p.h5i0 { + padding-left: 0em; + text-indent: 5em; + } + p.h5i1 { + padding-left: 1em; + text-indent: 4em; + } + p.h5i2 { + padding-left: 2em; + text-indent: 3em; + } + p.h5i3 { + padding-left: 3em; + text-indent: 2em; + } + p.h5i4 { + padding-left: 4em; + text-indent: 1em; + } + p.h5i5 { + padding-left: 5em; + text-indent: 0em; + } + p.h5i6 { + padding-left: 6em; + text-indent: -1em; + } + p.h5i7 { + padding-left: 7em; + text-indent: -2em; + } + p.h5i8 { + padding-left: 8em; + text-indent: -3em; + } + p.h5i9 { + padding-left: 9em; + text-indent: -4em; + } + + p.h6i0 { + padding-left: 0em; + text-indent: 6em; + } + p.h6i1 { + padding-left: 1em; + text-indent: 5em; + } + p.h6i2 { + padding-left: 2em; + text-indent: 4em; + } + p.h6i3 { + padding-left: 3em; + text-indent: 3em; + } + p.h6i4 { + padding-left: 4em; + text-indent: 2em; + } + p.h6i5 { + padding-left: 5em; + text-indent: 1em; + } + p.h6i6 { + padding-left: 6em; + text-indent: 0em; + } + p.h6i7 { + padding-left: 7em; + text-indent: -1em; + } + p.h6i8 { + padding-left: 8em; + text-indent: -2em; + } + p.h6i9 { + padding-left: 9em; + text-indent: -3em; + } + + p.h7i0 { + padding-left: 0em; + text-indent: 7em; + } + p.h7i1 { + padding-left: 1em; + text-indent: 6em; + } + p.h7i2 { + padding-left: 2em; + text-indent: 5em; + } + p.h7i3 { + padding-left: 3em; + text-indent: 4em; + } + p.h7i4 { + padding-left: 4em; + text-indent: 3em; + } + p.h7i5 { + padding-left: 5em; + text-indent: 2em; + } + p.h7i6 { + padding-left: 6em; + text-indent: 1em; + } + p.h7i7 { + padding-left: 7em; + text-indent: 0em; + } + p.h7i8 { + padding-left: 8em; + text-indent: -1em; + } + p.h7i9 { + padding-left: 9em; + text-indent: -2em; + } + + p.h8i0 { + padding-left: 0em; + text-indent: 8em; + } + p.h8i1 { + padding-left: 1em; + text-indent: 7em; + } + p.h8i2 { + padding-left: 2em; + text-indent: 6em; + } + p.h8i3 { + padding-left: 3em; + text-indent: 5em; + } + p.h8i4 { + padding-left: 4em; + text-indent: 4em; + } + p.h8i5 { + padding-left: 5em; + text-indent: 3em; + } + p.h8i6 { + padding-left: 6em; + text-indent: 2em; + } + p.h8i7 { + padding-left: 7em; + text-indent: 1em; + } + p.h8i8 { + padding-left: 8em; + text-indent: 0em; + } + p.h8i9 { + padding-left: 9em; + text-indent: -1em; + } + + p.h9i0 { + padding-left: 0em; + text-indent: 9em; + } + p.h9i1 { + padding-left: 1em; + text-indent: 8em; + } + p.h9i2 { + padding-left: 2em; + text-indent: 7em; + } + p.h9i3 { + padding-left: 3em; + text-indent: 6em; + } + p.h9i4 { + padding-left: 4em; + text-indent: 5em; + } + p.h9i5 { + padding-left: 5em; + text-indent: 4em; + } + p.h9i6 { + padding-left: 6em; + text-indent: 3em; + } + p.h9i7 { + padding-left: 7em; + text-indent: 2em; + } + p.h9i8 { + padding-left: 8em; + text-indent: 1em; + } + p.h9i9 { + padding-left: 9em; + text-indent: 0em; + } p.it0 { margin-left: 0em; @@ -250,6 +656,8 @@ module SiSU_EPUB_Format p.group { } + p.block { } + p.alt { } p.verse { @@ -260,6 +668,7 @@ module SiSU_EPUB_Format font-family: inconsolata, andale mono, courier new, courier, monospace; font-size: 90%; text-align: left; + background-color: #eeeeee; } p.caption { @@ -784,36 +1193,6 @@ module SiSU_EPUB_Format background-color: #f9f9aa; } - .minitoc { - font-weight: normal; - margin-top: 2px; - margin-bottom: 2px; - } - h1.minitoc, h2.minitoc, h3.minitoc { - margin-left: 0em; - font-weight: bold; - text-align: left; - font-size: 90%; - margin-top: 4px; - margin-bottom: 4px; - } - h4.minitoc { - margin-left: 0em; - font-size: 90%; - } - h5.minitoc { - margin-left: 1em; - font-size: 85%; - } - h6.minitoc { - margin-left: 2em; - font-size: 85%; - } - h0.minitoc { - margin-left: 0em; - font-size: 90%; - } - h1.c, h2.c, h3.c, h4.c, h5.c, h6.c, p.c { text-align: center } @@ -838,14 +1217,14 @@ module SiSU_EPUB_Format WOK end end - class Head_information + class HeadInformation include SiSU_Viz attr_reader :md,:rdf,:vz def initialize(md) @md=md # DublinCore 1 - title - @vz=SiSU_Env::Get_init.instance.skin - @css=SiSU_Env::CSS_stylesheet.new(md) + @vz=SiSU_Env::GetInit.instance.skin + @css=SiSU_Env::CSS_Stylesheet.new(md) @seg_name_xhtml=(SiSU_EPUB::Source::Seg.new.seg_name_xhtml || []) @seg_name_xhtml_tracker=(SiSU_EPUB::Source::Seg.new.seg_name_xhtml_tracker || []) @index='index' @@ -854,7 +1233,7 @@ WOK end def doc_type_xhtml <<WOK -<?xml version="1.0" encoding="UTF-8"?> +<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> @@ -896,16 +1275,44 @@ WOK end def metainf_container #container.xml file in META-INF directory #simple, make sure full-path of rootfile points to metadata.opf - #epub_metadata.opf epb.opf + #epub_metadata.opf content.opf <<WOK -<?xml version="1.0" encoding="UTF-8"?> -<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0"> +<?xml version='1.0' encoding='utf-8'?> +<container version="1.0" + xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> <rootfiles> - <rootfile full-path="OPS/epb.opf" media-type="application/oebps-package+xml"/> + <rootfile full-path="#{Ep[:d_oebps]}/#{Ep[:f_opf]}" + media-type="application/oebps-package+xml" /> </rootfiles> </container> WOK end + def sections(dob,name) + filename="#{name}#{Sfx[:epub_xhtml]}" + dir_epub_cont="#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}" + segfilename="#{dir_epub_cont}/#{filename}" + output_epub_cont_seg=File.new(segfilename,'w') + output_epub_cont_seg << %{#{doc_type} +<head> + <title> + #{dob.obj} - + #{@md.html_title} + </title> +<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> +#{@css.xhtml_epub} +</head> +#{@vz.color_body} +<div class="content"> +<div class="substance"> + <label class="ocn"><a href="#o8" class="lnkocn">8</a></label> + <h1 class="norm" id="o8"> + #{dob.obj} + </h1> +</div> +</body> +</html>} +output_epub_cont_seg.close + end def toc_ncx #list of navigation points (like chapters), table of contents, listing each navigation point (chapters and such) under the navigation map def structure open @@ -921,6 +1328,9 @@ WOK end def open <<WOK +<?xml version="1.0"?> +<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" + "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"> <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> WOK end @@ -935,15 +1345,17 @@ WOK WOK end def head - depth=@md.lvs[2] + @md.lvs[3] + @md.lvs[4] + depth=@md.lvs[1] + @md.lvs[2] + @md.lvs[3] + @md.lvs[4] <<WOK <!-- four required metadata items (for all NCX documents, (including the relaxed constraints of OPS 2.0) --> - <meta name="dtb:uid" content="#{@md.dgst[1]}"/> - <!-- <meta name="epub-creator" content="#{@md.publisher}"/> --> - <meta name="dtb:depth" content="#{depth}"/> - <meta name="dtb:totalPageCount" content="0"/> - <meta name="dtb:maxPageNumber" content="0"/> + <title>#{@md.title.full} by #{@md.author}</title> + <link href="css/xhtml.css" rel="stylesheet" type="text/css" id="main-css" /> + <meta name="dtb:uid" content="urn:uuid:#{@md.dgst[1]}" /> + <!-- <meta name="epub-creator" content="#{@md.publisher}" /> --> + <meta name="dtb:depth" content="#{depth}" /> + <meta name="dtb:totalPageCount" content="0" /> + <meta name="dtb:maxPageNumber" content="0" /> WOK end def head_close @@ -971,31 +1383,29 @@ WOK WOK end def navmap_sisu_toc(no) + id_u=DISABLE[:epub][:ncx_navpoint_unique_id] \ + ? '' + : "-#{no}" <<WOK - <navPoint id="navpoint-#{no}" playOrder="#{no}"> + <navPoint id="navpoint#{id_u}" playOrder="#{no}"> <navLabel> <text>Table of Contents</text> </navLabel> - <content src="index#{Sfx[:epub_xhtml]}"/> + <content src="index#{Sfx[:epub_xhtml]}" /> </navPoint> WOK end - def navpoint(dob,no) + def navpoint(dob,no,name=nil) + name=name ? name : dob.name + id_u=DISABLE[:epub][:ncx_navpoint_unique_id] \ + ? '' + : "-#{no}" <<WOK - <navPoint id="navpoint-#{no}" playOrder="#{no}"> + <navPoint id="navpoint#{id_u}" playOrder="#{no}"> <navLabel> <text>#{dob.obj}</text> </navLabel> - <content src="#{dob.name}#{Sfx[:epub_xhtml]}"/> -WOK - end - def navpoint_top3(dob,no,name) - <<WOK - <navPoint id="navpoint-#{no}" playOrder="#{no}"> - <navLabel> - <text>#{dob.obj}</text> - </navLabel> - <content src="#{name}#{Sfx[:epub_xhtml]}"/> + <content src="#{name}#{Sfx[:epub_xhtml]}" /> WOK end def navpoint_close @@ -1019,11 +1429,13 @@ WOK manifest_close spine_open spine_close + guide_open + guide_close package_close end def package_open <<WOK -<?xml version="1.0" encoding="UTF-8"?> +<?xml version='1.0' encoding='utf-8'?> <package xmlns="http://www.idpf.org/2007/opf" unique-identifier="EPB-UUID" version="2.0"> WOK end @@ -1035,16 +1447,112 @@ WOK def metadata #metadata dc author=if defined? @md.creator.author \ and @md.creator.author =~/\S+/ - x=@md.creator.author.gsub!(/</,'<'); @md.creator.author.gsub!(/>/,'>') - @md.creator.author.gsub!(/<br(?: \/)?>/,'<br />') - %{\n <dc:creator opf:file-as="#{x}" opf:role="aut">#{x}</dc:creator>} + m='' + @md.creator.author_detail.each do |x| + surname=x[:the] \ + ? x[:the] + : '' + other_names=x[:others] \ + ? ', ' + x[:others] + : '' + m=(m.empty?) \ + ? (surname + other_names) + : (m + '; ' + surname + ', ' + other_names) + m=m.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,';') + end + x=@md.creator.author.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:creator opf:file-as="#{m}" opf:role="aut">#{x}</dc:creator>} + else '' + end + editor=if defined? @md.creator.editor \ + and @md.creator.editor =~/\S+/ + m='' + @md.creator.editor_detail.each do |x| + surname=x[:the] \ + ? x[:the] + : '' + other_names=x[:others] \ + ? ', ' + x[:others] + : '' + m=(m.empty?) \ + ? (surname + other_names) + : (m + '; ' + surname + ', ' + other_names) + m=m.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,';') + end + x=@md.creator.editor.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:creator opf:file-as="#{m}" opf:role="edt">#{x}</dc:creator>} + else '' + end + translator=if defined? @md.creator.translator \ + and @md.creator.translator =~/\S+/ + m='' + @md.creator.translator_detail.each do |x| + surname=x[:the] \ + ? x[:the] + : '' + other_names=x[:others] \ + ? ', ' + x[:others] + : '' + m=(m.empty?) \ + ? (surname + other_names) + : (m + '; ' + surname + ', ' + other_names) + m=m.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,';') + end + x=@md.creator.translator.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:creator opf:file-as="#{m}" opf:role="trl">#{x}</dc:creator>} else '' end illustrator=if defined? @md.creator.illustrator \ and @md.creator.illustrator =~/\S+/ - x=@md.creator.illustrator.gsub!(/</,'<'); @md.creator.illustrator.gsub!(/>/,'>') - @md.creator.illustrator.gsub!(/<br(?: \/)?>/,'<br />') - %{\n <dc:creator opf:file-as="#{x}" opf:role="ill">#{x}</dc:creator>} + m='' + @md.creator.illustrator_detail.each do |x| + surname=x[:the] \ + ? x[:the] + : '' + other_names=x[:others] \ + ? ', ' + x[:others] + : '' + m=(m.empty?) \ + ? (surname + other_names) + : (m + '; ' + surname + ', ' + other_names) + m=m.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,';') + end + x=@md.creator.illustrator.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:creator opf:file-as="#{m}" opf:role="ill">#{x}</dc:creator>} + else '' + end + date_published=if defined? @md.date.published \ + and @md.date.published =~/\S+/ + x=@md.date.published.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:date opf:event="published">#{x}</dc:date>} + else '' + end + subject=if defined? @md.classify.subject \ + and @md.classify.subject =~/\S+/ + x=@md.classify.subject.dup + x=x.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + %{\n <dc:subject>#{x}</dc:subject>} + else '' + end + language=if defined? @md.opt.lng \ + and @md.opt.lng =~/\S+/ + language=@md.opt.lng.gsub(/<br>/,'<br />') + %{\n <dc:language>#{language}</dc:language>} else '' end rights=if defined? @md.rights.all \ @@ -1053,14 +1561,16 @@ WOK %{\n <dc:rights>#{rights}</dc:rights>} else '' end + f=SiSU_Env::FileOp.new(@md) <<WOK - <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf"> + <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:opf="http://www.idpf.org/2007/opf" + unique-identifier="urn:uuid:#{@md.dgst[1]}" version="2.0"> <dc:title>#{@md.title.full}</dc:title> - #{author}#{illustrator} - <dc:language>en-US</dc:language> - <dc:identifier id="bookid">...</dc:identifier> - #{rights} - <dc:identifier id="EPB-UUID">urn:uuid:#{@md.dgst[1]}</dc:identifier> + #{author}#{editor}#{translator}#{illustrator}#{language}#{date_published}#{subject}#{rights} + <dc:identifier opf:scheme="URI">#{f.output_path.epub.url}/#{f.base_filename.epub}</dc:identifier> + <dc:identifier id="bookid">urn:uuid:#{@md.dgst[1]}</dc:identifier> + <!-- <dc:identifier id="EPB-UUID">urn:uuid:#{@md.dgst[1]}</dc:identifier> --> </metadata> WOK end @@ -1068,29 +1578,30 @@ WOK <<WOK <manifest> <!-- NCX --> - <item id="ncx" href="epb.ncx" media-type="application/x-dtbncx+xml"/> + <item id="ncx" href="#{Ep[:f_ncx]}" media-type="application/x-dtbncx+xml" /> <!-- CSS Style Sheets --> - <item id="main-css" href="css/xhtml.css" media-type="text/css"/> + <item id="main-css" href="css/xhtml.css" media-type="text/css" /> <!-- Content Documents --> WOK end def manifest_content_sisu_toc <<WOK - <item id="index" href="index.xhtml" media-type="application/xhtml+xml"/> + <item id="index" href="index.xhtml" media-type="application/xhtml+xml" /> WOK end - def manifest_content(dob) + def manifest_content(dob,name=nil) + name=name ? name : dob.name <<WOK - <item id="#{dob.name}" href="#{dob.name}#{Sfx[:epub_xhtml]}" media-type="application/xhtml+xml"/> + <item id="#{name}" href="#{name}#{Sfx[:epub_xhtml]}" media-type="application/xhtml+xml" /> WOK - end + end def manifest_images(imgs) imgs=imgs + ['arrow_next_red.png','arrow_prev_red.png','arrow_up_red.png','bullet_09.png'] images=[" <!-- Images -->\n"] imgs.each do |i| image,type=/(\S+?)\.(png|jpg|gif)/.match(i)[1,2] images<<<<WOK - <item id="#{image}" href="image/#{image}.#{type}" media-type="image/#{type}"/> + <item id="#{image}" href="image/#{image}.#{type}" media-type="image/#{type}" /> WOK end images=images.join('') @@ -1102,19 +1613,20 @@ WOK WOK end def spine_open - #spine: reading order of HTML files from manifest, idref attribute refers back to id in manifest (exclude images, CSS etc.). + #spine: reading order of XHTML files from manifest, idref attribute refers back to id in manifest (exclude images, CSS etc.). <<WOK <spine toc="ncx"> WOK end def spine_sisu_toc <<WOK - <itemref idref="index" linear="yes"/> + <itemref idref="index" linear="yes" /> WOK end - def spine(dob) + def spine(dob,name=nil) + name=name ? name : dob.name <<WOK - <itemref idref="#{dob.name}" linear="yes"/> + <itemref idref="#{name}" linear="yes" /> WOK end def spine_close @@ -1122,185 +1634,70 @@ WOK </spine> WOK end + def guide_open + #guide: presentation order of XHTML files by reader). + <<WOK + <guide> +WOK + end + def guide_sisu_toc + <<WOK + <reference type="index" href="index#{Sfx[:epub_xhtml]}" /> +WOK + end + def guide(dob,name=nil) + name=name ? name : dob.name + <<WOK + <reference type="text" href="#{name}#{Sfx[:epub_xhtml]}" /> +WOK + end + def guide_close + <<WOK + </guide> +WOK + end self end - def toc_head_escript - end - def seg_head_escript - end def table_close %{ </font> #{@vz.table_close}} end - def buttons_home - %{<!- home and index buttons -!> - #{@vz.banner_home_and_index_buttons} -<!- home and index buttons -!>} - end - def copyat - %{<p class="tiny">copy @ - <a href="#{@vz.url_home}" #{@vz.js_home}> - #{@vz.txt_home} - </a></p>} - end def xhtml_close %{#{@vz.credits_sisu_epub} </body> </html>} end end - class Widget < Head_information - def initialize(md) - super(md) - @md=md - @cf_defaults=SiSU_Env::Info_processing_flag.new - end - def home - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="../index.html" target="_top"> - #{@vz.png_homepage}</a> -</td> -} - end - def scroll(text) - if @md.fns =~ /\.(?:-|ssm\.)?sst$/ - scroll=%{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:doc]}" target="_top" #{@vz.js_doc}> - #{text} - </a> -</td> -} - end - end - def seg(text) - %{<td align="center" bgcolor="#99CC66"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_doc}> - #{text} - </a> -</td> -} - end - def search - env=SiSU_Env::Info_env.new(@md.fns,@md) - env.widget.search_form('sisusearch',nil,nil,true) - end - def manifest - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> - #{@vz.nav_txt_manifest} - </a> -</td>} - end - def pdf - pdf=if @md.programs[:pdf] \ - and @cf_defaults.cf_0 =~/p/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_p]}" target="_top" #{@vz.js_portrait}> - #{@vz.nav_txt_pdf_portrait} - </a> -</td> -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_l]}" target="_top" #{@vz.js_landscape}> - #{@vz.nav_txt_pdf_landscape} - </a> -</td> -} - else '' - end - end - def odf - odf=if @cf_defaults.cf_0 =~/o/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:odf]}" target="_top" #{@vz.js_odf}> - #{@vz.nav_txt_odf} - </a> -</td>} - else '' - end - end - def concordance(text) - if @md.concord_make \ - and @md.wc_words < 300000 #max word count for display of concordance here as would now be a large file - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a> - </td>} - else '' - end - end - end - class XML - end - class Head_toc < Head_information + class HeadToc < HeadInformation def initialize(md) super(md) @md=md @tocband_segtoc=make_seg end - def concordance_navigation_band(type='') - if type=~/pdf/ - @tocband_concordance=make_concordance - end - %{<p class="align_right"> - <a href="index.html" target="_top"> - #{@vz.epub_png_nav_toc} - </a> -</p> -} - end - def seg_head_navigation_band - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top"> - #{@vz.epub_png_nav_nxt} - </a>} if @md.firstseg =~/\S+/ - %{<p class="align_right">#{firstseg}</p>} - end - def seg_head_navigation_band_bottom - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top"> - #{@vz.epub_png_nav_nxt} - </a>} if @md.firstseg =~/\S+/ - %{<p class="align_right">#{firstseg}</p>} - end - def manifest_link(text) #watch fix removed font size 2 - %{ <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}>#{text}</a>} + def manifest_link(text) + %{ <a href="#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}" target="_top">#{text}</a>} end - def concordance_link(text) #watch fix removed font size 2 + def concordance_link(text) if @md.concord_make - %{<a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> + %{<a href="#{@md.file.base_filename.html_concordance}" target="_top"> #{text} </a>} else '' end end - def make_concordance - manifest=scroll=seg='' - wgt=Widget.new(@md) - %{<table summary="toc scroll and segment with pdf" border="0" cellpadding="3" cellspacing="0"> -<tr> - #{wgt.seg(@vz.nav_txt_toc_link)}#{wgt.scroll(@vz.nav_txt_doc_link)}#{wgt.pdf}#{wgt.odf} -<td align="center" bgcolor=#{@vz.color_band2}> - #{wgt.concordance(@vz.nav_txt_concordance)} - #{wgt.manifest} - #{wgt.search} - #{wgt.home} -</tr></table>} - end def head %{#{doc_type} <head> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> #{@css.xhtml_epub} </head> -#{@vz.color_body} -#{@vz.js_top}} +#{@vz.color_body}} end def concordance if @md.concord_make %{#{@vz.margin_css} <h4 class="toc"> - <a href="./#{@md.fn[:concordance]}" #{@vz.js_concordance}> + <a href="./#{@md.file.base_filename.html_concordance}"> <i>Concordance</i> </a> </h4> @@ -1311,9 +1708,9 @@ WOK end end def links_guide_open(type='horizontal') - if type=='vertical'; links_guide_vertical_open - else links_guide_horizontal_open - end + (type=='vertical') \ + ? links_guide_vertical_open + : links_guide_horizontal_open end def prefix_a end @@ -1358,18 +1755,14 @@ WOK def metadata %{#{@vz.margin_css} <h4 class="toc"> - <a href="#{@metalink}" #{@vz.js_metalink}> + <a href="#{@metalink}"> <i>MetaData</i> </a> </h4> #{@vz.table_close}} end - def seg_metadata - @metalink=%{./#{@md.fn[:metadata]}} - metadata - end end - class Head_seg < Head_information + class HeadSeg < HeadInformation def initialize(md) super(md) end @@ -1380,229 +1773,18 @@ WOK #{@seg_name_xhtml[@seg_name_xhtml_tracker]} - #{@md.html_title} </title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -#{@vz.font_css_table_file} +<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> +#{@css.xhtml_epub} </head> -#{@vz.color_body} -#{@vz.js_top}} - end - def title_banner(title,subtitle,creator) - end - def dot_control_pre_next - %{<table summary="segment hidden control pre and next" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> -<tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_xhtml[@seg_name_xhtml_tracker-1]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_dot_pre} - </a> -</td> -<td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_dot_toc} - </a> -</td> -<td align="right"> - <a href="#{@md.fnl[:pre]}#{@seg_name_xhtml[@seg_name_xhtml_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_dot_nxt} - </a> -#{@vz.table_close}} - end - def dot_control_pre - %{<table summary="segment hidden control pre" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> -<tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_xhtml[@seg_name_xhtml_tracker-1]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_dot_pre} - </a> -</td> -<td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_dot_toc} - </a> -</td> -<td align="right"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_dot_nxt} - </a> -#{@vz.table_close}} - end - def toc_nav(f_pre=false,f_nxt=false,use=1) - pre=nxt='' - toc=%{<a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.epub_png_nav_toc} -</a> -} - pre=%{<a href="#{@md.fnl[:pre]}#{@seg_name_xhtml[@seg_name_xhtml_tracker-use]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.epub_png_nav_pre} -</a> -} if f_pre==true - nxt=%{<a href="#{@md.fnl[:pre]}#{@seg_name_xhtml[@seg_name_xhtml_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> - #{@vz.epub_png_nav_nxt} - </a> -} if f_nxt==true - %{<p class="align_right"> -#{pre} -#{toc} -#{nxt} -</p> -} - end - def toc_next2 - pre,nxt=false,true - toc_nav(false,true).dup - end - def toc_pre_next2 - toc_nav(true,true).dup - end - def toc_pre2 - toc_nav(true,false).dup - end - def manifest_link(text) - %{<a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> - #{text} - </a>} - end - def concordance_link(text) - if @md.concord_make - %{<a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a>} - else '' - end - end - def doc_types #used in seg_nav_band ### - scroll=seg='' - wgt=Widget.new(@md) - x=if @md.concord_make - %{ -<table summary="segment navigation available documents types: toc,doc,pdf,concordance" border="0" cellpadding="3" cellspacing="0"> -<tr> - #{wgt.seg(@vz.nav_txt_toc_link)} - #{wgt.scroll(@vz.nav_txt_doc_link)} - #{wgt.pdf}#{wgt.odf} -<td align="center" bgcolor=#{@vz.color_band2}> - #{wgt.concordance(@vz.nav_txt_concordance)} - #{wgt.manifest} - #{wgt.search} - #{wgt.home} -</tr></table>} - else - %{ -<table summary="segment navigation available documents types: toc,doc,pdf,concordance" border="0" cellpadding="3" cellspacing="0"> -<tr> - #{wgt.seg(@vz.nav_txt_toc_link)} - #{wgt.scroll(@vz.nav_txt_doc_link)} - #{wgt.pdf}#{wgt.odf} -<td align="center" bgcolor=#{@vz.color_band2}> - #{wgt.manifest} - #{wgt.search} - #{wgt.home} -</tr></table>} - end - end - def navigation_table - %{<table summary="navigation segment table" width=#{@vz.table_width_1} border="0" bgcolor="white" cellpadding="0"> -<tr><th width="#{@@indent['leve_1']}" align="right"> -</td> -<td valign="top"> - <font size=2>} - end - def navigation_table1 - %{<table summary="navigation segment table1" width=#{@vz.table_width_1} border="0" cellpadding=#{@vz.table_cellpad_box} bgcolor=#{@vz.color_table1} align="left"> -<tr><td valign="top"> - <font size="2">} - end - def navigation_table2 - %{<table summary="navigation segment table2" width=#{@vz.table_width_2} border="0" cellpadding=#{@vz.table_cellpad_box} bgcolor=#{@vz.color_table2} align="left"> -<tr><td valign="top"> - <font size="2">} - end - def heading_advert_local_1 - dir=SiSU_Env::Info_env.new(@fns) - %{ <p class="center"> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="http://#{@md.ad_url}#{Sfx[:epub_xhtml]}" target="_top"> - <img border="0" src="#{dir.url.images_epub}/#{@md.ad_png}" alt="#{@md.ad_alt}" /> - </a> -#{@vz.table_close} -</p>} - end - def heading_advert_local_2 - dir=SiSU_Env::Info_env.new(@fns) - %{ <p class="center"> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="#{@md.ad_url}#{Sfx[:epub_xhtml]}" target="_top"> - <img border="0" src="#{dir.url.images_epub}/#{@md.ad_png}" alt="#{@md.ad_alt}" /> - </a> -#{@vz.table_close} -</p>} - end - def heading_advert_external - dir=SiSU_Env::Info_env.new(@fns) - %{ <p class="center"> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="#{@md.ad_url}#{Sfx[:epub_xhtml]}" target="external"> - <img border="0" src="#{dir.url.images_epub}/#{@md.ad_png}" alt="#{@md.ad_alt}" /> - </a> -#{@vz.table_close} -</p>} - end - def navigation_band(segtocband) #change name to navigaion_band_banner - %{#{segtocband} -} - end - def navigation_band_bottom(segtocband,seg_table_top_control) #change name to navigaion_band_bannerless - %{ -<div class="main_column"> - <table summary="segment navigation band" bgcolor=#{@vz.color_band1} width="100%"><tr> - <td width="70%" align="center"> - #{doc_types} - </td> - <td width="30%" align="right"> - #{segtocband} - </td></tr> - </table> - #{seg_table_top_control} -</div> -} +#{@vz.color_body}} end def endnote_mark %{ <hr class="endnote" /> } end - def endnote_section_open -%{ -<div class="endnote"> -} - end - def endnote_section_close -%{ -</div> -} #revisit - end - def head - %{#{doc_type} -<head> - <title> - #{@seg_name_xhtml[@seg_name_xhtml_tracker]} - - #{@md.html_title} - </title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -#{@css.xhtml_epub} -</head> -#{@vz.color_body} -#{@vz.js_top}} - end - def toc_metadata - @metalink=%{./#{@md.fn[:metadata]}} - toc_metadata - end - def title_banner(title,subtitle,creator) - end end - class Head_scroll < Head_toc + class HeadScroll < HeadToc def initialize(md) super(md) end @@ -1619,12 +1801,12 @@ WOK #{@vz.table_close}} end end - class Format_text_object - @vz=SiSU_Env::Get_init.instance.skin + class FormatTextObject + @vz=SiSU_Env::GetInit.instance.skin attr_accessor :md,:t_o,:txt,:ocn,:format,:table,:link,:linkname,:paranum,:p_num,:headname,:banner,:url def initialize(md,t_o) @md,@t_o=md,t_o - if t_o.class==Hash + if t_o.is_a?(Hash) @txt =t_o[:txt] || nil @ocn =t_o[:ocn] || nil @ocn_display =t_o[:ocn_display] || nil @@ -1639,12 +1821,12 @@ WOK if @format and not @format.empty? if @format=~/^\d:(\S+)/ #need more reliable marker #if @format =~ /#{Rx[:lv]}/ headname=$1 #format[/\d~(\S+)/m,1] - @headname=if headname =~/^[a-zA-Z]/; %{<id="#{headname}">} #consider: h_#{headname} - else %{<id="h#{headname}"></a>} - end - @headname=if headname =~/^[a-zA-Z]/; %{<a name="#{headname}" id="#{headname}"></a>} #consider: h_#{headname} - else %{<a name="h#{headname}" id="h#{headname}"></a>} - end + @headname=(headname =~/^[a-zA-Z]/) \ + ? %{<id="#{headname}">} + : %{<id="h#{headname}"></a>} + @headname=(headname =~/^[a-zA-Z]/) \ + ? %{<a name="#{headname}" id="#{headname}"></a>} + : %{<a name="h#{headname}" id="h#{headname}"></a>} end end elsif t_o.class.inspect =~/Object/ @@ -1652,19 +1834,19 @@ WOK @named=nametags_seg(@dob) @txt=((defined? t_o.obj) ? t_o.obj : nil) @ocn=((defined? t_o.ocn) ? t_o.ocn.to_s : nil) - @headname=((t_o.is=='heading' and defined? t_o.name) ? t_o.name : nil) + @headname=((t_o.is==:heading and defined? t_o.name) ? t_o.name : nil) else - if @md.cmd =~/M/ + if @md.opt.cmd =~/M/ p __FILE__ +':'+ __LINE__.to_s p t_o.class p caller end end if @txt and not @txt.empty? - @txt.gsub!(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'') + @txt=@txt.gsub(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'') end - @p_num=Paragraph_number.new(@md,@ocn) - @vz=SiSU_Env::Get_init.instance.skin + @p_num=ParagraphNumber.new(@md,@ocn) + @vz=SiSU_Env::GetInit.instance.skin end def nametags_seg(dob) #FIX tags='' @@ -1700,57 +1882,60 @@ WOK </div> } end - def para_form_css(tag,attrib) # regular paragraphs shaped here + def para_form_css(tag,attrib,txt) # regular paragraphs shaped here ul=ulc='' ul,ulc="<ul>\n ","\n </ul>" if @tag =~/li/ %{ <div class="substance"> #{@p_num.ocn_display} #{ul}<#{tag} class="#{attrib}" #{@p_num.id}> - #{@named}#{@txt} + #{@named}#{txt} </#{tag}>#{ulc} </div> } end def para - para_form_css('p','norm') + para_form_css('p','norm',@txt) end def group - para_form_css('p','group') + para_form_css('p','group',@txt) + end + def block + para_form_css('p','block',@txt) end def alt - para_form_css('p','alt') + para_form_css('p','alt',@txt) end def verse - para_form_css('p','verse') + para_form_css('p','verse',@txt) end def code - para_form_css('p','code') + para_form_css('p','code',@txt) end def center - para_form_css('p','center') + para_form_css('p','center',@txt) end def bold - para_form_css('p','bold') + para_form_css('p','bold',@txt) end def bullet - para_form_css('li','bullet') + para_form_css('li','bullet',@txt) end def table @txt=if @t_o.obj !~/^<table\s/ - table=SiSU_XHTML_shared::Table_xhtml.new(@t_o) #move, make happen earlier - @txt=table.table.obj + table=SiSU_XHTML_Shared::TableXHTML.new(@t_o) #move, make happen earlier + table.table.obj else @txt end - para_form_css('p','norm') + para_form_css('p','norm',@txt) end def break - @txt.gsub!(/#{Mx[:br_page_new]}|#{Mx[:br_page]}/,'<hr /><br />') - @txt.gsub!(/#{Mx[:obj_ln_sep]}/,'<hr style="width:30%" /><br />') - para_form_css('p','norm') + @txt=@txt.gsub(/#{Mx[:br_page_new]}|#{Mx[:br_page]}/,'<hr /><br />'). + gsub(/#{Mx[:br_obj]}/,'<hr style="width:30%" /><br />') + para_form_css('p','norm',@txt) end def format(tag,attrib) - para_form_css(tag,attrib) + para_form_css(tag,attrib,@txt) end def title_heading(tag,attrib) %{ @@ -1762,19 +1947,25 @@ WOK } end def title_heading1 - title_heading('h1','tiny') + id_u=DISABLE[:epub][:per_section_title] \ + ? '' + : title_heading('h1','tiny') end def title_heading2 - title_heading('h2','tiny') + id_u=DISABLE[:epub][:per_section_title] \ + ? '' + : title_heading('h2','tiny') end def title_heading3 - title_heading('h3','tiny') + id_u=DISABLE[:epub][:per_section_title] \ + ? '' + : title_heading('h3','tiny') end def title_heading4 '' end - def seg_heading_sub(tag,attrib) - @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + def seg_heading_sub(tag,attrib,txt) + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') %{ <div class="substance"> #{@p_num.ocn_display} @@ -1795,10 +1986,10 @@ WOK } end def seg_heading5 - seg_heading_sub('p','bold') + seg_heading_sub('p','bold',@txt) end def seg_heading6 - seg_heading_sub('p','bold') + seg_heading_sub('p','bold',@txt) end def dl #check :trailer "<dl><b>#{@txt}</b> #{@trailer}</dl>" @@ -1808,18 +1999,19 @@ WOK </p> </div>' end - def gsub_body - case @txt + def gsub_body #unused + @txt=case @txt when /^(?:#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}\s*)?\((i+|iv|v|vi+|ix|x|xi+)\)/ - @txt.gsub!(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>') - @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>') + @txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>'). + gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>') when /^(?:#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}\s*)?\(?(\d|[a-z])+\)/ - @txt.gsub!(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>') - @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>') + @txt.gsub(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>'). + gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>') when /^\s*\d{1,3}\.\s/ - @txt.gsub!(/^\s*(\d+\.)/,'<b>\1</b>') + @txt.gsub(/^\s*(\d+\.)/,'<b>\1</b>') when /^\s*[A-Z]\.\s/ - @txt.gsub!(/^\s*([A-Z]\.)/,'<b>\1</b>') + @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>') + else @txt end end def bold_para @@ -1831,9 +2023,9 @@ WOK #{@vz.table_close}} end - def bold_heading - @txt.gsub!(/[1-9]~\S+/,'') - @txt.gsub!(/[1-9]~/,'') + def bold_heading #unused + @txt=@txt.gsub(/[1-9]~\S+/,''). + gsub(/[1-9]~/,'') %{<p class="bold"> #{@txt} </p> @@ -1854,74 +2046,27 @@ WOK %{<p class="centerbold">#{@txt}</p>\n} end end - class Format_scroll < Format_text_object + class FormatScroll < FormatTextObject def initialize(md,txt) super(md,txt) - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end end - class Format_seg < Format_text_object + class FormatSeg < FormatTextObject def initialize(md,txt) super(md,txt) end - def navigation_toc_lev1_advert - %{#{@banner.home_button}\n -<p class="center"> -#{@txt} -#{@two} -</a></p>} - end - def navigation_toc_lev1 - %{#{@banner.nav_toc}} - end - def navigation_toc_lev2 #change bold use css - %{<table summary="navigation segment level 2"> -<tr><td width ="20"> -</td> -<td> - <font size="3" #{@vz.font_face}> - <b>#{@txt}</b> - </font> - </p> -#{@vz.table_close}} - end - def navigation_toc_lev3 #change bold use css - %{<table summary="navigation segment level 3"> -<tr><td width ="20"> -</td> -<td> - <font size="3" #{@vz.font_face}> - <b>#{@txt}</b> - </font> - </p> -#{@vz.table_close}} - end - def navigation_toc_lev4 - %{<table summary="navigation segment level 4"> -<tr><td width ="80"> -</td> -<td> -<p> - #{@txt} -</p> -#{@vz.table_close}} - end - def navigation_toc_lev5 - end - def navigation_toc_lev6 - end def endnote_seg_body(fn='') #FIX #url construction keep within single line... BUG WATCH 200408 fn='doc' if fn.to_s.empty? #you may wish to reconsider, sends to 'doc' where no segment info %{ <p class="endnote"> - #{@endnote_part_a}#{@md.fnl[:pre]}#{fn}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}#{@endnote_part_b} + #{@endnote_part_a}#{fn}#{Sfx[:epub_xhtml]}#{@endnote_part_b} </p> } end def clean(txt) - txt.gsub!(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,'') - txt.gsub!(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'') - txt + txt=txt.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,''). + gsub(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'') end def subtoc_lev(tag,attrib) @txt=clean(@txt) @@ -1933,10 +2078,10 @@ WOK note='' if txt =~/(#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})/m # had \s* at end note=$1 - note.gsub!(/[\n\s]+/m,' ') - txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') - txt.gsub!(/<a[\n\s]+"[\n\s]+href="#note_ref\d+"> <sup id="note\d+">\d+<\/sup> /m,'') - txt.gsub!(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">#{Mx[:nbsp]}<sup id="note\d+">\d+<\/sup>#{Mx[:nbsp]}/m,'') #remove + note=note.gsub(/[\n\s]+/m,' ') + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' '). + gsub(/<a[\n\s]+"[\n\s]+href="#note_ref\d+"> <sup id="note\d+">\d+<\/sup> /m,''). + gsub(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">#{Mx[:nbsp]}<sup id="note\d+">\d+<\/sup>#{Mx[:nbsp]}/m,'') #remove end %{<#{tag} class="#{attrib}"> <a href="#o#{@ocn}"><i>#{txt}</i></a> #{note} @@ -1948,8 +2093,8 @@ WOK def subtoc_lev6 subtoc_lev('h6','subtoc') if @txt end - def heading_sub(tag,attrib) - @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + def heading_sub(tag,attrib,txt) + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') %{ <div class="substance"> #{@p_num.ocn_display} @@ -1971,10 +2116,10 @@ WOK } end def heading5 - heading_sub('p','bold') + heading_sub('p','bold',@txt) end def heading6 - heading_sub('p','bold') + heading_sub('p','bold',@txt) end def navigation_heading4 %{<table summary="navigation segment heading 4" width=100% bgcolor="#08163f" border="0"> @@ -1998,7 +2143,7 @@ WOK %{<p class="centerbold">#{@txt}</p>} end end - class Format_toc < Format_text_object + class FormatToc < FormatTextObject def initialize(md,txt) super(md,txt) end @@ -2040,44 +2185,6 @@ WOK def lev0 #docinfo lev('h0','toc') end - def mini_lev1 - lev('h1','minitoc') - end - def mini_lev2 - lev('h2','minitoc') - end - def mini_lev3 - lev('h3','minitoc') - end - def mini_lev4 - lev('h4','minitoc') - end - def mini_lev5 - lev('h5','minitoc') - end - def mini_lev6 - lev('h6','minitoc') - end - def mini_lev0 #docinfo - lev('h0','minitoc') - end - def mini_tail - %{ - <h4 class="minitoc"> - <a href="sisu_manifest.html">Manifest (alternative outputs)</a> - </h4> -} - end - def mini_concord_tail - %{ - <h4 class="minitoc"> - <a href="concordance.html">Concordance (wordlist)</a> - </h4> - <h4 class="minitoc"> - <a href="sisu_manifest.html">Manifest (alternative outputs)</a> - </h4> -} - end end end __END__ diff --git a/lib/sisu/v2/epub_segments.rb b/lib/sisu/v4/epub_segments.rb index a09aebe3..5a3f3092 100644 --- a/lib/sisu/v2/epub_segments.rb +++ b/lib/sisu/v4/epub_segments.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,45 +55,38 @@ ** Description: epub segment generation, processing =end -module SiSU_EPUB_seg - require "#{SiSU_lib}/shared_xhtml" # shared_xhtml.rb - require "#{SiSU_lib}/epub" # epub.rb - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - class Seg_output - def initialize(md,outputfile,seg,minitoc,type='') - @md,@output_epub_cont_seg,@seg,@minitoc,@type=md,outputfile,seg,minitoc,type +module SiSU_EPUB_Seg + require_relative 'shared_xhtml' # shared_xhtml.rb + require_relative 'epub' # epub.rb + require_relative 'shared_metadata' # shared_metadata.rb + class Output + def initialize(md,outputfile,seg,type='') + @md,@output_epub_cont_seg,@seg,@type=md,outputfile,seg,type end def output #CONSIDER if @seg[:title] =~/\S/ filename_seg=[] filename_seg << @seg[:title] << @seg[:nav] if @type=='endnotes' - @seg[:headings]=[] - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) - txt_obj={:txt =>'Endnotes',:ocn_display =>''} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + @seg[:headings]=[] #watch + txt_obj={ txt: 'Endnotes', ocn_display: ''} + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 filename_seg << @seg[:heading_endnotes] << @seg[:headings] << %{\n<div class="content">\n} << @seg[:endnote_all] << '</div>' elsif @type=='idx' @seg[:headings]=[] - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) - txt_obj={:txt =>'Index',:ocn_display =>''} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 filename_seg << @seg[:heading_idx] << @seg[:headings] << %{\n<div class="content">\n} << @seg[:idx] << '</div>' elsif @type=='metadata' - metadata=Metadata::Summary.new(@md).xhtml_display.metadata + metadata=SiSU_Metadata::Summary.new(@md).xhtml_display.metadata @seg[:headings]=[] - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) - txt_obj={:txt =>'Metadata',:ocn_display =>''} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: 'Metadata', ocn_display: ''} + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 filename_seg << @seg[:heading_idx] << @seg[:headings] << %{\n<div class="content">\n} << metadata << '</div>' elsif @type=='sisu_manifest' - env=SiSU_Env::Info_env.new(@md.fns) + env=SiSU_Env::InfoEnv.new(@md.fns) path_and_name,url_and_name="#{env.path.output}/#{@md.fnb}/sisu_manifest.html","#{env.url.root}/#{@md.fnb}/sisu_manifest.html" manifest=if FileTest.file?("#{path_and_name}")==true <<WOK @@ -104,21 +96,18 @@ WOK else '' end @seg[:headings]=[] - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) - txt_obj={:txt =>'Manifest',:ocn_display =>''} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: 'Manifest', ocn_display: ''} + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 filename_seg << @seg[:heading_idx] << @seg[:headings] << %{\n<div class="content">\n} << manifest << '</div>' else filename_seg << @seg[:headings] << @seg[:main] << "\n</div>\n" end filename_seg << @seg[:tail] << @seg[:nav] << @seg[:close] - filename_seg.flatten!.compact! + filename_seg=filename_seg.flatten.compact #watch filename_seg.each do |str| unless str =~/\A\s*\Z/ - str.strip! - @output_epub_cont_seg << str + @output_epub_cont_seg << str.strip end end @output_epub_cont_seg.close @@ -132,26 +121,28 @@ WOK @@loop_count=@@seg_total=@@tracker=0 @@is4=@@is3=@@is2=@@is1=0 @@heading1=@@heading2=@@heading3=@@heading4=0 - @@seg[:nav],@@seg[:title],@@seg[:headings],@@seg[:main],@@seg[:idx],@@seg[:tail],@@seg_subtoc_array,@@seg_endnotes_array,@@seg[:endnote_all]=Array.new(10){[]} + @@seg[:headings],@@seg[:main],@@seg[:idx],@@seg[:tail],@@seg_subtoc_array,@@seg_endnotes_array,@@seg[:endnote_all]=Array.new(7){[]} @@seg[:heading_endnotes]='' @@tablehead,@@number_of_cols=0,0 - @@segtocband=nil @@fns_previous='' attr_reader :seg_name_xhtml,:seg_name_xhtml_tracker def initialize(md='',data='') @md,@data=md,data - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @seg_name_xhtml=@@seg_name_xhtml || nil @seg_name_xhtml_tracker=@@tracker || nil + @make=SiSU_Env::ProcessingSettings.new(@md) if @md end def songsheet begin - @minitoc=SiSU_EPUB::Source::Toc.new(@md,@data).minitoc data=get_subtoc_endnotes(@data) data=articles(data) - Seg.new.cleanup # (((( added )))) + SiSU_EPUB_Seg::Seg.new.cleanup # (((( added )))) #### (((( END )))) #### - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure @@seg_name=[] end @@ -163,13 +154,13 @@ WOK printed_endnote_seg='n' idx_xhtml=nil if @md.book_idx - my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - idx_xhtml=SiSU_Particulars::Combined_singleton.instance.get_idx_xhtml(@md).xhtml_idx + idx_xhtml=SiSU_Particulars::CombinedSingleton.instance.get_idx_xhtml(@md).xhtml_idx idx_xhtml.each {|x| @@seg[:idx] << x } @@seg[:heading_idx]='' end data.each do |dob| - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==4 @@seg_name << dob.name seg_name=dob.name @@ -178,8 +169,8 @@ WOK @@seg_name_xhtml=@@seg_name @@seg_total=@@seg_name.length testforartnum=@@seg_name_xhtml - SiSU_Screen::Ansi.new(@md.cmd,@@seg_name.length) if @md.cmd =~/[MVv]/ - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map #p map_nametags + SiSU_Screen::Ansi.new(@md.opt.cmd,@@seg_name.length) if @md.opt.cmd =~/[MVv]/ + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags data.each do |dob| #if defined? dob.obj \ #and dob.obj =~/href="#{Xx[:segment]}#+\S+?"/ @@ -187,14 +178,15 @@ WOK # #while dob.obj =~/href="#{Xx[:segment]}#+(\S+?)"/ # # m=$1 # # if map_nametags[m][:segname] - # # dob.obj.sub!(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#{map_nametags[m][:segname]}#{Sfx[:html]}#\\1"}) + # # dob.obj=dob.obj.sub(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#{map_nametags[m][:segname]}#{Sfx[:html]}#\\1"}) # # else # # p "NOT FOUND name_tags: #{m}" - # # dob.obj.sub!(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#\\1"}) # not satisfactory + # # dob.obj=dob.obj.sub(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#\\1"}) # not satisfactory # # end # #end #end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==4 if dob.ocn==0 @@heading4=dob.obj @@ -202,62 +194,66 @@ WOK end @@is4=newfile=1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==3 @@heading3=dob.obj @@is4,@@is3=0,1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==2 @@heading2=dob.obj @@is4,@@is3,@@is2=0,0,1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==1 @@heading1=dob.obj @@is4,@@is3,@@is2,@@is1=0,0,0,1 end if (@@is1 && !@@is2 && !@@is3 && !@@is4) - if not (dob.is=='heading' or dob.is=='heading_insert') \ + if not (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==1 head1=$_ #; check end end if @@is4==1 - dir_epub_cont="#{@md.env.path.epub}/OPS" + dir_epub_cont="#{@md.env.processing_path.epub}/#{Ep[:d_oebps]}" if newfile==1 \ or dob.obj =~/^#{Mx[:br_endnotes]}|^#{Mx[:br_eof]}/ newfile=0 - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==4 if tracking != 0 - mkdir_p(@md.dir_out) unless FileTest.directory?(@md.dir_out) #bug - added specifically for nav! not needed by regular seg, check !!! - Seg.new(@md).tail - segfilename="#{dir_epub_cont}/#{@md.fnl[:pre]}#{@@seg_name_xhtml[tracking-1]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" + SiSU_EPUB_Seg::Seg.new(@md).tail + segfilename="#{dir_epub_cont}/#{@@seg_name_xhtml[tracking-1]}#{Sfx[:epub_xhtml]}" output_epub_cont_seg=File.new(segfilename,'w') if @@seg_name_xhtml[tracking-1] - if dob.is=='heading' \ + if dob.is==:heading \ or @@seg_name_xhtml[tracking-1] !~/endnotes|book_index|metadata/ - Seg_output.new(@md,output_epub_cont_seg,@@seg,@minitoc).output - elsif dob.is=='heading_insert' + SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg).output + elsif dob.is==:heading_insert if @@seg_name_xhtml[tracking-1]=='endnotes' - Seg_output.new(@md,output_epub_cont_seg,@@seg,@minitoc,'endnotes').output + SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'endnotes').output elsif @@seg_name_xhtml[tracking-1]=='book_index' - Seg_output.new(@md,output_epub_cont_seg,@@seg,@minitoc,'idx').output + SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'idx').output @@seg[:idx]=[] elsif @@seg_name_xhtml[tracking-1]=='metadata' # navigation bug FIX - Seg_output.new(@md,output_epub_cont_seg,@@seg,@minitoc,'metadata').output + SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'metadata').output else puts "#{__FILE__}::#{__LINE__}" end else puts "#{__FILE__}::#{__LINE__}" end - Seg.new.reinitialise + SiSU_EPUB_Seg::Seg.new.reinitialise heading_art(dob) head(dob) - if @@seg_name_xhtml[tracking]=='sisu_manifest' # this is for manifest, includes navigation bug - segfilename="#{dir_epub_cont}/#{@md.fnl[:pre]}#{@@seg_name_xhtml[tracking]}#{@md.fnl[:mid]}#{Sfx[:epub_xhtml]}#{@md.fnl[:post]}" + if @@seg_name_xhtml[tracking] =='metadata' + segfilename="#{dir_epub_cont}/#{@@seg_name_xhtml[tracking]}#{Sfx[:epub_xhtml]}" output_epub_cont_seg=File.new(segfilename,'w') - Seg_output.new(@md,output_epub_cont_seg,@@seg,@minitoc,'sisu_manifest').output - Seg.new.reinitialise #BUG navigation bug with items following metadata, and occurring before manifest, this becomes a bug ... work area for book index, FIX + SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'metadata').output + SiSU_EPUB_Seg::Seg.new.reinitialise #BUG navigation bug with items following metadata, and occurring before manifest, this becomes a bug ... work area for book index, FIX end #@output_epub_cont_seg.close #%(((( EOF )))) --> end @@ -268,11 +264,16 @@ WOK end tracking=tracking+1 end - @@get_hash_to=dob.name if (dob.is=='heading' or dob.is=='heading_insert') and dob.ln==4 and dob.name - @@get_hash_fn=dob.name if (dob.is=='heading' or dob.is=='heading_insert') and dob.ln==4 and dob.name - if dob.obj.class==String + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + and dob.ln==4 \ + and dob.name + @@get_hash_to=dob.name + @@get_hash_fn=dob.name + end + if dob.obj.is_a?(String) markup(dob) - elsif dob.obj.class==Array + elsif dob.obj.is_a?(Array) dob.obj.each do |pg| markup(pg) end @@ -287,136 +288,143 @@ WOK data end def heading_art(dob) - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - if dob.is=='heading' \ - and dob.ln =~/^[1-6]/ - if @@tracker < @@seg_total-1; @@seg[:dot_nav]=format_head_seg.dot_control_pre_next - else @@seg[:dot_nav]=format_head_seg.dot_control_pre - end - end - @@seg[:title]=format_head_seg.head + @@seg[:title]=SiSU_EPUB_Format::HeadSeg.new(@md).head end def head(dob) clean=/<!.*?!>|<:.*?>$/ - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - if @@tracker < @@seg_total-1 - if @@tracker==0; @@segtocband=format_head_seg.toc_next2 #if format_head_seg.toc_next2 - else @@segtocband=format_head_seg.toc_pre_next2 #if format_head_seg.toc_pre_next2 - end - else @@segtocband=format_head_seg.toc_pre2 #if format_head_seg.toc_pre2 - end @p_num ||= '' if @@is1==1 if defined? @md.creator.author \ and @md.creator.author @author=%{<b>#{@md.creator.author}</b>\n} end - @@seg[:nav] << format_head_seg.navigation_band(@@segtocband) - ocn=if @@heading1[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>@@heading1,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + ocn=(@@heading1[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: @@heading1, ocn_display: @p_num.ocn_display } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading1.gsub(clean,'') - @@heading1.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading1=@@heading1.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is2==1 heading2=@@heading2 - ocn=if heading2[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading2,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + ocn=(heading2[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading2, ocn_display: @p_num.ocn_display } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading2.gsub(clean,'') - @@heading2.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading2=@@heading2.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is3==1 heading3=@@heading3 - ocn=if heading3[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading3,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + ocn=(heading3[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading3, ocn_display: @p_num.ocn_display } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading3.gsub(clean,'') - @@heading3.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading3=@@heading3.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is4==1 heading4=@@heading4 - ocn=if heading4[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading4,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + ocn=(heading4[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading4, ocn_display: @p_num.ocn_display } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading4.gsub(clean,'') end @@tracker=@@tracker+1 end def markup(dob) @debug=[] - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - if dob.is =~/(?:heading|para)/ #extend as necessary FIX - @p_num=SiSU_EPUB_Format::Paragraph_number.new(@md,dob.ocn) + if dob.is ==:heading \ + || dob.is ==:heading_insert \ + || dob.is ==:para + #extend as necessary FIX + @p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,dob.ocn) end - sto=SiSU_EPUB_Format::Format_text_object.new(@md,dob) - dob_xhtml=if dob.is=='heading' or dob.is=='heading_insert' or dob.is=='para' - dob_xhtml=if dob.is=='heading' or dob.is=='heading_insert' + sto=SiSU_EPUB_Format::FormatTextObject.new(@md,dob) + dob_xhtml=if dob.is==:heading \ + || dob.is==:heading_insert \ + || dob.is==:para + dob_xhtml=if dob.is==:heading \ + or dob.is==:heading_insert if dob.ln==4 - sto.seg_heading4 # work on see Split_text_object + sto.seg_heading4 # work on see SplitTextObject elsif dob.ln==5 sto.seg_heading5 - elsif dob.ln==6; sto.seg_heading6 + elsif dob.ln==6 + sto.seg_heading6 end - elsif dob.is=='para' - if dob.indent and dob.indent =~/[1-9]/ + elsif dob.is==:para + if dob.indent \ + and dob.hang \ + and dob.indent =~/[0-9]/ \ + and dob.hang =~/[0-9]/ if dob.bullet_ - sto.format('li',"i#{dob.indent}") - else sto.format('p',"i#{dob.indent}") - end - else - if dob.bullet_ - sto.format('li','bullet') + (dob.indent =~/[1-9]/) \ + ? sto.format('li',"i#{dob.indent}") + : sto.format('li','bullet') + elsif dob.indent == dob.hang + sto.format('p',"i#{dob.indent}") + elsif dob.indent != dob.hang + sto.format('p',"h#{dob.hang}i#{dob.indent}") else sto.para end + else sto.para end end - elsif dob.is =~/^(?:group|alt)$/ - sto.para #fix this should be group type specific #FIX - elsif dob.is=='verse' + elsif dob.is ==:block \ + || dob.is ==:group \ + || dob.is ==:alt + sto.para #fix this should be block type specific #FIX + elsif dob.is==:verse sto.verse - elsif dob.is=='code' + elsif dob.is==:code sto.code - elsif dob.is=='table' + elsif dob.is==:table sto.table - elsif dob.is=='break' + elsif dob.is==:break sto.break end if @md.flag_separate_endnotes # may need to revisit, check - dob.obj.gsub!(/"\s+href="#note_ref(\d+)">/,%{" href=\"endnotes#{Sfx[:epub_xhtml]}#note_ref\\1">}) #endnote- twice #removed file type + dob.obj=dob.obj.gsub(/"\s+href="#note_ref(\d+)">/,%{" href=\"endnotes#{Sfx[:epub_xhtml]}#note_ref\\1">}) #endnote- twice #removed file type end - if dob.is =~/heading|para/ and (not dob.ocn or dob.ocn.to_s.empty?) - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,dob) + if (dob.is ==:heading \ + || dob.is==:heading_insert \ + || dob.is==:para) \ + && (not dob.ocn or dob.ocn.to_s.empty?) + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,dob) end - if (dob.is=='heading' or dob.is=='heading_insert' or dob.is=='para') \ + if (dob.is==:heading \ + || dob.is==:heading_insert \ + || dob.is==:para) \ and dob.note_ #dob.obj =~/<a href="#note_ref\d+"> <sup id=/ #endnote- note- - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,dob) + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,dob) dob.obj=format_seg.no_paranum end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==4 @@seg[:main] << %{\n<div class="content">\n} @@seg[:main] << dob_xhtml - @@seg[:main] << @@seg_subtoc[@@get_hash_fn] #% insertion of sub-toc + if @make.build.segsubtoc? + @@seg[:main] << @@seg_subtoc[@@get_hash_fn] #% insertion of sub-toc + end else @@seg[:main] << dob_xhtml end end def tail - format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - if @md.flag_auto_endnotes and @@seg_endnotes[@@get_hash_fn] + format_head_seg=SiSU_EPUB_Format::HeadSeg.new(@md) + if @md.flag_auto_endnotes \ + and @@seg_endnotes[@@get_hash_fn] @@seg[:tail] << %{\n<div class="content">\n<div class="endnote">\n} if @@seg_endnotes[@@get_hash_fn].flatten.length > 0 @@seg[:tail] << format_head_seg.endnote_mark @@ -429,8 +437,7 @@ WOK @@seg[:close] << format_head_seg.xhtml_close end def reinitialise - @@seg[:title],@@seg[:dot_nav],@@seg[:nav],@@seg[:headings],@@seg[:main],@@seg[:tail],@@seg[:credits]=Array.new(8){[]} - @@segtocband=nil + @@seg[:headings],@@seg[:main],@@seg[:tail],@@seg[:credits]=Array.new(4){[]} end def cleanup reinitialise @@ -441,9 +448,10 @@ WOK end def get_subtoc_endnotes(data) #get endnotes & sub-table of contents subtoc data.each do |dob| - dob.obj.gsub!(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1') + dob.obj=dob.obj.gsub(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1') if @md.flag_auto_endnotes - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln.to_s =~/^[1234]/ \ and not @@fn.to_s.empty? @@seg_endnotes[@@fn]=[] @@ -451,7 +459,8 @@ WOK @@seg_endnotes_array=[] if dob.ln==4 @@fns_previous=@md.fns if dob.ln==4 and dob.name =~/^meta/ end - if (dob.is=='heading' or dob.is=='heading_insert') \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ and dob.ln==4 #% EXTRACTION OF SUB-TOCs & SEGMENT NAME, after EXTRACTION OF ENDNOTES & SUB-TOCs @@seg_subtoc[@@fn]=@@seg_subtoc_array @@seg_subtoc_array=[] @@ -459,21 +468,20 @@ WOK and dob.obj @@fn=dob.name else - if dob.name =~/\S+/ - @@fn=dob.name - else @@fn='' - end + @@fn=(dob.name =~/\S+/) \ + ? dob.name + : '' end end end - if dob.is=='heading' \ + if dob.is==:heading \ and dob.ln.to_s =~/^[56]/ case dob.ln when 5 - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,dob) + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,dob) subtoc=format_seg.subtoc_lev5 #keep and make available, this is the subtoc when 6 - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,dob) + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,dob) subtoc=format_seg.subtoc_lev6 #keep and make available, this is the subtoc end @@seg_subtoc_array << subtoc @@ -481,7 +489,7 @@ WOK if @md.flag_auto_endnotes ast,pls='*','+' if dob.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(?:\d|#{ast}|#{pls})+ / \ - and dob.is !~/^code/ # endnote- + and dob.is !=:code # endnote- endnote_array=[] if dob.obj=~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/m endnote_array << dob.obj.scan(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/m) @@ -492,15 +500,15 @@ WOK if dob.obj=~/#{Mx[:en_b_o]}#{pls}\d+\s.+?#{Mx[:en_b_c]}/m endnote_array << dob.obj.scan(/#{Mx[:en_b_o]}#{pls}\d+\s.+?#{Mx[:en_b_c]}/m) end - endnote_array.flatten! #.compact! #check compacting + endnote_array=endnote_array.flatten #.compact #check compacting endnote_array.each do |note| note_match=note.dup note_match_seg=note.dup e_n=note_match_seg[/(?:#{Mx[:en_a_o]}(?:\d|#{ast}|#{pls})+|#{Mx[:en_b_o]}(?:#{ast}|#{pls})\d+)\s+(.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,1] try=e_n.split(/<br \/>/) try.each do |e| - txt_obj={:txt =>e} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: e } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) note_match=if e =~/#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}/ format_seg.endnote_body_indent else format_seg.endnote_body @@ -512,12 +520,12 @@ WOK m=/(?:#{Mx[:en_a_o]}(?:\d|#{ast}|#{pls})+|#{Mx[:en_b_o]}(?:#{ast}|#{pls})\d+)\s+(.+?href=")(#note_ref(?:\d|_a|_b)+".+)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/mi endnote_part_a=note_match_seg[m,1] endnote_part_b=note_match_seg[m,2] - txt_obj={:endnote_part_a =>endnote_part_a,:endnote_part_b =>endnote_part_b} - format_seg=SiSU_EPUB_Format::Format_seg.new(@md,txt_obj) + txt_obj={ endnote_part_a: endnote_part_a, endnote_part_b: endnote_part_b } + format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,txt_obj) note_match_all_seg=format_seg.endnote_seg_body(@@fn) #BUG WATCH 200408 @@seg[:endnote_all] << note_match_all_seg end - dob.obj.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + dob.obj=dob.obj.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') end end end diff --git a/lib/sisu/v4/epub_tune.rb b/lib/sisu/v4/epub_tune.rb new file mode 100644 index 00000000..1362815e --- /dev/null +++ b/lib/sisu/v4/epub_tune.rb @@ -0,0 +1,409 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: epub generation, epub pre-processing + +=end +require_relative 'param' +module SiSU_EPUB_Tune + require_relative 'sysenv' # sysenv.rb + include SiSU_Env; include SiSU_Screen + require_relative 'epub_format' # epub_format.rb #watch + @@line_mode='' + @@endnote_array=[] + @@endnote_call_counter=1 + @@table_align='<table summary='' width="96%" border="0" bgcolor="white" cellpadding="0" col="3"> +<tr ...><td width="2%" align="right"> + \;</td> +<td width="94%" valign="top" align="justify">' + @@table_align_close='</td> +<td width="4%" align="right" valign="top"> +<font size="1" color="#777777"> + </font> </td></tr></table>' + @@counter,@@column,@columns=0,0,0 + class Output + def initialize(data,md) + @data,@md=data,md + @file=SiSU_Env::FileOp.new(@md) + @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX + end + def hard_output + @filename_tune=@file.write_file_processing.html_tune + data=[] + @data.each {|x| x.obj.strip; data << x if not x.obj.empty?} #1.9 array? + data.each do |dob| + @filename_tune.puts dob, "\n" #check + end + end + def marshal + File.open(@file.marshal.html_tune,'w') {|f| Marshal.dump(@data.to_a,f)} + end + end + class CleanXHTML + def initialize(html='') + @html=html + end + def clean + html=@html + str=if html.is_a?(String) + html + else html.obj + end + str=str.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/\*/u,'*'). # * + gsub(/\+/u,'+'). # + + gsub(/¢/u,'¢'). # ¢ + gsub(/£/u,'£'). # £ + gsub(/¥/u,'¥'). # ¥ + gsub(/§/u,'§'). # § + gsub(/©/u,'©'). # © + gsub(/ª/u,'ª'). # ª + gsub(/«/u,'«'). # « + gsub(/®/u,'®'). # ® + gsub(/°/u,'°'). # ° + gsub(/±/u,'±'). # ± + gsub(/²/u,'²'). # ² + gsub(/³/u,'³'). # ³ + gsub(/µ/u,'µ'). # µ + gsub(/¶/u,'¶'). # ¶ + gsub(/¹/u,'¹'). # ¹ + gsub(/º/u,'º'). # º + gsub(/»/u,'»'). # » + gsub(/¼/u,'¼'). # ¼ + gsub(/½/u,'½'). # ½ + gsub(/¾/u,'¾'). # ¾ + gsub(/×/u,'×'). # × + gsub(/÷/u,'÷'). # ÷ + gsub(/¿/u,'¿'). # ¿ + gsub(/À/u,'À'). # À + gsub(/Á/u,'Á'). # Á + gsub(/Â/u,'Â'). #  + gsub(/Ã/u,'Ã'). # à + gsub(/Ä/u,'Ä'). # Ä + gsub(/Å/u,'Å'). # Å + gsub(/Æ/u,'Æ'). # Æ + gsub(/Ç/u,'Ç'). # Ç + gsub(/È/u,'È'). # È + gsub(/É/u,'É'). # É + gsub(/Ê/u,'Ê'). # Ê + gsub(/Ë/u,'Ë'). # Ë + gsub(/Ì/u,'Ì'). # Ì + gsub(/Í/u,'Í'). # Í + gsub(/Î/u,'Î'). # Î + gsub(/Ï/u,'Ï'). # Ï + gsub(/Ð/u,'Ð'). # Ð + gsub(/Ñ/u,'Ñ'). # Ñ + gsub(/Ò/u,'Ò'). # Ò + gsub(/Ó/u,'Ó'). # Ó + gsub(/Ô/u,'Ô'). # Ô + gsub(/Õ/u,'Õ'). # Õ + gsub(/Ö/u,'Ö'). # Ö + gsub(/Ø/u,'Ø'). # Ø + gsub(/Ù/u,'Ù'). # Ù + gsub(/Ú/u,'Ú'). # Ú + gsub(/Û/u,'Û'). # Û + gsub(/Ü/u,'Ü'). # Ü + gsub(/Ý/u,'Ý'). # Ý + gsub(/Þ/u,'Þ'). # Þ + gsub(/ß/u,'ß'). # ß + gsub(/à/u,'à'). # à + gsub(/á/u,'á'). # á + gsub(/â/u,'â'). # â + gsub(/ã/u,'ã'). # ã + gsub(/ä/u,'ä'). # ä + gsub(/å/u,'å'). # å + gsub(/æ/u,'æ'). # æ + gsub(/ç/u,'ç'). # ç + gsub(/è/u,'è'). # è + gsub(/é/u,'é'). # é + gsub(/ê/u,'ê'). # ê + gsub(/ë/u,'ë'). # ë + gsub(/ì/u,'ì'). # ì + gsub(/í/u,'í'). # í + gsub(/î/u,'î'). # î + gsub(/ï/u,'ï'). # ï + gsub(/ð/u,'ð'). # ð + gsub(/ñ/u,'ñ'). # ñ + gsub(/ò/u,'ò'). # ò + gsub(/ó/u,'ó'). # ó + gsub(/ô/u,'ô'). # ô + gsub(/õ/u,'õ'). # õ + gsub(/ö/u,'ö'). # ö + gsub(/ø/u,'ø'). # ø + gsub(/ù/u,'ù'). # ú + gsub(/ú/u,'ú'). # û + gsub(/û/u,'û'). # ü + gsub(/ü/u,'ü'). # ý + gsub(/þ/u,'þ'). # þ + gsub(/ÿ/u,'ÿ'). # ÿ + gsub(/ý/u,'ý'). + gsub(/<br>/u,'<br />'). + gsub(/#{Mx[:nbsp]}/u,' ') + end + end + class Tune + def initialize(data,md) + @data,@md=data,md + @vz=SiSU_Env::GetInit.instance.skin + @env=SiSU_Env::InfoEnv.new(@md.fns) + @sys=SiSU_Env::SystemCall.new + @env=SiSU_Env::InfoEnv.new(@md.fns) + @brace_url=SiSU_Viz::Skin.new.url_decoration + end + def songsheet + begin + @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX + SiSU_Screen::Ansi.new(@md.opt.cmd,'Tune').txt_grey if @md.opt.cmd =~/[MVv]/ + data=SiSU_EPUB_Tune::Tune.new(@data,@md).amp_html + data=SiSU_EPUB_Tune::Tune.new(data,@md).endnotes_html + data=SiSU_EPUB_Tune::Tune.new(data,@md).url_markup + data=SiSU_EPUB_Tune::Tune.new(data,@md).markup + if @md.opt.cmd =~/M/ #Hard Output Tune Optional on/off here + data=SiSU_EPUB_Tune::Output.new(data,@md).hard_output + SiSU_EPUB_Tune::Output.new(data,@md).marshal + end + tuned=SiSU_EPUB_Tune::Tune.new(@data,@md).output + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def markup + @tuned_file=[] + @data.each do |dob| + dob.obj=dob.obj.gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') + dob.obj=dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is==:table + dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd + gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,''). + gsub(/#{Mx[:gl_bullet]}/m,'● '). + gsub(/#{Mx[:nbsp]}/,' '). + gsub(/<(p|br)>/,'<\1 />') + dob.obj=SiSU_EPUB_Tune::CleanXHTML.new(dob.obj).clean + @tuned_file << dob + end + end + def urls(data) + @words=[] + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags + data.each do |word| + @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + http_=true + if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + http_=false + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(image)/.match(word).captures + end + case m + when /\.png|\.jpg|\.gif|c=|\s\d+x\d+/ + w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ + w=%{width="#{w}"} if w + h=%{height="#{h}"} if h + c=m[/"(.+?)"/m,1] + caption=%{<br /><p class="caption">#{c}</p>} if c + png=m.scan(/\S+/)[0] + image_path=@md.file.output_path.epub.rel_image #image_path=@env.url.images_epub + ins=if u \ + and u.strip !~/^image$/ + %{<a href="#{u}"><img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0" /></a>#{caption}} + else %{<img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0" />#{caption}} + end + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) + else + link=m[/(.+)/m] + png=m.scan(/\S+/)[0].strip + link=link.strip + u=u.sub(/^#*/,'') #make neater + if map_nametags[u] \ + and map_nametags[u][:segname] + u=unless http_ + u=if u=~/^\d+$/ + u.gsub(/^(\d+)$/,"#{map_nametags[u][:segname]}#{Sfx[:xhtml]}#o\\1") if u !~/\// + else + u.gsub(/(\S+)/,"#{map_nametags[u][:segname]}#{Sfx[:xhtml]}#\\1") if u !~/\// + end + else u + end + elsif u =~/^:/ + u=u.gsub(/^:/,"#{@env.url.root}/") + elsif u =~/^\.\.\// + u=u.gsub(/^\.\.\//,"#{@env.url.root}/") + elsif u =~/https?:\/\// + else p "NOT FOUND name_tags: #{u}" + end + ins=%{<a href="#{u}">#{link}</a>} + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins). + gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) + end + word + else word + end + word + end + @words=@words.join(' ') + end + def url_markup + data=@data + @tuned_file=[] + data.each do |dob| + unless dob.is==:code + if dob.obj =~/<::\s+/ #watch + dob.obj=dob.obj.gsub(/<::\s+(\S+?)\s+!>/, + %{<img src="#{@env.url.images_epub}/c_\\1.png" alt="\\1" width="14" height="14" align="bottom" border="0" />}) + end + if dob.obj =~/<:image\s+/ + dob.obj=dob.obj.gsub(/<:image\s+(http\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+>/, + %{<a href="\\1"><img src="#{@env.url.images_epub}/\\2" \\3 \\4 naturalsizeflag="0" align="bottom" border="0" /></a>}). + gsub(/<:image\s+(http\S+)\s+(\S+)\s+>/, + %{<a href="\\1"><img src="#{@env.url.images_epub}/\\2" naturalsizeflag="0" align="bottom" border="0" /></a>}). + gsub(/<:image\s+(\S+)\s+(\S+)\s+(\S+)\s+>/, + %{<img src="#{@env.url.images_epub}/\\1" \\2 \\3 naturalsizeflag="0" align="bottom" border="0" />}). + gsub(/<:image\s+(\S+)\s+>/, + %{<img src="#{@env.url.images_epub}/\\1" naturalsizeflag="0" align="bottom" border="0" />}) + end + if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + @word_mode=dob.obj.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)[()\[\]]*[,.;:!?'"]{0,2}|(?:#{Mx[:gl_o]}\S+?#{Mx[:gl_c]})+|[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+/mu) + words=urls(@word_mode) + dob.obj=dob.obj.gsub(/.+/m,words) + end + dob.obj=dob.obj.gsub(/\\copyright/i,%{<sup>©</sup>}) + dob.obj=if (dob.obj !~/\<:ad\s+\.\.\//) + dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*!\>/, + %{\n<center><a href="http:\/\/\\1" target="external"><img src="#{@env.url.images_epub}/\\2" alt="\\3" /></a></center>\n}) + else + dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*\>/, + %{\n<center><a href="\\1" target="_top"><img src="#{@env.url.images_epub}/\\2" alt="\\3" /></a></center>\n}) + end + dob.obj=dob.obj.gsub(/!pick/,%{<img border="0" height="15" width="15" src="#{@env.url.images_epub}/#{@vz.icon_choice}" alt="stellar" />}). + gsub(/!new/,%{ <img border="0" height="15" width="15" src="#{@env.url.images_epub}/#{@vz.icon_new}" alt="new" />}). + gsub(/<:h(.{1,7}?)>/,'<a href="#h\1">\1</a>'). + gsub(/<:to(\d{1,7}?)>/,'<a href="#to\1">to { \1 }</a> '). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>'). #http ftp matches escaped, no decoration + gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="mailto:\\1">\\1</a>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration + if dob.obj =~/..\/\S+/ \ + and dob.obj !~/(\"..\/\S+?\"|>\s*..\/\S+<)/ + dob.obj=dob.obj.gsub(/(\.\.\/\S+)/,'<a href="\1">\1</a>') + end + dob.obj=dob.obj.gsub(/<a href="\.\.\//,%{<a href="#{@vz.url_site}/}) + else + dob.obj=dob.obj.gsub(/</m,'<').gsub(/>/m,'>') + end + @tuned_file << dob + end + end + def amp_html + data,data_new=@data,[] + data.each do |dob| + dob.obj=dob.obj.gsub(/&/u,'&') + data_new << dob + end + data_new + end + def endnotes_html + data=@data + @tuned_file=[] + a,s='_a','_s' + ast,pls='*','+' + data.each do |dob| + unless dob.is ==:code + dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, + %{#{Mx[:nbsp]}<a href="#note\\2">#{Mx[:nbsp]}<sup id="note_ref\\2">\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- + %{\\1\\2 <a href="#note_ref\\2">#{Mx[:nbsp]}<sup id="note\\2">\\2.</sup></a> \\3 \\4}). #endnote- note- (careful may have switched) + gsub(/(#{Mx[:en_b_o]})[*](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, + %{#{Mx[:nbsp]}<a href="#note_astx\\2">#{Mx[:nbsp]}<sup id="note_ref_astx\\2">#{ast}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- + %{\\1#{ast}\\2 <a href="#note_ref_astx\\2">#{Mx[:nbsp]}<sup id="note_astx\\2">#{ast}\\2.</sup></a> \\3 \\4}). #endnote- note- (careful may have switched) + gsub(/(#{Mx[:en_b_o]})[+](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, + %{#{Mx[:nbsp]}<a href="#note_plus\\2">#{Mx[:nbsp]}<sup id="note_ref_plus\\2">#{pls}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- + %{\\1#{pls}\\2 <a href="#note_ref_plus\\2">#{Mx[:nbsp]}<sup id="note_plus\\2">#{pls}\\2.</sup></a> \\3 \\4}) #endnote- note- (careful may have switched) # double-check there may here be a bug + if dob.obj =~/#{Mx[:en_a_o]}([*+]+)\s+.+?#{Mx[:en_a_c]}/ + m=$1.length.to_i + dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]})[*]+\s+(.+?)(#{Mx[:en_a_c]})/, + %{#{Mx[:nbsp]}<a href="#note#{a*m}">#{Mx[:nbsp]}<sup id="note_ref#{a*m}">#{ast*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- + %{\\1#{ast*m} <a href="#note_ref#{a*m}">#{Mx[:nbsp]}<sup id="note#{a*m}">#{ast*m}</sup></a> \\2 \\3}). #endnote- note- (careful may have switched) + gsub(/(#{Mx[:en_a_o]})([+]+)\s+(.+?)(#{Mx[:en_a_c]})/, + %{#{Mx[:nbsp]}<a href="#note#{s*m}">#{Mx[:nbsp]}<sup id="note_ref#{s*m}">#{pls*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- + %{\\1#{pls*m} <a href="#note_ref#{s*m}">#{Mx[:nbsp]}<sup id="note#{s*m}">#{pls*m}</sup></a> \\2 \\3}) #endnote- note- (careful may have switched) + end + end + @tuned_file << dob + end + end + def output + data=@data + @tuned_file=[] + data.each do |dob| + dob.obj=dob.obj.strip.chomp + @tuned_file << dob + end + @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove + @tuned_file + end + end +end +__END__ diff --git a/lib/sisu/v2/errors.rb b/lib/sisu/v4/errors.rb index 9a8f85c1..d1ce5170 100644 --- a/lib/sisu/v2/errors.rb +++ b/lib/sisu/v4/errors.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,23 +56,28 @@ =end module SiSU_Errors - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env; include SiSU_Screen - class Info_error <Create_file + class InfoError <CreateFile def initialize(error,errorlist,cmd,fns='') @fns,@cmd,@error,@errorlist=fns,cmd,error,errorlist - @cmd=if cmd and cmd =~/c/; 'Vc' - else 'V' - end + @cmd=(cmd \ + && (cmd =~/c/)) \ + ? 'Vc' + : 'V' end - def error #creates file errorlog.sisu in pwd of last error reported - file=if @fns; SiSU_Env::Create_file.new(@cmd,@fns).file_error - else File.new('/tmp/errorlog.sisu','w+') - end + def error + 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]/; STDERR.puts SiSU_Screen::Ansi.new('',$!,$@).rescue - else SiSU_Screen::Ansi.new('',"rescued, exception reaised, silenced").puts_grey + 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 diff --git a/lib/sisu/v2/git.rb b/lib/sisu/v4/git.rb index b5dc403e..7c0d573a 100644 --- a/lib/sisu/v2/git.rb +++ b/lib/sisu/v4/git.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -31,11 +32,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,38 +56,65 @@ =end module SiSU_Git - require "#{SiSU_lib}/param" # param.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb - require "#{SiSU_lib}/dal" # dal.rb + require_relative 'param' # param.rb + require_relative 'sysenv' # sysenv.rb + require_relative 'dal' # dal.rb class Source - include FileUtils #::Verbose def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new - l=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) - @git_path={} - if @env.i18n.multilingual + @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 fnn,fnb,fnt=@opt.fns[m,1],@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.path.processing_path_git + '/' + fnb # + @opt.fnb - @git_path[:src]=@git_path[:fnb] + '/' + Gt[:txt] + '/' + l[:c] - @git_path[:image]=@git_path[:fnb] + '/' + Gt[:image] - @git_path[:conf]=@git_path[:fnb] + '/' + Gt[:conf] - @md=SiSU_Param::Parameters.new(@opt).get + git_path_fnb=@env.processing_path.git + '/' + fnb + #unless @opt.cmd =~/q/ + # @opt.cmd=~/[MVvz]/ \ + # ? SiSU_Screen::Ansi.new(@opt.cmd,'Git path',@git_path[:fnb]).green_hi_blue \ + # : SiSU_Screen::Ansi.new(@opt.cmd,'Git path',@git_path[:fnb]).green_title_hi + # SiSU_Screen::Ansi.new(@opt.cmd,"Git path","#{@opt.fns} -> #{@git_path[:fnb]}").warn if @opt.cmd =~/[MVv]/ + #end + 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], + skin: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:skin], + image: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:image], + audio: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:audio], + video: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:video], + conf: git_path_fnb + '/' + Gt[:sisupod] + '/' + Gt[:conf] + } SiSU_DAL::Source.new(@opt).read # -m end - def read + 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 + #if program_found? + # git_commit + #end + unless @opt.cmd =~/q/ + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Git path',@git_path[:fnb]).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Git path',@git_path[:fnb]).green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,"Git path","#{@opt.fns} -> #{@git_path[:fnb]}").warn if @opt.cmd =~/[MVv]/ end end def program_found? @@ -96,24 +122,36 @@ module SiSU_Git (found =~/bin\/git\b/) ? true : false end def make_dir_fnb - mkdir_p(@git_path[:fnb]) unless FileTest.directory?(@git_path[:fnb]) - mkdir_p(@git_path[:src]) unless FileTest.directory?(@git_path[:src]) - mkdir_p(@git_path[:conf]) unless FileTest.directory?(@git_path[:conf]) - mkdir_p("#{@git_path[:conf]}/skin") unless FileTest.directory?("#{@git_path[:conf]}/skin") - mkdir_p(@git_path[:image]) unless FileTest.directory?(@git_path[:image]) + 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[:skin]) unless FileTest.directory?(@git_path[:skin]) + 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") - system("cd #{@git_path[:fnb]}\ - && git init - ") + pwd=Dir.pwd + Dir.chdir(@git_path[:fnb]) + system("git init ") + Dir.chdir(pwd) end end def git_commit - system("cd #{@git_path[:fnb]} \ - && git add . \ - && git commit -a - ") + 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 @@ -121,11 +159,13 @@ module SiSU_Git p __LINE__ end def copy_src_head - if @opt.fns =~/\.ssm\.sst/ + if @opt.f_pth[:lng] + 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') - cp_r("#{@env.path.pwd}/#{ssm}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{ssm}",@git_path[:doc]) else - cp_r("#{@env.path.pwd}/#{@opt.fns}",@git_path[:src]) + FileUtils::cp_r("#{@env.path.pwd}/#{@opt.fns}",@git_path[:doc]) end end def copy_related_sst_ssi @@ -138,7 +178,11 @@ module SiSU_Git end end doc_import.each do |f| - cp_r("#{@env.path.pwd}/#{f}",@git_path[:src]) + 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 @@ -147,14 +191,14 @@ module SiSU_Git and @opt.cmd.inspect !~/m/ ##SiSU_Assemble::Composite.new(@opt).read #SiSU_DAL::Source.new(@opt).read # -m - "#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst" + "#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst" elsif composite_src - "#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst" + "#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst" else "#{@env.path.pwd}/#{@opt.fns}" end end def locate_skin - SiSU_Env::Info_skin.new(@md).select + SiSU_Env::InfoSkin.new(@md).select end def read_composite #print __FILE__ + ':' @@ -195,13 +239,19 @@ module SiSU_Git image_path="#{@env.path.pwd}/_sisu/image" images.flatten.each do |i| if FileTest.file?("#{image_path}/#{i}") - cp_r("#{image_path}/#{i}",@git_path[:image]) + FileUtils::cp_r("#{image_path}/#{i}",@git_path[:image]) end end if FileTest.file?(skin) - cp_r(skin,"#{@git_path[:conf]}/skin") + FileUtils::cp_r(skin,"#{@git_path[:conf]}/skin") + end + { skin: skin, images: images } + end + def sisuyaml_rc + sisurc=@env.path.sisurc_path + if FileTest.file?(sisurc) + FileUtils::cp_r(sisurc,@git_path[:conf]) end - {:skin =>skin, :images =>images} end def read_src print __FILE__ + ':' @@ -218,6 +268,7 @@ module SiSU_Git populate.extract_skin #parse_file_name=locate_parse_file #parse_file=IO.readlines(parse_file_name,'') + populate.sisuyaml_rc #(parse_file) populate.extract_skin_and_images #(parse_file) #populate.extract_composite_source #populate.read_composite # or read_each_composite @@ -228,3 +279,4 @@ module SiSU_Git end end __END__ +@file.output_path.sisugit diff --git a/lib/sisu/v4/harvest.rb b/lib/sisu/v4/harvest.rb new file mode 100644 index 00000000..ea967c37 --- /dev/null +++ b/lib/sisu/v4/harvest.rb @@ -0,0 +1,112 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + harvest metadata from document corpus (suitable for medium sized sites) + (concept example, [to remove size constraint: implement SQL equivalent]) + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +module SiSU_Harvest + @@the_idx_topics,@@the_idx_authors={},{} + class Source + require_relative 'options' # options.rb + require_relative 'harvest_topics' # harvest_topics.rb + require_relative 'harvest_authors' # harvest_authors.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + def initialize(opt) + @opt=opt + @env=SiSU_Env::InfoEnv.new + end + def read + begin + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}" + FileUtils::mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth) + cases(@opt,@env) + rescue + ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css + end + end + def help + puts <<WOK + harvest --harvest extracts document index metadata + +WOK + end + def css(opt) + require_relative 'css' # css.rb + css=SiSU_Style::CSS.new + fn_css=SiSU_Env::CSS_Default.new + style=File.new("#{@env.path.pwd}/#{fn_css.harvest}",'w') + style << css.harvest + style.close + end + def cases(opt,env) + case opt.mod.inspect + when/--harvest/i + css(opt) if opt.cmd.inspect =~/M/ + SiSU_HarvestAuthors::Songsheet.new(opt,env).songsheet + SiSU_HarvestTopics::Songsheet.new(opt,env).songsheet + if opt.cmd.inspect =~/R/ + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(opt).rsync_harvest + end + else + help + end + end + end +end +__END__ diff --git a/lib/sisu/v4/harvest_authors.rb b/lib/sisu/v4/harvest_authors.rb new file mode 100644 index 00000000..1846584a --- /dev/null +++ b/lib/sisu/v4/harvest_authors.rb @@ -0,0 +1,387 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + metadata harvest, extract authors and their writings from document set + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: simple xml representation (sax style) + +=end +module SiSU_HarvestAuthors + require_relative 'author_format' # author_format.rb + class Songsheet + @@the_idx_authors={} + def initialize(opt,env) + @opt,@env=opt,env + @file_list=opt.files + end + def songsheet + puts 'authors:' + idx_array={} + @opt.f_pths.each do |y| + lang_hash_file_array={} + name=y[:f] + filename=y[:pth] + '/' + y[:f] + File.open(filename,'r') do |file| + file.each_line("\n\n") do |line| + if line =~/^@(?:title|creator|date):(?:\s|$)/m + lang_hash_file_array[y[:lng_is]] ||= [] + lang_hash_file_array[y[:lng_is]] << line + elsif line =~/^@\S+?:(?:\s|$)/m \ + or line =~/^(?:\s*\n|%+ )/ + else break + end + end + end + lang_hash_file_array.each_pair do |lang,a| + idx_array[lang] ||= [] + idx_array=SiSU_HarvestAuthors::Harvest.new(@opt,@env,a,filename,name,idx_array,lang).extract_harvest + end + end + the_idx=SiSU_HarvestAuthors::Index.new(idx_array,@@the_idx_authors).construct_book_author_index + SiSU_HarvestAuthors::OutputIndex.new(@opt,the_idx).html_print.html_songsheet + end + end + class Harvest + def initialize(opt,env,data,filename,name,idx_array,lang) + @opt,@env,@data,@filename,@name,@idx_array,@lang=opt,env,data,filename,name,idx_array,lang + end + def extract_harvest + data,filename,name,idx_array,lang=@data,@filename,@name,@idx_array,@lang + @title,@subtitle,@fulltitle,@author,@author_format,@date=nil,nil,nil,nil,nil,nil + @authors=[] + rgx={} + rgx[:author]=/^@creator:(?:[ ]+|.+?:author:[ ]+)(.+?)(?:\||\n)/m + rgx[:title]=/^@title:[ ]+(.+)/ + rgx[:subtitle]=/^@title:.+?:subtitle:[ ]+(.+?)\n/m + rgx[:date]=/^@date:(?:[ ]+|.+?:published:[ ]+)(\d{4})/m + data.each do |para| + if para=~ rgx[:title] + @title=rgx[:title].match(para)[1] + end + if para=~ rgx[:subtitle] + @subtitle=rgx[:subtitle].match(para)[1] + end + if para=~ rgx[:author] + @author_format=rgx[:author].match(para)[1] + end + if para=~ rgx[:date] + @date=rgx[:date].match(para)[1] + end + break if @title && @subtitle && @author && @date + end + @fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title + if @title \ + and @author_format + creator=SiSU_FormatAuthor::Author.new(@author_format.strip).author_details + @authors,@authorship=creator[:authors],creator[:authorship] + file=if name=~/~[a-z]{2,3}\.ss[mt]$/ + name.sub(/~[a-z]{2,3}\.ss[mt]$/,'') + else + name.sub(/\.ss[mt]$/,'') + end + page=if @env.output_dir_structure.by? == :language + "#{lang}/sisu_manifest.html" + else + "sisu_manifest.#{lang}.html" + end + idx_array[lang] <<= { filename: filename, file: file, date: @date, title: @fulltitle, author: creator, page: page, lang: lang } + else + #p "missing author field: #{@filename} title: #{@title}; author: #{@author_format}" + end + idx_array[lang]=idx_array[lang].flatten + idx_array + end + end + class Index + def initialize(idx_array,the_idx) + @idx_array,@the_idx=idx_array,the_idx + @@the_idx_authors=@the_idx + end + def capital(txt) + txt[0].chr.capitalize + txt[1,txt.length] + end + def construct_book_author_index + idx_array=@idx_array + idx_array.each_pair do |lang,idx_array| + @@the_idx_authors[lang] ||= {} + idx_array.each do |idx| + idx[:author][:last_first_format_a].each do |author| + author=author.strip + if @@the_idx_authors[lang][author].is_a?(NilClass) + @@the_idx_authors[lang][author]={ md: [] } + end + @@the_idx_authors[lang][author][:md] << { filename: idx[:filename], file: idx[:file], author: idx[:author], title: idx[:title], date: idx[:date], page: idx[:page], lang: idx[:lang] } + end + end + end + @the_idx=@@the_idx_authors + end + end + class OutputIndex + require_relative 'i18n' # i18n.rb + def initialize(opt,the_idx) + @opt,@the_idx=opt,the_idx + @env=SiSU_Env::InfoEnv.new + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + @alphabet_list=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] + @alph=@alphabet_list.dup + @letter=@alph.shift + @vz=SiSU_Env::GetInit.instance.skin + end + def html_file_open + @the_idx.keys.each do |lng| + @output ||={} + @output[lng] ||={} + harvest_pth,file='','' + if @env.output_dir_structure.by? == :language + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/#{lng}/manifest" + file="#{harvest_pth}/authors.html" + elsif @env.output_dir_structure.by? == :filetype + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/manifest" + file="#{harvest_pth}/authors.#{lng}.html" + elsif @env.output_dir_structure.by? == :filename + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}" + file="#{harvest_pth}/authors.#{lng}.html" + end + FileUtils::mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth) + puts "file://#{file}" + @output[lng][:html]=File.new(file,'w') + end + end + def html_file_close + @the_idx.keys.each do |lng| + @output[lng][:html].close + @output[lng][:html_mnt].close if @output[lng][:html_mnt].is_a?(File) + end + end + def html_print + def html_songsheet + html_file_open + html_head + html_alph + html_body + html_tail + html_file_close + end + def html_head_adjust(lng,type='') + css_path,topics='','' + if @env.output_dir_structure.by? == :language + css_path=(type !~/maintenance/) \ + ? '../../_sisu/css/harvest.css' + : 'harvest.css' + topics='topics.html' + elsif @env.output_dir_structure.by? == :filetype + css_path=(type !~/maintenance/) \ + ? '../_sisu/css/harvest.css' + : 'harvest.css' + topics="topics.#{lng}.html" + elsif @env.output_dir_structure.by? == :filename + css_path=(type !~/maintenance/) \ + ? '../_sisu/css/harvest.css' + : 'harvest.css' + topics="topics.#{lng}.html" + end + ln=SiSU_i18n::Languages.new.language.list + harvest_languages='' + @the_idx.keys.each do |lng| + if @env.output_dir_structure.by? == :language + harvest_pth="../../#{lng}/manifest" + file="#{harvest_pth}/authors.html" + elsif @env.output_dir_structure.by? == :filetype + harvest_pth='.' + file="#{harvest_pth}/authors.#{lng}.html" + end + l=ln[lng][:t] + harvest_languages += %{<a href="#{file}">#{l}</a> } + end + sv=SiSU_Env::InfoVersion.instance.get_version + <<WOK +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>SiSU Metadata Harvest - Authors</title> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="dc.title" content= "SiSU metadata harvest, Authors - SiSU information Structuring Universe, Structured information Serialised Units" /> +<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" /> +<meta name="generator" content="#{sv[:project]} #{sv[:version]} of #{sv[:date_stamp]} (n*x and Ruby!)" /> +<link rel="generator" href="http://www.jus.uio.no/sisu/SiSU" /> +<link rel="stylesheet" href="#{css_path}" type="text/css" /> +<link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> +</head> +<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> +<a name="top" id="top"></a> +<a name="up" id="up"></a> +<a name="start" id="start"></a> +<h1>SiSU Metadata Harvest - Authors</h1> +<p>[<a href="../index.html"> HOME </a>] also see <a href="#{topics}">SiSU Metadata Harvest - Topics</a></p> +<p>#{@env.widget_static.search_form}</p> +<hr /> +<p class="tiny">#{harvest_languages}</p> +<hr /> +WOK + end + def html_head + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/ + @output[lng][:html] << html_head_adjust(lng) + end + end + def html_alph + a=[] + a << '<p>' + @alph.each do |x| + a << ((x =~/[0-9]/) \ + ? '' + : %{<a href="##{x}">#{x}</a>, }) + end + a=a.join + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/ + @output[lng][:html] << a + end + end + def html_tail + a =<<WOK +<hr /> +<a name="bottom" id="bottom"></a> +<a name="down" id="down"></a> +<a name="end" id="end"></a> +<a name="finish" id="finish"></a> +<a name="stop" id="stop"></a> +<a name="credits"></a> +#{@vz.credits_sisu} +</body> +</html> +WOK + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << a if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html] << a + end + end + def do_html(lng,html) + @output[lng][:html_mnt] << html if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html] << html + end + def do_string_name(lng,attrib,string) + f=/^(\S)/.match(string[0])[1] + if @lng != lng + @alph=@alphabet_list.dup + @letter=@alph.shift + @lng = lng + end + if @letter < f + while @letter < f + if @alph.length > 0 + @letter=@alph.shift + if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}"></p>#{@letter}</a><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} + end + @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} + else break + end + end + end + end + def html_body + the_idx=@the_idx + the_idx.each_pair do |lng,lng_array| + lng_array.sort.each do |a| + do_string_name(lng,'',a) + name=a[0].sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') + x = %{<p class="author"><a name="#{name}">#{a[0]}</a></p>} + if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html_mnt] << x + end + @output[lng][:html] << x + works=[] + a[1][:md].each do |x| + manifest_at=if @env.output_dir_structure.by? == :language + manifest_pth="#{@env.path.output}/#{x[:file]}" + x[:file] + '.html' + elsif @env.output_dir_structure.by? == :filetype + manifest_name=x[:file] + x[:file] + '.' + lng + '.html' + elsif @env.output_dir_structure.by? == :filename + "../#{x[:file]}/#{x[:page]}" + else '' #error + end + work=[ "#{x[:date]} #{x[:title]}", %{<p class="publication">#{x[:date]} <a href="#{manifest_at}">#{x[:title]}</a>, #{x[:author][:authors_s]}</p>} ] + works<<=(@output[lng][:html_mnt].is_a?(File)) \ + ? (work.concat([%{<p class="publication">[<a href="#{x[:file]}.sst">src</a>] #{x[:date]} <a href="file://#{manifest_at}">#{x[:title]}</a>, #{x[:author][:authors_s]} -- [<a href="#{x[:file]}.sst">#{x[:file]}.sst</a>]</p>}])) + : work + end + works.sort_by {|x| x[0]}.each do |x| + @output[lng][:html] << x[1] + @output[lng][:html_mnt] << x[2] if @output[lng][:html_mnt].is_a?(File) + end + end + end + end + self + end + def screen_print + def cycle + the_idx=@the_idx + the_idx.sort.each do |a| + puts a[0] + a[1][:md].each do |x| + puts "\t" + x[:file] + end + end + end + self + end + end +end +__END__ diff --git a/lib/sisu/v4/harvest_topics.rb b/lib/sisu/v4/harvest_topics.rb new file mode 100644 index 00000000..762f4be0 --- /dev/null +++ b/lib/sisu/v4/harvest_topics.rb @@ -0,0 +1,808 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + metadata harvest, extract topics and associated writings from document set + (topics use topic_register header) + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: simple xml representation (sax style) + +=end +module SiSU_HarvestTopics + require_relative 'author_format' # author_format.rb + include SiSU_Viz + class Songsheet + @@the_idx_topics={} + def initialize(opt,env) + @opt,@env=opt,env + @file_list=opt.files + end + def songsheet + puts 'topics:' + idx_array={} + @opt.f_pths.each do |y| + lang_hash_file_array={} + name=y[:f] + filename=y[:pth] + '/' + y[:f] + File.open(filename,'r') do |file| + file.each_line("\n\n") do |line| + if line =~/^@(?:title|creator|classify):(?:\s|$)/m + lang_hash_file_array[y[:lng_is]] ||= [] + lang_hash_file_array[y[:lng_is]] << line + elsif line =~/^@\S+?:(?:\s|$)/m \ + or line =~/^(?:\s*\n|\s*$|%+ )/ + else break + end + end + end + lang_hash_file_array.each_pair do |lang,a| + idx_array[lang] ||=[] + idx_array=SiSU_HarvestTopics::Harvest.new(@opt,@env,a,filename,name,idx_array,lang).extract_harvest + end + end + the_hash=SiSU_HarvestTopics::Index.new(@opt,@env,idx_array,@@the_idx_topics).song + SiSU_HarvestTopics::OutputIndex.new(@opt,the_hash).html_print.html_songsheet + end + end + class Harvest + def initialize(opt,env,data,filename,name,idx_array,lang) + @opt,@env,@data,@filename,@name,@idx_array,@lang=opt,env,data,filename,name,idx_array,lang + end + def extract_harvest + data,filename,name,idx_array,lang=@data,@filename,@name,@idx_array,@lang + @idx_lst,@title,@subtitle,@fulltitle,@author,@author_format=nil,nil,nil,nil,nil,nil + rgx={} + rgx[:author]=/^@creator:(?:[ ]+|.+?:author:[ ]+)(.+?)(?:\||\n)/m + rgx[:title]=/^@title:[ ]+(.+)/ + rgx[:subtitle]=/^@title:.+?:subtitle:[ ]+(.+?)\n/m + rgx[:idx]=/^@classify:.+?:topic_register:[ ]+(.+?)(?:\n\n|\n\s+:\S|\n%)/m + data.each do |para| + if para=~ rgx[:idx] + @idx_list=(rgx[:idx].match(para)[1]).split(/\s*\n\s*/).join + end + if para=~ rgx[:title] + @title=rgx[:title].match(para)[1] + end + if para=~ rgx[:subtitle] + @subtitle=rgx[:subtitle].match(para)[1] + end + if para=~ rgx[:author] + @author_format=rgx[:author].match(para)[1] + end + break if @title && @subtitle && @author && @idx_lst + end + @fulltitle=@subtitle ? (@title + ' - ' + @subtitle) : @title + if @title \ + and @author_format \ + and @idx_list + creator=SiSU_FormatAuthor::Author.new(@author_format.strip).author_details + @authors,@authorship=creator[:authors],creator[:authorship] + file=if name=~/~[a-z]{2,3}\.ss[mt]$/ + name.sub(/~[a-z]{2,3}\.ss[mt]$/,'') + else + name.sub(/\.ss[mt]$/,'') + end + page=if @env.output_dir_structure.by? == :language + "#{lang}/sisu_manifest.html" + else + "sisu_manifest.#{lang}.html" + end + idx_array[lang] <<=if @idx_list =~/;/ + g=@idx_list.scan(/[^;]+/) + idxl=[] + g.each do |i| + i=i.strip + idxl << { filename: filename, file: file, rough_idx: i, title: @fulltitle, author: creator, page: page, lang: lang } + end + idxl + else { filename: filename, file: file, rough_idx: @idx_list, title: @fulltitle, author: creator, page: page, lang: lang } + end + else + p "missing required field in #{@filename} - [title]: <<#{@title}>>; [author]: <<#{@author_format}>>; [idx]: <<#{@idx_list}>>" if @opt.cmd.inspect =~/[VM]/ + end + idx_array[lang]=idx_array[lang].flatten + idx_array + end + end + class Index + def initialize(opt,env,idx_array,the_idx) + @opt,@env,@idx_array,@the_idx=opt,env,idx_array,the_idx + @@the_idx_topics=@the_idx + end + def song + the_idx=construct_book_topic_keys + the_hash=construct_book_topic_hash(the_idx) + end + def capital(txt) + txt_a=txt.scan(/\S+/) + tx='' + txt_a.each do |txt| + tx += txt[0].chr.capitalize + txt[1,txt.length] + ' ' + end + tx.strip + end + def capital_(txt) + txt[0].chr.capitalize + txt[1,txt.length] + end + def contents(idx,lang) + names='' + idx[:author][:last_first_format_a].each do |n| + s=n.sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') + names=if @env.output_dir_structure.by? == :language + names += %{<a href="authors.html##{s}">#{n}</a>, } + else + names += %{<a href="authors.#{lang}.html##{s}">#{n}</a>, } + end + end + md={ filename: idx[:filename], file: idx[:file], author: names, title: idx[:title], page: idx[:page] } + end + def capital_(txt) + txt[0].chr.capitalize + txt[1,txt.length] + end + def key_create(c,alt) + x=nil + x=if c.length==6 + c[0].to_s + '|' + + capital(c[1][0].to_s) + '|' + + capital(c[2][0].to_s) + '|' + + capital(c[3][0].to_s) + '|' + + capital(alt.to_s) + elsif c.length==5 + c[0].to_s + '|' + + capital(c[1][0].to_s) + '|' + + capital(c[2][0].to_s) + '|' + + capital(alt.to_s) + elsif c.length==4 + c[0].to_s + '|' + + capital(c[1][0].to_s) + '|' + + capital(alt.to_s) + elsif c.length==3 + c[0].to_s + '|' + + capital(alt.to_s) + end + end + def construct_book_topic_keys + idx_array=@idx_array + @idx_a=[] + @the_a=[] + idx_array.each_pair do |lang,idx_array| + @@the_idx_topics[lang] ||= {} + idx_array.each do |idx| + if idx[:rough_idx] + idx_lst=idx[:rough_idx].scan(/[^:]+/) + else + puts "no topic register in: << #{idx[:filename]} >>" + next + end + idx_a=[] + idx_lst.each do |c| + idx_a << c.scan(/[^|\n]+/m) + end + idx_a << contents(idx,lang) + @idx_a << [lang] + idx_a + end + end + @idx_a.each do |c| + if c.length > 1 \ + and c.is_a?(Array) + if c[2].is_a?(Hash) + c[1].each do |alt| + v=key_create(c,alt) + @the_a << [v, c[2]] if v + end + end + end + if c.length > 2 \ + and c.is_a?(Array) + if c[3].is_a?(Hash) + c[2].each do |alt| + v=key_create(c,alt) + @the_a << [v, c[3]] if v + end + end + end + if c.length > 3 \ + and c.is_a?(Array) + if c[4].is_a?(Hash) + c[3].each do |alt| + v=key_create(c,alt) + @the_a << [v, c[4]] if v + end + end + end + if c.length > 4 \ + and c.is_a?(Array) + if c[5].is_a?(Hash) + c[4].each do |alt| + v=key_create(c,alt) + @the_a << [v, c[5]] if v + end + end + end + if c.length > 5 \ + and c.is_a?(Array) + if c[6].is_a?(Hash) + c[5].each do |alt| + v=key_create(c,alt) + @the_a << [v, c[6]] if v + end + end + end + end + y=@the_a.sort_by { |x| x[0] } #; y.each {|z| puts z} + end + def construct_book_topic_hash(y) + @the_h={} + y.each do |z| + x=z[0].scan(/[^|]+/) + depth=x.length + extract=(depth-1) + k=case extract + when 4 + { x[0] => { x[1] => { x[2] => { x[3] => { x[4] => z[1] } } } } } + when 3 + { x[0] => { x[1] => { x[2] => { x[3] => z[1] } } } } + when 2 + { x[0] => { x[1] => { x[2] => z[1] } } } + when 1 + { x[0] => { x[1] => z[1] } } + when 0 + { x[0] => z[1] } + end + if extract >= 0 + k.each_pair do |x0,y| + if extract == 0 + @the_h[x0] ||={ md: [] } + @the_h[x0][:md] << y + else + @the_h[x0] ||={} + end + #puts ' '*0 + x0 + if extract >= 1 + y.each_pair do |x1,y| + if extract == 1 + @the_h[x0][x1] ||={ md: [] } + @the_h[x0][x1][:md] << y + else + @the_h[x0][x1] ||={} + end + #puts ' '*1 + x1 + if extract >= 2 + y.each_pair do |x2,y| + if extract == 2 + @the_h[x0][x1][x2] ||={ md: [] } + @the_h[x0][x1][x2][:md] << y + else + @the_h[x0][x1][x2] ||={} + end + #puts ' '*2 + x2 + if extract >= 3 + y.each_pair do |x3,y| + if extract == 3 + @the_h[x0][x1][x2][x3] ||={ md: [] } + @the_h[x0][x1][x2][x3][:md] << y + else + @the_h[x0][x1][x2][x3] ||={} + end + #puts ' '*3 + x3 + if extract == 4 + y.each_pair do |x4,y| + if extract == 4 + @the_h[x0][x1][x2][x3][x4] ||={ md: [] } + @the_h[x0][x1][x2][x3][x4][:md] << y + else + @the_h[x0][x1][x2][x3][x4] ||={} + end + #puts ' '*4 + x4 + if extract == 5 + y.each_pair do |x5,y| + if extract == 5 + @the_h[x0][x1][x2][x3][x4][x5] ||={ md: [] } + @the_h[x0][x1][x2][x3][x4][x5][:md] << y + end + #puts ' '*5 + x5 + end + end + end + end + end + end + end + end + end + end + end + end + end + #@the_h.each_pair { |x,y| p x; p y } + @the_h + end + def traverse_base + @the_h.each_pair do |x0,y| + puts ' '*0 + x0 if x0.is_a?(String) + if y.is_a?(Hash) + y.each_pair do |x1,y| + puts ' '*1 + x1 if x1.is_a?(String) + if y.is_a?(Hash) + y.each_pair do |x2,y| + puts ' '*2 + x2 if x2.is_a?(String) + if y.is_a?(Hash) + y.each_pair do |x3,y| + puts ' '*3 + x3 if x3.is_a?(String) + if y.is_a?(Hash) + y.each_pair do |x4,y| + puts ' '*4 + x4 if x4.is_a?(String) + if y.is_a?(Hash) + y.each_pair do |x5,y| + puts ' '*5 + x5 if x5.is_a?(String) + end + end + end + end + end + end + end + end + end + end + end + end + def traverse + @the_h.each_pair do |x0,y| + puts ' '*0 + x0 if x0.is_a?(String) + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each { |x| puts ' '*5 + x[:title] } + end + y.each_pair do |x1,y| + puts ' '*1 + x1 if x1.is_a?(String) + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each { |x| puts ' '*5 + x[:title] } + end + y.each_pair do |x2,y| + puts ' '*2 + x2 if x2.is_a?(String) + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each { |x| puts ' '*5 + x[:title] } + end + y.each_pair do |x3,y| + puts ' '*3 + x3 if x3.is_a?(String) + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each { |x| puts ' '*5 + x[:title] } + end + y.each_pair do |x4,y| + puts ' '*4 + x4 if x4.is_a?(String) + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each { |x| puts ' '*5 + x[:title] } + end + y.each_pair do |x5,y| + puts ' '*5 + x4 if x4.is_a?(String) + end + end + end + end + end + end + end + end + end + end + end + end + end + class OutputIndex + require_relative 'i18n' # i18n.rb + def initialize(opt,the_idx) + @opt,@the_idx=opt,the_idx + @env=SiSU_Env::InfoEnv.new + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + @alphabet_list=%W[9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] + @alph=@alphabet_list.dup + @letter=@alph.shift + @vz=SiSU_Env::GetInit.instance.skin + end + def html_file_open + @the_idx.keys.each do |lng| + @output ||={} + @output[lng] ||={} + harvest_pth,file='','' + if @env.output_dir_structure.by? == :language + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/#{lng}/manifest" + file="#{harvest_pth}/topics.html" + elsif @env.output_dir_structure.by? == :filetype + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}/manifest" + file="#{harvest_pth}/topics.#{lng}.html" + elsif @env.output_dir_structure.by? == :filename + harvest_pth="#{@env.path.webserv}/#{@opt.base_stub}" + file="#{harvest_pth}/topics.#{lng}.html" + end + FileUtils::mkdir_p(harvest_pth) unless FileTest.directory?(harvest_pth) + puts "file://#{file}" + @output[lng][:html]=File.new(file,'w') + if @opt.cmd.inspect =~/[M]/ + @output[lng][:html_mnt]=File.new("#{@env.path.pwd}/topics.html",'w') + end + end + end + def html_file_close + @the_idx.keys.each do |lng| + @output[lng][:html].close + @output[lng][:html_mnt].close if @output[lng][:html_mnt].is_a?(File) + end + end + def html_print + def html_songsheet + #traverse + html_file_open + html_head + html_alph + html_body_traverse + html_tail + html_file_close + end + def html_body_traverse + @the_idx.each_pair do |x0,y| + lng=x0 + if x0.is_a?(String) + #do_string_name(lng,'lev0',x0) + #puts ' '*0 + x0 + end + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each do |x| + #do_hash(lng,attrib,x) #lv==0 ? + #puts ' '*5 + x[:title] + end + end + y.each_pair do |x1,y| + if x1.is_a?(String) + do_string_name(lng,'lev0',x1) + #puts ' '*1 + x1 + end + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each do |x| + do_hash(lng,0,x) + #puts ' '*5 + x[:title] + end + end + y.each_pair do |x2,y| + if x2.is_a?(String) + do_string(lng,'lev1',x2) + #puts ' '*2 + x2 + end + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each do |x| + do_hash(lng,1,x) + #puts ' '*5 + x[:title] + end + end + y.each_pair do |x3,y| + if x3.is_a?(String) + do_string(lng,'lev2',x3) + #puts ' '*3 + x3 + end + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each do |x| + do_hash(lng,2,x) + #puts ' '*5 + x[:title] + end + end + y.each_pair do |x4,y| + if x4.is_a?(String) + do_string(lng,'lev3',x4) + #puts ' '*4 + x4 + end + if y.is_a?(Hash) + if y.has_key?(:md) + y[:md].each do |x| + do_hash(lng,3,x) + #puts ' '*5 + x[:title] + end + end + y.each_pair do |x5,y| + if x5.is_a?(String) + do_string(lng,'lev4',x5) + #puts ' '*5 + x5 + end + end + end + end + end + end + end + end + end + end + end + end + end + def html_head_adjust(lng,type='') + css_path,authors='','' + if @env.output_dir_structure.by? == :language + css_path=(type !~/maintenance/) \ + ? '../../_sisu/css/harvest.css' + : 'harvest.css' + authors='authors.html' + elsif @env.output_dir_structure.by? == :filetype + css_path=(type !~/maintenance/) \ + ? '../_sisu/css/harvest.css' + : 'harvest.css' + authors="authors.#{lng}.html" + elsif @env.output_dir_structure.by? == :filename + css_path=(type !~/maintenance/) \ + ? './_sisu/css/harvest.css' + : 'harvest.css' + authors="authors.#{lng}.html" + end + ln=SiSU_i18n::Languages.new.language.list + harvest_languages='' + @the_idx.keys.each do |lng| + if @env.output_dir_structure.by? == :language + harvest_pth="../../#{lng}/manifest" + file="#{harvest_pth}/topics.html" + elsif @env.output_dir_structure.by? == :filetype + harvest_pth='.' + file="#{harvest_pth}/topics.#{lng}.html" + elsif @env.output_dir_structure.by? == :filename + harvest_pth='.' + file="#{harvest_pth}/topics.#{lng}.html" + end + l=ln[lng][:t] + harvest_languages += %{<a href="#{file}">#{l}</a> } + end + sv=SiSU_Env::InfoVersion.instance.get_version + <<WOK +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title>SiSU Metadata Harvest - Topics</title> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="dc.title" content= "SiSU metadata harvest, Topics - SiSU information Structuring Universe, Structured information Serialised Units" /> +<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" /> +<meta name="generator" content="#{sv[:project]} #{sv[:version]} of #{sv[:date_stamp]} (n*x and Ruby!)" /> +<link rel="generator" href="http://www.jus.uio.no/sisu/SiSU" /> +<link rel="stylesheet" href="#{css_path}" type="text/css" /> +<link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> +</head> +<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> +<a name="top" id="top"></a> +<a name="up" id="up"></a> +<a name="start" id="start"></a> +<h1>SiSU Metadata Harvest - Topics</h1> +<p>[<a href="../index.html"> HOME </a>] also see <a href="#{authors}">SiSU Metadata Harvest - Authors</a></p> +<p>#{@env.widget_static.search_form}</p> +<hr /> +<p class="tiny">#{harvest_languages}</p> +<hr /> +WOK + end + def html_head + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/ + @output[lng][:html] << html_head_adjust(lng) + end + end + def html_alph + a=[] + a << '<p>' + @alph.each do |x| + a << ((x =~/[0-9]/) \ + ? '' + : %{<a href="##{x}">#{x}</a>, }) + end + a=a.join + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/ + @output[lng][:html] << a + end + end + def html_tail + a =<<WOK +<hr /> +<a name="bottom" id="bottom"></a> +<a name="down" id="down"></a> +<a name="end" id="end"></a> +<a name="finish" id="finish"></a> +<a name="stop" id="stop"></a> +<a name="credits"></a> +#{@vz.credits_sisu} +</body> +</html> +WOK + @the_idx.keys.each do |lng| + @output[lng][:html_mnt] << a if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html] << a + end + end + def do_html(lng,html) + @output[lng][:html] << html + end + def do_html_maintenance(lng,html) + @output[lng][:html_mnt] << html if @output[lng][:html_mnt].is_a?(File) + end + def do_string(lng,attrib,string) + html=%{<p class="#{attrib}">#{string}</p>} + do_html(lng,html) + do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) + end + def do_string_default(lng,attrib,string) + html=%{<p class="#{attrib}">#{string}</p>} + do_html(lng,html) + end + def do_string_maintenance(lng,attrib,string) + html=%{<p class="#{attrib}">#{string}</p>} + do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) + end + def do_string_name(lng,attrib,string) + f=/^(\S)/.match(string)[1] + if @lng != lng + @alph=@alphabet_list.dup + @letter=@alph.shift + @lng = lng + end + if @letter < f + while @letter < f + if @alph.length > 0 + @letter=@alph.shift + if @output[lng][:html_mnt].is_a?(File) + @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} + end + @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} + else break + end + end + end + name=string.strip.gsub(/\s+/,'_') + html=%{<p class="#{attrib}"><a name="#{name}">#{string}</a></p>} + do_html(lng,html) + do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) + end + def do_array(lng,lv,array) + lv+=1 + array.each do |b| + do_case(lng,lv,b) + end + end + def do_hash_md(lng,attrib,hash) + manifest_at=if @env.output_dir_structure.by? == :language + hash[:file] + '.html' + elsif @env.output_dir_structure.by? == :filetype + hash[:file] + '.' + lng + '.html' + elsif @env.output_dir_structure.by? == :filename + "./#{hash[:file]}/#{hash[:page]}" + else '' #error + end + html=%{<a href="#{manifest_at}">#{hash[:title]}</a> - #{hash[:author]}} + do_string_default(lng,attrib,html) + end + def do_hash_md_maintenance(lng,attrib,hash) + if @output[lng][:html_mnt].is_a?(File) #should not be run for presentation output + html=%{[<a href="#{hash[:file]}.sst">src</a>] <a href="file://#{@env.path.output}/#{hash[:file]}/#{hash[:page]}">#{hash[:title]}</a> - #{hash[:author]}} + do_string_maintenance(lng,attrib,html) + end + end + def do_hash(lng,lv,hash) + lv+=1 + key=[] + hash.each_key do |m| + if m == :md + do_case(lng,lv,hash[m]) + elsif m != :title \ + and m != :author \ + and m != :filename \ + and m != :file \ + and m != :rough_idx \ + and m != :page + key << m + elsif m == :title + do_hash_md(lng,'work',hash) + do_hash_md_maintenance(lng,'work',hash) + end + end + if key.length > 0 + key.sort.each do |m| + attrib="lev#{lv}" + lv==0 ? do_string_name(lng,attrib,m) : do_string(lng,attrib,m) + do_case(lng,lv,hash[m]) + end + end + end + def do_case(lng,lv,a) + case a + when String + attrib="lev#{lv}" + if a=~/S/ + lv==0 ? do_string_name(lng,attrib,a) : do_string(lng,attrib,a) + end + when Array + do_array(lng,lv,a) + when Hash + do_hash(lng,lv,a) + end + end + #def html_body + # the_idx=@the_idx + # the_idx.each_pair do |lng,lng_array| + # lng_array.sort.each do |a| + # do_case(lng,-1,a) + # end + # end + #end + self + end + end +end +__END__ +terms -|_ t{tl1} -|_ {fa}[fa]{filenames and other details} + | |_ {tl2} -|_ {fa}[fa]{filenames and other details} + | | |_{tl3} -|_ {fa}[fa]{filenames and other details} + | | | |_{tl4} - {fa}[fa]{filenames and other details} + | | | | + | | | |_{tl4a} - {fa}[fa]{filenames and other details} + | | | | + | | | |_{tl4b} - {fa}[fa]{filenames and other details} + | | | | + | | | |_ ... + | | | + | | |_{tl3a} - {fa}[fa]{filenames and other details} + | | + | |_{tl2a} - {fa}[fa]{filenames and other details} + | + |_ t{tl1a} -|_ {fa}[fa]{filenames and other details} + |_ ... diff --git a/lib/sisu/v2/help.rb b/lib/sisu/v4/help.rb index 8413aff1..0ab87fdd 100644 --- a/lib/sisu/v2/help.rb +++ b/lib/sisu/v4/help.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2011, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,18 +56,19 @@ =end module SiSU_Help - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Screen - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb class Help + require_relative 'i18n' # i18n.rb def initialize(request='',color='') @request,@color=request,color - if color =~/color_off/; @cX=SiSU_Screen::Ansi.new('k').cX - else @cX=SiSU_Screen::Ansi.new('yes').cX - end + @cX=(color =~/color_off/) \ + ? (SiSU_Screen::Ansi.new('k').cX) + : (SiSU_Screen::Ansi.new('yes').cX) fns='help_example_dummy_file_name.sst' - @env=SiSU_Env::Info_env.new(fns) - @db=SiSU_Env::Info_db.new + @env=SiSU_Env::InfoEnv.new(fns) + @db=SiSU_Env::InfoDb.new m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m @output_stub=Dir.pwd[m,1] end @@ -159,7 +159,7 @@ module SiSU_Help end def summary print <<WOK - SiSU, Copyright (C) 1997 - 2010 Ralph Amissah + SiSU, Copyright (C) 1997 - 2012 Ralph Amissah License GPL version 3 or Later. This program comes with ABSOLUTELY NO WARRANTY; This is free software, and you are welcome to redistribute it under the conditions of the GPL3 or later. For more license detail type/enter: "sisu --help license" @@ -336,7 +336,7 @@ WOK WOK end def shortcuts - cf_defaults=SiSU_Env::Info_processing_flag.new + cf_defaults=SiSU_Env::InfoProcessingFlag.new print <<WOK #{@cX.ruby}Shorthand for multiple flags#{@cX.off} @@ -397,9 +397,12 @@ sisu Note: files for SiSU should be in UTF-8 character encoding. #{@cX.cyan}Data text markup#{@cX.off} (alternative to available html subset) - #{@cX.green}% SiSU 0.38#{@cX.off} [statement on first line of document, declared file-type identifier, SiSU markup document, markup used is version 0.38] - #{@cX.green}:A~#{@cX.off} heading/title [levels :A to :C available (and beneath that 1 to 6)] + #{@cX.green}% SiSU 2.00#{@cX.off} [statement on first line of document, declared file-type identifier, SiSU markup document, markup used is version 0.38] + + #{@cX.green}A~#{@cX.off} heading/title [levels A to C available (and beneath that 1 to 6)] + #{@cX.green}1~#{@cX.off}filename heading [segmentation level, levels 1 to 6 available] + #{@cX.green}!{#{@cX.off}emphasis#{@cX.green}}!#{@cX.off} #{@cX.green}*{#{@cX.off}bold text#{@cX.green}}*#{@cX.off} #{@cX.green}_{#{@cX.off}underscore#{@cX.green}}_#{@cX.off} @@ -409,18 +412,28 @@ sisu #{@cX.green},{#{@cX.off}subscript#{@cX.green}},#{@cX.off} #{@cX.green}+{#{@cX.off}inserted text#{@cX.green}}+#{@cX.off} #{@cX.green}-{#{@cX.off}strikethrough#{@cX.green}}-#{@cX.off} + ------------------------------------------ #{@cX.cyan}Indentation and bullets#{@cX.off} + #{@cX.green}_1#{@cX.off} indent paragraph one level + #{@cX.green}_2#{@cX.off} indent paragraph two steps + #{@cX.green}_*#{@cX.off} bullet text + #{@cX.green}_1*#{@cX.off} bullet text, first indent + ------------------------------------------ #{@cX.cyan}Numbered List#{@cX.off} (not to be confused with headings/titles, (document structure)) + #{@cX.green}##{@cX.off} numbered list numbered list 1., 2., 3, etc. + #{@cX.green}_##{@cX.off} numbered list numbered list indented second level a., b., c., d., etc. + ------------------------------------------ #{@cX.cyan}Endnotes#{@cX.off} + #{@cX.green}~{#{@cX.off}footnote/endnote#{@cX.green}}~#{@cX.off} endnote#{@cX.green}~{#{@cX.off}self contained endnote marker & endnote in one#{@cX.green}}~#{@cX.off} #{@cX.green}~{*#{@cX.off}asterisk footnote/endnote#{@cX.green}}~#{@cX.off} editor's annotations, square bracket notes @@ -430,8 +443,10 @@ sisu alternative endnote pair notation #{@cX.green}~^#{@cX.off} endnote marker #{@cX.green}^~#{@cX.off} endnote text following the paragraph in which the marker occurs + ------------------------------------------ #{@cX.cyan}Links#{@cX.off} + http://url.org on its own would be automatically marked up and hyperlinked to itself #{@cX.green}{#{@cX.off} [text to link] #{@cX.green}}#{@cX.off}http://url.org #{@cX.green}{#{@cX.off}image.png#{@cX.green}}#{@cX.off}http://url.org @@ -450,19 +465,24 @@ sisu if a server host name has been provided/configured, will provide a list of available output types that would be generated using the shortcut command and the markup file provided, i.e. output generated using the command (as configured): "sisu -3sS markup_source_filename.sst" using server host, directory stub, filename to compose the link. + ------------------------------------------ adding fixed names in html, manual location marker/tagging #{@cX.green}*~[name]#{@cX.off} <a name="[name]"> + ------------------------------------------ #{@cX.green}~##{@cX.off} unnumbered paragraph (place marker at end of paragraph) #{@cX.green}-##{@cX.off} unnumbered paragraph, delete when not required (place marker at end of paragraph) [used in dummy headings, eg. for segmented html] + ------------------------------------------ manual page breaks (LaTeX/pdf) #{@cX.green}<:pb>#{@cX.off} page break, which breaks a page, starting a new page in single column text and a new column in double column text #{@cX.green}<:pn>#{@cX.off} page new, which starts a new page, in both single and double column text (leaving an empty column in double column text if necessary). Note: page breaks are usually introduced to pdfs either as header instructions, indicating that pages should break at given levels + ------------------------------------------ #{@cX.cyan}Composite documents#{@cX.off} + It is possible to build a document by creating a master document that requires other documents. The documents required may complete documents that could be generated independently, or they could be markup snippets, prepared so as to be easily available to be placed within another text. If the calling document is a master document (built mainly from other documents), it should be named with the suffix #{@cX.blue}.ssm#{@cX.off} Within this document you would provide information on the other documents that should be included within the text. These may be other documents that would be processed in a regular way, or markup bits prepared only for inclusion within a master document #{@cX.blue}.sst#{@cX.off} regular markup file, or #{@cX.blue}.ssi#{@cX.off} (insert/information) A secondary file of the composite document is built prior to processing with the same prefix and the suffix #{@cX.blue}.ssm.sst#{@cX.off} #{@cX.cyan}#basic sisu markup alternatives#{@cX.off} @@ -522,9 +542,9 @@ WOK @links: { SiSU }http://www.jus.uio.no/sisu { FSF }http://www.fsf.org -:A~ A Sample Document +A~ A Sample Document -:B~ just for fun +B~ just for fun 1~ This is Chapter One or Article One @@ -570,9 +590,9 @@ WOK @links: { SiSU }http://www.jus.uio.no/sisu { FSF }http://www.fsf.org -:A~ @title @author +A~ @title @author -:B~ just for fun +B~ just for fun 1~ This is Chapter One or Article One @@ -600,109 +620,79 @@ Header tags appear at the beginning of a document and provide meta information o All header instructions take either the form #{@cX.green}@headername:#{@cX.off} followed on the next line by an indented sub-category header if any #{@cX.green}:sub-headername:#{@cX.off}. #{@cX.green}@indentifier:#{@cX.off} information or instructions where the #{@cX.green}"identifier"#{@cX.off} is a tag recognised by the program, and the #{@cX.green}"information"#{@cX.off} or #{@cX.green}"instructions"#{@cX.off} belong to the tag/indentifier specified - Note: a header where used should only be used once; all headers apart from @title: are optional; the @structure: or 0~toc header is used to describe document structure, and can be useful to know. -This is a sample header (#{@cX.fuschia}Dublin Core in fuschia,#{@cX.off} #{@cX.cyan}other information headers in cyan,#{@cX.off} #{@cX.ruby}markup instructions in red#{@cX.off}): - -#{@cX.fuschia}@title:#{@cX.off} My Title - This is now the Title of the Document and used as such - #{@cX.cyan}:subtitle:#{@cX.off} The Subtitle if any - -#{@cX.fuschia}@creator:#{@cX.off} - #{@cX.fuschia}:author:#{@cX.off} Surname, Other names (if more than one author separate author names with a semi colon, if name is of an institution just write name or the name contains a comma enclose in quotation marks) - -#{@cX.fuschia}@classify:#{@cX.off} - #{@cX.fuschia}:topic_register:#{@cX.off} [e.g.:] text markup language; application:text processing;output:html|xml|latex|pdf|sql - -#{@cX.fuschia}@subject:#{@cX.off} (whatever your subject) - -#{@cX.fuschia}@description:#{@cX.off} - -#{@cX.fuschia}@publisher:#{@cX.off} - -#{@cX.fuschia}@contributor:#{@cX.off} - -#{@cX.fuschia}@translator:#{@cX.off} [or @translated_by:] - -#{@cX.fuschia}@illustrator:#{@cX.off} [or @illustrated_by:] - -#{@cX.fuschia}@prepared_by:#{@cX.off} [or @digitized_by:] - -#{@cX.fuschia}@date:#{@cX.off} 2000-08-27 -\t[ also #{@cX.fuschia}@date.created:#{@cX.off} #{@cX.fuschia}@date.issued:#{@cX.off} #{@cX.fuschia}@date.available:#{@cX.off} #{@cX.fuschia}@date.valid:#{@cX.off} #{@cX.fuschia}@date.modified:#{@cX.off} ] - -#{@cX.fuschia}@type:#{@cX.off} article - -#{@cX.fuschia}@format:#{@cX.off} - -#{@cX.fuschia}@identifier:#{@cX.off} - -#{@cX.fuschia}@source:#{@cX.off} - -#{@cX.fuschia}@language:#{@cX.off} [or @language.document:] [country code for language if available, or language, English, en is the default setting] (en - English, fr - French, de - German, it - Italian, es - Spanish, pt - Portuguese, sv - Swedish, da - Danish, fi - Finnish, no - Norwegian, is - Icelandic, nl - Dutch, et - Estonian, hu - Hungarian, pl - Polish, ro - Romanian, ru - Russian, el - Greek, uk - Ukranian, tr - Turkish, sk - Slovak, sl - Slovenian, hr - Croatian, cs - Czech, bg - Bulgarian ) [however, encodings are not available for all of the languages listed.] - -#{@cX.fuschia}@language.original:#{@cX.off} + Note: a header where used should only be used once; all headers apart from #{@cX.ruby}@title:#{@cX.off} are optional. + +#{@cX.ruby}@title:#{@cX.off} My Title - This is now the Title of the Document and used as such + #{@cX.cyan}:subtitle:#{@cX.off} The Subtitle if any + +#{@cX.ruby}@creator:#{@cX.off} + #{@cX.cyan}:author:#{@cX.off} Surname, Other names (if more than one author separate author names with a semi colon, if name is of an institution just write name or the name contains a comma enclose in quotation marks) + #{@cX.cyan}:contributor:#{@cX.off} + #{@cX.cyan}:translator:#{@cX.off} [or :translated_by:] + #{@cX.cyan}:illustrator:#{@cX.off} [or :illustrated_by:] + #{@cX.cyan}:prepared_by:#{@cX.off} [or :digitized_by:] + +#{@cX.ruby}@date:#{@cX.off} + #{@cX.cyan}:published:#{@cX.off} + #{@cX.cyan}:created:#{@cX.off} + #{@cX.cyan}:issued:#{@cX.off} + #{@cX.cyan}:available:#{@cX.off} + #{@cX.cyan}:valid:#{@cX.off} + #{@cX.cyan}:modified:#{@cX.off} + +#{@cX.ruby}@rights:#{@cX.off} + #{@cX.cyan}:copyright:#{@cX.off} Author's name, all rights reserved + #{@cX.cyan}:license:#{@cX.off} public domain, copyleft, creative commons variant, etc. + +#{@cX.ruby}@classify:#{@cX.off} + #{@cX.cyan}:topic_register:#{@cX.off} [e.g.:] text markup language; application:text processing;output:html|xml|latex|pdf|sql + #{@cX.cyan}:subject:#{@cX.off} (whatever your subject) + #{@cX.cyan}:keywords:#{@cX.off} + #{@cX.cyan}:coverage:#{@cX.off} + #{@cX.cyan}:relation:#{@cX.off} + #{@cX.cyan}:type:#{@cX.off} + #{@cX.cyan}:identifier:#{@cX.off} + #{@cX.cyan}:loc:#{@cX.off} [Library of Congress classification] + #{@cX.cyan}:dewey:#{@cX.off} [Dewey classification] + #{@cX.cyan}:isbn:#{@cX.off} + #{@cX.cyan}:oclc:#{@cX.off} + +#{@cX.ruby}@notes:#{@cX.off} + #{@cX.cyan}:description:#{@cX.off} + #{@cX.cyan}:abstract:#{@cX.off} + #{@cX.cyan}:comment:#{@cX.off} + #{@cX.cyan}:history:#{@cX.off} + #{@cX.cyan}:prefix:#{@cX.off} + #{@cX.cyan}:suffix:#{@cX.off} + +#{@cX.ruby}@publisher:#{@cX.off} + +#{@cX.ruby}@language:#{@cX.off} [or @language.document:] [country code for language if available, or language, English, en is the default setting] (en - English, fr - French, de - German, it - Italian, es - Spanish, pt - Portuguese, sv - Swedish, da - Danish, fi - Finnish, no - Norwegian, is - Icelandic, nl - Dutch, et - Estonian, hu - Hungarian, pl - Polish, ro - Romanian, ru - Russian, el - Greek, uk - Ukranian, tr - Turkish, sk - Slovak, sl - Slovenian, hr - Croatian, cs - Czech, bg - Bulgarian ) [however, encodings are not available for all of the languages listed.] + +#{@cX.ruby}@language.original:#{@cX.off} original language in which the work was published -#{@cX.fuschia}@papersize:#{@cX.off} -(A4|US_letter|book_B5|book_A5|US_legal) - -#{@cX.fuschia}@relation:#{@cX.off} - -#{@cX.fuschia}@coverage:#{@cX.off} - -#{@cX.fuschia}@rights:#{@cX.off} copyright, all rights reserved, public domain, copyleft, creative commons variant, etc. - -#{@cX.cyan}@owner:#{@cX.off} - -#{@cX.cyan}@keywords:#{@cX.off} text document generation processing management latex pdf structured xml citation [your keywords here, used for example by rss feeds, and in sql searches] +#{@cX.ruby}@links:#{@cX.off} + { SiSU }http://www.jus.uio.no/sisu/ + { FSF }http://www.fsf.org -#{@cX.cyan}@abstract:#{@cX.off} [paper abstract, placed after table of contents] - -#{@cX.cyan}@comment:#{@cX.off} [...] - -#{@cX.cyan}@catalogue:#{@cX.off} #{@cX.green}loc=#{@cX.off}[Library of Congress classification]; #{@cX.green}dewey=#{@cX.off}[Dewey classification]; #{@cX.green}isbn=#{@cX.off}[ISBN]; #{@cX.green}pg=#{@cX.off}[Project Gutenberg text number] - -#{@cX.cyan}@classify_loc:#{@cX.off} [Library of Congress classification] - -#{@cX.cyan}@classify_dewey:#{@cX.off} [Dewey classification] - -#{@cX.cyan}@classify_isbn:#{@cX.off} [ISBN] - -#{@cX.cyan}@classify_pg:#{@cX.off} [Project Gutenberg text number] - -#{@cX.cyan}@prefix_a:#{@cX.off} [prefix is placed just before table of contents - not implemented] - -#{@cX.cyan}@prefix_b:#{@cX.off} or #{@cX.cyan}@prefix:#{@cX.off} [prefix is placed just after table of contents] - -#{@cX.cyan}@rcs:#{@cX.off} $Id$ [used by rcs or cvs to embed version (revision control) information into document, rcs or cvs can usefully provide a history of updates to a document ] - -#{@cX.ruby}@structure:#{@cX.off} PART; CHAPTER; SECTION; ARTICLE; none; none; -optional, document structure can be defined by words to match or regular expression (the regular expression is assumed to start at the beginning of a line of text i.e. ^) default markers :A~ to :C~ and 1~ to 6~ can be used within text instead, without this header tag, and may be used to supplement the instructions provided in this header tag if provided (@structure: is a synonym for @toc:) - -#{@cX.ruby}@level:#{@cX.off} newpage=3; breakpage=4 [paragraph level, used by latex to breakpages, the page is optional eg. in newpage] - -#{@cX.ruby}@markup:#{@cX.off} num_top=4 [various markup instructions, eg: num_top=4 headings tobe numbered, starting at heading level 4... the default is to provide 3 levels, as in 1 level 4, 1.1 level 5, 1.1.1 level 6, markup to be merged within level] - -#{@cX.ruby}@bold:#{@cX.off} [regular expression of words/phrases to be made bold] - -#{@cX.ruby}@italics:#{@cX.off} [regular expression of words/phrases to italize] - -#{@cX.ruby}@vocabulary:#{@cX.off} name of taxonomy/vocabulary/wordlist to use against document - -#{@cX.ruby}@skin:#{@cX.off} skin_doc_[name_of_desired_document_skin] - -#{@cX.ruby}@links:#{@cX.off} { SiSU }http://www.jus.uio.no/sisu/; { FSF }http://www.fsf.org - -#{@cX.ruby}@@promo:#{@cX.off} sisu, ruby, search_libre_docs, open_society [places content in right pane in html, makes use of list.yml and promo.yml, commented out sample in document sample: free_as_in_freedom.richard_stallman_crusade_for_free_software.sam_williams.sst] +#{@cX.ruby}@make:#{@cX.off} + #{@cX.cyan}:breaks:#{@cX.off} new=:B; break=1 + #{@cX.cyan}:bold:#{@cX.off} [regular expression of words/phrases to be made bold] + #{@cX.cyan}:italics:#{@cX.off} [regular expression of words/phrases to italize] + #{@cX.cyan}:headings:#{@cX.off} PART; CHAPTER; Section; Article; + #{@cX.grey}% optional, document structure can be defined by words to match or regular expression (the regular expression is assumed to start at the beginning of a line of text i.e. ^) default markers A~ to C~ and 1~ to 6~ can be used within text instead, without this header tag, and may be used to supplement the instructions provided in this header tag if provided#{@cX.off} + #{@cX.cyan}:papersize:#{@cX.off} (A4|US_letter|book_B5|book_A5|US_legal) + #{@cX.cyan}:markup:#{@cX.off} num_top=4 [various markup instructions, eg: num_top=4 headings tobe numbered, starting at heading level 4... the default is to provide 3 levels, as in 1 level 4, 1.1 level 5, 1.1.1 level 6, markup to be merged within level] + #{@cX.cyan}:promo:#{@cX.off} sisu, ruby, search_libre_docs, open_society [places content in right pane in html, makes use of list.yml and promo.yml, commented out sample in document sample: free_as_in_freedom.richard_stallman_crusade_for_free_software.sam_williams.sst] #{@cX.grey}% header ends here, NB only @title: is mandatory [this would be a comment]#{@cX.off} -#{@cX.grey}% NOTE: headings/levels below refer to 0.38 expermental markup - (a conversion script provided in sisu-examples, modify.rb makes conversion between 0.37 and 0.38 markup simple)#{@cX.off} -#{@cX.blue}:A~#{@cX.off} Top level heading [this is usually the same as the title @title: ] +#{@cX.blue}A~#{@cX.off} Top level heading [this is usually the same as the title @title: ] -#{@cX.blue}:B~#{@cX.off} Second level heading [this is a heading level divider] +#{@cX.blue}B~#{@cX.off} Second level heading [this is a heading level divider] -#{@cX.blue}:C~#{@cX.off} Third level heading [this is a heading level divider] +#{@cX.blue}C~#{@cX.off} Third level heading [this is a heading level divider] #{@cX.blue}1~#{@cX.off} Top level heading preceding substantive text of document or sub-heading 5, the heading level that would normally be marked 1. or 2. or 3. etc. in a document @@ -766,16 +756,16 @@ If you have problems check permissions (and if in home directory ownership). #{@cX.green}directory paths as currently set#{@cX.off}: output docs: #{@cX.blue}#{@env.path.webserv}#{@cX.off} cgi scripts: #{@cX.blue}#{@env.path.cgi}#{@cX.off} - processing: #{@cX.blue}#{@env.path.processing}#{@cX.off} - sisu meta markup: #{@cX.blue}#{@env.path.dal}#{@cX.off} - html tuning: #{@cX.blue}#{@env.path.tune}#{@cX.off} - latex: #{@cX.blue}#{@env.path.tex}#{@cX.off} - texinfo: #{@cX.blue}#{@env.path.texi}#{@cX.off} + processing: #{@cX.blue}#{@env.processing_path.processing}#{@cX.off} + sisu meta markup: #{@cX.blue}#{@env.processing_path.dal}#{@cX.off} + html tuning: #{@cX.blue}#{@env.processing_path.tune}#{@cX.off} + latex: #{@cX.blue}#{@env.processing_path.tex}#{@cX.off} + texinfo: #{@cX.blue}#{@env.processing_path.texi}#{@cX.off} images: source: #{@cX.blue}#{@env.path.image_source}#{@cX.off} - latex source: #{@cX.blue}#{@env.path.image_source_tex}#{@cX.off} + latex source: #{@cX.blue}#{@env.path.image_source_include}#{@cX.off} note images are also sourced from within your pwd - #{@cX.blue}#{Dir.pwd}/_sisu/image#{@cX.off} if it exists - #{@cX.grey}[ texinfo: #{@env.path.texinfo} - check duplication ]#{@cX.off} + #{@cX.grey}[ texinfo: #{@env.processing_path.texinfo} - check duplication ]#{@cX.off} #{@cX.green}resource configuraton files#{@cX.off} to change the paths specified above, are searched for in the following order: under the current SiSU markup data directory: #{@cX.blue}#{Dir.pwd}/_sisu/sisurc.yml#{@cX.off} @@ -854,11 +844,11 @@ WOK (d) #{@cX.green}processing directories#{@cX.off} sisu creates a number of processing directories, where these should be located can be modified in #{@cX.green}~/.sisu/sisurc.yml#{@cX.off} work directories include the following: - root working directory #{@cX.blue}#{@env.path.processing}#{@cX.off} - metaverse intermediate markup #{@cX.blue}#{@env.path.dal}#{@cX.off} - tune html (for special html/navigation pages) #{@cX.blue}#{@env.path.tune}#{@cX.off} - tex for latex and pdf #{@cX.blue}#{@env.path.tex}#{@cX.off} - texinfo for texinfo and info files #{@cX.blue}#{@env.path.texi}#{@cX.off} + root working directory #{@cX.blue}#{@env.processing_path.processing}#{@cX.off} + metaverse intermediate markup #{@cX.blue}#{@env.processing_path.dal}#{@cX.off} + tune html (for special html/navigation pages) #{@cX.blue}#{@env.processing_path.tune}#{@cX.off} + tex for latex and pdf #{@cX.blue}#{@env.processing_path.tex}#{@cX.off} + texinfo for texinfo and info files #{@cX.blue}#{@env.processing_path.texi}#{@cX.off} These files are usually used only for processing and removed. There is a maintenance flag to keep them. @@ -897,25 +887,25 @@ WOK end def program_found?(program) if program - rc=if SiSU_Env::Info_settings.new.program?(program) - SiSU_Env::Info_settings.new.program?(program) + rc=if SiSU_Env::InfoSettings.new.program?(program) + SiSU_Env::InfoSettings.new.program?(program) else '' end - if program =='rmagick'; program='identify' #rmagick is ruby lib uses imagemagick's identify + if program =='rmagick' then program='identify' #rmagick is ruby lib uses imagemagick's identify end - bin=if SiSU_Env::System_call.new.program_found?(program) - SiSU_Env::System_call.new.program_found?(program) + bin=if SiSU_Env::SystemCall.new.program_found?(program) + SiSU_Env::SystemCall.new.program_found?(program) else 'false' end else bin,rc='false','false' end - if program; "#{@cX.blue}#{program}#{@cX.off} bin: #{@cX.brown}#{bin}#{@cX.off} rc: #{@cX.brown}#{rc}#{@cX.off}" - else "bin: #{@cX.brown}#{bin}#{@cX.off} rc: #{@cX.brown}#{rc}#{@cX.off}" - end + (program) \ + ? ("#{@cX.blue}#{program}#{@cX.off} bin: #{@cX.brown}#{bin}#{@cX.off} rc: #{@cX.brown}#{rc}#{@cX.off}") + : ("bin: #{@cX.brown}#{bin}#{@cX.off} rc: #{@cX.brown}#{rc}#{@cX.off}") end def sisu_version - version=SiSU_Env::Info_version.instance.get_version - rb_ver=SiSU_Env::Info_version.instance.rbversion + version=SiSU_Env::InfoVersion.instance.get_version + rb_ver=SiSU_Env::InfoVersion.instance.rbversion if version[:version] SiSU_Screen::Ansi.new('-v',version[:project],version[:version],version[:date_stamp],version[:date],rb_ver).version else puts 'SiSU version information not available' @@ -923,47 +913,47 @@ WOK end def rhost @ls=leading_spaces=' '*49 - @rhost=SiSU_Env::Info_remote_host.new.rhost + @rhost=SiSU_Env::InfoRemoteHost.new.rhost def r1 - if @rhost.r1; @rhost.r1 + "\n" - else '' - end + (@rhost.r1) \ + ? @rhost.r1 + "\n" + : '' end def r2 - if @rhost.r2; @ls + @rhost.r2 + "\n" - else '' - end + (@rhost.r2) \ + ? @ls + @rhost.r2 + "\n" + : '' end def r3 - if @rhost.r3; @ls + @rhost.r3 + "\n" - else '' - end + (@rhost.r3) \ + ? @ls + @rhost.r3 + "\n" + : '' end def r4 - if @rhost.r4; @ls + @rhost.r4 + "\n" - else '' - end + (@rhost.r4) \ + ? @ls + @rhost.r4 + "\n" + : '' end def r5 - if @rhost.r5; @ls + @rhost.r5 + "\n" - else '' - end + (@rhost.r5) \ + ? @ls + @rhost.r5 + "\n" + : '' end def r6 - if @rhost.r6; @ls + @rhost.r6 + "\n" - else '' - end + (@rhost.r6) \ + ? @ls + @rhost.r6 + "\n" + : '' end def note msg='(remote settings user and host set in sisurc.yml under remote:)' - if @rhost.r1; @ls + msg - else msg - end + (@rhost.r1) \ + ? @ls + msg + : msg end self end def environment - cf_defaults=SiSU_Env::Info_processing_flag.new + cf_defaults=SiSU_Env::InfoProcessingFlag.new sisu_version x =<<WOK #{@cX.green}current and output directories#{@cX.off} @@ -992,7 +982,7 @@ WOK papersize set (LaTeX/pdf): #{@cX.blue}#{@env.papersize}#{@cX.off} (digest and papersize can be changed in sisurc.yml under default:) #{@cX.green}intermediate processing#{@cX.off} - processing directory: #{@cX.blue}#{@env.path.processing}#{@cX.off} + processing directory: #{@cX.blue}#{@env.processing_path.processing}#{@cX.off} (to keep processing output, use -M flag) #{@cX.green}programs selected for viewing output#{@cX.off} text editor: #{@cX.blue}#{@env.program.text_editor}#{@cX.off} @@ -1022,8 +1012,8 @@ WOK sisu -5 #{@cX.blue}#{cf_defaults.cf_5}#{@cX.off} (defaults may be changed in active sisurc.yml file under flag:) #{@cX.green}special powers, risky operations set:#{@cX.off} - zap (delete output directories) #{@cX.blue}#{SiSU_Env::Info_settings.new.permission?('zap')}#{@cX.off} - css copy (copy over css files) #{@cX.blue}#{SiSU_Env::Info_settings.new.permission?('css_modify')}#{@cX.off} + zap (delete output directories) #{@cX.blue}#{SiSU_Env::InfoSettings.new.permission?('zap')}#{@cX.off} + css copy (copy over css files) #{@cX.blue}#{SiSU_Env::InfoSettings.new.permission?('css_modify')}#{@cX.off} (true/false defaults may be changed in active sisurc.yml file under permissions_set:) NOTE: for HELP type 'sisu --help', 'sisu --help [help request]', 'man sisu', (or see the system or online documentation) @@ -1082,7 +1072,7 @@ The following heading or level (structuring) defaults are available (for use ins or, [0.38] - :A~ :B~ :C~ 1~ 2~ 3~ + A~ B~ C~ 1~ 2~ 3~ Heading tags take either of the forms above, ranging from 1-6 @@ -1114,11 +1104,11 @@ in the 0.38 notation this maps to: % SiSU 0.38 -:A~ Document Title +A~ Document Title -:B~ Document Subtitle whatever it is +B~ Document Subtitle whatever it is -:C~ Part +C~ Part 1~ Chapter @@ -1159,16 +1149,30 @@ sisu structure, (0.38) alternative notation, A,B,C,1,2,3 mapping to 1,2,3,4,5,6 on the positive side: (a) the A,B,C,1,2,3 alternative makes explicit an aspect of structuring documents in SiSU that is not otherwise obvious to the newcomer (though it appears more complicated, is more in your face and likely to be understood fairly quickly); (b) the substantive text follows levels 1,2,3 and it is 'nice' to do most work in those levels - WOK end def languages - puts <<WOK + lang=SiSU_i18n::Languages.new.language.table + lang.each_value do |lng| + if lng[:t] == lng[:n] + puts "#{lng[:c]}: #{lng[:t]}" + else + puts "#{lng[:c]}: #{lng[:t]} (#{lng[:n]})" + end + end + puts <<WOK + + Multi-language Document File Naming and Directory Mapping + + A list of language codes and languages that may be available for most output formats. These are for the most part ISO 639/1 and where there is a departure it follows those made by po4a, and the languages supported will be limited (at this time) to those supported by polyglossia. (SiSU markup text is stored in Unicode so some output formats are served by this, for example, html and sql had no problem with Chinese, pdfs would be a problem as this is not (yet?) suported by xetex and polyglossia. SiSU parses left to right and would have problems with right to left languages.) - Multi-language Document File Naming and Directory Mapping + If the same document exists in different language versions, a directory structure, or a filenaming convention may be followed. Using Spannish as the sample language code (es) [filename]~[language code].sst - If the same document exists in different language versions, and it is desired that the published language versions should reside in the same output directory, the following filenaming convention should be observed, using Spannish as the sample language code (es) [it is very likley the use of country codes as language codes will be changed or extended in future] [filename]~[language code].sst + The simplest now is to place each document in a sub-directory which has the language code as a name, if this convention is used it is preferable that all files are placed by language in the appropriate language sub-directory ... e.g. + ./en/filename.sst + ./es/filename.sst + Alternatively files may all be placed in the same directory with the language and named using a tilde and the language code as shown: filename~es.sst within sisurc.yml under the heading @@ -1248,6 +1252,13 @@ preformatted text #{@cX.green}}poem#{@cX.off} #{@cX.grey}----#{@cX.off} +#{@cX.green}block{#{@cX.off} + + [Text here] + +#{@cX.green}}block#{@cX.off} +#{@cX.grey}----#{@cX.off} + #{@cX.green}group{#{@cX.off} [Text here] @@ -1270,8 +1281,7 @@ WOK WOK end - def install - #% system configuration + def install #% system configuration print <<WOK #{@cX.green}Install SiSU#{@cX.off} @@ -1306,7 +1316,7 @@ WOK lib (site-ruby): #{@cX.blue}#{Config::CONFIG['rubylibdir']}/#{SiSU_lib}#{@cX.off} or #{@cX.blue}#{Config::CONFIG['sitelibdir']}/#{SiSU_lib}#{@cX.off} conf [etc]: #{@cX.blue}#{@env.path.etc}/sisu#{@cX.off} data (document samples, images, README): #{@cX.blue}#{@env.path.sample_data}#{@cX.off} - processing: #{@cX.blue}#{@env.path.processing}#{@cX.off} + processing: #{@cX.blue}#{@env.processing_path.processing}#{@cX.off} output www: #{@cX.blue}#{@env.path.output}#{@cX.off} Output files, are currently set to be produced in: @@ -1769,7 +1779,7 @@ WOK SiSU, a framework for document structuring, publishing and search - Copyright (C) 1997 - 2011 Ralph Amissah + Copyright (C) 1997 - 2012 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 @@ -1816,7 +1826,7 @@ WOK * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system -© Ralph Amissah 1997, current 2011. +Copyright (C) Ralph Amissah 1997, current 2012. All Rights Reserved. Information on these may be obtained from: diff --git a/lib/sisu/v2/html.rb b/lib/sisu/v4/html.rb index ba2afabc..132394d6 100644 --- a/lib/sisu/v2/html.rb +++ b/lib/sisu/v4/html.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,27 +57,31 @@ =end module SiSU_HTML require 'pstore' - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/html_table" # html_table.rb - require "#{SiSU_lib}/html_format" # html_format.rb + require_relative 'html_table' # html_table.rb + require_relative 'html_format' # html_format.rb include SiSU_HTML_Format - require "#{SiSU_lib}/html_segments" # html_segments.rb - include SiSU_HTML_seg - require "#{SiSU_lib}/html_scroll" # html_scroll.rb - require "#{SiSU_lib}/html_promo" # html_promo.rb - include SiSU_HTML_promo - require "#{SiSU_lib}/html_tune" # html_tune.rb + require_relative 'html_segments' # html_segments.rb + include SiSU_HTML_Seg + require_relative 'html_scroll' # html_scroll.rb + require_relative 'html_promo' # html_promo.rb + include SiSU_HTML_Promo + require_relative 'html_tune' # html_tune.rb include SiSU_HTML_Tune class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read - songsheet + begin + songsheet + ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css + end end def songsheet begin @@ -87,42 +90,42 @@ module SiSU_HTML @env=@particulars.env loc=@env.url.output_tell unless @opt.cmd =~/q/ - tool=if @opt.cmd =~/z/; "#{@env.program.web_browser} #{loc}/#{@fnb}/#{@md.fn[:index]}" - elsif @opt.cmd =~/[MVv]/; "#{@env.program.web_browser} #{loc}/#{@fnb}/#{@md.fn[:index]}" - else @opt.fns - end + tool=(@opt.cmd =~/[MVvz]/) \ + ? ("#{@env.program.web_browser} file://#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_segtoc}") + : ("[#{@opt.f_pth[:lng_is]}] #{@opt.fno}") @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'HTML',tool).green_hi_blue \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'HTML',tool).green_hi_blue : SiSU_Screen::Ansi.new(@opt.cmd,'HTML',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/#{@fnb}/#{@md.fn[:index]}").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_segtoc}").flow if @opt.cmd =~/[MV]/ end - SiSU_Env::Info_skin.new(@md).select + SiSU_Env::InfoSkin.new(@md).select data=nil - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns,@md) #Beware #FIX opt and md, both not necessary - SiSU_Env::SiSU_file.new(@md).mkdir - @tuned_file_array=SiSU_HTML::Source::Html_environment.new(@particulars).tuned_file_instructions + @tuned_file_array=SiSU_HTML::Source::HTML_Environment.new(@particulars).tuned_file_instructions data=@tuned_file_array scr_endnotes=SiSU_HTML::Source::Endnotes.new(data,@md).scroll toc=SiSU_HTML::Source::Toc.new(@md,data).songsheet - links_guide=SiSU_HTML::Source::Links_guide.new(data,@md).toc + links_guide=SiSU_HTML::Source::LinksGuide.new(data,@md).toc data=@tuned_file_array - scr_toc=SiSU_HTML::Source::Scroll_head_and_segtoc.new(@md,toc,links_guide).in_common #watch + scr_toc=SiSU_HTML::Source::ScrollHeadAndSegToc.new(@md,toc,links_guide).in_common #watch SiSU_HTML::Source::Seg.new(@md,data).songsheet data=@tuned_file_array scr=SiSU_HTML::Source::Scroll.new(@md,data,scr_endnotes).songsheet - scroll=SiSU_HTML::Source::Scroll_output.new(scr_toc,scr[:body],scr[:metadata],scr[:owner_details],scr[:tails],@md).publish + scroll=SiSU_HTML::Source::ScrollOutput.new(scr_toc,scr[:body],scr[:metadata],scr[:owner_details],scr[:tails],@md).publish SiSU_HTML::Source::Output.new(scroll,@md).scroll - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure unless @opt.cmd =~/[MV]/ #check maintenance flag - texfiles=Dir["#{@env.path.tune}/#{@opt.fns}*"] + texfiles=Dir["#{@env.processing_path.tune}/#{@opt.fns}*"] texfiles.each do |f| if FileTest.file?(f) File.unlink(f) end end end - SiSU_Env::Create_file.new(@opt.cmd,@opt.fns).param_instantiate + SiSU_Env::Clear.new(@opt.cmd,@opt.fns,@md).param_instantiate @@flag,@@scr,@@seg,@@seg_endnotes,@@seg_subtoc,@@seg_ad={},{},{},{},{},{} @@seg_total,@@tracker,@@loop_count,@@tablehead,@@number_of_cols=0,0,0,0,0 @@seg_name,@@seg_name_html,@@seg_subtoc_array,@@seg_endnotes_array,@@segtocband,@@tablefoot=Array.new(7){[]} @@ -131,60 +134,50 @@ module SiSU_HTML end end private - class Html_environment + class HTML_Environment def initialize(particulars) @particulars=particulars @md,@env=particulars.md,particulars.env - @vz=SiSU_Env::Get_init.instance.skin - @env,@css,@symlnk=particulars.env,SiSU_Style::CSS.new,SiSU_Env::Create_system_link.new #home - end - def link_images - @symlnk.images - end - def directories - my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - @path={ :root=>my_make.html_root } - title=File.basename(@md.fns,'.rb') - SiSU_Env::SiSU_file.new(@md).mkdir + @vz=SiSU_Env::GetInit.instance.skin + @env,@css=particulars.env,SiSU_Style::CSS.new end def tuned_file_instructions - @tell=SiSU_Screen::Ansi.new(@md.cmd) - @md.cmd=@md.cmd.gsub(/H/,'h') - @md.file_type='html' if @md.cmd =~/[hon]/ - directories - newfilename=%{#{@env.path.output}/#{@md.fnb}/#{@md.fn[:index]}} if @md.file_type =~/html/ + @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) + @md.opt.cmd=@md.opt.cmd.gsub(/H/,'h') + @md.file_type='html' if @md.opt.cmd =~/[hw]/ + newfilename=%{#{@md.file.output_path.html_scroll.dir}/#{@md.file.base_filename.html_segtoc}} if @md.file_type =~/html/ dal_array=@particulars.dal_array # dal file drawn here @tuned_file_array=SiSU_HTML_Tune::Tune.new(dal_array,@md).songsheet @tuned_file_array end end - class Links_guide + class LinksGuide @links_guide_toc=[] def initialize(data,md) @data,@md=data,md - @links_guide_=SiSU_Env::Create_site.new(@md.cmd).html_quick_ref? + @links_guide_=SiSU_Env::CreateSite.new(@md.opt.cmd).html_quick_ref? end def toc @links_guide_toc=[] if @links_guide_ - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) guide_type='horzontal' #values: horizontal or vertical @links_guide_toc << format_head_toc.links_guide_open(guide_type) if defined? @md.lnk \ and @md.lnk @md.lnk.each do |l| if defined? l[:say] - target=if l[:url] !~/^\.(\.)?\//; 'external' - else '_top' - end + target=(l[:url] !~/^\.(\.)?\//) \ + ? 'external' + : '_top' s_lnk_url,s_lnk_lnk=l[:url],l[:say] - txt_obj={:lnk_url =>s_lnk_url,:lnk_txt =>s_lnk_lnk,:target =>target} - lev_dob_ocn=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ lnk_url: s_lnk_url, lnk_txt: s_lnk_lnk, target: target } + lev_dob_ocn=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) @links_guide_toc << lev_dob_ocn.links_guide if s_lnk_lnk end end end - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) @links_guide_toc << format_head_toc.links_guide_close #(guide_type) @links_guide_toc else '' @@ -198,10 +191,10 @@ module SiSU_HTML end def scroll @scr_endnotes=[] - format_head_scroll=SiSU_HTML_Format::Head_scroll.new(@md) + format_head_scroll=SiSU_HTML_Format::HeadScroll.new(@md) @data.each do |dob| pg=dob.dup - unless pg.is =~/^code/ + unless pg.is ==:code if pg.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[\d*+]+ / endnote_array=[] if pg.obj=~/#{Mx[:en_a_o]}[\d*+].+?#{Mx[:en_a_c]}/m @@ -214,8 +207,8 @@ module SiSU_HTML endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d+]+(.+?)#{Mx[:en_b_c]}/m) end endnote_array.flatten.each do |note| - txt_obj={:txt =>note} - format_scroll=SiSU_HTML_Format::Format_scroll.new(@md,txt_obj) + txt_obj={ txt: note } + format_scroll=SiSU_HTML_Format::FormatScroll.new(@md,txt_obj) @scr_endnotes << format_scroll.endnote_body end end @@ -224,33 +217,33 @@ module SiSU_HTML @scr_endnotes end end - class Toc <Links_guide - @@toc={ :seg=>[],:seg_mini=>[],:scr=>[] } + class Toc <LinksGuide + @@toc={ seg: [], seg_mini: [], scr: [] } @@seg_url='' @@firstseg=nil def initialize(md=nil,data='') @data,@md=data,md - @vz=SiSU_Env::Get_init.instance.skin - @tell=SiSU_Screen::Ansi.new(@md.cmd) if @md + @vz=SiSU_Env::GetInit.instance.skin + @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) if @md end def songsheet #extracts toc for scroll & seg - SiSU_Screen::Ansi.new(@md.cmd,'Toc').txt_grey if @md.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'Toc').txt_grey if @md.opt.cmd =~/[MVv]/ toc=nil @@firstseg=nil - @@toc={ :seg=>[],:seg_mini=>[],:scr=>[] } + @@toc={ seg: [], seg_mini: [], scr: [] } @data.each do |dob| - if dob.is=='heading' \ - or dob.is=='heading_insert' + if dob.is==:heading \ + || dob.is==:heading_insert dob_toc=dob.dup - toc=if dob_toc.is =='heading' \ - or dob.is=='heading_insert' + toc=if dob_toc.is ==:heading \ + || dob.is==:heading_insert toc=case dob_toc.ln - when 1; Toc.new(@md,dob_toc).level_1 - when 2; Toc.new(@md,dob_toc).level_2 - when 3; Toc.new(@md,dob_toc).level_3 - when 4; Toc.new(@md,dob_toc).level_4 - when 5; Toc.new(@md,dob_toc).level_5 - when 6; Toc.new(@md,dob_toc).level_6 + when 1; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_1 + when 2; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_2 + when 3; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_3 + when 4; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_4 + when 5; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_5 + when 6; SiSU_HTML::Source::Toc.new(@md,dob_toc).level_6 else nil end end @@ -267,7 +260,10 @@ module SiSU_HTML @@toc[:seg] << toc[:seg] if toc[:seg] @@toc[:seg_mini] << toc[:seg_mini] if toc[:seg_mini] @@toc[:scr] << toc[:scr] if toc[:scr] - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end end @@ -297,22 +293,22 @@ WOK #not used --> def level_endnotes if @md.flag_endnotes - format_head_scroll=SiSU_HTML_Format::Head_scroll.new(@md) + format_head_scroll=SiSU_HTML_Format::HeadScroll.new(@md) @@toc[:scr] << format_head_scroll.toc_endnote end end def level_concordance - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) @@toc[:seg_mini] << format_head_toc.mini_seg_concordance end def level_metadata - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) @@toc[:scr] << format_head_toc.metadata @@toc[:seg] << format_head_toc.seg_metadata @@toc[:seg_mini] << format_head_toc.mini_seg_metadata end def level_word_index - format_head_toc=SiSU_HTML_Format::Head_toc.new(@d0c) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@d0c) @@toc[:scr] << format_head_toc.concordance @@toc[:seg] << format_head_toc.concordance @@toc[:seg_mini] << format_head_toc.mini_concordance @@ -323,16 +319,16 @@ WOK linkname,link=dob.obj.strip,dob.ocn if link \ and link !~/#/ #% keep eye on link - p_num=SiSU_HTML_Format::Paragraph_number.new(@md,link) + p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,link) end - title=if dob.obj !~/Metadata/; linkname + title=if dob.obj !~/Metadata/ then linkname else link='metadata' - %{<b><a href="#{@md.fnl[:pre]}#{link}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}">#{linkname}</a></b>} + %{<b><a href="#{link}#{@md.lang_code_insert}#{Sfx[:html]}">#{linkname}</a></b>} end toc={} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:seg]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ format_toc.lev0 @@ -354,13 +350,13 @@ WOK end else @@toc[:scr] << '<br />' - link=if dob.ln; dob.ln - else '' - end + link=(dob.ln) \ + ? dob.ln + : '' %{<b><a href="##{link}">#{linkname}</a></b>} end - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=if dob.name =~/^meta/ \ and dob.obj =~/Document Information/ format_toc.lev0 @@ -373,18 +369,18 @@ WOK linkname,ocn=dob.obj.strip,dob.ocn p_num=if ocn \ and ocn !~/#/ - SiSU_HTML_Format::Paragraph_number.new(@md,ocn) + SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) else nil end - txt_obj={:txt =>linkname} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: linkname } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev2 toc[:seg_mini]=format_toc.mini_lev2 if p_num title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev2 end toc @@ -394,18 +390,18 @@ WOK linkname,ocn=dob.obj.strip,dob.ocn p_num=if ocn \ and ocn !~/#/ - SiSU_HTML_Format::Paragraph_number.new(@md,ocn) + SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) else nil end - txt_obj={:txt =>linkname} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: linkname } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev3 toc[:seg_mini]=format_toc.mini_lev3 if p_num title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev3 end toc @@ -413,26 +409,39 @@ WOK def level_4 dob=@data linkname,ocn=dob.obj.strip,dob.ocn - p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) if ocn + p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) if ocn if dob.ln ==4 - seg_link=%{ <a href="#{@md.fnl[:pre]}#{dob.name}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top"> + seg_link=%{ <a href="#{dob.name}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top"> #{dob.obj} </a> } @@seg_url=dob.name elsif dob.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/ seg_link=dob.obj.gsub(/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/, - %{<a href="#{@md.fnl[:pre]}\\1#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" } + + %{<a href="\\1#{@md.lang_code_insert}#{Sfx[:html]}" } + %{target="_top">\\1 \\2</a> }) end - p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) if ocn - txt_obj={:txt =>seg_link} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) if ocn + @file=SiSU_Env::FileOp.new(@md) if @md + txt_obj=if seg_link=~/sisu_manifest\.html/ + man_link=if @file.output_dir_structure.by_language_code? \ + or @file.output_dir_structure.by_filetype? + seg_link.gsub(/sisu_manifest\.html/,"../../manifest/#{@file.base_filename.manifest}") + else seg_link + end + { txt: man_link } + else { txt: seg_link } + end + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc={} toc[:seg]=format_toc.lev4 toc[:seg_mini]=format_toc.mini_lev4 title=%{#{p_num.goto}#{linkname}</a>} if p_num - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj=if title=~/sisu_manifest.html/ + man_link=title.gsub(/sisu_manifest.html/,"../manifest/#{@file.base_filename.manifest}") + { txt: man_link } + else { txt: title } + end + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev4 toc #end @@ -443,17 +452,17 @@ WOK toc={} if ocn \ and ocn !~/#/ - p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{ocn}"> + p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + lnk_n_txt=%{ <a href="#{@@seg_url}#{@md.lang_code_insert}#{Sfx[:html]}##{ocn}"> #{linkname} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev5 toc[:seg_mini]=format_toc.mini_lev5 title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev5 end toc @@ -464,25 +473,25 @@ WOK toc={} if ocn \ and ocn !~/#/ - p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{ocn}"> + p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + lnk_n_txt=%{ <a href="#{@@seg_url}#{@md.lang_code_insert}#{Sfx[:html]}##{ocn}"> #{linkname} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:seg]=format_toc.lev6 toc[:seg_mini]=format_toc.mini_lev6 title=%{#{p_num.goto}#{linkname}</a>} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc[:scr]=format_toc.lev6 end toc end def level_crosslink dob=@data - if dob !~/^4~!/ - dob.gsub!(/^4~!\s+(\S+)\s+(.+)/, + dob=if dob !~/^4~!/ + dob.gsub(/^4~!\s+(\S+)\s+(.+)/, %{<table><tr><td width =\"80\"></td> <td><a href="http://\\1" target="_top"> #{@png.crosslink_ext} @@ -491,7 +500,7 @@ WOK </td></tr></table> }) else - dob.gsub!(/^4~!\s+(\S+)\s+(.+)/, + dob.gsub(/^4~!\s+(\S+)\s+(.+)/, %{<table><tr><td width ="80"> </td><td> <a href="\\1" target="_top"> @@ -503,47 +512,50 @@ WOK end end end - class Scroll_head_and_segtoc < Toc + class ScrollHeadAndSegToc < Toc def initialize(md='',toc='',links_guide_toc='') @md,@toc,@links_guide_toc=md,toc,links_guide_toc - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin + @make=SiSU_Env::ProcessingSettings.new(@md) end def in_common toc_shared=[] @segtoc=[] - SiSU_Screen::Ansi.new(@md.cmd,'Scroll & Segtoc').txt_grey if @md.cmd =~/[MVv]/ - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + SiSU_Screen::Ansi.new(@md.opt.cmd,'Scroll & Segtoc').txt_grey if @md.opt.cmd =~/[MVv]/ + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) dochead=format_head_toc.head - dochead.gsub!(/toc\.(html)/,'doc.\1') #kludge - ads=SiSU_HTML_promo::Ad.new(@md) + dochead=dochead.gsub(/toc\.(html)/,'doc.\1') #kludge + ads=SiSU_HTML_Promo::Ad.new(@md) toc_shared << dochead << ads.div.major @segtoc << format_head_toc.head << ads.div.major - toc_shared << format_head_toc.toc_head_escript if SiSU_HTML_Format::Head_toc.method_defined? :toc_head_escript - @segtoc << format_head_toc.toc_head_escript if SiSU_HTML_Format::Head_toc.method_defined? :toc_head_escript - toc_shared << format_head_toc.scroll_head_navigation_band + if @make.build.html_top_band? + toc_shared << format_head_toc.scroll_head_navigation_band + end if defined? @md.rights.all rights=format_head_toc.rights.all - rights=SiSU_HTML_Tune::Clean_html.new(rights).clean + rights=SiSU_HTML_Tune::CleanHTML.new(rights).clean end if @md.prefix_b prefix_b=format_head_toc.notes.prefix_b - prefix_b=SiSU_HTML_Tune::Clean_html.new(prefix_b).clean + prefix_b=SiSU_HTML_Tune::CleanHTML.new(prefix_b).clean + end + if @make.build.html_top_band? + @segtoc << format_head_toc.seg_head_navigation_band end - @segtoc << format_head_toc.seg_head_navigation_band toc_shared << format_head_toc.scroll_head_title_banner_open @segtoc << format_head_toc.seg_head_title_banner_open tmp_head=nil doc_title_endnote=@md.title.full.gsub(/(\*+)/,'<sup><a href="#endnotes">\1</a></sup>') tmp_head=doc_title_endnote + "\n" - txt_obj={:txt =>tmp_head} - format_txt_obj=SiSU_HTML_Format::Format_text_object.new(@md,txt_obj) + txt_obj={ txt: tmp_head } + format_txt_obj=SiSU_HTML_Format::FormatTextObject.new(@md,txt_obj) toc_shared << format_txt_obj.center_bold @segtoc << format_txt_obj.center_bold if defined? @md.creator.author creator_endnote=@md.creator.author.gsub(/(\*+)/,%{ <sup><a href="#notes">\\1</a></sup>}) tmp_head=creator_endnote + "\n" - txt_obj={:txt =>tmp_head} - format_txt_obj=SiSU_HTML_Format::Format_text_object.new(@md,txt_obj) + txt_obj={ txt: tmp_head } + format_txt_obj=SiSU_HTML_Format::FormatTextObject.new(@md,txt_obj) toc_shared << format_txt_obj.center_bold @segtoc << format_txt_obj.center_bold end @@ -563,8 +575,9 @@ WOK if defined? @md.prefix_b toc_shared << prefix_b end - #Table of Contents added/appended here - toc_shared << @toc[:scr] + scr_toc=if @make.build.toc? #Table of Contents added/appended here + toc_shared << @toc[:scr] + end @segtoc << @links_guide_toc @segtoc << @toc[:seg] if defined? @md.rights.all \ @@ -575,64 +588,88 @@ WOK #Segtoc tail added here @segtoc << "</p>\n" #bugfix sort later DEBUGNOW @segtoc << @seg_toc_band_bottom - ads=SiSU_HTML_promo::Ad.new(@md) + ads=SiSU_HTML_Promo::Ad.new(@md) @segtoc << format_head_toc.seg_navigation_tail << ads.div.close << ads.display << format_head_toc.html_close - @segtoc.flatten!.compact! - Output.new(@segtoc,@md).segtoc + @segtoc=@segtoc.flatten.compact #watch + SiSU_HTML::Source::Output.new(@segtoc,@md).segtoc @segtoc=[] @toc[:scr],@toc[:seg]=[],[] toc_shared end end - class Table < SiSU_HTML_table::Table_html + class Table < SiSU_HTML_Table::TableHTML end - class Scroll < SiSU_HTML_scroll::Scroll + class Scroll < SiSU_HTML_Scroll::Scroll end - class Scroll_output + class ScrollOutput def initialize(scr_toc,scr_body,scr_metadata,scr_owner_details,scr_tails,md) @scr_toc,@scr_body,@scr_metadata,@scr_owner_details,@scr_tails,@md=scr_toc,scr_body,scr_metadata,scr_owner_details,scr_tails,md end def publish scroll=[] - hr='<center><hr width=90% /></center>' - scroll << @scr_toc << '<div class="scroll">' << hr << @scr_body << @scr_endnotes << hr << @scr_owner_details << '</div>' << @scr_tails - scroll.flatten!.compact! + scroll << @scr_toc << '<div class="scroll">' << @scr_body << @scr_endnotes << @scr_owner_details << '</div>' << @scr_tails + scroll=scroll.flatten.compact #watch end end - class Seg < SiSU_HTML_seg::Seg + class Seg < SiSU_HTML_Seg::Seg end class Output def initialize(data='',md='') @data,@md=data,md - @my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns,@md) + @file=SiSU_Env::FileOp.new(md) + @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure end def scroll begin - @filename_html_scroll=@my_make.file_html_scroll(@md) + @filename_html_scroll=@file.write_file.html_scroll @data.each do |para| - para.strip! - para.gsub!(/<:.+?>/,'') - para.gsub!(/#{Rx[:mx_fa_clean]}/,'') + para=para.strip. + gsub(/<:.+?>/,''). + gsub(Xx[:html_relative2],@file.path_rel_links.html_scroll_2). + gsub(Xx[:html_relative1],@file.path_rel_links.html_scroll_1). + #gsub(/#{Xx[:html_relative]}/,@file.path_rel_links.html_scroll). + gsub(/#{Rx[:mx_fa_clean]}/,'') unless para =~/\A\s*\Z/ @filename_html_scroll.puts para,"\n" end end - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + @filename_html_scroll.close end end def segtoc begin - @filename_html_segtoc=@my_make.file_html_segtoc(@md) - @filename_html_index=@my_make.file_html_index(@md) + @filename_html_segtoc=@file.write_file.html_segtoc @data.each do |para| - para.strip! - para.gsub!(/<!.+?!>/,'') + para=para.strip. + gsub(/<!.+?!>/,''). + gsub(Xx[:html_relative2],@file.path_rel_links.html_seg_2). + gsub(Xx[:html_relative1],@file.path_rel_links.html_seg_1) unless para =~/\A\s*\Z/ @filename_html_segtoc.puts para,"\n" - @filename_html_index.puts para,"\n" end end - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + @filename_html_segtoc.close + pwd_set=Dir.pwd + idx_lnk=if @o_str.dump_or_redirect? + @file.base_filename.manifest + else + @file.base_filename.html_segtoc + end + mlnk=@file.base_filename.html_seg_index + Dir.chdir(@file.output_path.html_seg.dir) + FileUtils::rm_f(mlnk) + FileUtils::ln_s(idx_lnk,mlnk) + Dir.chdir(pwd_set) end end end diff --git a/lib/sisu/v2/html_format.rb b/lib/sisu/v4/html_format.rb index a59f82ac..fa9ac462 100644 --- a/lib/sisu/v2/html_format.rb +++ b/lib/sisu/v4/html_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,31 +57,26 @@ =end module SiSU_HTML_Format include SiSU_Viz - class Paragraph_number + class ParagraphNumber def initialize(md,ocn) @md,@ocn=md,ocn.to_s @ocn ||='' - vz=SiSU_Env::Get_init.instance.skin - @skin_no_ocn=if defined? vz.ocn_display_off \ - and vz.ocn_display_off==true - true - else false - end end def ocn_display - if @md.markup.inspect =~/no_ocn/ \ - or @md.mod.inspect =~/--no-ocn/ \ - or @skin_no_ocn - ocn_class='ocn_off' - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"> </label>}) - elsif @ocn.to_i==0 - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"><a name="#{@ocn}"> </a></label>}) - else + @make=SiSU_Env::ProcessingSettings.new(@md) + if @make.build.ocn? ocn_class='ocn' + if @ocn.to_i==0 + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"><a name="#{@ocn}"> </a></label>}) + else + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"><a name="#{@ocn}" href="##{@ocn}" class="lnk#{ocn_class}">\\1</a></label>}) + end + else + ocn_class='ocn_off' @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"><a name="#{@ocn}" href="##{@ocn}" class="lnk#{ocn_class}">\\1</a></label>}) + %{<label class="#{ocn_class}"> </label>}) end end def name @@ -95,23 +89,74 @@ module SiSU_HTML_Format %{<a href="##{@ocn}">} end end - class Head_information - require "#{SiSU_lib}/shared_xml" # shared_xml.rb + class HeadInformation + require_relative 'css' # css.rb + require_relative 'shared_xml' # shared_xml.rb include SiSU_Viz attr_reader :md,:rdf,:vz def initialize(md) @md=md # DublinCore 1 - title - @vz=SiSU_Env::Get_init.instance.skin - @css=SiSU_Env::CSS_stylesheet.new(md) + @vz=SiSU_Env::GetInit.instance.skin @seg_name_html=(SiSU_HTML::Source::Seg.new.seg_name_html || []) @seg_name_html_tracker=(SiSU_HTML::Source::Seg.new.seg_name_html_tracker || []) - @index='index' @metalink='#metadata' + @tocband_scroll,@tocband_segtoc=nil,nil + @stylesheet=SiSU_Style::CSS_HeadInfo.new(md).stylesheet + @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure + @index='index' + @toc="#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_segtoc}" + end + def url_path_image_sys + (@o_str.dump_or_redirect?) \ + ? './image' + : "#{Xx[:html_relative2]}_sisu/image_sys" + end + def icon + def up + 'arrow_up_red.png' + end + def next + 'arrow_next_red.png' + end + def previous + 'arrow_prev_red.png' + end + def dot_clear + 'dot_clear.png' + end + def dot_white + 'dot_white.png' + end + def dot + dot_white + end + self + end + def png_nav + def toc + %{<img border="0" width="22" height="22" src="#{url_path_image_sys}/#{icon.up}" alt="toc" />} + end + def pre + %{<img border="0" width="22" height="22" src="#{url_path_image_sys}/#{icon.previous}" alt="<< previous" />} + end + def nxt + %{<img border="0" width="22" height="22" src="#{url_path_image_sys}/#{icon.next}" alt="next >>" />} + end + def dot_toc + %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="^" />} + end + def dot_pre + %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="<" />} + end + def dot_nxt + %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt=">" />} + end + self end def doc_types #used in toc & seg_nav_band scroll=seg='' - wgt=Widget.new(@md) + wgt=SiSU_HTML_Format::Widget.new(@md) %{ <table summary="segment navigation available documents types: toc,doc,pdf,concordance" border="0" cellpadding="3" cellspacing="0"> <tr> @@ -121,7 +166,7 @@ module SiSU_HTML_Format </tr></table>} end def rdf - SiSU_XML_tags::RDF.new(md) + SiSU_XML_Tags::RDF.new(md) end def doc_type %{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" @@ -139,7 +184,7 @@ module SiSU_HTML_Format end def copyat %{#{@vz.paragraph_font_tiny}copy @ - <a href="#{@vz.url_home}" #{@vz.js_home}> + <a href="#{@vz.url_home}"> #{@vz.txt_home} </a></h1>} end @@ -148,11 +193,15 @@ module SiSU_HTML_Format </html>} end end - class Widget < Head_information + class Widget < HeadInformation def initialize(md) super(md) @md=md - @cf_defaults=SiSU_Env::Info_processing_flag.new + @cf_defaults=SiSU_Env::InfoProcessingFlag.new + @env=SiSU_Env::InfoEnv.new(md.fns) + @file=SiSU_Env::FileOp.new(md) + @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure + @make=SiSU_Env::ProcessingSettings.new(@md) end def home %{<td align="center" bgcolor=#{@vz.color_band2}> @@ -164,7 +213,7 @@ module SiSU_HTML_Format def scroll(text) if @md.fns =~ /\.(?:-|ssm\.)?sst$/ scroll=%{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:doc]}" target="_top" #{@vz.js_doc}> + <a href="#{Xx[:html_relative1]}html/#{@file.base_filename.html_scroll}" target="_top"> #{text} </a> </td> @@ -173,34 +222,46 @@ module SiSU_HTML_Format end def seg(text) %{<td align="center" bgcolor="#99CC66"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_doc}> + <a href="#{@md.file.base_filename.html_segtoc}" target="_top"> #{text} </a> </td> } end def search - env=SiSU_Env::Info_env.new(@md.fns,@md) - env.widget.search_form('sisusearch',nil,nil,true) + if @make.build.html_search_form? + env=SiSU_Env::InfoEnv.new(@md.fns,@md) + env.widget.search_form('sisusearch',nil,nil,true) + else '' + end end def manifest - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> + if @make.build.links_to_manifest? \ + and not @o_str.dump_or_redirect? + manifest_lnk=if @file.output_dir_structure.by_language_code? \ + or @file.output_dir_structure.by_filetype? + "#{Xx[:html_relative1]}manifest/#{@file.base_filename.manifest}" + else @file.base_filename.manifest + end + %{<td align="center" bgcolor=#{@vz.color_band2}> + <a href="#{manifest_lnk}" target="_top"> #{@vz.nav_txt_manifest} </a> </td>} + else '' + end end def pdf #retired 2.7.9 pdf=if @md.programs[:pdf] \ and @cf_defaults.cf_0 =~/p/ %{ <td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_p]}" target="_top" #{@vz.js_portrait}> + <a href="#{Xx[:html_relative1]}pdf/#{@file.base_filename.pdf_p}" target="_top"> #{@vz.nav_txt_pdf_portrait} </a> </td> <td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_l]}" target="_top" #{@vz.js_landscape}> + <a href="#{Xx[:html_relative1]}pdf/#{@file.base_filename.pdf_l}" target="_top"> #{@vz.nav_txt_pdf_landscape} </a> </td> @@ -208,91 +269,52 @@ module SiSU_HTML_Format else '' end end - def txt #retired 2.7.9 - txt=if @cf_defaults.cf_0 =~/[at]/ - %{ -<td valign=bottom bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:plain]}" target="_top" #{@vz.js_plaintext}> - #{@vz.nav_txt_plaintext} - </a> -</td>} - else '' - end - end - def epub #retired 2.7.9 - epub=if @cf_defaults.cf_0 =~/e/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="../epub/#{@md.fn[:epub]}" target="_top" #{@vz.js_epub}> - #{@vz.nav_txt_epub} - </a> -</td>} - else '' - end - end - def odf #retired 2.7.9 - odf=if @cf_defaults.cf_0 =~/o/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:odf]}" target="_top" #{@vz.js_odf}> - #{@vz.nav_txt_odf} - </a> -</td>} - else '' - end - end - def concordance(text) #retired 2.7.9 - if @md.concord_make \ - and @md.wc_words < 300000 #max word count for display of concordance here as would now be a large file - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a> - </td>} - else '' - end - end end class XML end - class Head_toc < Head_information + class HeadToc < HeadInformation def initialize(md) super(md) @md=md + @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure + @make=SiSU_Env::ProcessingSettings.new(@md) end def scroll_head_navigation_band - pdf=if @md.programs[:pdf] - <<WOK + if @make.build.html_top_band? + search_and_manifest=<<WOK <td align="center" width="60%"> - #{make_seg_scroll_pdf} + #{make_scroll_search_form_and_manifest_link} </td> WOK - else '' - end - %{<table summary="table of contents scroll navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> + %{<table summary="table of contents scroll navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> <tr><td width="20%"> #{@vz.banner_band} -</td>#{pdf} +</td>#{search_and_manifest} <td width="20%"> #{@vz.table_close} <p />} + else '' + end end def concordance_navigation_band(type='') - %{<table summary="concordance navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> + if @make.build.html_top_band? + %{<table summary="concordance navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> <tr><td width="20%"> #{@vz.banner_band} </td> <td width="20%" align="right"> - <a href="index.html" target="_top" alt="->"> - #{@vz.png_nav_toc} + <a href="toc.html" target="_top" alt="->"> + #{png_nav.toc} </a> #{@vz.table_close} <p />} + else '' + end end def seg_head_navigation_band(type='') - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" alt="->"> - #{@vz.png_nav_nxt} + firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top" alt="->"> + #{png_nav.nxt} </a>} if @md.firstseg =~/\S+/ %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> <tr><td width="20%"> @@ -306,42 +328,24 @@ WOK #{@vz.table_close} <p />} end - def seg_head_navigation_band_bottom(type='') #retired 2.7.9 - if type=~/pdf/ - @tocband_segtoc=make_scroll_seg_pdf - end - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" alt="->"> - #{@vz.png_nav_nxt} - </a>} if @md.firstseg =~/\S+/ - %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> -<tr><td width="20%"> - -</td> -<td width="75%" align="center"> - #{@tocband_segtoc} -</td> -<td width="5%" align="right"> - #{firstseg} -#{@vz.table_close} -<p />} - end def manifest_link(text) +# @file=SiSU_Env::FileOp.new(@md) if @md %{<font size=2> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}>#{text}</a> + <a href="#{@md.file.base_filename.manifest}" target="_top">#{text}</a> </font>} end - def concordance_link(text) #retired 2.7.9 + def concordance_link(text) if @md.concord_make %{<font size=2> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> + <a href="#{@md.file.base_filename.html_concordance}" target="_top"> #{text} </a> </font>} else '' end end - def make_seg_scroll_pdf - wgt=Widget.new(@md) + def make_scroll_search_form_and_manifest_link + wgt=SiSU_HTML_Format::Widget.new(@md) scroll=%{<td align="center" bgcolor=#{@vz.color_band2}> #{@vz.nav_txt_doc_link} </td> @@ -354,7 +358,7 @@ WOK end def make_scroll_seg_pdf manifest=scroll=seg='' - wgt=Widget.new(@md) + wgt=SiSU_HTML_Format::Widget.new(@md) seg=%{<td align="center" bgcolor=#{@vz.color_band2}> #{@vz.nav_txt_toc_link} </td> @@ -368,7 +372,7 @@ WOK end def make_concordance manifest=scroll=seg='' - wgt=Widget.new(@md) + wgt=SiSU_HTML_Format::Widget.new(@md) %{<table summary="toc scroll and segment with pdf" border="0" cellpadding="3" cellspacing="0"> <tr> <td align="center" bgcolor=#{@vz.color_band2}> @@ -377,7 +381,7 @@ WOK </tr></table>} end def head - rdf=SiSU_XML_tags::RDF.new(@md) + rdf=SiSU_XML_Tags::RDF.new(@md) %{#{doc_type} <head> <title> @@ -385,19 +389,18 @@ WOK </title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> #{rdf.metatag_html} -#{@css.html} +#{@stylesheet.css_head} </head> #{@vz.color_body} <a name="top" id="top"></a> <a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} +<a name="start" id="start"></a>} end def concordance if @md.concord_make %{#{@vz.margin_css} <h4 class="toc"> - <a href="./#{@md.fn[:concordance]}" #{@vz.js_concordance}> + <a href="./#{@md.file.base_filename.html_concordance}"> <i>Concordance</i> </a> </h4> @@ -408,12 +411,13 @@ WOK end end def links_guide_vertical_open +# @file=SiSU_Env::FileOp.new(@md) if @md url=((defined? @vz.url_hp) && @vz.url_hp =~/^https?:\/\/\S+$/ ? @vz.url_hp : @vz.url_home) %{ <div id="vertical_links"> <ul id="vertical"> <li class="refbold"> - <a href="#{url}" #{@vz.js_home}> + <a href="#{url}"> #{@vz.txt_hp} </a> </li> @@ -421,19 +425,20 @@ WOK Quick Ref.: </li> <li class="ref"> - <a href="#{@md.fn[:manifest]}" alt="Document Manifest" target="_top"> + <a href="#{@md.file.base_filename.manifest}" alt="Document Manifest" target="_top"> Manifest </a> </li> <!- quick ref -!>} end def links_guide_horizontal_open +# @file=SiSU_Env::FileOp.new(@md) if @md url=((defined? @vz.url_hp) && @vz.url_hp =~/^https?:\/\/\S+$/ ? @vz.url_hp : @vz.url_home) %{ <div id="horizontal_links"> <ul id="horizontal"> <li class="refbold"> - <a href="#{url}" #{@vz.js_home}> + <a href="#{url}"> #{@vz.txt_hp} </a> </li> @@ -441,16 +446,16 @@ WOK Quick Ref.: </li> <li class="ref"> - <a href="#{@md.fn[:manifest]}" alt="Document Manifest" target="_top"> + <a href="#{@md.file.base_filename.manifest}" alt="Document Manifest" target="_top"> Manifest </a> </li> <!- quick ref -!>} end def links_guide_open(type='horizontal') - if type=='vertical'; links_guide_vertical_open - else links_guide_horizontal_open - end + (type=='vertical') \ + ? links_guide_vertical_open + : links_guide_horizontal_open end def links_guide_close insert='' @@ -518,12 +523,15 @@ WOK #{@vz.table_close}} end def manifest #check structure - manifest=manifest_link(@vz.nav_txt_manifest) - %{#{@vz.margin_txt_3} + if not @o_str.dump_or_redirect? + manifest=manifest_link(@vz.nav_txt_manifest) + %{#{@vz.margin_txt_3} #{@vz.paragraph_font_small} #{manifest} </font> #{@vz.table_close}} + else '' + end end def concordance #check structure concord=concordance_link(@vz.nav_txt_concordance) @@ -536,16 +544,12 @@ WOK def metadata %{#{@vz.margin_css} <h4 class="toc"> - <a href="#{@metalink}" #{@vz.js_metalink}> + <a href="#{@metalink}"> <i>MetaData</i> </a> </h4> #{@vz.table_close}} end - def seg_metadata - @metalink=%{./#{@md.fn[:metadata]}} - metadata - end def seg_tail %{ <div class="main_column"> @@ -553,6 +557,11 @@ WOK <table summary="toc segment tail" bgcolor=#{@vz.color_band1}> <tr><td width="20%"> #{@vz.banner_band} +</td> +<td width="60%"> + <center> + #{@tocband_segtoc} + </center> </td></tr> </table> <p> </p> @@ -605,83 +614,85 @@ WOK } end end - class Head_seg < Head_information - def initialize(md) #(md='') + class HeadSeg < HeadInformation + def initialize(md) super(md) end - def head - rdf=SiSU_XML_tags::RDF.new(@md) - %{#{doc_type} -<head> - <title> - #{@seg_name_html[@seg_name_html_tracker]} - - #{@md.html_title} - </title> -<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> -#{rdf.metatag_html} -#{@vz.font_css_table_file} -</head> -#{@vz.color_body} -<a name="top" id="top"></a> -<a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} - end def title_banner(title,subtitle,creator) end def dot_control_pre_next + pre="#{@seg_name_html[@seg_name_html_tracker-1]}#{@md.lang_code_insert}#{Sfx[:html]}" + up=@toc + nxt="#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.lang_code_insert}#{Sfx[:html]}" + if nxt=~/sisu_manifest\.html/ + @file=SiSU_Env::FileOp.new(@md) if @md + if @file.output_dir_structure.by_language_code? \ + or @file.output_dir_structure.by_filetype? + nxt=nxt.gsub(/sisu_manifest\.html/,"../../manifest/#{@file.base_filename.manifest}") + end + end %{<table summary="segment hidden control pre and next" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> <tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-1]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_dot_pre} + <a href="#{pre}" target="_top"> + #{png_nav.dot_pre} </a> </td> <td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_dot_toc} + <a href="#{up}" target="_top"> + #{png_nav.dot_toc} </a> </td> <td align="right"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_dot_nxt} + <a href="#{nxt}" target="_top"> + #{png_nav.dot_nxt} </a> #{@vz.table_close}} end def dot_control_pre + pre="#{@seg_name_html[@seg_name_html_tracker-2]}#{@md.lang_code_insert}#{Sfx[:html]}" + up=@toc + nxt="#{@md.file.base_filename.html_segtoc}" %{<table summary="segment hidden control pre" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> <tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-2]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_dot_pre} + <a href="#{pre}" target="_top"> + #{png_nav.dot_pre} </a> </td> <td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_dot_toc} + <a href="#{up}" target="_top"> + #{png_nav.dot_toc} </a> </td> <td align="right"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_dot_nxt} + <a href="#{nxt}" target="_top"> + #{png_nav.dot_nxt} </a> #{@vz.table_close}} end def toc_nav(f_pre=false,f_nxt=false,use=1) pre=nxt='' toc=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_toc} + <a href="#{@toc}" target="_top"> + #{png_nav.toc} </a> </td>} pre=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-use]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_pre} + <a href="#{@seg_name_html[@seg_name_html_tracker-use]}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top"> + #{png_nav.pre} </a> </td>} if f_pre==true nxt=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_nxt} + <a href="#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top"> + #{png_nav.nxt} </a> </td>} if f_nxt==true + if nxt =~/sisu_manifest.html/ + @file=SiSU_Env::FileOp.new(@md) if @md + if @file.output_dir_structure.by_language_code? \ + or @file.output_dir_structure.by_filetype? + nxt=nxt.gsub(/sisu_manifest\.html/,"../../manifest/#{@file.base_filename.manifest}") + end + end %{<table summary="segment navigation pre/next" border="0" cellpadding="3" cellspacing="0"> <tr> #{pre} @@ -702,7 +713,7 @@ WOK end def manifest_link(text) %{<font size=2> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> + <a href="#{@md.file.base_filename.manifest}" target="_top"> #{text} </a> </font>} @@ -710,7 +721,7 @@ WOK def concordance_link(text) if @md.concord_make %{<font size=2> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> + <a href="#{@md.file.base_filename.html_concordance}" target="_top"> #{text} </a> </font>} @@ -734,42 +745,6 @@ WOK <tr><td valign="top"> <font size="2">} end - def heading_advert_local_1 - dir=SiSU_Env::Info_env.new(@fns) - %{ <center> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="http://#{@md.ad_url}#{Sfx[:html]}" target="_top"> - <img border="0" src="#{dir.url.images_local}/#{@md.ad_png}" alt="#{@md.ad_alt}"> - </a> - <p /> -#{@vz.table_close} -</center>} - end - def heading_advert_local_2 - dir=SiSU_Env::Info_env.new(@fns) - %{ <center> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="#{@md.ad_url}#{Sfx[:html]}" target="_top"> - <img border="0" src="#{dir.url.images_local}/#{@md.ad_png}" alt="#{@md.ad_alt}"> - </a> - <p /> -#{@vz.table_close} -</center>} - end - def heading_advert_external - dir=SiSU_Env::Info_env.new(@fns) - %{ <center> -<table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> -<tr><td align="center" bgcolor="white"> - <a href="#{@md.ad_url}#{Sfx[:html]}" target="external"> - <img border="0" src="#{dir.url.images_local}/#{@md.ad_png}" alt="#{@md.ad_alt}"> - </a> - <p /> -#{@vz.table_close} -</center>} - end def credit %{ <div class="main_column"> @@ -829,8 +804,8 @@ WOK </div> } #revisit end - def head - rdf=SiSU_XML_tags::RDF.new(@md) + def head_seg + rdf=SiSU_XML_Tags::RDF.new(@md) %{#{doc_type} <head> <title> @@ -839,17 +814,12 @@ WOK </title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> #{rdf.metatag_html} -#{@css.html} +#{@stylesheet.css_head_seg} </head> #{@vz.color_body} <a name="top" id="top"></a> <a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} - end - def toc_metadata - @metalink=%{./#{@md.fn[:meatadata]}} - toc_metadata +<a name="start" id="start"></a>} end def title_banner(title,subtitle,creator) %{ @@ -873,7 +843,7 @@ WOK } end end - class Head_scroll < Head_toc + class HeadScroll < HeadToc def initialize(md) super(md) end @@ -890,12 +860,12 @@ WOK #{@vz.table_close}} end end - class Format_text_object - @vz=SiSU_Env::Get_init.instance.skin + class FormatTextObject + @vz=SiSU_Env::GetInit.instance.skin attr_accessor :md,:t_o,:txt,:ocn,:format,:table,:link,:linkname,:paranum,:p_num,:headname,:banner,:url def initialize(md,t_o) @md,@t_o=md,t_o - if t_o.class==Hash + if t_o.is_a?(Hash) @txt =t_o[:txt] || nil @ocn =t_o[:ocn] || nil @ocn_display =t_o[:ocn_display] || nil @@ -906,24 +876,25 @@ WOK @lnk_url =t_o[:lnk_url] || nil @lnk_txt =t_o[:lnk_txt] || nil @format =t_o[:format] || nil - elsif t_o.class.inspect =~/^(?:#<)?SiSU_document_structure/ + elsif t_o.class.inspect =~/^(?:#<)?SiSU_DAL_DocumentStructure/ @dob=t_o if defined? t_o.is @named=nametags_seg(@dob) @txt=((defined? t_o.obj) ? t_o.obj : nil) @ocn=((defined? t_o.ocn) ? t_o.ocn.to_s : nil) - @headname=((t_o.is=='heading' and defined? t_o.name) ? t_o.name : nil) + @headname=((t_o.is==:heading and defined? t_o.name) ? t_o.name : nil) else - if @md.cmd =~/M/ + if @md.opt.cmd =~/M/ p t_o.class p caller end end @headnamed= (@headname ? %{<a name="h#{@headname}" id="h#{@headname}"></a>} : nil) if @txt and not @txt.empty? - @txt.gsub!(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'') + @txt=@txt.gsub(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'') end - @p_num=Paragraph_number.new(@md,@ocn) - @vz=SiSU_Env::Get_init.instance.skin + @p_num=ParagraphNumber.new(@md,@ocn) + @vz=SiSU_Env::GetInit.instance.skin + @make=SiSU_Env::ProcessingSettings.new(@md) end def nametags_scroll(dob) tags='' @@ -940,17 +911,17 @@ WOK if defined? dob.tags \ and dob.tags.length > 0 # insert tags "hypertargets" dob.tags.each do |t| - tags=tags +%{<a name="#{t}" />} + tags=tags +%{<a name="#{t}" ></a>} end end tags end def headname #check whether used - hn=if @t_o.is =='heading' \ + hn=if @t_o.is ==:heading \ and not @t_o.name.empty? #determine use - hn=if @t_o.is =='heading'; %{<a name="h#{@t_o.name}" id="h#{@t_o.name}"></a>} - else %{<a name="#{@t_o.name}" id="#{@t_o.name}"></a>} - end + hn=(@t_o.is ==:heading) \ + ? (%{<a name="h#{@t_o.name}" id="h#{@t_o.name}"></a>}) + : (%{<a name="#{@t_o.name}" id="#{@t_o.name}"></a>}) else nil end hn @@ -994,6 +965,9 @@ WOK def para para_form_css('p','norm') end + def block + para_form_css('p','block') + end def group para_form_css('p','group') end @@ -1017,22 +991,20 @@ WOK end def table @txt=if @t_o.obj !~/^<table\s/ - table=SiSU_HTML_shared::Table_html.new(@t_o) #move, make happen earlier + table=SiSU_HTML_Shared::TableHTML.new(@t_o) #move, make happen earlier @txt=table.table.obj else @txt end para_form_css('p','norm') end - def break - @txt.gsub!(/#{Mx[:br_page_new]}|#{Mx[:br_page]}/,'<hr /><br />') - @txt.gsub!(/#{Mx[:obj_ln_sep]}/,'<hr style="width:30%" /><br />') - para_form_css('p','norm') - end def format(tag,attrib) para_form_css(tag,attrib) end def heading_normal(tag,attrib) - %{ + section_break=(tag=~/h[1-4]/) \ + ? '<p><hr width=90% /></p>' + : '' + %{#{section_break} <div class="substance"> #{@p_num.ocn_display} <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name} @@ -1063,8 +1035,11 @@ WOK heading_normal('h6','norm') end def title_heading(tag,attrib) + cl=(@make.build.html_minitoc?) \ + ? 'content' + : 'content0' %{ -<div class="content"> +<div class="#{cl}"> <#{tag} class="#{attrib}"> #{@named}#{@txt} </#{tag}> @@ -1084,7 +1059,7 @@ WOK '' end def seg_heading_sub(tag,attrib) - @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + @txt=@txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') %{ <div class="substance"> #{@p_num.ocn_display} @@ -1119,15 +1094,16 @@ WOK </div>' end def gsub_body #fix - case @txt + @txt=case @txt when /^\((i+|iv|v|vi+|ix|x|xi+)\)/ - @txt.gsub!(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>') + @txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>') when /^\(?(\d|[a-z])+\)/ - @txt.gsub!(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>') + @txt.gsub(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>') when /^\s*\d{1,3}\.\s/ - @txt.gsub!(/^\s*(\d+\.)/,'<b>\1</b>') + @txt.gsub(/^\s*(\d+\.)/,'<b>\1</b>') when /^\s*[A-Z]\.\s/ - @txt.gsub!(/^\s*([A-Z]\.)/,'<b>\1</b>') + @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>') + else @txt end end def bold_para @@ -1140,8 +1116,8 @@ WOK #{@vz.table_close}} end def bold_heading - @txt.gsub!(/[1-9]~(\S+)/,'<a name="\1"></a>') - @txt.gsub!(/[1-9]~/,'') + @txt=@txt.gsub(/[1-9]~(\S+)/,'<a name="\1"></a>'). + gsub(/[1-9]~/,'') %{<p class="bold"> #{@txt} </p> @@ -1162,13 +1138,13 @@ WOK %{<p class="centerbold">#{@txt}</p>\n} end end - class Format_scroll < Format_text_object + class FormatScroll < FormatTextObject def initialize(md,txt) super(md,txt) - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end end - class Format_seg < Format_text_object + class FormatSeg < FormatTextObject def initialize(md,txt) super(md,txt) end @@ -1224,13 +1200,13 @@ WOK fn='doc' if fn.to_s.empty? #you may wish to reconsider, sends to 'doc' where no segment info %{ <p class="endnote"> - #{@endnote_part_a}#{@md.fnl[:pre]}#{fn}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}#{@endnote_part_b} + #{@endnote_part_a}#{fn}#{@md.lang_code_insert}#{Sfx[:html]}#{@endnote_part_b} </p> } end def clean(txt) - txt.gsub!(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,'') - txt.gsub!(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'') + txt=txt.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,''). + gsub(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'') txt end def subtoc_lev(tag,attrib) @@ -1243,9 +1219,9 @@ WOK note='' if txt =~/(#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})/m # had \s* at end note=$1 - note.gsub!(/[\n\s]+/m,' ') - txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') - txt.gsub!(/<a[\n\s]+name="-\d+"[\n\s]+href="#_\d+"> <sup>\d+<\/sup> /m,'') + note=note.gsub(/[\n\s]+/m,' ') + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' '). + gsub(/<a[\n\s]+name="-\d+"[\n\s]+href="#_\d+"> <sup>\d+<\/sup> /m,'') end %{<#{tag} class="#{attrib}"> <a href="##{@ocn}"><i>#{txt}</i></a> #{note} @@ -1258,7 +1234,7 @@ WOK subtoc_lev('h6','subtoc') if @txt end def heading_sub(tag,attrib) - @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + @txt=@txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') %{ <div class="substance"> #{@p_num.ocn_display} @@ -1307,7 +1283,7 @@ WOK "<center>#{@txt}</center>" end end - class Format_toc < Format_text_object + class FormatToc < FormatTextObject def initialize(md,txt) super(md,txt) end @@ -1350,7 +1326,7 @@ WOK lev('h0','toc') end def strip_endnotes(txt) - txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') txt end def mini_lev1 @@ -1398,7 +1374,7 @@ WOK } end end - class Format_str + class FormatStr def initialize(md,str) @str=str end diff --git a/lib/sisu/v2/html_minitoc.rb b/lib/sisu/v4/html_minitoc.rb index 00b6e384..5f562d19 100644 --- a/lib/sisu/v2/html_minitoc.rb +++ b/lib/sisu/v4/html_minitoc.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -8,7 +8,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -32,11 +33,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -48,7 +47,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,35 +56,36 @@ ** Description: system environment, resource control and configuration details =end - module SiSU_HTML_minitoc - require "#{SiSU_lib}/html_tune" # html_tune.rb + module SiSU_HTML_MiniToc + require_relative 'html_tune' # html_tune.rb include SiSU_HTML_Tune - class Toc_mini + class TocMini @@seg_mini=nil @@seg_url='' @@firstseg=nil def initialize(md,data) @md,@data=md,data @pat_strip_heading_name=/<a name="h?\d.*?">(.+?)<\/a>/ - @tell=SiSU_Screen::Ansi.new(@md.cmd) if @md + @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) if @md end def songsheet - SiSU_Screen::Ansi.new(@md.cmd,'Toc').txt_grey if @md.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'Toc').txt_grey if @md.opt.cmd =~/[MVv]/ toc=nil @toc=[] @data.each do |txt| - if (txt.is =='heading' or txt.is =='heading_insert') - txt.obj.gsub!(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]}).+?(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,'') #remove endnotes from toc - txt.obj.gsub!(/<a name="-\d+" href="#_\d+"> <sup>\d+<\/sup> <\/a>/,'') - txt.obj.gsub!(@pat_strip_heading_name,'\1') - txt.obj.gsub(/(.*?)<a name="(\d+)"><\/a>(.*)/,'\1') #2002w42 altered gsub! - problematic? - suspect + if txt.is ==:heading \ + || txt.is ==:heading_insert + txt.obj=txt.obj.gsub(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]}).+?(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,''). #remove endnotes from toc + gsub(/<a name="-\d+" href="#_\d+"> <sup>\d+<\/sup> <\/a>/,''). + gsub(@pat_strip_heading_name,'\1') + #gsub(/(.*?)<a name="(\d+)"><\/a>(.*)/,'\1') #2002w42 altered gsub - problematic? - suspect toc=case txt.ln - when 1; Toc_mini.new(@md,txt).level_1 - when 2; Toc_mini.new(@md,txt).level_2 - when 3; Toc_mini.new(@md,txt).level_3 - when 4; Toc_mini.new(@md,txt).level_4 - when 5; Toc_mini.new(@md,txt).level_5 - when 6; Toc_mini.new(@md,txt).level_6 + when 1; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_1 + when 2; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_2 + when 3; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_3 + when 4; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_4 + when 5; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_5 + when 6; SiSU_HTML_MiniToc::TocMini.new(@md,txt).level_6 else end @toc << toc @@ -95,31 +95,32 @@ end protected def level_concordance - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) @@seg_mini << format_head_toc.mini_seg_concordance end def level_metadata - format_head_toc=SiSU_HTML_Format::Head_toc.new(@md) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@md) @@seg_mini << format_head_toc.mini_seg_metadata end def level_word_index - format_head_toc=SiSU_HTML_Format::Head_toc.new(@d0c) + format_head_toc=SiSU_HTML_Format::HeadToc.new(@d0c) @@seg_mini << format_head_toc.mini_concordance end def level_1 txt=@data - if (txt.is =='heading' or txt.is =='heading_insert') \ - and txt.ocn !=0 - txt.obj.gsub!(@pat_strip_heading_name,'\1') + if (txt.is ==:heading \ + || txt.is ==:heading_insert) \ + && txt.ocn !=0 + txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1') end title=unless txt.obj =~/Document Information/; txt.obj else link='metadata' - %{<b><a href="#{@md.fnl[:pre]}#{link}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}">#{txt.obj}</a></b>} + %{<b><a href="#{link}#{@md.lang_code_insert}#{Sfx[:html]}">#{txt.obj}</a></b>} end toc={} - txt_obj={:txt =>title} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: title } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=if txt.name =~/^meta/ and txt.obj=~/Document Information/ format_toc.mini_tail else format_toc.mini_lev1 @@ -128,19 +129,20 @@ end def level_2 txt=@data - if (txt.is =='heading' or txt.is =='heading_insert') \ - and txt.ocn !=0 - txt.obj.gsub!(@pat_strip_heading_name,'\1') + if (txt.is ==:heading \ + || txt.is ==:heading_insert) \ + && txt.ocn !=0 + txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1') end - txt_obj={:txt =>txt.obj} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: txt.obj } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=format_toc.mini_lev2 toc_mini end def level_3 txt=@data - txt_obj={:txt =>txt.obj} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: txt.obj } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=format_toc.mini_lev3 toc_mini end @@ -148,48 +150,50 @@ txt=@data unless txt =~/~metadata/ if txt.ln ==4 - seg_link=%{ <a href="#{@md.fnl[:pre]}#{txt.name}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" target="_top"> + seg_link=%{ <a href="#{txt.name}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top"> #{txt.obj} </a> } @@seg_url=txt.name elsif txt.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/ seg_link=txt.obj.gsub(/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/, - %{<a href="#{@md.fnl[:pre]}\\2#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" } + + %{<a href="\\2#{@md.lang_code_insert}#{Sfx[:html]}" } + %{target="_top">\\1 \\2</a> }) end - txt_obj={:txt =>seg_link} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: seg_link } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=format_toc.mini_lev4 toc_mini end end def level_5 txt=@data - if (txt.is =='heading' or txt.is =='heading_insert') \ - and txt.ocn !=0 - txt.obj.gsub!(@pat_strip_heading_name,'\1') + if (txt.is ==:heading \ + || txt.is ==:heading_insert) \ + && txt.ocn !=0 + txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1') end toc={} - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{txt.ocn}"> + lnk_n_txt=%{ <a href="#{@@seg_url}#{@md.lang_code_insert}#{Sfx[:html]}##{txt.ocn}"> #{txt.obj} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=format_toc.mini_lev5 toc_mini end def level_6 txt=@data - if (txt.is =='heading' or txt.is =='heading_insert') \ - and txt.ocn !=0 - txt.obj.gsub!(@pat_strip_heading_name,'\1') + if (txt.is ==:heading \ + || txt.is ==:heading_insert) \ + && txt.ocn !=0 + txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1') end toc={} - lnk_n_txt=%{ <a href="#{@md.fnl[:pre]}#{@@seg_url}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}##{txt.ocn}"> + lnk_n_txt=%{ <a href="#{@@seg_url}#{@md.lang_code_insert}#{Sfx[:html]}##{txt.ocn}"> #{txt.obj} </a>} - txt_obj={:txt =>lnk_n_txt} - format_toc=SiSU_HTML_Format::Format_toc.new(@md,txt_obj) + txt_obj={ txt: lnk_n_txt } + format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj) toc_mini=format_toc.mini_lev6 toc_mini end diff --git a/lib/sisu/v2/html_promo.rb b/lib/sisu/v4/html_promo.rb index 290e74f2..387da244 100644 --- a/lib/sisu/v2/html_promo.rb +++ b/lib/sisu/v4/html_promo.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,41 +55,52 @@ ** Description: html advertising component, build here, mockup =end -module SiSU_HTML_promo - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_HTML_Promo + require_relative 'sysenv' # sysenv.rb include SiSU_Env class Ad def initialize(md) @md=md - @env=SiSU_Env::Info_env.new(@md.fns,@md) - @rc=SiSU_Env::Get_init.instance.yamlrc - @ad=SiSU_Env::Get_init.instance.ads - @vz=SiSU_Env::Get_init.instance.skin + @env=SiSU_Env::InfoEnv.new(@md.fns,@md) + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + @ad=SiSU_Env::GetInit.instance.ads + @vz=SiSU_Env::GetInit.instance.skin @flag=@env.widget.promo? + @make=SiSU_Env::ProcessingSettings.new(@md) end def div def major - @flag[:ad] ? '<div id="pane_major">' : '' + (@make.build.html_right_pane? \ + && @flag[:ad]) \ + ? '<div id="pane_major">' + : '' end def minor - @flag[:ad] ? '<div id="pane_minor">' : '' + (@make.build.html_right_pane? \ + && @flag[:ad]) \ + ? '<div id="pane_minor">' + : '' end def close - @flag[:ad] ? '</div>' : '' + (@make.build.html_right_pane? \ + && @flag[:ad]) \ + ? '</div>' + : '' end self end - def display #(type=nil,id=nil) + def display ads_array,promo_array=[],[] - if @flag[:ad] + if @make.build.html_right_pane? \ + && @flag[:ad] ads=if @md.promo && @md.promo.length > 0 #promo set in document promo_array=@md.promo elsif @flag[:sk] #promo set in associated skin promo_array=@vz.widget_promo elsif @flag[:rc] #promo set in rc file - promo_array=if @rc['promo'].class==String - @rc['promo'].split(/[,;]\s*/) - else @rc['promo'] + promo_array=if @rc['html']['promo'].is_a?(String) + @rc['html']['promo'].split(/[,;]\s*/) + else @rc['html']['promo'] end else advert_extract_all end @@ -150,7 +160,7 @@ module SiSU_HTML_promo elsif defined? @rc['search']['sisu']['db'] \ and @rc['search']['sisu']['db'] =~/\S+/ (@rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ - ? @prod['search']['sisu']['db'] \ + ? @prod['search']['sisu']['db'] : "#{Db[:name_prefix]}#{@prod['db']}" else nil end @@ -396,7 +406,7 @@ WOK adverts << output_form_select(type,id) else if defined? @ad[:promo][category][type][id] \ - and @ad[:promo][category][type][id].class==Array \ + and @ad[:promo][category][type][id].is_a?(Array) \ and @ad[:promo][category][type][id].length > 0 adverts << @ad[:promo][category][type][id].join("\n") end @@ -405,7 +415,7 @@ WOK end end else - SiSU_Screen::Ansi.new(@md.cmd,"category not found: #{category}").warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* category not found: #{category}").warn unless @md.opt.cmd =~/q/ end adverts.join end diff --git a/lib/sisu/v2/html_scroll.rb b/lib/sisu/v4/html_scroll.rb index bc6b4812..170285cf 100644 --- a/lib/sisu/v2/html_scroll.rb +++ b/lib/sisu/v4/html_scroll.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,22 +55,25 @@ ** Description: html scroll generation, processing =end -module SiSU_HTML_scroll - require "#{SiSU_lib}/shared_html" # shared_html.rb - require "#{SiSU_lib}/html" # html.rb - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - require "#{SiSU_lib}/html_promo" # html_promo.rb +module SiSU_HTML_Scroll + require_relative 'shared_html' # shared_html.rb + require_relative 'html' # html.rb + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'html_promo' # html_promo.rb class Scroll def initialize(md='',data='',endnotes='') @md,@data,@endnotes=md,data,endnotes - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def songsheet begin - scr=Scroll.new(@md,@data,@endnotes).markup - scr[:tails]=Scroll.new(@md).tails + scr=SiSU_HTML_Scroll::Scroll.new(@md,@data,@endnotes).markup + scr[:tails]=SiSU_HTML_Scroll::Scroll.new(@md).tails scr - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end @@ -79,15 +81,16 @@ module SiSU_HTML_scroll def markup data=@data @rcdc=false - @scr={ :body=>[],:metadata=>[],:owner_details=>[] } + @scr={ body: [], metadata: [], owner_details: [] } data.each do |dob| + dob.obj=dob.obj.gsub(/#{@md.file.output_path.html_seg.rel_image}/m,@md.file.output_path.html_scroll.rel_image) if defined? dob.name and dob.name =~/^meta/ \ and dob.obj =~/Document Information/ - dob.obj.gsub!(/(Document Information(?: \(metadata\))?)/,'\1<a name="docinfo"></a>') + dob.obj=dob.obj.gsub(/(Document Information(?: \(metadata\))?)/,'\1<a name="docinfo"></a>') end if dob.obj =~/^Metadata$/ \ and dob.lv =='B' - dob.obj.gsub!(/Metadata/,'') + dob.obj=dob.obj.gsub(/Metadata/,'') end if defined? dob.name \ and dob.name =~/^metadata/ \ @@ -95,17 +98,18 @@ module SiSU_HTML_scroll and dob.obj =~/SiSU Metadata, document information/ @rcdc=true end - dob.obj.gsub!(/href="[a-z0-9._-]+(#\S+?")/m,'href="\1') # internal document links - dob.obj.gsub!(/href="#{Xx[:segment]}/m,'href="') - dob.obj.gsub!(/(?:\s*#{Mx[:br_page]}\s*|\s*#{Mx[:br_page_new]}\s*)+/m,'<p><hr width=90% /></p>') + dob.obj=dob.obj.gsub(/href="[a-z0-9._-]+(#\S+?")/m,'href="\1'). # internal document links + gsub(/href="#{Xx[:segment]}/m,'href="'). + gsub(/(?:\s*#{Mx[:br_page]}\s*|\s*#{Mx[:br_page_new]}\s*)+/m,'<p><hr width=90% /></p>') if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]})/ - unless dob.is =~/^code/; dob.obj.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + unless dob.is ==:code + dob.obj=dob.obj.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') end if defined? dob.ocn - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,dob.ocn) + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,dob.ocn) end - sto=SiSU_HTML_Format::Format_text_object.new(@md,dob) - para_html=if dob.is=='heading' + sto=SiSU_HTML_Format::FormatTextObject.new(@md,dob) + para_html=if dob.is==:heading x=if dob.ln==1 sto.heading_body1 elsif dob.ln==2 @@ -119,16 +123,24 @@ module SiSU_HTML_scroll elsif dob.ln==6 sto.heading_body6 end - elsif dob.is=='heading_insert' + elsif dob.is==:heading_insert x=if dob.ln==1 - sto.heading_body1 + unless dob.obj.empty? + sto.heading_body1 + end elsif dob.ln==2 - sto.heading_body2 + unless dob.obj.empty? + sto.heading_body2 + end elsif dob.ln==3 - sto.heading_body3 + unless dob.obj.empty? + sto.heading_body3 + end elsif dob.ln==4 \ and dob.obj !~/^(?:Endnotes|Index|Metadata|Manifest)$/ - sto.heading_body4 + unless dob.obj.empty? + sto.heading_body4 + end elsif dob.ln==4 \ and dob.obj=='Endnotes' sto.heading_body4 @@ -136,53 +148,59 @@ module SiSU_HTML_scroll elsif dob.ln==4 \ and dob.obj=='Index' sto.heading_body4 - book_idx=SiSU_Particulars::Combined_singleton.instance.get_idx_html(@md.opt).html_idx - book_idx.each do |x| #takes book index prepared for segments and strips segment identifying info - x.gsub!(/<a href="\S+?\.html#(\d+)">(\1(?:-\d+)?)<\/a>/,'<a href="#\1">\2</a>') + book_idx=SiSU_Particulars::CombinedSingleton.instance.get_idx_html(@md.opt).html_idx + book_idx.each do |x| #takes book index prepared for segments & strips segment identifying info + x=x.gsub(/<a href="\S+?\.html#(\d+)">(\1(?:-\d+)?)<\/a>/,'<a href="#\1">\2</a>') end book_idx.join("\n") - #elsif dob.ln==4 \ - #and dob.obj=~/Meta/ - #p __LINE__ - ##and dob.obj=='Metadata' - #metadata=Metadata::Summary.new(@md).xhtml.metadata elsif dob.ln==5 - sto.heading_body5 + unless dob.obj.empty? + sto.heading_body5 + end elsif dob.ln==6 - sto.heading_body6 + unless dob.obj.empty? + sto.heading_body6 + end end - elsif dob.is=='para' + elsif dob.is==:para if dob.indent \ - and dob.indent =~/[1-9]/ - if dob.bullet_ - sto.format('li',"i#{dob.indent}") - else sto.format('p',"i#{dob.indent}") - end - else + and dob.hang \ + and dob.indent =~/[0-9]/ \ + and dob.hang =~/[0-9]/ if dob.bullet_ - sto.format('li','bullet') + if dob.indent =~/[1-9]/ + sto.format('li',"i#{dob.indent}") + else + sto.format('li','bullet') + end + elsif dob.indent == dob.hang + sto.format('p',"i#{dob.indent}") + elsif dob.indent != dob.hang + sto.format('p',"h#{dob.hang}i#{dob.indent}") else sto.para end + else sto.para end - elsif dob.is=='group' + elsif dob.is==:block + sto.block + elsif dob.is==:group sto.group - elsif dob.is=='alt' + elsif dob.is==:alt sto.alt - elsif dob.is=='verse' + elsif dob.is==:verse sto.verse - elsif dob.is=='code' + elsif dob.is==:code sto.code - elsif dob.is=='table' + elsif dob.is==:table sto.table - elsif dob.is=='break' - sto.break + elsif dob.is==:break end if dob =~/<a name="n\d+">/ \ and dob =~/^(?:\^~\d+\s|<!e[:_]\d+!>)/ # hmmm re-adjusted 200507, for alt endnote which should again be matched ^~ ... not in response to problem though dob='' end - unless @rcdc; @scr[:body] << para_html unless para_html =~/\A\s*\Z/ - else #@scr[:metadata] << dob.obj + unless @rcdc + @scr[:body] << para_html unless para_html =~/\A\s*\Z/ end end end @@ -190,8 +208,8 @@ module SiSU_HTML_scroll end def tails scr_tail=[] - format_head_scroll=SiSU_HTML_Format::Head_toc.new(@md) - ads=SiSU_HTML_promo::Ad.new(@md) + format_head_scroll=SiSU_HTML_Format::HeadToc.new(@md) + ads=SiSU_HTML_Promo::Ad.new(@md) scr_tail << format_head_scroll.scroll_tail << ads.div.close << ads.display << format_head_scroll.html_close scr_tail end diff --git a/lib/sisu/v2/html_segments.rb b/lib/sisu/v4/html_segments.rb index c1649a88..81bb08d4 100644 --- a/lib/sisu/v2/html_segments.rb +++ b/lib/sisu/v4/html_segments.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,59 +55,78 @@ ** Description: html segment generation, processing =end -module SiSU_HTML_seg - require "#{SiSU_lib}/shared_html" # shared_html.rb - require "#{SiSU_lib}/html" # html.rb - require "#{SiSU_lib}/html_promo" # html_promo.rb - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb - class Seg_output +module SiSU_HTML_Seg + require_relative 'shared_html' # shared_html.rb + require_relative 'html' # html.rb + require_relative 'html_promo' # html_promo.rb + require_relative 'shared_metadata' # shared_metadata.rb + class Output def initialize(md,outputfile,seg,minitoc,type='') @md,@output_seg_file,@seg,@minitoc,@type=md,outputfile,seg,minitoc,type - @title_banner_=SiSU_Env::Create_site.new(@md.cmd).html_seg_title_banner? + @title_banner_=SiSU_Env::CreateSite.new(@md.opt.cmd).html_seg_title_banner? + @file=SiSU_Env::FileOp.new(@md) + @make=SiSU_Env::ProcessingSettings.new(@md) + @cl=(@make.build.html_minitoc?) \ + ? 'content' + : 'content0' end def output if @seg[:title] =~/\S/ filename_seg=[] - filename_seg << @seg[:title] << @seg[:tocband_banner] + if @make.build.html_top_band? + filename_seg << @seg[:title] << @seg[:tocband_banner] + else + filename_seg << @seg[:title] + end if @type=='endnotes' @seg[:headings]=[] - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) if @title_banner_ @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) end - txt_obj={:txt =>'Endnotes',:ocn_display =>''} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: 'Endnotes', ocn_display: '' } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 - filename_seg << @seg[:heading_endnotes] << @minitoc << @seg[:headings] << %{\n<div class="content">\n} << @seg[:endnote_all] << '</div>' # << '</div>' + filename_seg << @seg[:heading_endnotes] << @minitoc << @seg[:headings] << %{\n<div class="#{@cl}">\n} << @seg[:endnote_all] << '</div>' # << '</div>' elsif @type=='idx' @seg[:headings]=[] - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) if @title_banner_ @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) end - txt_obj={:txt =>'Index',:ocn_display =>''} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: 'Index', ocn_display: '' } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 - filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="content">\n} << @seg[:idx] << '</div>' # << '</div>' + filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="#{@cl}">\n} << @seg[:idx] << '</div>' # << '</div>' elsif @type=='metadata' - metadata=Metadata::Summary.new(@md).xhtml_display.metadata + metadata=SiSU_Metadata::Summary.new(@md).xhtml_display.metadata @seg[:headings]=[] - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) if @title_banner_ @seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author) end - txt_obj={:txt =>'Metadata',:ocn_display =>''} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: 'Metadata', ocn_display: '' } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @seg[:headings] << format_seg.title_heading1 - filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="content">\n} << metadata << '</div>' # << '</div>' + filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="#{@cl}">\n} << metadata << '</div>' # << '</div>' else - filename_seg << @minitoc << @seg[:headings] << @seg[:main] << "\n</div>\n" + if @make.build.html_top_band? + filename_seg << @minitoc << @seg[:headings] << @seg[:main] << "\n</div>\n" + else + filename_seg << @minitoc << @seg[:main] << "\n</div>\n" + end end - filename_seg << @seg[:tail] << @seg[:tocband_bannerless] << @seg[:credits] - filename_seg.flatten!.compact! + filename_seg <<=if @make.build.html_top_band? + @seg[:tail] << @seg[:tocband_bannerless] << @seg[:credits] + else + @seg[:tail] << @seg[:credits] + end + filename_seg=filename_seg.flatten.compact #watch filename_seg.each do |str| unless str =~/\A\s*\Z/ - str.strip! + str=str.strip. + gsub(Xx[:html_relative2],@file.path_rel_links.html_seg_2). + gsub(Xx[:html_relative1],@file.path_rel_links.html_seg_1) @output_seg_file << str end end @@ -131,11 +149,19 @@ module SiSU_HTML_seg attr_reader :seg_name_html,:seg_name_html_tracker def initialize(md=nil,data='') @md,@data=md,data - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @seg_name_html=@@seg_name_html || nil @seg_name_html_tracker=@@tracker || nil + @env=SiSU_Env::InfoEnv.new(@md.fns) if @md + if @md + @make=SiSU_Env::ProcessingSettings.new(@md) + @cl=(@make.build.html_minitoc?) \ + ? 'content' + : 'content0' + else @cl='content' + end if @md - @title_banner_=SiSU_Env::Create_site.new(@md.cmd).html_seg_title_banner? + @title_banner_=SiSU_Env::CreateSite.new(@md.opt.cmd).html_seg_title_banner? end end def songsheet @@ -143,9 +169,12 @@ module SiSU_HTML_seg @minitoc=SiSU_HTML::Source::Toc.new(@md,@data).minitoc data=get_subtoc_endnotes(@data) data=articles(data) - Seg.new.cleanup # (((( added )))) + SiSU_HTML_Seg::Seg.new.cleanup # (((( added )))) #### (((( END )))) #### - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure @@seg_name=[] end @@ -157,14 +186,15 @@ module SiSU_HTML_seg printed_endnote_seg='n' idx_html=nil if @md.book_idx - my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - idx_html=SiSU_Particulars::Combined_singleton.instance.get_idx_html(@md.opt).html_idx + #my_make_source_file=SiSU_Env::CreateFile.new(@md.fns) + idx_html=SiSU_Particulars::CombinedSingleton.instance.get_idx_html(@md.opt).html_idx idx_html.each {|x| @@seg[:idx] << x } @@seg[:heading_idx]='' end data.each do |dob| - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==4 + if (dob.is == :heading \ + || dob.is == :heading_insert) \ + && dob.ln == 4 @@seg_name << dob.name seg_name=dob.name end @@ -172,8 +202,8 @@ module SiSU_HTML_seg @@seg_name_html=@@seg_name @@seg_total=@@seg_name.length testforartnum=@@seg_name_html - SiSU_Screen::Ansi.new(@md.cmd,@@seg_name.length).segmented if @md.cmd =~/[MVv]/ - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map #p map_nametags + SiSU_Screen::Ansi.new(@md.opt.cmd,@@seg_name.length).segmented if @md.opt.cmd =~/[MVv]/ + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags data.each do |dob| if defined? dob.obj \ and dob.obj =~/href="#{Xx[:segment]}#+\S+?"/ @@ -188,32 +218,37 @@ module SiSU_HTML_seg end end end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==4 + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==4 if dob.ocn==0 @@heading4=dob.obj else @@heading4=dob.obj end @@is4=newfile=1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==3 + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==3 @@heading3=dob.obj @@is4,@@is3=0,1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==2 + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==2 @@heading2=dob.obj @@is4,@@is3,@@is2=0,0,1 end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==1 + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==1 @@heading1=dob.obj @@is4,@@is3,@@is2,@@is1=0,0,0,1 end if (@@is1 && !@@is2 && !@@is3 && !@@is4) - if not (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==1 + if not (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==1 head1=$_ #; check end end @@ -221,38 +256,47 @@ module SiSU_HTML_seg if newfile==1 \ or dob.obj =~/^#{Mx[:br_endnotes]}|^#{Mx[:br_eof]}/ newfile=0 - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==4 + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==4 if tracking != 0 - mkdir_p(@md.dir_out) unless FileTest.directory?(@md.dir_out) #bug - added specifically for nav! not needed by regular seg, check !!! - Seg.new(@md).tail - segfilename="#{@md.dir_out}/#{@md.fnl[:pre]}#{@@seg_name_html[tracking-1]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" + dirout=SiSU_Env::InfoEnv.new(@md.fns) + dir_sisu=dirout.path.output + @file=SiSU_Env::FileOp.new(@md) + unless FileTest.directory?(@file.output_path.html_seg.dir) + FileUtils::mkdir_p(@file.output_path.html_seg.dir) if File.writable?("#{@file.output_path.base.dir}/.") + end + SiSU_HTML_Seg::Seg.new(@md).tail + segfilename="#{@file.output_path.html_seg.dir}/#{@@seg_name_html[tracking-1]}#{@md.lang_code_insert}#{Sfx[:html]}" output_seg_file=File.new(segfilename,'w') if @@seg_name_html[tracking-1] - if dob.is=='heading' \ - or @@seg_name_html[tracking-1] !~/endnotes|book_index|metadata/ - Seg_output.new(@md,output_seg_file,@@seg,@minitoc).output - elsif dob.is=='heading_insert' + minitoc=(@make.build.html_minitoc?) \ + ? @minitoc + : '' + if dob.is==:heading \ + || (@@seg_name_html[tracking-1] !~/endnotes|book_index|metadata/) + SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc).output + elsif dob.is==:heading_insert if @@seg_name_html[tracking-1]=='endnotes' - Seg_output.new(@md,output_seg_file,@@seg,@minitoc,'endnotes').output + SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'endnotes').output elsif @@seg_name_html[tracking-1]=='book_index' - Seg_output.new(@md,output_seg_file,@@seg,@minitoc,'idx').output + SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'idx').output @@seg[:idx]=[] elsif @@seg_name_html[tracking-1]=='metadata' - Seg_output.new(@md,output_seg_file,@@seg,@minitoc,'metadata').output + SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'metadata').output else puts "#{__FILE__}::#{__LINE__}" end else puts "#{__FILE__}::#{__LINE__}" end - Seg.new.reinitialise + SiSU_HTML_Seg::Seg.new.reinitialise heading_art(dob) head(dob) #keep use for last segment, eg if metadata is last segment - #if @@seg_name_html[tracking] =~/metadata/ # this is for metadata - # segfilename="#{@md.dir_out}/#{@md.fnl[:pre]}#{@@seg_name_html[tracking]}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}" - # output_seg_file=File.new(segfilename,'w') - # Seg_output.new(@md,output_seg_file,@@seg,@minitoc,'metadata').output - # Seg.new.reinitialise - #end + if @@seg_name_html[tracking] =='metadata' # this is for metadata + segfilename="#{@file.output_path.html_seg.dir}/#{@@seg_name_html[tracking]}#{@md.lang_code_insert}#{Sfx[:html]}" + output_seg_file=File.new(segfilename,'w') + SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'metadata').output + Seg.new.reinitialise + end end if tracking==0 heading_art(dob) @@ -261,11 +305,16 @@ module SiSU_HTML_seg end tracking=tracking+1 end - @@get_hash_to=dob.name if (dob.is=='heading' or dob.is=='heading_insert') and dob.ln==4 and dob.name - @@get_hash_fn=dob.name if (dob.is=='heading' or dob.is=='heading_insert') and dob.ln==4 and dob.name - if dob.obj.class==String + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==4 \ + && dob.name + @@get_hash_to=dob.name + @@get_hash_fn=dob.name + end + if dob.obj.is_a?(String) markup(dob) - elsif dob.obj.class==Array + elsif dob.obj.is_a?(Array) dob.obj.each do |pg| markup(pg) end @@ -280,24 +329,37 @@ module SiSU_HTML_seg data end def heading_art(dob) - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln.to_s =~/^[1-6]/ - if @@tracker < @@seg_total-1; @@seg[:dot_nav]=format_head_seg.dot_control_pre_next - else @@seg[:dot_nav]=format_head_seg.dot_control_pre + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) + @@seg[:dot_nav]=if (@make.build.html_navigation?) \ + && (@make.build.html_navigation_bar?) + x=if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && (dob.ln.to_s =~/^[1-6]/) + x=if @@tracker < @@seg_total-1 + format_head_seg.dot_control_pre_next + else + format_head_seg.dot_control_pre + end + else @@seg[:dot_nav] end + else @@seg[:dot_nav]='' end - ads=SiSU_HTML_promo::Ad.new(@md) - @@seg[:title]=format_head_seg.head << ads.div.major + ads=SiSU_HTML_Promo::Ad.new(@md) + @@seg[:title]=format_head_seg.head_seg << ads.div.major end def head(dob) clean=/<!.*?!>|<:.*?>/ - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) - if @@tracker < @@seg_total-1 - if @@tracker==0; @@segtocband=format_head_seg.toc_next2 #if format_head_seg.toc_next2 - else @@segtocband=format_head_seg.toc_pre_next2 #if format_head_seg.toc_pre_next2 + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) + if @make.build.html_navigation? + if @@tracker < @@seg_total-1 + @@segtocband=if @@tracker==0 + format_head_seg.toc_next2 #if format_head_seg.toc_next2 + else + format_head_seg.toc_pre_next2 #if format_head_seg.toc_pre_next2 + end + else @@segtocband=format_head_seg.toc_pre2 #if format_head_seg.toc_pre2 end - else @@segtocband=format_head_seg.toc_pre2 #if format_head_seg.toc_pre2 + else @@segtocband='' end @p_num ||= '' if @@is1==1 @@ -308,64 +370,67 @@ module SiSU_HTML_seg else '' end @@seg[:tocband_bannerless] << '<br />' << conditional_div_close << format_head_seg.navigation_band_bottom(@@segtocband,@@seg[:dot_nav]) - @@seg[:headings] << format_head_seg.seg_head_escript if SiSU_HTML_Format::Head_seg.method_defined? :seg_head_escript #debug PHP move up in text #bug if @title_banner_ @@seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author).gsub(clean,'') end - ocn=if @@heading1[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>@@heading1,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + ocn=(@@heading1[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: @@heading1, ocn_display: @p_num.ocn_display } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading1.gsub(clean,'') - @@heading1.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading1=@@heading1.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is2==1 heading2=@@heading2 - ocn=if heading2[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading2,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + ocn=(heading2[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading2, ocn_display: @p_num.ocn_display } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading2.gsub(clean,'') - @@heading2.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading2=@@heading2.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is3==1 heading3=@@heading3 - ocn=if heading3[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading3,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + ocn=(heading3[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading3, ocn_display: @p_num.ocn_display } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading3.gsub(clean,'') - @@heading3.gsub!(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') + @@heading3=@@heading3.gsub(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/a>/,'') end if @@is4==1 heading4=@@heading4 - ocn=if heading4[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]; $1 #fix - else '' - end - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,ocn) - txt_obj={:txt =>heading4,:ocn_display =>@p_num.ocn_display} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + ocn=(heading4[/.+?#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/]) \ + ? $1 + : '' + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) + txt_obj={ txt: heading4, ocn_display: @p_num.ocn_display } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) @@seg[:headings] << format_seg.title_heading4.gsub(clean,'') end @@tracker=@@tracker+1 end def markup(dob) @debug=[] - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) - if dob.is !~/meta/ - if dob.is =~/(?:heading|para)/ #extend as necessary FIX - @p_num=SiSU_HTML_Format::Paragraph_number.new(@md,dob.ocn) + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) + if dob.is !=:meta + if dob.is==:heading \ + || dob.is==:heading_insert \ + || dob.is == :para + @p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,dob.ocn) end - sto=SiSU_HTML_Format::Format_text_object.new(@md,dob) - dob_html=if dob.is =~/heading|para/ - dob_html=if (dob.is=='heading' \ - or dob.is=='heading_insert') + sto=SiSU_HTML_Format::FormatTextObject.new(@md,dob) + dob_html=if dob.is == :heading \ + || dob.is==:heading_insert \ + || dob.is==:para + dob_html=if dob.is==:heading \ + || dob.is==:heading_insert x=if dob.ln==4 sto.seg_heading4 elsif dob.ln==5 @@ -373,60 +438,74 @@ module SiSU_HTML_seg elsif dob.ln==6 sto.seg_heading6 end - elsif dob.is=='para' + elsif dob.is==:para if dob.indent \ - and dob.indent =~/[1-9]/ - if dob.bullet_ - sto.format('li',"i#{dob.indent}") - else sto.format('p',"i#{dob.indent}") - end - else + and dob.hang \ + and dob.indent =~/[0-9]/ \ + and dob.hang =~/[0-9]/ if dob.bullet_ - sto.format('li','bullet') + if dob.indent =~/[1-9]/ + sto.format('li',"i#{dob.indent}") + else + sto.format('li','bullet') + end + elsif dob.indent == dob.hang + sto.format('p',"i#{dob.indent}") + elsif dob.indent != dob.hang + sto.format('p',"h#{dob.hang}i#{dob.indent}") else sto.para end + else sto.para end end - elsif dob.is=='group' + elsif dob.is==:block + sto.block + elsif dob.is==:group sto.group - elsif dob.is=='alt' + elsif dob.is==:alt sto.alt - elsif dob.is=='verse' + elsif dob.is==:verse sto.verse - elsif dob.is=='code' + elsif dob.is==:code sto.code - elsif dob.is=='table' + elsif dob.is==:table sto.table - elsif dob.is=='break' - sto.break + elsif dob.is==:break end if @md.flag_separate_endnotes - dob.obj.gsub!(/"\s+href="#_(\d+)">/,%{" href=\"endnotes#{Sfx[:html]}#_\\1">}) #endnote- twice #removed file type + dob.obj=dob.obj.gsub(/"\s+href="#_(\d+)">/,%{" href=\"endnotes#{Sfx[:html]}#_\\1">}) #endnote- twice #removed file type end if dob.obj !~/#{@vz.margin_txt_w1}|#{@vz.margin_txt_w2}/ - if dob.is =~/heading|para/ and (not dob.ocn or dob.ocn.to_s.empty?) - format_seg=SiSU_HTML_Format::Format_seg.new(@md,dob) + if (dob.is==:heading \ + || dob.is==:heading_insert \ + || dob.is==:para) \ + && (not dob.ocn \ + || (dob.ocn.to_s.empty?)) + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,dob) end - dob.obj.gsub!(/\s*(-\{{2}~\d+|<:e[:_]\d+>).*/,'') #potentially dagerous - removes all paragraphs with <!e_!> #?? workpoint + dob.obj=dob.obj.gsub(/\s*(-\{{2}~\d+|<:e[:_]\d+>).*/,'') #potentially dagerous - removes all paragraphs with <!e_!> #?? workpoint if dob.obj =~/<a name="_\d+" href="#-\d+"> <sup>/ #endnote- note- - format_seg=SiSU_HTML_Format::Format_seg.new(@md,dob) + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,dob) dob=format_seg.no_paranum end end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==4 - @@seg[:main] << %{\n<div class="content">\n} + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==4 + @@seg[:main] << %{\n<div class="#{@cl}">\n} @@seg[:main] << dob_html - @@seg[:main] << @@seg_subtoc[@@get_hash_fn] #% insertion of sub-toc + if @make.build.segsubtoc? + @@seg[:main] << @@seg_subtoc[@@get_hash_fn] #% insertion of sub-toc + end else @@seg[:main] << dob_html #unless @@flag_alt==true end end end def tail - format_head_seg=SiSU_HTML_Format::Head_seg.new(@md) + format_head_seg=SiSU_HTML_Format::HeadSeg.new(@md) if @md.flag_auto_endnotes and @@seg_endnotes[@@get_hash_fn] - @@seg[:tail] << %{\n<div class="content">\n<div class="endnote">\n} + @@seg[:tail] << %{\n<div class="#{@cl}">\n<div class="endnote">\n} if @@seg_endnotes[@@get_hash_fn].flatten.length > 0 @@seg[:tail] << format_head_seg.endnote_mark @@seg[:tail] << @@seg_endnotes[@@get_hash_fn].flatten #endnotes deposited at end of individual segments ||@|EXTRACTION OF ENDNOTES| @@ -434,7 +513,7 @@ module SiSU_HTML_seg @@seg[:tail] << '</div>' @@seg[:tail] << '</div>' #this div closes div class content end - ads=SiSU_HTML_promo::Ad.new(@md) + ads=SiSU_HTML_Promo::Ad.new(@md) @@seg[:credits] << format_head_seg.credit << ads.div.close << ads.display << format_head_seg.html_close end def reinitialise @@ -450,18 +529,20 @@ module SiSU_HTML_seg end def get_subtoc_endnotes(data) #get endnotes & sub-table of contents subtoc data.each do |dob| - dob.obj.gsub!(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1') + dob.obj=dob.obj.gsub(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1') if @md.flag_auto_endnotes - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln.to_s =~/^[1234]/ \ + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && (dob.ln.to_s =~/^[1234]/) \ and not @@fn.to_s.empty? @@seg_endnotes[@@fn]=[] @@seg_endnotes[@@fn] << @@seg_endnotes_array @@seg_endnotes_array=[] if dob.ln==4 @@fns_previous=@md.fns if dob.ln==4 and dob.name =~/^meta/ end - if (dob.is=='heading' or dob.is=='heading_insert') \ - and dob.ln==4 #% EXTRACTION OF SUB-TOCs & SEGMENT NAME, after EXTRACTION OF ENDNOTES & SUB-TOCs + if (dob.is==:heading \ + || dob.is==:heading_insert) \ + && dob.ln==4 #% EXTRACTION OF SUB-TOCs & SEGMENT NAME, after EXTRACTION OF ENDNOTES & SUB-TOCs @@seg_subtoc[@@fn]=@@seg_subtoc_array @@seg_subtoc_array=[] if dob.name \ @@ -475,23 +556,23 @@ module SiSU_HTML_seg end end end - if dob.is=='heading' \ - and dob.ln.to_s =~/^[56]/ + if dob.is==:heading \ + && (dob.ln.to_s =~/^[56]/) case dob.ln when 5 - txt_obj={:txt =>dob.obj.strip,:ocn =>dob.ocn} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: dob.obj.strip, ocn: dob.ocn } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) subtoc=format_seg.subtoc_lev5 #keep and make available, this is the subtoc when 6 - txt_obj={:txt =>dob.obj.strip,:ocn =>dob.ocn} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: dob.obj.strip, ocn: dob.ocn } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) subtoc=format_seg.subtoc_lev6 #keep and make available, this is the subtoc end @@seg_subtoc_array << subtoc end if @md.flag_auto_endnotes - if dob.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[\d*+]+ <a name="_[\d*+]+"/ \ - and dob.is !~/^code/ # endnote- + if (dob.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[\d*+]+ <a name="_[\d*+]+"/) \ + && dob.is !=:code # endnote- endnote_array=[] if dob.obj=~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/m endnote_array << dob.obj.scan(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/m) @@ -502,15 +583,15 @@ module SiSU_HTML_seg if dob.obj=~/#{Mx[:en_b_o]}[+]\d+\s.+?#{Mx[:en_b_c]}/m endnote_array << dob.obj.scan(/#{Mx[:en_b_o]}[+]\d+\s.+?#{Mx[:en_b_c]}/m) end - endnote_array.flatten!.compact! #check compacting + endnote_array=endnote_array.flatten.compact #watch, check compacting endnote_array.each do |note| note_match=note.dup note_match_seg=note.dup e_n=note_match_seg[/(?:#{Mx[:en_a_o]}[\d*+]+|#{Mx[:en_b_o]}[*+]\d+)\s+(.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m,1] try=e_n.split(/<br \/>/) try.each do |e| - txt_obj={:txt =>e} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ txt: e } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) note_match=if e =~/#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}/ format_seg.endnote_body_indent else format_seg.endnote_body @@ -522,12 +603,12 @@ module SiSU_HTML_seg m=/(?:#{Mx[:en_a_o]}[\d*+]+|#{Mx[:en_b_o]}[*+]\d+)\s+(.+?href=")(#-[\d*+]+".+)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/mi endnote_part_a=note_match_seg[m,1] endnote_part_b=note_match_seg[m,2] - txt_obj={:endnote_part_a =>endnote_part_a,:endnote_part_b =>endnote_part_b} - format_seg=SiSU_HTML_Format::Format_seg.new(@md,txt_obj) + txt_obj={ endnote_part_a: endnote_part_a, endnote_part_b: endnote_part_b } + format_seg=SiSU_HTML_Format::FormatSeg.new(@md,txt_obj) note_match_all_seg=format_seg.endnote_seg_body(@@fn) #BUG WATCH 200408 @@seg[:endnote_all] << note_match_all_seg end - dob.obj.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + dob.obj=dob.obj.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') end end end diff --git a/lib/sisu/v2/html_table.rb b/lib/sisu/v4/html_table.rb index 4eab0219..f94199ce 100644 --- a/lib/sisu/v2/html_table.rb +++ b/lib/sisu/v4/html_table.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,10 @@ ** Description: shared html parts =end -module SiSU_HTML_table - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/xhtml_table.rb" # xhtml_table.rb - class Table_html <SiSU_XHTML_table::Table_xhtml +module SiSU_HTML_Table + require_relative 'defaults' # defaults.rb + require_relative 'xhtml_table.rb' # xhtml_table.rb + class TableHTML <SiSU_XHTML_Table::TableXHTML end end __END__ diff --git a/lib/sisu/v4/html_tune.rb b/lib/sisu/v4/html_tune.rb new file mode 100644 index 00000000..05126ede --- /dev/null +++ b/lib/sisu/v4/html_tune.rb @@ -0,0 +1,375 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: html generation, html pre-processing + +=end +require_relative 'param' +module SiSU_HTML_Tune + require_relative 'sysenv' # sysenv.rb + include SiSU_Env; include SiSU_Screen + require_relative 'html_format' # html_format.rb #watch + @@line_mode='' + @@endnote_array=[] + @@endnote_call_counter=1 + @@table_align='<table summary='' width="96%" border="0" bgcolor="white" cellpadding="0" col="3"> +<tr ...><td width="2%" align="right"> + \;</td> +<td width="94%" valign="top" align="justify">' + @@table_align_close='</td> +<td width="4%" align="right" valign="top"> +<font size="1" color="#777777"> + </font> </td></tr></table>' + @@counter,@@column,@columns=0,0,0 + class Output + def initialize(data,md) + @data,@md=data,md + @file=SiSU_Env::InfoFile.new(@md.fns) + @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX + end + def hard_output + @filename_tune=@file.write_file_processing.html_tune + data=[] + @data.each do |x| + unless x.obj.empty? + x.obj=x.obj.strip + data << x + end + end + data.each do |dob| + @filename_tune.puts dob, "\n" + end + end + def marshal + File.open(@file.marshal.html_tune,'w') {|f| Marshal.dump(@data.to_a,f)} + end + end + class CleanHTML + def initialize(html='') + @html=html + end + def clean + html=@html + str=if html.is_a?(String) + html + else html.obj + end + str=str.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/¢/u,'¢'). # ¢ + gsub(/£/u,'£'). # £ + gsub(/¥/u,'¥'). # ¥ + gsub(/§/u,'§'). # § + gsub(/©/u,'©'). # © + gsub(/ª/u,'ª'). # ª + gsub(/«/u,'«'). # « + gsub(/®/u,'®'). # ® + gsub(/°/u,'°'). # ° + gsub(/±/u,'±'). # ± + gsub(/²/u,'²'). # ² + gsub(/³/u,'³'). # ³ + gsub(/µ/u,'µ'). # µ + gsub(/¶/u,'¶'). # ¶ + gsub(/¹/u,'¹'). # ¹ + gsub(/º/u,'º'). # º + gsub(/»/u,'»'). # » + gsub(/¼/u,'¼'). # ¼ + gsub(/½/u,'½'). # ½ + gsub(/¾/u,'¾'). # ¾ + gsub(/×/u,'×'). # × + gsub(/÷/u,'÷'). # ÷ + gsub(/¿/u,'¿'). # ¿ + gsub(/À/u,'À'). # À + gsub(/Á/u,'Á'). # Á + gsub(/Â/u,'Â'). #  + gsub(/Ã/u,'Ã'). # à + gsub(/Ä/u,'Ä'). # Ä + gsub(/Å/u,'Å'). # Å + gsub(/Æ/u,'Æ'). # Æ + gsub(/Ç/u,'Ç'). # Ç + gsub(/È/u,'È'). # È + gsub(/É/u,'É'). # É + gsub(/Ê/u,'Ê'). # Ê + gsub(/Ë/u,'Ë'). # Ë + gsub(/Ì/u,'Ì'). # Ì + gsub(/Í/u,'Í'). # Í + gsub(/Î/u,'Î'). # Î + gsub(/Ï/u,'Ï'). # Ï + gsub(/Ð/u,'Ð'). # Ð + gsub(/Ñ/u,'Ñ'). # Ñ + gsub(/Ò/u,'Ò'). # Ò + gsub(/Ó/u,'Ó'). # Ó + gsub(/Ô/u,'Ô'). # Ô + gsub(/Õ/u,'Õ'). # Õ + gsub(/Ö/u,'Ö'). # Ö + gsub(/Ø/u,'Ø'). # Ø + gsub(/Ù/u,'Ù'). # Ù + gsub(/Ú/u,'Ú'). # Ú + gsub(/Û/u,'Û'). # Û + gsub(/Ü/u,'Ü'). # Ü + gsub(/Ý/u,'Ý'). # Ý + gsub(/Þ/u,'Þ'). # Þ + gsub(/ß/u,'ß'). # ß + gsub(/à/u,'à'). # à + gsub(/á/u,'á'). # á + gsub(/â/u,'â'). # â + gsub(/ã/u,'ã'). # ã + gsub(/ä/u,'ä'). # ä + gsub(/å/u,'å'). # å + gsub(/æ/u,'æ'). # æ + gsub(/ç/u,'ç'). # ç + gsub(/è/u,'è'). # è + gsub(/é/u,'é'). # é + gsub(/ê/u,'ê'). # ê + gsub(/ë/u,'ë'). # ë + gsub(/ì/u,'ì'). # ì + gsub(/í/u,'í'). # í + gsub(/î/u,'î'). # î + gsub(/ï/u,'ï'). # ï + gsub(/ð/u,'ð'). # ð + gsub(/ñ/u,'ñ'). # ñ + gsub(/ò/u,'ò'). # ò + gsub(/ó/u,'ó'). # ó + gsub(/ô/u,'ô'). # ô + gsub(/õ/u,'õ'). # õ + gsub(/ö/u,'ö'). # ö + gsub(/ø/u,'ø'). # ø + gsub(/ù/u,'ù'). # ú + gsub(/ú/u,'ú'). # û + gsub(/û/u,'û'). # ü + gsub(/ü/u,'ü'). # ý + gsub(/þ/u,'þ'). # þ + gsub(/ÿ/u,'ÿ'). # ÿ + gsub(/ý/u,'ý') + end + end + class Tune + def initialize(data,md) + @data,@md=data,md + @vz=SiSU_Env::GetInit.instance.skin + @env=SiSU_Env::InfoEnv.new(@md.fns) + @sys=SiSU_Env::SystemCall.new + @env=SiSU_Env::InfoEnv.new(@md.fns) + @brace_url=SiSU_Viz::Skin.new.url_decoration + end + def songsheet + begin + @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX + SiSU_Screen::Ansi.new(@md.opt.cmd,'Tune').txt_grey if @md.opt.cmd =~/[MVv]/ + songsheet_array(@data) + #data=songsheet_array(@data) + if @md.opt.cmd =~/M/ #Hard Output Tune Optional on/off here + data=SiSU_HTML_Tune::Output.new(@data,@md).hard_output + SiSU_HTML_Tune::Output.new(@data,@md).marshal + end + tuned=SiSU_HTML_Tune::Tune.new(@data,@md).output + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def songsheet_array(data) + data_tuned=[] + #@tuned_file=[] + data.each do |dob| + dob=angle_brackets(dob) + dob=endnotes_html(dob) + dob=url_markup(dob) + dob=markup(dob) + data_tuned << dob + end + data_tuned + end + def urls(data) + @words=[] + data.each do |word| + @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + http_=true + if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}:\S+?#{Mx[:rel_c]}/ + #http_=false + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}:(\S+?)#{Mx[:rel_c]}/.match(word).captures + u="#{Xx[:html_relative2]}/" + u + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + http_=false + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(image)/.match(word).captures + end + case m + when /\.png|\.jpg|\.gif|c=|\s\d+x\d+/ + w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ + w=%{width="#{w}"} if w + h=%{height="#{h}"} if h + c=m[/"(.+?)"/m,1] + caption=%{<br /><p class="caption">#{c}</p>} if c + png=m.scan(/\S+/)[0] + image_path=@md.file.output_path.html_seg.rel_image + #image_path=(@md.fns =~/\.-ss[tm]$/) \ + #? @env.url.images_external + #: @env.url.images_local + ins=if u \ + and u.strip !~/^image$/ + %{<a href="#{u}"><img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0"></a>#{caption}} + else %{<img src="#{image_path}/#{png}" #{w} #{h} naturalsizeflag="0" align="bottom" border="0">#{caption}} + end + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) + else + link=m[/(.+)/m] + png=m.scan(/\S+/)[0].strip + link=link.strip + u=u.gsub(/(\S+)/,"#{Xx[:segment]}#\\1") if u !~/\// unless http_ #marker: in scroll remove; in seg replace + ins=%{<a href="#{u}">#{link}</a>} + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins). + gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) + end + word + else word + end + word + end + @words=@words.join(' ') + end + def url_markup(dob) + unless dob.is==:code + if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + @word_mode=dob.obj.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)[()\[\]]*[,.;:!?'"]{0,2}|(?:#{Mx[:gl_o]}\S+?#{Mx[:gl_c]})+|[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+/mu) + words=urls(@word_mode) + dob.obj=dob.obj.gsub(/.+/m,words) + end #consider change, do a while loop + dob.obj=dob.obj.gsub(/\\copyright/i,%{<sup>©</sup>}) + if (dob.obj !~/\<:ad\s+\.\.\//) + dob.obj=dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*!\>/, + %{\n<center><a href="http:\/\/\\1" target="external"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) + else + dob.obj=dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*\>/, + %{\n<center><a href="\\1" target="_top"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) + end + dob.obj=dob.obj.gsub(/!pick/,%{<img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_choice}" alt="stellar">}). + gsub(/!new/,%{ <img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_new}" alt="new">}). + gsub(/<:h(.{1,7}?)>/,'<a href="#h\1">\1</a>'). + gsub(/<:to(\d{1,7}?)>/,'<a href="#to\1">to { \1 }</a> '). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>'). #http ftp matches escaped, no decoration + gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="mailto:\\1">\\1</a>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration + if dob.obj =~/#{Xx[:html_relative2]}\/\S+/ \ + and dob.obj !~/(\"#{Xx[:html_relative2]}\/\S+?\"|>\s*#{Xx[:html_relative2]}\/\S+<)/ + dob.obj=dob.obj.gsub(/(#{Xx[:html_relative2]}\/\S+)/,'<a href="\1">\1</a>') + end + if dob.obj =~/..\/\S+/ \ + and dob.obj !~/(\"..\/\S+?\"|>\s*..\/\S+<)/ + dob.obj=dob.obj.gsub(/\.\.(\/\S+)/,%{<a href="#{Xx[:html_relative2]}\1">\1</a>}) + end + dob.obj=dob.obj.gsub(/<a href=":/,%{<a href="#{@vz.url_site}/}). + gsub(/<a href="\.\.\//,%{<a href="#{@vz.url_site}/}). + gsub(/<a href="#{Xx[:html_relative2]}\//,%{<a href="#{@vz.url_site}/}) + else + dob.obj=dob.obj.gsub(/</m,'<').gsub(/>/m,'>') + end + dob + end + def angle_brackets(dob) + dob.obj=dob.obj.gsub(/<([a-z:\/]+)>/,"#{Dx[:lt_xml]}\\1#{Dx[:gt_xml]}") + dob + end + def endnotes_html(dob) + unless dob.is ==:code + dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, + ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- + '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched) + gsub(/(#{Mx[:en_b_o]})([*+]\d+)\s+(.+?)(#{Mx[:en_b_c]})/, + ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- + '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched) + gsub(/(#{Mx[:en_a_o]})([*+]+)\s+(.+?)(#{Mx[:en_a_c]})/, + ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- + '\1\2 <a name="_\2" href="#-\2"> <sup>\2</sup></a> \3 \4') #endnote- note- (careful may have switched) + end + dob + end + def markup(dob) + dob.obj=dob.obj.gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') + dob.obj=dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is==:table + dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd + gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'<a name="\1"></a>'). + gsub(/#{Mx[:gl_bullet]}/m,'● '). + gsub(/#{Mx[:nbsp]}/,' '). + gsub(/<(p|br)>/,'<\1 />') + dob=SiSU_HTML_Tune::CleanHTML.new(dob).clean + dob + end + def output + data=@data + @tuned_file=[] + data.each do |dob| + dob.obj=dob.obj.strip.chomp + @tuned_file << dob + end + @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove + @tuned_file + end + end +end +__END__ diff --git a/lib/sisu/v4/hub.rb b/lib/sisu/v4/hub.rb new file mode 100644 index 00000000..2e0fb92c --- /dev/null +++ b/lib/sisu/v4/hub.rb @@ -0,0 +1,713 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: SiSU information Structuring Universe, text structuring, + processing, publishing, search + +=end +module SiSU + require_relative 'constants' # constants.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + include SiSU_Screen + require_relative 'options' # options.rb + require_relative 'param' # param.rb + include SiSU_Param + require_relative 'defaults' # defaults.rb + include SiSU_Viz + require_relative 'help' # help.rb + include SiSU_Help + require 'uri' + class HubMaster + def initialize(argv) + pwd_the=Dir.pwd + begin #% select what to do + home=ENV['HOME'] + opt=SiSU_Commandline::Options.new(argv) + SiSU::Processing.new(opt).actions + rescue + cmd=(opt ? opt.cmd : '') + SiSU_Screen::Ansi.new(cmd,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + Dir.chdir(pwd_the) + end + end + end + class OptionLoopFiles + def initialize(opt) + @opt=opt + @r=Px[:lng_lst_rgx] + end + def loop_files_on_given_option + @opt.files.each_with_index do |fno,i| + @opt.fno,@opt.fns=fno,fno + @opt.f_pth=@opt.f_pths[i] + if fno !~/\.-sst$/ + @opt.pth=@opt.paths[i] + @opt.lng=@opt.lngs[i] + end + @@pwd=@opt.pth + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + Dir.chdir(@opt.f_pth[:pth]) #watch + @env=SiSU_Env::InfoEnv.new(fno) + yield + end + end + def loop_files_on_given_option_bundle + @files_bundle={} + @opt.files.each_with_index do |fno,i| + fn_base_bundle=fno.gsub(/(?:~(?:#{@r}))?\.ss[tm]$/,'') + unless @files_bundle[fn_base_bundle] + @files_bundle[fn_base_bundle]={ status: :todo } + end + end + @opt.files.each_with_index do |fno,i| + fn_base_bundle=fno.gsub(/(?:~(?:#{@r}))?\.ss[tm]$/,'') + unless @files_bundle[fn_base_bundle][:status] == :done + @files_bundle[fn_base_bundle][:status] = :done + @opt.fns=fno + @opt.fno=fno + @opt.f_pth=@opt.f_pths[i] + if fno !~/\.-sst$/ + @opt.pth=@opt.paths[i] + @opt.lng=@opt.lngs[i] + end + @@pwd=@opt.pth + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + Dir.chdir(@opt.f_pth[:pth]) #watch + @env=SiSU_Env::InfoEnv.new(fno) + yield + else next + end + end + end + def manifest_on_files_translated + r=Px[:lng_lst_rgx] + number_of_files={} + @opt.files.each_with_index do |fns,i| + fn=fns.gsub(/(?:~(?:#{@r}))?\.ss[tm]$/,'') + if number_of_files[fn].is_a?(Array) + number_of_files[fn] << i + else + number_of_files.store(fn,[i]) + end + end + files_translated_idx=[] + number_of_files.each do |x| + if x[1].length > 1 + files_translated_idx << x[1] + end + end + if files_translated_idx.flatten.length > 1 + SiSU_Screen::Ansi.new(@opt.cmd,'Manifest re-run on (currently generated) translated files',"").grey_title_hi unless @opt.act[:quiet][:set] ==:on + files_translated_idx.flatten.each do |i| + @opt.fns=@opt.files[i] + @opt.f_pth=@opt.f_pths[i] + if @opt.fns =~/\.-sst$/ + @opt.pth=Dir.pwd + @opt.lng='en' + elsif @opt.fno =~/\.txz$/ + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + else + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + end + @@pwd=@opt.pth + Dir.chdir(@opt.pth) #watch + @env=SiSU_Env::InfoEnv.new(@opt.fns) + yield + end + end + end + end + class Operations + @@n_do=0 + def initialize(opt='') + @opt=opt + @cX=SiSU_Screen::Ansi.new(@opt).cX + end + def counter + @@n_do=0 + end + def remote_put_base_site_rsync # -CR +p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(@opt).rsync_base + end + def remote_put_base_site_rsync_match # -CCRZ +p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(@opt).rsync_base_sync + end + def remote_put_base_site # -Cr +p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(@opt).scp_base + end + def remote_put_base_site_all # -CCr +p "#{__LINE__}:#{__FILE__}" if @opt.act[:maintenance][:set] ==:on + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(@opt).scp_base_all + end + def cgi # -F + require_relative 'cgi' # cgi.rb + SiSU_CGI::SearchSQL.new(@opt).read + end + def termsheet # -t + system("sisu_termsheet #{@opt.cmd} #{@opt.fns}\n") + @@n_do=@@n_do+1 + SiSU_Screen::Ansi.new(@opt.cmd,@@n_do,'Termsheet(s) processed').term_sheet_title unless @opt.act[:quiet][:set] ==:on + end + def webrick # -W + prt=SiSU_Env::InfoEnv.new(@fns).port.webrick_port + puts %{#{@cX.blue}<<#{@cX.off}#{@cX.green}Start Webrick web server on port: #{prt}#{@cX.off}#{@cX.blue}>> #{@cX.off*2} } + require_relative 'webrick' + SiSU_Webserv::WebrickStart.new + end + def not_found + puts "\n#{@cX.fuschia}FILE NOT FOUND:#{@cX.off} << #{@opt.fns} >> - requested #{@opt.cmd} processing skipped\n" + end + def convert_name_message(fns,type,i,o,rune) + %{\nIn filename: "#{@cX.fuschia}#{fns}#{@cX.off}" << #{type} >> #{@cX.fuschia}is apre 0.36 markup filename.#{@cX.off} #{@cX.brown}Please rename your file.#{@cX.off}\n\tAs of sisu-0.37, SiSU markup files with #{@cX.brown}the extensions #{i} should be re-named #{o}#{@cX.off}\n\tif you have the program called 'rename' installed, the following rune should do the trick:\n\t\t#{rune}\n\talternatively try:\n\t\tsisu --convert --36to37 #{fns}\n\trequested #{@opt.cmd} processing skipped\n} + end + def not_recognised + case @opt.fns + when /(\.s[123])$/ + type=@opt.fns.gsub(/\S+?(#{$1})/,'\1') + rune=%q{rename 's/\.s[123]$/\.sst/' *.s{1,2,3}} + puts convert_name_message(@opt.fns,type,'.s1 .s2 and .s3','.sst',rune) + when /(\.r[123])$/ + type=@opt.fns.gsub(/\S+?(#{$1})/,'\1') + rune=%q{rename 's/\.r[123]$/\.ssm/' *.r{1,2,3}} + puts convert_name_message(@opt.fns,type,'.r1 .r2 and .r3','.sst',rune) + puts %{\n\tNote also that you will need to change the names of the files called/required\n\twithin the document text to build the composite document\n\t\t.s1 .s2 .s3 should be .sst \n\t\t.si should be .ssi\n\trequested #{@opt.cmd} processing skipped\n} + when /(\.ssi)$/ + puts "\n#{@cX.fuschia}component filetype:#{@cX.off} << #{@opt.fns} >> - is not a processed filetype, (it may be used as a component of a .ssm markup file)\n\trequested #{@opt.cmd} processing skipped\n" + else + puts "\n#{@cX.fuschia}FILETYPE NOT RECOGNISED:#{@cX.off} << #{@opt.fns} >> - is not a recognized filetype,\n\trequested #{@opt.cmd} processing skipped\n" + end + end + end + class Processing + require 'fileutils' + include FileUtils + @@env=nil + attr_accessor :op + def initialize(opt) + @opt=opt + @@env=SiSU_Env::InfoEnv.new + @msg,@msgs='',nil + @tell=lambda { SiSU_Screen::Ansi.new(@opt.cmd,@msg,"#{@msgs.inspect if @msgs}") } + end + def do_loops + do_each_file_loop_options + do_loop_files_on_given_option_post + end + def do_each_file_loop_options + @opt.files.each_with_index do |fno,i| + @opt.fno=fno + @opt.fns=fno.gsub(/(?:https?|file):\/\/\S+\/(\S+)\.sst$/,'\1.-sst'). + gsub(/\.ssm$/,'.ssm.sst') + @opt.f_pth=@opt.f_pths[i] + if @opt.fns !~/\.-sst$/ + @opt.pth=@opt.f_pths[i][:pth] + @opt.lng=@opt.f_pths[i][:lng] + else + @opt.pth=Dir.pwd + @opt.lng='en' + end + unless @opt.pth.nil? + @@pwd=@opt.pth + Dir.chdir(@opt.pth) #watch + end + @env=SiSU_Env::InfoEnv.new(@opt.fns) + if @opt.act[:dal][:set]==:on #% --dal, -m + unless @opt.act[:po4a][:set]==:on # --po4a, -P + if @opt.fno =~ /\.ssm$/ + require_relative 'composite' # composite.rb #pre-processing + SiSU_Assemble::Composite.new(@opt).read + end + require_relative 'dal' # -m dal.rb + SiSU_DAL::Source.new(@opt).read + end + end + if @opt.act[:qrcode][:set]==:on #% --qrcode, -Q + require_relative 'qrcode' # -Q qrcode.rb + SiSU_QRcode::Source.new(@opt).read + end + if @opt.act[:hash_digests][:set]==:on #% --hash-digests, -N digest tree + require_relative 'digests' # -N digests.rb + SiSU_DigestView::Source.new(@opt).read + end + if @opt.act[:txt][:set]==:on #% --txt, -t -a + require_relative 'plaintext' # -t -a plaintext.rb + SiSU_Plaintext::Source.new(@opt).read + end + if @opt.act[:html][:set]==:on #% --html, -h + require_relative 'html' # -h -H html.rb + SiSU_HTML::Source.new(@opt).read + end + if @opt.act[:concordance][:set]==:on #% --concordance, -w + require_relative 'concordance' # -w concordance.rb + SiSU_Concordance::Source.new(@opt).read + end + if @opt.act[:epub][:set]==:on #% --epub, -e + require_relative 'epub' # -e epub.rb + SiSU_EPUB::Source.new(@opt).read + end + if @opt.act[:odt][:set]==:on #% --odt, -o opendocument + require_relative 'odf' # -o odf.rb + SiSU_ODF::Source.new(@opt).read + end + if @opt.act[:xhtml][:set]==:on #% --xhtml, -b xhtml + require_relative 'xhtml' # -b xhtml.rb + SiSU_XHTML::Source.new(@opt).read + end + if @opt.act[:xml_sax][:set]==:on #% --xml-sax, -x xml sax type + require_relative 'xml' # -x xml.rb + SiSU_XML_SAX::Source.new(@opt).read + end + if @opt.act[:xml_dom][:set]==:on #% --xml-dom, -X xml dom type + require_relative 'xml_dom' # -X xml_dom.rb + SiSU_XML_DOM::Source.new(@opt).read + end + if @opt.act[:pdf][:set]==:on #% --pdf, -p latex/ texpdf + require_relative 'texpdf' # -p texpdf.rb + SiSU_TeX::Source.new(@opt).read + end + if @opt.act[:manpage][:set]==:on #% --manpage, -i + require_relative 'manpage' # -i manpage.rb + SiSU_Manpage::Source.new(@opt).read + end + if @opt.act[:texinfo][:set]==:on #% --texinfo, -I + require_relative 'texinfo' # -I texinfo.rb + SiSU_TexInfo::Source.new(@opt).read + end + if @opt.act[:sqlite_discreet][:set]==:on #% --sqlite, -d DB sqlite + require_relative 'dbi_discreet' # -d dbi_discreet.rb + SiSU_DBI_Discreet::SQL.new(@opt).build + end + if @opt.act[:manifest][:set]==:on #% --manifest, -y + require_relative 'manifest' # -y manifest.rb + SiSU_Manifest::Source.new(@opt).read + end + end + end + def loop_files_on_given_option_pre_do + if @opt.act[:sisupod][:set]==:on #% --sisupod, -S make sisupod + require_relative 'sisupod_make' # -S sisupod_make.rb + begin + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Doc::Source.new(@opt).read + end + ensure + SiSU_Doc::Source.new(@opt).sisupod_tar_xz + end + end + end + def do_loop_files_on_given_option_post + if @opt.act[:share_source][:set]==:on \ + or @opt.act[:sisupod][:set]==:on \ + or @opt.act[:git][:set]==:on + begin + require_relative 'shared_sisupod_source' + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Source::SiSUpodSource.new(@opt).read + end + if @opt.act[:share_source][:set]==:on +#REDO + require_relative 'share_src' # -s share_src.rb + begin + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Markup::Source.new(@opt).read + end + end + end + if @opt.act[:sisupod][:set]==:on #% --sisupod, -S make sisupod + require_relative 'sisupod_make' # -S sisupod_make.rb + begin + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Doc::Source.new(@opt).sisupod_tar_xz + end + end + end + if @opt.act[:git][:set]==:on #% --git, -g sisu git + require_relative 'git' # -g git.rb + begin + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Git::Source.new(@opt).read + end + ensure + OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do + SiSU_Git::Source.new(@opt).git_commit + end + end + end + ensure + path_pod=@env.processing_path.processing_sisupod(@opt).paths + unless @opt.cmd =~/M/ + FileUtils::rm_rf("#{path_pod[:sisupod]}/*") if FileTest.directory?(path_pod[:sisupod]) + #FileUtils::rm_rf("#{path_pod[:fnb]}/*") if FileTest.directory?(path_pod[:fnb]) + end + end + end + if @opt.act[:po4a][:set]==:on #% --po4a, -P + require_relative 'po4a' + begin + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Po4a::Source.new(@opt).read # -P po4a.rb + end + ensure + end + end + if @opt.act[:images][:set]==:on #% --images, -j + require_relative 'shared_images' + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Images::Source.new(@opt).read # -j shared_images.rb + end + end + if @opt.cmd =~/T/ #% -T termsheet/standard form + SiSU_Help::Help.new('termsheet').help_request + @opt.files.each do |fns| + if FileTest.file?(fns) + @opt.fns=fns + case @opt.fns + when /\.(termsheet.rb)$/ + SiSU::Operations.new(@opt).termsheet + else #print "not processed --> ", fns, "\n" + end + else SiSU::Operations.new(@opt).not_found + end + end + SiSU::Operations.new.counter + end + if @opt.cmd =~/k/ #% -k temporary tests + OptionLoopFiles.new(@opt).loop_files_on_given_option do + #require_relative 'xml_scaffold' + #fix + end + end + if @opt.act[:psql][:set]==:on #% --pg, -D DB postgresql + require_relative 'dbi' + if @opt.files.length > 0 #switch test to actual commands + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_DBI::SQL.new(@opt).connect # -D -d dbi.rb + end + else + SiSU_DBI::SQL.new(@opt).connect # -D -d dbi.rb + end + end + if @opt.act[:sqlite][:set]==:on #% --sqlite, -d DB sqlite + require_relative 'dbi' + if @opt.files.length > 0 #switch test to actual commands + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_DBI::SQL.new(@opt).connect # -D -d dbi.rb + end + else + SiSU_DBI::SQL.new(@opt).connect # -D -d dbi.rb + end + end + if @opt.act[:dal][:set]==:on #% --dal, -m embedded content + # OptionLoopFiles.new(@opt).loop_files_on_given_option do + # require_relative 'embedded' + # SiSU_Embedded::Source.new(@opt).read # -m embedded.rb (image and other content) #check + # end + end + if @opt.act[:zap][:set]==:on #% --zap, -Z + # OptionLoopFiles.new(@opt).loop_files_on_given_option do + # require_relative 'zap' + # SiSU_Zap::Source.new(@opt).read # -Z zap.rb + # end + end + if @opt.act[:sisupod][:set]==:on #% --sisupod, -S make sisupod + # OptionLoopFiles.new(@opt).loop_files_on_given_option do + # require_relative 'sisupod_make' + # SiSU_Doc::Source.new(@opt).read # -S sisupod_make.rb + # end + end + if @opt.act[:manifest][:set]==:on #% --manifest, -y + require_relative 'manifest' + OptionLoopFiles.new(@opt).manifest_on_files_translated do + SiSU_Manifest::Source.new(@opt).read # -y manifest.rb + end + end + if @opt.act[:sitemap][:set]==:on #% --sitemap, -Y + require_relative 'sitemaps' + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Sitemaps::Source.new(@opt).read # -Y sitemaps.rb + end + end + if @opt.act[:harvest][:set] !=:on + if @opt.act[:scp][:set]==:on #% -r copy to remote server + require_relative 'remote' # -r remote.rb + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Remote::Put.new(@opt).scp + end + end + if @opt.act[:rsync][:set]==:on #% -R copy to remote server + require_relative 'remote' # -R remote.rb + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Remote::Put.new(@opt).rsync + end + end + else + end + if @opt.act[:urls_selected][:set]==:on #% --sitemap, -Y + require_relative 'urls' + OptionLoopFiles.new(@opt).loop_files_on_given_option do + SiSU_Urls::Source.new(@opt).read #% -u -v -V -M + end + end + end + def do_initialization + @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX + flag=SiSU_Env::InfoProcessingFlag.new + if @opt.act[:version_info][:set]==:on #% version information + SiSU_Help::Help.new('env',@opt).sisu_version + end + if @opt.act[:license][:set]==:on #% license information + SiSU_Help::Help.new('license',@opt).help_request + end + if @opt.act[:dal][:set]==:on \ + or @opt.act[:maintenance][:set]==:on #% --maintenance, -m for -C + path={} + path[:css]=@@env.path.output + '/_sisu/css' + path[:xml]=@@env.path.output + '/_sisu/xml' + path[:xsd]=path[:xml] + '/xsd' + path[:xsd]=path[:xml] + '/rnc' + path[:xsd]=path[:xml] + '/rng' + re_p3=/(sisupod(?:\.txz)?|\S+?\.ss[mt]\.txz|[^\/]+?\.ssp)$/ + unless @opt.files.join(',') =~ re_p3 #do not mix pods with source markup files in command line + # unless ( FileTest.directory?(path[:css]) \ + # and FileTest.directory?(path[:xsd]) ) + # @opt.cmd=@opt.cmd +='C' unless @opt.cmd =~/C/ #FIX + # end + if @opt.act[:maintenance][:set] ==:on + $VERBOSE=false #debug $VERBOSE=true + end + end + re_p2=/(sisupod(?:\.zip)?|\S+?\.ss[mt]\.zip)$/ + unless @opt.files.join(',') =~ re_p2 #do not mix pods with source markup files in command line + # unless ( FileTest.directory?(path[:css]) \ + # and FileTest.directory?(path[:xsd]) ) + # @opt.cmd=@opt.cmd +='C' unless @opt.cmd =~/C/ #FIX + # end + if @opt.act[:maintenance][:set] ==:on + $VERBOSE=false #debug $VERBOSE=true + end + end + end + if @opt.act[:site_init][:set]==:on #% --init-site, -C initialize/configure + require_relative 'conf' #% --init-site, -C initialize/configure + SiSU_Initialize::Source.new(@opt).read + if @opt.act[:rsync][:set]==:on + if @opt.mod.inspect =~/--init(?:ialize)?=site/ \ + and @opt.cmd =~/RZ/ + SiSU::Operations.new(@opt).remote_put_base_site_rsync_match + else SiSU::Operations.new(@opt).remote_put_base_site_rsync + end + elsif @opt.act[:scp][:set]==:on + if @opt.mod.inspect =~/--init(?:ialize)?=site/ \ + and @opt.cmd =~/CCr/ + SiSU::Operations.new(@opt).remote_put_base_site_all + else SiSU::Operations.new(@opt).remote_put_base_site + end + end + end + if @opt.act[:sample_search_form][:set]==:on #% --sample-search-form, -F cgi sample search form + SiSU::Operations.new(@opt).cgi + end + if @opt.act[:webrick][:set]==:on #% --webrick, -W webrick + SiSU::Operations.new(@opt).webrick + end + if @opt.act[:zap][:set]==:on #% --zap -Z wipe previous output clean DUPLICATE + #require_relative 'zap' + #SiSU_Zap::Source.new(@opt).read # -Z zap.rb + end + if @opt.act[:dal][:set]==:on + @retry_count= -1 + begin + path_image='./_sisu/processing/external_document/image' + path_skin='./_sisu/processing/external_document/skin/doc' + @get_s,@get_p,@get_pl=[],[],[] + re_s=/(\S+?\.-sst)$/ + re_p3=/((?:https?|file):\/\/\S+?(?:\/\S+?\.ss[mt]\.txz|sisupod(?:\.txz)?|\.ssp))/ + re_pl3=/^(\/\S+?\.ss[mt]\.txz)/ + @opt.files.each do |fns| + if fns =~re_s + @get_s << @opt.f_pths[0][:url] + end + if fns =~re_p3 + @get_p << re_p3.match(fns)[1] if re_p3 + end + if fns =~re_pl3 + @get_pl << re_pl3.match(fns)[1] if re_p3 + end + end + if @get_s.length > 0 #% remote markup file .sst + require_relative 'remote' # remote.rb + SiSU_Remote::Get.new(@opt,@get_s).fns + SiSU::Operations.new.counter + end + if @get_p.length > 0 #% remote sisupod + require_relative 'remote' # remote.rb + SiSU_Remote::Get.new(@opt,@get_p).sisupod + end + rescue + SiSU_Errors::InfoError.new($!,$@,@opt,@fns).error do + __LINE__.to_s + ':' + __FILE__ + end + @retry_count +=1 + retry unless @retry_count > 1 + ensure + end + end + if @opt.act[:site_init][:set]==:on #% -C + require_relative 'conf' # -s conf.rb + SiSU_Initialize::Source.new(@opt).read + end + end + def actions + if @opt.act[:profile][:set]==:on + require 'profile' + end + if @opt.act[:harvest][:set]==:on + require_relative 'harvest' # harvest.rb + SiSU_Harvest::Source.new(@opt).read # -h -H html.rb + elsif @opt.mod.inspect =~/--convert|--to|--from/ + require_relative 'sst_convert_markup' # sst_convert_markup.rb + elsif @opt.cmd =~/([abCcDdeFGgHhIjikLMmNnoPpQqRrSsTtUuVvWwXxYyZ_0-9])/ \ + and @opt.cmd =~/^-/ \ + and @opt.mod.inspect !~/--(?:sitemaps|query|identify)/ \ + or @opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/ + do_initialization + do_loops + @msg,@msgs="\tsisu -W [to start ruby web-server on output directory]\n",nil unless @opt.act[:quiet][:set] ==:on + @tell.call.print_brown if @opt.cmd =~/[uUvVM]/ unless @opt.files.join.empty? + if defined? @@env.processing_path.processing \ + and @@env.user \ + and FileTest.directory?(@@env.processing_path.processing) \ + and @@env.processing_path.processing =~/#{@@env.user}$/ #clean temporary processing directory of content as is located in public area + FileUtils::cd(@@env.processing_path.processing_base_tmp) do + FileUtils::rm_rf(@@env.user) unless @opt.act[:maintenance][:set] ==:on + end + end + elsif @opt.mod.inspect =~/--query/ + require_relative 'sst_identify_markup' # sst_identify_markup.rb + puts SiSU_Markup::MarkupHistory.new(@opt).query + elsif @opt.mod.inspect =~/--identify/ + require_relative 'sst_identify_markup' # sst_identify_markup.rb + markup_version=SiSU_Markup::MarkupIdentify.new(@opt).markup_version? + elsif @opt.mod.inspect =~/--about/ #% help instructions + if @opt.mod.inspect =~/--about/ \ + and not @opt.what.empty? + SiSU_Help::Help.new(@opt.what,'color_off').help_request + else + SiSU_Help::Help.new('list','color_off').help_request + end + elsif @opt.mod.inspect =~/--sitemaps/ #% sitemaps + require_relative 'sitemaps' # sitemaps.rb + SiSU_Sitemaps::Source.new(@opt).read + if @opt.act[:rsync][:set]==:on + require_relative 'remote' # remote.rb + SiSU_Remote::Put.new(@opt).rsync_sitemaps + end + else #% help instructions + unless @opt.mod.inspect =~/--convert|--to|--from|--harvest/ + if @opt.mod.inspect =~/--help/ \ + and not @opt.what.empty? + SiSU_Help::Help.new(@opt.what).help_request + elsif @opt.mod.inspect =~/--help/ + SiSU_Help::Help.new('list').help_request + else + SiSU_Help::Help.new('env',@opt).sisu_version + tell=SiSU_Screen::Ansi.new(''," for HELP type:\n\tsisu --help [help request]\n\tman sisu\n or see the system or online documentation on SiSU:\n #{Config::CONFIG['datadir']}/doc/sisu/\n <http://www.jus.uio.no/sisu/>\n <http://sisudoc.org/>") + tell.puts_grey + end + end + end + @opt.files.each do |fns| + if FileTest.file?(fns) + @opt.fns=fns + unless @opt.fns =~ /(?:\.(?:(?:-|ssm\.)?sst|ssm|ssp|sx[sdn]\.xml|termsheet.rb)|\S+?\.ss[mt]\.(?:txz|zip)|sisupod\.(?:txz|zip)?|\S+?\.ssp)$/ + if @opt.cmd.inspect=~/-P/ + elsif @opt.fns=~/\.kdi$/ \ + and @opt.mod.inspect =~/--(?:convert(?:-from)?|from)[=-]kdi/ + elsif @opt.fns=~/\.sx[sdn]\.xml$/ \ + and @opt.mod.inspect =~/--(?:(?:convert(?:-from)?|from)[=-])?(?:xml2sst|sxml)/ + elsif @opt.fns=~/\.ssi$/ \ + and @opt.mod.inspect =~/--identify/ + else SiSU::Operations.new(@opt).not_recognised + end + end + if @opt.fns =~/\.ssm\.sst$/ \ + and @opt.cmd !~/[S_M]/ # rework necessry, revist, the _ flag is a hack, to keep ._sst files + @msg,@msgs='temporary file removed',nil + @tell.call.warn unless @opt.cmd =~/V/ + File.unlink(@opt.fns) if File.exist?(@opt.fns) #CONSIDER + end + else #SiSU::Operations.new(fns,'html').not_found + end + end + end + end +end +__END__ diff --git a/lib/sisu/v4/i18n.rb b/lib/sisu/v4/i18n.rb new file mode 100644 index 00000000..206a69ce --- /dev/null +++ b/lib/sisu/v4/i18n.rb @@ -0,0 +1,697 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: internationalisation + +=end +module SiSU_i18n + @@language_table,@@language_list=nil,nil + class Languages + def language + def table + @@language_table ||= { + am: { c: 'am', n: 'Amharic', t: 'Amharic', xlp: 'amharic' }, + bg: { c: 'bg', n: 'Bulgarian', t: 'Български (Bəlgarski)', xlp: 'bulgarian' }, + bn: { c: 'bn', n: 'Bengali', t: 'Bengali', xlp: 'bengali' }, + br: { c: 'br', n: 'Breton', t: 'Breton', xlp: 'breton' }, + ca: { c: 'ca', n: 'Catalan', t: 'catalan', xlp: 'catalan' }, + cs: { c: 'cs', n: 'Czech', t: 'česky', xlp: 'czech' }, + cy: { c: 'cy', n: 'Welsh', t: 'Welsh', xlp: 'welsh' }, + da: { c: 'da', n: 'Danish', t: 'dansk', xlp: 'danish' }, + de: { c: 'de', n: 'German', t: 'Deutsch', xlp: 'german' }, + el: { c: 'el', n: 'Greek', t: 'Ελληνικά (Ellinika)', xlp: 'greek' }, + en: { c: 'en', n: 'English', t: 'English', xlp: 'english' }, + eo: { c: 'eo', n: 'Esperanto', t: 'Esperanto', xlp: 'esperanto' }, + es: { c: 'es', n: 'Spanish', t: 'español', xlp: 'spanish' }, + et: { c: 'et', n: 'Estonian', t: 'Estonian', xlp: 'estonian' }, + eu: { c: 'eu', n: 'Basque', t: 'basque', xlp: 'basque' }, + fi: { c: 'fi', n: 'Finnish', t: 'suomi', xlp: 'finnish' }, + fr: { c: 'fr', n: 'French', t: 'français', xlp: 'french' }, + ga: { c: 'ga', n: 'Irish', t: 'Irish', xlp: 'irish' }, + gl: { c: 'gl', n: 'Galician', t: 'Galician', xlp: 'galician' }, + he: { c: 'he', n: 'Hebrew', t: 'Hebrew', xlp: 'hebrew' }, + hi: { c: 'hi', n: 'Hindi', t: 'Hindi', xlp: 'hindi' }, + hr: { c: 'hr', n: 'Croatian', t: 'Croatian', xlp: 'croatian' }, + hy: { c: 'hy', n: 'Armenian', t: 'Armenian', xlp: 'armenian' }, + ia: { c: 'ia', n: 'Interlingua', t: 'Interlingua', xlp: 'interlingua' }, + is: { c: 'is', n: 'Icelandic', t: 'Icelandic', xlp: 'icelandic' }, + it: { c: 'it', n: 'Italian', t: 'Italiano', xlp: 'italian' }, + la: { c: 'la', n: 'Latin', t: 'Latin', xlp: 'latin' }, + lo: { c: 'lo', n: 'Lao', t: 'Lao', xlp: 'lao' }, + lt: { c: 'lt', n: 'Lithuanian', t: 'Lithuanian', xlp: 'lithuanian' }, + lv: { c: 'lv', n: 'Latvian', t: 'Latvian', xlp: 'latvian' }, + ml: { c: 'ml', n: 'Malayalam', t: 'Malayalam', xlp: 'malayalam' }, + mr: { c: 'mr', n: 'Marathi', t: 'Marathi', xlp: 'marathi' }, + nl: { c: 'nl', n: 'Dutch', t: 'Nederlands', xlp: 'dutch' }, + no: { c: 'no', n: 'Norwegian', t: 'norsk', xlp: 'norsk' }, + nn: { c: 'nn', n: 'Norwegian Nynorsk', t: 'nynorsk', xlp: 'nynorsk' }, + oc: { c: 'oc', n: 'Occitan', t: 'Occitan', xlp: 'occitan' }, + pl: { c: 'pl', n: 'Polish', t: 'polski', xlp: 'polish' }, + pt: { c: 'pt', n: 'Portuguese', t: 'Português', xlp: 'portuges' }, + pt_BR: { c: 'pt_BR', n: 'Portuguese Brazil', t: 'Brazilian Português', xlp: 'brazilian' }, + ro: { c: 'ro', n: 'Romanian', t: 'română', xlp: 'romanian' }, + ru: { c: 'ru', n: 'Russian', t: 'Русский (Russkij)', xlp: 'russian' }, + sa: { c: 'sa', n: 'Sanskrit', t: 'Sanskrit', xlp: 'sanskrit' }, + se: { c: 'se', n: 'Sami', t: 'Samin', xlp: 'samin' }, + sk: { c: 'sk', n: 'Slovak', t: 'slovensky', xlp: 'slovak' }, + sl: { c: 'sl', n: 'Slovenian', t: 'Slovenian', xlp: 'slovenian' }, + sq: { c: 'sq', n: 'Albanian', t: 'Albanian', xlp: 'albanian' }, + sr: { c: 'sr', n: 'Serbian', t: 'Serbian', xlp: 'serbian' }, + sv: { c: 'sv', n: 'Swedish', t: 'svenska', xlp: 'swedish' }, + ta: { c: 'ta', n: 'Tamil', t: 'Tamil', xlp: 'tamil' }, + te: { c: 'te', n: 'Telugu', t: 'Telugu', xlp: 'telugu' }, + th: { c: 'th', n: 'Thai', t: 'Thai', xlp: 'thai' }, + tk: { c: 'tk', n: 'Turkmen', t: 'Turkmen', xlp: 'turkmen' }, + tr: { c: 'tr', n: 'Turkish', t: 'Türkçe', xlp: 'turkish' }, + uk: { c: 'uk', n: 'Ukranian', t: 'українська (ukrajins\'ka)', xlp: 'ukrainian' }, + ur: { c: 'ur', n: 'Urdu', t: 'Urdu', xlp: 'urdu' }, + us: { c: 'en', n: 'English (American)',t: 'English', xlp: 'english' }, + vi: { c: 'vi', n: 'Vietnamese', t: 'Vietnamese', xlp: 'vietnamese' }, + en: { c: 'en', n: 'English', t: 'English', xlp: 'english' }, + xx: { c: 'xx', n: 'Default', t: 'English', xlp: 'english' }, + } + end + def list + @@language_list ||= { + 'am' => table[:am], + 'bg' => table[:bg], + 'bn' => table[:bn], + 'br' => table[:br], + 'ca' => table[:ca], + 'cs' => table[:cs], + 'cy' => table[:cy], + 'da' => table[:da], + 'de' => table[:de], + 'el' => table[:el], + 'en' => table[:en], + 'eo' => table[:eo], + 'es' => table[:es], + 'et' => table[:et], + 'eu' => table[:eu], + 'fi' => table[:fi], + 'fr' => table[:fr], + 'ga' => table[:ga], + 'gl' => table[:gl], + 'he' => table[:he], + 'hi' => table[:hi], + 'hr' => table[:hr], + 'hy' => table[:hy], + 'ia' => table[:ia], + 'is' => table[:is], + 'it' => table[:it], + 'la' => table[:la], + 'lo' => table[:lo], + 'lt' => table[:lt], + 'lv' => table[:lv], + 'ml' => table[:ml], + 'mr' => table[:mr], + 'nl' => table[:nl], + 'no' => table[:no], + 'nn' => table[:nn], + 'oc' => table[:oc], + 'pl' => table[:pl], + 'pt' => table[:pt], + 'pt_BR' => table[:pt_BR], + 'ro' => table[:ro], + 'ru' => table[:ru], + 'sa' => table[:sa], + 'se' => table[:se], + 'sk' => table[:sk], + 'sl' => table[:sl], + 'sq' => table[:sq], + 'sr' => table[:sr], + 'sv' => table[:sv], + 'ta' => table[:ta], + 'te' => table[:te], + 'th' => table[:th], + 'tk' => table[:tk], + 'tr' => table[:tr], + 'uk' => table[:uk], + 'ur' => table[:ur], + 'us' => table[:en], + 'vi' => table[:vi], + 'en' => table[:en], + 'xx' => table[:en] + } + end + self + end + end + class Alphabet + def initialize(lng_code) + @lng_code=lng_code + end + def hash_arrays + @alph=case @lng_code + when /en/ #english + { + u: %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z], + l: %w[a b c d e f g h i j k l m n o p q r s t u v w x y z] + } + when /da|no|nn/ #danish, norwegian + { + u: %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Æ Ø], + l: %w[a b c d e f g h i j k l m n o p q r s t u v w x y z å æ ø] + #u: %W[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å], + #l: %w[a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å] + } + when /sv/ #swedish + { + u: %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö], + l: %w[a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö] + } + else #english default + { + u: %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z], + l: %w[a b c d e f g h i j k l m n o p q r s t u v w x y z] + } + end + end + def hash_strings + { u: hash_arrays[:u].join, l: hash_arrays[:l].join } + end + end +end +__END__ +Language Lists +* po4a c: + <http://www.debian.org/international/l10n/po/> + Px[:lng_lst]=%w[am bg bn br ca cs cy da de el en eo es et eu fi fr ga gl he hi hr hy ia is it la lo lt lv ml mr nl nn no oc pl pt pt_BR ro ru sa se sk sl sq sr sv ta te th tk tr uk ur us vi] +* polyglossia xlp: + <http://mirrors.ctan.org/macros/xetex/latex/polyglossia/polyglossia.pdf> + missing from (:c) list: + arabic asturian bahasai bahasam coptic divehi farsi lsorbian magyar scottish syriac usorbian +note ISO_639-1 + <http://en.wikipedia.org/wiki/ISO_639-1> + <http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes> +also note ISO_639-2 + <http://en.wikipedia.org/wiki/ISO_639-2> + <http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes> + +Px[:lng_lst] # constants.rb + +module SiSU_TextTranslation + class Language + def initialize(md) + @md=md + end + def tex_name(char) + @lang=if char + case char + when 'sq'; 'albanian' + when 'am'; 'amharic' + #when 'ar'; 'arabic' # see polyglossia + when 'hy'; 'armenian' + #when ''; 'asturian' # polyglossia + #when ''; 'bahasai' # polyglossia + #when ''; 'bahasam' # polyglossia + when 'eu'; 'basque' + when 'bn'; 'bengali' + when 'pt_BR'; 'brazilian' + when 'br'; 'breton' + when 'bg'; 'bulgarian' + when 'ca'; 'catalan' # see polyglossia + #when ''; 'coptic' # polyglossia + when 'hr'; 'croatian' + when 'cs'; 'czech' + when 'da'; 'danish' + #when ''; 'divehi' # polyglossia + when 'nl'; 'dutch' # see polyglossia + when 'en'; 'english' # see polyglossia + when 'eo'; 'esperanto' # see polyglossia + when 'et'; 'estonian' + when 'gl'; 'galician' + when 'de'; 'german' + when 'el'; 'greek' #gl ? + when 'he'; 'hebrew' + when 'hi'; 'hindi' + when 'is'; 'icelandic' + when 'ia'; 'interlingua' + when 'ga'; 'irish' + when 'it'; 'italian' + #when ''; 'farsi' # polyglossia + when 'fi'; 'finnish' + when 'fr'; 'french' + when 'lo'; 'lao' + when 'la'; 'latin' + when 'lv'; 'latvian' + when 'lt'; 'lithuanian' + #when ''; 'lsorbian' # polyglossia + #when ''; 'magyar' # polyglossia + when 'ml'; 'malayalam' + when 'mr'; 'marathi' + #when 'hu'; 'magyar' + when 'no'; 'norske' + when 'nn'; 'nynorsk' + when 'oc'; 'occitan' + when 'pl'; 'polish' + when 'pt'; 'portuges' + when 'ro'; 'romanian' + when 'ru'; 'russian' + when 'se'; 'samin' #(check sami?) + when 'sa'; 'sanskrit' + when 'sr'; 'serbian' + #when ''; 'scottish' # polyglossia (gd (Gaelic (Scots))) + when 'sk'; 'slovak' + when 'sl'; 'slovenian' + when 'es'; 'spanish' + when 'sv'; 'swedish' + when 'ta'; 'tamil' + when 'te'; 'telugu' + when 'th'; 'thai' + when 'tr'; 'turkish' + when 'tk'; 'turkmen' + when 'uk'; 'ukrainian' + when 'ur'; 'urdu' + #when ''; 'usorbian' # polyglossia + when 'vi'; 'vietnamese' + when 'cy'; 'welsh' + when 'us'; 'USenglish' # depreciated, see iso-639-2 + else 'english' + end + else 'english' + end + end + end +end +#% Language List po4a +http://www.debian.org/international/l10n/po/ +see polyglossia for subset +* CSB (Unknown language) +* KAB (Unknown language) +* TLH (Unknown language) +* aa (Afar) +* ab (Abkhazian) +* af (Afrikaans) +* af_ZA (Afrikaans, as spoken in South Africa) +* am (Amharic) +* an (Unknown language) +* ang (Unknown language) +* ar (Arabic) +* ar_AR (Arabic, as spoken in Argentina) +* ar_EG (Arabic, as spoken in Egypt) +* ar_OM (Arabic, as spoken in Oman) +* ar_PS (Arabic, as spoken in Palestinian Territory, Occupied) +* ar_SA (Arabic, as spoken in Saudi Arabia) +* ar_SY (Arabic, as spoken in Syrian Arab Republic) +* as (Assamese) +* ast (Unknown language) +* ay (Aymara) +* az (Azerbaijani) +* az_IR (Azerbaijani, as spoken in Iran) +* be (Belarusian) +* be@latin (Unknown language) +* be@tarask (Unknown language) +* bem (Unknown language) +* bg (Bulgarian) +* bg_BG (Bulgarian, as spoken in Bulgaria) +* bi (Bislama) +* bn (Bengali) +* bn_BD (Bengali, as spoken in Bangladesh) +* bn_IN (Bengali, as spoken in India) +* bo (Tibetan) +* br (Breton) +* bs (Bosnian) +* bs_BA (Bosnian, as spoken in Bosnia and Herzegovina) +* bs_BS (Bosnian, as spoken in Bahamas) +* byn (Unknown language) +* ca (Catalan) +* ca@valencia (Unknown language) +* ca_AD (Catalan, as spoken in Andorra) +* ca_ES (Catalan, as spoken in Spain) +* ca_ES@valencia (Unknown language) +* ca_FR (Catalan, as spoken in France) +* ca_IT (Catalan, as spoken in Italy) +* co (Corsican) +* crh (Unknown language) +* cs (Czech) +* cs_CZ (Czech, as spoken in Czech Republic) +* csb (Unknown language) +* cy (Welsh) +* cy_GB (Welsh, as spoken in Great Britain) +* cz (Unknown language) +* da (Danish) +* da_DK (Danish, as spoken in Denmark) +* de (German) +* de_AT (German, as spoken in Austria) +* de_CH (German, as spoken in Switzerland) +* de_DE (German, as spoken in Germany) +* dk (Unknown language) +* dz (Dzongkha) +* el (Greek) +* el_GR (Greek, as spoken in Greece) +* en (English) +* en@boldquot (Unknown language) +* en@quot (Unknown language) +* en@shaw (Unknown language) +* en_AU (English, as spoken in Australia) +* en_CA (English, as spoken in Canada) +* en_GB (English, as spoken in Great Britain) +* en_NZ (English, as spoken in New Zealand) +* en_US (English, as spoken in United States) +* en_US@piglatin (Unknown language) +* en_ZA (English, as spoken in South Africa) +* eo (Esperanto) +* es (Spanish) +* es_AR (Spanish, as spoken in Argentina) +* es_CL (Spanish, as spoken in Chile) +* es_CO (Spanish, as spoken in Colombia) +* es_CR (Spanish, as spoken in Costa Rica) +* es_DO (Spanish, as spoken in Dominican Republic) +* es_EC (Spanish, as spoken in Ecuador) +* es_ES (Spanish, as spoken in Spain) +* es_GA (Spanish, as spoken in Gabon) +* es_GT (Spanish, as spoken in Guatemala) +* es_HN (Spanish, as spoken in Honduras) +* es_LA (Spanish, as spoken in Lao People''s Democratic Republic) +* es_MX (Spanish, as spoken in Mexico) +* es_NI (Spanish, as spoken in Nicaragua) +* es_PA (Spanish, as spoken in Panama) +* es_PE (Spanish, as spoken in Peru) +* es_PR (Spanish, as spoken in Puerto Rico) +* es_SV (Spanish, as spoken in El Salvador) +* es_UY (Spanish, as spoken in Uruguay) +* es_VE (Spanish, as spoken in Venezuela) +* et (Estonian) +* et_EE (Estonian, as spoken in Estonia) +* eu (Basque) +* eu_ES (Basque, as spoken in Spain) +* fa (Persian) +* fa_AF (Persian, as spoken in Afghanistan) +* fa_IR (Persian, as spoken in Iran) +* fi (Finnish) +* fi_FI (Finnish, as spoken in Finland) +* fil (Unknown language) +* fo (Faeroese) +* fo_FO (Faeroese, as spoken in Faroe Islands) +* fr (French) +* fr_BE (French, as spoken in Belgium) +* fr_CA (French, as spoken in Canada) +* fr_CH (French, as spoken in Switzerland) +* fr_FR (French, as spoken in France) +* fr_FX (French, as spoken in France, Metropolitan) +* fr_LU (French, as spoken in Luxembourg) +* frp (Unknown language) +* fur (Unknown language) +* fy (Frisian) +* fy_NL (Frisian, as spoken in Netherlands) +* ga (Irish) +* gd (Gaelic (Scots)) +* gez (Unknown language) +* gl (Galician) +* gl_ES (Galician, as spoken in Spain) +* gn (Guarani) +* gu (Gujarati) +* gv (Manx) +* ha (Hausa) +* he (Hebrew) +* he_IL (Hebrew, as spoken in Israel) +* hi (Hindi) +* hne (Unknown language) +* hr (Croatian) +* hr_HR (Croatian, as spoken in Croatia) +* ht (Unknown language) +* hu (Hungarian) +* hu_HU (Hungarian, as spoken in Hungary) +* hy (Armenian) +* ia (Interlingua) +* id (Indonesian) +* id_ID (Indonesian, as spoken in Indonesia) +* ig (Unknown language) +* io (Unknown language) +* is (Icelandic) +* is_IS (Icelandic, as spoken in Iceland) +* it (Italian) +* it_CH (Italian, as spoken in Switzerland) +* it_IT (Italian, as spoken in Italy) +* iu (Inuktitut) +* ja (Japanese) +* ja_JP (Japanese, as spoken in Japan) +* jv (Unknown language) +* jv_ID (Unknown language) +* ka (Georgian) +* kab (Unknown language) +* kk (Kazakh) +* kl (Kalaallisut) +* km (Khmer) +* km_KH (Khmer, as spoken in Cambodia) +* kn (Kannada) +* ko (Korean) +* ko_KR (Korean, as spoken in Korea) +* ks (Kashmiri) +* ku (Kurdish) +* kw (Cornish) +* ky (Kirghiz) +* la (Latin) +* lb (Letzeburgesch) +* lg (Unknown language) +* li (Unknown language) +* ln (Lingala) +* lo (Lao) +* lt (Lithuanian) +* lt_LT (Lithuanian, as spoken in Lithuania) +* lv (Latvian) +* lv_LV (Latvian, as spoken in Latvia) +* mai (Unknown language) +* mal (Unknown language) +* mg (Malagasy) +* mi (Maori) +* mk (Macedonian) +* mk_MK (Macedonian, as spoken in Macedonia, the Former Yugoslav Republic of) +* ml (Malayalam) +* ml_IN (Malayalam, as spoken in India) +* ml_ML (Malayalam, as spoken in Mali) +* mn (Mongolian) +* mr (Marathi) +* ms (Malay) +* ms_MY (Malay, as spoken in Malaysia) +* mt (Maltese) +* my (Burmese) +* my_MM (Burmese, as spoken in Myanmar) +* na (Nauru) +* nb (Norwegian Bokmål) +* nb_NO (Norwegian Bokmål, as spoken in Norway) +* nds (Unknown language) +* ne (Nepali) +* new (Unknown language) +* nl (Dutch) +* nl_BE (Dutch, as spoken in Belgium) +* nl_NL (Dutch, as spoken in Netherlands) +* nn (Norwegian Nynorsk) +* nn_NO (Norwegian Nynorsk, as spoken in Norway) +* no (Norwegian) +* no_NO (Norwegian, as spoken in Norway) +* nr (Ndebele, South) +* nso (Unknown language) +* oc (Occitan (post 1500)) +* oc_FR (Occitan (post 1500), as spoken in France) +* om (Oromo) +* or (Oriya) +* pa (Panjabi) +* pl (Polish) +* pl_PL (Polish, as spoken in Poland) +* pms (Unknown language) +* ps (Pushto) +* pt (Portuguese) +* pt_BR (Portuguese, as spoken in Brazil) +* pt_PT (Portuguese, as spoken in Portugal) +* qu (Quechua) +* rm (Rhaeto-Romance) +* ro (Romanian) +* ro_RO (Romanian, as spoken in Romania) +* ru (Russian) +* ru_RU (Russian, as spoken in Russia) +* rw (Kinyarwanda) +* sa (Sanskrit) +* sc (Sardinian) +* sd (Sindhi) +* se (Sami) +* se_NO (Sami, as spoken in Norway) +* si (Sinhalese) +* si_LK (Sinhalese, as spoken in Sri Lanka) +* si_SI (Sinhalese, as spoken in Slovenia) +* sk (Slovak) +* sk_SK (Slovak, as spoken in Slovakia) +* sl (Slovenian) +* sl_SI (Slovenian, as spoken in Slovenia) +* sl_SL (Slovenian, as spoken in Sierra Leone) +* so (Somali) +* sp (Unknown language) +* sq (Albanian) +* sq_AL (Albanian, as spoken in Albania) +* sr (Serbian) +* sr@Latn (Unknown language) +* sr@ije (Unknown language) +* sr@ijekavian (Unknown language) +* sr@ijekavianlatin (Unknown language) +* sr@latin (Unknown language) +* sr_SR (Serbian, as spoken in Suriname) +* sr_YU (Serbian, as spoken in Yugoslavia) +* st (Sotho) +* su (Sundanese) +* su_ID (Sundanese, as spoken in Indonesia) +* sv (Swedish) +* sv_SE (Swedish, as spoken in Sweden) +* sw (Swahili) +* ta (Tamil) +* ta_LK (Tamil, as spoken in Sri Lanka) +* te (Telugu) +* tg (Tajik) +* th (Thai) +* th_TH (Thai, as spoken in Thailand) +* ti (Tigrinya) +* tig (Unknown language) +* tk (Turkmen) +* tl (Tagalog) +* tlh (Unknown language) +* to (Tonga) +* tr (Turkish) +* tr_TR (Turkish, as spoken in Turkey) +* tt (Tatar) +* ug (Uighur) +* ug_CN (Uighur, as spoken in China) +* uk (Ukrainian) +* uk_UA (Ukrainian, as spoken in Ukraine) +* ur (Urdu) +* ur_PK (Urdu, as spoken in Pakistan) +* uz (Uzbek) +* uz@cyrillic (Unknown language) +* ve (Unknown language) +* vi (Vietnamese) +* vi_AR (Vietnamese, as spoken in Argentina) +* vi_DE (Vietnamese, as spoken in Germany) +* vi_PL (Vietnamese, as spoken in Poland) +* vi_TR (Vietnamese, as spoken in Turkey) +* vi_VN (Vietnamese, as spoken in Vietnam) +* wa (Unknown language) +* wal (Unknown language) +* wo (Wolof) +* xh (Xhosa) +* yi (Yiddish) +* yo (Yoruba) +* zh (Chinese) +* zh_CN (Chinese, as spoken in China) +* zh_HK (Chinese, as spoken in Hong Kong) +* zh_TW (Chinese, as spoken in Taiwan) +* zu (Zulu) + + 'sq'; 'albanian' + 'am'; 'amharic' +#'ar'; 'arabic' # see polyglossia + 'hy'; 'armenian' +#''; 'asturian' # polyglossia +#''; 'bahasai' # polyglossia +#''; 'bahasam' # polyglossia + 'eu'; 'basque' + 'bn'; 'bengali' + 'pt_BR'; 'brazilian' + 'br'; 'breton' + 'bg'; 'bulgarian' + 'ca'; 'catalan' # see polyglossia +#''; 'coptic' # polyglossia + 'hr'; 'croatian' + 'cs'; 'czech' + 'da'; 'danish' +#''; 'divehi' # polyglossia + 'nl'; 'dutch' # see polyglossia + 'en'; 'english' # see polyglossia + 'eo'; 'esperanto' # see polyglossia + 'et'; 'estonian' + 'gl'; 'galician' + 'de'; 'german' + 'el'; 'greek' #gl ? + 'he'; 'hebrew' + 'hi'; 'hindi' + 'is'; 'icelandic' + 'ia'; 'interlingua' + 'ga'; 'irish' + 'it'; 'italian' +#''; 'farsi' # polyglossia + 'fi'; 'finnish' + 'fr'; 'french' + 'lo'; 'lao' + 'la'; 'latin' + 'lv'; 'latvian' + 'lt'; 'lithuanian' +#''; 'lsorbian' # polyglossia +#''; 'magyar' # polyglossia + 'ml'; 'malayalam' + 'mr'; 'marathi' +#'hu'; 'magyar' + 'no'; 'norske' + 'nn'; 'nynorsk' + 'oc'; 'occitan' + 'pl'; 'polish' + 'pt'; 'portuges' + 'ro'; 'romanian' + 'ru'; 'russian' + 'se'; 'samin' #(check sami?) + 'sa'; 'sanskrit' + 'sr'; 'serbian' +#''; 'scottish' # polyglossia (gd (Gaelic (Scots))) + 'sk'; 'slovak' + 'sl'; 'slovenian' + 'es'; 'spanish' + 'sv'; 'swedish' + 'ta'; 'tamil' + 'te'; 'telugu' + 'th'; 'thai' + 'tr'; 'turkish' + 'tk'; 'turkmen' + 'uk'; 'ukrainian' + 'ur'; 'urdu' +#''; 'usorbian' # polyglossia + 'vi'; 'vietnamese' + 'cy'; 'welsh' + 'us'; 'USenglish' # depreciated, see iso-639-2 diff --git a/lib/sisu/v4/manifest.rb b/lib/sisu/v4/manifest.rb new file mode 100644 index 00000000..58f2d8eb --- /dev/null +++ b/lib/sisu/v4/manifest.rb @@ -0,0 +1,909 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: summary of generated outputs and metadata + +=end +module SiSU_Manifest + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + require_relative 'prog_text_translation' # prog_text_translation.rb + require_relative 'particulars' # particulars.rb + include SiSU_Particulars + require_relative 'html_minitoc' # html_minitoc.rb + require_relative 'html' # html.rb + include SiSU_HTML_Format + require_relative 'param' # param.rb + include SiSU_Param + require_relative 'i18n' # i18n.rb + include SiSU_Viz + 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) + @md=SiSU_Param::Parameters.new(@opt).get + SiSU_Env::InfoSkin.new(@md).select + xbrowser=@env.program.web_browser + browser=@env.program.console_web_browser +# webserv_url=@env.path.url.output_tell #fix in sysenv + unless @opt.cmd =~/q/ + url_html="file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}" + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',"#{xbrowser} #{url_html}").green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Manifest',"[#{@opt.f_pth[:lng_is]}]", "#{url_html}").grey_title_grey_blue + SiSU_Screen::Ansi.new(@opt.cmd,"#{browser} #{url_html}").grey_tab if @opt.cmd =~/v/i + end + data=SiSU_HTML::Source::HTML_Environment.new(@particulars).tuned_file_instructions + SiSU_Manifest::Source::Output.new(@md).check_output(data) + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css + end + end + private + class Output <Source + def initialize(md) + @manifest={ txt: [], html: [] } + @md,@fns=md,md.fns + @env=SiSU_Env::InfoEnv.new(md.fns) + @f=SiSU_Env::FileOp.new(md) + @fnb=md.fnb + @base_url="#{@env.url.root}/#{@fnb}" + @o_str=SiSU_Env::FileOp.new(md).output_dir_structure + @image_path=if @o_str.dump_or_redirect? + './image' + else + %{#{@f.path_rel_links.html_scroll_2}_sisu/image_sys} + end + @base_path=@f.output_path.manifest.dir + @@dg ||=SiSU_Env::InfoEnv.new.digest.type + @dg=@@dg + l=SiSU_Env::StandardiseLanguage.new(md.opt.lng).language + @language=l[:n] + @translate=SiSU_Translate::Source.new(md,@language) + @brace_url=SiSU_Viz::Skin.new.url_decoration + @stylesheet=SiSU_Style::CSS_HeadInfo.new(md).stylesheet + end + def output + manifest=@f.write_file.manifest + @manifest[:html].each do |x| + x=x.gsub(Xx[:html_relative2],@f.path_rel_links.html_scroll_2). + gsub(Xx[:html_relative1],@f.path_rel_links.html_scroll_1) + manifest << x + end + end + def url_make(url,file,src=nil) + if @o_str.dump_or_redirect? + '' + elsif :src + %{<br />#{@brace_url.xml_open}<a href="#{url}/#{file}">#{url}/#{file}</a>#{@brace_url.xml_close}} + else + %{<p class="tiny">#{@brace_url.xml_open}<a href="#{url}/#{file}">#{url}/#{file}</a>#{@brace_url.xml_close}</p>} + end + 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] << "#{file} #{id} #{kb}\n" + @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="#{rel}/#{file}">#{img}#{id}</a></p></th><td><p class="small"><a href="#{rel}/#{file}">#{file}</a></p>#{url_make(url,file)}</td><td class="right"><p class="right">#{kb}</p></td></tr>\n} + 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] << "#{file} #{id} #{kb}\n" + @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="#{rel}/#{file}">#{img}#{id}</a></p></th><td><p class="small"><a href="#{rel}/#{file}">#{file}</a></p>#{url_make(url,file)}</td><td class="right"><p class="right">#{kb}</p></td></tr>\n} + end + def summarize_sources(id,file,pth,rel,url) + sys=SiSU_Env::SystemCall.new + dgst=(@dg =~/^sha(?:2|256)$/) \ + ? sys.sha256("#{pth}/#{file}") + : sys.md5("#{pth}/#{file}") + SiSU_Screen::Ansi.new(@md.opt.cmd,"#{dgst[1]} #{file}").warn if @md.opt.cmd =~/[vVM]/ + size=(File.size("#{pth}/#{file}")/1024.00).to_s + kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1] + @manifest[:txt] << "#{file} #{id} #{kb}\n" + @manifest[:html] << %{<tr><th class="left"><p class="norm"><a href="#{rel}/#{file}">#{id}</a></p></th><td class="right"><p class="tiny"><a href="#{rel}/#{file}">#{file}</a> #{dgst[1]}#{url_make(url,file,:src)}</p></td><td class="right"><p class="right">#{kb}</p></td></tr>\n} if kb and kb =~/\d+/ + end + def published_manifests? + @f=SiSU_Env::FileOp.new(@md) #.base_filename + @m=[] + url=@f.output_path.base.url + manifests={} + mp,mn,mt,mr=nil,nil,nil,nil + ln=SiSU_i18n::Languages.new.language.list + Px[:lng_lst].each do |lc| + if @o_str.dump_or_redirect? #does not work for --redirect or --dump + mp="#{@f.output_path.base.dir}" + mn="#{@md.fnb}.html" + mt="#{mp}/#{mn}" + mr="../../#{lc}/manifest/#{mn}" + mu="#{url}/#{mn}" + elsif @f.output_dir_structure.by_language_code? + mp="#{@f.output_path.base.dir}/#{lc}/manifest" + mn="#{@md.fnb}.html" + mt="#{mp}/#{mn}" + mr="../../#{lc}/manifest/#{mn}" + mu="#{url}/#{lc}/manifest/#{mn}" + elsif @f.output_dir_structure.by_filetype? + mp="#{@f.output_path.base.dir}/manifest" + mn="#{@md.fnb}.#{lc}.html" + mt="#{mp}/#{mn}" + mr=mn + mu="#{url}/manifest/#{mn}" + else + mp="#{@f.output_path.base.dir}/#{@md.fnb}" + mn="sisu_manifest.#{lc}.html" + mt="#{mp}/#{mn}" + mr=mn + mu="#{url}/#{mn}" + end + if FileTest.directory?(mp) \ + && FileTest.file?(mt) + lng=ln[lc][:t] + manifests[lc]={ ln: lng, fn: mn, rel: mr } + @m << { mu: mu, l: lng, rel: mr } + end + end + manifests + @m=@m.uniq + end + def languages(id,file) + flv=published_manifests? + @manifest[:html] << %{<tr><th class="left"><div id="horizontal_links"><ul id="horizontal">\n} + flv.each do |l| + lang=SiSU_Translate::Source.new(@md,@language,l[:n]).language_list + @manifest[:txt] << "#{l[:mu]} #{l[:l]}\n" + @manifest[:html] << %{<li class="norm"><a href="#{l[:rel]}">#{l[:l]}</a> </li>} + end + @manifest[:html] << %{</ul></div></th></tr>\n} + end + def published_languages(id,file) + flv=published_manifests? + flv.each do |l| + @manifest[:txt] << "#{l[:mu]} #{l[:l]}\n" + @manifest[:html] << %{<tr><th class="left"><p class="bold"><a href="#{l[:mu]}">#{l[:l]}</a></p></th><td><p class="norm">#{l[:l]}</p><p class="tiny">#{@brace_url.xml_open}<a href="#{l[:mu]}">#{l[:mu]}</a>#{@brace_url.xml_close}</p></td><td class="right"><p class="right"> </p></td></tr>\n} + end + end + def metadata(id,info) + info=info.to_s.gsub(/(?:#{Mx[:br_line]}|\\)+/,'<br />') + @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{id}:</p></th><td><p class="left">#{info}</p></td></tr>\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[:html] << %{<tr><th class="right" width=5%><p class="norm">●</p></th><td class="left"><p class="norm"><a href="#{url}">#{lnk}</a></p><p class="tiny"> #{@brace_url.xml_open}<a href="#{static}">#{static}</a>#{@brace_url.xml_close}</p></td></tr>\n} + end + def output_tests + if FileTest.file?(@f.place_file.html_segtoc.dir)==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_toc.png" alt="TOC linked" /> } + 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,img) + end + if FileTest.file?(@f.place_file.html_scroll.dir)==true + img=%{<img border="0" height="15" width="15" src="#{@image_path}/b_doc.png" alt="Full Text" /> } + 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,img) + 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 + img=%{<img border="0" height="18" width="18" src="#{@image_path}/b_epub.png" alt="EPUB" /> } + 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,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_letter}")==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } + 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 document (recommended for printing)","#{@f.base_filename.pdf_p_letter}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_letter}")==true + img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } + 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 document (recommended for screen viewing)","#{@f.base_filename.pdf_l_letter}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a4}")==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } + 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 document (recommended for printing)","#{@f.base_filename.pdf_p_a4}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a4}")==true + img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } + 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 document (recommended for screen viewing)","#{@f.base_filename.pdf_l_a4}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a5}")==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } + 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 document (recommended for printing)","#{@f.base_filename.pdf_p_a5}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a5}")==true + img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } + 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 document (recommended for screen viewing)","#{@f.base_filename.pdf_l_a5}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_b5}")==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } + 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 document (recommended for printing)","#{@f.base_filename.pdf_p_b5}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_b5}")==true + img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } + 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 document (recommended for screen viewing)","#{@f.base_filename.pdf_l_b5}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_legal}")==true + img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } + 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 document (recommended for printing)","#{@f.base_filename.pdf_p_legal}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_legal}")==true + img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } + 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 document (recommended for screen viewing)","#{@f.base_filename.pdf_l_legal}" + summarize(id,file,pth,rel,url,img) + end + if FileTest.file?(@f.place_file.odt.dir)==true + img=%{<img border="0" height="18" width="18" src="#{@image_path}/b_odf.png" alt="ODF/ODT" /> } + pth=@f.output_path.odt.dir + rel=@f.output_path.odt.rel_sm + url=@f.output_path.odt.url + id,file='ODF:ODT (Open Document Format)',@f.base_filename.odt + summarize(id,file,pth,rel,url,img) + 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.info.dir)==true + pth=@f.output_path.texinfo.dir + rel=@f.output_path.texinfo.rel_sm + url=@f.output_path.texinfo.url + id,file='Info file',@f.base_filename.info + 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.sqlite_discreet.dir)==true + id,file='SQLite3 file',@f.base_filename.sqlite_discreet + pth=@f.output_path.sqlite_discreet.dir + rel=@f.output_path.sqlite_discreet.rel_sm + url=@f.output_path.sqlite_discreet.url + summarize(id,file,pth,rel,url) + end + if FileTest.file?(@f.place_file.txt.dir)==true + id=if @md.opt.cmd =~/a/ then 'Plaintext (Unix (UTF-8) with footnotes)' + elsif @md.opt.cmd =~/e/ then 'Plaintext (Unix (UTF-8) with endnotes)' + elsif @md.opt.cmd =~/A/ then 'Plaintext (dos (UTF-8) with footnotes)' + elsif @md.opt.cmd =~/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.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) + 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 qrc_image + fn=@md.fnb + pth=(@o_str.dump_or_redirect?) \ + ? '.' + : 'qrcode' + img_md="#{pth}/#{fn}.md.png" + img_title="#{pth}/#{fn}.title.png" + if FileTest.file?(@f.place_file.qrcode_md.dir)==true + @manifest[:html] <<<<WOK +<tr><td class="left"> + <p class="tiny">QR code SiSU document metadata:</p> + <p class="tiny"> + <img border="0" src="#{img_md}" alt="qrcode metadata" /> + </p> +</td></tr> +WOK + end + if FileTest.file?(@f.place_file.qrcode_title.dir)==true + @manifest[:html] <<<<WOK +<tr><td class="left"> + <p class="tiny">QR code document title info:</p> + <p class="tiny"> + <img border="0" src="#{img_title}" alt="qrcode title" /> + </p> +</td></tr> +WOK + end + end + def source_tests + if @md.fno =~/\.ssm$/ #% decide whether to extract and include requested/required documents + if FileTest.file?(@f.place_file.src.dir)==true + pth=@f.output_path.src.dir + rel=@f.output_path.src.rel_sm + url=@f.output_path.src.url + id,file='Markup Composite File (SiSU source)',@f.base_filename.src + summarize_sources(id,file,pth,rel,url) + end + else + if FileTest.file?(@f.place_file.src.dir)==true + pth=@f.output_path.src.dir + rel=@f.output_path.src.rel_sm + 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.ab_pod + url=@f.output_path.sisupod.url + id,file='SiSU doc (tar.xz)',@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 + metadata(id,info) + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + id,info=@translate.author,@md.creator.author + metadata(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) + 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.classify.subject \ + and @md.classify.subject=~/\S+/ + id,info=@translate.subject,@md.classify.subject + 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.type \ + and @md.type=~/\S+/ #dc + id,info=@translate.type,@md.type + 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) + 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.format \ + and @md.classify.format=~/\S+/ + id,info=@transate.format,@md.classify.format + metadata(id,info) + end + if defined? @md.classify.identifier \ + and @md.classify.identifier=~/\S+/ + id,info=@translate.identifier,@md.classify.identifier + 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.classify.relation \ + and @md.classify.relation=~/\S+/ + id,info=@translate.relation,@md.classify.relation + metadata(id,info) + end + if defined? @md.classify.coverage \ + and @md.classify.coverage=~/\S+/ + id,info=@translate.coverage,@md.classify.coverage + 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.notes.comment \ + and @md.notes.comment=~/\S+/ + id,info=@translate.comments,@md.notes.comment + 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.classify.oclc \ + and @md.classify.oclc=~/\S+/ + id,info=@translate.cls_oclc,@md.classify.oclc + @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{id}:</p></th><td>\n} + @manifest[:html] << %{<p class="left"><a href="http://worldcat.org/oclc/#{info}">#{info}</a></p>\n} + @manifest[:html] << %{</td></tr>\n} + end + if defined? @md.classify.pg \ + and @md.classify.pg=~/\S+/ + id,info=@translate.cls_gutenberg,@md.classify.pg + metadata(id,info) + end + if defined? @md.classify.isbn \ + and @md.classify.isbn=~/\S+/ + id,info=@translate.cls_isbn,@md.classify.isbn + 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.topic_register_array \ + and @md.topic_register_array.length > 0 + @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{@translate.topic_register}:</p></th><td>\n} + @md.topic_register_array.each do |t| + t.each_with_index do |st,i| + if st.is_a?(Array) + st.each do |v| + if v.is_a?(Array) + v.each do |w,i| + @manifest[:html] << %{<p class="it#{i}">#{w}</p>\n} + end + else + @manifest[:html] << %{<p class="it#{i}">#{v}</p>\n} + end + end + else @manifest[:html] << %{<p class="it#{i}">#{st}</p>\n} + end + end + end + @manifest[:html] << %{</td></tr>\n} + 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 + if @md.generated + id,info=@translate.last_generated,@md.generated + metadata(id,info) + end + if @md.sisu_version + id,info=@translate.sisu_version,"#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" + metadata(id,info) + end + if @md.ruby_version + id,info=@translate.ruby_version,@md.ruby_version + metadata(id,info) + end + end + def links_tests + if defined? @md.lnk \ + and @md.lnk + @md.lnk.each do |l| + if defined? l[:say] + target=(l[:url] !~/^\.(\.)?\//) \ + ? 'external' + : '_top' + url,lnk=l[:url],l[:say] + unless url.nil? \ + or url.empty? + links(url,lnk,target) + end + end + end + end + end + def check_output(data) + begin + minitoc=SiSU_HTML_MiniToc::TocMini.new(@md,data).songsheet.join("\n") + id,file='','' + vz=SiSU_Env::GetInit.instance.skin + search_form=if @f.build.search_form? + "<td>#{@env.widget_static.search_form}</td>" + else '' + end + banner_table=if vz.banner_home_button_only !~ /http:\/\/www\.jus\.uio\.no\/sisu/ \ + and vz.banner_home_button_only !~ /sisu\.home\.png/ +<<WOK +<table summary="band" border="0" cellpadding="3" cellspacing="0"> +<tr><td align="left" width="15%" bgcolor="#ffffff">#{vz.banner_band}</td> +<td width="70%"><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td> +#{search_form}</tr> +</table> +WOK + else +<<WOK +<table summary="band" border="0" cellpadding="3" cellspacing="0"> +<tr><td align="left" bgcolor="#ffffff"><a href="http://www.jus.uio.no/sisu/" target="_top"><img border="0" src="#{vz.url_path_image_sys}/sisu.png" alt="SiSU -->" /></a></td> +<td><p class="tiny">#{@brace_url.xml_open}<a href="#{@base_url}/#{file}">#{@base_url}/#{file}</a>#{@brace_url.xml_close}</p></td> +#{search_form}</tr> +</table> +WOK + end + @manifest[:html] <<<<WOK +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<title> +SiSU manifest: #{@md.title.full} +</title> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="sourcefile" content="#{@md.fns}" /> +<link rel="generator" href="http://www.jus.uio.no/sisu" /> +<link rel="shortcut icon" href="#{@f.path_rel_links.html_scroll_css}_sisu/image_sys/rb7.ico" /> +#{@stylesheet.css_head} +</head> +<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en"> +#{banner_table} +WOK + if @f.build.manifest_minitoc? + if @o_str.dump_or_redirect? + elsif @f.output_dir_structure.by_language_code? \ + or @f.output_dir_structure.by_filetype? + minitoc=minitoc.gsub(/<a href="(\S+?)"/m,%{<a href="../html/#{@md.fnb}/\\1"}). + gsub(/<a href="\.\.\/html\/#{@md.fnb}\/(?:sisu_manifest\.html|#{@f.base_filename.manifest})"/m, + %{<a href="#{@f.base_filename.manifest}"}) + end + @manifest[:html] <<<<WOK +<div class="toc"> +#{minitoc.to_s} +</div> +<div class="content"> +WOK + else + @manifest[:html] <<<<WOK +<div> +WOK + end + @manifest[:html] <<<<WOK +<h1 class="small">#{@translate.manifest_description}</h1> +<h2 class="small">#{@md.title.full}</h2> +<p class="bold">#{@md.author}</p> +<p class="small"> + <a href="#output">Document, Available Filetypes</a> +</p> +<p class="small"> + <a href="#metadata">Document Metadata</a> +</p> +<p class="tiny"> + <a href="#links">metadata suggested links (if any)</a> +</p> +<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +WOK + published_versions + @manifest[:html] << '</table>' + @manifest[:html] <<<<WOK +<h2 class="small"><a name="output">#{@translate.manifest_description_output}</a></h2> +<table summary="available output/filetypes" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +<tr> <th class="left"><p class="bold">#{@translate.filetype_description}</p></th><th class="left"><p class="bold">#{@translate.filename}</p></th><th class="right"><p class="right"><b>#{@translate.file_size}</b></p><p class="tiny_right">(kB)</p></th></tr> + +WOK + output_tests + @manifest[:html] << '</table>' + @manifest[:html] <<<<WOK +<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +WOK + source_tests + @manifest[:html] << '</table>' + @manifest[:html] <<<<WOK +<h2 class="small"><a name="metadata">#{@translate.manifest_description_metadata}</a></h2> +<table summary="document metadata" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +<tr> <th class="left"><p class="bold">#{@translate.metadata}</p></th><th class="left"><p class="bold">#{@translate.description}</p></th></tr> +WOK + metadata_tests + @manifest[:html] <<<<WOK +</table> +WOK + @manifest[:html] <<<<WOK +<p class="bold"><a name="links">#{@translate.suggested_links}:</a></p> +<table summary="suggested links" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +WOK + links_tests + @manifest[:html] <<<<WOK +</table> +WOK + @manifest[:html] <<<<WOK +<h2 class="small"><a name="languages">#{@translate.language_version_list}</a></h2> +<table summary="language versions" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +<tr> <th class="left"><p class="bold">#{@translate.filename}</p></th><th class="left"><p class="bold">#{@translate.description}</p></th><th class="right"><p class="right"> </p></th></tr> + +WOK + language_versions + qrc_image + @manifest[:html] <<<<WOK +</table> +</div> +<div> +<br /> +#{vz.credits_sisu_manifest} +</div> +</body> +</html> +WOK + output + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + end + end +end +__END__ diff --git a/lib/sisu/v4/manpage.rb b/lib/sisu/v4/manpage.rb new file mode 100644 index 00000000..81f2ed2c --- /dev/null +++ b/lib/sisu/v4/manpage.rb @@ -0,0 +1,432 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: manpage text generation, stripped manpage output (unix, + linefeed) + +=end +module SiSU_Manpage + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + include SiSU_Param + include SiSU_Viz + require_relative 'manpage_format' # manpage_format.rb + include SiSU_ManpageFormat + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'shared_txt' # shared_txt.rb + pwd=Dir.pwd + @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 + @@tablefoot='' + class Source + def initialize(opt) + @opt=opt + if @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/ + @@dostype='unix endnotes' + else puts "#{sf} not a processed file type" + end + 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.cmd =~/[MVv]/) \ + ? "#{@env.program.text_editor} #{@md.file.output_path.manpage.dir}/#{@md.file.base_filename.manpage}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" + @opt.cmd=~/[MVvz]/ \ + && @opt.cmd !~/q/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Manpage',tool).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Manpage',tool).green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@md.file.output_path.manpage.dir}/#{@md.file.base_filename.manpage}").flow if @opt.cmd =~/[MV]/ + @dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here + SiSU_Manpage::Source::Scroll.new(@md,@dal_array).songsheet + SiSU_Env::InfoSkin.new(@md).select #watch + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + private + class Scroll <Source + require_relative 'defaults' # defaults.rb + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + @@endnotes={ para: [], end: [] } + def initialize(md,data) + @md,@data=md,data + @brace_url=SiSU_Viz::Skin.new.url_decoration + @vz=SiSU_Env::GetInit.instance.skin + @tab="\t" + @br="\n" + @@dostype='unix endnotes' + @manpage={ body: [], open: [], close: [], head: [], metadata: [], tail: [], endnotes: [] } + end + def songsheet + manpage=markup(@data) + publish(manpage) + end + # Used for extraction of endnotes from paragraphs + def extract_endnotes(para='') + notes=para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)\s*(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/m) + @n=[] + notes.flatten.each do |n| #high cost to deal with <br> appropriately within manpage, consider + n=n.dup.to_s + if n =~/#{Mx[:br_line]}/ + fix = n.split(/\s*#{Mx[:br_line]}+\s*/) #watch #added + fix.each do |x| + unless x.empty?; @n << x + end + end + else @n << n + end + end + notes=@n.flatten + notes.each do |e| + util=(e.to_s =~/^\[[\d*+]+\]:/) \ + ? (SiSU_TextUtils::Wrap.new(e.to_s,78,4,1)) + : (SiSU_TextUtils::Wrap.new(e.to_s,78,0,1)) + wrap=util.line_wrap + wrap=if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m + wrap.gsub(/(^| |#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*'). #man page requires + gsub(/\s\.(\S+)/,' \\.\1'). + gsub(/^\s*([\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB +.TP +.BI \\1. +\\2 +GSUB + ) + else + wrap.gsub(/^\s*(.+)\Z/m, <<GSUB +\\1 +GSUB + ) + end + @@endnotes[:para] << wrap + @@endnotes[:end] << wrap << "\n.br" + @@endnotes + end + end + def manpage_metadata + @manpage[:metadata]=SiSU_Metadata::Summary.new(@md).manpage.metadata + end + def manpage_tail + SiSU_Env::InfoSkin.new(@md).select + vz=SiSU_Env::GetInit.instance.skin + generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[: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 + @manpage[:tail] <<<<WOK +#{@br} +.TP +Other versions of this document: +.TP + manifest: <#{@md.file.output_path.digest.url}/#{@md.file.base_filename.digest}> +.TP +at: <#{vz.url_site}> +.TP +#{sc} +.TP +* #{generator} +.TP +* #{rubyv} +.TP +* #{lastdone} +.TP +* SiSU #{vz.url_sisu} +WOK + end + def manpage_structure(dob='',hname='') #% Used to extract the structure of a document + if dob.is==:heading + lv=dob.ln + n=dob.ln - 1 + n3=dob.ln + 2 + else lv=nil + end + wrapped=if dob.is==:para \ + || dob.is==:heading + paragraph=dob.obj + if dob.is==:para + if dob.indent =~/[1-9]/ \ + and dob.indent == dob.hang + util=if dob.bullet_ + SiSU_TextUtils::Wrap.new("* #{paragraph}",78,dob.indent.to_i*2) + else SiSU_TextUtils::Wrap.new(paragraph,78,dob.indent.to_i*2) + end + elsif dob.hang =~/[0-9]/ \ + and dob.indent != dob.hang # NOT yet implemented + util=SiSU_TextUtils::Wrap.new(paragraph,78,dob.indent.to_i*2) + else + util=if dob.bullet_ + SiSU_TextUtils::Wrap.new("* #{paragraph}",78,0) + else SiSU_TextUtils::Wrap.new(paragraph,78,0) + end + end + else util=SiSU_TextUtils::Wrap.new(paragraph,78,0) + end + w=util.line_wrap + w=w.gsub(/^(\\\.)/,' \1') + w + end + if lv + times=wrapped.length + times=78 if times > 78 + @manpage[:body] << case lv + when 1; '.SH ' << wrapped.upcase << @br << '.br' + when 2..3; '.SH ' << wrapped.upcase << @br << '.br' + when 4; '.SH ' << wrapped.upcase << @br << '.br' + when 5..6; '.SH ' << wrapped.upcase << @br + end + else + @manpage[:body] << if wrapped =~/^\.BI\s/ # main text, contents, body KEEP + '.TP' << @br << wrapped.gsub(/^\.BI\s/,'.B ') # sleight ... simpler output (check gsub!) + else + '.br' << @br << wrapped + end + end + if @@endnotes[:para] \ + and @@dostype =~/footnote/ #edit out to switch off endnotes following paragraph to which they belong + @manpage[:body] << @br + @@endnotes[:para].each { |e| @manpage[:body] << e << @br } + elsif @@endnotes[:para] \ + and @@dostype =~/endnote/ + @manpage[:body] << @br*2 + end + @@endnotes[:para]=[] + end + def markup(data) # Used for major markup instructions + dir=SiSU_Env::InfoEnv.new(@md.fns) + @data_mod,@endnotes,@level,@cont,@copen,@manpage_contents_close=Array.new(6){[]} + (0..6).each { |x| @cont[x]=@level[x]=false } + (4..6).each { |x| @manpage_contents_close[x]='' } + manpage_tail #($1,$2) + table_message='[table omitted, see other document formats]' + fix=[] + manpage_metadata + data.each do |dob| + if dob.is==:comment \ + || dob.is==:heading_insert + dob.obj='' + end + dob.obj=dob.obj.gsub(/.+?<-#>/,''). # remove dummy headings (used by html) #check + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^\1^'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'[\1]'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'++\1++'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'--\1--'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\1'). + gsub(/\A\s*#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}#{Mx[:br_line]}([,.:!?](?: |$))?/m,"#{Mx[:br_line]}.I \\1\\2#{Mx[:br_line]}"). + gsub(/\s*#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}([,.:!?](?: |$))?/m,"#{Mx[:br_line]}.I \\1\\2#{Mx[:br_line]}"). + gsub(/\A\s*#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}([,.:!?](?: |$))?#{Mx[:br_line]}/m,"#{Mx[:br_line]}.BI \\1\\2#{Mx[:br_line]}"). + gsub(/\s*#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}([,.:!?](?: |$))?/,"#{Mx[:br_line]}.B \\1\\2#{Mx[:br_line]}"). + gsub(/\s*#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}([,.:!?](?: |$))?/,"#{Mx[:br_line]}.I \\1\\2#{Mx[:br_line]}") + unless dob.is==:code + dob.obj=dob.obj.gsub(/(?:^|\s)#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}([,.:!?](?: |$))?/,"\\1 #{@brace_url.txt_open}\\2#{@brace_url.txt_close}\\3"). + gsub(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}([,.:!?](?: |$))?/,"\\1#{@brace_url.txt_open}\\2#{@brace_url.txt_close}\\3") + @manpage[:endnotes]=extract_endnotes(dob.obj) + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s*(?:.+?)#{Mx[:en_a_c]}/m,'[^\1]'). # endnote marker marked up + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s*(?:.+?)#{Mx[:en_b_c]}/m,'[^\1]'). # endnote marker marked up + gsub(/#{Mx[:gl_o]}#amp#{Mx[:gl_c]}/,'&'). ##{Mx[:gl_o]}#095#{Mx[:gl_c]} + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). + gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\e'). + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). + gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~'). + gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©') + else + dob.obj=dob.obj.gsub(/\\/,'\e'). + gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,"\n\n") # watch + #dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/,"\n") # watch + end + dob.obj=dob.obj.gsub(/(^| |#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*'). #man page requires + gsub(/┆/,'|'). + gsub(/\s\.(\S+)/,' \\.\1'). + gsub(/(\n\.)(\S\S\S+)/m,'\1\\.\2'). + gsub(/-/,'\-') #manpages use this + dob.obj=dob.obj.gsub(/~/,'~') if dob.obj #manpages use this + if dob.is =~/block|group|verse|alt|code/ + if dob.is ==:code + dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _< + gsub(/(^|[^}])_([<>])/m,'\1\2'). # _<_< + gsub(/\A(.+)?\Z/m,".nf\n\n\\1\n\n.fi") + end + end + #dob.obj.gsub!(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/m,"\n.br\n") # watch + dob.obj=dob.obj.gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/m,"\n\n") # watch + blit=dob.obj.scan(/\[[^\]]+\]|[^\[]+/) + blit_array=[] + blit.each do |x| + x=if x =~/^\[/ + x.gsub(/\s+/,' \ ') #manpages use this + else x + end + blit_array << x + end + dob.obj=blit_array.join + dob.obj=dob.obj.gsub(/#{Mx[:gl_o]}:name#\S+?#{Mx[:gl_c]}/mi,''). #added + #gsub(/\s\\\s+(#{Mx[:br_line]}|#{Mx[:br_nl]})/,'\1'). #a messy solution + gsub(/#{Mx[:br_page]}\s*|#{Mx[:br_page_new]}/,''). # remove page breaks + gsub(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1\2'). + gsub(/<a href=".+?">(.+?)<\/a>/m,'\1'). + gsub(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,''). # remove name links + gsub(/ |#{Mx[:nbsp]}/,' '). # decide on + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]") + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]") + gsub(/^(?:^|[^_\\])#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*#{Mx[:lnk_c]}\S+/,'[image: "\1"]') + wordlist=dob.obj.scan(/\S+/) + if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ + if dob.obj =~@regx #/.+?<~\d+;\w\d+;\w\d+>.*/ #watch change + paranum=dob.obj[@regx,3] + @p_num=SiSU_ManpageFormat::ParagraphNumber.new(paranum) + end + x=SiSU_ManpageFormat::FormatTextObject.new(@md,dob) + if dob.is==:heading + manpage_structure(dob) + dob.obj=case dob.ln + when 1; x.heading_body1 + when 2; x.heading_body2 + when 3; x.heading_body3 + when 4; x.heading_body4 + when 5; x.heading_body5 + when 6; x.heading_body6 + end + elsif dob.is==:para + manpage_structure(dob) + else + if dob.obj =~/#{table_message}/ + @manpage[:body] << dob.obj << @br + end + end + if (dob.obj =~/<a name="n\d+">/ \ + and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote + dob.obj='' + end + if dob.obj + dob.obj=dob.obj.gsub(/\s(\[)/m,' \ \1'). + gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,"\n\n"). # watch + gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). + gsub(/#{Mx[:pa_o]}\S+#{Mx[:pa_c]}/,' ') + unless dob.is ==:code + dob.obj=dob.obj.gsub(/<!.+!>/,' '). + gsub(/<:\S+>/,' ') + end + end + dob + end + end + @manpage + end + def publish(manpage) + divider='=' + content=[] + date=if defined? @md.date.modified \ + and @md.date.modified + @md.date.modified + elsif defined? @md.date.published \ + and @md.date.published + @md.date.published + else SiSU_Env::InfoDate.new.year #date missing decide on action + end + manpage_name,manpage_synopsis='','' + manpg={} + proj=SiSU_Env::InfoVersion.instance.get_version + manpage[:open] = %{.TH "#{@md.fnb}" "#{@md.make.manpage['section']}" "#{date}" "#{proj[:version]}" "#{@md.title.main}"#{@md.make.manpage['name']}#{@md.make.manpage['synopsis']}} + content << manpage[:open] + content << manpage[:head] + content << manpage[:body] + content << @@endnotes[:end] if @@dostype =~/endnotes/ + content << manpage[:metadata] + content << manpage[:tail] + Output.new(@md,content).manpage + @@endnotes={ para: [], end: [] } + end + end + class Output <Source + include SiSU_Param + include SiSU_Env + def initialize(md,content) + @md,@content=md,content + end + def manpage #%manpage output + SiSU_Env::FileOp.new(@md).mkdir + filename_manpage=SiSU_Env::FileOp.new(@md).write_file.manpage + @sisu=[] + @content.each do |para| # this is a hack + if para.is_a?(Array) \ + and para.length > 0 + para.each do |line| + line=line.gsub(/\s+$/m,'') + filename_manpage.puts line #unix manpage + end + else filename_manpage.puts para #unix manpage # /^([*=-]|\.){5}/ + end + end + filename_manpage.close + end + end + end +end +__END__ diff --git a/lib/sisu/v2/manpage_format.rb b/lib/sisu/v4/manpage_format.rb index 98428c4a..a102b094 100644 --- a/lib/sisu/v2/manpage_format.rb +++ b/lib/sisu/v4/manpage_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,11 +55,11 @@ ** Description: manpage formatting template =end -module SiSU_Manpage_format - require "#{SiSU_lib}/param" # param.rb +module SiSU_ManpageFormat + require_relative 'param' # param.rb include SiSU_Param include SiSU_Viz - class Paragraph_number + class ParagraphNumber def initialize(paranum) @paranum=/(\d+)/m.match(paranum)[1] end @@ -74,17 +73,12 @@ module SiSU_Manpage_format @paranum.gsub(/(\d+)/,'<a href="#\1">') end end - class Format_text_object + class FormatTextObject def initialize(md,dob) @md,@dob=md,dob -if @dob.class==Hash - puts __FILE__ + ' ' + __LINE__.to_s #+ "-->\n" + caller.inspect -elsif @dob.class==String - puts __FILE__ + ' ' + __LINE__.to_s #+ "-->\n" + caller.inspect -end rgx=/#{Mx[:en_a_o]}[\d*+]+\s+(.+?)#{Mx[:en_a_c]}/ @dob.obj.gsub!(rgx,'\1') if @dob.obj =~rgx - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def scr_endnote_body "<endnote>#{@dob.obj}</endnote> " diff --git a/lib/sisu/v4/odf.rb b/lib/sisu/v4/odf.rb new file mode 100644 index 00000000..807d2832 --- /dev/null +++ b/lib/sisu/v4/odf.rb @@ -0,0 +1,819 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: opendocument text generation + +=end +module SiSU_ODF + require_relative 'particulars' # particulars.rb + include SiSU_Particulars + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + include SiSU_Viz + require_relative 'odf_format' # odf_format.rb + include SiSU_ODF_Format + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'shared_txt' # shared_txt.rb + @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 + class Source + require 'zlib' + require 'find' + def initialize(opt) + @opt=opt + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + @@endnotes_para=[] + end + def read + begin + @md,@env,@dal_array=@particulars.md,@particulars.env,@particulars.dal_array + unless @opt.cmd =~/q/ + tool=(@opt.cmd =~/[MVv]/) \ + ? "#{@env.program.odf_viewer} file://#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Opendocument (ODF:ODT)',tool).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Opendocument (ODF:ODT)',tool).green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}").flow if @opt.cmd =~/[MV]/ + end + SiSU_ODF::Source::Scroll.new(@particulars).songsheet + SiSU_Env::InfoSkin.new(@md).select + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + private + class Scroll <Source + require_relative 'defaults' # defaults.rb + require_relative 'shared_txt' # shared_txt.rb + @@img_count=0 + @@odf={ body: [], head: [], toc: [], metadata: [], tail: [], book_idx: [], endnotes: [] } + @@docstart=true + @@fns=nil + def initialize(particulars) + @md,@env,@dal_array=particulars.md,particulars.env,particulars.dal_array + @vz=SiSU_Env::GetInit.instance.skin + @tab="\t" + @brace_url=SiSU_Viz::Skin.new.url_decoration + @br=(@md.opt.cmd =~/M/) ? '' : '' + #@br=(@md.opt.cmd =~/M/) ? "\n" : '' + end + def songsheet + begin + pre + @data=markup(@dal_array) + post + publish + ensure + unless @md.opt.cmd =~/[MV]/ #check maintenance flag + if @env.processing_path.odt =~/od[ft]/ + #p "rm -r #{@env.processing_path.odt}" if @md.opt.cmd =~/v/ + FileUtils::rm_r(@env.processing_path.odf_pth) + #system("rm -r #{@env.processing_path.odt}") + end + end + end + end + # Used for extraction of endnotes from paragraphs + def extract_endnotes(dob='') + notes=dob.obj.scan(/#{Mx[:en_a_o]}(\d+\s+.+?)#{Mx[:en_a_c]}/)[1] #FIX + @n=[] + notes.each do |n| #high cost to deal with <br> appropriately within odf, consider + n=n.dup.to_s + if n =~/#{Mx[:br_line]}/ + fix=n.split(/#{Mx[:br_line]}/) #watch #added + fix.each do |x| + if x =~/\S+/ then @n << x + end + end + else @n << n + end + end + end + def odf_book_idx + if @md.book_idx + idx_arr,idx_raw=[],SiSU_Particulars::CombinedSingleton.instance.get_idx_raw(@md.opt).raw_idx + idx_raw.each do |x| + x=if x.is_a?(String) + SiSU_ODF_Format::FormatBookIndex.new(x).book_idx_bookmark + else nil + end + idx_arr << x.strip if x.is_a?(String) + end + @@odf[:book_idx]=idx_arr.join + end + end + def odf_metadata + @@odf[:metadata]=SiSU_Metadata::Summary.new(@md).odf.metadata + end + def odf_tail + generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] + lastdone="Last Generated on: #{Time.now}" + rubyv="Ruby version: #{@md.ruby_version}" + sc=if @md.sc_info + "Source file: #{@md.sc_filename}\nVersion number: #{@md.sc_number}\nVersion date: #{@md.sc_date}\n" + else '' + end + url=@md.fnb + fn=@md.file.base_filename.manifest + manifest="#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}" + @@odf[:tail] << %{<text:p text:style-name="P_normal">Available document outputs: <br /> <<text:a xlink:type="simple" xlink:href="#{manifest}">#{manifest}</text:a>></text:p>} + @@odf[:tail] << %{\n<text:p text:style-name="P_normal">SiSU: <<text:a xlink:type="simple" xlink:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xlink:type="simple" xlink:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>} + @@odf[:tail] << "\n</office:text></office:body></office:document-content>" + end + def set_bookmark_tag(dob) + tags=SiSU_ODF_Format::Tags.new.set_bookmark_tag(dob) + end + def heading(dob,p_num) + m=/#{$1}/ + breakpage='' + if @md.fns \ + and @md.fns != '' \ + and @md.fns !=@@fns + @@docstart=true + @@fns=@md.fns + end + unless @@docstart + breakpage=if (@md.pagenew or @md.pagebreak) \ + and (@md.pagenew =~ m or @md.pagebreak =~m) + '<text:p text:style-name="P_normal_page_new"> </text:p>' + else '' + end + end + @@docstart=false + dob.tmp=dob.obj + dob.obj=%{#{breakpage}<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:h>} + dob + end + def toc(dob,p_num) + m=/#{$1}/ + hardspace=(dob.lv =~/[A-C]/i) \ + ? '<text:p text:style-name="Standard"/>' + : '' + toc_heading=dob.ocn \ + ? %{<text:bookmark-ref text:reference-format="text" text:ref-name="#{dob.ocn}">#{dob.tmp}</text:bookmark-ref>} + : dob.tmp + dob.obj=%{<text:h text:style-name="H_#{dob.ln}" text:outline-level="#{dob.ln}">#{toc_heading}</text:h>#{hardspace}} + dob + end + def image_src(i) + image_source=if @md.fns =~/\.ss[tm]$/ \ + and FileTest.file?("#{@env.path.image_source_include}/#{i}") #review + @env.path.image_source_include + elsif @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1] + img_src=pt + '/image' + if FileTest.file?("#{img_src}/#{i}") + img_src + else + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:",%{"#{i}" missing},"search locations: #{@env.path.image_source_include_local},#{@env.path.image_source_include_remote} and #{@env.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ + nil + end + elsif @md.fns =~/\.ss[tm]$/ \ + and FileTest.file?("#{@env.path.image_source_include_local}/#{i}") #review + @env.path.image_source_include_local + elsif @md.fns =~/\.ss[tm]$/ \ + and FileTest.file?("#{@env.path.image_source_sisu_includes}/#{i}") + @env.path.image_source_sisu_includes + elsif @md.fns =~/\.-ss[tm]$/ \ + and FileTest.file?("#{@env.path.image_source_include_remote}/#{i}") + @env.path.image_source_include_remote + else + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:",%{"#{i}" missing},"search locations: #{@env.path.image_source_include_local},#{@env.path.image_source_include_remote} and #{@env.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ + nil + end + end + def image_odf(img) + # copy image to od image directory (unless exists) + # divide pixel dimension by 37.79485 and retain 3 decimal places + m,u=img[1],img[2] + i=/^(\S+?\.(?:png|jpg|gif))/.match(m).captures.join if m =~/^(\S+?\.(?:png|jpg|gif))/ + c=/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/.match(m).captures.join if m =~/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/ + w,h=/\s(\d+)x(\d+)/.match(m).captures if m =~/\s\d+x\d+/ + w=(w.to_i/37.79485).to_s + h=(h.to_i/37.79485).to_s + h=/([0-9]+\.\d{0,3})/.match(h).captures.join + w=/([0-9]+\.\d{0,3})/.match(w).captures.join + image_source=image_src(i) + pwd=Dir.pwd + if image_source + if FileTest.file?("#{image_source}/#{i}") + FileUtils::cp("#{image_source}/#{i}","#{@env.processing_path.odt}/Pictures/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{image_source}/#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + img=if i.to_s =~/jpg|png|gif/ \ + and h.to_s =~/\d/ \ + and w.to_s =~/\d/ + @@img_count +=1 + %{<draw:frame draw:style-name="fr1" draw:name="graphics#{@@img_count}" text:anchor-type="as-char" svg:width="#{w}cm" svg:height="#{h}cm" draw:z-index="2"><draw:image xlink:href="Pictures/#{i}" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>#{c}} #anchor-type: as-char or paragraph or char or ... + else %{<text:p text:style-name="P_normal">[image omitted]</text:p>} + end + end + def image(dob) + m=if dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/) + elsif dob.obj =~/#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}image/ + dob.obj.scan(/(#{Mx[:lnk_o]}[ ]*(.+?)[ ]*#{Mx[:lnk_c]}(image))/) + else nil + end + if m then m.each do |i| + cont,url=i[1],i[2] + cont=cont.gsub(/([)(\]\[])/,"\\\\\\1"). + gsub(/([+?])/,"\\\\\\1") # incorrect handling of + + url=url.gsub(/([+?])/,"\\\\\\1") + dob.obj=dob.obj.sub(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}image/m,image_odf(i)). + sub(/#{Mx[:lnk_o]}[ ]*#{cont}[ ]*#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,image_odf(i)). + sub(/\\([)(\]\[?])/,'\1') #clumsy fix + end + m=nil + end + dob + end + def text_link_odf(txt,url,trail) + txt=txt.gsub(/(\\\+)/,'+') #this is convoluted, and risky :-( + url=url.gsub(/(\\\+)/,'+') #this is convoluted, and risky :-( + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map + t=case url + when /^https?:/ + %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} + when /^:/ # site same document collection html link + url=url.gsub(/^:/,"#{@env.url.root}/") + %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} + when /^\.\.\// # site same document collection html link + url=url.gsub(/^\.\.\//,"#{@env.url.root}/") + %{<text:a xlink:type="simple" xlink:href="#{url}">#{txt.strip}</text:a>#{trail}} + else # document internal link + if map_nametags[url] \ + and map_nametags[url][:segname] + else p "NOT FOUND name_tags: #{url}" + end + t=map_nametags[url] \ + && map_nametags[url][:segname] \ + ? %{<text:a xlink:type="simple" xlink:href="#{@env.url.root}/#{@md.fnb}/#{map_nametags[url][:segname]}#{Sfx[:html]}##{url}">#{txt.strip}</text:a>#{trail}} + : %{#{txt.strip}#{trail}} + end + t + end + def text_link_odf_bookmark(txt,url,trail) + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map + %{<text:bookmark-ref text:reference-format="text" text:ref-name="#{url}">#{txt.strip}</text:bookmark-ref>#{trail}} + end + def text_link(dob) + m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]})/) #sort + if m + m.each do |i| + txt,url,trail=i[1],i[2] + txt=txt.gsub(/([)(\]\[])/,"\\\\\\1"). + gsub(/([+?*])/,"\\\\\\1") # problems with + + url=url.gsub(/([+?])/,"\\\\\\1") # problems with + + dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:url_o]}#{url}#{Mx[:url_c]}/m,text_link_odf(txt,url,trail)). #make sure trailing ']' are not caught in url + gsub(/\\([)(\]\[?])/,'\1') #clumsy fix + end + m=nil + end + dob + end + def text_link_relative(dob) + m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]})/) #sort + if m + m.each do |i| + txt,url,trail=i[1],i[2] + txt=txt.gsub(/([)(\]\[])/,"\\\\\\1"). + gsub(/([+?*])/,"\\\\\\1") # problems with + + url=url.gsub(/([+?])/,"\\\\\\1") # problems with + + dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{url}#{Mx[:rel_c]}/m,text_link_odf_bookmark(txt,url,trail)). #make sure trailing ']' are not caught in url + gsub(/\\([)(\]\[?])/,'\1') #clumsy fix + end + m=nil + end + dob + end + def text_link_relative_(dob) + m=dob.obj.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]})/) #sort + if m + m.each do |i| + txt,url,trail=i[1],i[2] + txt=txt.gsub(/([)(\]\[])/,"\\\\\\1") + dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}[ ]*#{txt}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{url}#{Mx[:rel_c]}/m,text_link_odf(txt,url,trail)). #make sure trailing ']' are not caught in url + gsub(/\\([)(\]\[?])/,'\1') #clumsy fix + end + m=nil + end + dob + end + def normal(dob,p_num) #P1 - P3 + dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration + gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration + dob.obj= if dob.is==:para \ + and dob.indent.to_s =~/[0-9]/ \ + and dob.indent == dob.hang + %{<text:p text:style-name="P_indent_#{dob.indent}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>} + elsif dob.is==:para \ + and dob.hang.to_s =~/[0-9]/ \ + and dob.indent != dob.hang + %{<text:p text:style-name="P_h#{dob.hang}_i#{dob.indent}">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>} + else %{<text:p text:style-name="P_normal">#{p_num[:set_ref]}#{set_bookmark_tag(dob)}#{dob.obj}#{p_num[:display]}</text:p>} + end + dob + end + def fontface(dob) + end + def footnote_urls(str) + str=str.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) + str=text_link(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + str=text_link_relative(str) if str =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + str + end + def footnote(t_o) + str=if defined? t_o.obj then t_o.obj + elsif t_o.is_a?(String) then t_o + end + if str + @astx||=10000 + @astxs||=20000 + if str =~/#{Mx[:en_a_o]}\d+\s+/ + str=str.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,'<text:note text:id="ftn\1" text:note-class="footnote"><text:note-citation>\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>') + end + if str =~/#{Mx[:en_a_o]}([*]+)\s+/ + a=$1.gsub(/([*])/,"\\\\\\1") + str=str.gsub(/#{Mx[:en_a_o]}([*]+)\s+(.+?)#{Mx[:en_a_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) + @astxs+=1 + end + if str=~/#{Mx[:en_a_o]}[*+]+\s/ + asterisk=str.scan(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/) + asterisk.each do |x| + a=x[0].gsub(/([*+])/,"\\\\\\1") + str=group_clean(str) + str=footnote_urls(str) + str=str.gsub(/#{Mx[:en_a_o]}(#{a})\s+(.+?)#{Mx[:en_a_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) + @astx+=1 + end + end + if str=~/#{Mx[:en_b_o]}[*+]\d+\s/ + asterisk=str.scan(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/) + asterisk.each do |x| + a=x[0].gsub(/([*+])/,"\\\\\\1") + str=group_clean(str) + str=footnote_urls(str) + str=str.gsub(/#{Mx[:en_b_o]}(#{a})\s+(.+?)#{Mx[:en_b_c]}/,%{<text:note text:id="ftn#{@astx.to_s}" text:note-class="footnote"><text:note-citation text:label="\\1">\\1</text:note-citation><text:note-body><text:p text:style-name="Footnote"> \\2</text:p><text:p text:style-name="Footnote"/></text:note-body></text:note>}) + @astx+=1 + end + end + end + if defined? t_o.obj then t_o.obj=str + elsif t_o.is_a?(String) then t_o=str + end + t_o + end + def group_clean(str) + str=str.gsub(/&nbsp;| |#{Mx[:nbsp]}/,' '). + gsub(/</,'<').gsub(/>/,'>'). + gsub(/<(text:span text:style-name="Span_\S+?"|\/text:span)>/,'<\1>'). #works, not ideal + gsub(/#{Mx[:br_line]}/,'<br />'). + gsub(/<br(?:\s+\/)?>/,'<br />') + end + def poem(dob,p_num) #P4 #same as group + parray=[] + dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| + set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' + parablock=group_clean(parablock) + parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ + end + dob.obj=parray.join \ + + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ + + '<text:p text:style-name="Standard"/>' + dob + end + def group(dob,p_num) #P4 #same as verse + parray=[] + dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration + gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration + dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| + set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' + parablock=group_clean(parablock) + parablock=parablock.gsub(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'<text:a xlink:type="simple" xlink:href="\1">'). + gsub(/<(\/text:a)>/,'<\1>'). + gsub(/<(text:note text:id=.+?)>/,'<\1>'). + gsub(/<(text:p text:style-name="Footnote")>/,'<\1>'). + gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') + parablock=footnote(parablock) + parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ + end + dob.obj=parray.join \ + + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ + + '<text:p text:style-name="Standard"/>' + dob + end + def block(dob,p_num) #P4 #same as verse + parray=[] + dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration + gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration + dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| + set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' + parablock=group_clean(parablock) + parablock=parablock.gsub(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'<text:a xlink:type="simple" xlink:href="\1">'). + gsub(/<(\/text:a)>/,'<\1>'). + gsub(/<(text:note text:id=.+?)>/,'<\1>'). + gsub(/<(text:p text:style-name="Footnote")>/,'<\1>'). + gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') + parablock=footnote(parablock) + parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ + end + dob.obj=parray.join \ + + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ + + '<text:p text:style-name="Standard"/>' + dob + end + def code(dob,p_num) #P5 + if dob.is==:code + dob.obj=dob.obj.gsub(/\s\s/,'  ') + parray=[] + dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| + set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' + parablock=group_clean(parablock) + parablock=parablock.gsub(/^\s*$/,'<br />'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration + parray << %{<text:p text:style-name="P_code">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ + end + dob.obj=parray.join \ + + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ + + '<text:p text:style-name="Standard"/>' + end + dob + end + def table(dob,p_num) # + if dob.is ==:table + table=SiSU_ODF_Format::Table.new(@md,dob,p_num) + dob=table.table + end + dob + end + def obj_break(dob) + if dob.is ==:break + br=SiSU_ODF_Format::FormatObjBreak.new(@md,dob) + if dob.obj==Mx[:br_page] \ + or dob.obj==Mx[:br_page_new] + dob=br.br_page + elsif dob.obj==Mx[:br_obj] + dob=br.obj_sep + end + end + dob + end + def odf_structure(md,dob) + @md,@dob=md,dob + dob=if dob.is !=:code + dob=image(dob) if dob.obj =~/#{Mx[:lnk_o]}[ ]*\S+?\.(?:png|jpg|gif)\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ + dob=text_link(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + dob=text_link_relative(dob) if dob.obj =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + dob + else dob + end + p_num={ display: '', set_ref: '' } + if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ + if defined? dob.ocn \ + and dob.ocn.is_a?(Fixnum) + p_num=SiSU_ODF_Format::ParagraphNumber.new(dob.ocn).set_bookmark_and_display + #p_num=SiSU_ODF_Format::ParagraphNumber.new(dob.ocn).set_ref_and_display + end + end + dob=footnote(dob) + if dob.is==:heading + @@odf[:body] << heading(dob,p_num).obj << @br*2 + if SiSU_Env::ProcessingSettings.new(md).build.toc? + if dob.lv =~/[A-C1]/i + @@odf[:toc] << toc(dob,p_num).obj + end + end + elsif dob.is ==:verse + @@odf[:body] << poem(dob,p_num).obj << @br*2 + elsif dob.is==:group + @@odf[:body] << group(dob,p_num).obj << @br*2 + elsif dob.is==:block + @@odf[:body] << block(dob,p_num).obj << @br*2 + elsif dob.is==:code + @@odf[:body] << code(dob,p_num).obj << @br*2 + elsif dob.is==:table #elsif dob.obj =~ /<!Th?¡/u + @@odf[:body] << table(dob,p_num).obj << @br*2 + elsif dob.is==:break + @@odf[:body] << obj_break(dob).obj << @br*2 + else + @@odf[:body] << normal(dob,p_num).obj << @br*2 # main text, contents, body KEEP + end + @@endnotes_para=[] + end + def tidywords(wordlist) + wordlist + end + def markup(data) # Used for major markup instructions + safe_characters=/[^a-zA-Z0-9}{\/?,."';:)(><\-_&!@%~#\]\[*=$| \n+`#{Mx[:tc_p]}]/u + dir=SiSU_Env::InfoEnv.new(@md.fns) + dir.path.odt_bld + @data_mod,@endnotes,@level,@cont,@copen,@odf_contents_close=Array.new(6){[]} + @rcdc=false + (0..6).each { |x| @cont[x]=@level[x]=false } + (4..6).each { |x| @odf_contents_close[x]='' } + odf_tail #($1,$2) + fix=[] + bullet=image_src('bullet_09.png') + if bullet + if FileTest.file?("#{bullet}/bullet_09.png") + FileUtils::cp("#{bullet}/bullet_09.png","#{@env.processing_path.odt}/Pictures/.") + else STDERR.puts %{\t*WARN* did not find image - "#{bullet}/bullet_09.png" [#{__FILE__}:#{__LINE__}]} + end + end + odf_book_idx + odf_metadata + data.each do |dob| + #p dob.obj if dob.obj =~safe_characters and @md.opt.cmd =~/V/ #KEEP + dob.obj='' if dob.obj =~/#{Mx[:lv_o]}\d+:.*?#{Mx[:lv_c]}.+?#{Mx[:pa_non_object_dummy_heading]}/ #fix Mx[:lv_o] + para_array=[] + dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>') + word=dob.obj.scan(/\S+|\n/) + if word + word.each do |w| # _ - / # | : ! ^ ~ + unless dob =~/^(?:#{Rx[:meta]}|%+ )/m + w=w.gsub(/&#(?:126|152);/,'~'). #126 usual + gsub(/ /,' ') + if w !~/(?:&\S{2,7}?;)+/ + w=w.gsub(/&/,'&') + end + if w !~/&\S{1,7}?;(?:&\S{1,7}?;)+/ #imperfect + w=w.gsub(/(&\S{1,7};)+&/,'\1&') + end + end + para_array << w + end + dob.obj=para_array.join(' ') + dob.obj=dob.obj.strip + end + if dob.is==:code #{Mx[:gr_o]}code#{Mx[:gr_c]}/ #fix #code-block: angle brackets special characters #fix + dob.obj=dob.obj.gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>'). + gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>') + end + if dob.of==:block + dob.obj=dob.obj.gsub(/#{Mx[:gl_bullet]}/,'● ') + end + dob.obj=dob.obj.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). + gsub(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'<text:bookmark-start text:name="\1"/><text:bookmark-end text:name="\1"/>'). #check + gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/#{Mx[:mk_o]}[~-]##{Mx[:mk_c]}/,'') + if dob.is==:para \ + and dob.bullet_ + dob.obj='<draw:frame draw:style-name="gr1" text:anchor-type="as-char" svg:width="0.22cm" svg:height="0.22cm" draw:z-index="2"><draw:image xlink:href="Pictures/bullet_09.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame> ' + + dob.obj + end + dob.obj=dob.obj.gsub(/#{Mx[:br_line]}/,'<br />'). + gsub(/©/,'©'). #too arbitrary + gsub(/.+?<-#>/,''). # remove dummy headings (used by html) #check + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, + '<text:span text:style-name="Span_bold">\1</text:span>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, + '<text:span text:style-name="Span_italic">\1</text:span>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, + '<text:span text:style-name="Span_underscore">\1</text:span>'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, + '<text:span text:style-name="Span_superscript">\1</text:span>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, + '<text:span text:style-name="Span_subscript">\1</text:span>'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, + '<text:span text:style-name="Span_monospace">\1</text:span>'). + gsub(//u,'-'). + gsub(/ /u, ' '). # space identify + gsub(/ /u, ' '). # space identify + gsub(/·/u,'*'). + gsub(/[–—]/u,'-'). #— – chk + gsub(/ < /i,'<'). + gsub(/\\copy(?:right)?\b/,'©'). + gsub(/\\trademark\b|\\tm\b/,'®'). + gsub(/\44/,'$'). #$ watch + gsub(/<a href=".+?">(.+?)<\/a>/,'\1'). + gsub(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links + wordlist=dob.obj.scan(/\S+/) + dob.obj=tidywords(wordlist).join(' ').strip + @rcdc=true if @rcdc==false \ + and (dob.obj =~/~metadata/ or dob =~/#{Mx[:lv_o]}1:meta#{Mx[:lv_x]}\s*Document Information/) #fix Mx[:lv_o] + if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ #check + if defined? dob.ocn and dob.ocn =~/\d+/ + @p_num=SiSU_ODF_Format::ParagraphNumber.new(dob.ocn) + end + if dob.is ==:heading \ + || dob.is ==:para \ + || dob.is ==:group \ + || dob.is ==:verse \ + || dob.is ==:code \ + || dob.is ==:table \ + || dob.is ==:break + odf_structure(@md,dob) + end + if dob.obj ## Clean Prepared Text + dob.obj=dob.obj.gsub(/<!.+!>/,' '). + gsub(/#{Mx[:tc_o]}.+?#{Mx[:tc_c]}/,' '). + gsub(/<:\S+>/,' ') + end + end + end + end + def pre + table=if @md.flag_tables + x=<<WOK + <style:style style:name="Table1" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> + <style:style style:name="Table1.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> + <style:style style:name="Table1.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> + <style:style style:name="Table1.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> + <style:style style:name="Table1.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> + <style:style style:name="Table1.E" style:family="table-column"><style:table-column-properties style:column-width="3.399cm" style:rel-column-width="13107*"/></style:style> + <style:style style:name="Table1.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> + <style:style style:name="Table1.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> + <style:style style:name="Table1.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> + <style:style style:name="Table2" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> + <style:style style:name="Table2.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> + <style:style style:name="Table2.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> + <style:style style:name="Table2.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> + <style:style style:name="Table2.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> + <style:style style:name="Table2.E" style:family="table-column"><style:table-column-properties style:column-width="3.999cm" style:rel-column-width="13107*"/></style:style> + <style:style style:name="Table2.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> + <style:style style:name="Table2.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> + <style:style style:name="Table2.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> + <style:style style:name="Table2.I" style:family="table-column"><style:table-column-properties style:column-width="1.8887cm" style:rel-column-width="7281*"/></style:style> + <style:style style:name="Table2.J" style:family="table-column"><style:table-column-properties style:column-width="1.6999cm" style:rel-column-width="6553*"/></style:style> + <style:style style:name="Table2.K" style:family="table-column"><style:table-column-properties style:column-width="1.5453cm" style:rel-column-width="5957*"/></style:style> + <style:style style:name="Table2.L" style:family="table-column"><style:table-column-properties style:column-width="1.416cm" style:rel-column-width="5461*"/></style:style> + <style:style style:name="Table2.M" style:family="table-column"><style:table-column-properties style:column-width="1.307" style:rel-column-width="5041*"/></style:style> + <style:style style:name="Table2.N" style:family="table-column"><style:table-column-properties style:column-width="1.214cm" style:rel-column-width="4681*"/></style:style> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + else '' + end + breakpage=if @md.pagenew \ + or @md.pagebreak + ' fo:break-before="page"' + else '' + end + x=<<WOK +<?xml version="1.0" encoding="UTF-8"?> +<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"><office:scripts/> +<office:font-face-decls><style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-adornments="Book" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="Inconsolata" svg:font-family="Inconsolata" style:font-adornments="Regular" style:font-pitch="fixed"/><style:font-face style:name="Liberation Mono" svg:font-family="'Liberation Mono'" style:font-adornments="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-adornments="ExtraLight" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/><style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/></office:font-face-decls> +<office:automatic-styles> +#{table} + <style:style style:name="P_table_cell" style:family="paragraph" style:parent-style-name="Table_Contents"><style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/></style:style> +</office:automatic-styles> +<office:body> + <office:text text:use-soft-page-breaks="true"> + <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> + <text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + @@odf[:head] << x + end + def post + end + def publish + divider='=' + content=[] + br_pg='<text:p text:style-name="P_normal_page_new"> </text:p>' + data=@data + content << + @@odf[:head] << + @@odf[:toc] << + br_pg << + @@odf[:body] << + @@odf[:book_idx] << + br_pg << + @@odf[:metadata] << + @@odf[:tail] + SiSU_ODF::Source::Output.new(content,@md,@env).odf + @@odf={ head: [], toc: [], body: [], tail: [], book_idx: [], metadata: [] } + end + end + class Output <Source + def initialize(content,md,env) + @content,@md,@env=content,md,env + end + def odf #%odf output + env=SiSU_Env::FileOp.new(@md) + env.mkdir + header=SiSU_ODF_Format::ODT_Head_1_2.new(@md) + filename="#{@env.processing_path.odt}/manifest.rdf" + od=File.new(filename,'w+') + od << header.manifest_rdf + od.close + filename="#{@env.processing_path.odt}/META-INF/manifest.xml" + od=File.new(filename,'w+') + od << header.meta_inf_manifest_xml(@md) + od.close + filename="#{@env.processing_path.odt}/meta.xml" + od=File.new(filename,'w+') + od << header.meta_xml + od.close + filename="#{@env.processing_path.odt}/settings.xml" + od=File.new(filename,'w+') + od << header.settings_xml + od.close + filename="#{@env.processing_path.odt}/styles.xml" + od=File.new(filename,'w+') + od << header.styles_xml + od.close + filename="#{@env.processing_path.odt}/mimetype" + od=File.new(filename,'w+') + od << header.mimetype + od.close + env.make_path(@env.processing_path.odt) + env.make_path(@md.file.output_path.odt.dir) + filename="#{@env.processing_path.odt}/content.xml" + od=File.new(filename,'w+') + @content.compact.each do |para| # this is a hack + od.puts para unless para =~/\A\s*\Z/ + end + od.close + opendoc=@md.file.base_filename.odt #watch where output by language + FileUtils::mkdir_p(@md.file.output_path.odt.dir) unless FileTest.directory?(@md.file.output_path.odt.dir) + if FileTest.directory?(@env.processing_path.odt) + pwd=Dir.pwd + Dir.chdir(@env.processing_path.odt) + system(" + zip -qr #{opendoc} * + ") + FileUtils::mv(opendoc, @md.file.place_file.odt.dir) + Dir.chdir(pwd) + end + end + end + end +end +__END__ diff --git a/lib/sisu/v4/odf_format.rb b/lib/sisu/v4/odf_format.rb new file mode 100644 index 00000000..adfcf684 --- /dev/null +++ b/lib/sisu/v4/odf_format.rb @@ -0,0 +1,658 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: opendocument formatting, default opendocument template + +=end +module SiSU_ODF_Format + require_relative 'param' # param.rb + include SiSU_Param + include SiSU_Viz + class ParagraphNumber + def initialize(paranum) + @paranum=/(\d+)/m.match(paranum.to_s)[1] + end + def set_ref_and_display + set_ref=@paranum.gsub(/(\d+)/,' <text:span text:style-name="Span_subscript"><text:reference-mark-start text:name="\1"/><text:reference-mark-end text:name="\1"/></text:span>') + disp=@paranum.gsub(/(\d+)/,' <text:span text:style-name="Span_subscript">[\1]</text:span>') + ocn={ display: disp, set_ref: set_ref } + end + def set_bookmark_and_display + set_ref=@paranum.gsub(/(\d+)/,' <text:span text:style-name="Span_subscript"><text:bookmark-start text:name="\1"/><text:bookmark-end text:name="\1"/></text:span>') + disp=@paranum.gsub(/(\d+)/,' <text:span text:style-name="Span_subscript">[\1]</text:span>') + ocn={ display: disp, set_ref: set_ref } + end + def name + @paranum.gsub(/(\d+)/,'<a name="\1"></a>') + end + def goto + @paranum.gsub(/(\d+)/,'<a href="#\1">') + end + end + class FormatBookIndex + def initialize(idx_str) + @idx_str=idx_str + end + def book_idx_bookmark + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags + rgx_bookmark=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}#?\S+?#{Mx[:rel_c]}/m + while @idx_str =~/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+)#{Mx[:lnk_c]}#{Mx[:rel_o]}#?(\S+?)#{Mx[:rel_c]}/m + link,url=$1,$2 + link,url=link.strip,url.strip + @idx_str=@idx_str.gsub(/&/m,"&") + ocn_lnk=if map_nametags[url] \ + and map_nametags[url][:ocn] + map_nametags[url][:ocn] + else nil + end + ocn_lnk=(url=~/^\d+$/ ? url : ocn_lnk) + if ocn_lnk and not ocn_lnk.empty? + @idx_str=@idx_str.sub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, + '<text:span text:style-name="Span_bold">\1</text:span>'). + sub(rgx_bookmark, + %{<text:bookmark-ref text:reference-format="text" text:ref-name="#{url}">#{link.strip}</text:bookmark-ref>}) + else + puts %{name tag: "#{url}" not found} + @idx_str.sub!(rgx_bookmark,"#{link}") + end + end + @idx_str=@idx_str.gsub(/#{Xx[:protect]}/m,''). + sub(/,\s*$/m,''). + gsub(/\n/,'') + @idx_str='<text:p text:style-name="P_normal">' + @idx_str + '</text:p>' + end + end + class Tags + def set_bookmark_tag(dob) + tags='' + if dob.tags.length > 0 + dob.tags.each do |tag| + tags +=%{ <text:span text:style-name="Span_subscript"><text:bookmark-start text:name="#{tag}"/><text:bookmark-end text:name="#{tag}"/></text:span>} + end + end + tags + end + end + class FormatTextObject + def initialize(md,t_o) + @md,@t_o=md,t_o + if t_o.is_a?(Hash) + @txt =t_o[:txt] || nil + else + p t_o.class + p caller + end + rgx=/#{Mx[:en_a_o]}\d+\s+(.+?)#{Mx[:en_a_c]}/ + @txt=@txt.gsub(rgx,'\1') if @txt =~rgx + @vz=SiSU_Env::GetInit.instance.skin + end + def scr_endnote_body + "<endnote>#{@txt}</endnote> " + end + def heading_body1 + end + def heading_body2 + end + def heading_body3 + end + def heading_body4 + end + def heading_body5 + end + def heading_body6 + end + end + class Table + @@tablehead,@@table_counter=0,0 #reinitialise on new file + @@tablefoot=[] #watch + @@fns='' + def initialize(md,dob,p_num) + @md,@dob,@p_num=md,dob,p_num + @txt=dob.obj + @vz=SiSU_Env::GetInit.instance.skin + if @md.fns != @@fns + @@table_counter=0 + @@fns=@md.fns + end + end + def table_head_open(count) + type=(@dob.head_) \ + ? 1 + : 2 + alpha=case @dob.cols + when 1; 'A' + when 2; 'B' + when 3; 'C' + when 4; 'D' + when 5; 'E' + when 6; 'F' + when 7; 'G' + when 8; 'H' + when 9; 'I' + when 10; 'J' + when 11; 'K' + when 12; 'L' + when 13; 'M' + when 14; 'N' + else 'D' + end + tag=SiSU_ODF_Format::Tags.new.set_bookmark_tag(@dob) + %{<table:table table:name="Table#{count}" table:style-name="Table#{type}">#{@p_num[:set_ref]}#{tag}#{@br}} + + %{<table:table-column table:style-name="Table#{type}.#{alpha}" table:number-columns-repeated="#{@dob.cols}"/>#{@br}} + end + def table_close(tablefoot='') + '</table:table>' \ + + %{<text:p text:style-name="P_group">#{@p_num[:display]}</text:p>} + end + def table_tag_cell(str,i) + txt_name_cell=if i==0 \ + and @dob.head_ + 'Table_Heading' + else 'P_table_cell' + end + str=str.gsub(/^~$/,'') # tilde / empty cell + %{<table:table-cell office:value-type="string">#{@br}} + + %{<text:p text:style-name="#{txt_name_cell}">#{@br}} + + %{#{str}} + + %{</text:p>#{@br}} + + %{</table:table-cell>#{@br}} + end + def table_tag_row(str,i) + %{<table:table-row>#{@br}} + + %{#{str}} + + %{</table:table-row>#{@br}} + end + def table_tag_row_dump(str,i) + txt_name_row=if i==0 \ + and @dob.head_ + 'Table_Heading' + else 'P_table_cell' + end + %{<table:table-row>#{@br}} + + %{<table:table-cell office:value-type="string">#{@br}} + + %{<text:p text:style-name="#{txt_name_row}">#{@br}} + %{#{str}} + + %{</text:p>#{@br}} + + %{</table:table-cell>#{@br}} + + %{</table:table-row>#{@br}} + end + def table_row(row,i) + row='' if row =~/^<!$/ + m=row[/<!f(.+?)!>/,1] + @@tablefoot << m if m + row=row.gsub(/<!f.+?!>/,'') + @cells=[] + row.split(/\s*#{Mx[:tc_p]}/).each do |cell| + @cells << table_tag_cell(cell,i) + end + row=@cells.join + row=table_tag_row(row,i) + row + end + def table + @@table_counter+=1 + table_head_open(@@table_counter) + @table=[] + @dob.obj.split(/\s*#{Mx[:tc_c]}/).each_with_index do |r,i| + @table << table_row(r,i) + end + @dob.obj= table_head_open(@@table_counter) + @table.join + table_close + @dob + end + end + class ODT_Head_1_2 + def initialize(md) + @md=md + @generator="#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" + end + def manifest_rdf + x=<<WOK +<?xml version="1.0" encoding="utf-8"?> +<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about="styles.xml"> + <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/odf#StylesFile"/> + </rdf:Description> + <rdf:Description rdf:about=""> + <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="styles.xml"/> + </rdf:Description> + <rdf:Description rdf:about="content.xml"> + <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/odf#ContentFile"/> + </rdf:Description> + <rdf:Description rdf:about=""> + <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="content.xml"/> + </rdf:Description> + <rdf:Description rdf:about=""> + <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#Document"/> + </rdf:Description> +</rdf:RDF> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + end + def meta_inf_manifest_xml(md) + images=[' <manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/bullet_09.png"/>'] + if md.ec[:image].length > 0 + md.ec[:image].each do |i| + images<<<<WOK + <manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/#{i}"/> +WOK + end + end + images=images.join('') + x=<<WOK +<?xml version="1.0" encoding="UTF-8"?> +<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"> + <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:version="1.2" manifest:full-path="/"/> + <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/> + <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/> + #{images} + <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/> + <manifest:file-entry manifest:media-type="application/rdf+xml" manifest:full-path="manifest.rdf"/> + <manifest:file-entry manifest:media-type="image/png" manifest:full-path="Thumbnails/thumbnail.png"/> + <manifest:file-entry manifest:media-type="application/binary" manifest:full-path="layout-cache"/> + <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/> + <manifest:file-entry manifest:media-type="" manifest:full-path="Configurations2/accelerator/current.xml"/> + <manifest:file-entry manifest:media-type="application/vnd.sun.xml.ui.configuration" manifest:full-path="Configurations2/"/> +</manifest:manifest> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + end + def meta_xml + x=<<WOK +<?xml version="1.0" encoding="UTF-8"?> +<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" office:version="1.2"> + <office:meta> + <meta:generator>#{@generator}</meta:generator> + <meta:creation-date>#{@md.generated}</meta:creation-date> + <dc:date>#{@md.generated}</dc:date> + <dc:language>en-US</dc:language> + </office:meta> +</office:document-meta> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + end + def settings_xml + x=<<WOK +<?xml version="1.0" encoding="UTF-8"?> +<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.2"> + <office:settings> + <config:config-item-set config:name="ooo:view-settings"> + <config:config-item config:name="ViewAreaTop" config:type="int">0</config:config-item> + <config:config-item config:name="ViewAreaLeft" config:type="int">0</config:config-item> + <config:config-item config:name="ViewAreaWidth" config:type="int">0</config:config-item> + <config:config-item config:name="ViewAreaHeight" config:type="int">0</config:config-item> + <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item> + <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item> + <config:config-item-map-indexed config:name="Views"> + <config:config-item-map-entry> + <config:config-item config:name="ViewId" config:type="string">view2</config:config-item> + <config:config-item config:name="ViewLeft" config:type="int">0</config:config-item> + <config:config-item config:name="ViewTop" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleLeft" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleTop" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleRight" config:type="int">0</config:config-item> + <config:config-item config:name="VisibleBottom" config:type="int">0</config:config-item> + <config:config-item config:name="ZoomType" config:type="short">0</config:config-item> + <config:config-item config:name="ViewLayoutColumns" config:type="short">2</config:config-item> + <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">true</config:config-item> + <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item> + <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item> + </config:config-item-map-entry> + </config:config-item-map-indexed> + </config:config-item-set> + <config:config-item-set config:name="ooo:configuration-settings"> + <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item> + <config:config-item config:name="MathBaselineAlignment" config:type="boolean">false</config:config-item> + <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item> + <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/> + <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item> + <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item> + <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item> + <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item> + <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item> + <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item> + <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item> + <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item> + <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item> + <config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item> + <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item> + <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item> + <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item> + <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">true</config:config-item> + <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/> + <config:config-item config:name="PrinterSetup" config:type="base64Binary"/> + <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item> + <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrinterName" config:type="string"/> + <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item> + <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item> + <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item> + <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item> + <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">true</config:config-item> + <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintFaxName" config:type="string"/> + <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item> + <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item> + <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item> + <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item> + <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item> + <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item> + <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/> + <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item> + <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item> + <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item> + <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item> + <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item> + <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item> + </config:config-item-set> + </office:settings> +</office:document-settings> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + end + def styles_xml + x=<<WOK +<?xml version="1.0" encoding="UTF-8"?> +<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"> + <office:font-face-decls> + <style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-adornments="Book" style:font-family-generic="modern" style:font-pitch="fixed"/> + <style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/> + <style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/> + <style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/> + <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/> + </office:font-face-decls> + <office:styles> + <style:default-style style:family="graphic"> + <style:graphic-properties fo:wrap-option="wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/> + <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"> + <style:tab-stops/> + </style:paragraph-properties> + <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none"/> + </style:default-style> + <style:default-style style:family="paragraph"> + <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/> + <style:text-properties style:use-window-font-color="true" style:font-name="Nimbus Roman No9 L" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Nimbus Sans L" style:font-size-asian="12pt" style:language-asian="zxx" style:country-asian="none" style:font-name-complex="Nimbus Sans L" style:font-size-complex="12pt" style:language-complex="zxx" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/> + </style:default-style> + <style:default-style style:family="table"> + <style:table-properties table:border-model="collapsing"/> + </style:default-style> + <style:default-style style:family="table-row"> + <style:table-row-properties fo:keep-together="auto"/> + </style:default-style> + <style:style style:name="Standard" style:family="paragraph" style:class="text"/> + <style:style style:name="Text_body" style:display-name="Text body" style:family="paragraph" style:class="text"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm"/></style:style> + <style:style style:name="P_page_break" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-before="page"/></style:style> + <style:style style:name="P_normal" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> + <style:style style:name="P_normal_page_new" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:break-after="page"/></style:style> + <style:style style:name="P_indent_0" style:display-name="Paragraph indent 0" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:text-align="justify" style:justify-single-word="false"/></style:style> + <style:style style:name="P_indent_1" style:display-name="Paragraph indent 1" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="1cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_2" style:display-name="Paragraph indent 2" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="2cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_3" style:display-name="Paragraph indent 3" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="3cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_4" style:display-name="Paragraph indent 4" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="4cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_5" style:display-name="Paragraph indent 5" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="5cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_6" style:display-name="Paragraph indent 6" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="6cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_7" style:display-name="Paragraph indent 7" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="7cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_8" style:display-name="Paragraph indent 8" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="8cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_indent_9" style:display-name="Paragraph indent 9" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0.199cm" fo:margin-bottom="0.199cm" fo:line-height="150%" fo:margin-left="9cm" fo:margin-right="0cm" fo:text-align="justify" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false"/></style:style> + <style:style style:name="P_h0_i0" style:display-name="Hang 0 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i1" style:display-name="Hang 0 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i2" style:display-name="Hang 0 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i3" style:display-name="Hang 0 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i4" style:display-name="Hang 0 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i5" style:display-name="Hang 0 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="-5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i6" style:display-name="Hang 0 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i7" style:display-name="Hang 0 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i8" style:display-name="Hang 0 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-8cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h0_i9" style:display-name="Hang 0 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-9cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i0" style:display-name="Hang 1 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i1" style:display-name="Hang 1 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i2" style:display-name="Hang 1 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i3" style:display-name="Hang 1 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i4" style:display-name="Hang 1 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i5" style:display-name="Hang 1 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i6" style:display-name="Hang 1 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i7" style:display-name="Hang 1 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i8" style:display-name="Hang 1 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h1_i9" style:display-name="Hang 1 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-8cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i0" style:display-name="Hang 2 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i1" style:display-name="Hang 2 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i2" style:display-name="Hang 2 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i3" style:display-name="Hang 2 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i4" style:display-name="Hang 2 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i5" style:display-name="Hang 2 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i6" style:display-name="Hang 2 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i7" style:display-name="Hang 2 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i8" style:display-name="Hang 2 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h2_i9" style:display-name="Hang 2 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i0" style:display-name="Hang 3 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i1" style:display-name="Hang 3 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i2" style:display-name="Hang 3 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i3" style:display-name="Hang 3 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i4" style:display-name="Hang 3 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i5" style:display-name="Hang 3 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i6" style:display-name="Hang 3 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i7" style:display-name="Hang 3 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i8" style:display-name="Hang 3 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h3_i9" style:display-name="Hang 3 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i0" style:display-name="Hang 4 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i1" style:display-name="Hang 4 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i2" style:display-name="Hang 4 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i3" style:display-name="Hang 4 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i4" style:display-name="Hang 4 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i5" style:display-name="Hang 4 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i6" style:display-name="Hang 4 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i7" style:display-name="Hang 4 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i8" style:display-name="Hang 4 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h4_i9" style:display-name="Hang 4 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i0" style:display-name="Hang 5 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i1" style:display-name="Hang 5 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i2" style:display-name="Hang 5 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i3" style:display-name="Hang 5 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i4" style:display-name="Hang 5 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i5" style:display-name="Hang 5 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i6" style:display-name="Hang 5 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i7" style:display-name="Hang 5 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i8" style:display-name="Hang 5 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h5_i9" style:display-name="Hang 5 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i0" style:display-name="Hang 6 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i1" style:display-name="Hang 6 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i2" style:display-name="Hang 6 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i3" style:display-name="Hang 6 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i4" style:display-name="Hang 6 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i5" style:display-name="Hang 6 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i6" style:display-name="Hang 6 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i7" style:display-name="Hang 6 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i8" style:display-name="Hang 6 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h6_i9" style:display-name="Hang 6 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i0" style:display-name="Hang 7 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i1" style:display-name="Hang 7 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i2" style:display-name="Hang 7 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i3" style:display-name="Hang 7 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i4" style:display-name="Hang 7 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i5" style:display-name="Hang 7 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i6" style:display-name="Hang 7 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i7" style:display-name="Hang 7 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i8" style:display-name="Hang 7 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h7_i9" style:display-name="Hang 7 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i0" style:display-name="Hang 8 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="8cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i1" style:display-name="Hang 8 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i2" style:display-name="Hang 8 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i3" style:display-name="Hang 8 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i4" style:display-name="Hang 8 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i5" style:display-name="Hang 8 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i6" style:display-name="Hang 8 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i7" style:display-name="Hang 8 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i8" style:display-name="Hang 8 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h8_i9" style:display-name="Hang 8 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="-1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i0" style:display-name="Hang 9 Indent 0" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="9cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i1" style:display-name="Hang 9 Indent 1" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="1cm" fo:margin-right="0cm" fo:text-indent="8cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i2" style:display-name="Hang 9 Indent 2" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="2cm" fo:margin-right="0cm" fo:text-indent="7cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i3" style:display-name="Hang 9 Indent 3" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="3cm" fo:margin-right="0cm" fo:text-indent="6cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i4" style:display-name="Hang 9 Indent 4" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="4cm" fo:margin-right="0cm" fo:text-indent="5cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i5" style:display-name="Hang 9 Indent 5" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="5cm" fo:margin-right="0cm" fo:text-indent="4cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i6" style:display-name="Hang 9 Indent 6" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="6cm" fo:margin-right="0cm" fo:text-indent="3cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i7" style:display-name="Hang 9 Indent 7" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="7cm" fo:margin-right="0cm" fo:text-indent="2cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i8" style:display-name="Hang 9 Indent 8" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="8cm" fo:margin-right="0cm" fo:text-indent="1cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="P_h9_i9" style:display-name="Hang 9 Indent 9" style:family="paragraph" style:parent-style-name="Text_body" style:class="text"><style:paragraph-properties fo:margin-left="9cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"><style:tab-stops><style:tab-stop style:position="0cm"/></style:tab-stops></style:paragraph-properties></style:style> + <style:style style:name="Span_bold" style:family="text"><style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/></style:style> + <style:style style:name="Span_italic" style:family="text"><style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/></style:style> + <style:style style:name="Span_underscore" style:family="text"><style:text-properties style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/></style:style> + <style:style style:name="Span_superscript" style:family="text"><style:text-properties style:text-position="super 58%"/></style:style> + <style:style style:name="Span_subscript" style:family="text"><style:text-properties style:text-position="sub 58%"/></style:style> + <style:style style:name="Span_monospace" style:family="text"><style:text-properties style:font-name="DejaVu Sans Mono" fo:font-size="10pt" fo:font-weight="normal" fo:background-color="#e6e6e6"/></style:style> + <style:style style:name="Heading" style:family="paragraph" style:next-style-name="Text_body" style:class="text"> <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/><style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="14pt" style:font-size-asian="14pt" style:font-name-complex="Tahoma" style:font-size-complex="14pt"/></style:style> + <style:style style:name="H_1" style:display-name="Heading 1" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="1" style:class="text"><style:text-properties fo:font-size="120%" fo:font-weight="bold" style:font-size-asian="120%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/></style:style> + <style:style style:name="H_2" style:display-name="Heading 2" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="2" style:class="text"><style:text-properties fo:font-size="115%" fo:font-weight="bold" style:font-size-asian="115%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/></style:style> + <style:style style:name="H_3" style:display-name="Heading 3" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="3" style:class="text"><style:text-properties fo:font-size="110%" fo:font-weight="bold" style:font-size-asian="110%" style:font-weight-asian="bold" style:font-size-complex="115%" style:font-weight-complex="bold"/></style:style> + <style:style style:name="H_4" style:display-name="Heading 4" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="4" style:class="text"><style:text-properties fo:font-size="12pt" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="12pt" style:font-style-complex="italic" style:font-weight-complex="bold"/></style:style> + <style:style style:name="H_5" style:display-name="Heading 5" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="5" style:class="text"><style:text-properties fo:font-size="90%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="90%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="90%" style:font-style-complex="italic" style:font-weight-complex="bold"/></style:style> + <style:style style:name="H_6" style:display-name="Heading 6" style:family="paragraph" style:next-style-name="Text_body" style:default-outline-level="6" style:class="text"><style:text-properties fo:font-size="80%" fo:font-style="italic" fo:font-weight="bold" style:font-size-asian="80%" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="80%" style:font-style-complex="italic" style:font-weight-complex="bold"/></style:style> + <style:style style:name="P_group" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-align="justify" style:justify-single-word="false"/></style:style> + <style:style style:name="P_code" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm" fo:line-height="100%" fo:text-align="start" style:justify-single-word="false"/><style:text-properties style:font-name="DejaVu Sans Mono" fo:font-size="9pt" fo:font-weight="normal" fo:background-color="#e6e6e6"/></style:style> + <style:style style:name="Footnote" style:family="paragraph" style:class="extra"><style:paragraph-properties fo:margin-left="0.499cm" fo:margin-right="0cm" fo:text-indent="-0.499cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/> <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/></style:style> + <style:style style:name="Table_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"><style:paragraph-properties text:number-lines="false" text:line-number="0"/></style:style> + <style:style style:name="Footnote_symbol" style:display-name="Footnote Symbol" style:family="text"/> + <style:style style:name="Footnote_anchor" style:display-name="Footnote Anchor" style:family="text"><style:text-properties style:text-position="super 58%"/></style:style> + <style:style style:name="Internet_link" style:display-name="Internet link" style:family="text"><style:text-properties fo:color="#000080" fo:language="zxx" fo:country="none" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color" style:language-asian="zxx" style:country-asian="none" style:language-complex="zxx" style:country-complex="none"/></style:style> + <style:style style:name="Graphics" style:family="graphic"><style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/></style:style> + <text:outline-style style:name="Outline"><text:outline-level-style text:level="1" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="2" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="3" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="4" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="5" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="6" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="7" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="8" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="9" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + <text:outline-level-style text:level="10" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style> + </text:outline-style> + <text:notes-configuration text:note-class="footnote" text:citation-style-name="Footnote_symbol" text:citation-body-style-name="Footnote_anchor" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/> + <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/> + <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/> + <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics"><style:graphic-properties style:wrap="none" style:horizontal-pos="left" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/></style:style> + <style:style style:name="gr1" style:family="graphic"><style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:image-opacity="100%" style:mirror="none" style:run-through="background" style:wrap="none" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" style:flow-with-text="false"/></style:style> + <style:style style:name="gr2" style:family="graphic"><style:graphic-properties draw:stroke="none" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" draw:color-mode="standard" draw:luminance="0%" draw:contrast="0%" draw:gamma="100%" draw:red="0%" draw:green="0%" draw:blue="0%" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:image-opacity="100%" style:mirror="none" style:run-through="background" style:wrap="none" style:vertical-pos="middle" style:vertical-rel="baseline" style:horizontal-pos="left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" style:flow-with-text="false"/></style:style> + </office:styles> + <office:automatic-styles> + <style:page-layout style:name="Mpm1"> + <style:page-layout-properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"> + <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="none" style:adjustment="left" style:rel-width="25%" style:color="#000000"/> + </style:page-layout-properties> + <style:header-style/> + <style:footer-style/> + </style:page-layout> + </office:automatic-styles> + <office:master-styles> + <style:master-page style:name="Standard" style:page-layout-name="Mpm1"/> + </office:master-styles> +</office:document-styles> +WOK + x=x.strip + x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ + x + end + def mimetype + x=<<WOK +application/vnd.oasis.opendocument.text +WOK + x=x.strip + end + end + class FormatObjBreak + def initialize(md,t_o) + @md,@t_o=md,t_o + end + def br_page + @t_o.obj='<text:p text:style-name="P_page_break"> </text:p>' + @t_o + end + def obj_sep #center later + sep='--- ' + @t_o.obj=%{<text:p text:style-name="P_normal">#{sep*20}</text:p>} + @t_o + end + end + class XML + end +end +__END__ diff --git a/lib/sisu/v4/options.rb b/lib/sisu/v4/options.rb new file mode 100644 index 00000000..39c392a9 --- /dev/null +++ b/lib/sisu/v4/options.rb @@ -0,0 +1,876 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: SiSU information Structuring Universe, command line options + parsing + +=end +module SiSU_Commandline + require 'pathname' + require_relative 'sysenv' # sysenv.rb + @@base_path=nil + class Options + attr_accessor :cmd,:mod,:act,:dir_structure_by,:f_pths,:files,:files_mod,:base_path,:base_stub,:sub_location,:paths,:lngs,:f_pth,:pth,:fno,:fns,:fnb,:fnc,:fng,:fncb,:lng,:lng_base,:what + @@act=nil + def initialize(a) + @cmd,@f_pth,@pth,@fno,@fns,@fnb,@fnc,@fng,@fncb,@what,@lng,@lng_base,@base_path,@base_stub,@sub_location='','','','','','','','','','','','','','' + @f_pths,@files,@files_mod,@paths,@mod,@act=Array.new(5){[]} + @env=SiSU_Env::InfoEnv.new + @lng_base=@env.language_default_set + @dir_structure_by=SiSU_Env::EnvCall.new.output_dir_structure.by? + @@base_path ||=Dir.pwd + @base_path=@@base_path + r=Px[:lng_lst_rgx] + u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ + @base_stub=@base_path.gsub(u,'\1') + @a=sisu_glob_rules(a) + @a.freeze + init + end + def find_all(find_flag,opt) + if find_flag + pwd_set=Dir.pwd + x=Dir.glob('*.ss[tm]') + Px[:lng_lst].each do |d| + if FileTest.directory?(d) + x << Dir.glob("#{d}/*.ss[tm]") + end + end + x=x.flatten + opt + x + end + end + def find_select(find_flag,opt) + if find_flag + pwd_set=Dir.pwd + x=[] + if opt.inspect =~/"[a-zA-Z][a-zA-Z0-9._-]+?"/ + opt.each do |g| + x <<=if g =~/.ss[tm]/ + Dir.glob("*#{g}") + else + Dir.glob("*#{g}*.ss[tm]") + end + Px[:lng_lst].each do |d| + if FileTest.directory?(d) + x <<=if g =~/.ss[tm]/ + Dir.glob("#{d}/*#{g}") + else + Dir.glob("#{d}/*#{g}*.ss[tm]") + end + end + end + end + end + x.flatten + end + end + def sisu_glob_rules(a) + a=if a.inspect =~/"-[A-Za-z0-9]*[fG]/ \ + or a.inspect =~/"--find"|"--glob"/ + b,f=[],[] + find_flag=false + a.each do |y| + if y =~ /^-/ + if y =~/^-/ \ + && y =~/[fG]|--find|--glob/ + find_flag=true + end + b << y + end + if find_flag \ + && y !~ /^-/ \ + && y =~ /\S+/ + if y !~/\// + f << y + else + find_flag=false + puts %{sub-directories "#{y}" cannot be provided for --find or --glob at this time} + end + end + end + r=Px[:lng_lst_rgx].gsub(/\|#{@lng_base}\|/,'|') + @lang_regx=%r{(?:#{r})} + z=if find_flag + (f.length > 0) \ + ? (b + find_select(find_flag,f)) + : find_all(find_flag,b) + elsif a.inspect =~/"(?:-\S+?|--\S+?)"/ \ + && a.inspect =~/"#{@lang_regx}\/?"/ \ + && a.inspect =~/"#{@lng_base}\/\S+?\.ss[tm]"/ + init_selected_lang_dirs(a) + else b + end + else a + end + end + def init_selected_lang_dirs(a) + @z=[] + a.each do |y| + if y =~/^#{@lng_base}\/(\S+?\.ss[tm])$/ + @fn=$1 + @z << y + elsif y =~/^#{@lang_regx}\/?$/ + @z << "#{y}/#{@fn}" + else @z << y + end + end + @z + end + def init + a=@a + if a.length > 0 + s=expand_numeric_shortcuts(a) + q=set_files_and_paths_and_general_extract(s) + @cmd,@mod=opt_cmd_and_mod_adjust(q[:cmd],q[:mod]) + @what=q[:what] unless q[:what].empty? + @paths = q[:paths] + @files = q[:files] + @f_pths = q[:f_pths] + @lngs = q[:lngs] + if @files.length > 0 \ + and @cmd.empty? \ + and @mod.length==0 #% if no other action called on filename given, default is sisu --v3 -0 [filename(s)] configured as flag default + shortcut=SiSU_Env::InfoProcessingFlag.new + @mod=['--v3'] + @cmd=shortcut.cf_0 + 'm' + end + if @cmd =~/[vVM]/ \ + && @cmd !~/-vu?$/ + SiSU_Screen::Ansi.new(@cmd,"\tsisu " + @cmd + ' ' + @mod.join(' ') + ' ' + @files.join(' ') + "\n").print_brown + end + end +# @files=@files.uniq + @@act ? @act=@@act : @@act=@act=opt_act + @files + self + end + def set_files_and_paths_and_general_extract(s) + c,w='','' + m,f,pth,z,lng,lngs=[],[],[],[],[],[] + lng_is='' + a=s.split(/\s+/) + r_l=Px[:lng_lst].join('|') + a.uniq.each do |x| + if x =~/^-[a-z0-5]+/i \ + or x =~/^--\S+/ + if x =~/^-([a-z0-5]+)/i + c << $1 + end + if x =~/^--\S+/ + m << x + end + elsif x =~ /(?:\.(?:(?:-|ssm\.)?sst(?:\.xml)?|ssm|ssi|sx[sdn]\.xml|s[1-3]|kdi|ssp)|\S+?\.ss[mt]\.(?:txz|zip)|sisupod\.(?:txz|zip))$/ + if x =~/\S+?\.ss[mt]\.(?:txz|zip)|sisupod\.(?:txz|zip)/ + if x =~/^(?:https?|file):\/\/\S+/ #\ + end + pwd=Dir.pwd + fn_pod=x.gsub(/([^\/]+)\.txz$/,'\1') + fullname=@env.processing_path.processing + '/sisupod/' + fn_pod + pt=Pathname.new(fullname) + FileUtils::mkdir_p(pt.to_s) + Dir.chdir(pt.realpath) + options=s.gsub(/(\s+--?\S+)+.+/,'\1') + system(" + chdir #{fullname} + tar xaf #{pwd}/#{x} + chdir #{pwd} + ") + Dir.chdir(pt.realpath.to_s + '/sisupod/doc') + r=Px[:lng_lst_rgx] + Dir.entries("#{fullname}/sisupod/doc").each do |d_lng| + if d_lng =~/^(?:#{r})$/ + Dir.chdir(pt.realpath.to_s + "/sisupod/doc/#{d_lng}") + filenames=Dir.glob("*.ss[mt]") + filenames.each do |fn| + f_pths << { + pth: "#{fullname}/sisupod/doc/#{d_lng}", + f: "#{fn}", + pth_stub: 'doc', + lng: d_lng, + lng_is: d_lng, + url_base: '', + url: '' + } + Dir.chdir(pwd) + f << fn + end + end + end + elsif x =~/^(?:https?|file):\/\/\S+/ \ + and x =~/\S+?\.ss[mt]$/ + r_url=/(http:\/\/\S+?\/\S+?\/src(?:\/(?:#{r_l}))?)\// + url_base = (x[r_url,1]) + url = x + y=x.gsub(/http:\/\/\S+?\/\S+?\/src\//,'') + t=/(#{r_l})\/[^\/]+?\.ss[tm]$/ + l_p = (y[t,1]) \ + ? y[t,1] + : nil + lng << l_p + lngs << if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + r_f=/(?:#{r_l})\/([^\/]+?\.ss[tm])$/ + fn = (y[r_f,1]) \ + ? y[r_f,1] + : y + fn=fn.gsub(/\.((?:ssm\.)?sst)/,'.-\1') + fullname=Dir.pwd + '/' + fn + pt=Pathname.new(fullname) + pth << Dir.pwd + r_u=/.+?\/([^\/]+)(?:\/(?:#{r_l})$|$)/ + lng_is =if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + f_pths << { + pth: pt.split[0].realpath.to_s, + f: pt.split[1].to_s, + pth_stub: pt.split[0].realpath.to_s[r_u,1], + lng: (pt.split[0].realpath.to_s[t,1]) \ + ? pt.split[0].realpath.to_s[t,1] + : nil, + lng_is: lng_is, + url_base: url_base, + url: url + } + f << fn + elsif FileTest.file?(x) + pt=Pathname.new(x) + pth << pt.split[0].realpath.to_s #remove? + f << pt.split[1].to_s #remove? + r_u=/.+?\/([^\/]+)(?:\/(?:#{r_l})$|$)/ + t=/.+\/(#{r_l})$/ + l_p = (pt.split[0].realpath.to_s[t,1]) \ + ? pt.split[0].realpath.to_s[t,1] + : nil + lngs << lng_is = if l_p + l_p + elsif x =~/~(#{r_l})\.ss[tm]/ + $1 + else lng_base + end + f_pths << { + pth: pt.split[0].realpath.to_s, + f: pt.split[1].to_s, + pth_stub: pt.split[0].realpath.to_s[r_u,1], + lng: lng_is, + lng_is: lng_is, + url_base: nil, + url: nil + } + else puts "file not found: #{x}" + end + elsif x =~ /\.termsheet\.rb$/ + (FileTest.file?(x)) \ + ? (f << x) + : (puts "file not found: #{x}") + else w=x + puts "#{x} in #{a.join(' ')}?" + end + end + { cmd: c, mod: m, what: w, paths: pth, files: f, f_pths: f_pths, lng: lng_is, lngs: lngs } + end + def expand_numeric_shortcuts(a) + shortcut=SiSU_Env::InfoProcessingFlag.new + s='' + a.each do |x| + y=case x + when /0/ + (x=~/^-1\S+/) \ + ? x.gsub(/^-0(\S+)/,shortcut.cf_0 + ' -\1') + : x.gsub(/^-0/,shortcut.cf_0 + ' ') + when /1/ + (x=~/^-1\S+/) \ + ? x.gsub(/^-1(\S+)/,shortcut.cf_1 + ' -\1') + : x.gsub(/^-1/,shortcut.cf_1 + ' ') + when /2/ + (x=~/^-2\S+/) \ + ? x.gsub(/^-2(\S+)/,shortcut.cf_2 + ' -\1') + : x.gsub(/^-2/,shortcut.cf_2 + ' ') + when /3/ + (x=~/^-3\S+/) \ + ? x.gsub(/^-3(\S+)/,shortcut.cf_3 + ' -\1') + : x.gsub(/^-3/,shortcut.cf_3 + ' ') + when /4/ + (x=~/^-4\S+/) \ + ? x.gsub(/^-4(\S+)/,shortcut.cf_4 + ' -\1') + : x.gsub(/^-4/,shortcut.cf_4 + ' ') + when /5/ + (x=~/^-5\S+/) \ + ? x.gsub(/^-5(\S+)/,shortcut.cf_5 + ' -\1') + : x.gsub(/^-5/,shortcut.cf_5 + ' ') + when /6/ + (x=~/^-6\S+/) \ + ? x.gsub(/^-6(\S+)/,shortcut.cf_5 + ' -\1') + : x.gsub(/^-6/,shortcut.cf_5 + ' ') + else x + end + s << " #{y}" unless y.empty? + end + s.strip! + end + def opt_cmd_and_mod_adjust(c,m) + cmd,mod,files=@cmd,@mod,@files + unless m.empty? + m.each do |m| + case m + when /^--(?:color-toggle)$/; c=c+'c' + when /^--(?:configure|init-site)$/; c=c+'CC' + when /^--(?:dal?|machine|abstraction|abs)$/; c=c+'m' + when /^--(?:txt|text|plaintext)$/; c=c+'t' + when /^--(?:html)$/; c=c+'h' + when /^--(?:epub)$/; c=c+'e' + when /^--(?:od[ft])$/; c=c+'o' + when /^--(?:pdf)$/; c=c+'p' + when /^--(?:concordance|wordmap)$/; c=c+'w' + when /^--(?:manpage|man)$/; c=c+'i' + when /^--(?:texinfo)$/; c=c+'I' + when /^--(?:xhtml)$/; c=c+'b' + when /^--(?:xml-sax)$/; c=c+'x' + when /^--(?:xml-dom)$/; c=c+'X' + when /^--(?:images)$/; c=c+'j' + when /^--(?:hash-digests)$/; c=c+'N' + when /^--(?:po4a|pot?)$/; c=c+'P' + when /^--(?:termsheet)$/; c=c+'T' + when /^--(?:manifest)$/; c=c+'y' + when /^--(?:qrcode)$/; c=c+'Q' + when /^--(?:sqlite)$/; c=c+'d' + when /^--(?:pg|pg?sql|postgresql)$/; c=c+'D' + when /^--(?:remote|rsync)$/; c=c+'R' + when /^--(?:scp)$/; c=c+'r' + when /^--(?:source)$/; c=c+'s' + when /^--(?:sisupod|pod)$/; c=c+'S' + when /^--(?:git)$/; c=c+'g' + when /^--(?:urls)$/; c=c+'U' + when /^--(?:zap|delete)$/; c=c+'Z' + when /^--(?:sample-search-form)$/; c=c+'F' + when /^--(?:webserv|webrick)$/; c=c+'W' + when /^--(?:profile)$/; c=c+'E' + when /^--(?:maintenance|keep-processing-files)$/; c=c+'M' + when /^--(?:verbose[=-]3)$/; c=c+'VM' + when /^--(?:verbose[=-]2|Verbose|VERBOSE)$/; c=c+'V' + when /^--(?:verbose(?:[=-]1)?)$/; c=c+'v' + when /^--(?:verbose[=-]0|quiet|silent)$/; c=c+'q' + else mod << m #mod only contains command modifiers; commands converted to character + end + end + end + ca=[] + unless c.empty? + c=c.gsub(/-/,'') + c.scan(/CC|\S/) {|x| ca << x} + cmd= '-' + ca.uniq.join + end + extra='' + if cmd !~/[mn]/ + extra+=if cmd =~/[abegHhIiNOoPpQTtwXxyz]/ \ + and cmd !~/[mn]/ + 'm' #% add dal + elsif ((cmd =~/[Dd]/ \ + or (mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/)) \ + and mod.inspect !~/(?:remove|(?:(?:re)?create(?:all)?|dropall|drop)$)/) \ + and cmd !~/[mn]/ + 'm' #% add dal + else '' + end + end + if cmd !~/j/ + extra+=if cmd =~/[bHhwXxyz]/ \ + and cmd !~/[j]/ + 'j' #% copy images + else '' + end + end + if cmd !~/y/ + extra+=if cmd =~/[abeHhIiNopQsSstwXxz]/ \ + and cmd !~/y/ + 'ym' #% add manifest + elsif (cmd =~/[Dd]/ \ + or mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/) \ + and files[0] !~/^remove$/ \ + and cmd !~/y/ + 'ym' #% add manifest + else '' + end + end + if cmd !~/u/ #% add urls + extra+='u' + end + cmd=cmd + extra + cmds=cmd.scan(/CC|\S/) + [cmds.uniq.join,mod] + end + def opt_act #note mod line commands have already been converted to command characters, cmd + cmd,mod=@cmd,@mod + @@act=if @@act + @act=@@act + else + act={} + act[:license]=(cmd =~/L/ \ + || mod.inspect =~/"--license/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:site_init]=(cmd =~/C/ \ + || mod.inspect =~/"--init-site"|"--configure"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:rc]=if mod.inspect =~/"--rc=/ + x=Dir.pwd + '/' + mod.join.gsub(/--rc=/,'') + { bool: true, set: :on, inst: x } + else + { bool: false, set: :na, inst: '' } + end + act[:processing_path]=if mod.inspect =~/"--processing-path=/ + base_pth=mod.join(';').gsub(/^.*--processing-path=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--processing-path/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:dump]=if mod.inspect =~/"--dump=/ + base_pth=mod.join(';').gsub(/^.*--dump=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--dump/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:redirect]=if mod.inspect =~/"--redirect=/ + base_pth=mod.join(';').gsub(/^.*--redirect=['"]?(.+?)(?:['"]?;.+)?$/,'\1') + { bool: true, set: :on, inst: base_pth } + elsif mod.inspect =~/"--redirect/ + { bool: true, set: :on, inst: @base_path } + else + { bool: false, set: :na, inst: nil } + end + act[:verbose]=(cmd =~/v/ \ + || mod.inspect =~/"--verbose"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:version_info]=(cmd =~/[vVM]/ \ + || mod.inspect =~/"--verbose"|"--maintenance"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:quiet]=(cmd =~/q/ \ + || mod.inspect =~/"--quiet"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:color_state]=if mod.inspect =~/"--color-on"|"--color"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--color-off"/ + { bool: false, set: :off } + else { bool: true, set: :na } #fix default color + end +# act[:color_toggle]=if cmd =~/c/ \ +# or mod.inspect =~/"--color-toggle"/ +# true +# else false +# end + act[:maintenance]=(cmd =~/M/ \ + || mod.inspect =~/"--maintenance|--keep-processing-files"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:profile]=(cmd =~/E/ \ + || mod.inspect =~/"--profile"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:switch]=if mod.inspect =~/"--switch-off=/ + off_list=mod.join(';').gsub(/^.*--switch-off=['"]?(.+?)(?:['"];.+)?$/,'\1') + off_list=off_list.scan(/[^,;\s]+/) + { bool: false, set: :off, off: off_list} + else { bool: true, set: :na, off: [] } + end + act[:output_by]=if mod.inspect =~/"--(?:output-)?by-language"/ + { set: :language } + elsif mod.inspect =~/"--(?:output-)?by-filename"/ + { set: :filename } + elsif mod.inspect =~/"--(?:output-)?by-filetype"/ + { set: :filetype } + else { set: :na } + end + act[:ocn]=if mod.inspect =~/"--inc-ocn"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-ocn"/ \ + || act[:switch][:off].inspect =~/"ocn"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:toc]=if mod.inspect =~/"--inc-toc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-toc"/ \ + || act[:switch][:off].inspect =~/"toc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:minitoc]=if mod.inspect =~/"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"minitoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:manifest]=if mod.inspect =~/"--inc-manifest"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-manifest"/ \ + || act[:switch][:off].inspect =~/"manifest"/ + { bool: false, set: :off } + elsif act[:manifest]=(cmd =~/y/ \ + || mod.inspect =~/"--manifest"/) + { bool: true, set: :on } + else { bool: true, set: :na } + end + act[:links_to_manifest]=if mod.inspect =~/"--inc-links-to-manifest"|"--inc-manifest-links"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-links-to-manifest"|"--(?:exc|no)-manifest-links"/ \ + || act[:switch][:off].inspect =~/"links_to_manifest"|"manifest_links"|"--(?:exc|no)-manifest"/ \ + || mod.inspect =~/"--(?:redirect|dump)/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:manifest_minitoc]=if mod.inspect =~/"--inc-manifest-minitoc"|"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-manifest-minitoc"|"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"manifest_minitoc"|"minitoc"/ + #|| mod.inspect =~/"--(?:redirect|dump)/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:metadata]=if mod.inspect =~/"--inc-metadata"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-metadata"/ \ + || act[:switch][:off].inspect =~/"metadata"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_minitoc]=if mod.inspect =~/"--inc-html-minitoc"|"--inc-minitoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-minitoc"|"--(?:exc|no)-minitoc"/ \ + || act[:switch][:off].inspect =~/"html_minitoc"|"minitoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_navigation]=if mod.inspect =~/"--inc-html-navigation"|"--inc-navigation"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-navigation"|"--(?:exc|no)-navigation"/ \ + || act[:switch][:off].inspect =~/"html_navigation"|"nav"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_navigation_bar]=if mod.inspect =~/"--inc-html-navigation-bar"|"--inc-navigation-bar"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-navigation-bar"|"--(?:exc|no)-navigation-bar"/ \ + || act[:switch][:off].inspect =~/"html_navigation_bar"|"navbar"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:segsubtoc]=if mod.inspect =~/"--inc-segsubtoc"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-segsubtoc"/ \ + || act[:switch][:off].inspect =~/"segsubtoc"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:search_form]=if mod.inspect =~/"--inc-search-form"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-search-form"/ \ + || act[:switch][:off].inspect =~/"search_form"|"search"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_search_form]=if mod.inspect =~/"--inc-html-search-form"|"--inc-search-form"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-search-form"|"--(?:exc|no)-search-form"/ \ + || act[:switch][:off].inspect =~/"html_search_form"|"search_form"|"search"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_right_pane]=if mod.inspect =~/"--inc-html-right-pane"|"--inc-right-pane"|"--inc-html-right-column"|"--inc-right-column"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-right-pane"|"--(?:exc|no)-right-pane"|"--(?:exc|no)-html-right-column"|"--(?:exc|no)-right-column"/ \ + || act[:switch][:off].inspect =~/"html_right_pane"|"html_right_column"|"promo"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:html_top_band]=if mod.inspect =~/"--inc-html-top-band"|"--inc-top-band"/ + { bool: true, set: :on } + elsif mod.inspect =~/"--(?:exc|no)-html-top-band"|"--(?:exc|no)-top-band"/ \ + || act[:switch][:off].inspect =~/"html-top-band"|"top-band"/ + { bool: false, set: :off } + else { bool: true, set: :na } + end + act[:dal]=(cmd =~/m/ \ + || mod.inspect =~/"--dal"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:html]=(cmd =~/h/ \ + || mod.inspect =~/"--html"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:concordance]=(cmd =~/w/ \ + || mod.inspect =~/"--concordance"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:images]=(cmd =~/j/ \ + || mod.inspect =~/"--images"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:pdf]=(cmd =~/p/ \ + || mod.inspect =~/"--pdf"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:epub]=(cmd =~/e/ \ + || mod.inspect =~/"--epub"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:odt]=(cmd =~/o/ \ + || mod.inspect =~/"--odt"|"--odf"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xml_sax]=(cmd =~/x/ \ + || mod.inspect =~/"--xml-sax"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xml_dom]=(cmd =~/X/ \ + || mod.inspect =~/"--xml-dom"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:xhtml]=(cmd =~/b/ \ + || mod.inspect =~/"--xhtml"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:txt]=(cmd =~/[at]/ \ + || mod.inspect =~/"--txt"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:manpage]=(cmd =~/i/ \ + || mod.inspect =~/"--manpage"|"--man"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:texinfo]=(cmd =~/I/ \ + || mod.inspect =~/"--texinfo"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:fictionbook]=(cmd =~/f/ \ + || mod.inspect =~/"--fictionbook"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:psql]=(cmd =~/D/ \ + || mod.inspect =~/"--pg"|"--pgsql"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sqlite]=(cmd =~/d/ \ + || mod.inspect =~/"--sqlite"/) \ + && (mod.inspect =~/"--createdb"|"--create(?:all)?"|"--dropall"|"--recreate(?:all)?"|"--import"|"--update"|"--remove"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sqlite_discreet]=(cmd =~/d/ \ + || mod.inspect =~/"--sql"|"--sqlite"/) \ + && (mod.inspect =~/"--both"/ \ + || mod.inspect !~/"--createdb"|"--create(?:all)?"|"--dropall"|"--recreate(?:all)?"|"--import"|"--update"|"--remove"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:harvest]=(mod.inspect =~/"--harvest"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:po4a]=(cmd =~/P/ \ + || mod.inspect =~/"--po4a"|"--pot?"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:git]=(cmd =~/g/ \ + || mod.inspect =~/"--git"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:zap]=(cmd =~/Z/ \ + || mod.inspect =~/"--zap"|"--delete"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:hash_digests]=(cmd =~/N/ \ + || mod.inspect =~/"--hash-digests"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sample_search_form]=(cmd =~/F/ \ + || mod.inspect =~/"--sample-search-form"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:webrick]=(cmd =~/W/ \ + || mod.inspect =~/"--webrick"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:share_source]=(cmd =~/s/ \ + || mod.inspect =~/"--source"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sisupod]=(cmd =~/S/ \ + || mod.inspect =~/"--sisupod"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:scp]=(cmd =~/r/ \ + || mod.inspect =~/"--scp"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:rsync]=(cmd =~/R/ \ + || mod.inspect =~/"--rsync"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:delete_output]=(cmd =~/z/ \ + || mod.inspect =~/"--delete"|"--zap"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:urls_all]=(cmd =~/U/ \ + || mod.inspect =~/"--urls-all"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:urls_selected]=(cmd =~/u/ \ + || mod.inspect =~/"--urls"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:sitemap]=(cmd =~/Y/ \ + || mod.inspect =~/"--sitemap"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:qrcode]=(cmd =~/Q/ \ + || mod.inspect =~/"--qrcode"/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + act[:help]=(mod.inspect =~/"--help/) \ + ? { bool: true, set: :on } + : { bool: false, set: :na } + @act=act + end + end + def cmd + @cmd + end + def mod + @mod + end + def act + @@act + end + def files_mod + files_mod=files + @files_mod=files_mod + @files_mod + end + def f_pth + @f_pth + end + def pth + @pth + end + def sub_location + pth.gsub(/#{base_path}/,'') + end + def lng + @lng + end + def lng_base + @lng_base + end + def fno + @fno=if @fno \ + and not @fno.empty? + @fno + else + fns[/(.+?(?:sst|ssm))(?:\.sst)?/,1] + end + end + def fng + @fng=if @fng \ + and not @fng.empty? + @fng + else + fno.gsub(/(?:~(?:#{Px[:lng_lst_rgx]}))?(\.ss[tm])$/,'\1') + end + end + def fns + @fns + end + def what + @what + end + def fnb + unless fns.empty? + fns[/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/,1] + end + end + def fnc + @fnc=if @fns =~/\.(?:ssm\.sst|ssm)$/ + fnb + '.ssm.sst' + else @fns + end + end + def fncb + @fncb=if @fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/ + fnb + '.ssm.sst' + else @fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1') + end + end + end +end +__END__ +note usually named @opt +is carried in Param usually as @md +@opt is a subset of @md +where @md is passed, contents of @opt are available +passing @opt as well is duplication +check for fns & fnb diff --git a/lib/sisu/v2/param.rb b/lib/sisu/v4/param.rb index 60663830..bffba529 100644 --- a/lib/sisu/v2/param.rb +++ b/lib/sisu/v4/param.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2011, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,38 +58,51 @@ module SiSU_Param require 'uri' require 'pstore' - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/param_identify_markup" # param_identify_markup.rb - require "#{SiSU_lib}/help" # help.rb + require_relative 'param_identify_markup' # param_identify_markup.rb + require_relative 'help' # help.rb include SiSU_Help - @@date=SiSU_Env::Info_date.new - @@symlnk=Create_system_link.new + @@date=SiSU_Env::InfoDate.new @@proc=@@filename_txt=@@filename_texinfo=@@filename_lout_portrait=@@filename_lout_landscape=@@filename_html_scroll=@@filename_html_index=@@filename_html_segtoc=@@filename_semantic=@@filename_rss=@@newfile=@@drr=nil - @doc={ :initialise=>nil,:markup=>'',:lnks=>'',:stmp=>'',:req=>{} } + @doc={ initialise: nil, markup: '', lnks: '', stmp: '', req: {} } @@yaml=@@yamladdr=nil @@trigger=nil @@lv,@@flag={},{} @@tex_backslash="\\\\" class Parameters @@publisher='SiSU scribe' - @@md=@@fns=nil + @@md=@@fns=@@pth=nil def initialize(opt) @opt=opt @cX||=SiSU_Screen::Ansi.new(opt.cmd) @cmd,@mod=opt.cmd,opt.mod - @fns=opt.fns.gsub(/\.ssm$/,'.ssm.sst') #revisit CHECK - Instantiate.new.param_instantiate - @env=SiSU_Env::Info_env.new(@fns) - @pstorefile="#{@env.path.dal}/#{@fns}.pstore" + @fns=if @opt.cmd =~/P/ #revisit CHECK + opt.fns + else opt.fns.gsub(/\.ssm$/,'.ssm.sst') + end + SiSU_Param::Instantiate.new.param_instantiate + @env=SiSU_Env::InfoEnv.new(@fns) + @pstorefile="#{@env.processing_path.dal}/#{@fns}.pstore" end def get - unless @@fns==@fns - @@fns=@fns + if @opt.f_pth \ + and @opt.f_pth[:pth] != Dir.pwd #BUG check + # you may need to change Dir.pwd to @opt.f_pth[:pth] where the latter + # has a path value that is different, however, f_pth is not always set! + Dir.chdir(@opt.f_pth[:pth]) + p '-- bug alert -- ' + p __FILE__ + ':' + __LINE__.to_s + p 'f_pth ' + @opt.f_pth[:pth] + p 'pwd ' + Dir.pwd + end + if @@fns !=@fns \ + or @@pth !=Dir.pwd #@opt.f_pth[:pth] + @@fns,@@pth=@fns,Dir.pwd #@opt.f_pth[:pth] @@md=nil end if @@md.nil? \ - or @cmd =~/M/ #not particularly helpful, as current cycle is through output types, with files changing, only helpful if deal with a file all output types before going to next file + or @opt.cmd =~/M/ #not particularly helpful, as current cycle is through output types, with files changing, only helpful if deal with a file all output types before going to next file if File.exist?(@pstorefile) param_msg='Parameters from pstore' store=PStore.new(@pstorefile) @@ -101,20 +113,20 @@ module SiSU_Param else param_msg='Parameters extracted' fns_array=@env.read_source_file(@opt.fns) - md=Instructions.new(fns_array,@opt) - @md=Instructions.new(fns_array,@opt).extract + md=SiSU_Param::Parameters::Instructions.new(fns_array,@opt) + @md=SiSU_Param::Parameters::Instructions.new(fns_array,@opt).extract @md end if defined? @md.title.main # on removal check problems with -U - SiSU_Screen::Ansi.new(@cmd,param_msg,@md.title.main).txt_grey if @cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,param_msg,@md.title.main).txt_grey if @opt.cmd =~/[MVv]/ end @@md=@md else @@md end - @@md.cmd=@cmd + @@md.opt=@opt @@md end - class Md_default + class MdDefault def rights(author,date) @author,@date=author,date def all @@ -153,43 +165,44 @@ module SiSU_Param end def validate_length(s,l,n) #s=(s.length <= l) ? s : nil - s=if s.class==String \ + s=if s.is_a?(String) \ and s.length <= l s - elsif s.class==NilClass; nil + elsif s.is_a?(NilClass) + nil elsif s.class !=String - puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}" + STDERR.puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}" s else - SiSU_Screen::Ansi.new('v',"#{n} length #{s.length} exceeds set db field length #{l}, metadata dropped",@opt.fns).warn unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new('v',"*WARN* #{n} length #{s.length} exceeds set db field length #{l}, metadata dropped",@opt.fns).warn unless @opt.cmd =~/q/ nil end end def name_format(name) if name - name.strip! + name=name.strip @name_a_h=[] authors=name.scan(/[^;]+/) authors.each_with_index do |a,i| b=((a =~/\s*\|\s*/) ? (a.split(/\|/)) : [a]) if b[0] =~/"(.+?)"/ - @name_a_h << { :the => $1 } + @name_a_h << { the: $1 } else x=b[0].scan(/[^,]+/) if x.length==1 - @name_a_h << { :the => x[0].strip } + @name_a_h << { the: x[0].strip } elsif x.length==2 - @name_a_h << { :the => x[0].strip, :others => x[1].strip } + @name_a_h << { the: x[0].strip, others: x[1].strip } else #p x.length end end b.delete_at(0) b.each do |d| - k,c=nil - k,c=/^(\S+)\s+(.*)/.match(d)[1,2] if d - @name_a_h[i][:hon]=c.strip if k=='hon' - @name_a_h[i][:affiliation]=c.strip if k=='affiliation' - @name_a_h[i][:nationality]=c.strip if k=='nationality' + k,c=nil + k,c=/^(\S+)\s+(.*)/.match(d)[1,2] if d + @name_a_h[i][:hon]=c.strip if k=='hon' + @name_a_h[i][:affiliation]=c.strip if k=='affiliation' + @name_a_h[i][:nationality]=c.strip if k=='nationality' end end l=@name_a_h.length @@ -203,7 +216,7 @@ module SiSU_Param "#{a[:the].strip}" + z end end - {:name_a_h =>@name_a_h,:name_str =>name_str} + { name_a_h: @name_a_h, name_str: name_str } else nil end end @@ -213,7 +226,14 @@ module SiSU_Param a,b=nil,nil if x =~/^%\s/ #ignore comment elsif x =~/:(\S+?):\s+(.+)/ - a,b=/:(\S+?):\s+(.+)/.match(x)[1,2] + a,b=/:(\S+?):\s+(.+)\Z/m.match(x)[1,2] + b=if b =~/\n/m + (b =~/;\n/m) \ + ? (b.split(/;\s*\n\s*/).join(';')) + : (b.split(/\s*\n\s*/).join(' ')) + else + b + end elsif i == 0 a='main' b=x @@ -247,12 +267,16 @@ module SiSU_Param validate_length(s,l,n) end def short - s=(@h['short'] ? @h['short'] : @h['main']) + s=@h['short'] \ + ? @h['short'] + : @h['main'] l,n=Db[:col_title_part],'title.short' validate_length(s,l,n) end def full - s=(@h['subtitle'] ? (@h['main'] + ' - ' + @h['subtitle']) : @h['main']) + s=@h['subtitle'] \ + ? (@h['main'] + ' - ' + @h['subtitle']) + : @h['main'] l,n=Db[:col_title],'title.full' validate_length(s,l,n) end @@ -261,7 +285,7 @@ module SiSU_Param l,n=Db[:col_language],'title.language' validate_length(s,l,n) end - def language_char + def language_char # look into, this must be set, from 1 directory stub (.fi), 2 filename (~fi), [3 (not used) document header (@title:\n :language_char: fi)] s=@h['language_char'] l,n=Db[:col_language_char],'title.language_char' validate_length(s,l,n) @@ -272,20 +296,49 @@ module SiSU_Param a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) @h=build_hash(a) def author - @h['author']=(@h['author'] ? @h['author'] : @h['main']) + @h['author']=(@h['author'] \ + ? @h['author'] + : @h['main']) names=name_format(@h['author']) s=names[:name_str] l,n=Db[:col_name],'creator.author' validate_length(s,l,n) end def author_detail - s=(@h['author'] ? @h['author'] : @h['main']) + s=@h['author'] \ + ? @h['author'] + : @h['main'] names=name_format(s) names[:name_a_h] end + def editor + names=@h['editor'] \ + ? name_format(@h['editor']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil + s=if s + l,n=Db[:col_name],'creator.editor' + validate_length(s,l,n) + else nil + end + end + def editor_detail + names=@h['editor'] \ + ? name_format(@h['editor']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil + end def contributor - names=(@h['contributor'] ? name_format(@h['contributor']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['contributor'] \ + ? name_format(@h['contributor']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.author' validate_length(s,l,n) @@ -293,12 +346,20 @@ module SiSU_Param end end def contributor_detail - names=(@h['contributor'] ? name_format(@h['contributor']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['contributor'] \ + ? name_format(@h['contributor']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def illustrator - names=(@h['illustrator'] ? name_format(@h['illustrator']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['illustrator'] \ + ? name_format(@h['illustrator']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.illustrator' validate_length(s,l,n) @@ -306,12 +367,20 @@ module SiSU_Param end end def illustrator_detail - names=(@h['illustrator'] ? name_format(@h['illustrator']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['illustrator'] \ + ? name_format(@h['illustrator']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def photographer - names=(@h['photographer'] ? name_format(@h['photographer']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['photographer'] \ + ? name_format(@h['photographer']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.photographer' validate_length(s,l,n) @@ -319,12 +388,20 @@ module SiSU_Param end end def photographer_detail - names=(@h['photographer'] ? name_format(@h['photographer']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['photographer'] \ + ? name_format(@h['photographer']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def translator - names=(@h['translator'] ? name_format(@h['translator']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['translator'] \ + ? name_format(@h['translator']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.translator' validate_length(s,l,n) @@ -332,12 +409,20 @@ module SiSU_Param end end def translator_detail - names=(@h['translator'] ? name_format(@h['translator']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['translator'] \ + ? name_format(@h['translator']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def audio - names=(@h['audio'] ? name_format(@h['audio']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['audio'] \ + ? name_format(@h['audio']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.audio' validate_length(s,l,n) @@ -345,12 +430,20 @@ module SiSU_Param end end def audio_detail - names=(@h['audio'] ? name_format(@h['audio']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['audio'] \ + ? name_format(@h['audio']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def digitized_by - names=(@h['digitized_by'] ? name_format(@h['digitized_by']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['digitized_by'] \ + ? name_format(@h['digitized_by']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.digitized_by' validate_length(s,l,n) @@ -358,12 +451,20 @@ module SiSU_Param end end def digitized_by_detail - names=(@h['digitized_by'] ? name_format(@h['digitized_by']) : nil) - (names.class==Hash) ? names[:name_a_h] : nil + names=@h['digitized_by'] \ + ? name_format(@h['digitized_by']) + : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end def prepared_by - names=(@h['prepared_by'] ? name_format(@h['prepared_by']) : nil) - s=(names.class==Hash) ? names[:name_str] : nil + names=@h['prepared_by'] \ + ? name_format(@h['prepared_by']) + : nil + s=(names.is_a?(Hash)) \ + ? names[:name_str] + : nil s=if s l,n=Db[:col_name],'creator.prepared_by' validate_length(s,l,n) @@ -371,9 +472,13 @@ module SiSU_Param end end def prepared_by_detail - names=(@h['prepared_by'] ? name_format(@h['prepared_by']) : nil) + names=@h['prepared_by'] \ + ? name_format(@h['prepared_by']) + : nil names=name_format(@h['prepared_by']) - (names.class==Hash) ? names[:name_a_h] : nil + (names.is_a?(Hash)) \ + ? names[:name_a_h] + : nil end self end @@ -389,41 +494,53 @@ module SiSU_Param elsif @h['main'] @h['main'] else - SiSU_Screen::Ansi.new(@cmd,'WARNING Document Copyright missing; provide @rights: :copyright:').warn unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,'WARNING Document Copyright missing; provide @rights: :copyright:').warn unless @opt.cmd =~/q/ '' end l,n=Db[:col_info_note],'rights.copyright.text' validate_length(s,l,n) end def translation - s=(@h['translation'] ? @h['translation'] : nil) + s=@h['translation'] \ + ? @h['translation'] + : nil l,n=Db[:col_info_note],'rights.copyright.translation' validate_length(s,l,n) end def illustrations - s=(@h['illustrations'] ? @h['illustrations'] : nil) + s=@h['illustrations'] \ + ? @h['illustrations'] + : nil l,n=Db[:col_info_note],'rights.copyright.illustrations' validate_length(s,l,n) end def photographs - s=(@h['photographs'] ? @h['photographs'] : nil) + s=@h['photographs'] \ + ? @h['photographs'] + : nil l,n=Db[:col_info_note],'rights.copyright.photographs' validate_length(s,l,n) end def digitization - s=(@h['digitization'] ? @h['digitization'] : nil) + s=@h['digitization'] \ + ? @h['digitization'] + : nil l,n=Db[:col_info_note],'rights.copyright.digitization' validate_length(s,l,n) end def audio - s=(@h['audio'] ? @h['audio'] : nil) + s=@h['audio'] \ + ? @h['audio'] + : nil l,n=Db[:col_info_note],'rights.copyright.audio' validate_length(s,l,n) end self end def license - s=(@h['license'] ? @h['license'] : nil) + s=@h['license'] \ + ? @h['license'] + : nil l,n=Db[:col_info_note],'rights.license' validate_length(s,l,n) end @@ -431,7 +548,7 @@ module SiSU_Param (str =~/https?:\/\/\S+$/) ? ' ;' : ';' end def all - s=if @h['all']; @h['all'] + s=if @h['all'] then @h['all'] else s='' if defined? copyright.text \ @@ -444,39 +561,39 @@ module SiSU_Param and copyright.translation \ and not copyright.translation.empty? v=sep(copyright.translation) - s +='<br> translation ' + copyright.translation + v + s +='\\\\ translation ' + copyright.translation + v end if defined? copyright.illustrations \ and copyright.illustrations \ and not copyright.illustrations.empty? v=sep(copyright.illustrations) - s +='<br> illustrations ' + copyright.illustrations + v + s +='\\\\ illustrations ' + copyright.illustrations + v end if defined? copyright.photographs \ and copyright.photographs \ and not copyright.photographs.empty? v=sep(copyright.photographs) - s +='<br> photographs ' + copyright.photographs + v + s +='\\\\ photographs ' + copyright.photographs + v end if defined? copyright.digitization \ and copyright.digitization \ and not copyright.digitization.empty? v=sep(copyright.digitization) - s +='<br> digitization ' + copyright.digitization + v + s +='\\\\ digitization ' + copyright.digitization + v end if defined? copyright.audio \ and copyright.audio \ and not copyright.audio.empty? v=sep(copyright.audio) - s +='<br> audio ' + copyright.audio + v + s +='\\\\ audio ' + copyright.audio + v end if defined? copyright.license \ and copyright.license \ and not copyright.license.empty? - s +='<br> License: ' + copyright.license + s +='\\\\ License: ' + copyright.license end if s.empty? - SiSU_Screen::Ansi.new(@cmd,'WARNING Document Rights information missing; provide @rights: :copyright:').warn unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,'WARNING Document Rights information missing; provide @rights: :copyright:').warn unless @opt.cmd =~/q/ else l,n=Db[:col_info_note],'rights.all' validate_length(s,l,n) @@ -488,7 +605,7 @@ module SiSU_Param self end def classify - a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) + a=@s.split(/(\n%\s.+?$|[ ]*)(?:\n[ ]*(?=:)|\Z)/m) @h=build_hash(a) def coverage s=@h['coverage'] @@ -594,31 +711,31 @@ module SiSU_Param end self end - def language # as things stand this should really be populated from title.language and original.language, resolve - a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) - @h=build_hash(a) - def document - s=@h['document']=(@h['document'] ? @h['document'] : @h['main']) - l,n=Db[:col_language],'language.document' - validate_length(s,l,n) - end - def document_char - s=@h['document_char']=(@h['document_char'] ? @h['document_char'] : nil) - l,n=Db[:col_language_char],'language.document_char' - validate_length(s,l,n) - end - def original - s=@h['original'] - l,n=Db[:col_language],'language.original' - validate_length(s,l,n) - end - def original_char - s=@h['original_char'] - l,n=Db[:col_language_char],'language.original_char' - validate_length(s,l,n) - end - self - end + #def language # as things stand this should really be populated from title.language and original.language, resolve + # a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) + # @h=build_hash(a) + # def document + # s=@h['document']=(@h['document'] ? @h['document'] : @h['main']) + # l,n=Db[:col_language],'language.document' + # validate_length(s,l,n) + # end + # def document_char + # s=@h['document_char']=(@h['document_char'] ? @h['document_char'] : nil) + # l,n=Db[:col_language_char],'language.document_char' + # validate_length(s,l,n) + # end + # def original + # s=@h['original'] + # l,n=Db[:col_language],'language.original' + # validate_length(s,l,n) + # end + # def original_char + # s=@h['original_char'] + # l,n=Db[:col_language_char],'language.original_char' + # validate_length(s,l,n) + # end + # self + #end def make a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) @h=build_hash(a) @@ -646,53 +763,71 @@ module SiSU_Param end def breaks pagebreaks=((@h['breaks'] =~/;/) \ - ? (@h['breaks'].split(/;\s*/)) \ + ? (@h['breaks'].split(/;\s*/)) : [ @h['breaks'] ]) page_new,page_break=nil,nil pagebreaks.each do |x| page_new=x[/(:?[\dA-C],?)+/] if x=~/new|clear/ page_break=x[/(:?[\dA-C],?)+/] if x =~/break/ end - {:page_new =>page_new, :page_break =>page_break} + { page_new: page_new, page_break: page_break } end def language l=if @h['language'] && (@h['language']=~/\S{2,}/) ((@h['language'] =~/,/) \ - ? (@h['language'].split(/,\s*/)) \ + ? (@h['language'].split(/,\s*/)) : [ @h['language'] ]) else [ 'en' ] end end def bold m=@h['bold'] - x=(m=~/\/i$/)? 'i' : '' + i=(m=~/\/i$/)? 'i' : '' z=if m - m.gsub!(/^\/(.+?)\/i?/,'\1') - m.gsub!(/\(/,'(?:') # avoid need to escape use of brackets within regex provided - rgx='\b(' + m + ')\b' - y=((x =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) - { :str =>'\b(?:' + m + ')\b', :regx => y } + x=m.gsub(/^\/(.+?)\/i?/,'\1'). + gsub(/\((?:\?:)?/,'(?:') # avoid need to escape use of brackets within regex provided + rgx='\b(' + x + ')\b' + y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) + { str: '\b(?:' + x + ')\b', regx: y, i: i } else nil end - z end def italics m=@h['italics'] - x=((m=~/\/i$/) ? 'i' : '') + i=((m=~/\/i$/) ? 'i' : '') z=if m - m.gsub!(/^\/(.+?)\/i?/,'\1') - m.gsub!(/\(/,'(?:') # avoid need to escape use of brackets within regex provided - rgx='\b(' + m + ')\b' - y=((x =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) - { :str =>'\b(?:' + m + ')\b', :regx => y } + x=m.gsub(/^\/(.+?)\/i?/,'\1'). + gsub(/\((?:\?:)?/,'(?:') # avoid need to escape use of brackets within regex provided + rgx='\b(' + x + ')\b' + y=((i =~/i/) ? (/#{rgx}/i) : (/#{rgx}/)) + { str: '\b(?:' + x + ')\b', regx: y, i: i } else nil end - z end def emphasis - if @h['emphasis'] =~/bold/; 'bold' - elsif @h['emphasis'] =~/italics?/; 'italics' - elsif @h['emphasis'] =~/under(?:line|score)/; 'underscore' + if @h['emphasis'] =~/bold/ then 'bold' + elsif @h['emphasis'] =~/italics?/ then 'italics' + elsif @h['emphasis'] =~/under(?:line|score)/ then 'underscore' + else nil + end + end + def substitute + m=@h['substitute'] + z=if m + w=m.scan(/\/(.+?)\/(i?,)\s*'(.+?)'(?:\s+|\s*;\s*|$)/) + arr_hash=[] + matches='' + w.each do |x| + c=(x[1] =~/[i],/) ? :i : :s + matches=matches + x[0].gsub(/([${}])/,'\\\\\1') + '|' + arr_hash << { + match: x[0].gsub(/([${}])/,'\\\\\1'), + replace: x[2], + case_s: c + } + end + matches.chop! + { match_and_replace: arr_hash, matches: matches } else nil end end @@ -704,10 +839,115 @@ module SiSU_Param else nil end end + def omit + m=@h['omit'] + @m=m ? (m.split(/,\s+/)) : nil + def list + @m + end + self + end + def ocn? + (omit.list.inspect =~/"ocn"/) \ + ? :off + : :na + end + def toc? + (omit.list.inspect =~/"toc"/) \ + ? :off + : :na + end + def manifest? + (omit.list.inspect =~/"manifest"/) \ + ? :off + : :na + end + def links_to_manifest? + (omit.list.inspect =~/"manifest_links"|"links_to_manifest"/) \ + ? :off + : :na + end + def metadata? + (omit.list.inspect =~/"metadata"/) \ + ? :off + : :na + end + def minitoc? + (omit.list.inspect =~/"minitoc"/) \ + ? :off + : :na + end + def html_minitoc? + (omit.list.inspect =~/"html_minitoc"/) \ + ? :off + : :na + end + def html_top_band? + (omit.list.inspect =~/"html_top_band"/) \ + ? :off + : :na + end + def html_navigation? + (omit.list.inspect =~/"html_navigation"/) \ + ? :off + : :na + end + def html_navigation_bar? + (omit.list.inspect =~/"html_navigation_bar"/) \ + ? :off + : :na + end + def segsubtoc? + (omit.list.inspect =~/"segsubtoc"/) \ + ? :off + : :na + end + def search_form? + (omit.list.inspect =~/"search_form"/) \ + ? :off + : :na + end + def html_search_form? + (omit.list.inspect =~/"html_search_form"/) \ + ? :off + : :na + end + def html_right_pane? + (omit.list.inspect =~/"html_right_column"|"html_right_pane"/) \ + ? :off + : :na + end + def manifest_minitoc? + (omit.list.inspect =~/"manifest_minitoc"/) \ + ? :off + : :na + end def texpdf_font - @h['texpdf_font'] && (@h['texpdf_font']=~/\S{3,}/) \ - ? @h['texpdf_font'] \ - : @env.font.texpdf + def main + @h['texpdf_font'] \ + && (@h['texpdf_font']=~/\S{3,}/) \ + ? @h['texpdf_font'] + : @env.font.texpdf.main + end + def sans # not used + @h['texpdf_font_sans'] \ + && (@h['texpdf_font_sans']=~/\S{3,}/) \ + ? @h['texpdf_font_sans'] + : @env.font.texpdf.sans + end + def serif # not used + @h['texpdf_font_serif'] \ + && (@h['texpdf_font_serif']=~/\S{3,}/) \ + ? @h['texpdf_font_serif'] + : @env.font.texpdf.serif + end + def mono + @h['texpdf_font_mono'] \ + && (@h['texpdf_font_mono']=~/\S{3,}/) \ + ? @h['texpdf_font_mono'] + : @env.font.texpdf.mono + end + self end def skin @h['skin'] @@ -732,16 +972,16 @@ module SiSU_Param end end if manpage['name'] - manpage['name']=manpage['name'].join("\n.br\n") - manpage['name'].gsub!(/(-)/m,"\\\\\\1") - manpage['name'].gsub!(/\A/,"\n.br\n.SH NAME\n.br\n") + manpage['name']=manpage['name'].join("\n.br\n"). + gsub(/(-)/m,"\\\\\\1"). + gsub(/\A/,"\n.br\n.SH NAME\n.br\n") else manpage['name']='man page "name/whatis" information not provided, set in header @man: name=[whatis information]' end if manpage['synopsis'] - manpage['synopsis']=manpage['synopsis'].join("\n\n.br\n") - manpage['synopsis'].gsub!(/(-)/m,"\\\\\\1") - manpage['synopsis'].gsub!(/\A/,"\n.br\n.SH SYNOPSIS\n.br\n") + manpage['synopsis']=manpage['synopsis'].join("\n\n.br\n"). + gsub(/(-)/m,"\\\\\\1"). + gsub(/\A/,"\n.br\n.SH SYNOPSIS\n.br\n") else manpage['synopsis']='' end @@ -792,7 +1032,6 @@ module SiSU_Param end def links a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) - a end def notes a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m) @@ -816,13 +1055,13 @@ module SiSU_Param end end class Instructions - @doc={ :lv=>[] } + @doc={ lv: [] } @doc[:fns],@doc[:fnb],@doc[:scr_suffix]='','','' @@publisher='SiSU scribe' - attr_accessor :cmd,:make,:mod,:env,:fn,:fns,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:site_skin,:sisu,:sisu_version,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:num_top,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:markup_version,:markup_declared,:flag_tables,:vocabulary,:doc_skin,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:en,:notes,:dgst,:dgst_skin,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy + attr_accessor :make,:env,:path,:file,:fn,:fns,:fno,:fnb,:fnn,:fnt,:fnl,:flv,:fnz,:fnstex,:ocn,:sfx_src,:pdf,:file_type,:dir_out,:dir_tex,:dir_lout,:txt_path,:site_skin,:sisu,:sisu_version,:ruby_version,:title,:subtitle,:full_title,:html_title,:subtitle_tex,:creator,:classify,:author_home,:author,:author_title,:author_nationality,:authors,:authorship,:translator,:illustrator,:prepared_by,:digitized_by,:subject,:description,:publisher,:current_publisher,:contributor,:date,:date_created,:date_issued,:date_available,:date_valid,:date_modified,:date_translated,:date_added_to_site,:date_scheme,:date_created_scheme,:date_issued_scheme,:date_available_scheme,:date_valid_scheme,:date_modified_scheme,:type,:format,:identifier,:source,:language,:language_original,:relation,:coverage,:rights,:keywords,:comments,:abstract,:cls_loc,:cls_dewey,:cls_pg,:cls_isbn,:papersize,:papersize_array,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:lvs,:pagenew,:pagebreak,:num_top,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:markup_version,:markup_declared,:flag_tables,:vocabulary,:doc_skin,:doc_css,:yaml,:lnk,:links,:prefix_a,:prefix_b,:suffix,:information,:contact,:icon,:image,:ad_url,:ad_png,:ad_alt,:ad_began,:flag_promo,:promo,:ad_home,:stmp,:stmpd,:sc_filename,:sc_number,:sc_date,:sc_time,:sc_info,:yamladdr,:locale,:wc_lines,:wc_words,:wc_bytes,:file_encoding,:filesize,:user,:home,:hostname,:pwd,:firstseg,:programs,:author_copymark,:i18n,:lang,:lang_code_insert,:en,:notes,:dgst,:dgst_skin,:generated,:tags,:tag_array,:concord_make,:seg_names,:seg_autoname_safe,:set_header_title,:set_heading_top,:set_heading_seg,:heading_seg_first,:heading_seg_first_flag,:base_program,:ec,:opt,:sem_tag,:book_idx,:topic_register,:topic_register_array,:original,:writing_focus,:audio,:daisy def initialize(fns_array,opt) - @env=@fn=@fns=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@site_skin=@sisu=@sisu_version=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@num_top=@toc_lev_limit=@flag_tables=@vocabulary=@doc_skin=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@en=@notes=@dgst=@dgst_skin=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=nil - @data,@fns,@cmd,@mod,@opt=fns_array,opt.fns,opt.cmd,opt.mod,opt #@data used as data + @env=@path,@file=@fn=@fns=@fno=@fnb=@fnn=@fnt=@fnl=@flv=@fnz=@fnstex=@ocn=@sfx_src=@pdf=@file_type=@dir_out=@dir_tex=@dir_lout=@txt_path=@make=@flag_endnotes=@flag_auto_endnotes=@flag_separate_endnotes=@flag_separate_endnotes_make=@site_skin=@sisu=@sisu_version=@ruby_version=@title=@subtitle=@full_title=@html_title=@subtitle_tex=@creator=@classify=@author_home=@author=@author_title=@author_nationality=@translator=@illustrator=@prepared_by=@digitized_by=@subject=@description=@publisher=@current_publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@date_translated=@date_added_to_site=@date_scheme=@date_created_scheme=@date_issued_scheme=@date_available_scheme=@date_valid_scheme=@date_modified_scheme=@type=@format=@identifier=@source=@language=@language_original=@relation=@coverage=@rights=@keywords=@comments=@abstract=@cls_loc=@cls_dewey=@cls_pg=@cls_isbn=@papersize=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@pagenew=@pagebreak=@num_top=@toc_lev_limit=@flag_tables=@vocabulary=@doc_skin=@doc_css=@yaml=@lnk=@links=@prefix_a=@prefix_b=@suffix=@information=@contact=@icon=@ad_url=@ad_png=@ad_alt=@ad_began=@promo=@ad_home=@stmp=@stmpd=@sc_filename=@sc_number=@sc_date=@sc_time=@sc_info=@yamladdr=@locale=@wc_lines=@wc_words=@wc_bytes=@file_encoding=@filesize=@firstseg=@programs=@author_copymark=@i18n=@lang=@lang_code_insert=@en=@notes=@dgst=@dgst_skin=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=nil + @data,@path,@fns,@fno,@opt=fns_array,opt.pth,opt.fns,opt.fno,opt #@data used as data @flag_tables,@set_header_title,@set_heading_top,@set_heading_seg,@heading_seg_first_flag,@flag_promo,@book_idx=false,false,false,false,false,false,false @seg_autoname_safe=true @daisy,@sem_tag=false,false @@ -832,11 +1071,25 @@ module SiSU_Param @flv,@lang,@seg_names,@tags,@tag_array,@tag_a,@ec[:image],@ec[:audio],@ec[:multimedia]=Array.new(9){[]} @authors,@topic_register_array,@papersize_array=[],[],[] @lvs=[nil,0,0,0,0,0,0] - @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ + @lang_code_insert=if @opt.act[:output_by][:set]==:language + '' + elsif @opt.act[:output_by][:set]==:filetype \ + or @opt.act[:output_by][:set]==:filename + ".#{@opt.lng}" + elsif @opt.dir_structure_by ==:language + '' + else + ".#{@opt.lng}" + end + @rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m @rgx_audio=/\{\s*(\S+?\.(?:mp3|ogg))/ @rgx_mm=/\{\s*(\S+?\.(?:ogg|mpeg))/ #expand and distinguish ogg + Dir.chdir(@opt.f_pth[:pth]) begin - rescue; SiSU_Errors::Info_error.new($!,$@,@cmd,@fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end @@ -854,10 +1107,10 @@ module SiSU_Param def extract @user,@home,@hostname,@pwd=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD'] @programs,@wc,@language,@language_original={},{},{},{} - @en={ :sum=>0,:mark=>0,:note=>0,:mismatch=>0 } - @prog=SiSU_Env::Info_settings.new - @sys=SiSU_Env::System_call.new - @env=SiSU_Env::Info_env.new(@fns) #watch + @en={ sum: 0, mark: 0, note: 0, mismatch: 0 } + @prog=SiSU_Env::InfoSettings.new + @sys=SiSU_Env::SystemCall.new + @env=SiSU_Env::InfoEnv.new(@fns) #watch puts 'system locale: ' + @sys.locale if @opt.cmd =~/[MV]/ if @prog.wc \ and @sys.wc @@ -873,27 +1126,27 @@ module SiSU_Param end @concord_make=(@wc_words > @env.concord_max) ? false : true @locale=@sys.locale - @file_encoding=@sys.file_encoding(fns,@cmd) + @file_encoding=@sys.file_encoding(fns,@opt.cmd) # programs set here for things that affect output appearance only - @programs[:pdf]=SiSU_Env::System_call.new.program_found?('pdflatex') - if @env.i18n.multilingual - m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss + @programs[:pdf]=SiSU_Env::SystemCall.new.program_found?('pdflatex') + if @opt.cmd =~/P/ #if @env.multilingual? + m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ #watch added match for sss + @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3] + @flv=@env.document_language_versions_found[:f] + else + m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3] @flv=@env.document_language_versions_found[:f] - @fnz=(@fns =~/\.(?:ssm\.sst|ssm)$/) ? (@fnn + '.ssm.zip') : (@fnn + '.sst.zip') - else m=/(.+?)\.((?:-|ssm\.)?sst)$/ - @fnb=@fnn=@fns[m,1] - @fnt=@fns[m,2] - @flv<<@fns - @fnz=(@fns =~/\.(?:_sst|ssm)$/) ? (@fnb + '.ssm.zip') : (@@fnb + '.sst.zip') + @fnz=(@fns =~/\.(?:ssm\.sst|ssm)$/) ? (@fnn + '.ssm.txz') : (@fnn + '.sst.txz') end @papersize=@env.papersize #'A4' #default size #get first from SiSU_Env:: # @env is probably no longer most appropriate name! as default info is more general @sfx_src=@fns[m,2] - if @fns =~ /(?:-|ssm\.)?sst$/ #watch + if @fns =~ /(?:-|ssm\.)?sst$/ \ + and not @opt.cmd =~/P/ #watch @env_out_root=@env.path.output @dir_out="#{@env.path.output}/#{@fnb}" - @dir_tex=@env.path.tex - @dir_lout=@env.path.lout + @dir_tex=@env.processing_path.tex + @dir_lout=@env.processing_path.lout @@publisher='SiSU http://www.jus.uio.no/sisu' end @txt_path=@txt_path ||= @env.path.output @@ -902,23 +1155,23 @@ module SiSU_Param @flag_endnotes,@flag_auto_endnotes,@flag_separate_endnotes=false,false,false @flag_separate_endnotes_make=true regx_date=/^\d{4}(?:-(?:[0][0-9]|1[0-2])(-(?:[0-2][0-9]|3[01]))?)?$/ - ver=SiSU_Env::Info_version.instance + ver=SiSU_Env::InfoVersion.instance @sisu_version=ver.get_version @ruby_version=ver.rbversion @generated=Time.now fns_array=@data.dup skip unless fns_array # consider - @markup_version=SiSU_Markup_type::Markup_identify.new(fns_array,@opt).markup_version? #% determine markup version + @markup_version=SiSU_MarkupType::MarkupIdentify.new(fns_array,@opt).markup_version? #% determine markup version if fns_array[0] =~ /^(?:%\s+)?(?:SiSU\s+(?:master\s+)?[\d.]*|sisu-[\d.]+)$/ #check markup and markup version - if fns_array[0] =~ /^(?:%\s+)?(?:SiSU\s+(?:master\s+)?|sisu-)(?:(?:[0-9]+?)(?:\.[0-9]+?)(?:\.[0-9]+))?$/ #check markup and markup version + if fns_array[0] =~ /^(?:%\s+)?(?:SiSU\s+(?:master\s+)?|sisu-)(?:(?:[0-9]+?)(?:\.[0-9]+?)(?:\.[0-9]+))?$/ #check markup and markup version @markup_version_declared=fns_array[0].match(/^(?:%\s+)?(?:SiSU\s+(?:master\s+)?|sisu-)([\d.]+)$/)[1] sm_a,sm_b,sm_c=fns_array[0].match(/^(?:%\s+)?(?:SiSU\s+(?:master\s+)?|sisu-)([0-9]+)?(?:\.([0-9]+))?(?:\.([0-9]+))?$/)[1..3] sm_c ||=0 - sv=(@cmd =~/[VMv]/) ? ("SiSU version (#{@sisu_version[:version]})") : '' + sv=(@opt.cmd =~/[VMv]/) ? ("SiSU version (#{@sisu_version[:version]})") : '' s_a,s_b,s_c=@sisu_version[:version].match(/^([0-9]+)?(?:\.([0-9]+))?(?:\.([0-9]+))?(?:\-\S+)?$/)[1..3] tell=(@markup_version_declared.to_f==@markup_version.determined) \ - ? SiSU_Screen::Ansi.new(@cmd,"Markup version (#{@markup_version.series} version #{@markup_version.determined})",sv) \ - : SiSU_Screen::Ansi.new(@cmd,"Markup version declared (#{@markup_version_declared}), determined (#{@markup_version.series} version #{@markup_version.determined})",sv) + ? SiSU_Screen::Ansi.new(@opt.cmd,"Markup version (#{@markup_version.series} version #{@markup_version.determined})",sv) + : SiSU_Screen::Ansi.new(@opt.cmd,"Markup version declared (#{@markup_version_declared}), determined (#{@markup_version.series} version #{@markup_version.determined})",sv) ok=if s_a.to_i > sm_a.to_i true elsif s_a.to_i == sm_a.to_i \ @@ -931,23 +1184,23 @@ module SiSU_Param else false end if ok - tell.txt_green if @cmd =~/[vVM]/ + tell.txt_green if @opt.cmd =~/[vVM]/ else - SiSU_Screen::Ansi.new(@cmd,"Warning: markup version determined (#{@markup_version.determined}) or markup version declared (#{@markup_version_declared}) is newer than SiSU version (#{@sisu_version[:version]})").warn unless @cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,"WARNING: markup version determined (#{@markup_version.determined}) or markup version declared (#{@markup_version_declared}) is newer than SiSU version (#{@sisu_version[:version]})").warn unless @opt.cmd =~/q/ end else - SiSU_Screen::Ansi.new(@cmd,'No SiSU markup version provided').warn if @cmd =~/[VM]/ + SiSU_Screen::Ansi.new(@opt.cmd,'No SiSU markup version provided').warn if @opt.cmd =~/[VM]/ end else - mv=if defined? @markup_version.determined and not @markup_version.determined.nil? + mv=if @markup_version.determined.is_a?(Float) x=@markup_version.determined "markup version determined #{x}" else '' end - SiSU_Screen::Ansi.new(@cmd,'SiSU filetype indicator not provided',mv).warn unless @cmd =~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,'SiSU filetype indicator not provided',mv).warn unless @opt.cmd =~/q/ end @code_flag=false - fns_array.each do |para| #% Scan document + fns_array.each do |para| #% scan document if para !~/^%+\s/ \ and para =~/<![abcdeghijklmnopqrstuvwxyz]/i # <!f not included raise "Old markup style in file #{@fns}, current version #{@sisu_version[:project]} #{@sisu_version[:version]} #{@sisu_version[:date_stamp]} #{@sisu_version[:date]}:\n\t\t#{para}\n\n" @@ -961,40 +1214,46 @@ module SiSU_Param if para =~regx_header \ and not @code_flag #or para=~/^(?:1|:?A)~/ case para - when /^@ocn:\s+(.+?)$/m; @ocn=$1 #% processing - when /^@title:(.+)/m #% metainfo DC - @title=Md.new($1.strip,@opt,@env).title - when /^@creator:(.+)/m #% metainfo DC - @creator=Md.new($1.strip,@opt,@env).creator + when /^@title:(.+)/m #% * header metadata - title + @title=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).title + when /^@creator:(.+)/m #% * header metadata - creator + @creator=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).creator @authorship=@author=@creator.author @authors=@creator.author_detail - when /^@classify:(.+)/m; classify=$1 - @classify=Md.new($1.strip,@opt,@env).classify - when /^@publisher:\s+(.+)/m - @publisher=Md.new($1.strip,@opt,@env).current_publisher + when /^@date:(.+)/m #% * header metadata - date + @date=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).date + when /^@publisher:\s+(.+)/m #% * header metadata - publisher + @publisher=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).current_publisher @current_publisher=@publisher - when /^@original:(.+)/m - @original=Md.new($1.strip,@opt,@env).original + when /^@rights:(.+)/m; #% * header metadata - rights + @rights=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).rights + when /^@classify:(.+)/m; classify=$1 #% * header metadata - classify + @classify=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).classify + when /^@original:(.+)/m #% * header metadata - original (document) + @original=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).original @source=@original.source - when /^@writing_focus[:.]nationality:\s+(.+?)$/; @writing_focus=$1 # e.g. Finland (where and article on Finnish law) - when /^@date:(.+)/m #% metainfo DC - @date=Md.new($1.strip,@opt,@env).date - when /^@rights:(.+)/m; #@rights=$1.gsub(/<(?:\/\s*)?br(?:\s*\/)?>/,Mx[:br_line]) #% metainfo DC copyright, public domain, copyleft, creative commons, etc. - @rights=Md.new($1.strip,@opt,@env).rights - when /^@papersize:\s+(.+?)$/m #% metainfo DC - l=$1 - if @mod.inspect !~/--papersize[=-]\S+/ - l=determine_papersize(l.dup) - @papersize=l + when /^@notes?:\s(.+)\Z/m #% * header metadata - notes + @notes=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).notes + when /^@links:\s+(.+?)\Z/m #% * header metadata - links + doc_links=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).links + a_idx=0 + @links=[] + doc_links.each do |doc_link| + if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ + @links[a_idx]={} + @links[a_idx][:say],@links[a_idx][:url]=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] + a_idx +=1 + end end - when /^@make:(.+)/m #% metainfo DC - @make=Md.new($1.strip,@opt,@env).make + @lnk=@links + when /^@make:(.+)/m #% * header processing - make + @make=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).make if defined? @make.breaks \ - and @make.breaks[:page_new] #clearpage + and @make.breaks[:page_new] #clearpage @pagenew=@make.breaks[:page_new] end if defined? @make.breaks \ - and @make.breaks[:page_break] #newpage + and @make.breaks[:page_break] #newpage @pagebreak=@make.breaks[:page_break] end if defined? @make.headings \ @@ -1021,23 +1280,10 @@ module SiSU_Param end if defined? @make.manpage \ and @make.manpage - @man_section=(defined? @make.manpage.section) ? @make.manpage.section : 1 + @man_section=(defined? @make.manpage.section) \ + ? @make.manpage.section + : 1 end - when /^@links:\s+(.+?)\Z/m #% processing - doc_links=Md.new($1.strip,@opt,@env).links - count=1 - @links=[] - doc_links.each do |doc_link| - if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/ - @links[count]={} - @links[count][:say],@links[count][:url]=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2] - count +=1 - end - end - @lnk=@links - when /^@notes?:\s(.+)\Z/m #% metainfo - @notes=Md.new($1.strip,@opt,@env).notes - when /^@base_program:\s+(.+?)$/; @base_program=$1 #% processing end @lv1 ||=/^1~/ @lv2 ||=/^2~/ @@ -1045,34 +1291,61 @@ module SiSU_Param @lv4 ||=/^4~/ @lv5 ||=/^5~/ @lv6 ||=/^6~/ - else #% + else #% * + l_0=l_1=l_2=l_3=l_4=l_5='' + if defined? @make.headings[0] + l_0=if defined? @make.headings[0][0] \ + and @make.headings[0][0] =~/\S+/ + "|^#{@make.headings[0][0]}" + end + l_1=if defined? @make.headings[0][1] \ + and @make.headings[0][1] =~/\S+/ + "|^#{@make.headings[0][1]}" + end + l_2=if defined? @make.headings[0][2] \ + and @make.headings[0][2] =~/\S+/ + "|^#{@make.headings[0][2]}" + end + l_3=if defined? @make.headings[0][3] \ + and @make.headings[0][3] =~/\S+/ + "|^#{@make.headings[0][3]}" + end + l_4=if defined? @make.headings[0][4] \ + and @make.headings[0][4] =~/\S+/ + "|^#{@make.headings[0][4]}" + end + l_5=if defined? @make.headings[0][5] \ + and @make.headings[0][5] =~/\S+/ + "|^#{@make.headings[0][5]}" + end + end case para - when /^:?A~/ + when /^:?A~#{l_0}/ @lvs[1]=1 - when /^:?B~/ + when /^:?B~#{l_1}/ @lvs[2]=1 - when /^:?C~/ + when /^:?C~#{l_2}/ @lvs[3]=1 - when /^1~/ + when /^1~#{l_3}/ @lvs[4]=1 - when /^2~/ + when /^2~#{l_4}/ @lvs[5]=1 - when /^3~/ + when /^3~#{l_5}/ @lvs[6]=1 end - if para =~ /^:A~/ #% processing + if para =~ /^:A~/ #% processing if @markup.nil? \ or @markup.empty? @markup=@markup_version.determined.to_s - elsif @markup !~/0\.38/; @markup=@markup.strip + "; #{@markup_version.determined}" + elsif @markup !~/0\.38/ then @markup=@markup.strip + "; #{@markup_version.determined}" end if not defined? @title.full.nil? tf=para[/^:A~\S*(.+)$/m,1] tf="@title: #{tf}" - @title=Md.new(tf.strip,@opt,@env).title + @title=SiSU_Param::Parameters::Md.new(tf.strip,@opt,@env).title end @html_title=@title.full.gsub(/(<p>|<p \/>|<br>|<br \/>)/,'') - SiSU_Screen::Ansi.new(@cmd,'Parameters',@html_title).txt_grey if @cmd =~/v/ + SiSU_Screen::Ansi.new(@opt.cmd,'Parameters',@html_title).txt_grey if @opt.cmd =~/v/ end if not @book_idx \ and para =~/^=\{(.+?)\}\s*$/ @@ -1080,28 +1353,20 @@ module SiSU_Param end unless @code_flag case para - when /~\{\s+.+?\}~/m #% processing + when /~\{\s+.+?\}~/m #% processing en=para.scan(/~\{.+?\}~/m) en.each { |e| @en[:sum] +=1 } - when /~\^(?:\s|$)/m #% processing + when /~\^(?:\s|$)/m #% processing mk=para.scan(/~\^(?:\s|$)/) mk.each { |e| @en[:mark] +=1 } - when /^\^~\s+\S/; @en[:note] +=1 #% processing - end - end - if para =~/~\{|\^~ |~\^|<:ee>|\{.+?\[[1-6]\]\}\S+?\.ss[tm]/m; @flag_auto_endnotes,@flag_endnotes=true,true - end - unless @flag_auto_endnotes - if para =~/^(4~endnotes\b|<:ee>)/ - @flag_separate_endnotes=true - @flag_endnotes=true + when /^\^~\s+\S/; @en[:note] +=1 #% processing end end - if para =~/^(?:4~endnotes|<:ee>)/; @flag_separate_endnotes_make=false - end - if para =~/<!!e[#0-9]+?!>\s*.+/; @flag_endnotes=true + if para =~/~\{|\^~ |~\^|\{.+?\[[1-6]\]\}\S+?\.ss[tm]/m + @flag_auto_endnotes,@flag_endnotes=true,true end - if para =~/^(?:table\{|\{table)/i; @flag_tables=true + if para =~/^(?:table\{|\{table)/i + @flag_tables=true end end if para =~/^:?A~/ @@ -1127,6 +1392,7 @@ module SiSU_Param end end end + para=para.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image') # embedded symbol (image) if para !~/^%+\s/ \ and para =~@rgx_image @ec[:image] << para.scan(@rgx_image).uniq @@ -1136,46 +1402,51 @@ module SiSU_Param unless @sem_tag @sem_tag=true if para=~/[:;]\{.+?\}[:;][a-z+]/ #refix later end - end #% here endeth the document loop + end #% here endeth the document loop + unless @make + if @opt.cmd =~/[VM]/ + SiSU_Screen::Ansi.new(@opt.cmd,'@make:','header absent').warn + end + @make=SiSU_Param::Parameters::Md.new('@make: ',@opt,@env).make + end if @ec[:image].length > 0 - @ec[:image].flatten! - @ec[:image].uniq! + @ec[:image]=@ec[:image].flatten.uniq @ec[:image].delete_if {|x| x =~/https?:\/\// } - @ec[:image].sort! + @ec[:image]=@ec[:image].sort end - @ec[:audio].uniq!; @ec[:audio].flatten!; @ec[:audio].sort! - @ec[:multimedia].uniq!; @ec[:multimedia].flatten!; @ec[:multimedia].sort! + @ec[:audio]=@ec[:audio].uniq.flatten.sort + @ec[:multimedia]=@ec[:multimedia].uniq.flatten.sort unless @rights if defined? @creator.author \ - and @creator.author \ + and @creator.author.is_a?(String) \ and defined? @date.published \ - and @date.published - @rights=Md_default.new.rights(@creator.author,@date.published) + and @date.published.is_a?(String) + @rights=SiSU_Param::Parameters::MdDefault.new.rights(@creator.author,@date.published) elsif defined? @creator.author \ - and @creator.author - @rights=Md_default.new.rights("[#{@creator.author}]",'') + and @creator.author.is_a?(String) + @rights=SiSU_Param::Parameters::MdDefault.new.rights("[#{@creator.author}]",'') end end if defined? @classify.topic_register \ - and not @classify.topic_register.nil? \ + and @classify.topic_register.is_a?(String) \ and @classify.topic_register.length >3 topic_register=@classify.topic_register - u=topic_register.scan(/[^;]+/) + u=topic_register.scan(/[^;]+/m).sort v=[] u.each do |l| - v << l.scan(/[^:]+/) + v << l.scan(/[^:]+/m) end v.each do |m| - m[-1]=m[-1].scan(/[^|]+/) if m[-1] =~/[|]/ + m[-1]=m[-1].scan(/[^|]+/m) if m[-1] =~/[|]/m @topic_register_array << m end - @topic_register_array.sort! + @topic_register_array end if @i18n - @i18n.uniq! + @i18n=@i18n.uniq @i18n << 'en' unless @i18n.find_index("en") else - @i18n=[ en ] + @i18n=[ 'en' ] end if @markup_version.determined >= 0.38 #convert values in headers to internal representation translated=[] @@ -1189,29 +1460,36 @@ module SiSU_Param translate.gsub!(/:?C/,'3') translate.gsub!(/:?B/,'2') translate.gsub!(/:?A/,'1') - translate=if translate =~/^\d+$/; translate.to_i - else translate - end + # looks like an ok substituion for the above but is not, causes problems, check why + #translate=translate.gsub(/3/,'6'). + # gsub(/2/,'5'). + # gsub(/1/,'4'). + # gsub(/:?C/,'3'). + # gsub(/:?B/,'2'). + # gsub(/:?A/,'1') + translate=(translate =~/^\d+$/) \ + ? translate.to_i + : translate else nil end end @pagenew,@pagebreak,@num_top,@toc_lev_limit=translated - @markup.gsub!(/page_new\s*=\s*([\dA-C])/,"page_new=#{@pagenew}") - @markup.gsub!(/page_break\s*=\s*([\dA-C])/,"page_break=#{@pagebreak}") - @markup.gsub!(/num_top\s*=\s*([\dA-C])/,"num_top=#{@num_top}") - @markup.gsub!(/toc_lev_limit\s*=\s*([\dA-C])/,"toc_lev_limit=#{@toc_lev_limit}") + @markup=@markup.gsub(/page_new\s*=\s*([\dA-C])/,"page_new=#{@pagenew}"). + gsub(/page_break\s*=\s*([\dA-C])/,"page_break=#{@pagebreak}"). + gsub(/num_top\s*=\s*([\dA-C])/,"num_top=#{@num_top}"). + gsub(/toc_lev_limit\s*=\s*([\dA-C])/,"toc_lev_limit=#{@toc_lev_limit}") end - if @mod.inspect =~/--papersize[=-]\S+|--pdf[=-]\S+/ \ - or @mod.inspect =~/--(?:a4|letter|legal|book|a5|b5)\b/i #command line config/header override - @papersize=determine_papersize(@mod.inspect) + if @opt.mod.inspect =~/--papersize[=-]\S+|--pdf[=-]\S+/ \ + or @opt.mod.inspect =~/--(?:a4|letter|legal|book|a5|b5)\b/i #command line config/header override + @papersize=determine_papersize(@opt.mod.inspect) end @papersize_array=@papersize.scan(/(?:a4|letter|legal|book|a5|b5)/i) - fn=@fns=~/\.ssm\.sst$/ ? @fns.gsub(/.sst/,'') : @fns #decide what to do a filesize on .ssm tells very little about actual document size + fn=@opt.fno #decide what to do a filesize on .ssm tells very little about actual document size @filesize=(File.size(fn)).to_s if @sys.openssl !=false skin=@doc_skin \ - ? (SiSU_Env::Info_skin.new(@opt,@doc_skin).select) \ - : SiSU_Env::Info_skin.new(@opt).select + ? (SiSU_Env::InfoSkin.new(@opt,@doc_skin).select) + : SiSU_Env::InfoSkin.new(@opt).select @dgst,@dgst_skin=[],[] if @env.digest.type =~/sha256/ dgst=@sys.sha256(@env.source_file_with_path) @@ -1225,8 +1503,8 @@ module SiSU_Param @dgst_skin=skin ? (@sys.md5(skin)) : nil end end - @publisher ||= "#@@publisher (this copy)" - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(@fns) + @publisher ||= "#{@@publisher} (this copy)" + fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language unless @language[:code] \ and @language[:name] lang=@env.i18n.language #default language settings for directory by name, or in sysrc.yml @@ -1235,39 +1513,52 @@ module SiSU_Param end unless fn_set_lang[:d]==true #decide, naming convention overrides other settings, within document, etc. @language[:code]=fn_set_lang[:c] - @language[:name]=fn_set_lang[:l] + @language[:name]=fn_set_lang[:n] end @fnl=@env.i18n.lang_filename(fn_set_lang[:c]) - @flv.each do |l| - lang=SiSU_Env::Standardise_language.new.file_to_language(l) - c={ :a=>'',:b=>'',:c=>'' } - if @fnl[:pre] =~/\S/; c[:a]="#{lang[:c]}." - elsif @fnl[:mid] =~/\S/; c[:b]=".#{lang[:c]}" - elsif @fnl[:post] =~/\S/; c[:c]=".#{lang[:c]}" - end - @lang << [lang[:l],"#{c[:a]}sisu_manifest#{c[:b]}.html#{c[:c]}"] - end if @flv - @lang.uniq! - @fn=SiSU_Env::Env_call.new(@fns).lang(fn_set_lang[:c]) +#fix +# @flv.each do |l| +# lang=SiSU_Env::StandardiseLanguage.new.file_to_language(l) +# c={ a: '', b: '', c: '' } +# if @fnl[:pre] =~/\S/ then c[:a]="#{lang[:c]}." +# elsif @fnl[:mid] =~/\S/ then c[:b]=".#{lang[:c]}" +# elsif @fnl[:post] =~/\S/ then c[:c]=".#{lang[:c]}" +# end +# @lang << [lang[:n],"#{c[:a]}sisu_manifest#{c[:b]}.html#{c[:c]}"] +# end if @flv + @lang=@lang.uniq + @fn=SiSU_Env::EnvCall.new(@fns).lang(fn_set_lang[:c]) @identifier="#{@env.url.root}/#{@fnb}/#{@fn[:toc]}" #DC note constructed dc identifier if @en[:note] > 0 \ and @en[:sum] > 0 if @en[:sum] > 0 - else SiSU_Screen::Ansi.new(@cmd,'both endnote styles used',"~{ #{@en[:sum]} }~ and ^~ #{@en[:mark]}").warn if @cmd !~/q/ + else SiSU_Screen::Ansi.new(@opt.cmd,'*WARN* both endnote styles used',"~{ #{@en[:sum]} }~ and ^~ #{@en[:mark]}").warn if @opt.cmd !~/q/ end end if @en[:mark] != @en[:note] \ and @en[:note] > 0 @en[:mismatch]=@en[:note] - @en[:mark] - SiSU_Screen::Ansi.new(@cmd,'endnote number mismatch',"endnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} (difference = #{@en[:mismatch]})").warn if @cmd !~/q/ + SiSU_Screen::Ansi.new(@opt.cmd,'*WARN* endnote number mismatch',"endnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} (difference = #{@en[:mismatch]})").warn if @opt.cmd !~/q/ footnote_conversion_errors=File.new("#{Dir.pwd}/footnote_conversion_errors.txt",'a') footnote_conversion_errors << "#{@fns}:\n\tendnotes: #{@en[:note]} != endnote reference marks: #{@en[:mark]} (difference = #{@en[:mismatch]})\n" end - if @title.main !~/[\S]/ - SiSU_Screen::Ansi.new(@cmd,'WARNING Document Title missing','please provide @title:').warn unless @cmd =~/q/ + if not @title \ + or not defined? @title.main \ + or @title.main !~/[\S]/ + if @fns =~/\.ssm$/ \ + and @opt.inspect =~/P/ + #@title=Md.new('Text Insert',@opt,@env).title + else + SiSU_Screen::Ansi.new(@opt.cmd,'WARNING: Document Title missing','please provide @title:').warn unless @opt.cmd =~/q/ + end end if @author !~/[\S]/ - SiSU_Screen::Ansi.new(@cmd,'Warning Document Author missing','please provide @creator: :author:').warn unless @cmd =~/q/ + if @fns =~/\.ssm$/ \ + and @opt.inspect =~/P/ + #@creator=SiSU_Param::Md.new('Text Insert',@opt,@env).creator + else + SiSU_Screen::Ansi.new(@opt.cmd,'WARNING: Document Author missing','please provide @creator: :author:').warn unless @opt.cmd =~/q/ + end end @struct={} doc_struct=Hash.new(0) @@ -1333,40 +1624,47 @@ module SiSU_Param @lv5 ||=/^5~/ @lv6 ||=/^6~/ if @doc_skin - SiSU_Screen::Ansi.new(@cmd,"doc_skin <- #{@doc_skin}").txt_grey if @cmd =~/v/ + SiSU_Screen::Ansi.new(@opt.cmd,"doc_skin <- #{@doc_skin}").txt_grey if @opt.cmd =~/v/ end @data=nil #else whole file's contents are stored in md pstore & is not required to be... big waste actually - Store.new(self,@env).store #% pstore + @file=SiSU_Env::FileOp.new(self) #watch + Store.new(self,@env).store #% pstore self end private class Store def initialize(md,env) - @md=md - @pstorefile="#{env.path.dal}/#{md.fns}.pstore" + @md,@env=md,env end def store - File.unlink(@pstorefile) if FileTest.file?(@pstorefile) - SiSU_Screen::Ansi.new(@md.cmd,"PStore -> #{@pstorefile}").txt_grey if @md.cmd =~/[MV]/ - store=PStore.new(@pstorefile) - store.transaction do - store['md']=@md - store.commit + begin + pstorefile="#{@env.processing_path.dal}/#{@md.fns}.pstore" + File.unlink(pstorefile) if FileTest.file?(pstorefile) + SiSU_Screen::Ansi.new(@md.opt.cmd,"PStore -> #{pstorefile}").txt_grey if @md.opt.cmd =~/[MV]/ + store=PStore.new(pstorefile) + store.transaction do + store['md']=@md + store.commit + end + @@md=@md=nil + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure end - @@md=@md=nil end end end end class Instantiate def param_instantiate - @@date=SiSU_Env::Info_date.new - @@symlnk=SiSU_Env::Create_system_link.new + @@date=SiSU_Env::InfoDate.new @@proc=@@filename_txt=@@filename_texinfo=@@filename_lout_portrait=@@filename_lout_landscape=@@filename_html_scroll=@@filename_html_index=@@filename_html_segtoc=@@filename_semantic=@@filename_rss=@@newfile=@@drr=nil @doc={ - :initialise=>nil, - :markup=>'',:lnks=>'',:stmp=>'',:prefix_a=>'',:prefix_b=>'', - :req=>{} + initialise: nil, + markup: '', lnks: '', stmp: '', prefix_a: '', prefix_b: '', + req: {} } @@yaml=@@yamladdr=nil @@flag={} diff --git a/lib/sisu/v2/param_identify_markup.rb b/lib/sisu/v4/param_identify_markup.rb index 97b6d888..e1d96a62 100644 --- a/lib/sisu/v2/param_identify_markup.rb +++ b/lib/sisu/v4/param_identify_markup.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,8 +57,8 @@ altering SiSU markup =end -module SiSU_Markup_type - class Markup_identify +module SiSU_MarkupType + class MarkupIdentify @@version={} @@fns,@@version[:determined],@@version[:declared],@@declared_doc_type='','','','[text?]' attr_accessor :version,:declared_doc_type diff --git a/lib/sisu/v2/particulars.rb b/lib/sisu/v4/particulars.rb index b2f533e1..97a3da3e 100644 --- a/lib/sisu/v2/particulars.rb +++ b/lib/sisu/v4/particulars.rb @@ -1,4 +1,4 @@ -# coding:utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -8,7 +8,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -32,11 +33,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -48,7 +47,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,16 +58,17 @@ =end module SiSU_Particulars require 'singleton' - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/dal" # dal.rb - class Combined_singleton + require_relative 'dal' # dal.rb + class CombinedSingleton include Singleton def get_all(opt) @opt=opt set_env + set_file set_md set_dal #needs @md end @@ -76,6 +76,10 @@ module SiSU_Particulars @opt=opt set_env end + def get_file(opt) + @opt=opt + set_file + end def get_md(opt) @opt=opt set_md @@ -93,9 +97,9 @@ module SiSU_Particulars @opt=opt set_sst_idx end - def get_idx_tex(opt) + def get_idx_raw(opt) @opt=opt - set_tex_idx + set_raw_idx end def get_idx_html(opt) @opt=opt @@ -122,56 +126,88 @@ module SiSU_Particulars @opt=opt set_ocn_htmlseg_map end - attr_accessor :opt,:md,:sst_idx,:tex_idx,:html_idx,:xhtml_idx + attr_accessor :opt,:md,:sst_idx,:raw_idx,:html_idx,:xhtml_idx def set_md begin @md=SiSU_Param::Parameters.new(@opt).get self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end - attr_accessor :opt,:env + attr_accessor :opt,:env,:file def set_env begin - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) + self + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + end + end + def set_file + begin + set_md unless @md + @file=SiSU_Env::FileOp.new(@md) self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end attr_accessor :opt,:dal_array def set_dal begin - @dal_array=@dal_array=SiSU_DAL::Source.new(@md).get + @dal_array=SiSU_DAL::Source.new(@opt).get self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def set_sst_idx begin - @sst_idx=SiSU_DAL::Source.new(@md).get_idx_sst + @sst_idx=SiSU_DAL::Source.new(@opt).get_idx_sst self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end - def set_tex_idx + def set_raw_idx begin - @tex_idx=SiSU_DAL::Source.new(@md).get_idx_tex + @raw_idx=SiSU_DAL::Source.new(@opt).get_idx_raw self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def set_html_idx begin - @html_idx=SiSU_DAL::Source.new(@md).get_idx_html + @html_idx=SiSU_DAL::Source.new(@opt).get_idx_html self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end def set_xhtml_idx begin - @xhtml_idx=SiSU_DAL::Source.new(@md).get_idx_xhtml + @xhtml_idx=SiSU_DAL::Source.new(@opt).get_idx_xhtml self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end attr_accessor :nametags_map @@ -180,7 +216,10 @@ module SiSU_Particulars opt=@md ? @md : @opt @nametags_map=SiSU_DAL::Source.new(opt).get_map_nametags self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end attr_accessor :ocn_htmlseg_map @@ -188,7 +227,10 @@ module SiSU_Particulars begin @ocn_htmlseg_map=SiSU_DAL::Source.new(@md).get_map_ocn_htmlseg self - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end end end end diff --git a/lib/sisu/v4/plaintext.rb b/lib/sisu/v4/plaintext.rb new file mode 100644 index 00000000..c86fddb9 --- /dev/null +++ b/lib/sisu/v4/plaintext.rb @@ -0,0 +1,434 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: plaintext text generation, stripped plaintext output (unix, + linefeed) + +=end +module SiSU_Plaintext + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + require_relative 'plaintext_format' # plaintext_format.rb + include SiSU_PlaintextFormat + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'shared_txt' # shared_txt.rb + include SiSU_Param + include SiSU_Viz + pwd=Dir.pwd + @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 + @@tablefoot='' + class Source + def initialize(opt) + @opt=opt + unless @opt.fns =~/(.+?)\.(?:-|ssm\.)?sst$/ + puts "#{sf} not a processed file type" + end + end + def read + begin + md=SiSU_Param::Parameters.new(@opt).get + env=SiSU_Env::InfoEnv.new(@opt.fns) + unless @opt.cmd =~/q/ + path=env.path.output_tell + tool=(@opt.cmd =~/[MVv]/) \ + ? "#{env.program.text_editor} #{md.file.output_path.txt.dir}/#{md.file.base_filename.txt}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Plaintext',tool).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Plaintext',tool).green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{md.file.output_path.txt.dir}/#{md.file.base_filename.txt}").flow if @opt.cmd =~/[MV]/ + end + dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here + wrap_width=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 + else 78 + end + #wrap_width=(defined? md.make.plaintext_wrap) ? md.make.plaintext_wrap : 78 + SiSU_Plaintext::Source::Scroll.new(dal_array,md,wrap_width).songsheet + SiSU_Env::InfoSkin.new(md).select #watch + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + private + class Scroll <Source + require_relative 'defaults' # defaults.rb + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + @@endnotes={ para: [], end: [] } + def initialize(data,md,wrap_width) + @data,@md,@wrap_width=data,md,wrap_width + @env=SiSU_Env::InfoEnv.new(@md.fns) + @brace_url=SiSU_Viz::Skin.new.url_decoration + @tab="\t" + @@endnotes_=case md.opt.mod.inspect + when /--footnote/; false + when /--endnote/; true + else true + end + @br=case md.opt.mod.inspect + when /--dos/; "\r\n" + when /--unix/; "\n" + else "\n" + end + @plaintext={ body: [], open: [], close: [], head: [], metadata: [], tail: [] } + end + def songsheet + plaintext=markup(@data) + publish(plaintext) + end + # Used for extraction of endnotes from paragraphs + def extract_endnotes(dob='') + notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/) + @n=[] + notes.flatten.each do |n| #high cost to deal with <br> appropriately within plaintext, consider + n=n.dup.to_s + if n =~/#{Mx[:br_line]}|#{Mx[:br_nl]}/ + fix = n.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/) #watch #added + fix.each do |x| + unless x.empty?; @n << x + end + end + else @n << n + end + end + notes=@n.flatten + notes.each do |e| + util=(e.to_s =~/^\[[\d*+]+\]:/) \ + ? (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,4,1)) + : (SiSU_TextUtils::Wrap.new(e.to_s,@wrap_width,1,1)) + wrap=util.line_wrap + wrap=if wrap =~ /^\s*[\d*+]+\s+.+?\s*\Z/m + wrap.gsub(/^(\s*)([\d*+]+)\s+(.+?)\s*\Z/m, <<GSUB +\\1[\\2]: \\3 +GSUB + ) + else + wrap.gsub(/^(.+)\Z/m, <<GSUB +\\1 +GSUB + ) + end + @@endnotes[:para] << "-#{wrap}" + @@endnotes[:end] << '' << wrap + end + @@endnotes + end + def plaintext_metadata + array=SiSU_Metadata::Summary.new(@md).plaintext.metadata + array.each do |meta| + tag,inf=meta.scan(/^.+?:\s|.+/) + if tag and inf + util=SiSU_TextUtils::Wrap.new(inf,@wrap_width,15,1) + txt=util.line_wrap + @plaintext[:metadata] <<<<WOK + +#{@tab}#{tag}#{txt} +WOK + end + end + end + def plaintext_tail + SiSU_Env::InfoSkin.new(@md).select +# env=SiSU_Env::InfoEnv.new(@md.fns) + vz=SiSU_Env::GetInit.instance.skin + base_url="#{@env.url.root}/#{@md.fnb}" + generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[: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 + @plaintext[:tail] <<<<WOK +#{@br} +plaintext (plain text): + #{@md.file.output_path.txt.url}/#{@md.file.base_filename.txt}#{@br} +Other versions of this document: #{@br} +manifest: + #{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}#{@br} +at: + #{@md.file.output_path.base.url}#{@br} + +#{sc} +* #{generator} +* #{rubyv} +* #{lastdone} +* SiSU #{vz.url_sisu} +WOK + end + def plaintext_structure(dob='',p_num='') #% Used to extract the structure of a document + lv=n=n3=nil + if dob.is==:heading + lv=dob.ln + n=lv - 1 + n3=lv + 2 + end + util=nil + wrapped=if dob.is ==:para \ + or dob.is==:heading + if dob.is==:para + if dob.hang \ + and dob.hang =~/[0-9]/ \ + and dob.indent != dob.hang + util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2,dob.hang.to_i*2) + #util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.hang.to_i*2,0) + elsif dob.indent =~/[1-9]/ + util=if dob.bullet_ + SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,dob.indent.to_i*2) + else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,dob.indent.to_i*2) + end + else + util=if dob.bullet_ + SiSU_TextUtils::Wrap.new("* #{dob.obj}",@wrap_width,0) + else SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0) + end + end + else util=SiSU_TextUtils::Wrap.new(dob.obj,@wrap_width,0) + end + util.line_wrap + end + if lv + times=wrapped.length + times=@wrap_width if times > @wrap_width + @plaintext[:body] << case lv + when 1; wrapped.upcase << @br << Px[:lv1]*times + p_num << @br + when 2; wrapped.upcase << @br << Px[:lv2]*times + p_num << @br + when 3; wrapped.upcase << @br << Px[:lv3]*times + p_num << @br + when 4; wrapped.upcase << @br << Px[:lv4]*times + p_num << @br + when 5; wrapped.upcase << @br << Px[:lv5]*times + p_num << @br + when 6; wrapped.upcase << @br << Px[:lv6]*times + p_num << @br + end + else + @plaintext[:body] << wrapped + p_num << @br # main text, contents, body KEEP + end + if @@endnotes[:para] \ + and not @@endnotes_ + @plaintext[:body] << @br + @@endnotes[:para].each {|e| @plaintext[:body] << e << @br} + elsif @@endnotes[:para] \ + and @@endnotes_ + @plaintext[:body] << @br*2 + end + @@endnotes[:para]=[] + end + def markup(data) # Used for major markup instructions + dir=SiSU_Env::InfoEnv.new(@md.fns) + @data_mod,@endnotes,@level,@cont,@copen,@plaintext_contents_close=Array.new(6){[]} + (0..6).each { |x| @cont[x]=@level[x]=false } + (4..6).each { |x| @plaintext_contents_close[x]='' } + plaintext_tail #($1,$2) + plaintext_metadata + table_message='[table omitted, see other document formats]' + fix=[] + data.each do |dob| + dob.obj=dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{@br}#{table_message}"). #fix + gsub(/.+?#{Mx[:gl_o]}-##{Mx[:gl_c]}/,''). # remove dummy headings (used by html) #check also [~-]# + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, + "#{Px[:bold_o]}\\1#{Px[:bold_c]}"). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, + "#{Px[:italics_o]}\\1#{Px[:italics_c]}"). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, + "#{Px[:underscore_o]}\\1#{Px[:underscore_c]}"). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, + "#{Px[:subscript_o]}\\1#{Px[:subscript_c]}"). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, + "#{Px[:superscript_o]}\\1#{Px[:superscript_c]}"). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/, + "#{Px[:insert_o]}\\1#{Px[:insert_c]}"). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/, + "#{Px[:cite_o]}\\1#{Px[:cite_c]}"). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/, + "#{Px[:strike_o]}\\1#{Px[:strike_c]}"). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, + "#{Px[:monospace_o]}\\1#{Px[:monospace_c]}") + unless dob.is==:code + dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,'\1'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1'). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1 [link: <\2>]'). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/,'\1 [link: local image]'). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"#{@brace_url.txt_open}\\1#{@brace_url.txt_close}") + extract_endnotes(dob) + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'[^\1]'). # endnote marker marked up + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'[^\1]'). # endnote marker marked up + gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<'). + gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>'). + gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&'). + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). + gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~'). + gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©'). + gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\') + end + dob.obj=if dob.of==:block # watch + dob.obj.gsub(/#{Mx[:gl_o]}●#{Mx[:gl_c]}/,"* "). + gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n") + else dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n\n") + end + if dob.is==:code + dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _< + gsub(/(^|[^}])_([<>])/m,'\1\2') # _<_< + end + dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1'). + gsub(/<a href=".+?">(.+?)<\/a>/m,'\1'). + gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,''). # remove name links + gsub(/ |#{Mx[:nbsp]}/,' '). # decide on + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]") + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]'). + gsub(/(?:^|[^_\\])\{\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*\}\S+/,'[image: "\1"]') + wordlist=dob.obj.scan(/\S+/) + if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ + #if defined? dob.ocn and dob.ocn.to_s =~/\d+/ + # paranum=dob.ocn.to_s + # @p_num=SiSU_PlaintextFormat::ParagraphNumber.new(paranum) + #end + p_num='' + if @env.plaintext_ocn? + if defined? dob.ocn \ + and dob.ocn.is_a?(Fixnum) + p_num=SiSU_PlaintextFormat::ParagraphNumber.new(dob.ocn).display + end + end + if dob.is==:heading \ + or dob.is==:para + plaintext_structure(dob,p_num) + elsif dob.is==:group \ + or dob.is==:block \ + or dob.is==:verse \ + or dob.is==:code \ + or dob.is==:table + @plaintext[:body] << dob.obj + p_num << @br + elsif dob.is==:break + sp=' ' + ln='-' + @plaintext[:body] <<=if dob.obj==Mx[:br_page] \ + or dob.obj==Mx[:br_page_new] + "#{@br}#{ln*40}#{@br*2}" + elsif dob.obj ==Mx[:br_obj] + "#{@br}#{sp*20}* * *#{@br*2}" + end # following empty line (@br) missing, fix + end + dob='' if (dob.obj =~/<a name="n\d+">/ \ + and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote + if dob ## Clean Prepared Text + dob.obj=dob.obj.gsub(/<!.+!>/,' '). + gsub(/<:\S+>/,' ') + end + end + end + @plaintext + end + def publish(plaintext) + divider='=' + content=[] + content << plaintext[:open] + content << plaintext[:head] + content << plaintext[:body] + content << @@endnotes[:end] if @@endnotes_ + content << "#{@br}#{divider*@wrap_width}#{@br}" + content << plaintext[:metadata] + content << "#{@br}#{divider*@wrap_width}#{@br}" if @md.stmp =~/\w+/ #not used? + content << plaintext[:tail] + Output.new(content,@md).plaintext + @@endnotes={ para: [], end: [] } + end + end + class Output <Source + include SiSU_Param + include SiSU_Env + def initialize(content,md) + @content,@md=content,md + end + def plaintext #%plaintext output + file_plaintext=SiSU_Env::FileOp.new(@md).write_file.txt + @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.gsub!(/\s+$/m,'') + line.gsub!(/^\A[ ]*\Z/m,'') + if line=~/^\A[ ]*\Z/m + emptyline+=1 + else emptyline=0 + end + file_plaintext.puts line if emptyline < 2 #remove extra line spaces (fix upstream) + end + end + else file_plaintext.puts para #unix plaintext # /^([*=-]|\.){5}/ + end + end + file_plaintext.close + end + end + end +end +__END__ +!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# diff --git a/lib/sisu/v2/plaintext_format.rb b/lib/sisu/v4/plaintext_format.rb index a38ae9d2..fe24112d 100644 --- a/lib/sisu/v2/plaintext_format.rb +++ b/lib/sisu/v4/plaintext_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,28 +55,28 @@ ** Description: plaintext formatting template =end -module SiSU_Plaintext_format - require "#{SiSU_lib}/param" # param.rb +module SiSU_PlaintextFormat + require_relative 'param' # param.rb include SiSU_Param include SiSU_Viz - class Paragraph_number + class ParagraphNumber def initialize(paranum) - @paranum=/(\d+)/m.match(paranum)[1] + @paranum=/(\d+)/m.match(paranum.to_s)[1] end def display - @paranum.gsub(/(\d+)/,'<font size="1" color="#777777"> \1</font>') + @paranum.gsub(/(\d+)/,"\n[\\1]") end - def name - @paranum.gsub(/(\d+)/,'<a name="\1"></a>') + def name #unused + @paranum.gsub(/(\d+)/,'\1') end - def goto - @paranum.gsub(/(\d+)/,'<a href="#\1">') + def goto #unused + @paranum.gsub(/(\d+)/,'"#\1"') end end - class Format_text_object + class FormatTextObject def initialize(md,t_o) @md,@t_o=md,t_o - if t_o.class==Hash + if t_o.is_a?(Hash) @txt =t_o[:txt] || nil @lnk_url =t_o[:lnk_url] || nil @lnk_txt =t_o[:lnk_txt] || nil @@ -86,10 +85,10 @@ module SiSU_Plaintext_format p caller end rgx=/^#{Rx[:lv]}/ - @txt.gsub!(rgx,'') if @txt =~rgx + @txt=@txt.gsub(rgx,'') if @txt =~rgx rgx=/#{Mx[:en_a_o]}[\d*+]+\s+(.+?)#{Mx[:en_a_c]}/ - @txt.gsub!(rgx,'\1') if @txt =~rgx - @vz=SiSU_Env::Get_init.instance.skin + @txt=@txt.gsub(rgx,'\1') if @txt =~rgx + @vz=SiSU_Env::GetInit.instance.skin end def scr_endnote_body "<endnote>#{@txt}</endnote> " diff --git a/lib/sisu/v4/po4a.rb b/lib/sisu/v4/po4a.rb new file mode 100644 index 00000000..53bab960 --- /dev/null +++ b/lib/sisu/v4/po4a.rb @@ -0,0 +1,986 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: pot file generation + linefeed) + +=end +module SiSU_Po4a + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + require_relative 'composite' # composite.rb + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'po4a_set' # po4a_set.rb + include SiSU_Param + include SiSU_Viz + pwd=Dir.pwd + class Source + @@opt_src,@@opt_trn,@@opt_src_,@@opt_trn_,@@md_src,@@md_trn=nil,nil,nil,nil,nil,nil + def initialize(opt,fn=nil) + @opt,@fn=opt,fn + #unless @opt.fns =~/(.+?\.(?:-|ssm\.)?sst)$/ + # puts "#{@opt.fns} not a processed file type" + #end + r=Px[:lng_lst_rgx].gsub(/\|en\|/,'|') + @lang_regx=%r{(?:#{r})} + if opt.fns =~/\S+?~#{@lang_regx}\.ss[mti]/ \ + and opt.f_pth[:lng]!=@opt.lng_base + @@opt_src_=false + @@opt_trn=opt + @@md_trn=SiSU_Param::Parameters.new(opt).get + else + @@opt_src_=true + @@opt_src=opt + @@md_src=SiSU_Param::Parameters.new(opt).get + end + end + def read + 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 + src[:files].each do |fn| + SiSU_DAL::Source.new(@opt,fn).read # -m + env=SiSU_Env::InfoEnv.new(@opt.fns) + m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ #watch added match for sss + @fnn,@fnb,@fnt=fn[m,1],fn[m,2],fn[m,3] + unless @opt.cmd =~/q/ + path=env.path.output_tell + tool=(@opt.cmd =~/[MVv]/) \ + ? "#{env.program.text_editor} #{path}/#{md.fnb}/#{md.fn[:plain]}" + : @opt.fns + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Pot po4a',tool).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'Pot po4a',tool).green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{path}/#{md.fnb}/#{md.fn[:plain]}").flow if @opt.cmd =~/[MV]/ + end + if @opt.fns =~/\S+?~#{@lang_regx}\.ss[mti]/ \ + or @opt.f_pth[:lng] !=@opt.lng_base + opt_lang_trn_fn=fn + @dal_array_lang_translation=SiSU_DAL::Source.new(@opt,opt_lang_trn_fn).get # dal file drawn here + opt_lang_src_fn=if fn =~/\S+?~\S{2}(?:_\S{2})?\.ss[mti]/ + fn.gsub(/(\S+?)~\S{2}(?:_\S{2})?(\.ss[mti])/,'\1\2') #check i + else fn + end + transdir,srcdir=Dir.pwd,Dir.pwd + if Dir.pwd.to_s =~/\/#{@lang_regx}$/ + transdir=Dir.pwd + srcdir=transdir.gsub(/\/#{@lang_regx}$/,"/#{@opt.lng_base}") + if FileTest.directory?(srcdir) + Dir.chdir(srcdir) + end + else nil + end + x=if FileTest.file?("#{srcdir}/#{opt_lang_src_fn}") + @dal_array_lang_src=SiSU_DAL::Source.new(@@opt_src,opt_lang_src_fn).get # dal file drawn here + else + puts "no identified source document" + exit + end + Dir.chdir(transdir) if transdir + else + @dal_array_lang_src=SiSU_DAL::Source.new(@opt,fn).get # dal file drawn here + @dal_array_lang_translation=nil + end + wrap_width=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 + else 78 + end + SiSU_Po4a::Source::Scroll.new(fn,@dal_array_lang_src,@dal_array_lang_translation,@@md_src,@@md_trn,wrap_width).songsheet + SiSU_Env::InfoSkin.new(md).select #watch + end + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + private + class Scroll <Source + require_relative 'defaults' # defaults.rb + require_relative 'po4a_set' # po4a_set.rb + include SiSU_Po4aUtils + @@endnotes={ para: [], end: [] } + def initialize(fn,data_src,data_trn,md_src,md_trn,wrap_width) + @fn,@data_src,@data_trn,@md_src,@md_trn,@wrap_width=fn,data_src,data_trn,md_src,md_trn,wrap_width + @md=(md_trn.nil?) \ + ? md_src + : md_trn + @brace_url=SiSU_Viz::Skin.new.url_decoration + @vz=SiSU_Env::GetInit.instance.skin + @tab="\t" + @@endnotes_=(@md.opt.mod.inspect =~/--endnote/) ? true : false # --footnote + @br=(@md.opt.mod.inspect =~/--dos/) ? "\r\n" : "\n" # --unix + @pot={ body: [], open: [], close: [], head: [], metadata: [], tail: [] } + end + def songsheet +############## BUG @fn changes value + fn=@fn + pot=pot_markup(@data_src,@data_trn) + publish(fn,pot) + end + def extract_endnotes(dob='') #% Used for extraction of endnotes from paragraphs + notes_a=dob.obj.scan(/#{Mx[:en_a_o]}([\d]+\s+.+?)#{Mx[:en_a_c]}/) + ##notes_a=dob.obj.scan(/#{Mx[:en_a_o]}([\d*+]+\s+.+?)#{Mx[:en_a_c]}/) + #notes_b=dob.obj.scan(/#{Mx[:en_b_o]}([\d*+]+\s+.+?)#{Mx[:en_b_c]}/) + @n=[] + notes_a.flatten.each do |n| #high cost to deal with <br> appropriately within plaintext, consider + n=n.dup.to_s + n=n.gsub(/^([\d]+)\s+/,'^~\1 '). + #gsub(/^([\d*+]+)\s+/,'^~\1 '). + gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br>') + @n << n + end + notes_a=@n.flatten + 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 + d="#{nt} #{@fn}" + mark="^~ " + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# footnotes, the preferred sisu markup for a footnote is~{this is a footnote}~ however, for translation a footnote reference marker in the text~^ with a set of notes following the paragraph starting on a newline with "^~ this is a footnote", is easier to deal with, if possible these should be converted back to~{inline notes}~} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + 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(desc,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 << [ + "#. #{@po4a_identify_type} - metadata: title", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + ] + w << [ + "#. #{@po4a_identify_type} - metadata: creator", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + ] + w << [ + "#. #{@po4a_identify_type} - metadata: rights", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + ] + w << [ + "#. #{@po4a_identify_type} - metadata: classify", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + meta_src.metadata_tags.classify.head, + meta_src.metadata_tags.classify.relation, + meta_src.metadata_tags.classify.subject, + meta_src.metadata_tags.classify.topic_register, + meta_src.metadata_tags.classify.type, + meta_src.metadata_tags.classify.identifier, + meta_src.metadata_tags.classify.loc, + meta_src.metadata_tags.classify.dewey, + meta_src.metadata_tags.classify.oclc, + meta_src.metadata_tags.classify.isbn, + 'msgstr ""', + ] + w << [ + "#. #{@po4a_identify_type} - metadata: date", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + ] + w << [ + "#. #{@po4a_identify_type} - processing, make instruction", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + meta_src.processing_tags.make.skin, + 'msgstr ""', + ] + 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: SiSU doc' + #@po4a_identify_type='type: Plain text' + meta_src=SiSU_Metadata::Summary.new(@md_src) + meta_trn=SiSU_Metadata::Summary.new(@md_trn) + w=[] + w << [ + "#. #{@po4a_identify_type} - metadata: title", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + meta_trn.metadata_tags.title.main, + meta_trn.metadata_tags.title.sub, + meta_trn.metadata_tags.title.edition, + meta_trn.metadata_tags.title.note, + meta_trn.metadata_tags.title.short, + meta_trn.metadata_tags.title.language, + meta_trn.metadata_tags.title.language_char, + ] + w << [ + "#. #{@po4a_identify_type} - metadata: creator", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + meta_trn.metadata_tags.creator.head, + meta_trn.metadata_tags.creator.author, + meta_trn.metadata_tags.creator.contributor, + meta_trn.metadata_tags.creator.illustrator, + meta_trn.metadata_tags.creator.photographer, + meta_trn.metadata_tags.creator.translator, + meta_trn.metadata_tags.creator.audio, + meta_trn.metadata_tags.creator.digitized_by, + meta_trn.metadata_tags.creator.prepared_by, + ] + w << [ + "#. #{@po4a_identify_type} - metadata: rights", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + meta_trn.metadata_tags.rights.head, + meta_trn.metadata_tags.rights.copyright.text, + meta_trn.metadata_tags.rights.copyright.translation, + meta_trn.metadata_tags.rights.copyright.illustrations, + meta_trn.metadata_tags.rights.copyright.photographs, + meta_trn.metadata_tags.rights.copyright.digitization, + meta_trn.metadata_tags.rights.copyright.audio, + meta_trn.metadata_tags.rights.license, + ] + w << [ + "#. #{@po4a_identify_type} - metadata: classify", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + meta_src.metadata_tags.classify.head, + meta_src.metadata_tags.classify.relation, + meta_src.metadata_tags.classify.subject, + meta_src.metadata_tags.classify.topic_register, + meta_src.metadata_tags.classify.type, + meta_src.metadata_tags.classify.identifier, + meta_src.metadata_tags.classify.loc, + meta_src.metadata_tags.classify.dewey, + meta_src.metadata_tags.classify.oclc, + meta_src.metadata_tags.classify.isbn, + 'msgstr ""', + meta_trn.metadata_tags.classify.head, + meta_trn.metadata_tags.classify.relation, + meta_trn.metadata_tags.classify.subject, + meta_trn.metadata_tags.classify.topic_register, + meta_trn.metadata_tags.classify.type, + meta_trn.metadata_tags.classify.identifier, + meta_trn.metadata_tags.classify.loc, + meta_trn.metadata_tags.classify.dewey, + meta_trn.metadata_tags.classify.oclc, + meta_trn.metadata_tags.classify.isbn, + ] + w << [ + "#. #{@po4a_identify_type} - metadata: date", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + 'msgstr ""', + meta_trn.metadata_tags.date.head, + meta_trn.metadata_tags.date.added_to_site, + meta_trn.metadata_tags.date.available, + meta_trn.metadata_tags.date.created, + meta_trn.metadata_tags.date.issued, + meta_trn.metadata_tags.date.modified, + meta_trn.metadata_tags.date.published, + meta_trn.metadata_tags.date.valid, + ] + w << [ + "#. #{@po4a_identify_type} - processing, make instruction", + "#: en/#{@md.fns}:#{SiSU_Po4aUtils::PotNumber.new.num}", + 'msgid ""', + 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, + meta_src.processing_tags.make.skin, + 'msgstr ""', + meta_trn.processing_tags.make.language, + meta_trn.processing_tags.make.headings, + meta_trn.processing_tags.make.num_top, + meta_trn.processing_tags.make.breaks, + meta_trn.processing_tags.make.emphasis, + meta_trn.processing_tags.make.bold, + meta_trn.processing_tags.make.italics, + meta_trn.processing_tags.make.texpdf_font, + meta_trn.processing_tags.make.skin, + ] + 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_structure(desc,orig,trans,indent=0,hang=0) + SiSU_Po4aUtils::Wrap.new(@md,orig,trans,desc,@wrap_width,indent,hang) + end + def pot_structure_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} " + d="#{dob_src.is.to_s} (level #{dob_src.lv})" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# markup for headings is marker at the start of the line/object, indicating the heading level, and if provided an associated name tag, this heading is "#{mark}"} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig="#{s_mark}#{dob_src.obj}" + trans=(dob_trn=='') ? '' : "#{s_mark}#{dob_trn.obj}" + util=pot_structure(desc,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 pot_structure_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='' + if dob_src.bullet_ + mark="_#{dob_src.indent}* " + d="#{dob_src.is.to_s}: indent #{dob_src.indent}, bullet" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# markup for indented bullet text is at the start of the line/object, an underscore followed by the indent level and an asterisk "#{mark}"} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + else + mark="_#{dob_src.indent} " + d="#{dob_src.is.to_s}: indent #{dob_src.indent}" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# markup for indented text is at the start of the line/object, an underscore followed by the indent level "#{mark}"} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + end + orig="#{s_mark}#{dob_src.obj}" + trans=(dob_trn=='') ? '' : "#{s_mark}#{dob_trn.obj}" + util=pot_structure(desc,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} " + d="#{dob_src.is.to_s}: hang #{dob_src.hang} indent #{dob_src.indent}" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# markup for indented text with a first line indented to a different level from the rest of the paragraph, is at the start of the line/object, an underscore and the first indent level a second underscore and the indent level for the rest of the paragraph, "#{mark1}"} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig="#{s_mark}#{dob_src.obj}" + trans=(dob_trn=='') ? '' : "#{s_mark}#{dob_trn.obj}" + util=pot_structure(desc,orig,trans) + else + s_mark=desc=orig=trans='' + if dob_src.bullet_ + mark='_* ' + d="#{dob_src.is.to_s}: bullet" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct=%{\n# markup for indented text is at the start of the line/object, an underscore followed by an asterisk "#{mark}"} + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig="#{s_mark}#{dob_src.obj}" + trans=(dob_trn=='') ? '' : "#{s_mark}#{dob_trn.obj}" + else + mark='' + d=dob_src.is.to_s + instruct=%{\n# regular paragraph, no special markup} + if @md.opt.cmd=~/M/ + instruct="\n# " + s_mark="\n# " + %{"\\n\\n#{mark}...\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + trans=(dob_trn=='') ? '' : dob_trn.obj + end + util=pot_structure(desc,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 pot_structure_block(dob_src='',notes_s='',dob_trn='',notes_t='') #% Used to extract the structure of a document + mark="block{\\n\\n...\\n\\n}block" + d=dob_src.is.to_s + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct="\n# block text is a text block with an opening and closing marker, the content of which may be wrapped" + s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + trans=(dob_trn=='') ? '' : dob_trn.obj + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_structure_group(dob_src='',notes_s='',dob_trn='',notes_t='') #% Used to extract the structure of a document + mark="group{\\n\\n...\\n\\n}group" + d=dob_src.is.to_s + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct="\n# group text is a text block with an opening and closing marker, the content of which may be wrapped" + s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + trans=(dob_trn=='') ? '' : dob_trn.obj + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_structure_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" + d=dob_src.is.to_s + instruct=s_mark='' + if @md.opt.cmd=~/M/ + 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 + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + trans=(dob_trn=='') ? '' : dob_trn.obj + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_structure_code(dob_src='',notes_s='',dob_trn='',notes_t='') #% Used to extract the structure of a document + mark="code{\\n\\n...\\n\\n}code" + d=dob_src.is.to_s + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct="\n# codeblocks are a text block with an opening and closing marker, the content of which should remain unwrapped" + s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + trans=(dob_trn=='') ? '' : dob_trn.obj + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_structure_table(dob_src='',notes_s='',dob_trn='',notes_t='') #% Used to extract the structure of a document + mark="table{\\n\\n...\\n\\n}table" + d=dob_src.is.to_s + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct="\n# tables are a text block with an opening and closing marker, the content of which should remain unwrapped" + s_mark="\n# " + %{"\\n\\n#{mark}\\n\\n"} + end + desc="#{d}#{s_mark}#{instruct}" + orig=dob_src.obj + orig=orig.gsub(/#{Mx[:tc_c]}/,"\n") + trans=(dob_trn=='') ? '' : dob_trn.obj + trans=trans.gsub(/#{Mx[:tc_c]}/,"\n") + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_structure_idx(dob_src='',dob_trn='') #% Used to extract the structure of a document + mark="={ ... }" + instruct=s_mark='' + if @md.opt.cmd=~/M/ + instruct="\n# the book index should be attached unwrapped to the preceding text block (there should be a new line, but no empty line)" + s_mark="\n# " + %{"\\n#{mark}\\n\\n"} + end + d='book-idx' + desc="#{d}#{s_mark}#{instruct}" + orig='={' + dob_src.idx + '}' + trans=if defined? dob_trn.idx \ + and not dob_trn.idx.nil? \ + and not dob_trn.idx.empty? + '={' + dob_trn.idx + '}' + else '' + end + util=pot_structure(desc,orig,trans) + unwrapped=util.no_line_wrap_block + @pot[:body] << unwrapped << @br + end + def pot_markup(data_src,data_trn) + #@endnotes,@copen,@pot_contents_close=Array.new(3){[]} + a_l=if data_trn + a_l=(data_src.length >= data_trn.length) \ + ? data_src.length + : data_trn.length + else + data_src.length + end + s,t=0,0 + if @md.fns =~ /\.(?:(?:-|ssm\.)?sst|ssm)$/ + (data_trn.nil?) \ + ? pot_metadata_src + : pot_metadata_src_trn + end + 0.upto(a_l-1) do |i| + if data_trn + 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 or data_trn[t].is == :comment) \ + and (data_src[s].is != data_trn[t].is) + if data_src[s].is == :comment + puts "src (comment):\n\t" + data_src[s].obj if @md.opt.cmd =~/M/ + s+=1 + #next if data_src[s].is == :comment + elsif data_trn[t].is == :comment + puts "trans (comment):\n\t" + data_trn[t].obj if @md.opt.cmd =~/M/ + t+=1 + #next if data_trn[t].is == :comment + end + end + if (defined? data_src[s].ocn and data_src[s].ocn.is_a?(Fixnum)) \ + and (defined? data_trn[t].ocn and 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 and data_src[s].ocn.is_a?(Fixnum)) \ + and (defined? data_trn[t].ocn and 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 + p data_src[s].obj + p data_trn[t].ocn + p 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 + exit + elsif (defined? data_src[s].ocn and 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 + p data_trn[t].ocn if defined? data_trn[t].ocn + p 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,notes_t='','' + data_src[s],notes_s=markup(data_src[s]) + if data_trn + data_trn[t],notes_t=markup(data_trn[t]) + #data_src[s],data_trn[t]=pot_data(data_src[s],notes_s,data_trn[t],notes_t) + pot_data(data_src[s],notes_s,data_trn[t],notes_t) + else + #data_src[s],nul=pot_data(data_src[s],notes_s) + pot_data(data_src[s],notes_s) + end + s+=1;t+=1 + end + @pot #watch + end + def pot_data(dob_src='',notes_s='',dob_trn='',notes_t='') + 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,dob_trn,notes_t) + when :para; pot_structure_para(dob_src,notes_s,dob_trn,notes_t) + when :group; pot_structure_group(dob_src,notes_s,dob_trn,notes_t) + when :block; pot_structure_block(dob_src,notes_s,dob_trn,notes_t) + when :verse; pot_structure_verse(dob_src,notes_s,dob_trn,notes_t) + when :code; pot_structure_code(dob_src,notes_s,dob_trn,notes_t) + when :table; pot_structure_table(dob_src,notes_s,dob_trn,notes_t) + end + if defined? dob_src.idx \ + and not dob_src.idx.nil? \ + and not dob_src.idx.empty? + pot_structure_idx(dob_src,dob_trn) + end + dob_src='' if (dob_src.obj =~/<a name="n\d+">/ \ + and dob_src.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote + 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) # Used for major markup instructions + dir=SiSU_Env::InfoEnv.new(@md.fns) + fix=[] + dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, + "#{Px[:po_bold_o]}\\1#{Px[:po_bold_c]}"). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, + "#{Px[:po_italics_o]}\\1#{Px[:po_italics_c]}"). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, + "#{Px[:po_underscore_o]}\\1#{Px[:po_underscore_c]}"). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, + "#{Px[:po_subscript_o]}\\1#{Px[:po_subscript_c]}"). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, + "#{Px[:po_superscript_o]}\\1#{Px[:po_superscript_c]}"). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/, + "#{Px[:po_insert_o]}\\1#{Px[:po_insert_c]}"). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/, + "#{Px[:po_cite_o]}\\1#{Px[:po_cite_c]}"). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/, + "#{Px[:po_strike_o]}\\1#{Px[:po_strike_c]}"). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, + "#{Px[:po_monospace_o]}\\1#{Px[:po_monospace_c]}") + notes='' + unless dob.is==:code + dob.obj=dob.obj.gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,'\1'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1'). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1 [link: <\2>]'). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/,'\1 [link: local image]'). + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1') + #dob.obj.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,"#{@brace_url.txt_open}\\1#{@brace_url.txt_close}") + notes=extract_endnotes(dob) + #% ### footnotes current state - extracted + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'~^'). # endnote marker marked up + #% ### footnotes current state - keep inline + #dob.obj.gsub!(/#{Mx[:en_a_o]}[\d]+\s+(.+?)#{Mx[:en_a_c]}/,'~{ \1 }~') # inline endnote with marker marked up + gsub(/#{Mx[:en_b_o]}[\d]+\s+(.+?)#{Mx[:en_b_c]}/,'~[ \1 ]~'). # inline endnote with marker marked up + gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/,'~{\1 \2 }~'). # inline endnote with marker marked up + gsub(/#{Mx[:en_b_o]}([*+]+)\s+(.+?)#{Mx[:en_b_c]}/,'~[\1 \2 ]~'). # inline endnote with marker marked up + gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<'). + gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>'). + gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&'). + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). + gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~'). + gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©') + end + dob.obj=if dob.of==:block # watch + dob.obj.gsub(/#{Mx[:gl_o]}●#{Mx[:gl_c]}/,"* "). + gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n") + else dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,"\n\n") + end + if dob.is==:code + dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _< + gsub(/(^|[^}])_([<>])/m,'\1\2') # _<_< + end + dob.obj=dob.obj.gsub(/#{Mx[:br_page]}\s*|#{Mx[:br_page_new]}/,''). # remove page breaks + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1'). + gsub(/<a href=".+?">(.+?)<\/a>/m,'\1'). + gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,''). # remove name links + gsub(/ |#{Mx[:nbsp]}/,' '). # decide on + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]") + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}image/,' [ \1 ]'). #"[ #{dir.url.images_local}\/\\1 ]") + gsub(/(?:^|[^_\\])\{\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*\}\S+/,'[image: "\1"]') + [dob,notes] + end + def publish(fn,pot) + divider='=' + content=[] + content << pot[:open] + content << pot[:head] + content << pot[:metadata] + content << pot[:body] + content << @@endnotes[:end] if @@endnotes_ + Output.new(fn,content,@md).po4a + @@endnotes={ para: [], end: [] } + end + end + class Output <Source + include SiSU_Param + include SiSU_Env + def initialize(fn,content,md) + @fn,@content,@md=fn,content,md + @file=SiSU_Env::FileOp.new(md,fn) + end + def po4a #%pot output + 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.cmd =~/M/ + require_relative 'git' # git.rb + git=SiSU_Git::Source.new(@md.opt) + git.create_file_structure_git unless FileTest.directory?(@file.output_path.pot_git.dir) + 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__ +!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# + +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 diff --git a/lib/sisu/v4/po4a_set.rb b/lib/sisu/v4/po4a_set.rb new file mode 100644 index 00000000..0dcc25a9 --- /dev/null +++ b/lib/sisu/v4/po4a_set.rb @@ -0,0 +1,299 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: modules shared by flatfile output generators + +=end +module SiSU_Po4aUtils + class Wrap + def initialize(md,orig='',trans='',is_desc='',n_char_max=76,n_indent=0,n_hang=nil) + @md,@orig,@trans,@is_desc,@n_char_max,@n_indent=md,orig,trans,is_desc,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| + y=y.gsub(/"/,'\"') + y=%{"#{y}"} + z << y + end + pot[i]=z.join("\n") + i +=1 + pot + end + trans=(pot.length == 2) ? pot[1] : '' + po_str=<<WOK +#. #{@po4a_identify_type} - #{@is_desc} +#: en/#{@md.fns}:#{PotNumber.new.num} +msgid "" +#{pot[0]} +msgstr "" +#{trans} +WOK + 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| + y=y.gsub(/"/,'\"') + y=%{"#{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 +#. #{@po4a_identify_type} - #{@is_desc} +#: en/#{@md.fns}:#{PotNumber.new.num} +#, no-wrap +msgid "" +#{pot[0]} +msgstr "" +#{trans} +WOK + 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) + dc=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 + meta=case @p + when /^#{Mx[:meta_o]}(title)#{Mx[:meta_c]}\s*(.+?)$/; header($1,@md.title.full,'meta','dc') #dc 1 + when /^#{Mx[:meta_o]}(creator|author)#{Mx[:meta_c]}\s*(.+?)$/; header('creator',$2,'meta','dc') #dc 2 + when /^#{Mx[:meta_o]}(subject)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 3 + when /^#{Mx[:meta_o]}(description)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 4 + when /^#{Mx[:meta_o]}(publisher)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 5 + when /^#{Mx[:meta_o]}(contributor)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 6 + when /^#{Mx[:meta_o]}(date)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 7 + when /^#{Mx[:meta_o]}(date\.created)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(date\.issued)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(date\.available)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(date\.valid)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(date\.modified)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(type)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 8 + when /^#{Mx[:meta_o]}(format)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 9 + when /^#{Mx[:meta_o]}(identifier)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 10 + when /^#{Mx[:meta_o]}(source)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 11 + when /^#{Mx[:meta_o]}(language)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 12 + when /^#{Mx[:meta_o]}(relation)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 13 + when /^#{Mx[:meta_o]}(coverage)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 14 + when /^#{Mx[:meta_o]}(rights)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','dc') #dc 15 + when /^#{Mx[:meta_o]}(keywords)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(copyright)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(translator|translated_by)#{Mx[:meta_c]}\s*(.+?)$/; header('translator',$2) + when /^#{Mx[:meta_o]}(illustrator|illustrated_by)#{Mx[:meta_c]}\s*(.+?)$/; header('illustrator',$2) + when /^#{Mx[:meta_o]}(prepared_by)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(digitized_by)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(comments?)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(abstract)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(tags?)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(catalogue)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'meta','extra') + when /^#{Mx[:meta_o]}(class(?:ify)?_loc)#{Mx[:meta_c]}\s*(.+?)$/; header('classify_loc',$2,'meta','extra') + when /^#{Mx[:meta_o]}(class(?:ify)?_dewey)#{Mx[:meta_c]}\s*(.+?)$/; header('classify_dewey',$2,'meta','extra') + when /^#{Mx[:meta_o]}(class(?:ify)?_pg)#{Mx[:meta_c]}\s*(.+?)$/; header('classify_pg',$2,'meta','extra') + when /^#{Mx[:meta_o]}(class(?:ify)?_isbn)#{Mx[:meta_c]}\s*(.+?)$/; header('classify_isbn',$2,'meta','extra') + when /^#{Mx[:meta_o]}(toc|structure)#{Mx[:meta_c]}\s*(.+?)$/; header('structure',$2,'process','instruct') + when /^#{Mx[:meta_o]}(level|page|markup)#{Mx[:meta_c]}\s*(.+?)$/; header('markup',$2,'process','instruct') + when /^#{Mx[:meta_o]}(bold)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(italics|itali[sz]e)#{Mx[:meta_c]}\s*(.+?)$/; header('italicize',$2,'process','instruct') + when /^#{Mx[:meta_o]}(vocabulary|wordlist)#{Mx[:meta_c]}\s*(.+?)$/; header('vocabulary',$2,'process','instruct') + when /^#{Mx[:meta_o]}(skin)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(css|stylesheet)#{Mx[:meta_c]}\s*(.+?)$/; header('css',$2,'process','instruct') + when /^#{Mx[:meta_o]}(links)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(prefix)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') #add a & b + when /^#{Mx[:meta_o]}(suffix)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(information)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(contact)#{Mx[:meta_c]}\s*(.+?)$/; header($1,$2,'process','instruct') + when /^#{Mx[:meta_o]}(rcs|cvs)#{Mx[:meta_c]}\s*(.+?)$/; header('version',$2,'process','instruct') + else nil + end + end + def dublin + out=if @p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/ + start_is_match + else nil + end + end + def meta + out=if @p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/ + start_is_match + else nil + end + 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/v2/i18n.rb b/lib/sisu/v4/prog_text_translation.rb index c43daabe..03ae97b1 100644 --- a/lib/sisu/v2/i18n.rb +++ b/lib/sisu/v4/prog_text_translation.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,92 +55,8 @@ ** Description: internationalisation =end -module SiSU_i18n - class Language - def initialize(md) - @md=md - end - def tex_name(char) - @lang=if char - case char - when 'sq'; 'albanian' - when 'am'; 'amharic' - #when 'ar'; 'arabic' # see polyglossia - when 'hy'; 'armenian' - #when ''; 'asturian' # polyglossia - #when ''; 'bahasai' # polyglossia - #when ''; 'bahasam' # polyglossia - when 'eu'; 'basque' - when 'bn'; 'bengali' - when 'pt_BR'; 'brazilian' - when 'br'; 'breton' - when 'bg'; 'bulgarian' - when 'ca'; 'catalan' # see polyglossia - #when ''; 'coptic' # polyglossia - when 'hr'; 'croatian' - when 'cs'; 'czech' - when 'da'; 'danish' - #when ''; 'divehi' # polyglossia - when 'nl'; 'dutch' # see polyglossia - when 'en'; 'english' # see polyglossia - when 'eo'; 'esperanto' # see polyglossia - when 'et'; 'estonian' - when 'gl'; 'galician' - when 'de'; 'german' - when 'el'; 'greek' #gl ? - when 'he'; 'hebrew' - when 'hi'; 'hindi' - when 'is'; 'icelandic' - when 'ia'; 'interlingua' - when 'ga'; 'irish' - when 'it'; 'italian' - #when ''; 'farsi' # polyglossia - when 'fi'; 'finnish' - when 'fr'; 'french' - when 'lo'; 'lao' - when 'la'; 'latin' - when 'lv'; 'latvian' - when 'lt'; 'lithuanian' - #when ''; 'lsorbian' # polyglossia - #when ''; 'magyar' # polyglossia - when 'ml'; 'malayalam' - when 'mr'; 'marathi' - #when 'hu'; 'magyar' - when 'no'; 'norske' - when 'nn'; 'nynorsk' - when 'oc'; 'occitan' - when 'pl'; 'polish' - when 'pt'; 'portuges' - when 'ro'; 'romanian' - when 'ru'; 'russian' - when 'se'; 'samin' #(check sami?) - when 'sa'; 'sanskrit' - when 'sr'; 'serbian' - #when ''; 'scottish' # polyglossia (gd (Gaelic (Scots))) - when 'sk'; 'slovak' - when 'sl'; 'slovenian' - when 'es'; 'spanish' - when 'sv'; 'swedish' - when 'ta'; 'tamil' - when 'te'; 'telugu' - when 'th'; 'thai' - when 'tr'; 'turkish' - when 'tk'; 'turkmen' - when 'uk'; 'ukrainian' - when 'ur'; 'urdu' - #when ''; 'usorbian' # polyglossia - when 'vi'; 'vietnamese' - when 'cy'; 'welsh' - when 'us'; 'USenglish' # depreciated, see iso-639-2 - else 'english' - end - else 'english' - end - end - end -end module SiSU_Translate - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env; include SiSU_Param class Source def initialize(md,doc_lang,trans_str='') @@ -153,7 +68,8 @@ module SiSU_Translate when /German/i; German.new(md,doc_lang,trans_str) when /Italian/i; Italian.new(md,doc_lang,trans_str) when /Spanish/i; Spanish.new(md,doc_lang,trans_str) - when /Brazilian(?: Portuguese)?/i; Portuguese.new(md,doc_lang,trans_str) # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + Portuguese.new(md,doc_lang,trans_str) # tag depreciated, see iso 639-2 when /Portuguese/i; Portuguese.new(md,doc_lang,trans_str) when /Swedish/i; Swedish.new(md,doc_lang,trans_str) when /Danish/i; Danish.new(md,doc_lang,trans_str) @@ -177,13 +93,9 @@ module SiSU_Translate else English.new(md,doc_lang,trans_str) end end - def filename @lang_class.filename end - def description - @lang_class.description - end def metadata @lang_class.metadata end @@ -229,6 +141,9 @@ module SiSU_Translate def digitized_by @lang_class.digitized_by end + def contents + @lang_class.contents + end def subject @lang_class.subject end @@ -244,9 +159,6 @@ module SiSU_Translate def rights @lang_class.rights end - def digitized_by - @lang_class.digitized_by - end def date @lang_class.date end @@ -369,7 +281,8 @@ module SiSU_Translate when /German/i; 'Deutsch' when /Italian/i; 'Italiano' when /Spanish/i; 'español' - when /Brazilian(?: Portuguese)?/i; 'Brazilian Português' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Brazilian Português' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Português' when /Swedish/i; 'svenska' when /Danish/i; 'dansk' @@ -405,9 +318,6 @@ module SiSU_Translate def filename 'filename' end - def description - 'description' - end def filetype_description 'filetype description' end @@ -450,6 +360,9 @@ module SiSU_Translate def digitized_by 'Digitized by' end + def contents + 'Contents' + end def subject #dc 'Subject' end @@ -587,7 +500,8 @@ module SiSU_Translate when /German/i; 'German' when /Italian/i; 'Italian' when /Spanish/i; 'Spanish' - when /Brazilian(?: Portuguese)?/i; 'Brazilian Portuguese' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Brazilian Portuguese' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Portuguese' when /Swedish/i; 'Swedish' when /Danish/i; 'Danish' @@ -619,9 +533,6 @@ module SiSU_Translate def filename 'nom de fichier' end - def description - 'description' - end def filetype_description description end @@ -664,6 +575,9 @@ module SiSU_Translate def digitized_by 'Numérisé par' end + def contents + 'Contents' #translate + end def subject #dc 'Sujet' end @@ -801,7 +715,8 @@ module SiSU_Translate when /German/i; 'Allemand' when /Italian/i; 'Italien' when /Spanish/i; 'Espagnol' - when /Brazilian(?: Portuguese)?/i; 'Portugais brésilien' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Portugais brésilien' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Portugais' when /Swedish/i; 'Suédois' when /Danish/i; 'Danois' @@ -833,9 +748,6 @@ module SiSU_Translate def filename 'Dateiname' end - def description - 'Beschreibung' - end def filetype_description description end @@ -875,6 +787,9 @@ module SiSU_Translate def digitized_by 'digitalisiert von' end + def contents + 'Contents' #translate + end def subject 'Titel' end @@ -1012,7 +927,8 @@ module SiSU_Translate when /German/i; 'Deutsch' when /Italian/i; 'Italienisch' when /Spanish/i; 'Spanisch' - when /Brazilian(?: Portuguese)?/i; 'Brasilianisch-Portugiesisch' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Brasilianisch-Portugiesisch' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Portugiesisch' when /Swedish/i; 'Schwedisch' when /Danish/i; 'Dänisch' @@ -1044,209 +960,210 @@ module SiSU_Translate def filename 'nombre del fichero' end - def description - 'descripción' - end def filetype_description description end - def metadata - 'metadatos' - end - def file_size - 'tamaño del fichero' - end - def full_title #dc - 'Título' - end - def title - 'Título' - end - def subtitle - 'Subtítulo' - end - def author #dc - 'Creador' - end - def contributor #dc - 'Contribuidor' - end - def translator - 'Traductor' - end - def illustrator - 'Ilustrador' - end - def publisher #dc - 'Editor' - end - def prepared_by - 'Preparado por' - end - def digitized_by - 'Digitalizado por' - end - def subject #dc - 'Asunto' - end - def description #dc (watch) - 'Descripción' - end - def abstract #dc - 'Resumen' - end - def type #dc - 'Tipo' - end - def rights #dc - 'Derechos' - end - def date #dc - 'Fecha' - end - def date_created #dc - 'Fecha de creación' - end - def date_issued #dc - 'Fecha de publicación' - end - def date_available #dc - 'Fecha de disponibilidad' - end - def date_modified #dc - 'Fecha de modificación' - end - def date_valid #dc - 'Fecha de valided' - end - def language #dc - 'Idioma' - end - def language_original - 'Lenguaje original' - end - def format #dc - 'Formato' - end - def identifier #dc - 'Identificador' - end - def source #dc - 'Fuente' - end - def relation #dc - 'Relación' - end - def coverage #dc - 'Cobertura' - end - def keywords - 'Palabras claves' - end - def comments - 'Comentarios' - end - def cls_loc - 'Clasificación Biblioteca del Congreso' - end - def cls_dewey - 'Clasificación Dewey' - end - def cls_oclc # fix - 'Classify OCLC number' + def metadata + 'metadatos' end - def cls_gutenberg - 'Clasificación Proyecto Gutenberg' - end - def cls_isbn - 'Clasificación ISBN' - end - def prefix_a - 'Prefijo (a)' - end - def prefix_b - 'Prefijo (b)' - end - def topic_register - 'Topics Registered' + def file_size + 'tamaño del fichero' end - def sourcefile - 'Fichero fuente' - end - def word_count - 'Número de palabras apróximado' - end - def sourcefile_digest - 'Resumen del fichero fuente' - end - def digest_md5 - 'Resumen del fichero fuente (md5)' - end - def digest_sha256 - 'Resumen del fichero fuente (sha256)' - end - def sc_number - 'Versión (RCS/CVS) del documento' - end - def sc_date - 'Versión (RCS/CVS) del documento' - end - def last_generated - 'Última generación (metaverse) del documento' - end - def sisu_version - 'Generado por' - end - def ruby_version - 'Versión de Ruby' - end - def suggested_links - 'enlaces sugeridos de metadatos' - end - def language_version_list - 'Document Language Versions, manifests' - end - def manifest_description - 'SiSU manifest of document filetypes and metadata' + def full_title #dc + 'Título' end - def manifest_description_output - 'Manifiesto SiSU de salida generada' - end - def manifest_description_metadata - 'Manifiesto SiSU de metadatos de documento' - end - def language_list_translated - lang=case @trans_str - when /American/i; 'Inglés Americano' # tag depreciated, see iso 639-2 - when /English/i; 'Inglés' - when /French/i; 'Francés' - when /German/i; 'Alemán' - when /Italian/i; 'Italiano' - when /Spanish/i; 'Español' - when /Brazilian(?: Portuguese)?/i; 'Portugués de Brasil' # tag depreciated, see iso 639-2 - when /Portuguese/i; 'Portugués' - when /Swedish/i; 'Sueco' - when /Danish/i; 'Danés' - when /Finnish/i; 'Finés' - when /Norwegian/i; 'Noruego' - when /Icelandic/i; 'Islandés' - when /Dutch/i; 'Holandés' - when /Estonian/i; 'Estonio' - when /Hungarian/i; 'Húngaro' - when /Polish/i; 'Polaco' - when /Romanian/i; 'Rumano' - when /Russian/i; 'Ruso' - when /Greek/i; 'Griego' - when /Ukranian/i; 'Ucraniano' - when /Turkish/i; 'Turco' - when /Slovenian/i; 'Eslovaco' - when /Croatian/i; 'Croata' - when /Slovak(?:ian)?/i; 'Eslovaco' - when /Czech/i; 'Checo' - when /Bulgarian/i; 'Búlgaro' - else @trans_str + def title + 'Título' + end + def subtitle + 'Subtítulo' + end + def author #dc + 'Creador' + end + def contributor #dc + 'Contribuidor' + end + def translator + 'Traductor' + end + def illustrator + 'Ilustrador' + end + def publisher #dc + 'Editor' + end + def prepared_by + 'Preparado por' + end + def digitized_by + 'Digitalizado por' + end + def contents + 'Contents' #translate + end + def subject #dc + 'Asunto' + end + def description #dc (watch) + 'Descripción' + end + def abstract #dc + 'Resumen' + end + def type #dc + 'Tipo' + end + def rights #dc + 'Derechos' + end + def date #dc + 'Fecha' + end + def date_created #dc + 'Fecha de creación' + end + def date_issued #dc + 'Fecha de publicación' + end + def date_available #dc + 'Fecha de disponibilidad' + end + def date_modified #dc + 'Fecha de modificación' + end + def date_valid #dc + 'Fecha de valided' + end + def language #dc + 'Idioma' + end + def language_original + 'Lenguaje original' + end + def format #dc + 'Formato' + end + def identifier #dc + 'Identificador' + end + def source #dc + 'Fuente' + end + def relation #dc + 'Relación' + end + def coverage #dc + 'Cobertura' + end + def keywords + 'Palabras claves' + end + def comments + 'Comentarios' + end + def cls_loc + 'Clasificación Biblioteca del Congreso' + end + def cls_dewey + 'Clasificación Dewey' + end + def cls_oclc # fix + 'Classify OCLC number' + end + def cls_gutenberg + 'Clasificación Proyecto Gutenberg' + end + def cls_isbn + 'Clasificación ISBN' + end + def prefix_a + 'Prefijo (a)' + end + def prefix_b + 'Prefijo (b)' + end + def topic_register + 'Topics Registered' + end + def sourcefile + 'Fichero fuente' + end + def word_count + 'Número de palabras apróximado' + end + def sourcefile_digest + 'Resumen del fichero fuente' + end + def digest_md5 + 'Resumen del fichero fuente (md5)' + end + def digest_sha256 + 'Resumen del fichero fuente (sha256)' + end + def sc_number + 'Versión (RCS/CVS) del documento' + end + def sc_date + 'Versión (RCS/CVS) del documento' + end + def last_generated + 'Última generación (metaverse) del documento' + end + def sisu_version + 'Generado por' + end + def ruby_version + 'Versión de Ruby' + end + def suggested_links + 'enlaces sugeridos de metadatos' + end + def language_version_list + 'Document Language Versions, manifests' + end + def manifest_description + 'SiSU manifest of document filetypes and metadata' end - end + def manifest_description_output + 'Manifiesto SiSU de salida generada' + end + def manifest_description_metadata + 'Manifiesto SiSU de metadatos de documento' + end + def language_list_translated + lang=case @trans_str + when /American/i; 'Inglés Americano' # tag depreciated, see iso 639-2 + when /English/i; 'Inglés' + when /French/i; 'Francés' + when /German/i; 'Alemán' + when /Italian/i; 'Italiano' + when /Spanish/i; 'Español' + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Portugués de Brasil' # tag depreciated, see iso 639-2 + when /Portuguese/i; 'Portugués' + when /Swedish/i; 'Sueco' + when /Danish/i; 'Danés' + when /Finnish/i; 'Finés' + when /Norwegian/i; 'Noruego' + when /Icelandic/i; 'Islandés' + when /Dutch/i; 'Holandés' + when /Estonian/i; 'Estonio' + when /Hungarian/i; 'Húngaro' + when /Polish/i; 'Polaco' + when /Romanian/i; 'Rumano' + when /Russian/i; 'Ruso' + when /Greek/i; 'Griego' + when /Ukranian/i; 'Ucraniano' + when /Turkish/i; 'Turco' + when /Slovenian/i; 'Eslovaco' + when /Croatian/i; 'Croata' + when /Slovak(?:ian)?/i; 'Eslovaco' + when /Czech/i; 'Checo' + when /Bulgarian/i; 'Búlgaro' + else @trans_str + end + end end class Italian def initialize(md,doc_lang,trans_str) @@ -1255,9 +1172,6 @@ module SiSU_Translate def filename 'nome del file' end - def description - 'descrizione' - end def filetype_description description end @@ -1297,6 +1211,9 @@ module SiSU_Translate def digitized_by 'Convertito in digitale da' end + def contents + 'Contents' #translate + end def subject #dc 'Oggetto' end @@ -1434,7 +1351,8 @@ module SiSU_Translate when /German/i; 'Tedesco' when /Italian/i; 'Italiano' when /Spanish/i; 'Spagnolo' - when /Brazilian(?: Portuguese)?/i; 'Portoguese (Brasile)' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Portoguese (Brasile)' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Portoguese' when /Swedish/i; 'Svedese' when /Danish/i; 'Danese' @@ -1466,9 +1384,6 @@ module SiSU_Translate def filename 'tiedostonimi' end - def description - 'kuvaus' - end def filetype_description description end @@ -1508,6 +1423,9 @@ module SiSU_Translate def digitized_by 'Digitalisoinut' end + def contents + 'Contents' #translate + end def subject #dc 'aihe' end @@ -1645,7 +1563,8 @@ module SiSU_Translate when /German/i; 'Saksa' when /Italian/i; 'Italia' when /Spanish/i; 'Espanja' - when /Brazilian(?: Portuguese)?/i; 'Brasilian portugali' # tag depreciated, see iso 639-2 + when /Portuguese Brazil|Brazilian(?: Portuguese)?/i; + 'Brasilian portugali' # tag depreciated, see iso 639-2 when /Portuguese/i; 'Portugali' when /Swedish/i; 'Ruotsi' when /Danish/i; 'Tanska' @@ -1670,9 +1589,12 @@ module SiSU_Translate end end end - class Porguguese < English + class Portuguese < English end class Swedish < English + def contents + 'Innehåll' + end end class Danish < English end diff --git a/lib/sisu/v4/qrcode.rb b/lib/sisu/v4/qrcode.rb new file mode 100644 index 00000000..0d126266 --- /dev/null +++ b/lib/sisu/v4/qrcode.rb @@ -0,0 +1,745 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: summary of generated outputs and metadata + +=end +module SiSU_QRcode + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + require_relative 'prog_text_translation' # prog_text_translation.rb + require_relative 'particulars' # particulars.rb + include SiSU_Particulars + require_relative 'html' # html.rb + require_relative 'param' # param.rb + include SiSU_Param + require_relative 'i18n' # i18n.rb + include SiSU_Viz + 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) + @md=SiSU_Param::Parameters.new(@opt).get + SiSU_Env::InfoSkin.new(@md).select + xbrowser=@env.program.web_browser + browser=@env.program.console_web_browser + unless @opt.cmd =~/q/ + url_html="file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}" + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'QR code',"#{xbrowser} #{url_html}").green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'QR code',"[#{@opt.f_pth[:lng_is]}] #{@opt.fns}").green_title_hi + SiSU_Screen::Ansi.new(@opt.cmd,"#{browser} #{url_html}").grey_tab if @opt.cmd =~/v/i + end + data=SiSU_HTML::Source::HTML_Environment.new(@particulars).tuned_file_instructions + OutputInfo.new(@md).check_output(data) + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + private + class OutputInfo <Source + def initialize(md) + @manifest={ txt: [], txt_title: [] } + @md,@fns=md,md.fns + @env=SiSU_Env::InfoEnv.new(@md.fns) + @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.type + @dg=@@dg + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + @language=l[:n] + @translate=SiSU_Translate::Source.new(@md,@language) + @brace_url=SiSU_Viz::Skin.new.url_decoration + @f.make_path(@f.output_path.qrcode.dir) + end + def output_metadata + fn=@f.base_filename.manifest_txt + mn='' + if @md.opt.cmd =~/M/ + pt=@f.output_path.manifest.dir + 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.cmd =~/V/ + manifest << x if @md.opt.cmd =~/M/ + mn += x + end + manifest.close if @md.opt.cmd =~/M/ + #system(%{ + # cat #{pt}/#{fn} | qrencode -s 3 -o qrcm.autonomy_markup0.png + #}) + cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_md.dir,@md.opt.cmd) + cmd.qrencode + #system(%{ + # echo "#{mn}" | qrencode -s 3 -o #{@dest}/qrc_md.#{fn}.png + #}) + end + def output_metadata_short + fn=@f.base_filename.manifest_txt + mn='' + @manifest[:txt_title].each do |x| + mn += x + end + cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_title.dir,@md.opt.cmd) + cmd.qrencode + #system(%{ + # echo "#{mn}" | qrencode -s 3 -o #{@dest}/qrc_title.#{fn}.png + #}) + 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} + #{@brace_url.txt_open}#{url}/#{file}#{@brace_url.txt_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} + #{@brace_url.txt_open}#{url}/#{file}#{@brace_url.txt_close} +WOK + end + def summarize_sources(id,file,pth,rel,url) + sys=SiSU_Env::SystemCall.new + dgst=(@dg =~/^sha(?:2|256)$/) \ + ? (sys.sha256("#{pth}/#{file}")) + : (sys.md5("#{pth}/#{file}")) + SiSU_Screen::Ansi.new(@md.opt.cmd,"#{dgst[1]} #{file}").warn if @md.opt.cmd =~/[vVM]/ + 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} + #{@brace_url.txt_open}#{url}/#{file}#{@brace_url.txt_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 + #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}.#{lc}.html" + #else + # "#{url}/sisu_manifest.#{lc}.html" + #end + manifests + @m=@m.uniq + @m + end + def languages(id,file) + flv=published_manifests? + flv.each do |l| + lang=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]} #{@brace_url.txt_open}#{l[:mu]}#{@brace_url.txt_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} #{@brace_url.txt_open}#{static}#{@brace_url.txt_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=if @md.opt.cmd =~/a/ then 'Plaintext (Unix (UTF-8) with footnotes)' + elsif @md.opt.cmd =~/e/ then 'Plaintext (Unix (UTF-8) with endnotes)' + elsif @md.opt.cmd =~/A/ then 'Plaintext (dos (UTF-8) with footnotes)' + elsif @md.opt.cmd =~/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 + req=@md.fns + 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.classify.subject \ + and @md.classify.subject=~/\S+/ + id,info=@translate.subject,@md.classify.subject + 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.type \ + and @md.type=~/\S+/ #dc + id,info=@translate.type,@md.type + 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.format \ + and @md.classify.format=~/\S+/ + id,info=@transate.format,@md.classify.format + metadata(id,info) + end + if defined? @md.classify.identifier \ + and @md.classify.identifier=~/\S+/ + id,info=@translate.identifier,@md.classify.identifier + 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.classify.relation \ + and @md.classify.relation=~/\S+/ + id,info=@translate.relation,@md.classify.relation + metadata(id,info) + end + if defined? @md.classify.coverage \ + and @md.classify.coverage=~/\S+/ + id,info=@translate.coverage,@md.classify.coverage + 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.notes.comment \ + and @md.notes.comment=~/\S+/ + id,info=@translate.comments,@md.notes.comment + 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.classify.oclc \ + and @md.classify.oclc=~/\S+/ + id,info=@translate.cls_oclc,@md.classify.oclc + @manifest[:txt] << %{#{id}:\n} + @manifest[:txt] << %{#{info}\n} + end + if defined? @md.classify.pg \ + and @md.classify.pg=~/\S+/ + id,info=@translate.cls_gutenberg,@md.classify.pg + metadata(id,info) + end + if defined? @md.classify.isbn \ + and @md.classify.isbn=~/\S+/ + id,info=@translate.cls_isbn,@md.classify.isbn + 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.topic_register_array \ + and @md.topic_register_array.length > 0 + @manifest[:txt] << %{#{@translate.topic_register}:\n} +@sp=' ' + @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] << %{#{@sp*i}#{v}\n} + end + else @manifest[:txt] << %{#{@sp*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 + id,file='','' + vz=SiSU_Env::GetInit.instance.skin + @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} + #{@brace_url.txt_open}#{@en_manifest}#{@brace_url.txt_close} +WOK + metadata_tests + @manifest[:txt_title] <<<<WOK + #{@brace_url.txt_open}#{@en_manifest}#{@brace_url.txt_close} +WOK + source_tests + @manifest[:txt] <<<<WOK +#{@translate.language_version_list} +WOK + language_versions + output_metadata + output_metadata_short + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + end + end +end +__END__ diff --git a/lib/sisu/v2/relaxng.rb b/lib/sisu/v4/relaxng.rb index 76962460..da40313d 100644 --- a/lib/sisu/v2/relaxng.rb +++ b/lib/sisu/v4/relaxng.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,8 +55,8 @@ ** Description: relaxng flow/logic =end -module SiSU_relaxng - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_Relaxng + require_relative 'sysenv' # sysenv.rb class RelaxNG def gpl3_or_later @gpl3_or_later =<<RELAXNG @@ -70,15 +69,13 @@ module SiSU_relaxng * Author: Ralph Amissah - * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008 Ralph Amissah All Rights Reserved. + * Copyright: (C) 1997 - 2012 Ralph Amissah All Rights Reserved. * License: GPL 3 or later: SiSU, a framework for document structuring, publishing and search - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008 Ralph Amissah + Copyright: (C) 1997 - 2012 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 diff --git a/lib/sisu/v2/remote.rb b/lib/sisu/v4/remote.rb index d737dad6..c03dad7a 100644 --- a/lib/sisu/v2/remote.rb +++ b/lib/sisu/v4/remote.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,29 +56,29 @@ =end module SiSU_Remote - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd class Put def initialize(opt) @opt=opt - @dir=SiSU_Env::Info_env.new(@opt.fns) - @put=unless @opt.fns =~/\.ssm\.sst$/; @opt.fns - else @opt.fns.gsub(/(.+)?\.ssm\.sst$/,'\1.ssm') - end - @remote=SiSU_Env::Info_remote.new(@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.cmd,'Remote placement ->',@put).dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.rsync + @remote.rsync.document end def rsync_base SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','rsync').dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.rsync_base + @remote.rsync.site_base end def rsync_base_sync SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','rsync and sync').dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.rsync_base_sync + @remote.rsync.site_base_sync end def rsync_sitemaps SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement sitemaps ->','rsync').dark_grey_title_hi unless @opt.cmd =~/q/ @@ -91,15 +90,15 @@ module SiSU_Remote end def scp SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->',@put).dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.scp + @remote.scp.document end def scp_base SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement of base site ->','excluding images').dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.scp_base + @remote.scp.site_base end def scp_base_all SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->','complete').dark_grey_title_hi unless @opt.cmd =~/q/ - @remote.scp_base_all + @remote.scp.site_base_all end end class Get @@ -111,7 +110,7 @@ module SiSU_Remote def fns require 'open-uri' require 'pp' - require "#{SiSU_lib}/composite" # composite.rb + require_relative 'composite' # composite.rb @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ @rgx_skin=/@skin:\s+(\S+)/ threads=[] @@ -124,9 +123,9 @@ module SiSU_Remote imagedir=base_uri + '/_sisu/image' #check on doc_skin_dir = /((?:https?|file):\/\/\S+?)\/[^\/]+?\.sst$/.match(url).captures.join + '/_sisu/skin/doc' downloaded_file=File.new("#{fnb}.-sst",'w+') - image_download_url=SiSU_Assemble::Remote_image.new.image(imagedir) + image_download_url=SiSU_Assemble::RemoteImage.new.image(imagedir) images=[] - skin=SiSU_Assemble::Remote_image.new.image(doc_skin_dir) + skin=SiSU_Assemble::RemoteImage.new.image(doc_skin_dir) f.collect.each do |r| # work area unless r =~/^%+\s/ skin << r.scan(@rgx_skin).uniq if r =~@rgx_skin @@ -139,17 +138,18 @@ module SiSU_Remote end if skin \ and skin.length > 0 - SiSU_Assemble::Remote_image.new.download_doc_skin(skin) + SiSU_Assemble::RemoteImage.new.download_doc_skin(skin) end if images \ and images.length > 1 - images.flatten! - images.uniq! + images=images.flatten.uniq images.delete_if {|x| x =~/https?:\/\// } - images.sort! + images=images.sort @msg,@msgs='downloading images:', [ images.join(',') ] @tell.call.warn unless @opt.cmd =~/q/ - SiSU_Assemble::Remote_image.new.download_images(image_download_url[0],images) + 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.cmd =~/q/ end @@ -164,8 +164,7 @@ module SiSU_Remote if get_p.length > 0 #% remote sisupod require 'net/http' for requested_pod in get_p - pod_info=Remote_download.new(requested_pod) - @opt.fns=pod_info.pod.name + 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| @@ -176,17 +175,17 @@ module SiSU_Remote end end end - class Remote_download + class RemoteDownload def initialize(requested_file) @requested_file=requested_file end def pod - re_p_div=/https?:\/\/([^\/]+)(\/\S+)\/(sisupod(?:\.zip)?|\S+?(?:\.ss[mt]\.zip)?|[^\/]+?\.ssp)$/ - re_p=/(sisupod(?:\.zip)?|\S+?\.ss[mt](?:\.zip)?|[^\/]+?\.ssp)$/ + 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 + @pod=re_p.match(@requested_file).captures.join end def site @site diff --git a/lib/sisu/v2/response.rb b/lib/sisu/v4/response.rb index 8fad9fc9..d660d398 100644 --- a/lib/sisu/v2/response.rb +++ b/lib/sisu/v4/response.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -62,9 +61,9 @@ module SiSU_Response response='redo' print ask + " ['yes', 'no' or 'quit']: " response=File.new('/dev/tty').gets.strip - ans=if response=='yes'; true - elsif response=='no'; false - elsif response =~/^quit|exit$/; exit + ans=if response=='yes' then true + elsif response=='no' then false + elsif response =~/^quit|exit$/ then exit else puts "[please type: 'yes', 'no' or 'quit']" response?(ask) end diff --git a/lib/sisu/v2/rexml.rb b/lib/sisu/v4/rexml.rb index dc599e64..886d7eab 100644 --- a/lib/sisu/v2/rexml.rb +++ b/lib/sisu/v4/rexml.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,21 +58,19 @@ module SiSU_Rexml # load XML file for REXML parsing require 'rexml/document' if FileTest.directory?("#{Config::CONFIG['rubylibdir']}/rexml") #Config::CONFIG['sitedir'] - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env include SiSU_Viz class Rexml require 'rexml/document' if FileTest.directory?("#{Config::CONFIG['rubylibdir']}/rexml") #Config::CONFIG['sitedir'] def initialize(md,fno) @md,@fno=md,fno - @env=SiSU_Env::Info_env.new(@md.fns) - @prog=SiSU_Env::Info_program.new #(md.fns) #if md - if File.file?"#{@env.path.output}/#{@md.fnb}/#{@fno}" - @fnap="#{@env.path.output}/#{@md.fnb}/#{@fno}" #index.xml causes problems with index.html in server config - elsif File.file?"#{Dir.pwd}/#{@fno}" - @fnap="#{Dir.pwd}/#{@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' @@ -90,10 +87,10 @@ module SiSU_Rexml xmlfile=IO.readlines(@fnap,'').join begin @xmldoc=REXML::Document.new xmlfile - SiSU_Screen::Ansi.new(@md.cmd,'invert','REXML',"XML document #{@fnap} loaded").colorize unless @md.cmd =~/q/ #% tell - if @md.cmd =~ /v/i #% substantive text + SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','REXML',"XML document #{@fnap} loaded").colorize unless @md.opt.cmd =~/q/ #% tell + if @md.opt.cmd =~ /v/i #% substantive text @xmldoc.elements.each(@e_head) do |e| - SiSU_Screen::Ansi.new(@md.cmd,'brown',e).colorize unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'brown',e).colorize unless @md.opt.cmd =~/q/ end end rescue REXML::ParseException @@ -101,10 +98,13 @@ module SiSU_Rexml end end else - SiSU_Screen::Ansi.new(@md.cmd,'fuschia',"File Not Found #{xmlfile}",'requested XML processing skipped').colorize unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'fuschia',"File Not Found #{xmlfile}",'requested XML processing skipped').colorize unless @md.opt.cmd =~/q/ exit end - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end diff --git a/lib/sisu/v2/screen_text_color.rb b/lib/sisu/v4/screen_text_color.rb index 2ebe46fa..a9c0b367 100644 --- a/lib/sisu/v2/screen_text_color.rb +++ b/lib/sisu/v4/screen_text_color.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,7 +57,7 @@ =end module SiSU_Screen class Color - attr_accessor :off,:marker,:bold,:underline,:invert,:darkgrey_hi,:grey_hi,:pink_hi,:fuschia_hi,:red_hi,:orange_hi,:yellow_hi,:brown_hi,:lightgreen_hi,:green_hi,:cyan_hi,:blue_hi,:navy_hi,:white,:grey,:pink,:fuschia,:ruby,:red,:orange,:yellow,:brown,:green,:darkgreen,:cyan,:blue,:navy,:black + attr_accessor :off,:marker,:bold,:underline,:invert,:darkgrey_hi,:grey_hi,:pink_hi,:fuschia_hi,:red_hi,:orange_hi,:yellow_hi,:brown_hi,:lightgreen_hi,:green_hi,:cyan_hi,:blue_hi,:navy_hi,:white,:white_bold,:grey,:pink,:fuschia,:ruby,:red,:orange,:yellow,:brown,:green,:darkgreen,:cyan,:blue,:navy,:black def initialize(&block) instance_eval &block end @@ -68,29 +67,25 @@ module SiSU_Screen def initialize(cmd,*txt) @cmd,@txt=cmd,txt @color_instruct=txt[0] - flag=SiSU_Env::Info_processing_flag.new + flag=SiSU_Env::InfoProcessingFlag.new if @cmd - if flag.color #set default colors on or off -c acts as toggle against this default, if default is off -c turns on, if default is on -c turns off - @use_color=if @cmd =~/c/; false - else true - end - else - @use_color=if @cmd =~/c/; true - else false - end - end - if @cmd =~/k/; @use_color=false + #set default colors on or off -c acts as toggle against this default, if default is off -c turns on, if default is on -c turns off + @use_color=(flag.color) \ + ? ((@cmd =~/c/) ? false : true) + : ((@cmd =~/c/) ? true : false) + if @cmd =~/k/ then @use_color=false # useful color off switch, however, k may be used for something else in future end else @use_color=false end @cX=@@cX= unless @use_color Color.new do - self.off=self.white=self.marker=self.bold=self.underline=self.invert=self.darkgrey_hi=self.grey_hi=self.pink_hi=self.fuschia_hi=self.red_hi=self.orange_hi=self.yellow_hi=self.brown_hi=self.lightgreen_hi=self.green_hi=self.cyan_hi=self.blue_hi=self.navy_hi=self.grey=self.pink=self.fuschia=self.ruby=self.red=self.orange=self.yellow=self.brown=self.green=self.darkgreen=self.cyan=self.blue=self.navy=self.black='' + self.off=self.white=self.white_bold=self.marker=self.bold=self.underline=self.invert=self.darkgrey_hi=self.grey_hi=self.pink_hi=self.fuschia_hi=self.red_hi=self.orange_hi=self.yellow_hi=self.brown_hi=self.lightgreen_hi=self.green_hi=self.cyan_hi=self.blue_hi=self.navy_hi=self.grey=self.pink=self.fuschia=self.ruby=self.red=self.orange=self.yellow=self.brown=self.green=self.darkgreen=self.cyan=self.blue=self.navy=self.black='' end else #default set to colors on Color.new do self.off = "\033[0m" - self.white = "\033[0m" + self.white = "\033[37m" + self.white_bold = "\033[1m" self.marker = "\033[42m" self.bold = "\033[1m" self.underline = "\033[4m" @@ -127,7 +122,7 @@ module SiSU_Screen end def colors 0.upto(109) {|i| print "\033[#{i}m 33[#{i}m \033[m"} - puts '' + puts '' end def color case @color_instruct @@ -205,16 +200,16 @@ module SiSU_Screen def sisu end def rescue - %{\t #{@cX.orange}Rescued#{@cX.off} #{@cX.grey}An#{@cX.off} #{@cX.fuschia}ERROR#{@cX.off} #{@cX.grey}occurred, message:"#{@cX.off} #{@cX.fuschia}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off} #{@cX.brown}#{@txt[2]}#{@cX.off}} + STDERR.puts %{\t #{@cX.orange}Rescued#{@cX.off} #{@cX.grey}#{yield if block_given?}\n\t An#{@cX.off} #{@cX.fuschia}ERROR#{@cX.off} #{@cX.grey}occurred, message:#{@cX.off} #{@cX.fuschia}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off} #{@cX.brown}#{@txt[2]}#{@cX.off}} end def warn - puts "\t #{@cX.brown}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}" + STDERR.puts "\t #{@cX.brown}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}" end def error - puts "\t #{@cX.fuschia}#{@txt[0]}#{@cX.off} #{@cX.brown}#{@txt[1]}#{@cX.off}" + STDERR.puts "\t #{@cX.fuschia}#{@txt[0]}#{@cX.off} #{@cX.brown}#{@txt[1]}#{@cX.off}" end def error2 - puts "\t #{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.fuschia}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}" + STDERR.puts "\t #{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.fuschia}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}" end def version puts "#{@cX.blue_hi}#{@txt[0]} #{@txt[1]}#{@cX.off} #{@cX.grey} (#{@txt[3]} [#{@txt[2]}]) &#{@cX.off} #{@cX.ruby}Ruby#{@cX.off} #{@cX.grey}(#{@txt[4]})#{@cX.off}\n" @@ -254,13 +249,6 @@ module SiSU_Screen %{#{@cX.off} } + %{#{@cX.cyan}nav only: #{@txt[4]}#{@cX.off}.} end - def php_numbers - puts %{ #{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}files processed#{@cX.off}. } + - %{php_scr only: #{@txt[1]}, } + - %{#{@cX.cyan}php_seg only: #{@txt[2]}#{@cX.off}, } + - %{joint php scroll & seg: #{@txt[3]}, } + - %{php_nav only: #{@txt[4]}} - end def txt_white puts "\t#{@cX.white}#{@txt[0]}#{@cX.off} #{@cX.white}#{@txt[1]}#{@cX.off}" end @@ -348,6 +336,9 @@ module SiSU_Screen def grey_title_hi puts %{#{@cX.grey_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}} end + def grey_title_grey_blue + puts %{#{@cX.grey_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.grey}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off}} + end def dark_grey_title_hi puts %{#{@cX.darkgrey_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}} end @@ -403,12 +394,81 @@ module SiSU_Screen def html_output puts %{\t#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.ruby}->#{@cX.off}\n\t #{@cX.blue}#{@txt[1]}#{@cX.off}} end - def php_title - puts %{\n#{@cX.green_hi}#{@cX.black}PHP#{@cX.off*2}} - end def segmented puts "\t#{@cX.grey}Seg#{@cX.off} #{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.grey}segments#{@cX.off}" end end end __END__ + Color.new do + self.off = "\033[0m" + self.white = "\033[37m" + self.white_bold = "\033[1m" + self.marker = "\033[42m" + self.bold = "\033[1m" + self.underline = "\033[4m" + self.invert = "\033[7m" + self.darkgrey_hi = "\033[100m" + self.grey_hi = "\033[47m" + self.pink_hi = "\033[105m" + self.fuschia_hi = "\033[45m" + self.red_hi = "\033[41m" + self.orange_hi = "\033[101m" + self.yellow_hi = "\033[103m" + self.brown_hi = "\033[43m" + self.lightgreen_hi = "\033[102m" + self.green_hi = "\033[42m" + self.cyan_hi = "\033[106m" + self.blue_hi = "\033[104m" + self.navy_hi = "\033[44m" + self.grey = "\033[90m" + self.pink = "\033[95m" + self.fuschia = "\033[35m" + self.ruby = "\033[31m" + self.red = "\033[91m" #check + self.orange = "\033[91m" + self.yellow = "\033[93m" + self.brown = "\033[33m" + self.green = "\033[92m" + self.darkgreen = "\033[32m" + self.cyan = "\033[36m" + self.blue = "\033[94m" + self.navy = "\033[34m" + self.black = "\033[30m" + end +# fewer colors + Color.new do + self.off = "\033[0m" + self.white = "\033[0m" + self.marker = "\033[42m" + self.bold = "\033[1m" + self.underline = "\033[4m" + self.invert = "\033[7m" + self.darkgrey_hi = "\033[100m" + self.grey_hi = "\033[47m" + self.pink_hi = "\033[105m" + self.fuschia_hi = "\033[45m" + self.red_hi = "\033[41m" + self.orange_hi = "\033[101m" + self.yellow_hi = "\033[103m" + self.brown_hi = "\033[43m" + self.lightgreen_hi = "\033[102m" + self.green_hi = "\033[42m" + self.cyan_hi = "\033[106m" + self.blue_hi = "\033[104m" + self.navy_hi = "\033[44m" + self.grey = "\033[90m" + self.pink = "\033[95m" + self.fuschia = "\033[35m" + self.ruby = "\033[31m" + self.red = "\033[31m" #check + self.orange = "\033[91m" + self.yellow = "\033[33m" + self.brown = "\033[33m" + self.green = "\033[32m" + self.darkgreen = "\033[32m" + self.cyan = "\033[36m" + self.blue = "\033[34m" + self.navy = "\033[34m" + self.black = "\033[30m" + end diff --git a/lib/sisu/v2/share_src.rb b/lib/sisu/v4/share_src.rb index 900e78ff..2c446ecb 100644 --- a/lib/sisu/v2/share_src.rb +++ b/lib/sisu/v4/share_src.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,38 +56,31 @@ =end module SiSU_Markup - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'shared_sisupod_source' # shared_sisupod_source.rb + include SiSU_Source + require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd - class Source - require 'fileutils' - include FileUtils - def initialize(opt) + class Source < SiSU_Source::SiSUpodSource + def initialize(opt,build=nil,place=nil) + super(opt,build,place) @opt=opt - @env=SiSU_Env::Info_env.new(@opt.fns) - stub=@opt.fnb.gsub(/~[a-z]+$/,'') - @output_path="#{@env.path.output}/src" end def read unless @opt.cmd =~/q/ @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'Share Document Source!',@opt.fns).green_hi_blue \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Share Document Source!',@opt.fns).green_hi_blue : SiSU_Screen::Ansi.new(@opt.cmd,'Share Document Source!',@opt.fns).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,"Copy sisu markup file to output directory","#{@opt.fns} -> #{@output_path}").warn if @opt.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,"Copy sisu markup file to output directory","#{@opt.fno} -> #{@file.output_path.src.dir}").warn if @opt.cmd =~/[MVv]/ end - mkdir_p(@output_path) unless FileTest.directory?(@output_path) - if FileTest.directory?(@output_path) - unless @opt.fns =~/\.ssm$/; cp(@opt.fns,@output_path) - else - req=@opt.fns.gsub(/(.+?\.ssm)$/,'\1.sst') - file="#{@env.path.composite_file}/#{@opt.fnb}.ssm.sst" - if FileTest.file?(file); cp(file,"#{@output_path}/#{req}") - else print "did not find #{file} to copy" - end - end + if FileTest.directory?(@path_pod[:fnb]) + FileUtils::mkdir_p(@file.output_path.src.dir) unless FileTest.directory?(@file.output_path.src.dir) + v=(@opt.cmd =~/M/) ? 'v' : '' + system(%{ + rsync -a#{v} #{@path_pod[:fnb]} #{@file.output_path.sisupod.dir} + }) else - SiSU_Screen::Ansi.new(@opt.cmd,"Output directory does not exist","#{@opt.fns} -> #{@output_path}").warn if @opt.cmd =~/[MVv]/ - exit + SiSU_Screen::Ansi.new('',"#{@opt.fno} not available").blue_tab if @opt.cmd=~/[MVv]/ end end end diff --git a/lib/sisu/v2/share_src_kdissert.rb b/lib/sisu/v4/share_src_kdissert.rb index 4c37f3ff..4d0eae9f 100644 --- a/lib/sisu/v2/share_src_kdissert.rb +++ b/lib/sisu/v4/share_src_kdissert.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,8 +55,8 @@ ** Description: share sisu source markup file, copy it to output directory! =end -module SiSU_Kdi_source - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_KdiSource + require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd class Source @@ -65,18 +64,18 @@ module SiSU_Kdi_source include FileUtils def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) @output_path="#{@env.path.output}/#{@opt.fnb}" end def read SiSU_Screen::Ansi.new(@opt.cmd,'Share Kdissert Source Document!',@opt.fnb).green_hi_blue unless @opt.cmd =~/q/ SiSU_Screen::Ansi.new(@opt.cmd,"Copy kdissert file to output directory","#{@opt.fnb} -> #{@output_path}").warn unless @opt.cmd =~/q/ - mkdir_p(@env.path.output) unless FileTest.directory?(@env.path.output) - mkdir_p(@output_path) unless FileTest.directory?(@output_path) + FileUtils::mkdir_p(@env.path.output) unless FileTest.directory?(@env.path.output) + FileUtils::mkdir_p(@output_path) unless FileTest.directory?(@output_path) if FileTest.directory?(@output_path) if @opt.fns =~/\.kdi\._sst$/ \ and FileTest.file?(@opt.fnb) - cp(@opt.fnb,@output_path) + FileUtils::cp(@opt.fnb,@output_path) end else SiSU_Screen::Ansi.new(@opt.cmd,"Output directory does not exist","#{@opt.fnb} -> #{@output_path}").warn unless @opt.cmd =~/q/ diff --git a/lib/sisu/v2/shared_html.rb b/lib/sisu/v4/shared_html.rb index dfffc5c9..98966965 100644 --- a/lib/sisu/v2/shared_html.rb +++ b/lib/sisu/v4/shared_html.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,10 @@ ** Description: shared html parts =end -module SiSU_HTML_shared - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/html_table" # html_table.rb - class Table_html < SiSU_HTML_table::Table_html +module SiSU_HTML_Shared + require_relative 'defaults' # defaults.rb + require_relative 'html_table' # html_table.rb + class TableHTML < SiSU_HTML_Table::TableHTML end end __END__ diff --git a/lib/sisu/v2/shared_html_lite.rb b/lib/sisu/v4/shared_html_lite.rb index 02b4dcc2..02326334 100644 --- a/lib/sisu/v2/shared_html_lite.rb +++ b/lib/sisu/v4/shared_html_lite.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,18 +56,18 @@ xml/xhtml/html formatting =end -module SiSU_Format_Shared - require "#{SiSU_lib}/defaults" # defaults.rb +module SiSU_FormatShared + require_relative 'defaults' # defaults.rb include SiSU_Viz class CSS_Format - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'defaults' # defaults.rb + require_relative 'particulars' # particulars.rb @@fns=nil def initialize(md,t_o) @md,@t_o=md,t_o @txt=@t_o.obj @id=@ocn=@t_o.ocn if defined? @t_o.ocn - @lv=@t_o.lv.to_s if @t_o.is=='heading' + @lv=@t_o.lv.to_s if @t_o.is==:heading if @md.fns != @@fns @@fns,@@hname=@md.fns,'' end @@ -80,13 +79,13 @@ module SiSU_Format_Shared @tab="\t" @brace_url=SiSU_Viz::Skin.new.url_decoration @@tablehead,@@tablefoot=[],[] - @vz=SiSU_Env::Get_init.instance.skin - @env=SiSU_Env::Info_env.new(@md.fns) + @vz=SiSU_Env::GetInit.instance.skin + @env=SiSU_Env::InfoEnv.new(@md.fns) @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" end def urls(data) @words=[] - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map data.each do |word| @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ @@ -109,16 +108,16 @@ module SiSU_Format_Shared %{<a href="#{u}">[#{png}]</a>#{caption}} else %{[#{png}] #{caption}} end - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) else u=case u when /^https?:\/\// u when /^:/ - u.gsub!(/^:/,'') + u=u.gsub(/^:/,'') "#{@env.url.root}/#{u}" when /^\.\.\// # can remove - u.gsub!(/^\.\.\//,'') + u=u.gsub(/^\.\.\//,'') "#{@env.url.root}/#{u}" else "#{@env.url.root}/#{@md.fnb}/#{map_nametags[u][:segname]}#{Sfx[:html]}##{u}" @@ -127,8 +126,8 @@ module SiSU_Format_Shared png=m.scan(/\S+/)[0].strip link=link.strip ins=%{<a href="#{u}">#{link}</a>} - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins) - word.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins). + gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) word end word @@ -139,34 +138,34 @@ module SiSU_Format_Shared @words=@words.join(' ') end def markup_generic(s) - s=s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>') - s=s.gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>') - s=s.gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>') - s=s.gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"') - s=s.gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+') - s=s.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-') - s=s.gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>') - s=s.gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>') - s=s.gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>') # tt, kbd - s=s.gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') + s=s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') end def markup_object(t_o) s=t_o.obj - if t_o.is !='code' + s=if t_o.is !=:code s=markup_generic(s) if s =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ wm=s.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)|\S+/) words=urls(wm) - s.gsub!(/.+/m,words) + s=s.gsub(/.+/m,words) end - s.gsub!(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;') - s.gsub!(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - s.gsub!(/#{Mx[:url_o]}[_\\](\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>') #http ftp matches escaped, no decoration - s.gsub!(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>') #special case \{ e.g. \}http://url - s.gsub!(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{\\1#{@brace_url.xml_open}<a href="\\2" target="_top">\\2</a>#{@brace_url.xml_close}\\3}) #http ftp matches with decoration + s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:url_o]}[_\\](\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>'). #special case \{ e.g. \}http://url + gsub(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{\\1#{@brace_url.xml_open}<a href="\\2" target="_top">\\2</a>#{@brace_url.xml_close}\\3}) #http ftp matches with decoration else - s.gsub!(/(^|[^}])_</m,'\1<'); s.gsub!(/(^|[^}])_>/m,'\1>') #code-block: angle brackets special characters - s.gsub!(/(^|[^}])_</m,'\1<'); s.gsub!(/(^|[^}])_>/m,'\1>') + s.gsub(/</m,'<'). + gsub(/>/m,'>') end s end @@ -177,11 +176,11 @@ module SiSU_Format_Shared words=urls(wm) s=s.gsub(/.+/m,words) end - s=s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;') - s=s.gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - s=s.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>\2') #http ftp matches escaped, no decoration - s=s.gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>') #special case \{ e.g. \}http://url - s=s.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration + s=s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>\2'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>'). #special case \{ e.g. \}http://url + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration end def paragraph %{<p class="h#{@lv}" type="substantive" header="#{@hname}">#{@txt}</p>\n} # << "\n" @@ -204,36 +203,42 @@ GSUB %{<p class="toc#{@lv}" header="#{@hname}"><a href="##{@ocn}">#{@txt}</a></p>\n} #<< "\n" end def lev_toc - h={:txt =>txt,:class =>"toc#{@lv}",:type =>'toc'} + h={ txt: txt, class: "toc#{@lv}", type: 'toc' } tag_para(h) end def lev4_plus txt=markup_object(@t_o) - h={:txt =>txt,:class =>"h#{@lv}",:type =>'substantive',:id =>@ocn,:header =>@hname} + h={ txt: txt, class: "h#{@lv}", type: 'substantive', id: @ocn, header: @hname } tag_header(h) end def lev4_minus txt=markup_object(@t_o) - h={:txt =>txt,:class =>"h#{@t_o.ln}",:type =>'substantive',:id =>@ocn} + h={ txt: txt, class: "h#{@t_o.ln}", type: 'substantive', id: @ocn } tag_para(h) end def norm_comment - h={:txt =>@t_o.obj,:class =>'norm',:type =>'comment'} + h={ txt: @t_o.obj, class: 'norm', type: 'comment' } tag_para(h) end def norm txt=markup_object(@t_o) - h={:txt =>txt,:class =>'norm',:type =>'substantive',:id =>@ocn} + h={ txt: txt, class: 'norm', type: 'substantive', id: @ocn } tag_para(h) end def code txt=markup_object(@t_o) - h={:txt =>"<tt>#{txt}</tt>",:class =>'code',:type =>'substantive',:id =>@ocn} + h={ txt: "<tt>#{txt}</tt>", class: 'code', type: 'substantive', id: @ocn } tag_para(h) end def indent(t) txt=markup_object(@t_o) - h={:txt =>txt,:class =>"indent#{t}",:type =>'substantive',:id =>@ocn} + h={ txt: txt, class: "indent#{t}", type: 'substantive', id: @ocn } + tag_para(h) + end + def hang_indent(f,t) + txt=markup_object(@t_o) + h={ txt: txt, class: "hang#{f}indent#{t}", type: 'substantive', id: @ocn } + #h={ txt: txt, class: "h#{f}i#{t}", type: 'substantive', id: @ocn } tag_para(h) end def para_table @@ -247,39 +252,39 @@ GSUB @txt.split(/\n/).each do |parablock| m=parablock[/<!f(.+?)!>/,1] @@tablefoot << m if m - parablock.gsub!(/<!f.+?!>/,'') + parablock=parablock.gsub(/<!f.+?!>/,'') @@tablehead=1 if parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u - parablock.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+)#{Mx[:gr_c]}/, - %{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">}) + parablock=parablock.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+)#{Mx[:gr_c]}/, + %{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">}) if parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ tablefoot=[] @@tablefoot.each {|x| tablefoot << %{<p align="center"><font size=2><i>#{x}</i></font></p>\n}} @@tablefoot=[] - parablock.gsub!(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/, + parablock=parablock.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/, %{#{@vz.table_close}\n}) # + end if @@tablehead==1 if parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}/u - parablock.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{\n<tr>} + - %{\n<td width="\\1%" valign="top">} + - %{#{para_table}<b>}) - parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{</b></td><td width="\\1%" valign="top">} + - %{#{para_table}<b>}) - parablock.gsub!(/#{Mx[:tc_c]}/, '</b></td></tr>') + parablock=parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{\n<tr>} + + %{\n<td width="\\1%" valign="top">} + + %{#{para_table}<b>}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{</b></td><td width="\\1%" valign="top">} + + %{#{para_table}<b>}). + gsub(/#{Mx[:tc_c]}/, '</b></td></tr>') @@tablehead=0 end parablock else - parablock.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{\n<tr>} + - %{\n<td width="\\1%" valign="top">} + - %{#{para_table}}) - parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{</td><td width="\\1%" valign="top">} + - %{#{para_table}}) - parablock.gsub!(/#{Mx[:tc_c]}/, '</td></tr>') + parablock=parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{\n<tr>} + + %{\n<td width="\\1%" valign="top">} + + %{#{para_table}}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{</td><td width="\\1%" valign="top">} + + %{#{para_table}}). + gsub(/#{Mx[:tc_c]}/, '</td></tr>') parablock end @new_content << parablock @@ -287,7 +292,7 @@ GSUB @new_content.join end end - class CSS_Format_generic #does CSS_Format in one definition, needs to be told about attrib, despite brevity of generic, easier to see structure with CSS_Format + class CSS_FormatGeneric #does CSS_Format in one definition, needs to be told about attrib, despite brevity of generic, easier to see structure with CSS_Format def initialize(attrib='',txt='',id=nil,ocnd=nil,ocns=nil,lv='',hname=nil) @tab="\t" @attrib=attrib diff --git a/lib/sisu/v4/shared_images.rb b/lib/sisu/v4/shared_images.rb new file mode 100644 index 00000000..e55f03ad --- /dev/null +++ b/lib/sisu/v4/shared_images.rb @@ -0,0 +1,173 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: common file for xml generation +=end +module SiSU_Images + require_relative 'particulars' # particulars.rb + class Source + def initialize(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + end + def read + SiSU_Images::Source::Place.new(@particulars).songsheet + end + class Place + def initialize(particulars) + @particulars=particulars + @md=@particulars.md + @env=@particulars.env + @o_str ||=SiSU_Env::ProcessingSettings.new(@md).output_dir_structure + end + def songsheet + images_set.select_sisu_base + images_set.select_with_document + if @md.opt.cmd =~/h/ + images_set.select_with_document_skin + end + end + def images_set + @pwd=(/(\S+?)(?:\/(?:#{Px[:lng_lst_rgx]}))?$/).match(Dir.pwd)[1] + def copy(src_path,dest_path,images=nil) + if FileTest.directory?(src_path) + FileUtils::cd(src_path) + unless images + images=Dir.glob("*.{png,jpg,gif,ico}") + end + unless FileTest.directory?(dest_path) \ + or FileTest.symlink?(dest_path) + FileUtils::mkdir_p(dest_path) + FileUtils::chmod(0755,dest_path) + end + if images.length > 0 + images.each do |i| + if FileTest.file?(i) + FileUtils::cp_r(i,"#{dest_path}/#{i}") + FileUtils::chmod(0644,"#{dest_path}/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + end + FileUtils::cd(@pwd) + else STDERR.puts %{\t*WARN* did not find - "#{src_path}" [#{__FILE__}:#{__LINE__}]} + end + end + def dest_path(image_type) + pth=if image_type==:image_sys + pth=(@o_str.dump_or_redirect?) \ + ? "#{@md.file.output_path.html.dir}/image" + : "#{@md.file.output_path.base.dir}/_sisu/image_sys" + elsif image_type==:image + pth=(@o_str.dump_or_redirect?) \ + ? "#{@md.file.output_path.html.dir}/image" + : "#{@md.file.output_path.base.dir}/_sisu/image" + end + pth + end + def select_with_document + images=@md.ec[:image] + src_path=unless @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + "#{@pwd}/_sisu/image" + else #sisupod + pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1] + pt + '/image' + end + dest=dest_path(:image) + copy(src_path,dest,images) + end + def select_with_document_skin + rgx_rb_image=/["']\S*?([a-zA-Z0-9_-]+?\.(?:png|jpg|gif))["']/ + skin_source=SiSU_Env::InfoSkin.new(@md).apply + docskin=nil + if skin_source \ + and skin_source[:type] == :dir + docskin_with_path="#{docskin_place}/skin_#{@env.stub_pwd}.rb" + docskin=[docskin_with_path.gsub(/.+?\/(skin_\S+?)\.rb/,'\1')] + #docskin='skin_sisupod' + end + images=[] + if skin_source \ + and skin_source[:name_path] #imperfect, revisit + unless (skin_source[:name_path].nil? \ + or skin_source[:name_path].empty?) + skinfile_array=IO.readlines(skin_source[:name_path],'') + skinfile_array.each do |f| #% work area + unless f =~/^%+ / #hmmm + images << f.scan(rgx_rb_image).uniq if f =~rgx_rb_image + #does not really discriminate, may duplicate images in sisu file, and may take images from default image pool + end + end + end + end + src_path=unless @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + "#{@pwd}/_sisu/image" + else #sisupod + pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1] + pt + '/image' + end + dest=dest_path(:image) + copy(src_path,dest,images.flatten) + end + def select_sisu_base + images=%w[arrow_next_red.png arrow_prev_red.png arrow_up_red.png dot_clear.png dot_white.png b_doc.png b_epub.png b_odf.png b_pdf.png b_toc.png] + src_path="#{@env.path.share}/image" + dest=dest_path(:image_sys) + copy(src_path,dest,images) + end + self + end + end + end +end +__END__ diff --git a/lib/sisu/v4/shared_markup_alt.rb b/lib/sisu/v4/shared_markup_alt.rb new file mode 100644 index 00000000..4efedff1 --- /dev/null +++ b/lib/sisu/v4/shared_markup_alt.rb @@ -0,0 +1,321 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +module SiSU_TextRepresentation + class Alter + def initialize(x) + if x.is_a?(String) + @t_o,@s=nil,x + else + @t_o,@s=x,x.obj.dup + end + end + def strip_clean_of_extra_spaces # dal output tuned + @s=@s.dup + @s=@s.gsub(/[ ]+([,.;:?](?:$|\s))/,'\1') unless @s =~/#{Mx[:en_a_o]}|#{Mx[:en_b_o]}/ + @s=@s.gsub(/ [ ]+/,' '). + gsub(/^ [ ]+/,''). + gsub(/ [ ]+$/,''). + gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2'). + gsub(/((?:#{Mx[:fa_bold_c]}|#{Mx[:fa_italics_c]})')[ ]+(s )/,'\1\2') + end + def strip_clean_of_markup # text form used in sql db search, used for digest, define rules, make same as in db clean + @s=@s.dup #% same as db clean --> + @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\1'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\1'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\1'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'\1'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\1'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'\1'). + gsub(/#{Mx[:fa_superscript_o]}(\d+)#{Mx[:fa_superscript_c]}/,'[\1]'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'\1'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'\1'). + gsub(/#{Mx[:fa_hilite_o]}(.+?)#{Mx[:fa_hilite_c]}/,'\1'). + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~'). + gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,''). # endnote removed + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,''). # endnote removed + gsub(/(?:#{Mx[:nbsp]})+/,' '). + gsub(/(?:#{Mx[:br_nl]})+/,"\n"). + gsub(/(?:#{Mx[:br_paragraph]})+/,"\n"). + gsub(/(?:#{Mx[:br_line]})+/,"\n"). + gsub(/#{Mx[:gl_o]}(?:#lt|#060)#{Mx[:gl_c]}/,'<'). + gsub(/#{Mx[:gl_o]}(?:#gt|#062)#{Mx[:gl_c]}/,'>'). + gsub(/#{Mx[:gl_o]}#(?:038|amp)#{Mx[:gl_c]}/,'&'). + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). + gsub(/#{Mx[:gl_o]}#126#{Mx[:gl_c]}/,'~'). + gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'©'). + gsub(/\s\s+/,' '). + gsub(/\s\s+/,' '). + strip + end + def semi_revert_markup # used for digest, define rules, make same as in db clean + if @t_o + @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'*{\1}*'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'/{\1}/'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'_{\1}_'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"{\1}"'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^{\1}^'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,',{\1},'). + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~'). + gsub(/#{Mx[:en_a_o]}([\d*+]+\s+.+?)#{Mx[:en_a_c]}/,'~{\1}~'). # endnote marker marked up + gsub(/#{Mx[:en_b_o]}([\d*+]+\s+.+?)#{Mx[:en_b_c]}/,'~[\1]~') # endnote marker marked up + if @t_o.is==:heading \ + || @t_o.is==:para + @s=@s.gsub(/ [ ]+/,' ') + @s=@s.gsub(/(?:#{Mx[:nbsp]})+/,' ') + if @t_o.is==:heading + @s=@t_o.lv + '~ ' + @s + end + if @t_o.is==:para + if @t_o.bullet_ + @s='_* ' + @s + end + if @t_o.indent.to_i > 0 + @s="_#{@t_o.indent} " + @s + @s=@s.gsub(/^(_[1-9])\s_\*\s/,'\1* ') + end + end + end + if @t_o.is==:block \ + || @t_o.is==:group \ + || @t_o.is==:code + @s=@s.gsub(/#{Mx[:nbsp]}/,' ') + @s="#{@t_o.is.to_s}{\n\n#{@s}\n\n}#{@t_o.is.to_s}" + @s=@s.gsub(/(?:#{Mx[:br_nl]}|\n)+/m,"\n\n") + end + #dealing with poem and verse calls for change in dal, where start and end verse of poem are marked as such + @s=@s.strip + end + @s + end + def html_lite #test whether eventually can be used in db_import replacing shared_html_lite (search for SiSU_FormatShared) + if @t_o + @s=@s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') + if @t_o.is !=:code + if @s =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ + wm=@s.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)|\S+/) + words=urls(wm) + @s=@s.gsub(/.+/m,words) + end + @s=@s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1<a href="\2" target="_top">\2</a>\3'). #special case \{ e.g. \}http://url + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@url_brace.xml_open}<a href="\\1" target="_top">\\1</a>#{@url_brace.xml_close}}) #http ftp matches with decoration + else + @s=@s.gsub(/</m,'<').gsub(/>/m,'>') + end + if @t_o.is==:paragraph + if @t_o.bullet_ + @s=@s + end + if @t_o.indent > 0 + @s=@s + end + end + if @t_o.is==:heading + @s=@s + end + else + p __FILE__ +':'+ __LINE__.to_s + end + @s + end + end + class ModifiedTextPlusHashDigest + def initialize(md,x) + @md=md + if x.is_a?(String) + @t_o,@s=nil,x + else + @t_o,@s=x,x.obj.dup + end + @env ||=SiSU_Env::InfoEnv.new(@md.fns) + @sha_ =((@env.digest.type =='sha256') ? true : false) + @sha_ ? (require 'digest/sha2') : (require 'digest/md5') + end + def digest(txt) + d=nil + if @sha_ + for hash_class in [ Digest::SHA256 ] + d=hash_class.hexdigest(txt) + end + else + for hash_class in [ Digest::MD5 ] + d=hash_class.hexdigest(txt) + end + end + d + end + def strip_clean_of_markup + def txt + SiSU_TextRepresentation::Alter.new(@s).strip_clean_of_markup + end + def dgst + en_dgst,img_dgst={},{} + txt_dgst=digest(txt) + { txt: txt, dgst_txt: txt_dgst } + end + self + end + def semi_revert_markup + def txt + SiSU_TextRepresentation::Alter.new(@s).semi_revert_markup + end + def dgst + txt_dgst=digest(txt) + { txt: txt, dgst_txt: txt_dgst } + end + self + end + def composite + def stripped_clean(txt) + SiSU_TextRepresentation::Alter.new(txt).strip_clean_of_markup + end + def markup_reverted(txt) + SiSU_TextRepresentation::Alter.new(txt).semi_revert_markup + end + def images(imgs) + sys=SiSU_Env::SystemCall.new + line_image=[] + img_dgst={} + if imgs and imgs.length > 0 + @image_name,@image_dgst,@img=[],[],[] + imgs.each do |i| + image_source=if FileTest.file?("#{@env.path.image_source_include_local}/#{i}") + @env.path.image_source_include_local + elsif FileTest.file?("#{@env.path.image_source_include_remote}/#{i}") + @env.path.image_source_include_remote + elsif FileTest.file?("#{@env.path.image_source_include}/#{i}") + @env.path.image_source_include + else + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:", %{"#{i}" missing}, "search locations: #{@env.path.image_source_include_local}, #{@env.path.image_source_include_remote} and #{@env.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ + nil + end + img_type = /\S+\.(png|jpg|gif)/.match(i)[1] + not_found_msg='image not found' + if image_source + para_image = image_source + '/' + i + image_name = i + image_dgst =(@sha_ ? sys.sha256(para_image) : sys.md5(para_image)) + else + image_name = i + ' [image missing]' + image_dgst = '' + end + line_image << { img_dgst: image_dgst[1], img_name: image_name, img_type: img_type } + end + end + line_image + end + def endnotes(en) + en_dgst=[] + if en and en.length > 0 + en.flatten.each do |e| + note_no=e.gsub(/^([\d*+]+)\s+.+/,'\1') + e=digest(stripped_clean(e)) + note_dgst=digest(e) + en_dgst << { note_number: note_no, note_dgst: note_dgst } + end + end + en_dgst + end + def dgst + if @t_o.of !=:comment \ + && @t_o.of !=:structure \ + && @t_o.of !=:layout + en_dgst,img_dgst={},{} + txt_stripped_dgst=digest(stripped_clean(@t_o)) + txt_markup_reverted_dgst=digest(markup_reverted(@t_o)) + endnotes_dgst=[] + rgx_notes=/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/ + notes=@t_o.obj.scan(rgx_notes) + endnotes_dgst=endnotes(notes) + rgx_image=/#{Mx[:lnk_o]}(\S+\.(?:png|jpg|gif))\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/ + imgs=if (@t_o.is==:para \ + || @t_o.is==:image) \ + and @t_o.obj =~rgx_image + imgs=@t_o.obj.scan(rgx_image).flatten + line_image=images(imgs) + end + dgst={ is: @t_o.is, ocn: @t_o.ocn, dgst_stripped_txt: txt_stripped_dgst, dgst_markedup_txt: txt_markup_reverted_dgst } + dgst[:endnotes]=endnotes_dgst if endnotes_dgst and endnotes_dgst.length > 0 + dgst[:images]=line_image if line_image and line_image.length > 0 + end + dgst + end + self + end + end +end +__END__ diff --git a/lib/sisu/v4/shared_metadata.rb b/lib/sisu/v4/shared_metadata.rb new file mode 100644 index 00000000..cd1e97db --- /dev/null +++ b/lib/sisu/v4/shared_metadata.rb @@ -0,0 +1,1360 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +module SiSU_Metadata + class Summary + attr_accessor :tag,:inf,:class,:attrib + def initialize(md,display_heading=false) + @md,@display_heading=md,display_heading + @tag,@inf,@class,@attrib=nil + end + def metadata_base + meta,tag=[],[] + dir=SiSU_Env::InfoEnv.new(@md.fns) + base_html="#{dir.url.root}/#{@md.fnb}" + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + language=l[:n] + tr=SiSU_Translate::Source.new(@md,language) + @attrib='md' + if @display_heading + @tag,@inf=%{<b><u>Document Metadata</u></b>},'' + meta << self.meta_para + end + if defined? @md.title.full \ + and @md.title.full=~/\S+/ + @tag,@inf,@class=tr.full_title,@md.title.full,'dc' #1 + meta << self.meta_para + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + @tag,@inf,@class=tr.author,@md.creator.author,'dc' #2 + meta << self.meta_para + end + if defined? @md.creator.translator \ + and @md.creator.translator=~/\S+/ + @tag,@inf,@class=tr.translator,@md.creator.translator,'ext' + meta << self.meta_para + end + if defined? @md.creator.illustrator \ + and @md.creator.illustrator=~/\S+/ + @tag,@inf,@class=tr.illustrator,@md.creator.illustrator,'ext' + meta << self.meta_para + end + if defined? @md.creator.prepared_by \ + and @md.creator.prepared_by=~/\S+/ + @tag,@inf,@class=tr.prepared_by,@md.creator.prepared_by,'ext' + meta << self.meta_para + end + if defined? @md.creator.digitized_by \ + and @md.creator.digitized_by=~/\S+/ + @tag,@inf,@class=tr.digitized_by,@md.creator.digitized_by,'ext' + meta << self.meta_para + end + if defined? @md.rights.all \ + and @md.rights.all=~/\S+/ + @tag,@inf,@class=tr.rights,@md.rights.all,'dc' #15 + meta << self.meta_para + end + if defined? @md.classify.subject \ + and @md.classify.subject=~/\S+/ + @tag,@inf,@class=tr.subject,@md.classify.subject,'dc' #3 + meta << self.meta_para + end + if defined? @md.notes.description \ + and @md.notes.description=~/\S+/ + @tag,@inf,@class=tr.description,@md.notes.description,'dc' #4 + meta << self.meta_para + end + if defined? @md.publisher \ + and @md.publisher=~/\S+/ + @tag,@inf,@class=tr.publisher,@md.publisher,'dc' #5 + meta << self.meta_para + end + if defined? @md.creator.contributor \ + and @md.creator.contributor=~/\S+/ + @tag,@inf,@class=tr.contributor,@md.creator.contributor,'dc' #6 + meta << self.meta_para + end + if defined? @md.notes.abstract \ + and @md.notes.abstract=~/\S+/ + @tag,@inf,@class=tr.abstract,@md.notes.abstract,'ext' + meta << self.meta_para + end + if defined? @md.date.created \ + and @md.date.created=~/\S+/ + @tag,@inf,@class=tr.date_created,@md.date.created,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.issued \ + and @md.date.issued=~/\S+/ + @tag,@inf,@class=tr.date_issued,@md.date.issued,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.available \ + and @md.date.available=~/\S+/ + @tag,@inf,@class=tr.date_available,@md.date.available,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.modified \ + and @md.date.modified=~/\S+/ + @tag,@inf,@class=tr.date_modified,@md.date.modified,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.valid \ + and @md.date.valid=~/\S+/ + @tag,@inf,@class=tr.date_valid,@md.date.valid,'dc' #7 + meta << self.meta_para + end + if defined? @md.date.published \ + and @md.date.published=~/\S+/ + @tag,@inf,@class=tr.date,@md.date.published,'dc' #7 + meta << self.meta_para + end + if defined? @md.type \ + and @md.date=~/\S+/ + @tag,@inf,@class=tr.type,@md.type,'dc' #8 + meta << self.meta_para + end + if defined? @md.classify.loc \ + and @md.classify.loc=~/\S+/ + @tag,@inf,@class=tr.cls_loc,@md.classify.loc,'id' + meta << self.meta_para + end + if defined? @md.classify.dewey \ + and @md.classify.dewey=~/\S+/ + @tag,@inf,@class=tr.cls_dewey,@md.classify.dewey,'id' + meta << self.meta_para + end + if defined? @md.classify.pg \ + and @md.classify.pg=~/\S+/ + @tag,@inf,@class=tr.cls_gutenberg,@md.classify.pg,'id' + meta << self.meta_para + end + if defined? @md.classify.isbn \ + and @md.classify.isbn=~/\S+/ + @tag,@inf,@class=tr.cls_isbn,@md.classify.isbn,'id' + meta << self.meta_para + end + if defined? @md.notes.comment \ + and @md.notes.comment=~/\S+/ + @tag,@inf,@class=tr.comments,@md.notes.comment,'ext' + meta << self.meta_para + end + if defined? @md.notes.prefix_a \ + and @md.notes.prefix_a=~/\S+/ + @tag,@inf,@class=tr.prefix_a,@md.notes.prefix_a,'inf' + meta << self.meta_para + end + if defined? @md.notes.prefix_b \ + and @md.notes.prefix_b=~/\S+/ + @tag,@inf,@class=tr.prefix_b,@md.notes.prefix_b,'inf' + meta << self.meta_para + end + if defined? @md.classify.identifier \ + and @md.classify.identifier=~/\S+/ + @tag,@inf,@class=tr.identifier,@md.classify.identifier,'dc' #10 + meta << self.meta_para + end + if defined? @md.original.source \ + and @md.original.source=~/\S+/ + @tag,@inf,@class=tr.source,@md.original.source,'dc' #11 + meta << self.meta_para + end + if defined? @md.title.language \ + and @md.title.language=~/\S+/ + @tag,@inf,@class=tr.language,@md.title.language,'dc' #12 + meta << self.meta_para + end + if defined? @md.original.language \ + and @md.original.language=~/\S+/ + @tag,@inf,@class=tr.language_original,@md.original.language,'ext' + meta << self.meta_para + end + if defined? @md.classify.format \ + and @md.classify.format=~/\S+/ + @tag,@inf,@class=tr.format,@md.classify.format,'dc' #9 + meta << self.meta_para + end + if defined? @md.classify.relation \ + and @md.classify.relation=~/\S+/ + @tag,@inf,@class=tr.relation,@md.classify.relation,'dc' #13 + meta << self.meta_para + end + if defined? @md.classify.coverage \ + and @md.classify.coverage=~/\S+/ + @tag,@inf,@class=tr.coverage,@md.classify.coverage,'dc' #14 + meta << self.meta_para + end + if defined? @md.classify.keywords \ + and @md.classify.keywords=~/\S+/ + @tag,@inf,@class=tr.keywords,@md.classify.keywords,'ext' + meta << self.meta_para + end + if @display_heading + @tag,@inf=%{<b><u>Version Information</u></b>},'' + meta << self.meta_para + end + if defined? @md.fns \ + and @md.fns=~/\S+/ + @tag,@inf,@class=tr.sourcefile,@md.fns,'src' + meta << self.meta_para + end + if defined? @md.file_encoding \ + and @md.file_encoding=~/\S+/ + @tag,@inf,@class='Filetype',@md.file_encoding,'src' + meta << self.meta_para + end + if defined? @md.dgst \ + and @md.dgst.is_a?(Array) + @tag,@inf,@class='Source Digest',"#{@md.dgst[0]} #{@md.dgst[1]}",'src' + meta << self.meta_para + end + if defined? @md.dgst_skin \ + and @md.dgst_skin.is_a?(Array) + @tag,@inf,@class='Skin Digest',"#{@md.dgst_skin[0]} #{@md.dgst_skin[1]}",'src' + meta << self.meta_para + end + if @display_heading + @tag,@inf=%{<b><u>Generated</u></b>},'' + meta << self.meta_para + end + if defined? @md.sisu_version \ + and @md.sisu_version[:version]=~/\S+/ + v="#{tr.sisu_version}: " + + "#{@md.sisu_version[:project]} " + + "#{@md.sisu_version[:version]} " + + "of #{@md.sisu_version[:date_stamp]} " + + "(#{@md.sisu_version[:date]})" + @tag,@inf,@class='Generated by',v,'ver' + meta << self.meta_para + end + if defined? @md.ruby_version \ + and @md.ruby_version=~/\S+/ + @tag,@inf,@class=tr.ruby_version,@md.ruby_version,'ver' + meta << self.meta_para + end + if defined? @md.generated \ + and @md.generated.is_a?(Time) + @tag,@inf,@class=tr.last_generated,@md.generated,'date' + meta << self.meta_para + end + meta + end + def processing_tags + def make + def language + if defined? @md.make.language \ + and @md.make.language + ' :language: ' + @md.make.language.join(', ') + else nil + end + end + def headings + if defined? @md.make.headings \ + and @md.make.headings + ' :headings: ' + @md.make.headings[0].join('; ') + else nil + end + end + def num_top + if defined? @md.make.num_top \ + and @md.make.num_top + ' :num_top: ' + @md.make.num_top + else nil + end + end + def breaks + x=if defined? @md.make.breaks \ + and @md.make.breaks + x=' :breaks:' + if @md.make.breaks[:page_break] + x +=' break=' + @md.make.breaks[:page_break] + ';' + end + if @md.make.breaks[:page_new] + x +=' new=' + @md.make.breaks[:page_new] + ';' + end + else nil + end + end + def emphasis + if defined? @md.make.emphasis \ + and @md.make.emphasis + ' :emphasis: ' + @md.make.emphasis[:regx].inspect + else nil + end + end + def bold + if defined? @md.make.bold \ + and @md.make.bold + ' :bold: ' + @md.make.bold[:regx].inspect + else nil + end + end + def italics + if defined? @md.make.italics \ + and @md.make.italics + ' :italics: ' + @md.make.italics[:regx].inspect + else nil + end + end + def texpdf_font + if defined? @md.make.texpdf_font \ + and @md.make.texpdf_font + ' :texpdf_font: ' + @md.make.texpdf_font.main + else nil + end + end + def skin + if defined? @md.make.skin \ + and @md.make.skin + ' :skin: ' + @md.make.skin + else nil + end + end + self + end + self + end + def metadata_tags + def title + def main + if defined? @md.title.main \ + and @md.title.main + '@title: ' + @md.title.main + else '@title:' + end + end + def sub + if defined? @md.title.sub \ + and @md.title.sub + ' :subtitle: ' + @md.title.sub + else nil + end + end + def edition + if defined? @md.title.edition \ + and @md.title.edition + ' :edition: ' + @md.title.edition + else nil + end + end + def note + if defined? @md.title.note \ + and @md.title.note + ' :note: ' + @md.title.note + else nil + end + end + def short + if defined? @md.title.short \ + and @md.title.short + ' :short: ' + @md.title.short + else nil + end + end + def language + if defined? @md.title.language \ + and @md.title.language + ' :language: ' + @md.title.language.join(', ') + else nil + end + end + def language_char + if defined? @md.title.language_char \ + and @md.title.language_char + ' :language_char: ' + @md.title.language_char + else nil + end + end + self + end + def creator + def head + '@creator:' + end + def author + x=if defined? @md.creator.author_detail \ + and @md.creator.author_detail + x='' + @md.creator.author_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :author: ' + x + else nil + end + end + def contributor + x=if defined? @md.creator.contributor_detail \ + and @md.creator.contributor_detail + x='' + @md.creator.contributor_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :contributor: ' + x + else nil + end + end + def illustrator + x=if defined? @md.creator.illustrator_detail \ + and @md.creator.illustrator_detail + x='' + @md.creator.illustrator_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :illustrator: ' + x + else nil + end + end + def photographer + x=if defined? @md.creator.photographer_detail \ + and @md.creator.photographer_detail + x='' + @md.creator.photographer_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :photographer: ' + x + else nil + end + end + def translator + x=if defined? @md.creator.translator_detail \ + and @md.creator.translator_detail + x='' + @md.creator.translator_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :translator: ' + x + else nil + end + end + def audio + x=if defined? @md.creator.audio_detail \ + and @md.creator.audio_detail + x='' + @md.creator.audio_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :audio: ' + x + else nil + end + end + def digitized_by + x=if defined? @md.creator.digitized_by_detail \ + and @md.creator.digitized_by_detail + x='' + @md.creator.digitized_by_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :digitized_by: ' + x + else nil + end + end + def prepared_by + x=if defined? @md.creator.prepared_by_detail \ + and @md.creator.prepared_by_detail + x='' + @md.creator.prepared_by_detail.each do |n| + x += "#{n[:the]}, #{n[:others]}; " + end + x=x.gsub(/;\s*$/,'') + ' :prepared_by: ' + x + else nil + end + end + self + end + def rights + def head + '@rights:' + end + def copyright + def text + if defined? @md.rights.copyright.text \ + and @md.rights.copyright.text + ' :copyright: ' + @md.rights.copyright.text + else nil + end + end + def translation + if defined? @md.rights.copyright.translation \ + and @md.rights.copyright.translation + ' :translation: ' + @md.rights.copyright.translation + else nil + end + end + def illustrations + if defined? @md.rights.copyright.illustrations \ + and @md.rights.copyright.illustrations + ' :illustrations: ' + @md.rights.copyright.illustrations + else nil + end + end + def photographs + if defined? @md.rights.copyright.photographs \ + and @md.rights.copyright.photographs + ' :photographs: ' + @md.rights.copyright.photographs + else nil + end + end + def digitization + if defined? @md.rights.copyright.digitization \ + and @md.rights.copyright.digitization + ' :digitization: ' + @md.rights.copyright.digitization + else nil + end + end + def audio + if defined? @md.rights.copyright.audio \ + and @md.rights.copyright.audio + ' :audio: ' + @md.rights.copyright.audio + else nil + end + end + self + end + def license + if defined? @md.rights.license \ + and @md.rights.license + ' :license: ' + @md.rights.license + else nil + end + end + self + end + def classify + def head + '@classify:' + end + def coverage + if defined? @md.classify.coverage \ + and @md.classify.coverage + ' :coverage: ' + @md.classify.coverage + else nil + end + end + def relation + if defined? @md.classify.relation \ + and @md.classify.relation + ' :relation: ' + @md.classify.relation + else nil + end + end + def subject + if defined? @md.classify.subject \ + and @md.classify.subject + ' :subject: ' + @md.classify.subject + else nil + end + end + def topic_register + if defined? @md.classify.topic_register \ + and @md.classify.topic_register + ' :topic_register: ' + @md.classify.topic_register + else nil + end + end + def type +# if defined? @md.classify.type \ +# and @md.classify.type +# ' :type: ' + @md.classify.type +# else nil +# end + nil + 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 + ' :loc: ' + @md.classify.loc + else nil + end + end + def dewey + if defined? @md.classify.dewey \ + and @md.classify.dewey + ' :dewey: ' + @md.classify.dewey + else nil + end + end + def oclc + if defined? @md.classify.oclc \ + and @md.classify.oclc + ' :oclc: ' + @md.classify.oclc + else nil + end + end + def pg + if defined? @md.classify.pg \ + and @md.classify.pg + ' :pg: ' + @md.classify.pg + else nil + end + end + def isbn + if defined? @md.classify.isbn \ + and @md.classify.isbn + ' :isbn: ' + @md.classify.isbn + else nil + end + end + self + end + def date + def head + '@date:' + end + def added_to_site + if defined? @md.date.added_to_site \ + and @md.date.added_to_site + ' :added_to_site: ' + @md.date.added_to_site + else nil + end + end + def available + if defined? @md.date.available \ + and @md.date.available + ' :available: ' + @md.date.available + else nil + end + end + def created + if defined? @md.date.created \ + and @md.date.created + ' :created: ' + @md.date.created + else nil + end + end + def issued + if defined? @md.date.issued \ + and @md.date.issued + ' :issued: ' + @md.date.issued + else nil + end + end + def modified + if defined? @md.date.modified \ + and @md.date.modified + ' :modified: ' + @md.date.modified + else nil + end + end + def published + if defined? @md.date.published \ + and @md.date.published + ' :published: ' + @md.date.published + else nil + end + end + def valid + if defined? @md.date.valid \ + and @md.date.valid + ' :valid: ' + @md.date.valid + else nil + end + end + self + end + #def make + # def headings + # @md.make.headings \ + # ? (' :headings: ' + @md.make.headings) \ + # : nil + # end + #end + self + end + def char_enc(str) + @s=str + def utf8 + if @s \ + and @s.is_a?(String) + @s=@s.gsub(/<br(?: \/)?>/u,Mx[:br_paragraph]). + gsub(/</um,'<'). # '<' # < + gsub(/</um,'<'). # '<' # < + gsub(/>/um,'>'). # '>' # > + gsub(/¢/um,'¢'). # '¢' # ¢ + gsub(/£/um,'£'). # '£' # £ + gsub(/¥/um,'¥'). # '¥' # ¥ + gsub(/§/um,'§'). # '§' # § + gsub(/©/um,'©'). # '©' # © + gsub(/ª/um,'ª'). # 'ª' # ª + gsub(/«/um,'«'). # '«' # « + gsub(/®/um,'®'). # '®' # ® + gsub(/°/um,'°'). # '°' # ° + gsub(/±/um,'±'). # '±' # ± + gsub(/²/um,'²'). # '²' # ² + gsub(/³/um,'³'). # '³' # ³ + gsub(/µ/um,'µ'). # 'µ' # µ + gsub(/¶/um,'¶'). # '¶' # ¶ + gsub(/¹/um,'¹'). # '¹' # ¹ + gsub(/º/um,'º'). # 'º' # º + gsub(/»/um,'»'). # '»' # » + gsub(/¼/um,'¼'). # '¼' # ¼ + gsub(/½/um,'½'). # '½' # ½ + gsub(/¾/um,'¾'). # '¾' # ¾ + gsub(/×/um,'×'). # '×' # × + gsub(/÷/um,'÷'). # '÷' # ÷ + gsub(/¿/um,'¿'). # '¿' # ¿ + gsub(/À/um,'À'). # 'À' # À + gsub(/Á/um,'Á'). # 'Á' # Á + gsub(/Â/um,'Â'). # 'Â' #  + gsub(/Ã/um,'Ã'). # 'Ã' # à + gsub(/Ä/um,'Ä'). # 'Ä' # Ä + gsub(/Å/um,'Å'). # 'Å' # Å + gsub(/Æ/um,'Æ'). # 'Æ' # Æ + gsub(/Ç/um,'Ç'). # 'Ç' # Ç + gsub(/È/um,'È'). # 'È' # È + gsub(/É/um,'É'). # 'É' # É + gsub(/Ê/um,'Ê'). # 'Ê' # Ê + gsub(/Ë/um,'Ë'). # 'Ë' # Ë + gsub(/Ì/um,'Ì'). # 'Ì' # Ì + gsub(/Í/um,'Í'). # 'Í' # Í + gsub(/Î/um,'Î'). # 'Î' # Î + gsub(/Ï/um,'Ï'). # 'Ï' # Ï + gsub(/Ð/um,'Ð'). # 'Ð' # Ð + gsub(/Ñ/um,'Ñ'). # 'Ñ' # Ñ + gsub(/Ò/um,'Ò'). # 'Ò' # Ò + gsub(/Ó/um,'Ó'). # 'Ó' # Ó + gsub(/Ô/um,'Ô'). # 'Ô' # Ô + gsub(/Õ/um,'Õ'). # 'Õ' # Õ + gsub(/Ö/um,'Ö'). # 'Ö' # Ö + gsub(/Ø/um,'Ø'). # 'Ø' # Ø + gsub(/Ù/um,'Ù'). # 'Ù' # Ù + gsub(/Ú/um,'Ú'). # 'Ú' # Ú + gsub(/Û/um,'Û'). # 'Û' # Û + gsub(/Ü/um,'Ü'). # 'Ü' # Ü + gsub(/Ý/um,'Ý'). # 'Ý' # Ý + gsub(/Þ/um,'Þ'). # 'Þ' # Þ + gsub(/ß/um,'ß'). # 'ß' # ß + gsub(/à/um,'à'). # 'à' # à + gsub(/á/um,'á'). # 'á' # á + gsub(/â/um,'â'). # 'â' # â + gsub(/ã/um,'ã'). # 'ã' # ã + gsub(/ä/um,'ä'). # 'ä' # ä + gsub(/å/um,'å'). # 'å' # å + gsub(/æ/um,'æ'). # 'æ' # æ + gsub(/ç/um,'ç'). # 'ç' # ç + gsub(/è/um,'è'). # 'è' # è + gsub(/é/um,'é'). # '´' # é + gsub(/ê/um,'ê'). # 'ˆ' # ê + gsub(/ë/um,'ë'). # 'ë' # ë + gsub(/ì/um,'ì'). # 'ì' # ì + gsub(/í/um,'í'). # '´' # í + gsub(/î/um,'î'). # 'î' # î + gsub(/ï/um,'ï'). # 'ï' # ï + gsub(/ð/um,'ð'). # 'ð' # ð + gsub(/ñ/um,'ñ'). # 'ñ' # ñ + gsub(/ò/um,'ò'). # 'ò' # ò + gsub(/ó/um,'ó'). # 'ó' # ó + gsub(/ô/um,'ô'). # 'ô' # ô + gsub(/õ/um,'õ'). # 'õ' # õ + gsub(/ö/um,'ö'). # 'ö' # ö + gsub(/ø/um,'ø'). # 'ø' # ø + gsub(/ù/um,'ú'). # 'ù' # ú + gsub(/ú/um,'û'). # 'ú' # û + gsub(/û/um,'ü'). # 'û' # ü + gsub(/ü/um,'ý'). # 'ü' # ý + gsub(/þ/um,'þ'). # 'þ' # þ + gsub(/ÿ/um,'ÿ'). # 'ÿ' # ÿ + gsub(/‘/um,'‘'). # '‘' # ‘ + gsub(/’/um,'’'). # '’' # ’ + gsub(/“/um,'“'). # “ # “ + gsub(/”/um,'”'). # ” # ” + gsub(/–/um,'–'). # – # – + gsub(/—/um,'—'). # — # — + gsub(/∝/um,'∝'). # ∝ # ∝ + gsub(/∞/um,'∞'). # ∞ # ∞ + gsub(/™/um,'™'). # ™ # ™ + gsub(/✠/um,'✠'). # ✗ # ✠ + gsub(/ /um,' '). # space identify + gsub(/ /um,' '). # space identify + gsub(/#{Mx[:br_paragraph]}/u,'<br />') + end + @s + end + self + end + def xml_sax + def meta_para + inf_xml=char_enc(@inf).utf8 + <<WOK +<metadata> +#{Ax[:tab]}<meta>#{@tag.capitalize}:</meta> +#{Ax[:tab]}<data class="#{@attrib}"> +#{Ax[:tab]*2}#{inf_xml} +#{Ax[:tab]}</data> +</metadata> +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xml_dom + def meta_para + inf_xml=char_enc(@inf).utf8 + <<WOK +#{Ax[:tab]}<header> +#{Ax[:tab]*2}<meta>#{@tag.capitalize}:</meta> +#{Ax[:tab]*2}<#{@attrib}> +#{Ax[:tab]*3}#{inf_xml} +#{Ax[:tab]*2}</#{@attrib}> +#{Ax[:tab]}</header> +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xhtml_scroll + def meta_para + inf_xml=char_enc(@inf).utf8 + <<WOK +#{Ax[:tab]}<metadata> +#{Ax[:tab]}<meta>#{@tag.capitalize}:</meta> +#{Ax[:tab]}<#{@attrib} class="#{@class}"> +#{Ax[:tab]*2}#{inf_xml} +#{Ax[:tab]}</#{@attrib}> +#{Ax[:tab]}</metadata> + <br /> +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def xhtml_display + def meta_para + inf_xml=char_enc(@inf).utf8 + %{<p class="norm"> + <b>#{@tag}</b>: #{inf_xml} +</p>} + end + def metadata + SiSU_Metadata::Summary.new(@md,true).metadata_base + end + self + end + def odf + def meta_para + url_brace=SiSU_Viz::Skin.new.url_decoration + if @inf.is_a?(String) + @inf=@inf.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<br(?: \/)?>/,'<br />') + if @inf =~/&/ + inf_array=[] + word=@inf.scan(/\S+|\n/) + word.each do |w| # _ - / # | : ! ^ ~ + w=w.gsub(/ /,' ') + if w !~/&\S{2,7}?;/ + w=w.gsub(/&/,'&') + end + inf_array << w + end + @inf=inf_array.join(' ') + end + @inf=@inf.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + '\1<text:a xlink:type="simple" xlink:href="\2">\2</text:a>') #special case \{ e.g. \}http://url + @inf=if @inf =~/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/ + @inf.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration + else + @inf.gsub(/(https?:\/\/[^<>()'"\s]+)/, + %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration + end + @inf=@inf.gsub(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/, + %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{url_brace.xml_close}}) if @inf !~/http:\/\// # improve upon, document crash where url contains '@' symbol + end + <<WOK +<text:p text:style-name="P1">#{@tag.capitalize}: #{@inf}</text:p> +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def plaintext + def meta_para + <<WOK + +#{@tag.capitalize}: #{@inf} +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + def manpage + def meta_para + <<WOK + +.TP +#{@tag.capitalize}: +.I #{@inf} +WOK + end + def metadata + SiSU_Metadata::Summary.new(@md).metadata_base + end + self + end + end + class TeX_Metadata + def initialize(md) + @md=md + @br="\\\\\n" + end + def meta_para(tag,inf,sc=true) + inf=((inf.is_a?(String) && sc) ? spec_char(inf) : inf) + %{\\begin\{bfseries\}#{tag}:\\end\{bfseries\} #{inf} +} + end + def spec_char(inf) + SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_characters + end + def word_break_points(inf) + SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_word_break_points + end + def number_break_points(inf) + SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_number_break_points + end + def metadata_tex + meta=[] + dir=SiSU_Env::InfoEnv.new(@md.fns) + base_html="#{dir.url.root}/#{@md.fnb}" + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + language=l[:n] + tr=SiSU_Translate::Source.new(@md,language) + tag="Document Manifest @" + inf="#{@br}#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}" + meta << meta_para(tag,inf) + if defined? @md.title.full \ + and @md.title.full=~/\S+/ + tag,inf=tr.full_title,@md.title.full + meta << meta_para(tag,inf) + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + tag,inf=tr.author,@md.creator.author + meta << meta_para(tag,inf) + end + if defined? @md.creator.translator \ + and @md.creator.translator=~/\S+/ + tag,inf=tr.translator,@md.creator.translator + meta << meta_para(tag,inf) + end + if defined? @md.creator.illustrator \ + and @md.creator.illustrator=~/\S+/ + tag,inf=tr.illustrator,@md.creator.illustrator + meta << meta_para(tag,inf) + end + if defined? @md.creator.prepared_by \ + and @md.creator.prepared_by=~/\S+/ + tag,inf=tr.prepared_by,@md.creator.prepared_by + meta << meta_para(tag,inf) + end + if defined? @md.creator.digitized_by \ + and @md.creator.digitized_by=~/\S+/ + tag,inf=tr.digitized_by,@md.creator.digitized_by + meta << meta_para(tag,inf) + end + if defined? @md.rights.all \ + and @md.rights.all=~/\S+/ + tag,inf=tr.rights,@md.rights.all + meta << meta_para(tag,inf) + end + if defined? @md.notes.description \ + and @md.notes.description=~/\S+/ + tag,inf=tr.description,@md.notes.description + meta << meta_para(tag,inf) + end + if defined? @md.classify.subject \ + and @md.classify.subject=~/\S+/ + tag,inf=tr.subject,@md.classify.subject + meta << meta_para(tag,inf) + end + if defined? @md.publisher \ + and @md.publisher=~/\S+/ + tag,inf=tr.publisher,@md.publisher + meta << meta_para(tag,inf) + end + if defined? @md.creator.contributor \ + and @md.creator.contributor=~/\S+/ + tag,inf=tr.contributor,@md.creator.contributor + meta << meta_para(tag,inf) + end + if defined? @md.notes.abstract \ + and @md.notes.abstract=~/\S+/ + tag,inf=tr.abstract,@md.notes.abstract + meta << meta_para(tag,inf) + end + if defined? @md.date.created \ + and @md.date.created=~/\S+/ + tag,inf=tr.date_created,@md.date.created + meta << meta_para(tag,inf) + end + if defined? @md.date.issued \ + and @md.date.issued=~/\S+/ + tag,inf=tr.date_issued,@md.date.issued + meta << meta_para(tag,inf) + end + if defined? @md.date.available \ + and @md.date.available=~/\S+/ + tag,inf=tr.date_available,@md.date.available + meta << meta_para(tag,inf) + end + if defined? @md.date.modified \ + and @md.date.modified=~/\S+/ + tag,inf=tr.date_modified,@md.date.modified + meta << meta_para(tag,inf) + end + if defined? @md.date.valid \ + and @md.date.valid=~/\S+/ + tag,inf=tr.date_valid,@md.date.valid + meta << meta_para(tag,inf) + end + if defined? @md.date.published \ + and @md.date.published=~/\S+/ + tag,inf=tr.date,@md.date.published + meta << meta_para(tag,inf) + end + if defined? @md.classify.topic_register \ + and @md.classify.topic_register=~/\S+/ + tag,inf=tr.topic_register,@md.classify.topic_register + inf=word_break_points(inf) + meta << meta_para(tag,inf) + end + if defined? @md.classify.loc \ + and @md.classify.loc=~/\S+/ + tag,inf=tr.cls_loc,@md.classify.loc + meta << meta_para(tag,inf) + end + if defined? @md.classify.dewey \ + and @md.classify.dewey=~/\S+/ + tag,inf=tr.cls_dewey,@md.classify.dewey + meta << meta_para(tag,inf) + end + if defined? @md.classify.oclc \ + and @md.classify.oclc=~/\S+/ + tag,inf=tr.cls_oclc,@md.classify.oclc + meta << meta_para(tag,inf) + end + if defined? @md.classify.pg \ + and @md.classify.pg=~/\S+/ + tag,inf=tr.cls_gutenberg,@md.classify.pg + meta << meta_para(tag,inf) + end + if defined? @md.classify.isbn \ + and @md.classify.isbn=~/\S+/ + tag,inf=tr.cls_isbn,@md.classify.isbn + meta << meta_para(tag,inf) + end + if defined? @md.notes.comment \ + and @md.notes.comment=~/\S+/ + tag,inf=tr.comments,@md.notes.comment + meta << meta_para(tag,inf) + end + if defined? @md.notes.prefix_a \ + and @md.notes.prefix_a=~/\S+/ + tag,inf=tr.prefix_a,@md.notes.prefix_a + meta << meta_para(tag,inf) + end + if defined? @md.notes.prefix_b \ + and @md.notes.prefix_b=~/\S+/ + tag,inf=tr.prefix_b,@md.notes.prefix_b + meta << meta_para(tag,inf) + end + if defined? @md.classify.identifier \ + and @md.classify.identifier=~/\S+/ + tag,inf=tr.identifier,@md.classify.identifier + meta << meta_para(tag,inf) + end + if defined? @md.original.source \ + and @md.original.source=~/\S+/ + tag,inf=tr.source,@md.original.source + meta << meta_para(tag,inf) + end + if defined? @md.title.language \ + and @md.title.language=~/\S+/ + tag,inf=tr.language,@md.title.language + meta << meta_para(tag,inf) + end + if defined? @md.original.language \ + and @md.original.language=~/\S+/ + tag,inf=tr.language_original,@md.original.language + meta << meta_para(tag,inf) + end + if defined? @md.classify.format \ + and @md.classify.format=~/\S+/ + tag,inf=tr.format,@md.classify.format + meta << meta_para(tag,inf) + end + if defined? @md.classify.relation \ + and @md.classify.relation=~/\S+/ + tag,inf=tr.relation,@md.classify.relation + meta << meta_para(tag,inf) + end + if defined? @md.classify.coverage \ + and @md.classify.coverage=~/\S+/ + tag,inf=tr.coverage,@md.classify.coverage + meta << meta_para(tag,inf) + end + if defined? @md.classify.keywords \ + and @md.classify.keywords=~/\S+/ + tag,inf=tr.keywords,@md.classify.keywords + meta << meta_para(tag,inf) + end + meta << %{#{@br}\\begin\{bfseries\}Version Information \\end\{bfseries\}} + if defined? @md.fns \ + and @md.fns=~/\S+/ + fn=spec_char(@md.fns) + fn=word_break_points(fn) + fn="\\begin\{footnotesize\}#{fn}\\end\{footnotesize\}" + tag,inf=tr.sourcefile,fn + meta << meta_para(tag,inf,false) + end + if defined? @md.file_encoding \ + and @md.file_encoding=~/\S+/ + tag,inf='Filetype',@md.file_encoding + meta << meta_para(tag,inf) + end + if defined? @md.dgst \ + and @md.dgst.is_a?(Array) + hash_of=spec_char(@md.dgst[0]) + hash_of=word_break_points(hash_of) + dgst=number_break_points(@md.dgst[1]) + tag,inf='Source Digest',"\\begin\{footnotesize\}#{hash_of}\\end\{footnotesize\}\\-\\begin\{scriptsize\}#{dgst}\\end\{scriptsize\}" + meta << meta_para(tag,inf,false) + end + if defined? @md.dgst_skin \ + and @md.dgst_skin.is_a?(Array) + hash_of=spec_char(@md.dgst_skin[0]) + hash_of=word_break_points(hash_of) + dgst=number_break_points(@md.dgst_skin[1]) + tag,inf='Skin Digest',"\\begin\{footnotesize\}#{hash_of}\\end\{footnotesize\}\\-\\begin\{scriptsize\}#{dgst}\\end\{scriptsize\}" + meta << meta_para(tag,inf,false) + end + meta << %{#{@br}\\begin\{bfseries\}Generated \\end\{bfseries\}} + if defined? @md.generated \ + and @md.generated.is_a?(Time) + tag,inf=tr.last_generated,@md.generated + meta << meta_para(tag,inf) + end + if defined? @md.sisu_version \ + and @md.sisu_version[:version]=~/\S+/ + tag=tr.sisu_version + inf="#{@md.sisu_version[:project]} " + + "#{@md.sisu_version[:version]} " + + "of #{@md.sisu_version[:date_stamp]} " + + "(#{@md.sisu_version[:date]})" + meta << meta_para(tag,inf) + end + if defined? @md.ruby_version \ + and @md.ruby_version=~/\S+/ + tag,inf=tr.ruby_version,@md.ruby_version + meta << meta_para(tag,inf) + end + meta + end + end +end +__END__ +if @md.title + x=[ + @md.title.main, + @md.title.sub, + @md.title.edition, + @md.title.note, + @md.title.short, + @md.title.full, + @md.title.language, + @md.title.language_char + ] + x.each {|y| p y if y} +end +if @md.creator + x=[ + @md.creator.author, + @md.creator.author_detail, + @md.creator.contributor, + @md.creator.contributor_detail, + @md.creator.illustrator, + @md.creator.illustrator_detail, + @md.creator.photographer, + @md.creator.photographer_detail, + @md.creator.translator, + @md.creator.translator_detail, + @md.creator.audio, + @md.creator.audio_detail, + @md.creator.digitized_by, + @md.creator.digitized_by_detail, + @md.creator.prepared_by, + @md.creator.prepared_by_detail + ] + x.each {|y| p y if y} +end +if @md.rights + x=[ + @md.rights.copyright.text, + @md.rights.copyright.translation, + @md.rights.copyright.illustrations, + @md.rights.copyright.photographs, + @md.rights.copyright.digitization, + @md.rights.copyright.audio, + @md.rights.license, + @md.rights.all + ] + x.each {|y| p y if y} +end +if @md.classify + x=[ + @md.classify.coverage, + @md.classify.relation, + @md.classify.subject, + @md.classify.topic_register, + @md.classify.type, + @md.classify.identifier, + @md.classify.loc, + @md.classify.dewey, + @md.classify.oclc, + @md.classify.pg, + @md.classify.isbn, + ] + x.each {|y| p y if y} +end +if @md.date + x=[ + @md.date.added_to_site, + @md.date.available, + @md.date.created, + @md.date.issued, + @md.date.modified, + @md.date.published, + @md.date.valid + ] + x.each {|y| p y if y} +end +#if @md.language +# p @md.language.document +# p @md.language.document_char +# p @md.language.original +# p @md.language.original_char +#end +if @md.make + x=[ + @md.make.headings, + @md.make.num_top, + @md.make.breaks, + @md.make.bold, + @md.make.italics, + @md.make.emphasis, + @md.make.plaintext_wrap, + @md.make.texpdf_font, + @md.make.skin, + @md.make.promo, + @md.make.ad, + @md.make.manpage + ] + x.each {|y| p y if y} +end +if @md.current_publisher # @md.publisher + x=[ + @md.current_publisher + ] + x.each {|y| p y if y} +end +if @md.original + x=[ + @md.original.publisher, + @md.original.language, + @md.original.language_char, + @md.original.source, + @md.original.institution, + @md.original.nationality + ] + x.each {|y| p y if y} +end +if @md.notes + x=[ + @md.notes.abstract, + @md.notes.comment, + @md.notes.description, + @md.notes.history, + @md.notes.prefix + ] + x.each {|y| p y if y} +end diff --git a/lib/sisu/v2/shared_sem.rb b/lib/sisu/v4/shared_sem.rb index 4ffae2f5..1fa919c2 100644 --- a/lib/sisu/v2/shared_sem.rb +++ b/lib/sisu/v4/shared_sem.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -8,7 +8,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -32,11 +33,9 @@ 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/copyleft/gpl.html> + <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -48,7 +47,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,8 +56,8 @@ ** Description: system environment, resource control and configuration details =end -module SiSU_sem - require "#{SiSU_lib}/param" # param.rb +module SiSU_Sem + require_relative 'param' # param.rb class Tags def initialize(para,md) @para,@md=para,md @@ -105,11 +104,13 @@ module SiSU_sem puts matched[0] unless matched[0].nil? end def if_pair_c - if @para=~/([a-z](?:[a-z_:.]+?[a-z])?)+(?::\{(.+?)\}:\1)/m; puts "#{$1}:{ #{$2} }:#{$1}" + if @para=~/([a-z](?:[a-z_:.]+?[a-z])?)+(?::\{(.+?)\}:\1)/m + puts "#{$1}:{ #{$2} }:#{$1}" end end def if_pair_sc - if @para=~/;\{\s*(.+?)\s*\};([a-z]+(?:[_:.][a-z]+)*)/; puts ";{ #{$1} };#{$2}" + if @para=~/;\{\s*(.+?)\s*\};([a-z]+(?:[_:.][a-z]+)*)/ + puts ";{ #{$1} };#{$2}" end end def match_pair_c @@ -137,7 +138,8 @@ module SiSU_sem def sem_marker_added_extra_parts unless @para =~ rgx.exclude @para.gsub!(rgx.whole_csc_ae,'') - if @para =~rgx.each_csc_ae; puts "WARNING semantic taggin error: #{@para}" + if @para =~rgx.each_csc_ae + STDERR.puts "WARNING semantic tagging error: #{@para}" end end @para diff --git a/lib/sisu/v4/shared_sisupod_source.rb b/lib/sisu/v4/shared_sisupod_source.rb new file mode 100644 index 00000000..18821e37 --- /dev/null +++ b/lib/sisu/v4/shared_sisupod_source.rb @@ -0,0 +1,376 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: create sisupod filetype and copy it to output directory! + +=end +module SiSU_Source + include SiSU_Env + class SiSUpodSource + require_relative 'sysenv' # sysenv.rb + require_relative 'particulars' # particulars.rb + def initialize(opt,build=nil,place=nil) + @opt=opt + m=/.+\/(?:src\/)?(\S+)/im + @date=SiSU_Env::InfoDate.new.dt + @env=SiSU_Env::InfoEnv.new(@opt.fns) + @ver=SiSU_Env::InfoVersion.instance.get_version + @v=(@opt.cmd =~/[VM]/) ? 'v' : '' + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + @file=@particulars.file + @local_path="#{@file.output_path.sisupod.dir}" + processing_sisupod=@env.processing_path.processing_sisupod(@opt) + processing_sisupod.make + path_pod=processing_sisupod.paths[:sisupod] + path_pod_fnb=processing_sisupod.paths[:fnb] + FileUtils::mkdir_p(path_pod) unless FileTest.directory?(path_pod) + @path_pod={ + fnb: path_pod_fnb, + pod: path_pod, + doc: path_pod + '/' + Gt[:doc] + '/' + @opt.lng, + po: path_pod + '/' + Gt[:po] + '/' + @opt.lng, + pot: path_pod + '/' + Gt[:pot], + conf: path_pod + '/' + Gt[:conf], + skin: path_pod + '/' + Gt[:skin], + image: path_pod + '/' + Gt[:image], + audio: path_pod + '/' + Gt[:audio], + video: path_pod + '/' + Gt[:video], + } + end + def read + unless @opt.cmd =~/q/ + @opt.cmd=~/[MVv]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'Assemble SiSU source',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_hi_blue + : '' + end + unless @opt.fns.empty? + directories + pod_source_build #this needs to be built in case of multi-lingual for all of them, before single pass tar + end + end + def directories + SiSU_Env::InfoEnv.new.sisupod_v3(@opt) + end + def select_skin(skin='') #skin loading logic here + load "#{SiSU_lib}/defaults.rb" + @skin={} + skin_path = [ + "#{@opt.base_path}/_sisu/skin", + "#{@env.path.home}/.sisu/skin", + '/etc/sisu/skin', + "#{@path_pod[:pod]}/external_document/skin" #CHECK + ] + sk_doc,sk_dir="#{Gt[:doc]}/#{skin}.rb","dir/skin_#{@env.stub_pwd}.rb" + skin_path.each do |v| #document skin priority 1 + if FileTest.file?("#{v}/#{sk_doc}") + @skin={ name_path: "#{v}/#{sk_doc}", type: :doc } + break + end + end + unless @skin.length > 0 + skin_path.each do |v| #directory skin priority 2 + if FileTest.file?("#{v}/#{sk_dir}") + @skin={ name_path: "#{v}/#{sk_dir}", type: :dir } + break + end + end + end + @skin + end + def images_extract(f,images) # consider using param info + rgx_image=/(?:^|[^_\\])\{(?:\s*|\~\^\s+)(\S+?\.(?:png|jpg|gif)\b)/m + if f !~/^%+\s/ \ + and f =~rgx_image + images << f.scan(rgx_image).uniq + end + images.flatten + end + def pod_source_build + @pwd=Dir.pwd + @rgx_rb_image=/["']\S*?([a-zA-Z0-9_-]+?\.(?:png|jpg|gif))["']/ + @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/ + @rgx_skin=/^\s+:skin:\s+(\S+)/ + @rgx_doc_import=/^<<\s*(\S+?\.ss[ti])/ + file_array=IO.readlines(@opt.fno,'') + skin,images,doc_import=[],[],[] + doc_import_dir=@opt.sub_location + file_array.each do |f| #% work area + if f !~/^%+\s/ + skin << f.scan(@rgx_skin).uniq.flatten if f =~@rgx_skin + f=f.gsub(/<:=(\S+?)>/,'{ c_\1.png 14x14 }image') # embedded symbol (image) + if f !~/^%+\s/ \ + and f =~@rgx_image + images=images_extract(f,images) + end + if @opt.fno =~/\.ssm$/ + doc_import << f.scan(@rgx_doc_import) if f =~@rgx_doc_import + end + end + end + if doc_import.length > 0 + doc_import=doc_import.uniq.flatten + doc_import.each do |fn| + file_array=IO.readlines(fn,'') + file_array.each do |f| #% work area + if f !~/^%+\s/ \ + and f =~@rgx_image + images=images_extract(f,images) + end + end + end + end + docskin=nil + if skin \ + and skin.length > 0 + docskin=skin.pop.flatten.join + skin_source=select_skin(docskin) + else + skin_source=select_skin + end + docskin_place="#{@path_pod[:skin]}/#{skin_source[:type].to_s}" + FileUtils::mkdir_p(docskin_place) + if skin_source[:type] == :dir + docskin_with_path="#{docskin_place}/skin_#{@env.stub_pwd}.rb" + docskin=[docskin_with_path.gsub(/.+?\/(skin_\S+?)\.rb/,'\1')] + docskin='skin_sisupod' + end + if skin_source \ + and skin_source[:name_path] + unless skin_source[:name_path].nil? \ + or skin_source[:name_path].empty? + if FileTest.file?(skin_source[:name_path]) + FileUtils::cp(skin_source[:name_path],"#{docskin_place}/#{docskin}.rb") + skinfile_array=IO.readlines(skin_source[:name_path],'') + para_images=[] + skinfile_array.each do |f| #% work area + unless f =~/^%+ / #hmmm + images << f.scan(@rgx_rb_image).uniq if f =~@rgx_rb_image + #does not really discriminate, may duplicate images in sisu file, and may take images from default image pool + end + end + else STDERR.puts %{\t*WARN* did not find - "#{skin_source[:name_path]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + #1. mapping in doc dir? + #2. need images used by skin, scan skin?? + if images \ + and images.length > 1 + images=images.flatten.uniq + images.delete_if {|x| x =~/https?:\/\// } + #images=images.sort + FileUtils::mkdir_p(@path_pod[:image]) + #unattractive hard coding ... ! + image_path='_sisu/image' + images_pwd="#{@opt.base_path}/#{image_path}" + ##sequence copies base images, defaults used in all html outputs + #image_source_base='/usr/share/sisu/image' + #dir_pwd=Dir.pwd + #Dir.chdir(image_source_base) + #base_images=Dir.glob('*') + #base_images.each do |i| + # FileUtils::cp_r(i,"#{images_path_pod}/#{i}") + #end + #Dir.chdir(dir_pwd) + if FileTest.directory?(images_pwd) + images=images.uniq + images.each do |i| + if FileTest.file?("#{images_pwd}/#{i}") + FileUtils::cp("#{images_pwd}/#{i}","#{@path_pod[:image]}/#{i}") if FileTest.file?("#{images_pwd}/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{images_pwd}/#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + else STDERR.puts %{\t*WARN* did not find - #{images_pwd} #{@path_pod[:image]} [#{__FILE__}:#{__LINE__}]} + end + end + if doc_import.length > 0 \ + and @opt.fno =~/\.ssm$/ + doc_import.each do |f| + if FileTest.file?("#{@opt.base_path}#{doc_import_dir}/#{f}") + FileUtils::cp("#{@opt.base_path}#{doc_import_dir}/#{f}","#{@path_pod[:doc]}/#{f}") + else STDERR.puts %{\t*WARN* did not find image - "#{@opt.base_path}#{doc_import_dir}/#{f}" [#{__FILE__}:#{__LINE__}]} + end + end + end + x=@env.document_language_versions_found #check multiple document language versions (param not used) + if x[:f] \ + and x[:f].length > 0 #store multiple document language versions, sisupod + x[:f].each do |f| + FileUtils::mkdir_p(@path_pod[:doc]) unless FileTest.directory?(@path_pod[:doc]) + if f[:f] =~/\~(\S{2,3})\.ss[tm]$/ + lng_f=$1 + if @opt.lng == lng_f + if @opt.fno =~/\.ssm$/ + if FileTest.file?("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}") + FileUtils::cp("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + else STDERR.puts %{\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]}") + cpy= :no + cpy=if f[:f] =~ /^#{@opt.f_pth[:lng_is]}\// \ + or f[:f] =~ /~#{@opt.f_pth[:lng_is]}\.sst/ + p "#{@opt.base_path}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \ + and @opt.f_pth[:lng_is] == 'en' + p "#{@opt.base_path}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + else :no + end + if cpy == :yes + FileUtils::cp("#{@opt.base_path}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + end + else STDERR.puts %{\t*WARN* did not find - "#{@opt.base_path}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + else + if @opt.fno =~/\.ssm$/ + if FileTest.file?("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}") + FileUtils::cp_r("#{@opt.base_path}#{doc_import_dir}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + else STDERR.puts %{\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]}") + cpy= :no + cpy=if f[:f] =~ /^#{@opt.f_pth[:lng_is]}\// \ + or f[:f] =~ /~#{@opt.f_pth[:lng_is]}\.sst/ + p "#{@opt.base_path}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \ + and @opt.f_pth[:lng_is] == 'en' + p "#{@opt.base_path}/#{f[:f]} --> #{@path_pod[:doc]}/#{f[:n]}" + :yes + else :no + end + if cpy == :yes + FileUtils::cp("#{@opt.base_path}/#{f[:f]}", + "#{@path_pod[:doc]}/#{f[:n]}") + end + else STDERR.puts %{\t*WARN* did not find - "#{@opt.base_path}/#{f[:f]}" [#{__FILE__}:#{__LINE__}]} + end + end + end + end + end #NB not all possibilies met, revisit, also in case of composite file may wish to add README + end + end +end +__END__ +question?: should you permit the packing of multiple documents in single .xz ? + + open @opt.fns, parse file + extract from file content: + images and copy each image from whatever image source to _sisu/sisupod/sisu/_sisu/image + skin and copy active skin from whatever source to _sisu/sisupod/sisu/_sisu/skin/doc + extract from skin images required by skin + + remove previously existing contents of _/sisu/sisupod & + make directory structure: + +v3 --> + _sisu + sisupod + doc + manifest.txt + en/content.sst [file content] + fr/content.sst + _sisu + conf + skin/ + doc [relevant skin if any other than default] + image (ln -s ../../image) + audio (ln -s ../../audio) + video (ln -s ../../video) + image [all images for specific document gathered here] + audio + video + +v2 --> + _sisu + sisupod + content.sst [file content] + filename.sst [link to content.sst] + _sisu/ + skin/ + doc [relevant skin if any other than default] + image/ [all images for specific document gathered here] + +sisu + _sisu + sisurc.yml + skin/ + dir/ + doc/ + misc/ + site/ + yaml/ + convert/ + standard_terms/ + image + processing + dal/ + tex/ + texinfo/ + tune/ + sisupod + +special case + +composite file (master), e.g. +SiSU.ssm diff --git a/lib/sisu/v2/shared_txt.rb b/lib/sisu/v4/shared_txt.rb index 598fc52d..228109c1 100644 --- a/lib/sisu/v2/shared_txt.rb +++ b/lib/sisu/v4/shared_txt.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: modules shared by flatfile output generators =end -module SiSU_text_utils +module SiSU_TextUtils class Wrap def initialize(para='',n_char_max=76,n_indent=0,n_hang=nil) @para,@n_char_max,@n_indent=para,n_char_max,n_indent @@ -70,8 +69,8 @@ module SiSU_text_utils line=0 out=[] out[line]='' - @para.gsub!(/<br>/,' <br> ') - @para.gsub!(/#{Mx[:br_nl]}/,"\n\n") + @para=@para.gsub(/<br>/,' <br> '). + gsub(/#{Mx[:br_nl]}/,"\n\n") words=@para.scan(/\n\n|<br>|\S+/m) while words != '' word=words.shift @@ -84,8 +83,8 @@ module SiSU_text_utils line=line elsif word =~/\n\n/ word="\n" - @n_char_max_extend = @n_char_max + out[line].length - line=line + @n_char_max_extend = @n_char_max + line += 1 elsif (out[line].length + word.length) > (@n_char_max_extend - @n_indent) \ and out[line] =~/\S+/ @n_char_max_extend = @n_char_max @@ -104,7 +103,7 @@ module SiSU_text_utils end @oldword=word if word =~/\S+/ end - x=out.join(spaces_indent).gsub(/\A\n+/m,'').insert(0,spaces_hang) + spaces_hang + out.join(spaces_indent) end def line_wrap_indent1 @n_indent,@n_hang=2,2 @@ -115,16 +114,16 @@ module SiSU_text_utils line_wrap end def array_wrap - if @para.class==Array + if @para.is_a?(Array) @arr=[] @para.each do |line| - @arr << SiSU_text_utils::Wrap.new(line,@n_char_max,@n_indent,@n_hang).line_wrap + @arr << SiSU_TextUtils::Wrap.new(line,@n_char_max,@n_indent,@n_hang).line_wrap end end @arr end end - class Header_scan + class HeaderScan def initialize(md,para) @md,@p=md,para end diff --git a/lib/sisu/v2/shared_xhtml.rb b/lib/sisu/v4/shared_xhtml.rb index 84f8be80..f78f98fc 100644 --- a/lib/sisu/v2/shared_xhtml.rb +++ b/lib/sisu/v4/shared_xhtml.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,10 @@ ** Description: shared html parts =end -module SiSU_XHTML_shared - require "#{SiSU_lib}/defaults" # defaults.rb - require "#{SiSU_lib}/xhtml_table" # xhtml_table.rb - class Table_xhtml < SiSU_XHTML_table::Table_xhtml +module SiSU_XHTML_Shared + require_relative 'defaults' # defaults.rb + require_relative 'xhtml_table' # xhtml_table.rb + class TableXHTML < SiSU_XHTML_Table::TableXHTML end end __END__ diff --git a/lib/sisu/v4/shared_xml.rb b/lib/sisu/v4/shared_xml.rb new file mode 100644 index 00000000..6860d80c --- /dev/null +++ b/lib/sisu/v4/shared_xml.rb @@ -0,0 +1,717 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: common file for xml generation +=end +module SiSU_XML_Munge + class Trans + require_relative 'defaults' # defaults.rb + def initialize(md) + @md=md + @sys=SiSU_Env::SystemCall.new + @dir=SiSU_Env::InfoEnv.new(@md.fns) + @brace_url=SiSU_Viz::Skin.new.url_decoration + if @md.sem_tag + @ab ||=semantic_tags.default + end + end + def semantic_tags + def default + { + pub: 'publication', + conv: 'convention', + vol: 'volume', + pg: 'page', + cty: 'city', + org: 'organization', + uni: 'university', + dept: 'department', + fac: 'faculty', + inst: 'institute', + co: 'company', + com: 'company', + conv: 'convention', + dt: 'date', + y: 'year', + m: 'month', + d: 'day', + ti: 'title', + au: 'author', + ed: 'editor', #editor? + v: 'version', #edition + n: 'name', + fn: 'firstname', + mn: 'middlename', + ln: 'lastname', + in: 'initials', + qt: 'quote', + ct: 'cite', + ref: 'reference', + ab: 'abreviation', + def: 'define', + desc: 'description', + trans: 'translate', + } + end + self + end + def char_enc #character encode + def utf8(dob='') + if @sys.locale =~/utf-?8/i # instead ucs for utf8 # String#encode Iñtërnâtiônàlizætiøn + str=if defined? dob.obj then dob.obj + elsif dob.is_a?(String) then dob + end + if str + #¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûü + #¢£¥§©ª«®°±²³µ¶¹º»¼½¾×÷ + str=str.gsub(/</um,'<'). # '<' # < + gsub(/>/um,'>'). # '>' # > + gsub(/¢/um,'¢'). # '¢' # ¢ + gsub(/£/um,'£'). # '£' # £ + gsub(/¥/um,'¥'). # '¥' # ¥ + gsub(/§/um,'§'). # '§' # § + gsub(/©/um,'©'). # '©' # © + gsub(/ª/um,'ª'). # 'ª' # ª + gsub(/«/um,'«'). # '«' # « + gsub(/®/um,'®'). # '®' # ® + gsub(/°/um,'°'). # '°' # ° + gsub(/±/um,'±'). # '±' # ± + gsub(/²/um,'²'). # '²' # ² + gsub(/³/um,'³'). # '³' # ³ + gsub(/µ/um,'µ'). # 'µ' # µ + gsub(/¶/um,'¶'). # '¶' # ¶ + gsub(/¹/um,'¹'). # '¹' # ¹ + gsub(/º/um,'º'). # 'º' # º + gsub(/»/um,'»'). # '»' # » + gsub(/¼/um,'¼'). # '¼' # ¼ + gsub(/½/um,'½'). # '½' # ½ + gsub(/¾/um,'¾'). # '¾' # ¾ + gsub(/×/um,'×'). # '×' # × + gsub(/÷/um,'÷'). # '÷' # ÷ + gsub(/¿/um,'¿'). # '¿' # ¿ + gsub(/À/um,'À'). # 'À' # À + gsub(/Á/um,'Á'). # 'Á' # Á + gsub(/Â/um,'Â'). # 'Â' #  + gsub(/Ã/um,'Ã'). # 'Ã' # à + gsub(/Ä/um,'Ä'). # 'Ä' # Ä + gsub(/Å/um,'Å'). # 'Å' # Å + gsub(/Æ/um,'Æ'). # 'Æ' # Æ + gsub(/Ç/um,'Ç'). # 'Ç' # Ç + gsub(/È/um,'È'). # 'È' # È + gsub(/É/um,'É'). # 'É' # É + gsub(/Ê/um,'Ê'). # 'Ê' # Ê + gsub(/Ë/um,'Ë'). # 'Ë' # Ë + gsub(/Ì/um,'Ì'). # 'Ì' # Ì + gsub(/Í/um,'Í'). # 'Í' # Í + gsub(/Î/um,'Î'). # 'Î' # Î + gsub(/Ï/um,'Ï'). # 'Ï' # Ï + gsub(/Ð/um,'Ð'). # 'Ð' # Ð + gsub(/Ñ/um,'Ñ'). # 'Ñ' # Ñ + gsub(/Ò/um,'Ò'). # 'Ò' # Ò + gsub(/Ó/um,'Ó'). # 'Ó' # Ó + gsub(/Ô/um,'Ô'). # 'Ô' # Ô + gsub(/Õ/um,'Õ'). # 'Õ' # Õ + gsub(/Ö/um,'Ö'). # 'Ö' # Ö + gsub(/Ø/um,'Ø'). # 'Ø' # Ø + gsub(/Ù/um,'Ù'). # 'Ù' # Ù + gsub(/Ú/um,'Ú'). # 'Ú' # Ú + gsub(/Û/um,'Û'). # 'Û' # Û + gsub(/Ü/um,'Ü'). # 'Ü' # Ü + gsub(/Ý/um,'Ý'). # 'Ý' # Ý + gsub(/Þ/um,'Þ'). # 'Þ' # Þ + gsub(/ß/um,'ß'). # 'ß' # ß + gsub(/à/um,'à'). # 'à' # à + gsub(/á/um,'á'). # 'á' # á + gsub(/â/um,'â'). # 'â' # â + gsub(/ã/um,'ã'). # 'ã' # ã + gsub(/ä/um,'ä'). # 'ä' # ä + gsub(/å/um,'å'). # 'å' # å + gsub(/æ/um,'æ'). # 'æ' # æ + gsub(/ç/um,'ç'). # 'ç' # ç + gsub(/è/um,'è'). # 'è' # è + gsub(/é/um,'é'). # '´' # é + gsub(/ê/um,'ê'). # 'ˆ' # ê + gsub(/ë/um,'ë'). # 'ë' # ë + gsub(/ì/um,'ì'). # 'ì' # ì + gsub(/í/um,'í'). # '´' # í + gsub(/î/um,'î'). # 'î' # î + gsub(/ï/um,'ï'). # 'ï' # ï + gsub(/ð/um,'ð'). # 'ð' # ð + gsub(/ñ/um,'ñ'). # 'ñ' # ñ + gsub(/ò/um,'ò'). # 'ò' # ò + gsub(/ó/um,'ó'). # 'ó' # ó + gsub(/ô/um,'ô'). # 'ô' # ô + gsub(/õ/um,'õ'). # 'õ' # õ + gsub(/ö/um,'ö'). # 'ö' # ö + gsub(/ø/um,'ø'). # 'ø' # ø + gsub(/ù/um,'ú'). # 'ù' # ú + gsub(/ú/um,'û'). # 'ú' # û + gsub(/û/um,'ü'). # 'û' # ü + gsub(/ü/um,'ý'). # 'ü' # ý + gsub(/þ/um,'þ'). # 'þ' # þ + gsub(/ÿ/um,'ÿ'). # 'ÿ' # ÿ + gsub(/‘/um,'‘'). # '‘' # ‘ + gsub(/’/um,'’'). # '’' # ’ + gsub(/“/um,'“'). # “ # “ + gsub(/”/um,'”'). # ” # ” + gsub(/–/um,'–'). # – # – + gsub(/—/um,'—'). # — # — + gsub(/∝/um,'∝'). # ∝ # ∝ + gsub(/∞/um,'∞'). # ∞ # ∞ + gsub(/™/um,'™'). # ™ # ™ + gsub(/✠/um,'✠'). # ✗ # ✠ + gsub(/ /um,' '). # space identify + gsub(/ /um,' ') # space identify + end + dob=if defined? dob.obj + dob.obj=str + dob + elsif dob.is_a?(String) + str + end + dob + end + end + def html(dob='') + if @sys.locale =~/utf-?8/i # instead ucs for utf8 # String#encode Iñtërnâtiônàlizætiøn + dob.obj=dob.obj.gsub(/ /u,' '). # space identify + gsub(/ /u,' ') # space identify + else + dob.obj=dob.obj.gsub(/¢/u,'¢'). # ¢ + gsub(/£/u,'£'). # £ + gsub(/¥/u,'¥'). # ¥ + gsub(/§/u,'§'). # § + gsub(/©/u,'©'). # © + gsub(/ª/u,'ª'). # ª + gsub(/«/u,'«'). # « + gsub(/®/u,'®'). # ® + gsub(/°/u,'°'). # ° + gsub(/±/u,'±'). # ± + gsub(/²/u,'²'). # ² + gsub(/³/u,'³'). # ³ + gsub(/µ/u,'µ'). # µ + gsub(/¶/u,'¶'). # ¶ + gsub(/¹/u,'¹'). # ¹ + gsub(/º/u,'º'). # º + gsub(/»/u,'»'). # » + gsub(/¼/u,'¼'). # ¼ + gsub(/½/u,'½'). # ½ + gsub(/¾/u,'¾'). # ¾ + gsub(/×/u,'×'). # × + gsub(/÷/u,'÷'). # ÷ + gsub(/¿/u,'¿'). # ¿ + gsub(/À/u,'À'). # À + gsub(/Á/u,'Á'). # Á + gsub(/Â/u,'Â'). #  + gsub(/Ã/u,'Ã'). # à + gsub(/Ä/u,'Ä'). # Ä + gsub(/Å/u,'Å'). # Å + gsub(/Æ/u,'Æ'). # Æ + gsub(/Ç/u,'Ç'). # Ç + gsub(/È/u,'È'). # È + gsub(/É/u,'É'). # É + gsub(/Ê/u,'Ê'). # Ê + gsub(/Ë/u,'Ë'). # Ë + gsub(/Ì/u,'Ì'). # Ì + gsub(/Í/u,'Í'). # Í + gsub(/Î/u,'Î'). # Î + gsub(/Ï/u,'Ï'). # Ï + gsub(/Ð/u,'Ð'). # Ð + gsub(/Ñ/u,'Ñ'). # Ñ + gsub(/Ò/u,'Ò'). # Ò + gsub(/Ó/u,'Ó'). # Ó + gsub(/Ô/u,'Ô'). # Ô + gsub(/Õ/u,'Õ'). # Õ + gsub(/Ö/u,'Ö'). # Ö + gsub(/Ø/u,'Ø'). # Ø + gsub(/Ù/u,'Ù'). # Ù + gsub(/Ú/u,'Ú'). # Ú + gsub(/Û/u,'Û'). # Û + gsub(/Ü/u,'Ü'). # Ü + gsub(/Ý/u,'Ý'). # Ý + gsub(/Þ/u,'Þ'). # Þ + gsub(/ß/u,'ß'). # ß + gsub(/à/u,'à'). # à + gsub(/á/u,'á'). # á + gsub(/â/u,'â'). # â + gsub(/ã/u,'ã'). # ã + gsub(/ä/u,'ä'). # ä + gsub(/å/u,'å'). # å + gsub(/æ/u,'æ'). # æ + gsub(/ç/u,'ç'). # ç + gsub(/è/u,'è'). # è + gsub(/é/u,'´'). # é + gsub(/ê/u,'ˆ'). # ê + gsub(/ë/u,'ë'). # ë + gsub(/ì/u,'ì'). # ì + gsub(/í/u,'´'). # í + gsub(/î/u,'î'). # î + gsub(/ï/u,'ï'). # ï + gsub(/ð/u,'ð'). # ð + gsub(/ñ/u,'ñ'). # ñ + gsub(/ò/u,'ò'). # ò + gsub(/ó/u,'ó'). # ó + gsub(/ô/u,'ô'). # ô + gsub(/õ/u,'õ'). # õ + gsub(/ö/u,'ö'). # ö + gsub(/ø/u,'ø'). # ø + gsub(/ù/u,'ù'). # ú + gsub(/ú/u,'ú'). # û + gsub(/û/u,'û'). # ü + gsub(/ü/u,'ü'). # ý + gsub(/þ/u,'þ'). # þ + gsub(/ÿ/u,'ÿ'). # ÿ + gsub(/‘/u,'&#lsquo;'). # ‘ # ‘ + gsub(/’/u,'&#rsquo;'). # ’ # ’ + gsub(/“/u,'“'). # “ # “ + gsub(/”/u,'”'). # ” # ” + gsub(/–/u,'–'). # – # – + gsub(/—/u,'—'). # — # — + gsub(/∝/u,'∝'). # ∝ # ∝ + gsub(/∞/u,'∞'). # ∞ # ∞ + gsub(/™/u,'™'). # ™ # ™ + gsub(/✠/u,'✠'). # ✠ + #gsub(/✠/u '†'). # † # † incorrect replacement † + gsub(/ /u,' '). # space identify + gsub(/ /u,' ') # space identify + end + end + self + end + def tidywords(wordlist) + wordlist_new=[] + wordlist.each do |x| + #imperfect solution will not catch all possible cases + x=x.gsub(/&/,'&') unless x =~/&\S+;/ + x=x.gsub(/&([A-Z])/,'&\1') + wordlist_new << x + end + wordlist_new + end + def markup(dob='') + wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 + dob.obj=tidywords(wordlist).join(' ').strip + unless dob.is==:table + dob.obj=dob.obj.gsub(/#{Mx[:br_line]}/u,'<br />'). + gsub(/#{Mx[:br_paragraph]}/u,'<br />'). + gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') + end + dob.obj=dob.obj.gsub(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,''). + gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;'). + gsub(/(^|#{Mx[:gl_c]}|\s+)<\s+/,'\1< ').gsub(/\s+>(\s+|$)/,' >\1'). + #gsub(/#{Mx[:fa_emphasis_o]}(.+?)#{Mx[:fa_emphasis_c]}/,'<em>\1</em>'). #reinstate + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/m,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/m,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). + gsub(/<:pb>\s*/,''). #Fix + gsub(/<+[-~]#>+/,'') + if dob.is !=:code + #embeds a red-bullet image --> + dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') + dob.obj=dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is==:table + dob.obj=dob.obj.gsub(/#{Mx[:br_page]}\s*/,''). + gsub(/#{Mx[:br_page_new]}\s*/,''). + gsub(/#{Mx[:pa_non_object_no_heading]}|#{Mx[:pa_non_object_dummy_heading]}/,''). + gsub(/<[-~]#>/,''). + gsub(/href="#{Xx[:segment]}/m,'href="'). + gsub(/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{Mx[:rel_c]}]+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\.\.\/\S+?)#{Mx[:rel_c]}/, + '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\2">\1</link>'). + gsub(/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}#{Mx[:rel_o]}#{Mx[:rel_c]}]+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}:(\S+?)#{Mx[:rel_c]}/, + '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="../\2">\1</link>'). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/, + '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="#\2">\1</link>'). + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))[ ]+(\d+)x(\d+)(\s+[^}]+)?#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@md.file.output_path.xml.rel_image}/\\1" width="\\2" height="\\3" />[\\1] \\4}). + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))([ ]+[^}]+)?#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@md.file.output_path.xml.rel_image}/\\1"/>\\1}). + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))[ ]+(\d+)x(\d+)(\s+[^}]+)?#{Mx[:lnk_c]}image/, + %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@md.file.output_path.xml.rel_image}/\\1" width="\\2" height="\\3" />[\\1] \\4}). + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}[ ]*(\S+?\.(?:jpg|png|gif))([ ]+[^}]+)?#{Mx[:lnk_c]}image/, + %{<image xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:actuate="onLoad" xlink:show="embed" xlink:href="#{@md.file.output_path.xml.rel_image}/\\1"/>\\1}). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\2">\1</link>'). #watch, compare html_tune + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\\1">\\1</link>#{@brace_url.xml_close}}). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="\1">\1</link>') #escaped urls not linked, deal with later + else + dob.obj=dob.obj.gsub(/</m,'<').gsub(/>/m,'>') + end + if dob.of==:block + dob.obj=dob.obj.gsub(/#{Mx[:gl_bullet]}/,'● ') + end + dob.obj=dob.obj.gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, + %{#{@brace_url.xml_open}\\1#{@brace_url.xml_close}}). + gsub(/#{Dx[:url_o]}/,"#{Dx[:url_o_xml]}"). + gsub(/#{Dx[:url_c]}/,"#{Dx[:url_c_xml]}"). + gsub(/ |#{Mx[:nbsp]}/m,' ') + dob + end + def markup_light(dob='') + dob.obj=dob.obj.gsub(/\/\{(.+?)\}\//,'<i>\1</i>'). + gsub(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>'). + gsub(/_\{(.+?)\}_/,'<u>\1</u>'). + gsub(/-\{(.+?)\}-/,'<del>\1</del>'). + gsub(/<br(\s*\/)?>/,'<br />'). + gsub(/<:pb>\s*/,''). + gsub(/<[-~]#>/,''). + gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& '). #sort + gsub(/&([^;]{1,5})/,'&\1'). #sort, rough estimate, revisit #WATCH found in node not sax + gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, + "<image.path>#{@md.file.output_path.xml.rel_image}\/\\1</image.path>"). + gsub(/ |#{Mx[:nbsp]}/,' ') + wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 + dob.obj=tidywords(wordlist).join(' ').strip + dob + end + def markup_fictionbook(dob='') + dob.obj.gsub(/~\{([\d*+]+).+?\}~/,'[\1]'). + gsub(/\/\{(.+?)\}\//,'<i>\1</i>'). + gsub(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>'). + gsub(/_\{(.+?)\}_/,'<u>\1</u>'). + gsub(/-\{(.+?)\}-/,'<del>\1</del>'). + gsub(/<br(?:\s*\/)?>/,'<br />'). + gsub(/<:pb>\s*/,''). + gsub(/<[-~]#>/,''). + #temporary --> + gsub(/<:\S+?>/,''). + #<-- temporary + gsub(/<[-~]#>/,''). + gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& '). #sort + gsub(/&([^;]{1,5})/,'&\1') #sort, rough estimate, revisit #WATCH found in node not sax + gsub(/(#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, + "<image.path>#{@md.file.output_path.xml.rel_image}\/\\1</image.path>"). + gsub(/ |#{Mx[:nbsp]}/,' ') + wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 + dob.obj=tidywords(wordlist).join(' ').strip + dob + end + def markup_group(dob='') + dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<:?br(?:\s+\/)?>/,'<br />'). + gsub(/<(link xmlns:xlink=".+?")>/,'<\1>'). + gsub(/<(\/link)>/,'<\1>'). + gsub(/<(\/?en)>/,'<\1>') + dob + end + def markup_block(dob='') + dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>'). + gsub(/<:?br(?:\s+\/)?>/,'<br />'). + gsub(/<(link xmlns:xlink=".+?")>/,'<\1>'). + gsub(/<(\/link)>/,'<\1>'). + gsub(/<(\/?en)>/,'<\1>') + dob + end + def xml_sem_block_paired(matched) # colon depth: many, recurs + matched=matched.gsub(/\b(au):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:au]} depth="many">\\2</sem:#{@ab[:au]}>}). + gsub(/\b(vol):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:vol]} depth="many">\\2</sem:#{@ab[:vol]}>}). + gsub(/\b(pub):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:pub]} depth="many">\\2</sem:#{@ab[:pub]}>}). + gsub(/\b(ref):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ref]} depth="many">\\2</sem:#{@ab[:ref]}>}). + gsub(/\b(desc):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:desc]} depth="many">\\2</sem:#{@ab[:desc]}>}). + gsub(/\b(conv):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:conv]} depth="many">\\2</sem:#{@ab[:conv]}>}). + gsub(/\b(ct):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ct]} depth="many">\\2</sem:#{@ab[:ct]}>}). + gsub(/\b(cty):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:cty]} depth="many">\\2</sem:#{@ab[:cty]}>}). + gsub(/\b(org):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:org]} depth="many">\\2</sem:#{@ab[:org]}>}). + gsub(/\b(dt):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:dt]} depth="many">\\2</sem:#{@ab[:dt]}>}). + gsub(/\b(n):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:n]} depth="many">\\2</sem:#{@ab[:n]}>}). + gsub(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m,'<sem:\1 depth="many">\2</sem:\1>') + end + def xml_semantic_tags(dob) + if @md.sem_tag + dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } + dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } + dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } + dob.obj=dob.obj.gsub(/:\{(.+?)\}:au\b/m, %{<sem:#{@ab[:au]} depth="one">\\1</sem:#{@ab[:au]}>}). + gsub(/:\{(.+?)\}:n\b/m, %{<sem:#{@ab[:n]} depth="one">\\1</sem:#{@ab[:n]}>}). + gsub(/:\{(.+?)\}:ti\b/m, %{<sem:#{@ab[:ti]} depth="one">\\1</sem:#{@ab[:ti]}>}). + gsub(/:\{(.+?)\}:ref\b/m, %{<sem:#{@ab[:ref]} depth="one">\\1</sem:#{@ab[:ref]}>}). + gsub(/:\{(.+?)\}:desc\b/m, %{<sem:#{@ab[:desc]} depth="one">\\1</sem:#{@ab[:desc]}>}). + gsub(/:\{(.+?)\}:cty\b/m, %{<sem:#{@ab[:cty]} depth="one">\\1</sem:#{@ab[:cty]}>}). + gsub(/:\{(.+?)\}:org\b/m, %{<sem:#{@ab[:org]} depth="one">\\1</sem:#{@ab[:org]}>}). + gsub(/:\{(.+?)\}:([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="one">\1</sem:\2>'). + gsub(/;\{([^}]+(?![;]))\};ti\b/m, %{<sem:#{@ab[:ti]} depth="zero">\\1</sem:#{@ab[:ti]}>}). + gsub(/;\{([^}]+(?![;]))\};qt\b/m, %{<sem:#{@ab[:qt]} depth="zero">\\1</sem:#{@ab[:qt]}>}). + gsub(/;\{([^}]+(?![;]))\};ref\b/m, %{<sem:#{@ab[:ref]} depth="zero">\\1</sem:#{@ab[:ref]}>}). + gsub(/;\{([^}]+(?![;]))\};ed\b/m, %{<sem:#{@ab[:ed]} depth="zero">\\1</sem:#{@ab[:ed]}>}). + gsub(/;\{([^}]+(?![;]))\};v\b/m, %{<sem:#{@ab[:v]} depth="zero">\\1</sem:#{@ab[:v]}>}). + gsub(/;\{([^}]+(?![;]))\};desc\b/m, %{<sem:#{@ab[:desc]} depth="zero">\\1</sem:#{@ab[:desc]}>}). + gsub(/;\{([^}]+(?![;]))\};def\b/m, %{<sem:#{@ab[:def]} depth="zero">\\1</sem:#{@ab[:def]}>}). + gsub(/;\{([^}]+(?![;]))\};trans\b/m, %{<sem:#{@ab[:trans]} depth="zero">\\1</sem:#{@ab[:trans]}>}). + gsub(/;\{([^}]+(?![;]))\};y\b/m, %{<sem:#{@ab[:y]} depth="zero">\\1</sem:#{@ab[:y]}>}). + gsub(/;\{([^}]+(?![;]))\};ab\b/m, %{<sem:#{@ab[:ab]} depth="zero">\\1</sem:#{@ab[:ab]}>}). + gsub(/;\{([^}]+(?![;]))\};pg\b/m, %{<sem:#{@ab[:pg]} depth="zero">\\1</sem:#{@ab[:pg]}>}). + gsub(/;\{([^}]+(?![;]))\};fn?\b/m, %{<sem:#{@ab[:fn]} depth="zero">\\1</sem:#{@ab[:fn]}>}). + gsub(/;\{([^}]+(?![;]))\};mn?\b/m, %{<sem:#{@ab[:mn]} depth="zero">\\1</sem:#{@ab[:mn]}>}). + gsub(/;\{([^}]+(?![;]))\};ln?\b/m, %{<sem:#{@ab[:ln]} depth="zero">\\1</sem:#{@ab[:ln]}>}). + gsub(/;\{([^}]+(?![;]))\};in\b/m, %{<sem:#{@ab[:in]} depth="zero">\\1</sem:#{@ab[:in]}>}). + gsub(/;\{([^}]+(?![;]))\};uni\b/m, %{<sem:#{@ab[:uni]} depth="zero">\\1</sem:#{@ab[:uni]}>}). + gsub(/;\{([^}]+(?![;]))\};fac\b/m, %{<sem:#{@ab[:fac]} depth="zero">\\1</sem:#{@ab[:fac]}>}). + gsub(/;\{([^}]+(?![;]))\};inst\b/m, %{<sem:#{@ab[:inst]} depth="zero">\\1</sem:#{@ab[:inst]}>}). + gsub(/;\{([^}]+(?![;]))\};dept\b/m, %{<sem:#{@ab[:dpt]} depth="zero">\\1</sem:#{@ab[:dept]}>}). + gsub(/;\{([^}]+(?![;]))\};org\b/m, %{<sem:#{@ab[:org]} depth="zero">\\1</sem:#{@ab[:org]}>}). + gsub(/;\{([^}]+(?![;]))\};com?\b/m, %{<sem:#{@ab[:com]} depth="zero">\\1</sem:#{@ab[:com]}>}). + gsub(/;\{([^}]+(?![;]))\};cty\b/m, %{<sem:#{@ab[:cty]} depth="zero">\\1</sem:#{@ab[:cty]}>}). + gsub(/;\{([^}]+(?![;]))\};([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="zero">\1</sem:\2>') + end + dob + end + end +end +module SiSU_XML_Tags #Format + require_relative 'param' # param.rb + include SiSU_Param + include SiSU_Viz + class RDF + def initialize(md='',seg_name=[],tracker=0) + @full_title=@subtitle=@author=@subject=@description=@publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@copyright=@owner=@keywords='' + @md=md + @rdfurl=%{ rdf:about="http://www.jus.uio.no/lm/toc"\n} + if defined? @md.title.full \ + and @md.title.full # DublinCore 1 - title + @rdf_title=%{ dc.title="#{seg_name}#{@md.title.full}"\n} + @full_title=%{ <meta name="dc.title" content="#{@md.title.full}" />\n} + end + if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ # DublinCore 2 - creator/author (author) + @rdf_author=%{ dc.author="#{@md.creator.author}"\n} + content=meta_content_clean(@md.creator.author) + @author=%{ <meta name="dc.author" content="#{content}" />\n} + end + if defined? @md.classify.subject \ + and @md.classify.subject=~/\S+/ # DublinCore 3 - subject (us library of congress, eric or udc, or schema???) + @rdf_subject=%{ dc.subject="#{@md.classify.subject}"\n} + content=meta_content_clean(@md.classify.subject) + @subject=%{ <meta name="dc.subject" content="#{content}" />\n} + end + if defined? @md.notes.description \ + and @md.notes.description=~/\S+/ # DublinCore 4 - description + @rdf_description=%{ dc.description="#{@md.notes.description}"\n} + content=meta_content_clean(@md.notes.description) + @description=%{ <meta name="dc.description" content="#{content}" />\n} + end + if defined? @md.publisher \ + and @md.publisher # DublinCore 5 - publisher (current copy published by) + @rdf_publisher=%{ dc.publisher="#{@md.publisher}"\n} + content=meta_content_clean(@md.publisher) + @publisher=%{ <meta name="dc.publisher" content="#{content}" />\n} + end + if defined? @md.creator.contributor \ + and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor + @rdf_contributor=%{ dc.contributor="#{@md.creator.contributor}"\n} + content=meta_content_clean(@md.creator.contributor) + @contributor=%{ <meta name="dc.contributor" content="#{content}" />\n} + end + if defined? @md.date.published \ + and @md.date.published=~/\S+/ # DublinCore 7 - date year-mm-dd + @rdf_date=%{ dc.date="#{@md.date.published}"\n} + @date=%{ <meta name="dc.date" content="#{@md.date.published}" #{@md.date_scheme} />\n} # fix @md.date_scheme + end + if defined? @md.date.created \ + and @md.date.created=~/\S+/ # DublinCore 7 - date.created year-mm-dd + @rdf_date_created=%{ dc.date.created="#{@md.date.created}"\n} + @date_created=%{ <meta name="dc.date.created" content="#{@md.date.created}" #{@md.date_scheme} />\n} + end + if defined? @md.date.issued \ + and @md.date.issued=~/\S+/ # DublinCore 7 - date.issued year-mm-dd + @rdf_date_issued=%{ dc.date.issued="#{@md.date.issued}"\n} + @date_issued=%{ <meta name="dc.date.issued" content="#{@md.date.issued}" #{@md.date_scheme} />\n} + end + if defined? @md.date.available \ + and @md.date.available=~/\S+/ # DublinCore 7 - date.available year-mm-dd + @rdf_date_available=%{ dc.date.available="#{@md.date.available}"\n} + @date_available=%{ <meta name="dc.date.available" content="#{@md.date.available}" #{@md.date_scheme} />\n} + end + if defined? @md.date.valid \ + and @md.date.valid=~/\S+/ # DublinCore 7 - date.valid year-mm-dd + @rdf_date_valid=%{ dc.date.valid="#{@md.date.valid}"\n} + @date_valid=%{ <meta name="dc.date.valid" content="#{@md.date.valid}" #{@md.date_scheme} />\n} + end + if defined? @md.date.modified \ + and @md.date.modified=~/\S+/ # DublinCore 7 - date.modified year-mm-dd + @rdf_date_modified=%{ dc.date.modified="#{@md.date.modified}"\n} + @date_modified=%{ <meta name="dc.date.modified" content="#{@md.date.modified}" #{@md.date_scheme} />\n} + end + if defined? @md.type \ + and @md.type # DublinCore 8 - type (genre eg. report, convention etc) + @rdf_type=%{ dc.type="#{@md.type}"\n} + content=meta_content_clean(@md.type) + @type=%{ <meta name="dc.type" content="#{content}" />\n} + end + if defined? @md.classify.format \ + and @md.classify.format=~/\S+/ # DublinCore 9 - format (use your mime type) + @rdf_format=%{ dc.format="#{@md.classify.format}"\n} + content=meta_content_clean(@md.classify.format) + @format=%{ <meta name="dc.format" content="#{content}" />\n} + end + if defined? @md.classify.identifier \ + and @md.classify.identifier=~/\S+/ # DublinCore 10 - identifier (your identifier, could use urn which is free) + @rdf_identifier=%{ dc.identifier="#{@md.classify.identifier}"\n} + content=meta_content_clean(@md.classify.identifier) + @identifier=%{ <meta name="dc.identifier" content="#{content}" />\n} + end + if defined? @md.original.source \ + and @md.original.source=~/\S+/ # DublinCore 11 - source (document source) + @rdf_source=%{ dc.source="#{@md.original.source}"\n} + content=meta_content_clean(@md.original.source) + @source=%{ <meta name="dc.source" content="#{content}" />\n} + end + if defined? @md.title.language \ + and @md.title.language=~/\S+/ # DublinCore 12 - language (English) + @rdf_language=%{ dc.language="#{@md.title.language}"\n} + @language=%{ <meta name="dc.language" content="#{@md.title.language}" />\n} + end + if defined? @md.original.language \ + and @md.original.language=~/\S+/ + @rdf_language_original=%{ dc.language="#{@md.original.language}"\n} + @language_original=%{ <meta name="dc.language" content="#{@md.original.language}" />\n} + end + if defined? @md.classify.relation \ + and @md.classify.relation=~/\S+/ # DublinCore 13 - relation + @rdf_relation=%{ dc.relation="#{@md.classify.relation}"\n} + content=meta_content_clean(@md.classify.relation) + @relation=%{ <meta name="dc.relation" content="#{content}" />\n} + end + if defined? @md.classify.coverage \ + and @md.classify.coverage=~/\S+/ # DublinCore 14 - coverage + @rdf_coverage=%{ dc.coverage="#{@md.classify.coverage}"\n} + content=meta_content_clean(@md.classify.coverage) + @coverage=%{ <meta name="dc.coverage" content="#{content}" />\n} + end + if defined? @md.rights.all \ + and @md.rights.all # DublinCore 15 - rights + @rdf_rights=%{ dc.rights="#{@md.rights.all}"\n} + content=meta_content_clean(@md.rights.all) + @rights=%{ <meta name="dc.rights" content="#{content}" />\n} + end + content=meta_content_clean(@md.keywords) + @keywords=%{ <meta name="keywords" content="#{content}" />\n} if @md.keywords + @vz=SiSU_Env::GetInit.instance.skin + end + def meta_content_clean(content='') + content + unless content.nil? + content=content.tr('"',"'") + content=SiSU_XML_Munge::Trans.new(@md).char_enc.utf8(content) + end + content + end + def rdfseg #segHead + rdftoc + end + def comment_xml(extra='') + generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] + lastdone="Last Generated on: #{Time.now}" + rubyv="Ruby version: #{@md.ruby_version}" + sc=if @md.sc_info + "Source file: #{@md.sc_filename} version: #{@md.sc_number} of: #{@md.sc_date}" + else '' + end + if extra.empty? +<<WOK +<!-- Document processing information: + * #{generator} + * #{rubyv} + * #{sc} + * #{lastdone} + * SiSU http://www.jus.uio.no/sisu +--> +WOK + else +<<WOK +<!-- Document processing information: + * #{extra} + * #{generator} + * #{rubyv} + * #{sc} + * #{lastdone} + * SiSU http://www.jus.uio.no/sisu +--> +WOK + end + end + def comment_xml_sax + desc='SiSU XML, SAX type representation' + comment_xml(desc) + end + def comment_xml_node + desc='SiSU XML, Node type representation' + comment_xml(desc) + end + def comment_xml_dom + desc='SiSU XML, DOM type representation' + comment_xml(desc) + end + def metatag_html #values strung together, because some empty, and resulting output (line breaks) is much better +<<WOK +#{@full_title}#{@subtitle}#{@author}#{@subject}#{@description}#{@publisher}#{@contributor}#{@date}#{@date_created}#{@date_issued}#{@date_available}#{@date_valid}#{@date_modified}#{@type}#{@format}#{@identifier}#{@source}#{@language}#{@relation}#{@coverage}#{@rights}#{@copyright}#{@owner} +#{@vz.txt_generator} +#{@vz.png_ico} +WOK + end + end +end +module SiSU_Tables + require_relative 'xml_tables' # xml_tables.rb +end +__END__ diff --git a/lib/sisu/v4/sisupod_make.rb b/lib/sisu/v4/sisupod_make.rb new file mode 100644 index 00000000..7b7957ab --- /dev/null +++ b/lib/sisu/v4/sisupod_make.rb @@ -0,0 +1,161 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: create sisupod filetype and copy it to output directory! + +=end +module SiSU_Doc + require_relative 'shared_sisupod_source' # shared_sisupod_source.rb + include SiSU_Source + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + class Source < SiSU_Source::SiSUpodSource + require_relative 'response' # response.rb + def initialize(opt,build=nil,place=nil) + super(opt,build,place) + @zipfile=@opt.fno.gsub(/(?:\~\S{2,3})?(\.ss[tm])$/,'\1') + @ans=SiSU_Response::Response.new + if @opt.cmd=~/[MVv]/ + SiSU_Screen::Ansi.new(@opt.cmd,'Assemble source for sisu document',"#{@opt.fns} -> file://#{@file.output_path.sisupod.dir}/#{@zipfile}.txz").warn + end + end + def sisupod_tar_xz + begin + FileUtils::mkdir_p(@file.output_path.sisupod.dir) unless FileTest.directory?(@file.output_path.sisupod.dir) + tree=(@opt.cmd =~/[vVM]/ \ + && SiSU_Env::SystemCall.new.program_found?('tree')) \ + ? 'tree sisupod' + : '' + if FileTest.directory?(@path_pod[:fnb]) + Dir.chdir(@path_pod[:fnb]) + system(%{ + #{tree} + tar -cJf #{@zipfile}.txz sisupod + #echo "#{@file.place_file.sisupod.dir}" + }) + FileUtils::mv("#{@zipfile}.txz",@file.place_file.sisupod.dir) + Dir.chdir(@env.path.pwd) + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz").blue_tab if @opt.cmd=~/[MVv]/ + else + SiSU_Screen::Ansi.new('',"#{@opt.fns}.txz not built").blue_tab if @opt.cmd=~/[MVv]/ + end + rescue + ensure + end + end + end +end +__END__ +question?: should you permit the packing of multiple documents in single .xz ? + + open @opt.fns, parse file + extract from file content: + images and copy each image from whatever image source to _sisu/sisupod/sisu/_sisu/image + skin and copy active skin from whatever source to _sisu/sisupod/sisu/_sisu/skin/doc + extract from skin images required by skin + + remove previously existing contents of _/sisu/sisupod & + make directory structure: + +v3 --> + _sisu + sisupod + doc + manifest.txt + en/content.sst [file content] + fr/content.sst + _sisu + conf + skin/ + doc [relevant skin if any other than default] + image (ln -s ../../image) + audio (ln -s ../../audio) + video (ln -s ../../video) + image [all images for specific document gathered here] + audio + video + +v2 --> + _sisu + sisupod + content.sst [file content] + filename.sst [link to content.sst] + _sisu/ + skin/ + doc [relevant skin if any other than default] + image/ [all images for specific document gathered here] + +sisu + _sisu + sisurc.yml + skin/ + dir/ + doc/ + misc/ + site/ + yaml/ + convert/ + standard_terms/ + image + processing + dal/ + tex/ + texinfo/ + tune/ + sisupod + +special case + +composite file (master), e.g. +SiSU.ssm diff --git a/lib/sisu/v2/sitemaps.rb b/lib/sisu/v4/sitemaps.rb index 87bd21c0..d45af899 100644 --- a/lib/sisu/v2/sitemaps.rb +++ b/lib/sisu/v4/sitemaps.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,15 +56,13 @@ =end module SiSU_Sitemaps - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge class Source - require 'fileutils' - include FileUtils def initialize(opt) @opt=opt end @@ -74,46 +71,46 @@ module SiSU_Sitemaps end def songsheet begin - @sys=SiSU_Env::System_call.new - fn_set_lang=SiSU_Env::Standardise_language.new.file_to_language(@opt.fns) - @fn=SiSU_Env::Env_call.new(@opt.fns).lang(fn_set_lang[:c]) + @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.cmd =~/Y/ @md=SiSU_Param::Parameters.new(@opt).get - @trans=SiSU_XML_munge::Trans.new(@md) #check @md is required - @env=SiSU_Env::Info_env.new(@md.fns) - @rdf=SiSU_XML_tags::RDF.new(@md) + @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 #% utf8 output_map(sitemap) elsif @opt.mod.inspect =~/--sitemaps/ @sitemap_idx_fn='sitemapindex.xml' - @env=SiSU_Env::Info_env.new + @env=SiSU_Env::InfoEnv.new output_idx(sitemap_index) SiSU_Screen::Ansi.new(@opt.cmd,"sitemap index:","#{@env.path.output}/#{@sitemap_idx_fn}").result unless @opt.cmd =~/q/ end - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end def make_file(path,filename) - if File.writable?("#{path}/."); File.new("#{path}/#{filename}",'w+') - else - SiSU_Screen::Ansi.new('',"is the file or directory writable?, could not create #{filename}").warn - end - end - def make_path(path) - mkdir_p(path) unless FileTest.directory?(path) + (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="#{@env.path.output}/#{@md.fnb}" + path=@md.file.output_path.sitemaps.dir filename=@fn[:sitemap] - touch_path=@env.path.sitemaps + touch_path=@md.file.output_path.sitemaps.dir touch_filename=@fn[:sitemap_touch] - SiSU_Env::SiSU_file.new(@md).make_path(path) - file=SiSU_Env::SiSU_file.new(@md).make_file(path,filename) + 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}") - rm("#{touch_path}/#{touch_filename}") + FileUtils::rm("#{touch_path}/#{touch_filename}") end end def output_idx(sitemap) diff --git a/lib/sisu/v2/spell.rb b/lib/sisu/v4/spell.rb index fed55cab..e0a8fbc3 100644 --- a/lib/sisu/v2/spell.rb +++ b/lib/sisu/v4/spell.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,7 +55,7 @@ ** Description: spellchecking =end -module Utility +module SiSU_SpellUtility class Spell def initialize(input,filesrc,flg) @flg=flg @@ -70,23 +69,23 @@ module Utility end def check @input.each do |data| - data.gsub!(/(https?|www|ftp|gopher|png|jpg|gif|html|htm)\S+/i,' ') - data.gsub!(/( |#{Mx[:nbsp]})/i,' ') - data.gsub!(/<\/?(table|tr|td|b|p|href).*?>/i,' ') - data.gsub!(/(<==.+|<:\S+>|<!.+?!>|^@\S+?:.+|\{\{\{|~)/,' ') - data.gsub!(/(["|<>)(\n'`'.;&_-]|\=)/,' ') - data.gsub!(/\b(altExternal| - target|externalimg| - srcimagebext| - img|src|toc|pdf| - cd|org| - helvetica|roman - )\b/i,' ') - data.gsub!(/EOF/,'') + data=data.gsub(/(https?|www|ftp|gopher|png|jpg|gif|html|htm)\S+/i,' '). + gsub(/( |#{Mx[:nbsp]})/i,' '). + gsub(/<\/?(table|tr|td|b|p|href).*?>/i,' '). + gsub(/(<==.+|<:\S+>|<!.+?!>|^@\S+?:.+|\{\{\{|~)/,' '). + gsub(/(["|<>)(\n'`'.;&_-]|\=)/,' '). + gsub(/\b(altExternal| + target|externalimg| + srcimagebext| + img|src|toc|pdf| + cd|org| + helvetica|roman + )\b/i,' '). + gsub(/EOF/,'') @words=data.scan(/\S+/) @words.each { |y| @allwords << y } end - @allwords.uniq! + @allwords=@allwords.uniq if @flg =~ /S/ File.open('/home/ralph/spell_error','a+') do |file| #fix file.puts %{\n\n<<#{@filename}>>} diff --git a/lib/sisu/v2/sst_convert_markup.rb b/lib/sisu/v4/sst_convert_markup.rb index 25d12d07..20b6d775 100644 --- a/lib/sisu/v2/sst_convert_markup.rb +++ b/lib/sisu/v4/sst_convert_markup.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,16 +58,10 @@ =end module SiSU_Modify - require "#{SiSU_lib}/sst_identify_markup" # sst_identify_markup.rb - require "#{SiSU_lib}/sst_from_kdissert" # sst_from_kdissert.rb - require "#{SiSU_lib}/sst_to_s_xml_sax" # sst_to_s_xml_sax.rb - require "#{SiSU_lib}/sst_to_s_xml_dom" # sst_to_s_xml_dom.rb - require "#{SiSU_lib}/sst_to_s_xml_node" # sst_to_s_xml_node.rb - require "#{SiSU_lib}/sst_from_xml" # sst_from_xml.rb - require "#{SiSU_lib}/response" # response.rb - class Convert_markup - require 'fileutils' - include FileUtils #::Verbose + require_relative 'sst_identify_markup' # sst_identify_markup.rb + require_relative 'sst_from_xml' # sst_from_xml.rb + require_relative 'response' # response.rb + class ConvertMarkup def initialize(opt) @opt=opt @description='This is a script that contains canned text conversions for reuse' @@ -172,14 +165,14 @@ WOK unless f==s unless File.exist?("#{pwd}/#{s}") puts "./#{f} -> ./#{s}" - cp("#{pwd}/#{f}","#{pwd}/#{s}") + FileUtils::cp("#{pwd}/#{f}","#{pwd}/#{s}") else "File already exists, < #{s} > will not overwrite" end end end end def convert_to_simple_xml_model_sax - SiSU_simple_xml_model_sax::Convert.new(@opt).read + SiSU_SimpleXML_ModelSax::Convert.new(@opt).read end def convert_to_simple_xml_model_dom SiSU_simple_xml_model_dom::Convert.new(@opt).read @@ -191,11 +184,11 @@ WOK SiSU_Kdissert::Convert.new(@opt).read end def convert_s_xml_to_sst - SiSU_sst_from_xml::Convert.new(@opt).read + SiSU_sstFromXML::Convert.new(@opt).read end def convert_footnotes - require "#{SiSU_lib}/sst_do_inline_footnotes" - SiSU_Convert_footnotes::Source.new(@opt).read + require_relative 'sst_do_inline_footnotes' + SiSU_ConvertFootnotes::Source.new(@opt).read end def conversion #%% do it --------------------------> @@ -203,7 +196,7 @@ WOK and @opt.files.length > 0 mr=nil #%% changes to make m match, r replace --------------------------> - if @opt.mod.inspect =~/--help/; help + if @opt.mod.inspect =~/--help/ then help elsif @opt.mod.inspect =~/(?:convert|to)[=-](?:xml |sxs|sax|sxd|dom|sxn|node)/ ext=case @opt.mod.inspect when /(?:convert|to)[=-](?:xml|sxs|sax)/; '.sxs.xml' @@ -237,7 +230,7 @@ WOK if i =~/(?:\.sst|\.ssm|\.ssi)$/ @new,@matched,@flag_start,@flag_end,@empty1,@empty2=true,false,false,false,false,false o="#{i}.bk" #o is for old - markup_version=SiSU_Markup::Markup_identify.new(@opt).markup_version? + markup_version=SiSU_Markup::MarkupIdentify.new(@opt).markup_version? if (@opt.mod.inspect=~/37/ and markup_version=~/0.38/) \ or (@opt.mod.inspect=~/current|38/ and markup_version=~/0.37/) puts "#{i} #{markup_version}" @@ -279,13 +272,13 @@ WOK end end end - if y=~/^\s*$/; @empty1=true - else @empty1=false - end + @empty1=(y=~/^\s*$/) \ + ? true + : false @file.puts y unless (@empty1==true and @empty2==true) - if y=~/^\s*$/; @empty2=true - else @empty2=false - end + @empty2=(y=~/^\s*$/) \ + ? true + : false end @file.close else puts "NO conversion match in #{i}" unless @opt.cmd=~/q/ @@ -300,19 +293,19 @@ WOK end end #%% files to match for this conversion set -------------------------> -require "#{SiSU_lib}/options" # options.rb +require_relative 'options' # options.rb argv=$* -@opt=SiSU_commandline::Options.new(argv) +@opt=SiSU_Commandline::Options.new(argv) case @opt.mod.inspect when /=kdi/ - SiSU_Modify::Convert_markup.new(@opt).conversion + SiSU_Modify::ConvertMarkup.new(@opt).conversion when /(?:36|37|38)?to-?(?:37|38)|--convert|--to|--from|default/ @opt.files.each do |fns| @opt.fns=fns - SiSU_Modify::Convert_markup.new(@opt).conversion + SiSU_Modify::ConvertMarkup.new(@opt).conversion end else @opt.mod='--help' - SiSU_Modify::Convert_markup.new(@opt).help + SiSU_Modify::ConvertMarkup.new(@opt).help end __END__ diff --git a/lib/sisu/v2/sst_do_inline_footnotes.rb b/lib/sisu/v4/sst_do_inline_footnotes.rb index f114d97a..b30fa8d2 100644 --- a/lib/sisu/v2/sst_do_inline_footnotes.rb +++ b/lib/sisu/v4/sst_do_inline_footnotes.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,26 +46,26 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> <ralph.amissah@gmail.com> - ** Description: preprocessing, (dal), data abstraction used in subsequent - processing + ** Description: preprocessing, convert bi-footnotemarker-footnote to inline + footnotes, invoked using: sisu --to-footnotes filename.sst =end -module SiSU_Convert_footnotes - require "#{SiSU_lib}/defaults" # defaults.rb +module SiSU_ConvertFootnotes + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/dal_syntax" # dal_syntax.rb - include SiSU_Syntax - require "#{SiSU_lib}/i18n" # i18n.rb + require_relative 'dal_syntax' # dal_syntax.rb + include SiSU_DAL_Syntax + require_relative 'i18n' # i18n.rb class Instantiate < SiSU_Param::Parameters::Instructions @@flag={} #Beware!! def initialize @@ -84,9 +83,8 @@ module SiSU_Convert_footnotes def initialize(opt) @opt=opt @@fns||@opt.fns - @my_make_fns=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - @fnm=@my_make_fns.dal_content - SiSU_Env::Create_system_link.new.images + @my_make=SiSU_Env::CreateFile.new(@opt.fns) + @fnm=SiSU_Env::InfoFile.new(@opt.fns).marshal.dal_content end def read #creates dal begin @@ -94,7 +92,10 @@ module SiSU_Convert_footnotes @@dal_array=[] @@fns=@opt.fns create_dal - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure Instantiate.new end @@ -106,10 +107,13 @@ module SiSU_Convert_footnotes @@fns=@opt.fns @@dal_array=[] end - dal=if @@dal_array.empty?; read_fnm - else @@dal_array.dup #check + dal=(@@dal_array.empty?) \ + ? read_fnm + : @@dal_array.dup #check + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ end - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error ensure Instantiate.new end @@ -120,37 +124,37 @@ module SiSU_Convert_footnotes SiSU_Screen::Ansi.new(@opt.cmd,'convert footnotes').green_title_hi unless @opt.cmd =~/q/ file_array=IO.readlines(@opt.fns,'') file_array.each do |l| - if l =~/\r\n/; l.gsub!(/\r\n/,"\n") + if l =~/\r\n/ then l.gsub!(/\r\n/,"\n") end end meta=file_array.dup meta=meta.join.split("\n\n") #check whether can be eliminated, some of these are large objects to have twice @md=SiSU_Param::Parameters::Instructions.new(meta,@opt).extract if @md.en[:mismatch]==0 \ - or @md.mod.inspect =~/=footnotes-force/ + or @md.opt.mod.inspect =~/=footnotes-force/ meta=nil - dal=SiSU_Convert_footnotes::Make.new(@md,file_array).song - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@md.fns}.fn").output if @md.cmd =~/v/ - SiSU_Screen::Ansi.new(@opt.cmd,"#{@md.fns}.fn -> #{@md.fns}.fn").txt_red unless @md.cmd =~/q/ - dal.each{|s| dal_array << "#{s.strip}\n\n" unless s.strip.empty?} + dal=SiSU_ConvertFootnotes::Make.new(@md,file_array).song + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@md.fns}.fn").output if @md.opt.cmd =~/v/ + SiSU_Screen::Ansi.new(@opt.cmd,"#{@md.fns}.fn -> #{@md.fns}.fn").txt_red unless @md.opt.cmd =~/q/ + dal.each {|s| dal_array << "#{s.strip}\n\n" unless s.strip.empty?} dal_array else - SiSU_Screen::Ansi.new(@md.cmd,'no footnote conversion done, problem with source file','to override use --convert=footnote-force (this is not advised)').warn if @cmd !~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'*WARN* no footnote conversion done, problem with source file','to override use --convert=footnote-force (this is not advised)').warn if @cmd !~/q/ '' end end def read_fnm dal=[] - dal=if FileTest.file?(@fnm); File.open(@fnm){ |f| dal=Marshal.load(f)} - else SiSU_Convert_footnotes::Source.new(@opt).create_dal #watch - end + dal=(FileTest.file?(@fnm)) \ + ? (File.open(@fnm){ |f| dal=Marshal.load(f)}) + : (SiSU_ConvertFootnotes::Source.new(@opt).create_dal) #watch end end class Output def initialize(md,data) @md,@data=md,data - @my_make=SiSU_Env::Create_file.new(@md.cmd,@md.fns) - dir=SiSU_Env::Info_env.new(@md.fns) + @my_make=SiSU_Env::CreateFile.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) @hard="#{Dir.pwd}/#{@md.fns}.fn" end def hard_output @@ -167,10 +171,10 @@ module SiSU_Convert_footnotes def initialize(md,data) @md,@data=md,data @@word_mode=[] - @env=SiSU_Env::Info_env.new(@md.fns) - @skin=SiSU_Env::Info_skin.new(@md) - l=SiSU_Env::Standardise_language.new.file_to_language(@md.fns) - @language=l[:l] + @env=SiSU_Env::InfoEnv.new(@md.fns) + @skin=SiSU_Env::InfoSkin.new(@md) + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + @language=l[:n] @translate=SiSU_Translate::Source.new(@md,@language) end def reset @@ -183,20 +187,20 @@ module SiSU_Convert_footnotes def song reset data=@data - @metafile="#{@env.path.dal}/#{@md.fns}.meta" - my_make_source_file=SiSU_Env::Create_file.new(@md.cmd,@md.fns) + @metafile="#{@env.processing_path.dal}/#{@md.fns}.meta" + my_make_source_file=SiSU_Env::CreateFile.new(@md.fns) data=data.join.split("\n\n") data_new=[] data.each do |x| - data_new << if x =~ /\n\n/m; x.split(/\n\n+/) - else x - end + data_new << (x =~ /\n\n/m) \ + ? (x.split(/\n\n+/)) + : x end data=data_new.flatten - data=SiSU_Convert_footnotes::Make.new(@md,data).substitutions_and_insertions? - data=SiSU_Convert_footnotes::Make.new(@md,data).character_check - data=SiSU_Convert_footnotes::Make.new(@md,data).endnotes - SiSU_Convert_footnotes::Output.new(@md,data).hard_output + data=SiSU_ConvertFootnotes::Make.new(@md,data).substitutions_and_insertions? + data=SiSU_ConvertFootnotes::Make.new(@md,data).character_check + data=SiSU_ConvertFootnotes::Make.new(@md,data).endnotes + SiSU_ConvertFootnotes::Output.new(@md,data).hard_output reset data end @@ -216,7 +220,6 @@ module SiSU_Convert_footnotes tuned_file end def character_check - require 'iconv' reset data=@data @tuned_file=[] @@ -276,29 +279,29 @@ module SiSU_Convert_footnotes case para when /^\s*<:insert1>\s*$/ para=[] - ins.insert1.split(/\n\n/).each{|x| para << x } + ins.insert1.split(/\n\n/).each {|x| para << x } when /^\s*<:insert2>\s*$/ para=[] - ins.insert2.split(/\n\n/).each{|x| para << x } + ins.insert2.split(/\n\n/).each {|x| para << x } when /^\s*<:insert3>\s*$/ para=[] - ins.insert3.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert3.split(/\n\n/).each {|x| para << x << "\n"} para=ins.insert3 when /^\s*<:insert4>\s*$/ para=[] - ins.insert4.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert4.split(/\n\n/).each {|x| para << x << "\n"} para=ins.insert4 when /^\s*<:insert5>\s*$/ para=[] - ins.insert5.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert5.split(/\n\n/).each {|x| para << x << "\n"} when /^\s*<:insert6>\s*$/ para=[] - ins.insert6.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert6.split(/\n\n/).each {|x| para << x << "\n"} when /^\s*<:insert7>\s*$/ para=[] - ins.insert7.split(/\n\n/).each{|x| para << x << "\n"} + ins.insert7.split(/\n\n/).each {|x| para << x << "\n"} end - para.each{|x| tuned_file << x } + para.each {|x| tuned_file << x } else tuned_file << para end tuned_file.compact! @@ -349,7 +352,7 @@ module SiSU_Convert_footnotes end def set_heading_top #% make sure no false positives unless @md.set_heading_top - puts "\tdocument contains no top level heading, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\tdocument contains no top level heading, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ data=@data @tuned_file=[] data.each do |para| @@ -357,9 +360,9 @@ module SiSU_Convert_footnotes if para !~/^(?:@\S+:|0~\S+)\s/m \ and para !~/\A\s*\Z/m @md.set_heading_top=true - head=if @md.title.full ; ":A~ #{@md.title.full}" - else ':A~ [no title provided]' - end + head=(@md.title.full) \ + ? (":A~ #{@md.title.full}") + : (':A~ [no title provided]') @tuned_file << head end end @@ -370,7 +373,7 @@ module SiSU_Convert_footnotes end def set_heading_seg #% make sure no false positives unless @md.set_heading_seg - puts "\tdocument contains no segment level, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\tdocument contains no segment level, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ data=@data @tuned_file=[] data.each do |para| @@ -379,9 +382,9 @@ module SiSU_Convert_footnotes and para !~/\A\s*\Z/m \ and para !~/<:p[bn]>/ @md.set_heading_seg=true - head=if @md.title.full ; "1~seg [#{@md.title.full}]" - else '1~seg [segment]' - end + head=(@md.title.full) \ + ? ("1~seg [#{@md.title.full}]") + : ('1~seg [segment]') @tuned_file << head end end @@ -392,7 +395,7 @@ module SiSU_Convert_footnotes end def set_header_title #% make sure no false positives unless @md.set_header_title - puts "\t no document title provided, (will have to manufacture one)" if @md.cmd =~/[MV]/ + puts "\t no document title provided, (will have to manufacture one)" if @md.opt.cmd =~/[MV]/ data=@data @tuned_file=[] data.each do |para| @@ -419,12 +422,12 @@ module SiSU_Convert_footnotes when /~\{\s+.+?\}~/ # auto-numbered endnotes <!e!> <!e_!> --> para.gsub!(/\s*\}~/,' }~') # required 2003w31 @word_mode=para.scan(/\S+/) - word_mode=SiSU_Convert_footnotes::Make.new(@md,@word_mode).endnote_call_number + word_mode=SiSU_ConvertFootnotes::Make.new(@md,@word_mode).endnote_call_number para=word_mode.join(' ') endnote_ref+=1 when /~\^(?:\s|$)|<:e>/ #%Note inserts endnotes previously gathered from /^(<!e[:_]!>|[-~]\{{3})/ (in earlier loop) word_mode=para.scan(/\S+/) - word_mode=SiSU_Convert_footnotes::Make.new(@md,word_mode).endnote_call_number + word_mode=SiSU_ConvertFootnotes::Make.new(@md,word_mode).endnote_call_number para=word_mode.join(' ') endnote_ref+=1 end @@ -469,3 +472,5 @@ module SiSU_Convert_footnotes end end __END__ +@particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) +dal_array=@particulars.dal_array # dal file drawn here diff --git a/lib/sisu/v2/sst_from_xml.rb b/lib/sisu/v4/sst_from_xml.rb index b41934d8..ab55f0de 100644 --- a/lib/sisu/v2/sst_from_xml.rb +++ b/lib/sisu/v4/sst_from_xml.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,15 +56,15 @@ (master document) =end -module SiSU_sst_from_xml - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_sstFromXML + require_relative 'sysenv' # sysenv.rb class Convert require 'rexml/document' include REXML def initialize(opt) @opt=opt @sisu,@sisu_base=[],[] - @ver=SiSU_Env::Info_version.instance.get_version + @ver=SiSU_Env::InfoVersion.instance.get_version end def tell(filename,type) SiSU_Screen::Ansi.new(@opt.cmd,"XML #{type} to SiSU sst","#{filename} --> #{filename}.sst").green_hi_blue diff --git a/lib/sisu/v2/sst_identify_markup.rb b/lib/sisu/v4/sst_identify_markup.rb index a6f2a550..012475be 100644 --- a/lib/sisu/v2/sst_identify_markup.rb +++ b/lib/sisu/v4/sst_identify_markup.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,7 +58,7 @@ =end module SiSU_Markup - class Markup_inform + class MarkupInform attr_accessor :version def initialize(version,message,declared_markup='',declared_type='') @version,@message,@declared_markup,@declared_type=version,message,declared_markup,declared_type @@ -77,10 +76,10 @@ module SiSU_Markup @declared_type end def history - Markup_history.new(@version).query + MarkupHistory.new(@version).query end end - class Markup_identify + class MarkupIdentify def initialize(opt) @opt=opt @description='This is a script attempts to identify the version of markup used in SiSU (and provides information on changes in markup)' @@ -121,14 +120,14 @@ WOK if @flag_2_0 \ or y =~/^@make:|^@classify|^\s\s?:[a-z_-]+?:\s+\S/ version=2.0.to_f - markup=Markup_inform.new(version,'2.0' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'2.0' + oldlinks,@declared_markup,@declared_type) @flag_2_0=true break end unless @flag_38 if (y =~/^:?A~/ and f =~/(?:\.sst|\.ssm|\.ssi)/) version='0.38' - markup=Markup_inform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type) @flag_38=true end end @@ -136,14 +135,14 @@ WOK if @flag_1_0 \ or y =~/^=\{.+?\}\s*$/ version='0.69' - markup=Markup_inform.new(version,'0.69' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.69' + oldlinks,@declared_markup,@declared_type) @flag_1_0=true break end if @flag_66 \ or y =~/[a-z+][:;]\{.+?\}[:;][a-z+]/ version='0.66' - markup=Markup_inform.new(version,'0.66' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.66' + oldlinks,@declared_markup,@declared_type) @flag_66=true break end @@ -162,26 +161,26 @@ WOK if @flag_57 \ or (y =~/^:?A~\?? @title/ and f =~/(?:\.sst|\.ssm|\.ssi)/) version='0.57' - markup=Markup_inform.new(version,'0.57' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.57' + oldlinks,@declared_markup,@declared_type) @flag_57=true break end if @flag_38 \ or (y =~/^:?A~/ and f =~/(?:\.sst|\.ssm|\.ssi)/) version='0.38' - markup=Markup_inform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type) @flag_38=true break if i >= 200 if y =~ /(?:~{\*+|~\[\*|~\[\+)\s/ version='0.42' - markup=Markup_inform.new(version,'0.42' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.42' + oldlinks,@declared_markup,@declared_type) break end end if (y =~/^1~/ and f =~/(?:\.sst|\.ssm|\.ssi)/) \ and not @flag_38 version='0.37' - markup=Markup_inform.new(version,'0.37 is substantially 0.16 - 0.36 markup with new file-extension' + oldlinks,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.37 is substantially 0.16 - 0.36 markup with new file-extension' + oldlinks,@declared_markup,@declared_type) break end if y =~/^1~/ \ @@ -193,31 +192,31 @@ WOK " (change file extension from .#{t}#{n} to .ssm)" else " (change file extension from .#{t}#{n} to .sst)" end - markup=Markup_inform.new(version,'0.16 - 0.36' + instruct + links,@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.16 - 0.36' + instruct + links,@declared_markup,@declared_type) break end if y =~/^0\{~/ \ and not @flag_38 version='0.1' - markup=Markup_inform.new(version,'0.1 - 0.15',@declared_markup,@declared_type) + markup=MarkupInform.new(version,'0.1 - 0.15',@declared_markup,@declared_type) break end if y =~/^0\{{3}/ \ and not @flag_38 - markup=Markup_inform.new('circa. 1997','old, check date',@declared_markup,@declared_type) + markup=MarkupInform.new('circa. 1997','old, check date',@declared_markup,@declared_type) break end markup='Not a recognised file type ' end end markup - else Markup_history.new(@opt).help_query + else MarkupHistory.new(@opt).help_query end end def determine_markup_version if @opt.fns.nil? \ or @opt.fns.empty? - Markup_history.new(@opt).help_identify + MarkupHistory.new(@opt).help_identify end if File.exist?(@opt.fns) if @opt.fns =~/\.(?:sst|ssm|ssi|s[123i]|r[123])/ @@ -237,9 +236,9 @@ WOK end else puts 'file not found: ' + @opt.fns end - if defined? markup.version; markup.version - else 'markup type/version not determined' - end + (defined? markup.version) \ + ? markup.version + : 'markup type/version not determined' end def markup_version? if @opt.fns.empty? @@ -251,10 +250,18 @@ WOK end end end - class Markup_history + class MarkupHistory def initialize(opt) @opt=opt end + def sisu_3_0 + <<WOK + SiSU 3.0 same as 2.0, apart from change to headers + + see document markup samples, and sisu --help headers + +WOK + end def sisu_2_0 <<WOK SiSU 2.0 same as 1.0, apart from the changing of headers and the addition of a monospace tag @@ -427,7 +434,9 @@ WOK tell=if @opt.mod.inspect =~/--query/ tell=case @opt.mod.inspect when /history/ - "#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}\n#{sisu_0_37}\n#{sisu_0_16}\n#{sisu_0_1}" + "#{sisu_3_0}#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}\n#{sisu_0_37}\n#{sisu_0_16}\n#{sisu_0_1}" + when /3.0/ + "#{sisu_3_0}#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}" when /2.0/ "#{sisu_2_0}#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}" when /1.0/ @@ -470,5 +479,5 @@ end puts "SiSU files:" puts f f.each do |x| - SiSU_Markup::Markup_identify.new(x).markup_version? + SiSU_Markup::MarkupIdentify.new(x).markup_version? end diff --git a/lib/sisu/v2/sst_to_s_xml_sax.rb b/lib/sisu/v4/sst_to_s_xml_sax.rb index 25dfe927..cc08be70 100644 --- a/lib/sisu/v2/sst_to_s_xml_sax.rb +++ b/lib/sisu/v4/sst_to_s_xml_sax.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,22 +55,22 @@ ** Description: simple xml representation (sax style) =end -module SiSU_simple_xml_model_sax - require "#{SiSU_lib}/particulars" # particulars.rb +module SiSU_SimpleXML_ModelSax + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/dal_doc_str" # dal_doc_str.rb - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge - require "#{SiSU_lib}/shared_sem" # shared_sem.rb - require "#{SiSU_lib}/xml_format" # xml_format.rb - include SiSU_XML_format - require "#{SiSU_lib}/rexml" # rexml.rb + require_relative 'dal_doc_str' # dal_doc_str.rb + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge + require_relative 'shared_sem' # shared_sem.rb + require_relative 'xml_format' # xml_format.rb + include SiSU_XML_Format + require_relative 'rexml' # rexml.rb include SiSU_Rexml @@alt_id_count,@@tablehead,@@number_of_cols=0,0,0 @@tablefoot='' @@ -79,7 +78,7 @@ module SiSU_simple_xml_model_sax @@fns=nil def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_env_md(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_env_md(opt) end def read begin @@ -100,8 +99,11 @@ module SiSU_simple_xml_model_sax @fns_array=if @@fns_array.empty?; read_fnm else @@fns_array.dup #check end - SiSU_simple_xml_model_sax::Convert::Songsheet.new(@fns_array,@particulars).songsheet - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + SiSU_SimpleXML_ModelSax::Convert::Songsheet.new(@fns_array,@particulars).songsheet + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure #file closed in songsheet end end @@ -109,7 +111,7 @@ module SiSU_simple_xml_model_sax dal=[] if FileTest.file?("#{Dir.pwd}/#{@opt.fns}") dal=IO.readlines("#{Dir.pwd}/#{@opt.fns}","\n\n") - else puts 'Error' + else STDERR.puts 'Error' end end private @@ -119,28 +121,31 @@ module SiSU_simple_xml_model_sax end def songsheet begin - SiSU_simple_xml_model_sax::Convert::Scroll.new(@data,@particulars).songsheet - SiSU_simple_xml_model_sax::Convert::Tidy.new(@md,@env).xml if @md.cmd =~/[vVM]/ # test wellformedness, comment out when not in use - SiSU_Rexml::Rexml.new(@md,@md.fn[:sxs]).xml if @md.cmd =~/M/ # test rexml parsing, comment out when not in use #debug - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + SiSU_SimpleXML_ModelSax::Convert::Scroll.new(@data,@particulars).songsheet + SiSU_SimpleXML_ModelSax::Convert::Tidy.new(@md,@env).xml if @md.opt.cmd =~/[vVM]/ # test wellformedness, comment out when not in use + SiSU_Rexml::Rexml.new(@md,@md.fn[:sxs]).xml if @md.opt.cmd =~/M/ # test rexml parsing, comment out when not in use #debug + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end end class Scroll - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - require "#{SiSU_lib}/css" # css.rb - include SiSU_text_utils - @@xml={ :body=>[],:open=>[],:close=>[],:head=>[] } + require_relative 'shared_txt' # shared_txt.rb + require_relative 'css' # css.rb + include SiSU_TextUtils + @@xml={ body: [], open: [], close: [], head: [] } def initialize(data='',particulars='') @data,@env,@md=data,particulars.env,particulars.md - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @regx=/^(?:#{Mx[:mk_o]}:p[bn]#{Mx[:mk_c]}\s*)?(?:#{Mx[:lv_o]}[1-9]:(\S*)#{Mx[:lv_c]})?(.+)/ @tab="\t" if @md - @trans=SiSU_XML_munge::Trans.new(@md) + @trans=SiSU_XML_Munge::Trans.new(@md) end - @sys=SiSU_Env::System_call.new + @sys=SiSU_Env::SystemCall.new end def songsheet pre @@ -196,7 +201,7 @@ WOK embedded_endnotes(para) if para[@regx] paragraph="#{para[@regx,2]}" - util=SiSU_text_utils::Wrap.new(paragraph,70) + util=SiSU_TextUtils::Wrap.new(paragraph,70) wrapped=util.line_wrap end @@xml[:body] << "#{@tab*0}<object>" if para[@regx] @@ -209,6 +214,15 @@ WOK @@xml[:body] << "#{@tab*0}</object>" << "\n" if para[@regx] @endnotes=[] end + def block_structure(para='') + para.gsub!(/<:block(?:-end)?>/,'') + para.strip! + @@xml[:body] << %{#{@tab*0}<object>} + @@xml[:body] << %{#{@tab*1}<text class="block">#{@tab*1}\n} + @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n} + @@xml[:body] << %{#{@tab*1}</text>\n} + @@xml[:body] << "#{@tab*0}</object>" + end def group_structure(para='') para.gsub!(/<:group(?:-end)?>/,'') para.strip! @@ -253,14 +267,14 @@ WOK end def markup data=[] - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) xml_sc(@md) @endnotes,@level,@cont,@copen,@xml_contents_close=[],[],[],[],[] @rcdc=false (0..6).each { |x| @cont[x]=@level[x]=false } (4..6).each { |x| @xml_contents_close[x]='' } @data.each do |para| - data << SiSU_document_structure_extract::Structure.new(@md,para).structure #takes on Mx marks + data << SiSU_DAL_DocumentStructureExtract::Structure.new(@md,para).structure #takes on Mx marks end data.each do |para| if para !~/^\s*(?:%+ |<:code>)/ @@ -268,14 +282,14 @@ WOK para=@trans.xml_semantic_tags(para) end if para =~/[:;]\{|\}[:;]/ - para=SiSU_sem::Tags.new(para,@md).rm.all + para=SiSU_Sem::Tags.new(para,@md).rm.all end end para=@trans.markup_light(para) @trans.char_enc.utf8(para) if @sys.locale =~/utf-?8/i #% utf8 para.gsub!(/^@(\S+?):/,"#{Mx[:lv_o]}@\\1#{Mx[:lv_c]}") if para =~/\A#{Mx[:lv_o]}@(\S+?)#{Mx[:lv_c]}\s*(.+?)\Z/m # for headers - d_meta=SiSU_text_utils::Header_scan.new(@md,para).meta + d_meta=SiSU_TextUtils::HeaderScan.new(@md,para).meta if d_meta; xml_head(d_meta) end end @@ -285,9 +299,9 @@ WOK @rcdc=true end if para !~/(^@\S+?:|^\s*$|<ENDNOTES>|<EOF>)/ - @sto=SiSU_text_parts::Split_text_object.new(@md,para).lev_segname_para + @sto=SiSU_text_parts::SplitTextObject.new(@md,para).lev_segname_para unless @rcdc - format_scroll=SiSU_XML_format::Format_scroll.new(@md,@sto.text) if @sto.format =~/i[1-9]|ordinary/ + format_scroll=SiSU_XML_Format::FormatScroll.new(@md,@sto.text) if @sto.format =~/i[1-9]|ordinary/ case @sto.format when /^(1):(\S*)/ xml_clean(para) @@ -301,7 +315,7 @@ WOK xml_clean(para) xml_structure(para,$1,$2) para=@sto.lev_para_ocn.heading_body3 - when /^(4):(\S*)/ # work on see Split_text_object + when /^(4):(\S*)/ # work on see SplitTextObject xml_clean(para) xml_structure(para,$1,$2) para=@sto.lev_para_ocn.heading_body4 @@ -323,7 +337,7 @@ WOK para.gsub!(/>/,'>') para=code_structure(para) elsif para =~/<!Th?.+/ # tables come as single block #work area 2005w13 - table=SiSU_Tables::Table_xml.new(para) + table=SiSU_Tables::TableXML.new(para) para=table.table_split para=table_structure(para) else xml_structure(para,nil,nil) @@ -336,16 +350,16 @@ WOK if para =~/.*<:#>.*$/ para=case para when /<:i1>/ - format_text=Format_text_object.new(para,'') + format_text=FormatTextObject.new(para,'') format_text.scr_inden_ocn_e_no_paranum when /<:i2>/ - format_text=Format_text_object.new(para,'') + format_text=FormatTextObject.new(para,'') format_text.scr_inden_ocn_e_no_paranum end end if para =~/<:center>/ one,two=/(.*)<:center>(.*)/.match(para)[1,2] - format_text=Format_text_object.new(one,two) + format_text=FormatTextObject.new(one,two) para=format_text.center end end @@ -365,10 +379,10 @@ WOK end end def pre - rdf=SiSU_XML_tags::RDF.new(@md) - dir=SiSU_Env::Info_env.new + rdf=SiSU_XML_Tags::RDF.new(@md) + dir=SiSU_Env::InfoEnv.new @@xml[:head],@@xml[:body]=[],[] - css=SiSU_Env::CSS_select.new(@md).xml_sax + css=SiSU_Env::CSS_Select.new(@md).xml_sax encoding=if @sys.locale =~/utf-?8/i; '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' else '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>' end @@ -411,9 +425,9 @@ WOK end new_file_data=@sisu.join @sisu=new_file_data.scan(/.+/) - SiSU_Env::SiSU_file.new(@md).mkdir - filename_sxm=SiSU_Env::SiSU_file.new(@md,@md.fn[:sxs]).mkfile_pwd - if filename_sxm.class==File + SiSU_Env::FileOp.new(@md).mkdir + filename_sxm=SiSU_Env::FileOp.new(@md,@md.fn[:sxs]).mkfile_pwd + if filename_sxm.is_a?(File) @sisu.each {|para| filename_sxm.puts para} filename_sxm.close else puts 'file not created, is directory writable?' @@ -423,18 +437,18 @@ WOK class Tidy def initialize(md,dir) @md,@env=md,dir - @prog=SiSU_Env::Info_program.new + @prog=SiSU_Env::InfoProgram.new end def xml if @prog.tidy !=false #note values can be other than true - if @md.cmd =~/[VM]/ - SiSU_Screen::Ansi.new(@md.cmd,'invert','Using XML Tidy','check document structure').colorize unless @md.cmd =~/q/ - SiSU_Screen::Ansi.new(@md.cmd,'','','check document structure') - tell.grey_open unless @md.cmd =~/q/ + if @md.opt.cmd =~/[VM]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','Using XML Tidy','check document structure').colorize unless @md.opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'','','check document structure') + tell.grey_open unless @md.opt.cmd =~/q/ tidyfile='/dev/null' #don't want one or screen output, check for alternative flags - tidy =SiSU_Env::System_call.new("#{Dir.pwd}/#{@md.fn[:sxs]}",tidyfile) + tidy =SiSU_Env::SystemCall.new("#{Dir.pwd}/#{@md.fn[:sxs]}",tidyfile) tidy.well_formed? - tell.p_off unless @md.cmd =~/q/ + tell.p_off unless @md.opt.cmd =~/q/ end end end diff --git a/lib/sisu/v4/sysenv.rb b/lib/sisu/v4/sysenv.rb new file mode 100644 index 00000000..c4b364ad --- /dev/null +++ b/lib/sisu/v4/sysenv.rb @@ -0,0 +1,6015 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: system environment, resource control and configuration details + +=end +@@cX=nil +@@current_document=Dir.pwd #nil #'' +@@lang_info=nil +module SiSU_Env + require_relative 'constants' # constants.rb + require 'fileutils' + include FileUtils::Verbose + require 'singleton' + @@noyaml=false + class InfoDate + require 'date' + attr_accessor :dt,:t + def initialize + @dt,@t=Date.today.to_s,Time.now + end + def week + w=@t.strftime('%W') + "#{@t.year}w#{w}" + end + def month + "#{@t.year}#{@t.month}" + end + def year + @t.year + end + def weekonly + @t.strftime('%W') + end + def monthonly + @t.month + end + def year_static + YEAR + end + end + class InfoSystem + require 'rbconfig' + include Singleton + @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@rc,@@sisurc_path,@@ad=ENV['USER'],ENV['HOME'],ENV['HOSTNAME'],ENV['PWD'],Config::CONFIG['sysconfdir'] + '/sisu',Config::CONFIG['host'],Config::CONFIG['arch'],%x{ruby -v}.strip,Config::CONFIG['archdir'],Config::CONFIG['sitearchdir'],Config::CONFIG['bindir'],%x{locale charmap}.strip,nil,nil,{} # %x{ruby -v}.strip # Config::CONFIG['rb_ver'] + out=Config::CONFIG['localstatedir'] + etc=Config::CONFIG['sysconfdir'] + '/sisu' + share=Config::CONFIG['datadir'] + '/sisu' + data=Config::CONFIG['datadir'] + '/doc/sisu' + m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + @stub_pwd ||=@@pwd[m,1] + prcss_dir='_sisu_processing_' + '.' + SiSU_version_dir + prcss_dir_tmp_root="/tmp/#{prcss_dir}" + prcss_dir_stub="#{prcss_dir}/#{@stub_pwd}" + if @@user + tmp_processing="#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" + tmp_processing_individual="#{prcss_dir_tmp_root}/#{@@user}/#{@stub_pwd}" + else #error + tmp_processing=tmp_processing_individual="/tmp/#{prcss_dir_stub}" + end + tmp_processing_home=if @@home \ + and File.writable?("#{@@home}/.") + "#{@@home}/#{prcss_dir_stub}" + else prcss_dir_stub + end + processing_pth=tmp_processing_individual + processing_dir=prcss_dir + processing_git="#{Dir.pwd}/#{Gt[:grotto]}" + user=ENV['USER'] + port_pgsql=if defined? ENV['PGPORT'] \ + and not (ENV['PGPORT'].nil? \ + or ENV['PGPORT'].empty?) \ + and ENV['PGPORT']=~/^\d+$/ + ENV['PGPORT'] + else '5432' + end + IMAGES=:images + SISU_ETC=:sisu_etc + SISU_SHARE=:sisu_share + SAMPLE_DATA_PATH=:sample_data_path + IMAGE_STUB=:image_stub + STYLESHEET_STUB=:stylesheet_stub + IMAGE_LOCAL=:image_local + WEBSERV_PATH=:webserv_path + WEBSERV_MAN=:webserv_man + WEBSERV_PHP=:webserv_php + WEBSERV_CGI=:webserv_cgi + WEBSERV_RSS=:webserv_rss + WEBSERV_SQLITE=:webserv_sqlite + OUTPUT_LOCAL=:output_local + PROCESSING_DIR=:processing_dir + PROCESSING_PATH=:processing_path + PROCESSING_DIR_TMP_ROOT=:processing_dir_tmp_root + PROCESSING_PATH_TMP_BASE=:processing_path_tmp_base + PROCESSING_DAL=:processing_dal + PROCESSING_TUNE=:processing_tune + PROCESSING_LATEX=:processing_latex + PROCESSING_TEXINFO=:processing_texinfo + PROCESSING_LOUT=:processing_lout + PROCESSING_SQLITE=:processing_sqlite + PROCESSING_POSTGRESQL=:processing_postgresql + PROCESSING_ENCODING=:processing_encoding + PROCESSING_GIT=:processing_git + PAPERSIZE=:papersize + #LANGUAGE=:language + #LANGUAGE_CODE=:language_code + MULTILINGUAL=:multilingual + BUNDLE=:bundle + CONCORD_MAX=:concord_max + DIGEST=:digest + WEBSERV_HOST_CGI=:webserv_host_cgi + WEBSERV_PORT_CGI=:webserv_port_cgi + POSTGRESQL_USER=:postgresql_user + POSTGRESQL_PORT=:postgresql_port + SQLITE_USER=:sqlite_user + SQLITE_PATH=:sqlite_path + SQLITE_PORT=:sqlite_port + DEFAULT_DIR={ + IMAGES => '_sisu/image', + SISU_ETC => etc, + SISU_SHARE => share, + SAMPLE_DATA_PATH => data, + IMAGE_STUB => '_sisu/image', + STYLESHEET_STUB => '_sisu/css', + IMAGE_LOCAL => @@pwd + '/_sisu/image', + WEBSERV_PATH => out + '/www', + #WEBSERV_DIR => www, # uncomment for urls... + #WEBSERV_IMAGE => out + '/www/_sisu/image', + WEBSERV_MAN => out + '/www/man', #alter + WEBSERV_PHP => out + '/www/php', + WEBSERV_CGI => '/usr/lib/cgi-bin', + WEBSERV_RSS => out + '/www/feed', + WEBSERV_SQLITE => out + '/www/sqlite', + OUTPUT_LOCAL => @@home + '/sisu_www', + PROCESSING_DIR => processing_dir, + PROCESSING_PATH => processing_pth, + PROCESSING_DIR_TMP_ROOT => prcss_dir_tmp_root, + PROCESSING_PATH_TMP_BASE => processing_pth, + PROCESSING_DAL => 'dal', + PROCESSING_TUNE => 'tune', + PROCESSING_LATEX => 'tex', + PROCESSING_TEXINFO => 'texinfo', + PROCESSING_SQLITE => 'sqlite', + PROCESSING_POSTGRESQL=> 'postgresql', + PROCESSING_ENCODING => 'encoding', + PROCESSING_GIT => processing_git, + #TEXINFO_STUB => 'texinfo', + PAPERSIZE => 'A4', #A4, US_letter, book_b5, book_a5, US_legal + #LANGUAGE => 'English', + #LANGUAGE_CODE => 'en', #change, unecessary duplication though currently used + MULTILINGUAL => false, + BUNDLE => false, + CONCORD_MAX => 260000, + DIGEST => 'sha256', + WEBSERV_HOST_CGI => ' http://localhost', + WEBSERV_PORT_CGI => 8081, #8111,8123,8081 + POSTGRESQL_USER => @@user, #'ralph', # change user !!! + POSTGRESQL_PORT => port_pgsql, + #POSGRESQL_LINKS_PATH => '', + SQLITE_USER => @@user, + SQLITE_PATH => @@user, #?? + SQLITE_PORT => '**', + } + @@default_dir=DEFAULT_DIR + m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + stub_pwd=@@pwd[m,1] + @@rc_path=[ + "#{@@pwd}/.sisu/#{SiSU_version_dir}", + "#{@@pwd}/.sisu", + "#{@@pwd}/_sisu/#{SiSU_version_dir}", + "#{@@pwd}/_sisu", + "#{@@home}/.sisu/#{SiSU_version_dir}", + "#{@@home}/.sisu", + "#{@@sisu_etc}/#{SiSU_version_dir}", + ] + @@ad_path=(stub_pwd !~/^sisupod$/) \ + ? ([ + "#{@@pwd}/.sisu/skin/yml", + "#{@@pwd}/_sisu/skin/yml", + "#{@@home}/.sisu/skin/yml", + "#{@@sisu_etc}/skin/yml", + ]) + : ["#{@@home}/.sisu",@@sisu_etc] + attr_accessor :user,:home,:hostname,:pwd,:host,:arch,:rbver,:dir_arch,:dir_sitearch,:dir_bin,:locale,:webserv_path,:webserv_host_cgi,:webserv_port_cgi,:default_dir,:rc_path,:ad_path + def initialize + @user,@home,@hostname,@pwd,@sisu_etc,@host,@arch,@rbver,@dir_arch,@dir_sitearch,@dir_bin,@locale,@default_dir,@rc_path,@ad_path=\ + @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@default_dir,@@rc_path,@@ad_path + #note rbver is duplicated in InfoVersion + end + end + class Load + def initialize(prog,mandatory=false) + @prog,@mandatory=prog,mandatory + end + def prog + load_prog=false + pp='' + $:.each do |reqpath| + if FileTest.exist?("#{reqpath}/#{@prog}.rb") + load_prog=true + break + end + end + if load_prog \ + and @prog=~/dbi/ + require 'dbi' #revisit + end + if load_prog + require @prog + else + @mandatory \ + ? (SiSU_Screen::Ansi.new(@cmd,"*WARN* module required: #{@prog}").warn) + : (SiSU_Screen::Ansi.new(@cmd,"*WARN* #{@prog} load requested").warn) + end + load_prog + end + def prog? + load_prog=false + $:.each do |reqpath| + if FileTest.exist?("#{reqpath}/#{@prog}.rb"); load_prog=true + break + end + end + load_prog + end + end + class GetInit < InfoSystem + include Singleton + @@noyaml=false + @@rc,@@sisurc_path,@@vz,@@tx=nil,nil,nil,nil + @@ad={ promo: nil, promo_list: nil, flag_promo: false } + attr_accessor :yaml + def initialize + super() + end + def skin + @@vz ||=SiSU_Viz::Skin.new + end + def tex + @@tx ||=SiSU_Viz::TeX.new + end + def sisu_yaml + def rc + unless @@rc + @rc_path.each do |v| + if @@noyaml \ + or FileTest.exist?("#{v}/noyaml") + STDERR.puts "WARNING - YAML loading switched off, to enable delete the file:\n\t#{v}/noyaml\n\n" unless @@noyaml + @@noyaml=true + break + else + f='sisurc.yml' + if FileTest.exist?("#{v}/#{f}") + require 'yaml' + @@sisurc_path="#{v}/#{f}" + @@rc=YAML::load(File::open(@@sisurc_path)) + break + end + unless @@rc + f='sisurc.yaml' + if FileTest.exist?("#{v}/#{f}") + require 'yaml' + @@sisurc_path="#{v}/#{f}" + @@rc=YAML::load(File::open(@@sisurc_path)) + break + end + end + end + end + end + @@rc + end + def rc_path + rc + @@sisurc_path + end + self + end + def ads #WORK AREA + tell_no_yaml='WARNING - YAML loading switched off, to enable delete the file:' + @ad_path.each do |v| + if @@noyaml \ + or FileTest.exist?("#{v}/noyaml") + puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml + @@noyaml=true + break + else + if FileTest.exist?("#{v}/list.yml") + unless @@ad[:promo_list] + require 'yaml' + @@ad[:promo_list] ||= YAML::load(File::open("#{v}/list.yml")) + end + @@ad[:flag_promo]=true + break + end + @@ad[:flag_promo]=false + end + end + @ad_path.each do |v| + if @@noyaml \ + or FileTest.exist?("#{v}/noyaml") + puts tell_no_yaml + "\n\t#{v}/noyaml\n" unless @@noyaml + @@noyaml=true + break + else + if FileTest.exist?("#{v}/promo.yml") + unless @@ad[:promo] + require 'yaml' + @@ad[:promo] ||= YAML::load(File::open("#{v}/promo.yml")) + end + @@ad[:flag_promo]=true + break + end + @@ad[:flag_promo]=false + end + end + @@ad + end + end + class EnvCall + @@rc,@@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=nil,nil,nil,nil,nil,nil,nil + @@ad={} + attr_accessor :rc,:fnn,:fnb,:fnt,:fnv,:fnz,:ad + def initialize(fns='') + super() + @fns=fns + @sys=InfoSystem.instance + @rc=GetInit.instance.sisu_yaml.rc + @ad=GetInit.instance.ads + if @fns \ + and @fns != '' \ + and @fns !=@@fns + @@fns,@@fnn,@@fnb,@@fnt,@@flv,@@fnz=@fns,nil,nil,nil,nil,nil + end + if @fns \ + and @fns != '' #watch + m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm|ssi)$/ + @@fnn ||=@fns[m,1] + @@fnb ||=@fns[m,2] + @@fnt ||=@fns[m,3] + @@flv ||=document_language_versions_found[:f] + unless @@fns =~/\S+?\.txz/ + @@fnz ||=if @@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/; @@fnb + '.ssm.txz' + elsif @@fnb; @@fnb + '.sst.txz' + else '' # e.g. termsheet + end + end + end + @fnn,@fnb,@fnt,@flv,@fnz=@@fnn,@@fnb,@@fnt,@@flv,@@fnz + end + def output_dir_structure + def by? + output_structure=:filename #set default output structure + output_structure=if defined? @rc['output_dir_structure_by'] + output_structure=if (@rc['output_dir_structure_by'] =~/dump/) \ + or ((defined? @rc['output_structure']['dump']) \ + && @rc['output_structure']['dump'] ==true) + :dump + elsif (@rc['output_dir_structure_by'] =~/redirect/) \ + or ((defined? @rc['output_structure']['redirect']) \ + && @rc['output_structure']['redirect'] ==true) + :redirect + elsif (@rc['output_dir_structure_by'] =~/language/) \ + or ((defined? @rc['output_structure']['by_language']) \ + && @rc['output_structure']['by_language'] ==true) + :language + elsif (@rc['output_dir_structure_by'] =~/filetype/) \ + or ((defined? @rc['output_structure']['by_filetype']) \ + && @rc['output_structure']['by_filetype'] ==true) + :filetype + elsif (@rc['output_dir_structure_by'] =~/filename/) \ + or ((defined? @rc['output_structure']['by_filename']) \ + && @rc['output_structure']['by_filename'] ==true) + :filename + else #recheck current default + :language + end + end + end + def dump? + ((by?) ==:dump) \ + ? true + : false + end + def redirect? + ((by?) ==:redirect) \ + ? true + : false + end + def by_language_code? + ((by?) ==:language) \ + ? true + : false + end + def by_filetype? + ((by?) ==:filetype) \ + ? true + : false + end + def by_filename? + ((by?) ==:filename) \ + ? true + : false + end + def multilingual? + by_language_code? + end + self + end + def document_language_versions_found #REVISIT + @fn={} + filename=(@fns =~/\.ssm\.sst$/) \ + ? @fns.gsub(/\.ssm\.sst$/,'.ssm') + : @fns + if filename.is_a?(String) \ + and not filename.empty? + if output_dir_structure.by_language_code? + m=/((.+?)(?:\~\w{2,3})?)\.(sst|ssm)$/ + @fn[:b],@fn[:m],@fn[:t]=filename[m,1],filename[m,2],filename[m,3] + else m=/(.+?)\.(sst|ssm)$/ + @fn[:b]=@fn[:m]=filename[m,1] + @fn[:t]=filename[m,2] + end + end + lng_base=SiSU_Env::InfoEnv.new.language_default_set + lang=SiSU_Env::StandardiseLanguage.new + langs=lang.codes + x=[] + if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}") + n=@fn[:m].gsub(/^.+?\//,'') + n =n + '.' + @fn[:t] + x << { f: "#{@fn[:m]}.#{@fn[:t]}", l: lng_base, n: n } + end + #x << { f: "#{@fns}", l: lng_base } + langs.each do |l| + lng=SiSU_Env::StandardiseLanguage.new(l) + if FileTest.file?("#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") + x << { f: "#{@fn[:m]}~#{lng.code}.#{@fn[:t]}", l: lng.code } + elsif FileTest.file?("#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") + x << { f: "#{@fn[:m]}~#{lng.name}.#{@fn[:t]}", l: lng.code } + end + if FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") + if FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}") + x << { f: "#{lng.code}/#{@fn[:m]}~#{lng.code}.#{@fn[:t]}", l: lng.code } + elsif FileTest.file?("#{lng.code}/#{@fn[:m]}~#{lng.name}.#{@fn[:t]}") + x << { f: "#{lng.code}/#{@fn[:m]}~#{lng.name}.#{@fn[:t]}", l: lng.code } + end + end + if FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") + if FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") + x << { f: "#{lng.code}/#{@fn[:m]}.#{@fn[:t]}", l: lng.code } + elsif FileTest.file?("#{lng.code}/#{@fn[:m]}.#{@fn[:t]}") + x << { f: "#{lng.code}/#{@fn[:m]}.#{@fn[:t]}", l: lng.code } + end + end + end + @fn[:f]=x + @fn + end + def published_manifests?(output_base) + ob=output_base + @fn={} + @m=[] + unless (@fns.nil? \ + or @fns.empty?) + if output_dir_structure.by_language_code? + m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst$)/ + @fn[:b],@fn[:m],@fn[:t]=@fns[m,1],@fns[m,2],@fns[m,3] + else m=/(.+?)\.((?:-|ssm\.)?sst$)/ + @fn[:b]=@fn[:m]=@fns[m,1] + @fn[:t]=@fns[m,2] + end + end + lang=SiSU_Env::StandardiseLanguage.new + langs=lang.codes + x=[] + if FileTest.file?("#{@fn[:m]}.#{@fn[:t]}"); x << "#{@fn[:m]}.#{@fn[:t]}" + end + dir=SiSU_Env::InfoEnv.new(@fns) + @m << { m: 'sisu_manifest.html', l: 'English' } #fix later, default language + langs.each do |l| + lng=SiSU_Env::StandardiseLanguage.new(l) + fns_c="#{@fn[:m]}~#{lng.code}.#{@fn[:t]}" + fns_l="#{@fn[:m]}~#{lng.name}.#{@fn[:t]}" + if FileTest.file?(fns_c) + fn_set_lang=SiSU_Env::StandardiseLanguage.new.file_to_language(fns_c) #reconsider file_to_language + lng=fn_set_lang[:n] + fn=SiSU_Env::EnvCall.new(fns_c).lang(fn_set_lang[:c]) + @m << { m: fn[:manifest], l: lng } + elsif FileTest.file?(fns_l) + fn_set_lang=SiSU_Env::StandardiseLanguage.new.file_to_language(fns_l) #reconsider file_to_language + @fnl=dir.i18n.lang_filename(fn_set_lang[:c]) + fn=SiSU_Env::EnvCall.new(fns_l).lang(fn_set_lang[:c]) + @m << { m: fn[:manifest], l: lng } + end + end + @m=@m.uniq + end + def filename(code,name,suffix) + #d=SiSU_Env::InfoEnv.new(@fns) + #fnl=d.i18n.lang_filename(code) + "#{name}#{suffix}" + #if code + # "#{fnl[:pre]}#{name}#{fnl[:mid]}#{suffix}#{fnl[:post]}" + #else "#{name}#{suffix}" + #end + end + def lang(code) + @fn={ + html: filename(code,'','.html'), + book_index: filename(code,'book_index','.html'), + concordance: filename(code,'concordance','.html'), + sax: filename(code,'sax','.xml'), + dom: filename(code,'dom','.xml'), + docbook: filename(code,'docbook','.xml'), + xhtml: filename(code,'scroll','.xhtml'), + pdf_l: filename(code,'','.pdf'), + pdf_p: filename(code,'','.pdf'), + pdf_l_a4: filename(code,"a4",'.pdf'), + pdf_p_a4: filename(code,"a4",'.pdf'), + pdf_l_a5: filename(code,"a5",'.pdf'), + pdf_p_a5: filename(code,"a5",'.pdf'), + pdf_l_b5: filename(code,"b5",'.pdf'), + pdf_p_b5: filename(code,"b5",'.pdf'), + pdf_l_letter: filename(code,"letter",'.pdf'), + pdf_p_letter: filename(code,"letter",'.pdf'), + pdf_l_legal: filename(code,"legal",'.pdf'), + pdf_p_legal: filename(code,"legal",'.pdf'), + toc: filename(code,'toc','.html'), + doc: filename(code,fnb,'.html'), + index: filename(code,'index','.html'), + po: filename(code,@fns,'.po'), + pot: filename(code,@fns,'.pot'), + odf: filename(code,'','.odt'), + epub: filename(code,'','.epub'), + plain: filename(code,'','.txt'), + qrcode: filename(code,'','.jpg'), + manpage: filename(code,'','.1'), #fix, section number + wiki: filename(code,'wiki','.txt'), + digest: filename(code,'digest','.txt'), + metadata: filename(code,'metadata','.html'), #chk + manifest: filename(code,'manifest','.html'), + oai_pmh: filename(code,'oai_pmh','.xml'), + sitemap: filename(code,'sitemap','.xml'), + sitemap_touch: filename(code,"sitemap_#{fnb}",'.xml'), + sxs: filename(code,fnb,'.sxs.xml'), + sxd: filename(code,fnb,'.sxd.xml'), + sxn: filename(code,fnb,'.sxn.xml'), + sisupod: filename(nil,@fnz,''), + book_idx_html: filename(code,'book_index','.html'), + book_idx_epub: filename(code,'book_index','.xhtml'), + epub_concord: filename(code,'concordance','.xhtml'), + } + @fn + end + end + class SystemCall + @@locale_flag=false + def initialize(input='',output='',cmd='') + @input,@output,@cmd=input,output,cmd + @prog=SiSU_Env::InfoProgram.new + @sys=InfoSystem.instance + end + def program_found?(program) + found=`which #{program}` #`whereis #{program}` + (found =~/bin\/#{program}\b/) ? true : false + end + def locale #locales utf8 or other + unless @@locale_flag + @@locale_flag=true + end + @sys.locale + end + def file_encoding(filename,cmd='') #file encoding + program='file' + fnsp=SiSU_Env::InfoEnv.new(filename).source_file_with_path + if program_found?(program) + encoding=%x{file -L #{fnsp}}.strip + encoding=encoding.gsub(/#{fnsp}:(\s+|$)/,'') + encoding=if encoding \ + and not encoding.empty? + encoding + else 'UTF-8 assumed, encoding undetermined' + end + puts encoding if cmd =~/[VM]/ + encoding + else encoding='UTF-8 assumed, file encoding check program unavailable' + end + end + def wc #word count + program='wc' + if program_found?(program) \ + and locale !~/utf-?8/i + true + else + program_ref="(not available)" unless program_found?(program) + program_ref="(UTF-8)" if locale =~/utf-?8/i + false + end + end + def rcs #rcs for document markup data + program='rcs' + program_ref="\n\t\tdocument version information requested" + if program_found?(program); true + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def cvs #cvs for document markup data + program='cvs' + program_ref="\n\t\tdocument version information requested" + if program_found?(program); true + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def openssl #openssl for digests + program='openssl' + program_ref="\n\t\tused to generate requested source document identification digest" + if program_found?(program); true + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def md5(filename) #md5 dgst + program='openssl' + program_ref="\n\t\tmd5 digest requested" + if program_found?(program) + pwd=Dir.pwd + Dir.chdir(File.dirname(filename)) + dgst=%x{openssl dgst -md5 #{File.basename(filename)}}.strip #use file name without file path + Dir.chdir(pwd) + dgst.scan(/\S+/) + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def sha256(filename) #sha dgst + program='openssl' + program_ref="\n\t\tsha digest requested" + if program_found?(program) + pwd=Dir.pwd + Dir.chdir(File.dirname(filename)) + dgst=%x{openssl dgst -sha256 #{File.basename(filename)}}.strip #use file name without file path + Dir.chdir(pwd) + dgst.scan(/\S+/) + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def psql #psql + program='psql' + program_ref="\n\t\tpsql requested" + if program_found?(program); true + else STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" #if @cmd =~/v/ + false + end + end + def create_pg_db(dbname_stub=nil) #createdb + unless dbname_stub + @pwd ||=Dir.pwd + m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + dbname_stub=@pwd[m,1] + end + program='createdb' + db_name="#{Db[:name_prefix]}#{dbname_stub}" + program_ref="\n\t\tcreatedb dbname #{db_name} #for postgresql database creation" + (program_found?(program)) \ + ? system("#{program} #{dbname_name}") + : (STDERR.puts "\t*WARN* #{program} is not available #{program_ref}") + end + def relaxng(cmd='') #trang - convert between different schema languages for XML + program='trang' + program_ref="\n\t\tsee <http://www.thaiopensource.com/relaxng/trang.html>" + (program_found?(program)) \ + ? system("#{program} #{@input} #{@output}") + : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" if cmd =~/V/) + end + def qrencode #qrcode - for generating QR code + program='qrencode' + program_ref="\n\t\tsee <http://megaui.net/fukuchi/works/qrencode/index.en.html>" + found=(program_found?(program)) ? true : false + found \ + ? (system(%{ + echo "#{@input}" | #{program} -s 3 -o #{@output} + })) + : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" if cmd =~/V/) + #found + end + def imagemagick #imagemagick is a image manipulation program + program='identify' + program_ref="\n\t\tsee <http://www.imagemagick.org/>" + found=(program_found?(program)) ? true : false + STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" unless found + found + end + def graphicksmagick #graphicsmagick is a image manipulation program + program='gm' + program_ref="\n\t\tsee <http://www.graphicsmagick.org/>" + found=(program_found?(program)) ? true : false + STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}" unless found + found + end + def well_formed? #tidy - check for well formed xml xhtml etc. + program=@prog.tidy + program_ref="\n\t\tsee <http://tidy.sourceforge.net/>" + (program_found?(program)) \ + ? system("#{@prog.tidy} -xml #{@input} > #{@output}") + : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}") + end + def tex2pdf_engine + prog=['xetex','xelatex','pdflatex','pdfetex','pdftex'] + @pdfetex_flag=false + @cmd ||='' + @texpdf=nil + prog.each do |program| + if program_found?(program) + @texpdf=program if program =~/xetex|xelatex|pdftex|pdflatex/ + @pdfetex_flag=true + break + end + end + if @pdfetex_flag==false + @texpdf=prog.join(', ') + end + @texpdf + end + def latex2pdf(md,papersize='a4') #convert from latex to pdf + tell=if @cmd =~/[MV]/ + '' + elsif @cmd =~/[v]/ + %q{2>&1 | grep -v ' WARNING '} + else %q{2>&1 | grep -v '$'} + end + mode='batchmode' #mode='nonstopmode' + program_ref="\n\t\tSee http://www.tug.org/applications/pdftex/\n\t\tOn Debian this is is included in tetex-extra" + texpdf=tex2pdf_engine + if @pdfetex_flag + texpdf_cmd=case texpdf + when /xetex/ + %{#{texpdf} -interaction=#{mode} -fmt=xelatex -papersize="#{papersize}" #{@input} #{tell}\n} + when /xelatex/ + %{#{texpdf} -interaction=#{mode} -papersize="#{papersize}" #{@input} #{tell}\n} + when /pdftex/ + "#{texpdf} -interaction=#{mode} -fmt=pdflatex #{@input} #{tell}\n" + when /pdflatex/ + "#{texpdf} -interaction=#{mode} #{@input} #{tell}\n" + end + system(texpdf_cmd) + else STDERR.puts "\t*WARN* none of the following programs are installed: #{program[0]}, #{program[1]}, #{program[2]} is installed. #{program_ref}" + end + end + def makeinfo #texinfo + program='makeinfo' + options='' #'--force' #'' + program_ref="\n\t\tsee http://www.gnu.org/software/texinfo/" + (program_found?(program)) \ + ? system("#{program} #{options} #{@input}\n") + : (STDERR.puts "\t*WARN* #{program} is not installed #{program_ref}") + end + def scp + program='scp' + puts "scp -Cr #{@input} #{@output}" if @cmd =~/[vVM]/ + puts "scp disabled" + #(program_found?(program)) \ + #? system("scp -Cr #{@input} #{@output}") \ + #: (STDERR.puts "\t*WARN* #{program} not found" ) + end + def rsync(action='',chdir=nil) + program='rsync' + if program_found?(program) + vb=if @cmd =~/q/; 'q' + elsif @cmd =~/v/; 'v' + else '' + end + msg='' + msg=" && echo 'OK: #{@input} -> #{@output}'" unless @cmd =~/q/ + rsync_cmd="rsync -az#{vb} #{action} #{@input} #{@output}" + puts rsync_cmd if @cmd =~/[vVM]/ + dir_change,dir_return='','' + if chdir \ + && chdir != Dir.pwd + dir_change=Dir.chdir(chdir) + dir_return=Dir.pwd + end + dir_change + system(" + #{rsync_cmd} #{msg} + ") + dir_return + else STDERR.puts "\t*WARN* #{program} not found" + end + end + def rm + if @cmd =~/^-Z[mMvVq]*$/; FileUtils::rm_rf(@input) + elsif @cmd =~/V/; FileUtils::rm(@input) + elsif @cmd !~/q/; FileUtils::rm(@input) + elsif @cmd =~/q/; FileUtils::rm(@input) + else STDERR.puts "\t*WARN* operation ignored" + end + end + end + class StandardiseLanguage + require_relative 'i18n' # i18n.rb + def initialize(l='') + @language=(l.nil? || l.empty?) \ + ? SiSU_Env::InfoEnv.new.language_default_set + : l + @r=%{(?:#{Px[:lng_lst_rgx]})} + @lang_info=SiSU_i18n::Languages.new + end + def lang_lst # from i18n + @@lang_info ||=@lang_info.language.list + end + def lang(l='') # from i18n + x=if l =~/^#{@r}$/ + @lang_info.language.list[l] + elsif @language =~/^#{@r}$/ + @lang_info.language.list[@language] + else nil + end + end + def language + lng={} + case @language + when /^am$|Amharic/i; d,c,l=false,lang_lst['am'][:c], lang_lst['am'][:n] + when /^bg$|Bulgarian/i; d,c,l=false,lang_lst['bg'][:c], lang_lst['bg'][:n] + when /^bn$|Bengali/i; d,c,l=false,lang_lst['bn'][:c], lang_lst['bn'][:n] + when /^br$|Breton/i; d,c,l=false,lang_lst['br'][:c], lang_lst['br'][:n] + when /^ca$|Catalan/i; d,c,l=false,lang_lst['ca'][:c], lang_lst['ca'][:n] + when /^cs$|Czech/i; d,c,l=false,lang_lst['cs'][:c], lang_lst['cs'][:n] + when /^cy$|Welsh/i; d,c,l=false,lang_lst['cy'][:c], lang_lst['cy'][:n] + when /^da$|Danish|Dansk/i; d,c,l=false,lang_lst['da'][:c], lang_lst['da'][:n] + when /^de$|German/i; d,c,l=false,lang_lst['de'][:c], lang_lst['de'][:n] + when /^el$|Greek/i; d,c,l=false,lang_lst['el'][:c], lang_lst['el'][:n] + when /^en$|English/i; d,c,l=false,lang_lst['en'][:c], lang_lst['en'][:n] + when /^eo$|Esperanto/i; d,c,l=false,lang_lst['eo'][:c], lang_lst['eo'][:n] + when /^es$|Spanish|Espanol/i; d,c,l=false,lang_lst['es'][:c], lang_lst['es'][:n] + when /^et$|Estonian/i; d,c,l=false,lang_lst['et'][:c], lang_lst['et'][:n] + when /^eu$|Basque/i; d,c,l=false,lang_lst['eu'][:c], lang_lst['eu'][:n] + when /^fi$|Finnish|Finsk|Suomi/i; d,c,l=false,lang_lst['fi'][:c], lang_lst['fi'][:n] + when /^fr$|French|Francais/i; d,c,l=false,lang_lst['fr'][:c], lang_lst['fr'][:n] + when /^ga$|Irish/i; d,c,l=false,lang_lst['ga'][:c], lang_lst['ga'][:n] + when /^gl$|Galician/i; d,c,l=false,lang_lst['gl'][:c], lang_lst['gl'][:n] + when /^he$|Hebrew/i; d,c,l=false,lang_lst['he'][:c], lang_lst['he'][:n] + when /^hi$|Hindi/i; d,c,l=false,lang_lst['hi'][:c], lang_lst['hi'][:n] + when /^hr$|Croatian/i; d,c,l=false,lang_lst['hr'][:c], lang_lst['hr'][:n] + when /^hy$|Armenian/i; d,c,l=false,lang_lst['hy'][:c], lang_lst['hy'][:n] + when /^ia$|Interlingua/i; d,c,l=false,lang_lst['ia'][:c], lang_lst['ia'][:n] + when /^is$|Icelandic/i; d,c,l=false,lang_lst['is'][:c], lang_lst['is'][:n] + when /^it$|Italian/i; d,c,l=false,lang_lst['it'][:c], lang_lst['it'][:n] + when /^la$|Latin/i; d,c,l=false,lang_lst['la'][:c], lang_lst['la'][:n] + when /^lo$|Lao/i; d,c,l=false,lang_lst['lo'][:c], lang_lst['lo'][:n] + when /^lt$|Lithuanian/i; d,c,l=false,lang_lst['lt'][:c], lang_lst['lt'][:n] + when /^lv$|Latvian/i; d,c,l=false,lang_lst['lv'][:c], lang_lst['lv'][:n] + when /^ml$|Malayalam/i; d,c,l=false,lang_lst['ml'][:c], lang_lst['ml'][:n] + when /^mr$|Marathi/i; d,c,l=false,lang_lst['mr'][:c], lang_lst['mr'][:n] + when /^nl$|Dutch/i; d,c,l=false,lang_lst['nl'][:c], lang_lst['nl'][:n] + when /^no$|Norwegian|Norsk/i; d,c,l=false,lang_lst['no'][:c], lang_lst['no'][:n] + when /^nn$|Norwegian Nynorsk/i; d,c,l=false,lang_lst['nn'][:c], lang_lst['nn'][:n] + when /^oc$|Occitan/i; d,c,l=false,lang_lst['oc'][:c], lang_lst['oc'][:n] + when /^pl$|Polish/i; d,c,l=false,lang_lst['pl'][:c], lang_lst['pl'][:n] + when /^pt$|Portuguese/i; d,c,l=false,lang_lst['pt'][:c], lang_lst['pt'][:n] + when /^pt_BR$|Portuguese Brazil/i; d,c,l=false,lang_lst['pt_BR'][:c], lang_lst['pt_BR'][:n] + when /^ro$|Romanian/i; d,c,l=false,lang_lst['ro'][:c], lang_lst['ro'][:n] + when /^ru$|Russian/i; d,c,l=false,lang_lst['ru'][:c], lang_lst['ru'][:n] + when /^sa$|Sanskrit/i; d,c,l=false,lang_lst['sa'][:c], lang_lst['sa'][:n] + when /^se$|Sami/i; d,c,l=false,lang_lst['se'][:c], lang_lst['se'][:n] + when /^sk$|Slovak/i; d,c,l=false,lang_lst['sk'][:c], lang_lst['sk'][:n] + when /^sl$|Slovenian/i; d,c,l=false,lang_lst['sl'][:c], lang_lst['sl'][:n] + when /^sq$|Albanian/i; d,c,l=false,lang_lst['sq'][:c], lang_lst['sq'][:n] + when /^sr$|Serbian/i; d,c,l=false,lang_lst['sr'][:c], lang_lst['sr'][:n] + when /^sv$|Swedish|Svensk/i; d,c,l=false,lang_lst['sv'][:c], lang_lst['sv'][:n] + when /^ta$|Tamil/i; d,c,l=false,lang_lst['ta'][:c], lang_lst['ta'][:n] + when /^te$|Telugu/i; d,c,l=false,lang_lst['te'][:c], lang_lst['te'][:n] + when /^th$|Thai/i; d,c,l=false,lang_lst['th'][:c], lang_lst['th'][:n] + when /^tk$|Turkmen/i; d,c,l=false,lang_lst['tk'][:c], lang_lst['tk'][:n] + when /^tr$|Turkish/i; d,c,l=false,lang_lst['tr'][:c], lang_lst['tr'][:n] + when /^uk$|Ukranian/i; d,c,l=false,lang_lst['uk'][:c], lang_lst['uk'][:n] + when /^ur$|Urdu/i; d,c,l=false,lang_lst['ur'][:c], lang_lst['ur'][:n] + when /^us|American$|/i; d,c,l=false,lang_lst['en'][:c], lang_lst['en'][:n] + when /^vi$|Vietnamese/i; d,c,l=false,lang_lst['vi'][:c], lang_lst['vi'][:n] + else d,c,l=true, lang_lst['en'][:c], lang_lst['en'][:n] #default + end + lng[:d],lng[:c],lng[:n]=d,c,l + lng + end + def name + language[:n].downcase + end + def title + language[:n] + end + def code + language[:c] + end + def tex_name + language[:xlp] + end + def file_to_language(file) # used, fix and remove + m=/.+?\~(\w{2,3})\.(?:-|ssm\.)?sst$/ + @language=if file =~m ; file[m,1] + else '' + end + language + end + def codes + # Language List po4a + # <http://www.debian.org/international/l10n/po/> + # Px[:lng_lst]=%w[am bg bn br ca cs cy da de el en eo es et eu fi fr ga gl he hi hr hy ia is it la lo lt lv ml mr nl nn no oc pl pt pt_BR ro ru sa se sk sl sq sr sv ta te th tk tr uk ur us vi] + # see polyglossia for subset + # <http://mirrors.ctan.org/macros/xetex/latex/polyglossia/polyglossia.pdf> + # also note ISO_639-2 + # <http://en.wikipedia.org/wiki/ISO_639-2> + # <http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes> + Px[:lng_lst] # constants.rb + end + end + class InfoEnv < EnvCall + require 'pathname' + require 'fileutils' + include FileUtils + attr_accessor :filename,:sys,:home,:hostname,:user,:env,:rc,:www,:fnb,:fnn,:fnt,:flv,:webserv_path,:stub_pwd,:stub_src,:webserv_host_cgi,:webserv_port_cgi,:processing,:processing_git,:etc,:yamlrc_dir + @@image_flag,@@local_image=true,true #warning on @@image_flag + @@fb,@@man_path=nil,nil + def initialize(fns='',md=nil) + super() #you may not want to re-execute this static info so frequently! + @fns,@md=fns,md + @env=SiSU_Env::EnvCall.new(fns) if fns + fnb=if @md \ + and defined? @md.fnb + @md.fnb + elsif defined? @env.fnb \ + and @env.fnb + @env.fnb + elsif @fns.is_a?(String) \ + and not @fns.empty? + m=/(.+)?\.(?:(?:-|ssm\.)?sst|ssm)$/m + @fns[m,1] if not @fns.empty? + end + if fnb; @@fb ||=fnb + end + @sys=InfoSystem.instance + @fnb ||=@@fb #clean up this... used primarily for zap which is not passed normal parameters + @fixed_websev_root='' # @home + @pwd=@@pwd=Dir.pwd + m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + @stub_pwd=@@pwd[m,1] + @stub_txt= @stub_pwd + '/txt' + @stub_html= @stub_pwd + '/html' + @stub_epub= @stub_pwd + '/epub' + @stub_odt= @stub_pwd + '/odt' + @stub_pdf= @stub_pwd + '/pdf' + @stub_manifest=@stub_pwd + '/manifest' + @stub_odt= @stub_pwd + '/odt' + @stub_src= @stub_pwd + '/src' + @stub_pod= @stub_pwd + '/pod' + @stub_md= @stub_pwd + '/sisu_site_metadata' + pt=Pathname.new(Dir.pwd) + stub=if output_dir_structure.by_language_code? + r=Px[:lng_lst_rgx] + stub=if Dir.pwd =~/.+?\/([^\/]+)(?:\/(#{r})$)/ + lng=pt.split[-1].to_s + lng_part='/' + lng + base=pt.split[0].split[-1].to_s + else + lng_part='/' + language_default_set + base=pt.split[-1].to_s + end + base + lng_part + elsif output_dir_structure.by_filetype? + pt.split[-1].to_s + elsif output_dir_structure.by_filename? + '' + end + @stub_set_manifest=stub + '/manifest' + end + def user + @sys.user + end + def hostname + @sys.hostname + end + def host + @sys.host + end + def arch + @sys.arch + end + def rbver + @sys.rbver + end + def locale + @sys.locale + end + def concord_max + ((defined? @rc['processing']['concord_max']) \ + && @rc['processing']['concord_max']) \ + ? @rc['processing']['concord_max'] + : (defaults[:concord_max]) + end + def language_default_set #set directory (default) language + ((defined? @rc['default']['language']) \ + && @rc['default']['language'] =~/\S+/) \ + ? @rc['default']['language'] + : 'en' + end + def markup_emphasis + if defined? @rc['default']['emphasis'] \ + and @rc['default']['emphasis'] \ + and @rc['default']['emphasis']=~/bold/ + 'bold' + elsif defined? @rc['default']['emphasis'] \ + and @rc['default']['emphasis'] \ + and @rc['default']['emphasis']=~/italic/ + 'italics' + elsif defined? @rc['default']['emphasis'] \ + and @rc['default']['emphasis'] \ + and @rc['default']['emphasis']=~/underscore/ + 'underscore' + else 'bold' + end + end + def plaintext_wrap + ((defined? @rc['default']['text_wrap']) \ + && (@rc['default']['text_wrap']) \ + && (@rc['default']['text_wrap'].to_s=~/\d\d+/) \ + && (@rc['default']['text_wrap'].to_i > 19) \ + && (@rc['default']['text_wrap'].to_i < 201)) \ + ? @rc['default']['text_wrap'].to_i + : 78 + end + def current_document + @@current_document||=Dir.pwd + @@current_document + end + def stub_pwd #200412 + @stub_pwd + end + def stub_md_harvest #watch + @stub_set_manifest + end + def stub_src + @stub_src + end + def stub_pod + @stub_pod + end + def sisupod_v3(opt) + #processing_path.processing + # sisupod + # doc/ + # manifest.txt + # en/content.sst [file content] + # fr/content.sst + # _sisu + # skin/ + # doc [relevant skin if any other than default] + # image@ (ln -s ../../image) + # audio@ (ln -s ../../audio) + # video@ (ln -s ../../video) + # image/ [all images for specific document gathered here] + # audio/ + # video/ + spp="#{processing_path.processing}/#{Gt[:sisupod]}" + sppc="#{spp}/doc/_sisu" + lng_dirs=[] + if FileTest.directory?(spp) \ + or FileTest.file?(spp) + FileUtils::rm_rf(spp) + end + paths=[] + flv=SiSU_Env::EnvCall.new(opt.fns).document_language_versions_found + flv[:f].each {|l| lng_dirs << l[:l] } + lng_dirs.uniq.each do |lng| + paths << "#{spp}/doc/#{lng}" + end + paths \ + << "#{spp}/image" \ + << "#{sppc}/skin/doc" \ + << "#{sppc}/skin/dir" \ + << "#{sppc}/skin/site" + #<< "#{spp}/audio" \ + #<< "#{spp}/video" \ + paths.each do |x| + unless FileTest.directory?(x) + FileUtils::mkdir_p(x) + end + end + if FileTest.directory?(sppc) + pwd=Dir.pwd + Dir.chdir(sppc) + FileUtils::ln_s('../../image', 'image') + #FileUtils::ln_s('../../audio', 'audio') + #FileUtils::ln_s('../../video', 'video') + Dir.chdir(pwd) + end + end + def sisupod_v2 + #processing_path.processing + # sisupod + # content.sst [file content] + # filename.sst [link to content.sst] + # _sisu + # skin/ + # doc [relevant skin if any other than default] + # image [all images for specific document gathered here] + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" + if FileTest.directory?(sisupod_processing_path) \ + or FileTest.file?(sisupod_processing_path) + FileUtils::rm_rf(sisupod_processing_path) + end + paths=[] + paths=[ + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/doc", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/dir", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/skin/site", + "#{processing_path.processing}/#{Gt[:sisupod]}/_sisu/image" + ] + paths.each {|x| FileUtils::mkdir_p(x) unless FileTest.directory?(x) } + end + def defaults #multiple default directories + @default_dir ||=@sys.default_dir #DEFAULT_DIR + end + def html_seg_title_banner? + ((defined? @rc['html']['seg_title_banner']) \ + && @rc['html']['seg_title_banner']==true) \ + ? @rc['html']['seg_title_banner'] + : false + end + def html_quick_ref? + ((defined? @rc['html']['quick_ref']) \ + && @rc['html']['quick_ref']==true) \ + ? @rc['html']['quick_ref'] + : false + end + def html_minitoc? + flag=if defined? @rc['html']['minitoc'] \ + and @rc['html']['minitoc'].is_a?(String) + @rc['html']['minitoc'] + else false + end + end + def manifest_minitoc? + flag=if defined? @rc['manifest']['minitoc'] \ + and @rc['manifest']['minitoc'].is_a?(String) + @rc['manifest']['minitoc'] + else false + end + end + def build + def omit_list + @off_list ||=if defined? @rc['omit_list'] \ + and @rc['omit_list'].is_a?(String) + @rc['omit_list'] + elsif defined? @rc['omit']['list'] \ + and @rc['omit']['list'].is_a?(String) + @rc['omit']['list'] + else + nil + end + end + def listed?(test) #fix + listed=if omit_list + x=(omit_list.scan(/\b#{test}\b/)).join + test==x \ + ? true + : false + else + false + end + listed + end + def ocn? + if (defined? @rc['omit']['ocn'] \ + and not @rc['omit']['ocn'].nil?) \ + or listed?('ocn') + :off + else + :na + end + end + def toc? + if (defined? @rc['omit']['toc'] \ + and not @rc['omit']['toc'].nil?) \ + or listed?('toc') + :off + else + :na + end + end + def manifest? + if (defined? @rc['omit']['manifest'] \ + and not @rc['omit']['manifest'].nil?) \ + or listed?('manifest') + :off + else + :na + end + end + def links_to_manifest? + flag=if (defined? @rc['omit']['links_to_manifest'] \ + and not @rc['omit']['links_to_manifest'].nil?) \ + or (listed?('links_to_manifest') \ + || listed?('manifest_links')) + :off + else + :na + end + end + def metadata? + if (defined? @rc['omit']['metadata'] \ + and not @rc['omit']['metadata'].nil?) \ + or listed?('metadata') + :off + else + :na + end + end + def minitoc? + flag=if (defined? @rc['omit']['minitoc'] \ + and not @rc['omit']['minitoc'].nil?) \ + or (listed?('minitoc')) + :off + else + :na + end + end + def manifest_minitoc? + flag=if (defined? @rc['omit']['manifest_minitoc'] \ + and not @rc['omit']['manifest_minitoc'].nil?) \ + or listed?('manifest_minitoc') + :off + else + :na + end + end + def html_minitoc? + flag=if (defined? @rc['omit']['html_minitoc'] \ + and not @rc['omit']['html_minitoc'].nil?) \ + or (listed?('html_minitoc') \ + || listed?('minitoc')) + :off + else + :na + end + end + def html_navigation? + flag=if (defined? @rc['omit']['html_navigation'] \ + and not @rc['omit']['html_navigation'].nil?) \ + or listed?('html_navigation') + :off + else + :na + end + end + def html_navigation_bar? + flag=if (defined? @rc['omit']['html_navigation_bar'] \ + and not @rc['omit']['html_navigation_bar'].nil?) \ + or listed?('html_navigation_bar') + :off + else + :na + end + end + def segsubtoc? + flag=if (defined? @rc['omit']['segsubtoc'] \ + and not @rc['omit']['segsubtoc'].nil?) \ + or listed?('segsubtoc') + :off + else + :na + end + end + def html_right_pane? + flag=if (defined? @rc['omit']['html_right_pane'] \ + and not @rc['omit']['html_right_pane'].nil?) \ + or listed?('html_right_pane') + :off + else + :na + end + end + def html_top_band? + flag=if (defined? @rc['omit']['html_top_band'] \ + and not @rc['omit']['html_top_band'].nil?) \ + or listed?('html_top_band') + :off + else + :na + end + end + def search_form? #decide later, as is configured here (in sisurc) and can be turned off on command line + flag=if (defined? @rc['omit']['search_form'] \ + and not @rc['omit']['search_form'].nil?) \ + or listed?('search_form') + :off + else + :na + end + end + def html_search_form? #decide later, as is configured here (in sisurc) and can be turned off on command line + flag=if (defined? @rc['omit']['html_search_form'] \ + and not @rc['omit']['html_search_form'].nil?) \ + or listed?('html_search_form') + :off + else + :na + end + end + self + end + def odt_ocn? + ((defined? @rc['odt']['ocn']) \ + && @rc['odt']['ocn']==true) \ + ? @rc['odt']['ocn'] + : false + end + def plaintext_ocn? + ((defined? @rc['plaintext']['ocn']) \ + && @rc['plaintext']['ocn']==true) \ + ? @rc['plaintext']['ocn'] + : false + end + def widget #needs (md) #move + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + @ad=SiSU_Env::GetInit.instance.ads + @vz=SiSU_Env::GetInit.instance.skin + @flag={ ad: false, md: false, sk: false, rc: false } + def promo? + @flag[:ad]=if @md.flag_promo && @ad[:flag_promo] + @flag[:md]=true + true + elsif defined? @vz.widget_promo \ + and not @vz.widget_promo.nil? \ + and @vz.widget_promo.is_a?(Array) \ + and @vz.widget_promo.length > 0 + @flag[:sk]=true + true + elsif defined? @rc['html']['promo'] \ + and not @rc['html']['promo'].nil? \ + and @rc['html']['promo'].length > 0 + @flag[:rc]=true + true + else false + end + @flag + end + def search? + searches=['sisu'] + flag=false + if defined? @rc['search'] + searches.each do |type| + flag=if defined? @rc['search'][type] \ + and defined? @rc['search'][type]['action'] \ + and @rc['search'][type]['flag']==true \ + and @rc['search'][type]['action'] =~/https?:\/\// + flag=if promo?[:ad] + false + elsif defined? @vz.widget_search \ + and @vz.widget_search==true + true + elsif defined? @rc['search'][type]['flag'] \ + and @rc['search'][type]['flag']==true + true + else false + end + else false + end + end + else false + end + flag + end + def search_fixed? + searches=['sisu','hyperestraier'] + flag=if defined? @rc['search'] + searches.each do |type| + if defined? @rc['search'][type] \ + and defined? @rc['search'][type]['action'] \ + and @rc['search'][type]['action'] =~/https?:\/\// \ + and defined? @rc['search'][type]['db'] \ + and @rc['search'][type]['db'] =~/\S+/ + flag=if promo?[:ad] + false + elsif defined? @vz.widget_search \ + and @vz.widget_search==true + true + elsif defined? @rc['search'][type]['flag'] \ + and @rc['search'][type]['flag']==true + true + else false + end + else false + end + end + else false + end + end + def search_form(type='sisusearch',action=nil,db=nil,table=false) + rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + create_form_sisu=if action \ + and db \ + and action =~/https?:\/\// \ + and db =~/\S+/ + true + elsif widget.search? + db=if rc['search']['sisu']['flag']==true \ + and rc['search']['sisu']['db']=~/\S+/ + (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ + ? rc['search']['sisu']['db'] + : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" + else nil + end + action=rc['search']['sisu']['action'] + true + elsif defined? rc['search']['sisu']['flag'] \ + and defined? rc['search']['sisu']['action'] \ + and rc['search']['sisu']['flag']==true \ + and rc['search']['sisu']['action'] =~/https?:\/\// + true + else false + end + if table + table_open='<td align="center" bgcolor="#ffffff">' + table_close='</td>' + else + table_open='' + table_close='<br />' + end + form=if create_form_sisu \ + and type=~/sisusearch/ \ + and defined? rc['search']['sisu'] \ + and defined? rc['search']['sisu']['action'] + <<WOK +<!-- SiSU Search --> +#{table_open} +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="ltd" value="1000" /> +<input type="hidden" name="off" value="0" /> +<input type="hidden" name="doc" value="#{@md.fnb}" /><br /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font></form> +#{table_close} +<!-- SiSU Search --> +WOK + else '' + end + form + end + def search_form_static(action=nil,db=nil) + rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + create_form=if rc['search']['sisu']['flag']==true \ + and action \ + and db \ + and action =~/https?:\/\// \ + and db =~/\S+/ + true + elsif widget.search_fixed? + db=if rc['search']['sisu']['flag']==true \ + and rc['search']['sisu']['db']=~/\S+/ + (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ + ? rc['search']['sisu']['db'] + : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" + else nil + end + action=rc['search']['sisu']['action'] + true + else false + end + if create_form + %{<td align="center" bgcolor="#ffffff"> +<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="ltd" value="1000" /> +<input type="hidden" name="off" value="0" /> +<input type="hidden" name="doc" value="#{@md.fnb}" /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> +</td> } + else '' + end + end + def search_action #check + action=if search? + else '' + end + end + self + end + def widget_static + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + @vz=SiSU_Env::GetInit.instance.skin + @flag={ ad: false, md: false, sk: false, rc: false } + def search? + flag=if defined? @rc['search'] \ + and defined? @rc['search']['sisu'] \ + and defined? @rc['search']['sisu']['action'] \ + and @rc['search']['sisu']['action'] =~/https?:\/\// \ + and defined? @rc['search']['sisu']['db'] \ + and @rc['search']['sisu']['db'] =~/\S+/ \ + and defined? @rc['search']['sisu']['db'] \ + and @rc['search']['sisu']['db'] =~/\S+/ + flag=if defined? @vz.widget_search \ + and @vz.widget_search==true + true + elsif defined? @rc['search']['sisu']['flag'] \ + and @rc['search']['sisu']['flag']==true + true + else + false + end + else + false + end + end + def search_fixed? + flag=if defined? @rc['search'] \ + and defined? @rc['search']['sisu'] \ + and defined? @rc['search']['sisu']['action'] \ + and @rc['search']['sisu']['action'] =~/https?:\/\// \ + and defined? @rc['search']['sisu']['db'] \ + and @rc['search']['sisu']['db'] =~/\S+/ \ + and defined? @rc['search']['sisu']['db'] \ + and @rc['search']['sisu']['db'] =~/\S+/ + flag=if defined? @vz.widget_search \ + and @vz.widget_search==true + true + elsif defined? @rc['search']['sisu']['flag'] \ + and @rc['search']['sisu']['flag']==true + true + else + false + end + else + false + end + end + def search_form(action=nil,db=nil) + rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + create_form=if defined? rc['search']['sisu']['flag'] \ + and rc['search']['sisu']['flag']==true \ + and action \ + and db \ + and action =~/https?:\/\// \ + and db =~/\S+/ + true + elsif widget_static.search? \ + and rc['search']['sisu']['flag']==true + db=if rc['search']['sisu']['db']=~/\S+/ + (rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \ + ? rc['search']['sisu']['db'] + : "#{Db[:name_prefix]}#{rc['search']['sisu']['db']}" + else nil + end + action=rc['search']['sisu']['action'] + true + else false + end + if create_form \ + and @fnb \ + and @fnb=~/\S+/ + %{<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="hidden" name="doc" value="#{@fnb}" /> +<input type="submit" name="search" value="search doc" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> } + elsif create_form + %{<!-- SiSU Search --> +<a name="search"></a> +<form method="get" action="#{rc['search']['sisu']['action']}" target="_top"> +<font size="2"> +<input type="text" name="s1" size="24" maxlength="255" /> +<br /> +<input type="hidden" name="db" value="#{db}" /> +<input type="submit" name="search" value="search db" /> +</font> +</form> +<!-- SiSU Search --> } + else '' + end + end + def search_action #check + action=if search? + else '' + end + end + self + end + def source_file_path + file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') + pth=unless file =~/\.ssm\.sst$/; "#{Dir.pwd}" + else "#{processing_path.composite_file}" + end + end + def source_file_with_path + file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst') + "#{source_file_path}/#{file}" + end + def font + def texpdf + def main + (defined? @rc['default']['texpdf_font']) \ + && (@rc['default']['texpdf_font']=~/\S{3,}/) \ + ? @rc['default']['texpdf_font'] + : 'Liberation Sans' + end + def sans # not used + (defined? @rc['default']['texpdf_font_sans']) \ + && (@rc['default']['texpdf_font_sans']=~/\S{3,}/) \ + ? @rc['default']['texpdf_font_sans'] + : 'Liberation Sans' + end + def serif # not used + (defined? @rc['default']['texpdf_font_serif']) \ + && (@rc['default']['texpdf_font_serif']=~/\S{3,}/) \ + ? @rc['default']['texpdf_font_serif'] + : 'Liberation Serif' + end + def mono + (defined? @rc['default']['texpdf_font_mono']) \ + && (@rc['default']['texpdf_font_mono']=~/\S{3,}/) \ + ? @rc['default']['texpdf_font_mono'] + : 'Liberation Mono' + end + self + end + self + end + def path_rel_links + def html_scroll_2 + if @env.output_dir_structure.by_language_code? + '../../' + elsif @env.output_dir_structure.by_filetype? + '../' + else + '../' + end + end + def html_seg_2 + if @env.output_dir_structure.by_language_code? + '../../../' + elsif @env.output_dir_structure.by_filetype? + '../../' + else + '../' + end + end + def html_scroll_1 + if @env.output_dir_structure.by_language_code? + '../' + elsif @env.output_dir_structure.by_filetype? + '../' + else + './' + end + end + def html_seg_1 + if @env.output_dir_structure.by_language_code? + '../../' + elsif @env.output_dir_structure.by_filetype? + '../../' + else + './' + end + end + self + end + def read_source_file(fns) + fns_array=unless fns =~/\.ssm.sst$/ + IO.readlines(fns, mode: 'r:utf-8', cr_newline: true) + else + IO.readlines("#{processing_path.composite_file}/#{fns}", mode: 'r:utf-8', cr_newline: true) + end + end + def source_file_processing_array(fns) + sf=read_source_file(fns).join.split(/\s*\n\s*\n/m) + end + def path #dir + def home + @sys.home + end + def sisurc_path + GetInit.instance.sisu_yaml.rc_path + end + def pwd + @sys.pwd + end + def stub_pwd + @stub_pwd + end + def stub_txt + @stub_txt + end + def stub_html + @stub_html + end + def stub_epub + @stub_epub + end + def stub_odt + @stub_odt + end + def stub_pdf + @stub_pdf + end + def stub_manifest + @stub_manifest + end + def stub_set_manifest + @stub_set_manifest + end + def stub_src + @stub_src + end + def stub_pod + @stub_pod + end + def stub_md_harvest + @stub_set_manifest + end + def etc + defaults[:sisu_etc] #live/dynamic + end + def arch + @sys.dir_arch + end + def sitearch + @sys.dir_sitearch + end + def bin + @sys.dir_bin + end + def share #shared data repository source directory + defaults[:sisu_share] + end + def style + if @md \ + && ((@md.opt.opt_act[:dump][:bool] \ + && @md.opt.opt_act[:dump][:inst]) \ + || (@md.opt.opt_act[:redirect][:bool] \ + && @md.opt.opt_act[:redirect][:inst])) + 'css' + else + defaults[:stylesheet_stub] + end + end + def sample_data #sample data repository source directory + defaults[:sample_data_path] + end + def rc + @sys.rc_path + end + def yamlrc + GetInit.instance.sisu_yaml.rc_path + end + def man #check use + (defined? @rc['webserv']['man']) \ + ? "#{webserv}/#{@rc['webserv']['man']}" + : defaults[:webserv_man] + end + def webserv_path #testing, check need, remove + webserv + end + def webserv #separation required for webrick which cannot use path.output (different requirements as no file is passed) + man_path=if @@man_path.nil? + man_path=if defined? @rc['webserv']['path'] \ + and @rc['webserv']['path'] =~/\S\S+/ + man_path=@@man_path=File.expand_path(@rc['webserv']['path']) + else defaults[:webserv_path] + end + else @@man_path + end + man_path_head=man_path.gsub(/(\S+)\/[^\/\s]+$/,'\1') + unless FileTest.directory?(man_path) + FileUtils::mkdir_p(man_path) if File.writable?("#{man_path_head}/.") + end + @webserv_path=if defined? man_path \ + and File.writable?("#{man_path}/.") + man_path #web server path as configured in rc file + elsif FileTest.directory?(defaults[:webserv_path]) \ + and File.writable?("#{defaults[:webserv_path]}/.") #web server path default + defaults[:webserv_path] + else #create default directory under home and place output there + unless FileTest.directory?(defaults[:output_local]) + FileUtils::mkdir_p(defaults[:output_local]) + end + defaults[:output_local] + end + end + def webserv_stub_ensure + FileUtils::mkdir_p(path.webserv) unless FileTest.directory?(path.webserv) + FileUtils::mkdir_p("#{path.webserv}/#{@stub_pwd}") unless FileTest.directory?("#{path.webserv}/#{@stub_pwd}") + end + def webserv_map_pwd #dir + "#{path.webserv}/#{stub_pwd}" + end + def webserv_dir #fixed/hard path to /www web/presentation directory, on Debian /var/www subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) + defaults[:webserv_dir] + end + def webserv_image #web/presentation directory, subdirectories are created within it, depending on markup directory stub-name (last segment of markup directory name) + images=if defined? @rc['webserv']['images'] + @rc['webserv']['images'] + else defaults[:images] + end + "#{path.webserv}/#{images}" + end + def output #web/webserv output directory... subdirectory into which further subdirectories are made based on file names + r=Px[:lng_lst_rgx] + u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ + base_stub=@sys.pwd.gsub(u,'\1') + if Dir.pwd =~/\/#{Gt[:sisupod]}\/[^\/]+\/#{Gt[:pod]}\/#{Gt[:doc]}/ + "#{path.webserv}/#{Gt[:doc]}" + else + "#{path.webserv}/#{base_stub}" + end + end + def feed + (defined? @rc['webserv']['feed']) \ + ? ("#{public_output}/#{@rc['webserv']['feed']}") + : (defaults[:webserv_feed]) + end + def feed_home + "#{public_output}/#{@rc['webserv']['feed_home']}" + end + def scripts #used previously only to include tla version info + if defined? @rc['project']['path']; "#{home}/#{@rc['project']['path']}" + end + end + def cgi + (defined? @rc['webserv']['cgi']) \ + ? "#{@rc['webserv']['cgi']}" + : (defaults[:webserv_cgi]) + end + def php + (defined? @rc['webserv']['php']) \ + ? "#{public_output}/#{@rc['webserv']['php']}" + : (defaults[:webserv_php]) + end + # programs + def output_tell + url.webserv_map_pwd + end + def image_source #image repository source directory + image_path=if defined? @rc['image']['path'] \ + and defined? @rc['image']['public'] + pth="#{@rc['image']['path']}" + "#{pth}/#{@rc['image']['public']}" + else "#{share}/image" + end + end + def image_source_sisu_includes + "#{share}/image" + end + def image_source_include #image repository source directory + image_path=if defined? @rc['image']['path'] \ + and defined? @rc['image']['public'] \ + and FileTest.directory?("#{@rc['image']['path']}/#{@rc['image']['public']}")==true + "#{@rc['image']['path']}/#{@rc['image']['public']}" + elsif FileTest.directory?("#{@@pwd}/#{defaults[:image_stub]}")==true + "#{@@pwd}/#{defaults[:image_stub]}" + else + "#{share}/image" + end + end + def image_external + "#{processing}/external_document/image" + end + def image_source_include_local + if FileTest.directory?(defaults[:image_local]); defaults[:image_local] + end + end + def image_source_include_remote + if FileTest.directory?(image_external); image_external + end + end + self + end + def processing_path + def encoding + pth="#{processing}/#{defaults[:processing_encoding]}" + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def processing_base_tmp + defaults[:processing_path_tmp_base] + end + def tmp_root_dir + defaults[:processing_dir_tmp_root] + end + def root_dir + proposed_path_base=if defined? @rc['processing']['path'] \ + and not @rc['processing']['path'].nil? \ + and not @rc['processing']['path'].empty? + x=if @rc['processing']['path'] =~/^(?:~|home)$/ + home #fix + else @rc['processing']['path'] + end + else nil + end + proposed_dir=if defined? @rc['processing']['dir'] \ + and not @rc['processing']['dir'].nil? \ + and not @rc['processing']['dir'].empty? + @rc['processing']['dir'] + else defaults[:processing_dir] + end + v=SiSU_Env::InfoVersion.instance.get_version + v_dev=(DEVELOPER[:maintenance]==:true) \ + ? "_#{v[:version]}" + : '' + path=if proposed_path_base \ + and FileTest.directory?(proposed_path_base) \ + and File.writable?("#{proposed_path_base}/.") + x=proposed_dir \ + ? "#{proposed_path_base}/#{proposed_dir}" + : "#{proposed_path_base}/#{defaults[:processing_dir]}" + else defaults[:processing_dir_tmp_root] + end + path = path + v_dev + end + def usr_dir? + case root_dir + when /^\/home/; false + else true + end + end + def stub_dir + (usr_dir?) \ + ? ("#{root_dir}/#{user}/#{stub_pwd}") + : ("#{root_dir}/#{stub_pwd}") # see defaults[:processing_path] + end + def stub_dir_orig # ends up with lang, if lang dir + (usr_dir?) \ + ? ("#{root_dir}/#{user}/#{stub_pwd}") + : ("#{root_dir}/#{stub_pwd}") # see defaults[:processing_path] + end + def processing_sisupod(opt=nil) #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) + @opt=opt + def paths + processing_path_usr="#{root_dir}/#{user}" + processing_path_fnb=processing_path_usr + '/' + Gt[:pods] + '/' + @opt.fng + processing_path_sisupod=processing_path_fnb + '/' + Gt[:sisupod] + { fnb: processing_path_fnb, sisupod: processing_path_sisupod } + end + def make + unless FileTest.directory?(root_dir) + FileUtils::mkdir_p(root_dir) + File.chmod(0777,root_dir) + end + if usr_dir? + processing_path_usr="#{root_dir}/#{user}" + FileUtils::mkdir_p(processing_path_usr) unless FileTest.directory?(processing_path_usr) + File.chmod(0700,processing_path_usr) + end + fn_base_bundle=paths[:fnb] + sisupod_processing_path=paths[:sisupod] + FileUtils::mkdir_p(sisupod_processing_path) unless FileTest.directory?(sisupod_processing_path) + sisupod_processing_path_lng=if defined? @opt.lng + sisupod_processing_path + '/' + Gt[:doc] + '/' + @opt.lng + else + sisupod_processing_path + '/' + Gt[:doc] + end +#p sisup od_processing_path_lng + unless FileTest.directory?(sisupod_processing_path_lng) + #puts "a processing directory (#{sisupod_processing_path_lng}) is being created for use by sisu" + FileUtils::mkdir_p(sisupod_processing_path_lng) + File.chmod(0700,sisupod_processing_path_lng) + end + sisupod_processing_path + end + self + end + def processing #processing directory, used/needed for sisu work files, has sub-directories (dal,tex etc) + unless FileTest.directory?(root_dir) + FileUtils::mkdir_p(root_dir) + File.chmod(0777,root_dir) + end + if usr_dir? + processing_path_usr="#{root_dir}/#{user}" + FileUtils::mkdir_p(processing_path_usr) unless FileTest.directory?(processing_path_usr) + File.chmod(0700,processing_path_usr) + end + FileUtils::mkdir_p(stub_dir) unless FileTest.directory?(stub_dir) + File.chmod(0700,stub_dir) + path_processing=[stub_dir,defaults[:processing_path],defaults[:processing_path_home]] + processing=nil + path_processing.each do |v| # + processing=v + unless FileTest.directory?(processing) + FileUtils::mkdir_p(processing) + File.chmod(0700,processing) + end + break + end + processing + end + def dal + pth=if defined? @rc['processing']['dal'] \ + and @rc['processing']['dal'].is_a?(String) + "#{processing}/#{@rc['processing']['dal']}" + else "#{processing}/#{defaults[:processing_dal]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def tune + pth=if defined? @rc['processing']['tune'] \ + and @rc['processing']['tune'].is_a?(String) + "#{processing}/#{@rc['processing']['tune']}" + else "#{processing}/#{defaults[:processing_tune]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def composite_file + pth=processing_path.dal #"#{processing}/composite" + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def git + pth=if defined? @rc['git']['dir'] \ + and @rc['git']['dir'].is_a?(String) + x=(@rc['git']['dir'] =~/^(?:~|home)$/) \ + ? home + '/' + Gt[:git] + : @rc['git']['dir'] + '/' + Gt[:git] + else defaults[:processing_git] + end + unless FileTest.directory?(pth) + FileUtils::mkdir_p(pth) + File.chmod(0700,pth) + end + pth + end + def odf_pth + pth="#{processing}/odf/#{@fns}" + pth + end + def odf + odt + end + def odt + pth=odf_pth + '/odt' + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def odf + pth="#{processing}/odf" + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def odt_bld + FileUtils::rm_rf(processing_path.odt) + FileUtils::mkdir_p(processing_path.odt) unless FileTest.directory?(processing_path.odt) + FileUtils::mkdir_p("#{processing_path.odt}/Configurations2") unless FileTest.directory?("#{processing_path.odt}/Configurations2") + FileUtils::mkdir_p("#{processing_path.odt}/META-INF") unless FileTest.directory?("#{processing_path.odt}/META-INF") + FileUtils::mkdir_p("#{processing_path.odt}/Pictures") unless FileTest.directory?("#{processing_path.odt}/Pictures") + FileUtils::mkdir_p("#{processing_path.odt}/Thumbnails") unless FileTest.directory?("#{processing_path.odt}/Thumbnails") + processing_path.odt + end + def epub + "#{processing}/epub/#{@fnb}" + end + def epub_bld #(md) + FileUtils::rm_rf(processing_path.epub) if FileTest.directory?(processing_path.epub) + FileUtils::mkdir_p(processing_path.epub) unless FileTest.directory?(processing_path.epub) + FileUtils::mkdir_p("#{processing_path.epub}/META-INF") unless FileTest.directory?("#{processing_path.epub}/META-INF") + FileUtils::mkdir_p("#{processing_path.epub}/#{Ep[:d_oebps]}/image") unless FileTest.directory?("#{processing_path.epub}/#{Ep[:d_oebps]}/image") + FileUtils::mkdir_p("#{processing_path.epub}/#{Ep[:d_oebps]}/css") unless FileTest.directory?("#{processing_path.epub}/#{Ep[:d_oebps]}/css") + images=%W[bullet_09.png arrow_next_red.png arrow_prev_red.png arrow_up_red.png] + processing_path.epub + end + def epub_cp_images(md) + pth="#{processing_path.epub}/#{Ep[:d_oebps]}/image" + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + src="#{path.share}/image" + images=%W[bullet_09.png arrow_next_red.png arrow_prev_red.png arrow_up_red.png] + images.each do |i| #move to avoid repeated tests + if FileTest.file?("#{src}/#{i}") + FileUtils::cp("#{src}/#{i}","#{pth}/#{i}") unless FileTest.file?("#{pth}/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + pth + end + def tex + pth=if defined? @rc['processing']['latex'] \ + and @rc['processing']['latex'].is_a?(String) + "#{processing}/#{@rc['processing']['latex']}" + else "#{processing}/#{defaults[:processing_latex]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def texi + pth=if defined? @rc['processing']['texinfo'] \ + and @rc['processing']['texinfo'].is_a?(String) + "#{processing}/#{@rc['processing']['texinfo']}" + else "#{processing}/#{defaults[:processing_texinfo]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def texinfo #texinfo webserv, check + "#{processing}/#{defaults[:processing_texinfo]}" + end + def manpage + "#{path.output}/man" + end + def lout + pth=if defined? @rc['processing']['lout'] \ + and @rc['processing']['lout'].is_a?(String) + "#{processing}/#{@rc['processing']['lout']}" + else "#{processing}/#{defaults[:processing_lout]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def sql + pth="#{processing}/sql" + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def sqlite + pth=if defined? @rc['processing']['sqlite'] \ + and @rc['processing']['sqlite'].is_a?(String) + "#{processing}/#{@rc['processing']['sqlite']}" + else "#{processing}/#{defaults[:processing_sqlite]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + def postgresql + pth=if defined? @rc['processing']['postgresql'] \ + and @rc['processing']['postgresql'].is_a?(String) + "#{processing}/#{@rc['processing']['postgresql']}" + else "#{processing}/#{defaults[:processing_postgresql]}" + end + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + self + end + def url + def hostname + "http://#{@sys.hostname}" + end + def dir_url + "file://#{path.webserv}/#{stub_pwd}" + end + def localhost + "http://localhost/#{stub_pwd}" + end + def local + "http://#{hostname}/#{@stub_pwd}" + end + def root + if defined? @rc['webserv']['url_root'] \ + and @rc['webserv']['url_root'] =~/https?:\/\// + "#{@rc['webserv']['url_root']}/#{@stub_pwd}" + elsif defined? @rc['webserv']['url_root'] \ + and @rc['webserv']['url_root'] =~/localhost/ + "http://localhost/#{@stub_pwd}" + else "file://#{path.output}" + end + end + def remote + root + end + def txt + "#{root}/txt" + end + def html + "#{root}/html" + end + def epub + "#{root}/epub" + end + def odt + "#{root}/odt" + end + def pdf + "#{root}/pdf" + end + def src_txt + "#{root}/src" + end + def src_pod + "#{root}/pod" + end + def pot + "#{root}/po4a/pot" + end + def po + "#{root}/po4a/po" + end + def webserv_host_base + if defined? @rc['webserv']['host'] + case @rc['webserv']['host'] + when /https?:\/\//; @rc['webserv']['host'] + when /\S+/; "http://#{@rc['webserv']['host']}" + else defaults[:webserv_host_cgi] + end + else defaults[:webserv_host_cgi] + end + end + def webserv_cgi #web url for local webserv (localhost, or hostname) + if defined? @rc['webserv_cgi']['host'] \ + and @rc['webserv_cgi']['host'].is_a?(String) + http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') #check https? missing + if port.webserv_port_cgi + "#{http}#{@rc['webserv_cgi']['host']}:#{port.webserv_port_cgi}/#{@stub_pwd}" + else "#{http}#{@rc['webserv_cgi']['host']}/#{@stub_pwd}" + end + else + http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') + if port.webserv_port_cgi + "#{http}#{webserv_host_base}:#{port.webserv_port_cgi}/#{@stub_pwd}" + else "#{http}#{webserv_host_base}/#{@stub_pwd}" + end + end + end + def webserv_base_cgi #web url for local webserv (localhost, or hostname) + if defined? @rc['webserv_cgi']['host'] \ + and @rc['webserv_cgi']['host'].is_a?(String) + http=((@rc['webserv_cgi']['host'] =~ /https?:\/\//) ? '' : 'http://') + if port.webserv_port_cgi + "#{http}#{@rc['webserv_cgi']['host']}:#{port.webserv_port_cgi}" + else "#{http}#{@rc['webserv_cgi']['host']}" + end + else + http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://') + if port.webserv_port_cgi + "#{http}#{webserv_host_base}:#{port.webserv_port_cgi}" + else "#{http}#{webserv_host_base}" + end + end + end + def webrick #must have a port #REMOVE + if defined? @rc['webserv_cgi']['host'] \ + and @rc['webserv_cgi']['host'].is_a?(String) + http=if @rc['webserv_cgi']['host'] =~/http:\/\// + 'http://' + elsif @rc['webserv_cgi']['host'] =~/https:\/\// + 'https://' + else defaults + end + "#{http}#{@rc['webserv_cgi']['host']}" + elsif webserv_host_base \ + and webserv_host_base.is_a?(String) + "#{http}#{webserv_host_base}" + else "#{http}localhost" end + end + def webserv #web url for local webserv (localhost, or hostname) + if defined? @rc['webserv']['url_root'] \ + and @rc['webserv']['url_root'] =~/http/ + # needed for alternative output dir structures, fixes manifest url links, check may cause problems elsewhere + @rc['webserv']['url_root'] + elsif path.webserv_dir \ + and path.webserv =~ /#{path.webserv_dir}/ #revisit + "#{path.webserv}/#{@stub_pwd}".gsub(/#{path.webserv_dir}/,"#{url.hostname}/#{@stub_pwd}") + elsif defined? @rc['webserv']['webrick_url'] \ + and @rc['webserv']['webrick_url']==false + "file://#{path.webserv}" + elsif port.webserv_port_cgi =~/\S+/ + "#{url.hostname}:#{port.webserv_port_cgi}" + else + url.hostname + end + end + def webserv_base #web url for local webserv (localhost, or hostname) + if path.webserv_dir \ + and path.webserv =~ /#{path.webserv_dir}/ #revisit + "#{path.webserv}/#{@stub_pwd}".gsub(/#{path.webserv_dir}/,"#{url.hostname}") + elsif defined? @rc['webserv']['webrick_url'] \ + and @rc['webserv']['webrick_url']==false + "file://#{path.webserv}" + else "#{url.webrick_base}" + end + end + def webserv_files_from_db #sort this out, messy + if defined? @rc['webserv_cgi']['file_links'] + case @rc['webserv_cgi']['file_links'] + when /webserv_cgi/; url.webserv_base_cgi + when /webserv/; @rc['webserv']['url_root'] + when /https?:\/\//; @rc['webserv_cgi']['file_links'] + when /\S+/; "http://#{@rc['webserv_cgi']['file_links']}" + else webserv_base_cgi + end + else webserv_base_cgi + end + end + def sample_search_form_title + if defined? @rc['search']['sisu']['title'] \ + and @rc['search']['sisu']['title'] =~/\S+/ + @rc['search']['sisu']['title'] + else %{(SiSU (generated sample) search form} + end + end + def output_tell #BROKEN Revisit 2011-02 + output_type=if defined? @rc['show_output_on'] \ + and @rc['show_output_on'] =~/^(?:filesystem|webserv|(?:local|remote)(?:_webserv)?|webrick)/ + @rc['show_output_on'] + else 'filesystem' + end + output=case output_type + when /^filesystem(?:_url)?/; url.dir_url + when /^remote(?:_webserv)?/; url.remote + when /^(?:webserv|local_webserv)/; url.local + when /^local(:\d+)/; url.hostname + $1 + '/' + stub_pwd + when /^localhost(:\d+)/; url.localhost + $1 + '/' + stub_pwd + when /^localhost/; url.localhost + when /^webrick/; url.webrick + when /^path/; url.webserv_map_pwd + else url.webserv_map_pwd + end + end + def images + "#{Xx[:html_relative2]}/_sisu/image" + end + #def images + # '../_sisu/image' + #end + def images_local + if FileTest.directory?(path.image_source_include) + path.image_source_include + else + if @@local_image==true + cmd=@cmd ? @cmd : '' + SiSU_Screen::Ansi.new(cmd,"WARNING - no local image directory or images:", defaults[:image_local] ).warn unless cmd =~/q/ + @@local_image=false + end + url.images + end + end + def images_external + if FileTest.directory?(image_external) + if @@image_flag + images=Dir.glob("#{image_external}/*.{png,jpg,gif}") + pth="#{path.webserv}/#{@stub_pwd}" + FileUtils::mkdir_p("#{pth}/_sisu/image_external") unless FileTest.directory?("#{pth}/_sisu/image_external") + images.each { |i| File.install(i,"#{pth}/#{i}") } unless images.length > 0 + @@image_flag=false + end + "#{Xx[:html_relative2]}/_sisu/image_external" + else + if @@local_image==true + SiSU_Screen::Ansi.new(@cmd,"WARNING - image directory for external images or no such images:", :image_external ).warn unless @cmd =~/q/ + @@local_image=false + end + url.images_external + end + end + def images_epub + './image' + end + self + end + def port + def webrick_port + if @md \ + and @md.opt.cmd.inspect=~/-F/ \ + and @md.opt.mod.inspect=~/port=(\d+)/ + $1 + else + if defined? @rc['webserv_cgi']['port'] + if @rc['webserv_cgi']['port'].nil? \ + and (defined? @md.opt.mod \ + and not @md.opt.mod.nil? \ + and @md.opt.mod.inspect=~/webrick/) + defaults[:webserv_port_cgi] + elsif not @rc['webserv_cgi']['port'].nil? + @rc['webserv_cgi']['port'] + else defaults[:webserv_port_cgi] + end + else defaults[:webserv_port_cgi] + end + end + end + def webserv_port_cgi + if @md \ + and defined? @md.opt \ + and @md.opt.cmd.inspect=~/-F/ \ + and @md.opt.mod.inspect=~/port=(\d+)/ + $1 + else + if defined? @rc['webserv_cgi']['port'] + if @rc['webserv_cgi']['port'].nil? \ + and (defined? @md.opt.mod \ + and not @md.opt.mod.nil? \ + and @md.opt.mod.inspect=~/webrick/) + defaults[:webserv_port_cgi] + elsif not @rc['webserv_cgi']['port'].nil? + @rc['webserv_cgi']['port'] + else nil + end + else nil + end + end + end + self + end + def digest + def type + if defined? @rc['default']['digest'] \ + and @rc['default']['digest'] != nil + case @rc['default']['digest'] + when /^sha(?:2|256)?$/; 'sha256' + when /^md5$/; 'md5' + else 'sha256' + end + else 'sha256' + end + end + def length + case digest.type + when /sha256/; 64 + when /md5/; 32 + else 64 + end + end + def pattern + "[0-9a-f]{#{digest.length}}" #/[0-9a-f]{#{digest.length}}/ + end + self + end + def program + def text_editor + if defined? @rc['program_select']['editor'] \ + and @rc['program_select']['editor'] =~/\S\S+/ + @rc['program_select']['editor'] + elsif defined? @rc['program_select']['text_editor'] \ + and @rc['program_select']['text_editor'] =~/\S\S+/ + @rc['program_select']['text_editor'] + else 'editor' #'gvim -c :R -c :S' + end + end + def pdf_viewer + ((defined? @rc['program_select']['pdf_viewer']) \ + && @rc['program_select']['pdf_viewer'] =~/\S\S+/) \ + ? @rc['program_select']['pdf_viewer'] + : 'pdf-viewer' #'evince' + end + def web_browser + if defined? @rc['program_select']['www_browser'] \ + and @rc['program_select']['www_browser'] =~/\S\S+/ + @rc['program_select']['www_browser'] + elsif defined? @rc['program_select']['web_browser'] \ + and @rc['program_select']['web_browser'] =~/\S\S+/ + @rc['program_select']['web_browser'] + else 'x-www-browser' #'firefox' 'iceweasel' 'kazehakase' 'galeon' + end + end + def www_browser + web_browser + end + def console_web_browser + if defined? @rc['program_select']['console_www_browser'] \ + and @rc['program_select']['console_www_browser'] =~/\S\S+/ + @rc['program_select']['console_www_browser'] + elsif defined? @rc['program_select']['console_web_browser'] \ + and @rc['program_select']['console_web_browser'] =~/\S\S+/ + @rc['program_select']['console_web_browser'] + else 'console-www-browser' #'lynx' 'links' 'links2' 'elinks' 'w3m' + end + end + def console_www_browser + web_browser + end + def epub_viewer + ((defined? @rc['program_select']['epub_viewer']) \ + && @rc['program_select']['epub_viewer'] =~/\S\S+/) \ + ? @rc['program_select']['epub_viewer'] + : 'ebook-viewer' #'calibre' 'fbreader' + end + def xml_viewer + ((defined? @rc['program_select']['xml_viewer']) \ + && @rc['program_select']['xml_viewer'] =~/\S\S+/) \ + ? @rc['program_select']['xml_viewer'] + : text_editor + end + def xml_editor + xml_viewer + end + def odf_viewer + ((defined? @rc['program_select']['odf_viewer']) \ + && @rc['program_select']['odf_viewer'] =~/\S\S+/) \ + ? @rc['program_select']['odf_viewer'] + : 'lowriter' #'odf-viewer','oowriter' + end + def manpage_viewer + 'man' + end + def manpage_generator + ((defined? @rc['program_select']['man']) \ + && @rc['program_select']['man'] =~/\S\S+/) \ + ? @rc['program_select']['man'] + : 'nroff -man' #'nroff -man' #'groff -man -Tascii' + end + def texinfo + ((defined? @rc['program_select']['info_viewer']) \ + && @rc['program_select']['info_viewer'] =~/\S\S+/) \ + ? @rc['program_select']['info_viewer'] + : 'pinfo -f' #'pinfo -f' 'info' 'tkinfo' + end + def file_encoding + is=(defined? @rc['program_set']['file_encoding']) ? @rc['program_set']['encoding'] : '' + (is.nil? || is==true) ? 'encoding' : is + end + def wc #wordcount + is=(defined? @rc['program_set']['wc']) ? @rc['program_set']['wc'] : '' + (is.nil? || is==true) ? 'wc' : is + end + def tidy + is=(defined? @rc['program_set']['tidy']) ? @rc['program_set']['tidy'] : nil + (is.nil? || is==true) ? 'tidy' : is + end + def rmagick + is=(defined? @rc['program_set']['rmagick']) ? @rc['program_set']['rmagick'] : nil + (is.nil? || is==true) ? 'rmagick' : is + end + def rexml #should be part of ruby 1.8 but apparently not always + is=(defined? @rc['program_set']['rexml']) ? @rc['program_set']['rexml'] : '' + (is.nil? || is==true) ? 'rexml' : is + end + def pdflatex + is=(defined? @rc['program_set']['pdflatex']) ? @rc['program_set']['pdflatex'] : '' + (is.nil? || is==true) ? 'pdflatex' : is + end + def postgresql + is=(defined? @rc['program_set']['postgresql']) ? @rc['program_set']['postgresql'] : '' + (is.nil? || is==true) ? 'postgresql' : is + end + def sqlite + is=(defined? @rc['program_set']['sqlite']) ? @rc['program_set']['sqlite'] : '' + (is.nil? || is==true) ? 'sqlite' : is + end + self + end + def i18n + def language # language settings + m=/.+\/\S+?\~(\S+)/ + pwd=Dir.pwd + conf=(defined? @rc['default']['language']) ? @rc['default']['language'] : nil + l=if pwd=~ m; pwd[m,1] #2 directory: by visible directory name + elsif conf; @rc['default']['language'] #3 config: from sisurc.yaml + else defaults[:language] #4 sisu: program default + end #1 document: param gets + SiSU_Env::StandardiseLanguage.new(l) + end + #def multilingual + # x=(defined? @rc['output_structure']['multilingual'] \ + # && @rc['output_structure']['multilingual'] ==true) \ + # ? true : false + #end + #def bundle + # x=(defined? @rc['output_structure']['bundle'] \ + # && @rc['output_structure']['bundle'] ==true) \ + # ? true : false + #end + def lang_filename(l) + @lang={} + x=if output_dir_structure.by_language_code? + (( defined? @rc['default']['language_file']) \ + && @rc['default']['language_file'] != nil) \ + ? @rc['default']['language_file'] + : 1 + else 0 + end + if (l != defaults[:language_code]) \ + or (language.code != defaults[:language_code]) #watch + if x==1; @lang[:pre],@lang[:mid],@lang[:post]="#{l}.",'','' + elsif x==2; @lang[:pre],@lang[:mid],@lang[:post]='',".#{l}",'' + elsif x==3; @lang[:pre],@lang[:mid],@lang[:post]='','',".#{l}" + else @lang[:pre],@lang[:mid],@lang[:post]='','','' + end + else @lang[:pre],@lang[:mid],@lang[:post]='','','' + end + @lang + end + self + end + def file_encoding + is='' + if defined? @rc['program_set']['file_encoding']; is=@rc['program_set']['encoding'] + end + if is.nil? \ + or is==true + is='encoding' + end + is + end + def papersize # paper settings, default overidden in param if set within document + (defined? @rc['default']['papersize']) \ + ? @rc['default']['papersize'].downcase + : (defaults[:papersize].downcase) + end + def odf_structure + FileUtils::rm_rf(processing_path.processing_path.odf_pth) + FileUtils::mkdir_p(processing_path.processing_path.odf_pth) + system("unzip -q #{path.share}/#{SiSU_version_dir}/odf/odt.zip -d #{processing_path.odf_pth}") + end + def sisupod_gen(fns_pod) + sisupod_gen_v3(fns_pod) + end + def sisupod_gen_v3(fns_pod) + pwd=Dir.pwd + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" + if FileTest.directory?(sisupod_processing_path) \ + or FileTest.file?(sisupod_processing_path) + FileUtils::rm_rf(sisupod_processing_path) + end + unless FileTest.directory?(sisupod_processing_path) + FileUtils::mkdir_p(sisupod_processing_path) + end + f_pod=if FileTest.file?("#{Dir.pwd}/#{fns_pod}") + "#{Dir.pwd}/#{fns_pod}" + elsif FileTest.file?(fns_pod) + fns_pod + end + if f_pod \ + && FileTest.file?(f_pod) + tree=(SiSU_Env::SystemCall.new.program_found?('tree')) \ + ? "tree #{processing_path.processing}/#{Gt[:sisupod]}" + : '' + if FileTest.directory?(processing_path.processing) + Dir.chdir(processing_path.processing) + system(%{tar xJf #{f_pod}}) + Dir.chdir(pwd) + end + #system(tree) #enable if (/[vVM]/) + else + SiSU_Screen::Ansi.new('',"*WARN* file not found: #{fns_pod}").warn unless @cmd=~/q/ + end + sisupod_processing_path + end + def sisupod_gen_v2(fns_pod) + pwd=Dir.pwd + sisupod_processing_path="#{processing_path.processing}/#{Gt[:sisupod]}" + if FileTest.directory?(sisupod_processing_path) \ + or FileTest.file?(sisupod_processing_path) + FileUtils::rm_rf(sisupod_processing_path) + end + unless FileTest.directory?(sisupod_processing_path) + FileUtils::mkdir_p(sisupod_processing_path) + end + (FileTest.file?(fns_pod)) \ + ? system("unzip -q #{fns_pod} -d #{processing_path.processing}") + : (SiSU_Screen::Ansi.new('',"*WARN* file not found: #{fns_pod}").warn unless @cmd=~/q/) + sisupod_processing_path + end + end + class InfoProcessingFlag + attr_accessor :color,:cf_0,:cf_1,:cf_2,:cf_3,:cf_4,:cf_5 + def initialize + @rc=GetInit.instance.sisu_yaml.rc + end + def color #processing flag shortcuts + (defined? @rc['flag']['color']) ? @rc['flag']['color'] : false + end + def cf_0 #processing flag shortcuts + if defined? @rc['flag']['default'] \ + and @rc['flag']['default'].is_a?(String) + @rc['flag']['default'] + else '-NQhewpotbxXdyYv' + end + end + def cf_1 #processing flag shortcuts + if defined? @rc['flag']['i'] \ + and @rc['flag']['i'].is_a?(String) + @rc['flag']['i'] + else '-Qhewpoty' + end + end + def cf_2 #processing flag shortcuts + if defined? @rc['flag']['ii'] \ + and @rc['flag']['ii'].is_a?(String) + @rc['flag']['ii'] + else '-NQhewpotbxXdy' + end + end + def cf_3 #processing flag shortcuts + if defined? @rc['flag']['iii'] \ + and @rc['flag']['iii'].is_a?(String) + @rc['flag']['iii'] + else '-NQhewpotbxXdyY' + end + end + def cf_4 #processing flag shortcuts + if defined? @rc['flag']['iv'] \ + and @rc['flag']['iv'].is_a?(String) + @rc['flag']['iv'] + else '-NQhewpotbxXdDyY --update' + end + end + def cf_5 #processing flag shortcuts + if defined? @rc['flag']['v'] \ + and @rc['flag']['v'].is_a?(String) + @rc['flag']['v'] + else '-NQhewpotbxXdDyYv --update' + end + end + end + class InfoSettings < InfoEnv + def permission?(prog) #program defaults + (defined? @rc['permission_set'][prog]) \ + ? @rc['permission_set'][prog] + : false + end + def program?(prog) #program defaults + (defined? @rc['program_set'][prog]) \ + ? @rc['program_set'][prog] + : false + end + end + class FileMap < InfoEnv + attr_accessor :local_sisu_source + def initialize(opt='') #watch / REVIEW + super() + @opt=opt #,opt.fns,opt.cmd + @env=(@opt.fns && !(@opt.fns.empty?) \ + ? (SiSU_Env::InfoEnv.new(@opt.fns)) + : (SiSU_Env::InfoEnv.new('dummy.sst'))) + if @opt.cmd =~/m/; @md=SiSU_Param::Parameters.new(@opt).get + end + ft=[] + if @md \ + and defined? @md.fn \ + and @md.fn # used for by_language_code? + if @md.opt.cmd =~ /[hH]/ + ft << @md.fn[:html] + end + if @md.opt.cmd =~ /w/ \ + and @md.opt.cmd !~ /[hH]/ + ft << @md.fn[:concordance] + end + if @md.opt.cmd =~ /y/ \ + and @md.opt.cmd !~ /[hH]/ + ft << @md.fn[:manifest] + end + if @md.opt.cmd =~ /[at]/; ft << @md.fn[:plain] + end + if @md.opt.cmd =~ /b/; ft << @md.fn[:xhtml] + end + if @md.opt.cmd =~ /e/; ft << @md.fn[:epub] + end + if @md.opt.cmd =~ /g/; ft << @md.fn[:wiki] + end + if @md.opt.cmd =~ /i/; ft << @md.fn[:manpage] + end + if @md.opt.cmd =~ /N/; ft << @md.fn[:digest] + end + if @md.opt.cmd =~ /o/; ft << @md.fn[:odf] + end + if @md.opt.cmd =~ /O/; ft << @md.fn[:oai_pmh] + end + if @md.opt.cmd =~ /p/; ft << @md.fn[:pdf_l] << @md.fn[:pdf_p] + end + if @md.opt.cmd =~ /s/; ft << @md.fns + end + if @md.opt.cmd =~ /S/; ft << @md.fn[:sisupod] << '.kdi' + end + if @md.opt.cmd =~ /x/; ft << @md.fn[:sax] + end + if @md.opt.cmd =~ /X/; ft << @md.fn[:dom] + end + if @md.opt.cmd =~ /G/; ft << @md.fn[:pot] + end + @fnb=@md.fnb + else # still needed where/when param is not parsed + if @opt.cmd =~ /[hH]/; ft << '.html' << '.html.??' + end + if @opt.cmd =~ /w/ \ + and @opt.cmd !~ /[hH]/ + ft << 'concordance.html' << '??.concordance.html' << 'concordance.??.html' + end + if @opt.cmd =~ /y/ \ + and @opt.cmd !~ /[hH]/ + ft << 'sisu_manifest.html' << '??.sisu_manifest.html' << 'sisu_manifest.??.html' + end + if @opt.cmd =~ /a/; ft << 'plain.txt' << '??.plain.txt' << 'plain.??.txt' + end + if @opt.cmd =~ /b/; ft << 'scroll.xhtml' << '??.scroll.xhtml' << 'scroll.??.xhtml' + end + if @opt.cmd =~ /e/; ft << @fnb << '.epub' + end + if @opt.cmd =~ /g/; ft << 'wiki.txt' << '??.wiki.txt' << 'wiki.??.txt' + end + if @opt.cmd =~ /i/; ft << '.1' << '??.man.1' << 'man.??.1' + end + if @opt.cmd =~ /N/; ft << 'digest.txt' << '??.digest.txt' << 'digest.??.txt' + end + if @opt.cmd =~ /o/; ft << 'opendocument.odt' << '??.opendocument.odt' << 'opendocument.??.odt' + end + if @opt.cmd =~ /O/; ft << 'oai_pmh.xml' + end + if @opt.cmd =~ /p/; ft << 'landscape.pdf' << 'portrait.pdf' << '.pdf' + end + if @opt.cmd =~ /s/; ft << '.sst' << '.ssi' << '.ssm' + end + if @opt.cmd =~ /S/; ft << '.zip' << '.kdi' + end + if @opt.cmd =~ /x/; ft << 'sax.xml' << '??.sax.xml' << 'sax.??.xml' + end + if @opt.cmd =~ /X/; ft << 'dom.xml' << '??.dom.xml' << 'dom.??.xml' + end + if @opt.mod.inspect =~ /sxm|sxs|xml/; ft << @fnb << '.sxs.xml' + end + if @opt.mod.inspect =~ /sxd/; ft << @fnb << '.sxd.xml' + end + if @opt.mod.inspect =~ /sxn/; ft << @fnb << '.sxn.xml' + end + end + ft=ft.uniq + filetypes=ft.join(',') + @filetypes=if filetypes !~/..+/; '' # -r called alone, copy all + elsif @opt.cmd =~/u/; '' # -u added, copy all, (used to create remote directory tree see output path), not the usual function of -u + elsif filetypes =~/\S+?,\S+/; '*{' + filetypes + '}' # more than one relevant file type + else '*' + filetypes # one relevant file type + end + @source_path=(@fnb && !(@fnb.empty?) \ + ? "#{@env.path.output}/#{@fnb}" + : @env.path.output) + @source_path_epub=(@fnb && !(@fnb.empty?) \ + ? "#{@env.path.output}/epub" + : @env.path.output_epub) + @source_path_src=(@fnb && !(@fnb.empty?) \ + ? "#{@env.path.output}/src" + : @env.path.output_src) + @source_path_pod=(@fnb && !(@fnb.empty?) \ + ? "#{@env.path.output}/pod" + : @env.path.output_pod) + @source_path_harvest=(@fnb && !(@fnb.empty?) \ + ? "#{@env.path.output}/manifest" + : @env.path.output_harvest) + @local_sisu_source=(@filetypes =~/\S/) \ + ? "#{@source_path}/#{@filetypes}" + : @source_path + end + end + class CleanOutput + require 'fileutils' + include FileUtils::Verbose + def initialize(opt) + @opt=opt + z=SiSU_Env::FileMap.new(@opt) + @zap=z.local_sisu_source + if @opt.cmd =~ /[hH]/ + @zap=Dir.glob(@zap).join(' ') + @zap=if @opt.cmd !~ /w/ + @zap.gsub(/#{@source_path}\/concordance.html/,'') + else @zap + end + end + @env=SiSU_Env::InfoEnv.new + end + def zap + def main_output + (@zap !~/\/\//) \ + ? (FileUtils::rm_rf(@zap) if FileTest.directory?(@zap)) + : (puts 'suspect zap request, ignored') + end + def site_map + if @opt.fnb \ + and not @opt.fnb.empty? + sm="#{@env.path.output}/sitemaps/sitemap_#{@opt.fnb}.xml" + FileUtils::rm(sm) if FileTest.file?(sm) + end + end + def epub + if @opt.fnb \ + and not @opt.fnb.empty? + sm="#{@env.path.output}/epub/#{@opt.fnb}.epub" + FileUtils::rm(sm) if FileTest.file?(sm) + end + end + def src # consider + if @opt.fnb \ + and not @opt.fnb.empty? + sm="#{@env.path.output}/src/pod/#{@opt.fns}.txz" + FileUtils::rm(sm) if FileTest.file?(sm) + sm="#{@env.path.output}/src/#{@opt.fns}" + FileUtils::rm(sm) if FileTest.file?(sm) + end + end + self + end + end + class InfoRemoteHost + def initialize + @rc=GetInit.instance.sisu_yaml.rc + end + def remote_host #see InfoRemote remote_host_base_general + r=[] + r=if (defined? @rc['remote'] \ + and @rc['remote'].is_a?(Array)) + r_array=@rc['remote'] + r_array.each_with_index do |renv,i| + r[i]={} + if defined? renv['user'] \ + and defined? renv['host'] + end + r[i][:user]=renv['user'] + r[i][:host]=renv['host'] + r[i][:path]=if defined? renv['path'] + renv['path'] + else '' + end + r[i][:name]="#{r[i][:user]}@#{r[i][:host]}:#{r[i][:path]}" + end + r + elsif (defined? @rc['remote'] \ + and @rc['remote'].is_a?(Hash) \ + and defined? @rc['remote']['user'] \ + and defined? @rc['remote']['host']) + r[0]={} + r[0][:user]=@rc['remote']['user'] + r[0][:host]=@rc['remote']['host'] + r[0][:path]=if defined? @rc['remote']['path'] + @rc['remote']['path'] + else '' + end + r[0][:name]="#{r[0][:user]}@#{r[0][:host]}:#{r[0][:path]}" + r + else + r[0]={} + r[0][:name]='.' + r[0][:user]='' + r[0][:host]='' + r[0][:path]='' + #puts "no remote host or user" + r + end + end + def rhost + def r1 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[0][:name]) \ + ? (SiSU_Env::InfoRemoteHost.new.remote_host[0][:name]) + : nil + end + def r2 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[1][:name]) \ + ? (SiSU_Env::InfoRemoteHost.new.remote_host[1][:name]) + : nil + end + def r3 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[2][:name]) \ + ? (SiSU_Env::InfoRemoteHost.new.remote_host[2][:name]) + : nil + end + def r4 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[3][:name]) \ + ? (SiSU_Env::InfoRemoteHost.new.remote_host[3][:name]) + : nil + end + def r5 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[4][:name]) \ + ? (SiSU_Env::InfoRemoteHost.new.remote_host[4][:name]) + : nil + end + def r6 + (defined? SiSU_Env::InfoRemoteHost.new.remote_host[5][:name]) \ + ? (@ls + SiSU_Env::InfoRemoteHost.new.remote_host[5][:name]) + : nil + end + self + end + end + class InfoRemote < FileMap + @@flag_remote=false + require 'socket' + def initialize(opt) + super(opt) # + @opt=opt + @rc=GetInit.instance.sisu_yaml.rc + end + def remote_host_base_general + SiSU_Env::InfoRemoteHost.new.remote_host + end + def remote_host_base + remote_host_base_general.each do |remote_conn| + @@flag_remote=true if remote_conn[:name] =~/\S+?@\S+/ + end + remote_host_base_general + end + def scp #sort out later using ruby libraries #not ideal, first time each file is sent, -r must be called separately for subdir to be built + def document + self.remote_host_base.each do |remote_conn| + local_gen=@source_path + remote_gen=case @opt.cmd + when /u/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." #creates remote directory tree, this is not the usual function of u + when /[abhHNopwxXy]/; "#{remote_conn[:name]}/#{@env.path.stub_pwd}/#{@fnb}/." + else "#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + end + local_epub=@source_path_epub + local_src=@source_path_src + local_pod=@source_path_pod + remote_epub="#{remote_conn[:name]}/#{@env.path.stub_epub}/." + remote_src="#{remote_conn[:name]}/#{@env.path.stub_src}/." + remote_pod="#{remote_conn[:name]}/#{@env.path.stub_pod}/." + src_txt=@opt.fnc + src_pod=@opt.fncb.gsub(/(\.ss[mt])(?:\.sst)?$/,'\1.txz') + if (local_gen =~/\S/ \ + and local_gen !~/\/\//) \ + and (remote_gen =~/\S/ \ + and remote_gen !~/\/\//) \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ + SiSU_Env::SystemCall.new(local_gen,remote_gen).scp + if FileTest.file?("#{local_src}/#{src_txt}") + SiSU_Env::SystemCall.new("#{local_src}/#{src_txt}",remote_src).scp + end + if FileTest.file?("#{local_pod}/#{src_pod}") + SiSU_Env::SystemCall.new("#{local_src}/#{src_pod}",remote_pod).scp + end + if FileTest.file?("#{local_epub}/#{@opt.fnb}.epub") + SiSU_Env::SystemCall.new("#{local_epub}/#{@opt.fnb}.epub",remote_epub,@opt.cmd).scp + end + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "#{local_gen} -> #{remote_gen}" + if FileTest.file?("#{local_src}/#{src_doc}") + puts "#{local_src}/#{src_doc}* -> #{remote_src}" + end + if FileTest.file?("#{local_pod}/#{src_doc}.txz") + puts "#{local_pod}/#{src_doc}* -> #{remote_pod}" + end + else + puts 'suspect scp request, ignored' + puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" + puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + def site_base #base site + self.remote_host_base.each do |remote_conn| + local=@source_path + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + if defined? @rc['permission_set']['remote_base_site'] \ + and @rc['permission_set']['remote_base_site'] \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ + puts "begin scp_base: #{local} -> #{remote}" + SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote).scp + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "begin scp_base: #{local} -> #{remote}" + puts "#{local}/#{@env.path.style}/ -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + def site_base_all #base site + self.remote_host_base.each do |remote_conn| + local=@source_path + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + if defined? @rc['permission_set']['remote_base_site'] \ + and @rc['permission_set']['remote_base_site'] \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ + puts "begin scp_base_all: #{local} -> #{remote}" + SiSU_Env::SystemCall.new("#{local}/_sisu/image_sys/",remote).scp + SiSU_Env::SystemCall.new("#{local}/_sisu/image/",remote).scp + SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote).scp + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "scp_base_all: #{local} -> #{remote}" + puts "#{local}/_sisu/image_sys/ -> #{remote}" + puts "#{local}/_sisu/image/ -> #{remote}" + puts "#{local}/#{@env.path.style}/ -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + self + end + def images_from_skin + skin=SiSU_Env::InfoSkin.new(@md).select + skin_array=nil + skin_images_array=[] + if skin + skin_array=IO.readlines(skin,"\n") + skin_array.each do |l| + if l !~/^#/ + if l =~/([a-z0-9._-]+\.(?:png|jpg|gif))/i + skin_images_array << $1 + end + end + end + end + skin_images_array + end + def rsync + @f=SiSU_Env::FileOp.new(@md) + def document + self.remote_host_base.each do |remote_conn| + local_gen=@source_path + #local_gen_image="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" + #local_gen_image_external="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external" + remote_gen="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + remote_rel=remote_conn[:name] + '/' + @f.output_path.stub.rcp + src_txt=@opt.fnc + if (local_gen =~/\S/ \ + and local_gen !~/\/\//) \ + and (remote_gen =~/\S/ \ + and remote_gen !~/\/\//) \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ +# SiSU_Env::SystemCall.new("#{local_src}/#{src_txt}",remote_src,@opt.cmd).rsync + delete_extra_files='--delete' # '--delete-after' + inp=[] + if (@opt.act[:html][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.html_scroll.dir) + inp << @f.output_path.html_seg.rel << @f.place_file.html_scroll.rel + end + if (@opt.act[:concordance][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.html_concordance.dir) + inp << @f.place_file.html_concordance.rel + end + if (@opt.act[:epub][:set]==:on \ + || @opt.cmd =~/^-R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.epub.dir) + inp << @f.place_file.epub.rel + end + if (@opt.act[:odt][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.odt.dir) + inp << @f.place_file.odt.rel + end + if (@opt.act[:xhtml][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.xhtml.dir) + inp << @f.place_file.xhtml.rel + end + if (@opt.act[:xml_sax][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.xml_sax.dir) + inp << @f.place_file.xml_sax.rel + end + if (@opt.act[:xml_dom][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.xml_dom.dir) + inp << @f.place_file.xml_dom.rel + end + if (@opt.act[:txt][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.txt.dir) + inp << @f.place_file.txt.rel + end + if (@opt.act[:manpage][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*i[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.manpage.dir) + inp << @f.place_file.manpage.rel + end + if (@opt.act[:texinfo][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*I[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.info.dir) + inp << @f.place_file.info.rel + end + if (@opt.act[:hash_digests][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.hash_digest.dir) + inp << @f.place_file.hash_digest.rel + end + if (@opt.act[:share_source][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.src.dir) + inp << @f.place_file.src.rel + end + if (@opt.act[:sisupod][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.sisupod.dir) + inp << @f.place_file.sisupod.rel + end + if (@opt.act[:pdf][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) + inp << @f.output_path.pdf.rel + '/' + @opt.fnb + '*' + end + if (@opt.act[:sqlite_discreet][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.sqlite_discreet.dir) + inp << @f.place_file.sqlite_discreet.rel + end + if (@opt.act[:qrcode][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.qrcode_md.dir) + inp << @f.place_file.qrcode_md.rel << @f.place_file.qrcode_title.rel + end + if (@opt.act[:manifest][:set]==:on \ + || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \ + && FileTest.file?(@f.place_file.manifest.dir) + inp << @f.place_file.manifest.rel + end + local_gen=if inp.length > 0 + inp.join(' ') + else '' + end + local_css,images,images_external,images_system='','','','' + images_gen=images=images_skin=images_system=local_css='' + if @opt.cmd =~/[hwbxX]/ \ + && (defined? @md.ec[:image]) \ + && (@md.ec[:image].length > 0) + images=@f.place_file.images.rel + '/' + @md.ec[:image].join(" #{@f.output_path.images.rel}/") + end + if @opt.cmd =~/[yhwbxX]/ \ + && (defined? @md.ec[:image]) \ + && (@md.ec[:image].length > 0) + local_css=@f.output_path.css.rel + images_system='_sisu/image_sys' + if @f.output_path.images.rel.length > 0 \ + && images_from_skin.length > 0 + images_skin=@f.place_file.images.rel + '/' + images_from_skin.join(" #{@f.output_path.images.rel}/") + end + end + begin + ##create file structure without copying files?: + ##rsync -av -f"+ */" -f"- *" @f.output_path.base.dir remote:./path/. + #local_dirs=%{-f"+ */" -f"- *" #{@f.output_path.base.dir}/*} + #SiSU_Env::SystemCall.new(local_dirs,remote_gen,@opt.cmd).rsync + local=local_gen + ' ' + images + ' ' + images_skin + ' ' + images_system + ' ' + local_css + SiSU_Env::SystemCall.new(local,remote_rel,@opt.cmd).rsync('--relative',@f.output_path.base.dir) + rescue + p __LINE__.to_s + ':' + __FILE__ + local_dirs=%{--include='*/' --exclude='*' #{@f.output_path.base.dir}} + SiSU_Env::SystemCall.new(local_dirs,remote_gen,@opt.cmd).rsync + end + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "#{local_gen} -> #{remote_gen}" + if FileTest.file?("#{local_src}/#{src_doc}") \ + or FileTest.file?("#{local_src}/#{src_doc}.txz") + puts "#{local_src}/#{src_doc}* -> #{remote_src}" + end + else + puts 'suspect rsync request, ignored' + puts "#{local_gen} -> #{remote_gen} remote flag: #{@@flag_remote}" + puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + def site_base #base site + ldest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu" + image_sys="#{@env.path.webserv}/_sisu/image_sys" + images="#{@env.path.webserv}/_sisu/image" + self.remote_host_base.each do |remote_conn| + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + remote_conf="#{remote_conn[:name]}/_sisu" + if defined? @rc['permission_set']['remote_base_site'] \ + and @rc['permission_set']['remote_base_site'] \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ + SiSU_Env::SystemCall.new("#{image_sys}","#{remote_conf}").rsync + SiSU_Env::SystemCall.new("#{images}","#{remote_conf}").rsync + SiSU_Env::SystemCall.new("#{ldest}","#{remote}").rsync + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "rsync_base: #{local} -> #{remote}" + puts "#{local}/_sisu/image -> #{remote}" + puts "#{local}/_sisu/image_sys/ -> #{remote}" + puts "#{local}/#{@env.path.style}/ -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + def site_base_sync + self.remote_host_base.each do |remote_conn| + local=@source_path + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + if defined? @rc['permission_set']['remote_base_site'] \ + and @rc['permission_set']['remote_base_site'] \ + and @@flag_remote==true \ + and @opt.cmd !~/U/ + delete_extra_files='--delete' # '--delete-after' + puts "begin rsync_base_sync: #{local} -> #{remote}" + SiSU_Env::SystemCall.new("#{local}/_sisu/image_sys/",remote).rsync(delete_extra_files) + SiSU_Env::SystemCall.new("#{local}/_sisu/image/",remote).rsync(delete_extra_files) + SiSU_Env::SystemCall.new("#{local}/#{@env.path.style}/",remote).rsync(delete_extra_files) + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "rsync_base_sync: #{local} -> #{remote}" + puts "#{local}/_sisu/image_sys/ -> #{remote}" + puts "#{local}/_sisu/image/ -> #{remote}" + puts "#{local}/#{@env.path.style}/ -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + self + end + def rsync_sitemaps #sitemap directory + self.remote_host_base.each do |remote_conn| + local="#{@source_path}/sitemapindex.xml" + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + if @@flag_remote + delete_extra_files='--delete' # '--delete-after' + SiSU_Env::SystemCall.new(local,remote).rsync(delete_extra_files) + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "rsync_sitemaps: #{local} -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + def rsync_harvest + self.remote_host_base.each do |remote_conn| + local=@source_path_harvest + remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}/." + if @@flag_remote + delete_extra_files='--delete' # '--delete-after' + SiSU_Env::SystemCall.new(local,remote).rsync(delete_extra_files) + elsif @opt.cmd =~/U/ + puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + puts "rsync_sitemaps: #{local} -> #{remote}" + else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/ + end + end + end + end + class InfoVersion <InfoEnv + include Singleton + require 'rbconfig' + @@lib_path=nil + def get_version + @version={} + @pwd=ENV['PWD'] + yst_ver="#{defaults[:sisu_share]}/#{SiSU_version_dir}/v/version.yml" + lib_path=@@lib_path ? @@lib_path : `echo $RUBYLIB`.split(':') + @@lib_path ||=lib_path + if File.exist?(yst_ver); @version=YAML::load(File::open(yst_ver)) #unless @@noyaml + end + @version + end + def rbversion + %x{ruby -v}.strip + end + end + class InfoFile <InfoEnv #todo unify with FileOp + def initialize(fns) + begin + super(fns) + @fns=fns + @env=SiSU_Env::InfoEnv.new(@fns) + m=/((.+?)(?:\~\w\w(?:_\w\w)?)?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss + @fnn,@fnb,@fnt=@fns[m,1],@fns[m,2],@fns[m,3] + rescue + SiSU_Screen::Ansi.new('',$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def basefilename #Remove if possible + m=/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/m + fnb=@fns[m,1] + end + def make_file(path,filename) + (File.writable?("#{path}/.")) \ + ? File.new("#{path}/#{filename}",'w+') + : (SiSU_Screen::Ansi.new('',"*WARN* is the file or directory writable?, could not create #{filename}").warn) + end + def touch_file(path,filename) + if File.writable?("#{path}/."); + FileUtils::touch("#{path}/#{filename}") + else SiSU_Screen::Ansi.new('',"*WARN* is the file or directory writable?, could not create #{filename}").warn + end + end + def make_path(path) + FileUtils::mkdir_p(path) unless FileTest.directory?(path) + end + def marshal + def dal_content + "#{@env.processing_path.dal}/#{@fns}.content.rbm" + end + def dal_idx_sst_rel_html_seg + "#{@env.processing_path.dal}/#{@fns}.idx_sst.rbm" + end + def dal_idx_sst_rel #used by tex & odf + "#{@env.processing_path.dal}/#{@fns}.idx_raw.rbm" + end + def dal_idx_html + "#{@env.processing_path.dal}/#{@fns}.idx_html.rbm" + end + def dal_idx_xhtml + "#{@env.processing_path.dal}/#{@fns}.idx_xhtml.rbm" + end + def dal_metadata + "#{@env.processing_path.dal}/#{@fns}.metadata.rbm" + end + def dal_map_nametags + "#{@env.processing_path.dal}/#{@fns}.map_name_tags.rbm" + end + def dal_map_ocn_htmlseg + "#{@env.processing_path.dal}/#{@fns}.map_ocn_htmlseg.rbm" + end + def html_tune + "#{@env.processing_path.tune}/#{@fns}.marshal_tune" + end + self + end + def write_file_processing + def html_tune + File.new("#{@env.processing_path.tune}/#{@fns}.tune",'w+') + end + self + end + def mkdir #check moved from FileOp, existing mkdir + def processing + def dal + FileUtils::mkdir_p(@env.processing_path.dal) unless FileTest.directory?(@env.processing_path.dal) + end + def tune + FileUtils::mkdir_p(@env.processing_path.tune) unless FileTest.directory?(@env.processing_path.tune) + end + self + end + end + end + class ProcessingSettings + def initialize(md) + @md=md + end + def cnf_rc #sisurc.yml + @rc=SiSU_Env::GetInit.instance.sisu_yaml.rc + end + def env_rc #env rc (including sisurc.yml) + @env_rc ||=SiSU_Env::InfoEnv.new(@md.fns) + end + def doc_rc #document rc, make instructions + @md.make + end + def cmd_rc_act #command-line rc + @cmd_rc_act=@md.opt.opt_act + end + def build + def ocn? + if cmd_rc_act[:ocn][:set]==:on + true + elsif cmd_rc_act[:ocn][:set]==:off + false + elsif defined? @md.make.ocn? \ + and @md.make.ocn? ==:off + false + elsif env_rc.build.ocn? ==:off + false + else + true + end + end + def toc? + if cmd_rc_act[:toc][:set]==:on + true + elsif cmd_rc_act[:toc][:set]==:off + false + elsif defined? @md.make.toc? \ + and @md.make.toc? ==:off + false + elsif env_rc.build.toc? ==:off + false + else + true + end + end + def manifest? + if cmd_rc_act[:manifest][:set]==:on + true + elsif cmd_rc_act[:manifest][:set]==:off + false + elsif defined? @md.make.manifest? \ + and @md.make.manifest? ==:off + false + elsif env_rc.build.manifest? ==:off + false + else + true + end + end + def links_to_manifest? + if cmd_rc_act[:links_to_manifest][:set]==:on + true + elsif cmd_rc_act[:links_to_manifest][:set]==:off + false + elsif defined? @md.make.links_to_manifest? \ + and @md.make.links_to_manifest? ==:off + false + elsif env_rc.build.links_to_manifest? ==:off + false + else + true + end + end + def metadata? + if cmd_rc_act[:metadata][:set]==:on + true + elsif cmd_rc_act[:metadata][:set]==:off + false + elsif defined? @md.make.metadata? \ + and @md.make.metadata? ==:off + false + elsif env_rc.build.metadata? ==:off + false + else + true + end + end + def minitoc? + if html_top_band? == false #one form of navigation necessary + true + elsif cmd_rc_act[:minitoc][:set]==:on + true + elsif cmd_rc_act[:minitoc][:set]==:off + false + elsif defined? @md.make.minitoc? \ + and @md.make.minitoc? ==:off + false + elsif env_rc.build.minitoc? ==:off + false + else + true + end + end + def manifest_minitoc? + if html_top_band? == false #one form of navigation necessary + true + elsif cmd_rc_act[:manifest_minitoc][:set]==:on \ + || cmd_rc_act[:minitoc][:set]==:on + true + elsif cmd_rc_act[:manifest_minitoc][:set]==:off \ + || cmd_rc_act[:minitoc][:set]==:off + false + elsif defined? @md.make.manifest_minitoc? \ + and (@md.make.manifest_minitoc? ==:off \ + || @md.make.minitoc? ==:off) + false + elsif env_rc.build.manifest_minitoc? ==:off \ + || env_rc.build.minitoc? ==:off + false + elsif minitoc? == false + false + else + true + end + end + def html_minitoc? + if html_top_band? == false #one form of navigation necessary + true + elsif cmd_rc_act[:html_minitoc][:set]==:on \ + || cmd_rc_act[:minitoc][:set]==:on + true + elsif cmd_rc_act[:html_minitoc][:set]==:off \ + || cmd_rc_act[:minitoc][:set]==:off + false + elsif defined? @md.make.html_minitoc? \ + and (@md.make.html_minitoc? ==:off \ + || @md.make.minitoc? ==:off) + false + elsif env_rc.build.html_minitoc? ==:off \ + || env_rc.build.minitoc? ==:off + false + elsif minitoc? == false + false + else + true + end + end + def html_top_band? + if cmd_rc_act[:html_top_band][:set]==:on + true + elsif cmd_rc_act[:html_top_band][:set]==:off + false + elsif defined? @md.make.html_top_band? \ + and @md.make.html_top_band? ==:off + false + elsif env_rc.build.html_top_band? ==:off + false + else + true + end + end + def html_navigation? + if cmd_rc_act[:html_navigation][:set]==:on + true + elsif cmd_rc_act[:html_navigation][:set]==:off + false + elsif defined? @md.make.html_navigation? \ + and @md.make.html_navigation? ==:off + false + elsif env_rc.build.html_navigation? ==:off + false + else + true + end + end + def html_navigation_bar? + if cmd_rc_act[:html_navigation_bar][:set]==:on + true + elsif cmd_rc_act[:html_navigation_bar][:set]==:off + false + elsif defined? @md.make.html_navigation_bar? \ + and @md.make.html_navigation_bar? ==:off + false + elsif env_rc.build.html_navigation_bar? ==:off + false + else + true + end + end + def search_form? + if cmd_rc_act[:search_form][:set]==:on + true + elsif cmd_rc_act[:search_form][:set]==:off + false + elsif defined? @md.make.html_search_form? \ + and @md.make.search_form? ==:off + false + elsif env_rc.build.search_form? ==:off + false + else + true + end + end + def html_search_form? + if cmd_rc_act[:html_search_form][:set]==:on \ + || cmd_rc_act[:search_form][:set]==:on + true + elsif cmd_rc_act[:html_search_form][:set]==:off \ + || cmd_rc_act[:search_form][:set]==:off + false + elsif defined? @md.make.html_search_form? \ + and (@md.make.html_search_form? ==:off \ + || @md.make.search_form? ==:off) + false + elsif env_rc.build.html_search_form? ==:off \ + || env_rc.build.search_form? ==:off + false + elsif search_form? == false + false + else + true + end + end + def html_right_pane? + if cmd_rc_act[:html_right_pane][:set]==:on + true + elsif cmd_rc_act[:html_right_pane][:set]==:off + false + elsif defined? @md.make.html_right_pane? \ + and @md.make.html_right_pane? ==:off + false + elsif env_rc.build.html_right_pane? ==:off + false + else + true + end + end + def segsubtoc? + if cmd_rc_act[:segsubtoc][:set]==:on + true + elsif cmd_rc_act[:segsubtoc][:set]==:off + false + elsif defined? @md.make.segsubtoc? \ + and @md.make.segsubtoc? ==:off + false + elsif env_rc.build.segsubtoc? ==:off + false + else + true + end + end + self + end + def output_dir_structure + def by_language_code? + if cmd_rc_act[:output_by][:set] == :language + true + elsif cmd_rc_act[:output_by][:set] == :filetype \ + or cmd_rc_act[:output_by][:set] == :filename + false + elsif cmd_rc_act[:output_by][:set] == :language + true + else + env_rc.output_dir_structure.by_language_code? + end + end + def by_filetype? + if cmd_rc_act[:output_by][:set] == :filetype + true + elsif cmd_rc_act[:output_by][:set] == :language \ + or cmd_rc_act[:output_by][:set] == :filename + false + elsif cmd_rc_act[:output_by][:set] == :filetype + true + else + env_rc.output_dir_structure.by_filetype? + end + end + def by_filename? + if cmd_rc_act[:output_by][:set] == :filename + true + elsif cmd_rc_act[:output_by][:set] == :language \ + or cmd_rc_act[:output_by][:set] == :filetype + false + elsif cmd_rc_act[:output_by][:set] == :filename + true + else + env_rc.output_dir_structure.by_filename? + end + end + def multilingual? + by_language_code? + end + def dump? + ((cmd_rc_act[:dump][:bool] \ + && cmd_rc_act[:dump][:inst]) \ + || (env_rc.output_dir_structure.dump?)) \ + ? true + : false + end + def redirect? + ((cmd_rc_act[:redirect][:bool] \ + && cmd_rc_act[:redirect][:inst]) \ + || (env_rc.output_dir_structure.redirect?)) \ + ? true + : false + end + def dump_or_redirect? + ((dump?) || (redirect?)) \ + ? true + : false + end + def by? + if dump? + :dump + elsif redirect? + :redirect + elsif by_language_code? + :language + elsif by_filetype? + :filetype + elsif by_filename? + :filename + else #recheck current default + :language + end + end + self + end + end + class InfoDb < InfoEnv + @@rc=nil + def initialize + @@pwd ||=Dir.pwd + @pwd=Dir.pwd + @env=SiSU_Env::InfoEnv.new + pt=Pathname.new(@pwd) + r=Px[:lng_lst_rgx] + u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/ + @pwd_stub=pt.realpath.to_s[u,1] + @rc=@@rc ||=GetInit.instance.sisu_yaml.rc + @defaults=SiSU_Env::InfoEnv.new.defaults + end + def share_source? + ((defined? @rc['db']['share_source']) \ + && @rc['db']['share_source']==true) \ + ? @rc['db']['share_source'] + : false + end + def engine + def default + ((defined? @rc['db']['engine']['default']) \ + && @rc['db']['engine']['default']=~/postgresql|sqlite/) \ + ? @rc['db']['engine']['default'] + : 'sqlite' + end + self + end + def psql + def user + ((defined? @rc['db']['postgresql']['user']) \ + && @rc['db']['postgresql']['user']=~/\S+/) \ + ? @rc['db']['postgresql']['user'] + : @env.user + end + def db #db_name + "#{Db[:name_prefix]}#{@pwd_stub}" + end + def port #PGPORT + ((defined? @rc['db']['postgresql']['port']) \ + && ( @rc['db']['postgresql']['port'] =~/\d+/ \ + || @rc['db']['postgresql']['port'].is_a?(Fixnum))) \ + ? @rc['db']['postgresql']['port'] + : (@defaults[:postgresql_port]) + end + def password + ((defined? @rc['db']['postgresql']['password']) \ + && @rc['db']['postgresql']['password']=~/\S+/) \ + ? @rc['db']['postgresql']['password'] + : '' + end + def host + ((defined? @rc['db']['postgresql']['host']) \ + && @rc['db']['postgresql']['host']=~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ + ? @rc['db']['postgresql']['host'] + : '' + end + def dbi + (psql.host =~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \ + ? "DBI:Pg:database=#{psql.db};host=#{psql.host};port=#{psql.port}" + : "DBI:Pg:database=#{psql.db};port=#{psql.port}" + end + def conn_dbi + DBI.connect(psql.dbi,psql.user,psql.db) + end + self + end + def mysql + def db + #"#{Db[:name_prefix]}#{@pwd_stub}" + end + def port + '**' + end + def dbi + "dbi:Mysql:database=#{mysql.db};port=#{mysql.port}" + end + self + end + def sqlite + def db + "#{@env.path.webserv}/#{@pwd_stub}/sisu_sqlite.db" + end + def db_discreet(md) + # "#{@env.path.webserv}/#{@pwd_stub}/sisu_sqlite.db" + end + def dbi + "DBI:SQLite3:#{sqlite.db}" #sqlite3 ? + end + def sqlite3 + sqlite.db #sqlite3 ? + end + def conn_dbi + DBI.connect(sqlite.dbi) + end + def conn_sqlite3 + SQLite3::Database.new(sqlite.sqlite3) + end + self + end + end + class DbOp <InfoDb + def initialize(md) + begin + @md=md + rescue + SiSU_Screen::Ansi.new(md.opt.cmd,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def sqlite_discreet + def db + "#{@md.file.output_path.sqlite_discreet.dir}/#{@md.file.base_filename.sqlite_discreet}" + end + def dbi + "DBI:SQLite3:#{sqlite_discreet.db}" + end + def sqlite3 + sqlite_discreet.db + end + def conn_dbi + DBI.connect(sqlite_discreet.dbi) + end + def conn_sqlite3 + SQLite3::Database.new(sqlite_discreet.sqlite3) + end + self + end + end + class FileOp <InfoFile #todo unify with CreateFile + def initialize(md,fno='') + begin + @md,@fno=md,fno + @env=SiSU_Env::InfoEnv.new(@md.fns) + rescue + SiSU_Screen::Ansi.new(md.opt.cmd,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def output_dir_structure + ProcessingSettings.new(@md).output_dir_structure + end + def mkdir_initialize # not used but consider using + FileUtils::mkdir_p(output_path.base.dir) unless FileTest.directory?(output_path.base.dir) + FileUtils::mkdir_p("#{output_path.base.dir}/#{@md.fnb}") unless FileTest.directory?("#{output_path.base.dir}/#{@md.fnb}") + FileUtils::mkdir_p("#{output_path.base.dir}/#{@env.path.style}") unless FileTest.directory?("#{output_path.base.dir}/#{@env.path.style}") + FileUtils::mkdir_p(@env.processing_path.dal) unless FileTest.directory?(@env.processing_path.dal) + FileUtils::mkdir_p(@env.processing_path.tune) unless FileTest.directory?(@env.processing_path.tune) + end + def path_rel_links + def html_scroll_2 + if output_dir_structure.by_language_code? + '../../' + elsif output_dir_structure.by_filetype? + '../' + else + '../' + end + end + def html_seg_2 + if output_dir_structure.by_language_code? + '../../../' + elsif output_dir_structure.by_filetype? + '../../' + else + '../' + end + end + def html_scroll_1 + if output_dir_structure.by_language_code? + '../' + elsif output_dir_structure.by_filetype? + '../' + else + './' + end + end + def html_seg_1 + if output_dir_structure.by_language_code? + '../../' + elsif output_dir_structure.by_filetype? + '../../' + else + './' + end + end + def default_output_css + if (@md.opt.opt_act[:dump][:bool] \ + && @md.opt.opt_act[:dump][:inst]) \ + || (@md.opt.opt_act[:redirect][:bool] \ + && @md.opt.opt_act[:redirect][:inst]) + './' + elsif output_dir_structure.by_language_code? + '../../' + elsif output_dir_structure.by_filetype? + '../' + else + '../' + end + end + def html_scroll_css + default_output_css + end + def xhtml_css + default_output_css + end + def xml_css + default_output_css + end + def html_seg_css + if output_dir_structure.by_language_code? + '../../../' + elsif output_dir_structure.by_filetype? + '../../' + else + '../' + end + end + def manifest_css + if output_dir_structure.by_language_code? + '../../_sisu/css' + elsif output_dir_structure.by_filetype? + '' + else + '../' + end + end + self + end + def mkdir + txt_path="#{output_path.base.dir}/#{@md.fnb}" + def output + def base + FileUtils::mkdir_p(output_path.base.dir) unless FileTest.directory?(output_path.base.dir) + end + def css + FileUtils::mkdir_p("#{output_path.base.dir}/#{@env.path.style}") unless FileTest.directory?("#{output_path.base.dir}/#{@env.path.style}") + end + def epub + path=output_path.epub.dir + make_path(path) + end + self + end + self + end + def mkfile #consider using more + path="#{output_path.base.dir}/#{@md.fnb}" + make_path(path) + filename=@fno + file=make_file(path,filename) + end + def mkfile_pwd + path=Dir.pwd + filename=@fno + file=make_file(path,filename) + end + def write_file + def txt + path=output_path.txt.dir + make_path(path) + fn=base_filename.txt + make_file(path,fn) + end + def html_scroll + pth=output_path.html.dir + make_path(pth) + p_fn=place_file.html_scroll.dir + @@filename_html_scroll=File.new(p_fn,'w+') + end + def html_seg_index + pth=((by_filename?) \ + || (output_dir_structure.dump?)) \ + ? "#{output_path.html.dir}" + : "#{output_path.html.dir}/#{@md.fnb}" + fn=base_filename.html_seg_index + make_path(pth) + p_fn=place_file.html_seg_index.dir + @@filename_html_index=File.new(p_fn,'w+') + end + def html_segtoc + pth=((by_filename?) \ + || (output_dir_structure.dump?)) \ + ? "#{output_path.html.dir}" + : "#{output_path.html.dir}/#{@md.fnb}" + fn=base_filename.html_segtoc + make_path(pth) + p_fn=place_file.html_segtoc.dir + @@filename_html_index=File.new(p_fn,'w+') + end + def xhtml + path=output_path.xhtml.dir + make_path(path) + fn=base_filename.xhtml + file=make_file(path,fn) + end + def xml_sax + path=output_path.xml.dir + make_path(path) + fn=base_filename.xml_sax + file=make_file(path,fn) + end + def xml_dom + path=output_path.xml.dir + make_path(path) + fn=base_filename.xml_dom + file=make_file(path,fn) + end + def manpage + path=output_path.manpage.dir + make_path(path) + fn=base_filename.manpage + file=make_file(path,fn) + end + def texinfo + path=output_path.texinfo.dir + make_path(path) + fn=base_filename.texinfo + file=make_file(path,fn) + end + def info + path=output_path.texinfo.dir + make_path(path) + fn=base_filename.info + file=make_file(path,fn) + end + def hash_digest + path=output_path.hash_digest.dir + make_path(path) + fn=base_filename.hash_digest + file=make_file(path,fn) + end + def qrcode + path=output_path.qrcode.dir + make_path(path) + fn=base_filename.qrcode + make_file(path,fn) + end + def manifest + path=output_path.manifest.dir + make_path(path) + fn=base_filename.manifest + make_file(path,fn) + end + def manifest_txt + path=output_path.manifest.dir + make_path(path) + fn=base_filename.manifest_txt + make_file(path,fn) + end + def pot + path=output_path.pot.dir + make_path(path) + fn=base_filename.pot + make_file(path,fn) + end + def po + path=output_path.po.dir + make_path(path) + fn=base_filename.po + make_file(path,fn) + end + self + end + def place_file + def txt + def dir + output_path.txt.dir + '/' + base_filename.txt + end + def rel + output_path.txt.rel + '/' + base_filename.txt + end + self + end + def html_scroll + def dir + output_path.html_scroll.dir + '/' + base_filename.html_scroll + end + def rel + output_path.html_scroll.rel + '/' + base_filename.html_scroll + end + self + end + def html_seg_index + def dir + output_path.html_seg.dir + '/' + base_filename.html_seg_index + end + def rel + output_path.html_seg.rel + '/' + base_filename.html_seg_index + end + self + end + def html_segtoc + def dir + output_path.html_seg.dir + '/' + base_filename.html_segtoc + end + def rel + output_path.html_seg.rel + '/' + base_filename.html_segtoc + end + self + end + def html_book_index + def dir + output_path.html_seg.dir + '/' + base_filename.html_book_index + end + def rel + output_path.html_seg.rel + '/' + base_filename.html_book_index + end + self + end + def html_concordance + def dir + output_path.html_seg.dir + '/' + base_filename.html_concordance + end + def rel + output_path.html_seg.rel + '/' + base_filename.html_concordance + end + self + end + def odt + def dir + output_path.odt.dir + '/' + base_filename.odt + end + def rel + output_path.odt.rel + '/' + base_filename.odt + end + self + end + def epub + def dir + output_path.epub.dir + '/' + base_filename.epub + end + def rel + output_path.epub.rel + '/' + base_filename.epub + end + self + end + def pdf_p + STDERR.puts 'ERROR not available due to multiple page format sizes' + end + def pdf_l + STDERR.puts 'ERROR not available due to multiple page format sizes' + end + def xhtml + def dir + output_path.xhtml.dir + '/' + base_filename.xhtml + end + def rel + output_path.xhtml.rel + '/' + base_filename.xhtml + end + self + end + def xml_sax + def dir + output_path.xml.dir + '/' + base_filename.xml_sax + end + def rel + output_path.xml.rel + '/' + base_filename.xml_sax + end + self + end + def xml_dom + def dir + output_path.xml.dir + '/' + base_filename.xml_dom + end + def rel + output_path.xml.rel + '/' + base_filename.xml_dom + end + self + end + def sqlite_discreet + def dir + output_path.sqlite_discreet.dir + '/' + base_filename.sqlite_discreet + end + def rel + output_path.sqlite_discreet.rel + '/' + base_filename.sqlite_discreet + end + self + end + def hash_digest + def dir + output_path.hash_digest.dir + '/' + base_filename.hash_digest + end + def rel + output_path.hash_digest.rel + '/' + base_filename.hash_digest + end + self + end + def src + def dir + output_path.src.dir + '/' + base_filename.src + end + def rel + output_path.src.rel + '/' + base_filename.src + end + self + end + def sisupod + def dir + output_path.sisupod.dir + '/' + base_filename.sisupod + end + def rel + output_path.sisupod.rel + '/' + base_filename.sisupod + end + self + end + def po + def dir + output_path.po.dir + '/' + base_filename.po + end + def rel + output_path.po.rel + '/' + base_filename.po + end + self + end + def pot + def dir + output_path.pot.dir + '/' + base_filename.pot + end + def rel + output_path.pot.rel + '/' + base_filename.pot + end + self + end + def po_git + def dir + output_path.po_git + '/' + base_filename.po + end + def rel + #output_path.po_git + '/' + base_filename.po + end + self + end + def pot_git + def dir + output_path.pot_git + '/' + base_filename.pot + end + def rel + #output_path.pot_git + '/' + base_filename.pot + end + self + end + def manpage + def dir + output_path.manpage.dir + '/' + base_filename.manpage + end + def rel + output_path.manpage.rel + '/' + base_filename.manpage + end + self + end + def texinfo + def dir + output_path.texinfo.dir + '/' + base_filename.texinfo + end + def rel + output_path.texinfo.rel + '/' + base_filename.texinfo + end + self + end + def info + def dir + output_path.texinfo.dir + '/' + base_filename.info + end + def rel + output_path.texinfo.rel + '/' + base_filename.info + end + self + end + def qrcode_title + def dir + output_path.qrcode.dir + '/' + base_filename.qrcode_title + end + def rel + output_path.qrcode.rel + '/' + base_filename.qrcode_title + end + self + end + def qrcode_md + def dir + output_path.qrcode.dir + '/' + base_filename.qrcode_md + end + def rel + output_path.qrcode.rel + '/' + base_filename.qrcode_md + end + self + end + def manifest + def dir + output_path.manifest.dir + '/' + base_filename.manifest + end + def rel + output_path.manifest.rel + '/' + base_filename.manifest + end + self + end + self + end + def base_filename + def txt + ft='.txt' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'plain' + @md.lang_code_insert + ft + end + end + def html_scroll + ft='.html' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'scroll' + @md.lang_code_insert + ft + end + end + def html_seg_index + ft='.html' + if output_dir_structure.by_language_code? + 'index' + ft + else + 'index' + @md.lang_code_insert + ft + end + end + def html_segtoc + ft='.html' + if output_dir_structure.dump_or_redirect? + @md.fnb + '.toc' + ft + elsif output_dir_structure.by_language_code? + 'toc' + ft + else + 'toc' + @md.lang_code_insert + ft + end + end + def html_book_index + ft='.html' + if output_dir_structure.by_language_code? + 'book_index' + ft + else + 'book_index' + @md.lang_code_insert + ft + end + end + def html_concordance + ft='.html' + if output_dir_structure.dump_or_redirect? + @md.fnb + '.concordance' + ft + elsif output_dir_structure.by_language_code? + 'concordance' + ft + else + 'concordance' + @md.lang_code_insert + ft + end + end + def xhtml + ft= '.xhtml' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'scroll' + @md.lang_code_insert + ft + end + end + def epub + ft='.epub' + if output_dir_structure.by_language_code? + @md.fnb + ft + else + @md.fnb + @md.lang_code_insert + ft + end + end + def odt + ft='.odt' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'opendocument' + @md.lang_code_insert + ft + end + end + def xml_sax + ft='.sax.xml' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'scroll' + @md.lang_code_insert + ft + end + end + def xml_dom + ft='.dom.xml' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'scroll' + @md.lang_code_insert + ft + end + end + def pdf_p + if output_dir_structure.by_language_code? + @md.fnb + '.portrait.' + else 'portrait' + @md.lang_code_insert + '.' + end + end + def pdf_l + if output_dir_structure.by_language_code? + @md.fnb + '.landscape.' + else 'landscape' + @md.lang_code_insert + '.' + end + end + def pdf_p_a4 + pdf_p + @md.fn[:pdf_p_a4] + end + def pdf_p_a5 + pdf_p + @md.fn[:pdf_p_a5] + end + def pdf_p_b5 + pdf_p + @md.fn[:pdf_p_b5] + end + def pdf_p_letter + pdf_p + @md.fn[:pdf_p_letter] + end + def pdf_p_legal + pdf_p + @md.fn[:pdf_p_legal] + end + def pdf_l_a4 + pdf_l + @md.fn[:pdf_l_a4] + end + def pdf_l_a5 + pdf_l + @md.fn[:pdf_l_a5] + end + def pdf_l_b5 + pdf_l + @md.fn[:pdf_l_b5] + end + def pdf_l_letter + pdf_l + @md.fn[:pdf_l_letter] + end + def pdf_l_legal + pdf_l + @md.fn[:pdf_l_legal] + end + def manpage + ft='1' + if output_dir_structure.by_language_code? + @md.fnb + '.' + ft + else + @md.fnb + '.' + @md.opt.f_pth[:lng_is] + '.' + ft + end + end + def info + ft='info' + if output_dir_structure.by_language_code? + @md.fnb + '.' + ft + else + @md.fnb + '.' + @md.opt.f_pth[:lng_is] + '.' + ft + end + end + def texinfo + ft='texinfo' + if output_dir_structure.by_language_code? + @md.fnb + '.' + ft + else + @md.fnb + '.' + @md.opt.f_pth[:lng_is] + '.' + ft + end + end + def sqlite_discreet + ft='.sql.db' + if output_dir_structure.by_language_code? + @md.fnb + ft + else + @md.fnb + @md.lang_code_insert + ft + end + end + def hash_digest + ft='.txt' + if output_dir_structure.by_language_code? + @md.fnb + '.hash_digest' + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'digest' + @md.lang_code_insert + ft + end + end + def sitemap + ft='.xml' + if output_dir_structure.by_language_code? + @md.fnb + '.sitemap' + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else + 'sitemap' + @md.lang_code_insert + ft + end + end + def qrcode_title + ft='.title.png' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else #fix + 'sisu_manifest' + @md.lang_code_insert + ft + end + end + def qrcode_md + ft='.md.png' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else #fix + 'sisu_manifest' + @md.lang_code_insert + ft + end + end + def manifest_txt + ft='.txt' + if output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else #fix + 'sisu_manifest' + @md.lang_code_insert + ft + end + end + def manifest + ft='.html' + if output_dir_structure.dump_or_redirect? + @md.fnb + '.manifest' + ft + elsif output_dir_structure.by_language_code? + @md.fnb + ft + elsif output_dir_structure.by_filetype? + @md.fnb + @md.lang_code_insert + ft + else #fix + 'sisu_manifest' + @md.lang_code_insert + ft + end + end + def src + @md.fno + end + def po #check + (@fno.empty?) \ + ? (@md.fn[:po]) + : (@fno + '.po') + end + def pot + (@fno.empty?) \ + ? (@md.fn[:pot]) + : (@fno + '.pot') + end + def sisupod + (@md.fns =~/\.ssm\.sst$/) \ + ? @md.fns.gsub(/(?:\~\S{2,3})?\.ssm\.sst$/,'.ssm.txz') + : @md.fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1.txz') + end + self + end + def set_path(ft) + @ft=ft + def dir + def abc + if output_dir_structure.redirect? + "#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}" + elsif output_dir_structure.dump? + @md.opt.opt_act[:dump][:inst] + elsif output_dir_structure.by_language_code? + "#{output_path.base.dir}/#{@md.opt.lng}/#{@ft}" + elsif output_dir_structure.by_filetype? + "#{output_path.base.dir}/#{@ft}" + else + "#{output_path.base.dir}/#{@md.fnb}" + end + end + def ab + if output_dir_structure.redirect? + "#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}" + elsif output_dir_structure.dump? + @md.opt.opt_act[:dump][:inst] + elsif output_dir_structure.by_language_code? + "#{output_path.base.dir}/#{@md.opt.lng}/#{@ft}" + else + "#{output_path.base.dir}/#{@ft}" + end + end + def ab_src + if output_dir_structure.redirect? + "#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}" + elsif output_dir_structure.dump? + @md.opt.opt_act[:dump][:inst] + else + "#{output_path.base.dir}/#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" + end + end + def ab_pod + if output_dir_structure.redirect? + "#{@md.opt.opt_act[:redirect][:inst]}/#{@md.fnb}" + elsif output_dir_structure.dump? + @md.opt.opt_act[:dump][:inst] + else + "#{output_path.base.dir}/#{@ft}" + end + end + self + end + def url + def abc + if output_dir_structure.by_language_code? + "#{output_path.base.url}/#{@md.opt.lng}/#{@ft}" + elsif output_dir_structure.by_filetype? + "#{output_path.base.url}/#{@ft}" + else + "#{output_path.base.url}/#{@md.fnb}" + end + end + def ab + if output_dir_structure.by_language_code? + "#{output_path.base.url}/#{@md.opt.lng}/#{@ft}" + else + "#{output_path.base.url}/#{@ft}" + end + end + def ab_src + "#{output_path.base.url}/#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" + end + def ab_pod + "#{output_path.base.url}/#{@ft}" + end + self + end + def rel + def abc + if output_dir_structure.by_language_code? + "#{@md.opt.lng}/#{@ft}" + elsif output_dir_structure.by_filetype? + "#{@ft}" + else + "#{@md.fnb}" + end + end + def ab + if output_dir_structure.by_language_code? + "#{@md.opt.lng}/#{@ft}" + else + "#{@ft}" + end + end + def ab_src + @ft + end + def ab_pod + @ft + end + self + end + def rel_sm + def abc + if output_dir_structure.by_language_code? + "#{@md.opt.lng}/#{@ft}" + elsif output_dir_structure.by_filetype? + "#{@ft}" + else + "#{@md.fnb}" + end + end + def ab + if output_dir_structure.dump_or_redirect? + '.' + elsif output_dir_structure.by_language_code? \ + or output_dir_structure.by_filetype? + '../' + @ft + else '.' + end + end + def ab_src + locate="#{@ft}/#{@md.opt.fng}/#{Gt[:sisupod]}/#{Gt[:doc]}/#{@md.opt.lng}" + if output_dir_structure.dump_or_redirect? + '.' + elsif output_dir_structure.by_language_code? + "../../#{locate}" + else + "../#{locate}" + end + end + def ab_pod + if output_dir_structure.dump_or_redirect? + '.' + elsif output_dir_structure.by_language_code? + "../../#{@ft}/#{@md.opt.lng}" + else + "../#{@ft}" + end + end + self + end + def rcp + def abc + if output_dir_structure.by_language_code? + "#{output_path.stub.rcp}/#{@md.opt.lng}/#{@ft}" + elsif output_dir_structure.by_filetype? + "#{output_path.stub.rcp}/#{@ft}" + else + "#{output_path.stub.rcp}/#{@md.fnb}" + end + end + def ab + if output_dir_structure.by_language_code? + "#{output_path.stub.rcp}/#{@md.opt.lng}/#{@ft}" + else + "#{output_path.stub.rcp}/#{@ft}" + end + end + self + end + self + end + def output_path + def web_base + def dir + @env.path.webserv + end + def url + #"#{@env.url.root}" + end + def rel + '.' + end + def rcp + '.' + end + self + end + def stub + def dir + "#{@md.opt.f_pth[:pth_stub]}" + end + #def url + # "#{@env.url.root}" + #end + def rel + "./#{@md.opt.f_pth[:pth_stub]}" + end + def rcp + "#{@md.opt.f_pth[:pth_stub]}" + end + self + end + def webserver_path + if output_dir_structure.dump? + @md.opt.opt_act[:dump][:inst] + elsif output_dir_structure.redirect? + @md.opt.opt_act[:redirect][:inst] + else + @env.path.webserv + end + end + def base + def dir + "#{webserver_path}/#{@md.opt.f_pth[:pth_stub]}" + end + def url + "#{@env.url.webserv}/#{@md.opt.f_pth[:pth_stub]}" + end + def rel + "./#{@md.opt.f_pth[:pth_stub]}" + end + def rcp + "./#{@md.opt.f_pth[:pth_stub]}" + end + self + end + def sisugit + def dir + "#{output_path.base.dir}/git" + end + def url + "#{output_path.base.url}/git" + end + def rel + "#{output_path.base.rel}/git" + end + def rcp + "#{output_path.base.rcp}/git" + end + self + end + #def pod + # ft='pod' + # path=set_path(ft).dir.ab + #end + def src + def ft + Gt[:src] + end + def dir + set_path(ft).dir.ab_src + end + def url + set_path(ft).url.ab_src + end + def rel + set_path(ft).rel.ab_src + end + def rcp + set_path(ft).rcp.ab_src + end + def rel_sm + set_path(ft).rel_sm.ab_src + end + self + end + def sisupod + def ft + Gt[:src] + end + def dir + set_path(ft).dir.ab_pod + end + def url + set_path(ft).url.ab_pod + end + def rel + set_path(ft).rel.ab_pod + end + def rcp + set_path(ft).rcp.ab_pod + end + def rel_sm + set_path(ft).rel_sm.ab_pod + end + self + end + def po + def dir + "#{output_path.base.dir}/#{Gt[:src]}/#{@md.opt.fng}/po4a/po/#{@md.opt.lng}" + end + def url + "#{output_path.base.url}/po4a/#{@md.fnb}/po/#{@md.opt.lng}" + end + self + end + def pot + def dir + "#{output_path.base.dir}/#{Gt[:src]}/#{@md.opt.fng}/po4a/pot" + end + def url + "#{output_path.base.url}/po4a/#{@md.fnb}/pot" + end + def rcp + #p "#{output_path.base.dir}/po4a/#{@md.fnb}/pot" + end + self + end + def po_git # consider !!! + def ft + Gt[:po] + end + def dir + pth=@env.processing_path.git + '/' + @md.fnb + '/' + ft + '/' + @md.opt.lng + FileUtils::mkdir_p(pth) unless FileTest.directory?(pth) + pth + end + self + end + def pot_git # consider !!! + def ft + Gt[:pot] + end + def dir + @env.processing_path.git + '/' + @md.fnb + '/' + ft + end + self + end + def md_harvest + manifest + self + end + def txt + def ft + 'txt' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def html_scroll + def ft + 'html' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + if output_dir_structure.dump_or_redirect? + './image' + elsif output_dir_structure.by_language_code? + '../../_sisu/image' + elsif output_dir_structure.by_filetype? + '../_sisu/image' + else + '../_sisu/image' + end + end + self + end + def html_seg + def ft + "html/#{@md.fnb}" + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + if output_dir_structure.dump_or_redirect? + './image' + elsif output_dir_structure.by_language_code? + '../../../_sisu/image' + elsif output_dir_structure.by_filetype? + '../../_sisu/image' + else + '../_sisu/image' + end + end + self + end + def html_concordance + html_seg + self + end + def html + def ft + 'html' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).url.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + if output_dir_structure.by_language_code? + '../../_sisu/image' + elsif output_dir_structure.by_filetype? + '../_sisu/image' + else + '../_sisu/image' + end + end + self + end + def xhtml + def ft + 'xhtml' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + '../../_sisu/image' + end + self + end + def epub + def ft + 'epub' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + './image' + end + self + end + def odt + def ft + 'odt' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def xml + def ft + 'xml' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + def rel_image + '../../_sisu/image' + end + self + end + def xml_sax + xml + self + end + def xml_dom + xml + self + end + def pdf + def ft + 'pdf' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def sqlite_discreet + def ft + 'sql' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def hash_digest + def ft + 'hashes' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def manifest + def ft + 'manifest' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + self + end + def qrcode + def ft + 'manifest/qrcode' + end + def dir + set_path(ft).dir.abc + end + def url + set_path(ft).url.abc + end + def rel + set_path(ft).rel.abc + end + def rcp + set_path(ft).rcp.abc + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def harvest + def ft + 'site_metadata' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + def rel_sm + if output_dir_structure.by_language_code? + '' + elsif output_dir_structure.by_filetype? + '' + else + '' + end + end + self + end + def manpage + def ft + 'man' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def texinfo + def ft + 'texinfo' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + def rel_sm + set_path(ft).rel_sm.ab + end + self + end + def sitemaps + def ft + 'sitemaps' + end + def dir + set_path(ft).dir.ab + end + def url + set_path(ft).url.ab + end + def rel + set_path(ft).rel.ab + end + def rcp + set_path(ft).rcp.ab + end + self + end + def sqlite #check url + def dir + output_path.base.dir + end + def url + output_path.base.url + end + def rel + output_path.base.rel + end + def rcp + output_path.base.rcp + end + self + end + #def cgi + #end + def css + @d='_sisu/css' + def dir + output_path.base.dir + '/' + @d + end + def url + output_path.base.url + '/' + @d + end + def rel + @d + #output_path.base.rel + '/' + @d + end + def rcp + output_path.stub.rcp + '/' + @d + end + self + end + def images + @d='_sisu/image' + def dir + output_path.base.dir + '/' + @d + end + def url + output_path.base.url + '/' + @d + end + def rel + @d + #output_path.base.rel + '/' + @d + end + def rcp + output_path.stub.rcp + '/' + @d + end + self + end + def images_external + @d='_sisu/image_external' + def dir + output_path.base.dir + '/' + @d + end + def url + output_path.base.url + '/' + @d + end + def rel + output_path.base.rel + '/' + @d + end + def rcp + output_path.base.rcp + '/' + @d + end + self + end + #def css + # #"#{@env.path.output}/#{@env.path.style}" + #end + self + end + end + class CreateFile <InfoEnv #todo unify with FileOp + def initialize(fns) + begin + super(fns) + @env=SiSU_Env::InfoEnv.new(fns) + rescue + SiSU_Screen::Ansi.new('',$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def html_root + #@env.path.output + end + def mkdir_pdf + Dir.mkdir(@env.processing_path.tex) unless FileTest.directory?(@env.processing_path.tex) + end + def file_generic(output_file='') + filename="#{@env.path.output}/#{@fnb}/#{output_file}" + File.new(filename,'w+') + end + def file_error + File.new('/tmp/errorlog.sisu','w+') + end + def file_txt + File.new("#{@env.processing_path.dal}/#{@fns}.txt",'w+') + end + def file_debug + File.new("#{@env.processing_path.dal}/#{@fns}.debug.txt",'w+') + end + def metaverse + def file_meta + File.new("#{@env.processing_path.dal}/#{@fns}.meta",'w+') + end + def file_meta_idx_html + File.new("#{@env.processing_path.dal}/#{@fns}.idx.html",'w+') + end + self + end + def file_note + File.new("#{Dir.pwd}/#{@fns}.fn",'w+') + end + def meta + "#{@env.processing_path.dal}/#{@fns}.meta" + end + def file_semantic + filename_semantic="./semantic.yaml" + @@filename_semantic=File.new(filename_semantic,'w+') + end + def file_rss + filename_rss="./semantic.xml" + @@filename_rss=File.new(filename_rss,'w+') + end + def epub + @pth=@env.processing_path.epub + def xhtml_index + filename_index="#{@pth}/#{Ep[:d_oebps]}/index.xhtml" + File.new(filename_index,'w+') + end + def xhtml_segtoc + filename_segtoc="#{@pth}/#{Ep[:d_oebps]}/toc.xhtml" + File.new(filename_segtoc,'w+') + end + def mimetype #fixed application/epub+zip ~/grotto/theatre/dbld/builds/epub_sample/mimetype + File.new("#{@pth}/mimetype",'w') + end + def metadata #variable matadata ~/grotto/theatre/dbld/builds/epub_sample/metadata.opf + File.new("#{@pth}/#{Ep[:d_oebps]}/#{Ep[:f_opf]}",'w') + end + def toc_ncx #variable toc ~/grotto/theatre/dbld/builds/epub_sample/toc.ncx + File.new("#{@pth}/#{Ep[:d_oebps]}/#{Ep[:f_ncx]}",'w') + end + def metainf_cont #variable content ~/grotto/theatre/dbld/builds/epub_sample/META-INF/container.xml + File.new("#{@pth}/META-INF/container.xml",'w') + end + def xhtml_css #fixed epub xhtml css + File.new("#{@pth}/#{Ep[:d_oebps]}/css/xhtml.css",'w') + end + self + end + def file_texinfo + File.new("#{@env.processing_path.texinfo}/#{@fnb}.texinfo",'w+') + end + end + class Clear <InfoEnv #todo unify with FileOp + def initialize(cmd,fns,operation='') + @cmd=cmd + begin + super(fns) + @env=SiSU_Env::InfoEnv.new(fns) + ver=InfoVersion.instance + if operation.class.inspect =~/SiSU_Param/ + @md=operation + end + case operation #watch + when /pdf/; @env_out='' + when /sql/ + when /xml|plaintext|ascii/; @env_out="#{@env.path.output}/#{@fnb}" #check change of name to plaintext from ascii + else + if defined? @md.sfx_src \ + and @md.sfx_src =~/ss[ftsumc]/ + @env_suf='lm' + @env_out_root=@env.path.output + @env_out="#{@env.path.output}/#{@fnb}" + @@publisher='SiSU http://www.jus.uio.no/sisu' + @env_pdf="#{@env_out_root}/pdf" + end + end + rescue + SiSU_Screen::Ansi.new(@cmd,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def param_instantiate + @cX||=SiSU_Screen::Ansi.new(@cmd) + @@date=SiSU_Env::InfoDate.new + @@proc=@@filename_txt=@@filename_texinfo=@@filename_lout_portrait=@@filename_lout_landscape=@@filename_html_scroll=@@filename_html_index=@@filename_html_segtoc=@@filename_semantic=@@filename_rss=@@newfile=@@drr=@@yaml=@@yamladdr=nil + @@publisher='SiSU scribe' + end + end + class InfoPort < InfoEnv + def initialize + @env=SiSU_Env::InfoEnv.new + end + def webrick + @env.port.webrick_port + end + end + class InfoProgram < InfoEnv #revisit + attr_accessor :editor,:wc,:tidy,:rexml,:pdflatex,:postgresql,:sqlite + def initialize + prog=SiSU_Env::InfoEnv.new.program + @editor,@wc,@tidy,@rexml,@pdflatex,@postgresql,@sqlite=prog.text_editor,prog.wc,prog.tidy,prog.rexml,prog.pdflatex,prog.postgresql,prog.sqlite + end + end + class InfoSkin + def initialize(md=nil,skin=nil) + @md=md + @d_sk=if skin.is_a?(String) + skin + elsif defined? md.doc_skin \ + and md.doc_skin + md.doc_skin + else nil + end + @home,@pwd=ENV['HOME'],ENV['PWD'] + m=/.+\/(?:src\/)?(\S+)/m # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + @pwd_stub=@pwd[m,1] + @env=SiSU_Env::InfoEnv.new + end + def apply + if @m.respond_to?(:make) \ + and @md.make.respond_to(:skin) + skin_path=unless @md.opt.f_pth[:pth] =~/\/\S+?\/#{Gt[:sisupod]}\/\S+?\/#{Gt[:pod]}\/#{Gt[:doc]}/ + [ + "#{@env.path.pwd}/_sisu/skin", + "#{@env.path.home}/.sisu/skin", + '/etc/sisu/skin', + "#{@env.processing_path.processing_sisupod(@md.opt)}/external_document/skin" + ] + else #sisupod + pt=/(\/\S+?\/#{Gt[:sisupod]}\/\S+?\/#{Gt[:pod]}\/#{Gt[:doc]})/.match(@md.opt.f_pth[:pth])[1] + [ "#{pt}/_sisu/skin" ] + end + sk_doc,sk_dir="doc/#{@md.make.skin}.rb","dir/skin_#{@env.stub_pwd}.rb" + skin_path.each do |v| #document skin priority 1 + if FileTest.file?("#{v}/#{sk_doc}") + @skin_apply={ name: @md.make.skin, name_path: "#{v}/#{sk_doc}", type: :doc } + break + end + end + unless @skin_apply.length > 0 + skin_path.each do |v| #directory skin priority 2 + if FileTest.file?("#{v}/#{sk_dir}") + @skin_apply={ name: "skin_#{@env.stub_pwd}.rb", name_path: "#{v}/#{sk_dir}", type: :dir } + break + end + end + end + else nil + end + @skin_apply + end + def select # skin loading logic here + load "#{SiSU_lib}/defaults.rb" + skin_path=[] + @env.sys.rc_path.each {|x| skin_path << "#{x}/skin"} + skin_path << "#{@env.processing_path.processing}/external_document/skin" + skin=if @pwd_stub =~/^(?:doc|sisupod)$/ \ + and ((! @md.nil?) \ + && (defined? @md.opt) \ + && (defined? @md.opt.mod) \ + && @md.opt.mod.inspect !~/--trust/) + true # security only run skins on sisupod if --trust flag is provided + elsif @pwd_stub =~/^(?:doc|sisupod)$/ # consider/reconsider doc + false + else true + end + doc_skin,dir_skin=nil,nil + if skin + unless @d_sk.nil? + sk_doc="doc/#{@d_sk}.rb" + skin_path.each do |v| # document skin priority 1 + if FileTest.file?("#{v}/#{sk_doc}") + doc_skin="#{v}/#{sk_doc}" + load doc_skin + break + end + end + end + unless doc_skin + sk_dir="dir/skin_#{@pwd_stub}.rb" + skin_path.each do |v| # directory skin priority 2 + if FileTest.file?("#{v}/#{sk_dir}") + dir_skin="#{v}/#{sk_dir}" + load dir_skin + break + end + end + end + end + sk=if doc_skin; doc_skin + elsif dir_skin; dir_skin + else nil + end + end + end + class CSS_Default + def html + 'html.css' + end + def html_tables + 'html_tables.css' + end + def xhtml + 'xhtml.css' + end + def xml_sax + 'sax.css' + end + def xml_dom + 'dom.css' + end + def docbook_xml + 'docbook.css' + end + def homepage + 'homepage.css' + end + def harvest + 'harvest.css' + end + end + class CSS_Select < InfoEnv + def initialize(md) + @md=md + @env=SiSU_Env::InfoEnv.new('',@md) + end + def html + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html.css") + "#{@md.doc_css}_html.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_html.css") + "#{@env.path.stub_pwd}_html.css" + else + SiSU_Env::CSS_Default.new.html + end + end + def html_tables + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_html_tables.css") + "#{@md.doc_css}_html_tables.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_html_tables.css") + "#{@env.path.stub_pwd}_html_tables.css" + else SiSU_Env::CSS_Default.new.html_tables + end + end + def xhtml + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xhtml.css") + "#{@md.doc_css}_xhtml.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xhtml.css") + "#{@env.path.stub_pwd}_xhtml.css" + else SiSU_Env::CSS_Default.new.xhtml + end + end + def xml_sax + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_sax.css") + "#{@md.doc_css}_xml_sax.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xml_sax.css") + "#{@env.path.stub_pwd}_xml_sax.css" + else SiSU_Env::CSS_Default.new.xml_sax + end + end + def xml_dom + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_xml_dom.css") + "#{@md.doc_css}_xml_dom.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_xml_dom.css") + "#{@env.path.stub_pwd}_xml_dom.css" + else SiSU_Env::CSS_Default.new.xml_dom + end + end + def docbook_xml + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_docbook.css") + "#{@md.doc_css}_xml_dom.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_docbook.css") + "#{@env.path.stub_pwd}_docbook.css" + else SiSU_Env::CSS_Default.new.docbook_xml + end + end + def homepage + css=if @md.doc_css \ + and FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@md.doc_css}_homepage.css") + "#{@md.doc_css}_homepage.css" + elsif FileTest.file?("#{@env.path.output}/#{@env.path.style}/#{@env.path.stub_pwd}_homepage.css") + "#{@env.path.stub_pwd}_homepage.css" + else SiSU_Env::CSS_Default.new.homepage + end + end + end + class CSS_Stylesheet + def initialize(md) + @md=md + @css=SiSU_Env::CSS_Select.new(@md) + @env=SiSU_Env::InfoEnv.new('',@md) + @file=SiSU_Env::FileOp.new(@md) + end + def html + %{ <link rel="stylesheet" href="#{@file.path_rel_links.html_scroll_css}#{@env.path.style}/#{@css.html}" type="text/css" />} + end + def html_seg + %{ <link rel="stylesheet" href="#{@file.path_rel_links.html_seg_css}#{@env.path.style}/#{@css.html}" type="text/css" />} + end + def html_tables + %{ <link rel="stylesheet" href="#{@file.path_rel_links.html_seg_css}#{@env.path.style}/#{@css.html}" type="text/css" />} + end + def xhtml_epub + %{ <link rel="stylesheet" href="css/xhtml.css" type="text/css" />} + end + def epub + xhtml_epub + end + def xhtml + %{<?xml-stylesheet type="text/css" href="#{@file.path_rel_links.xhtml_css}#{@env.path.style}/#{@css.xhtml}"?>} + end + def xml_sax + %{<?xml-stylesheet type="text/css" href="#{@file.path_rel_links.xml_css}#{@env.path.style}/#{@css.xml_sax}"?>} + end + def xml_dom + %{<?xml-stylesheet type="text/css" href="#{@file.path_rel_links.xml_css}#{@env.path.style}/#{@css.xml_dom}"?>} + end + end + class CreateSite < InfoEnv + require_relative 'css' # css.rb + include SiSU_Style + def initialize(cmd) + @cmd=cmd + @env=SiSU_Env::InfoEnv.new + @home,@pwd=ENV['HOME'],ENV['PWD'] #@pwd=Dir.pwd + @rc=GetInit.instance.sisu_yaml.rc + @vz=SiSU_Env::GetInit.instance.skin + @vz_home=SiSU_Viz::Home.new + end + def homepage + home_pages_manually_created=nil + @env.sys.rc_path.each do |v| + home_pages_manually_created=Dir.glob("#{v}/home/*.html") + if home_pages_manually_created.length > 0 + break + end + end + FileUtils::mkdir_p("#{@env.path.webserv}/#{@env.path.stub_pwd}") unless FileTest.directory?("#{@env.path.webserv}/#{@env.path.stub_pwd}") + if home_pages_manually_created + FileUtils.cp(home_pages_manually_created,"#{@env.path.webserv}/#{@env.path.stub_pwd}") + else + doc_skin=nil + sk_doc='doc/skin_sisu.rb' + @env.sys.rc_path.each do |v| #document skin priority 1 + if FileTest.file?("#{v}/skin/#{sk_doc}") + doc_skin="#{v}/skin/#{sk_doc}" + load doc_skin + break + end + end + filename_homepage=File.new("#{@env.path.webserv}/#{@env.path.stub_pwd}/index.html",'w') + filename_homepage_toc=File.new("#{@env.path.webserv}/#{@env.path.stub_pwd}/toc.html",'w') + filename_homepage << @vz_home.homepage + filename_homepage_toc << @vz_home.homepage + end + end + def cp_images(src_path,dest_path) + if FileTest.directory?(src_path) + FileUtils::cd(src_path) + source=Dir.glob("*.{png,jpg,gif,ico}") + FileUtils::mkdir_p(dest_path) unless FileTest.directory?(dest_path) + FileUtils::chmod(0755,dest_path) + source.each do |i| + if FileTest.file?(i) + FileUtils::cp(i,"#{dest_path}/#{i}") + FileUtils::chmod(0644,"#{dest_path}/#{i}") + else STDERR.puts %{\t*WARN* did not find image - "#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + FileUtils::cd(@pwd) + else STDERR.puts %{\t*WARN* did not find - #{src_path} [#{__FILE__}:#{__LINE__}]} + end + end + def cp_local_images + src="#{@pwd}/_sisu/image" + dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" + cp_images(src,dest) if FileTest.directory?(src) + end + def cp_external_images + src="#{@env.processing_path.processing}/external_document/image" + dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external" + if FileTest.directory?(src) + cp_images(src,dest) if FileTest.directory?(src) + end + end + def cp_webserver_images + src=@env.path.image_source + dest_arr=[ + "#{@env.path.webserv}/_sisu/image", + "#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" + ] + dest_arr.each do |dest| + cp_images(src,dest) if FileTest.directory?(src) + end + end + def cp_webserver_images_local #this should not have been necessary + src=@env.path.image_source + dest="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image" + cp_images(src,dest) if FileTest.directory?(src) + end + def cp_base_images #fix images + src="#{@env.path.share}/image" + dest_arr=[ + "#{@env.path.webserv}/_sisu/image_sys", + "#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_sys" + ] + dest_arr.each do |dest| + cp_images(src,dest) if FileTest.directory?(src) + end + end + def cp_css + FileUtils::mkdir_p("#{@env.path.output}/#{@env.path.style}") unless FileTest.directory?("#{@env.path.output}/#{@env.path.style}") + css_path=['/etc/sisu/css',"#{@home}/.sisu/css","#{@pwd}/_sisu/css"] #BROKEN + if defined? @rc['permission_set']['css_modify'] \ + and @rc['permission_set']['css_modify'] + SiSU_Screen::Ansi.new(@cmd,"*WARN* modify is css set to: #{@rc['permission_set']['css_modify']}").warn if @cmd=~/[MV]/ + css_path.each do |x| + if FileTest.directory?(x) + FileUtils::cd(x) + source=Dir.glob("*.{css}") + source.each do |i| + if FileTest.file?(i) + FileUtils::cp(i,"#{@env.path.output}/#{@env.path.style}") + else STDERR.puts %{\t*WARN* did not find css - "#{i}" [#{__FILE__}:#{__LINE__}]} + end + end + FileUtils::cd(@pwd) + end + end + else SiSU_Screen::Ansi.new(@cmd,"*WARN* modify css is not set or is set to: false").warn if @cmd=~/[MV]/ + end + fn_css=SiSU_Env::CSS_Default.new + css=SiSU_Style::CSS.new + path_style="#{@env.path.output}/#{@env.path.style}" + FileUtils::mkdir_p(path_style) unless FileTest.directory?(path_style) + if @cmd =~/C/ \ + or not FileTest.file?("#{path_style}/#{fn_css.homepage}") + style=File.new("#{path_style}/#{fn_css.homepage}",'w') + style << css.homepage + style.close + end + if @cmd =~/C/ \ + or not FileTest.file?("#{path_style}/#{fn_css.html_tables}") + style=File.new("#{path_style}/#{fn_css.html_tables}",'w') + style << css.html_tables + style.close + end + if @cmd =~/C/ \ + or not FileTest.file?("#{path_style}/#{fn_css.html}") + style=File.new("#{path_style}/#{fn_css.html}",'w') + style << css.html + style.close + end + if @cmd =~/C/ \ + or not FileTest.file?("#{path_style}/#{fn_css.harvest}") + style=File.new("#{path_style}/#{fn_css.harvest}",'w') + style << css.harvest + style.close + end + if @cmd =~/C/ \ + or (@cmd =~/[x]/ \ + and not FileTest.file?("#{path_style}/#{fn_css.xml_sax}")) + style=File.new("#{path_style}/#{fn_css.xml_sax}",'w') + style << css.xml_sax + style.close + end + if @cmd =~/C/ \ + or (@cmd =~/[X]/ \ + and not FileTest.file?("#{path_style}/#{fn_css.xml_dom}")) + style=File.new("#{path_style}/#{fn_css.xml_dom}",'w') + style << css.xml_dom + style.close + end + if @cmd =~/C/ \ + or (@cmd =~/[b]/ \ + and not FileTest.file?("#{path_style}/#{fn_css.xhtml}")) + style=File.new("#{path_style}/#{fn_css.xhtml}",'w') + style << css.xhtml + style.close + end + end + end +end +module SiSU_Screen + require_relative 'screen_text_color' # screen_text_color.rb +end +module SiSU_Errors + require_relative 'errors' # errors.rb +end +__END__ +https? intro check 2007-09-22 diff --git a/lib/sisu/v2/termsheet.rb b/lib/sisu/v4/termsheet.rb index 8640f9a9..c376871c 100644 --- a/lib/sisu/v2/termsheet.rb +++ b/lib/sisu/v4/termsheet.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -58,8 +57,8 @@ sample files must be provided - (saved till later as may confuse) =end -require "#{SiSU_lib}/sysenv" # sysenv.rb -require "#{SiSU_lib}/param" # param.rb +require_relative 'sysenv' # sysenv.rb +require_relative 'param' # param.rb include SiSU_Param @do,@done,@used,@html_output,@txt_input,@txt_output,@@report=Array.new(7){[]} @@info=nil @@ -70,9 +69,9 @@ def talent(termsheet,flag) no_ocn='0' if flag =~/0/ #flag to request switch off of text object numbering @@info=nil @@info=termsheet.gsub(/(.+?)\.termsheet\.rb/,'../facility_data/\1.html') - @env=SiSU_Env::Info_env.new + @env=SiSU_Env::InfoEnv.new @dir_fd="#{@env.path.output}/facility_data" - mkdir_p(@dir_fd) unless FileTest.directory?(@dir_fd)==true + FileUtils::mkdir_p(@dir_fd) unless FileTest.directory?(@dir_fd)==true html_output=[] case termsheet when /.+?\.(termsheet)\.rb$/ @@ -121,7 +120,7 @@ WOK @@report << @done << @used << "\n" @done,@used=[],[] end -require "#{SiSU_lib}/param" # param.rb +require_relative 'param' # param.rb @argv=$* @proc="#{@argv[0].to_s}" if @proc =~ /^-?[wft]/ @@ -130,7 +129,7 @@ if @proc =~ /^-?[wft]/ talent(termsheet,@proc) end end -@env=SiSU_Env::Info_env.new +@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} diff --git a/lib/sisu/v2/texinfo.rb b/lib/sisu/v4/texinfo.rb index bcff4915..fb54ceda 100644 --- a/lib/sisu/v2/texinfo.rb +++ b/lib/sisu/v4/texinfo.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,13 +56,13 @@ =end module SiSU_TexInfo - require "#{SiSU_lib}/html" # html.rb - require "#{SiSU_lib}/param" # param.rb + require_relative 'html' # html.rb + require_relative 'param' # param.rb include SiSU_Param include SiSU_Viz #include Stamp ... needed removed arbitrarily 2005w05/1 (warnings about undefined flags) - require "#{SiSU_lib}/texinfo_format" # texinfo_format.rb - include SiSU_Texinfo_format + require_relative 'texinfo_format' # texinfo_format.rb + include SiSU_TexInfoFormat @tex_file=[] @@tabular="{tabular}" @@table_pagebreak_counter,@@tex_endnote_call_counter,@@tex_table_flag,@@tex_counter,@@tex_column,@@tex_columns,@@counting=0,0,0,0,0,0,0 @@ -77,17 +76,21 @@ module SiSU_TexInfo include SiSU_TexInfo def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new(@opt.fns) - @vz=SiSU_Env::Get_init.instance.skin + @md=SiSU_Param::Parameters.new(@opt).get + @env=SiSU_Env::InfoEnv.new(@opt.fns) + @vz=SiSU_Env::GetInit.instance.skin end def directories begin case @opt.fns when /\.(?:-|ssm\.)?sst$/ Dir.mkdir(@env.path.output) unless FileTest.directory?("#{@env.path.output}") - Dir.mkdir(@env.path.texi) unless FileTest.directory?(@env.path.tex) + Dir.mkdir(@env.processing_path.texi) unless FileTest.directory?(@env.processing_path.texi) + end + rescue + SiSU_Screen::Ansi.new(opt,$!,$@).rescue do + __LINE__.to_s + ':' + __FILE__ end - rescue; STDERR.puts SiSU_Screen::Ansi.new(@opt.cmd,$!,$@).rescue ensure end end @@ -96,99 +99,107 @@ module SiSU_TexInfo end def song begin - unless @opt.cmd =~/q/ - tell=SiSU_Screen::Ansi.new(@opt.cmd,'TexInfo') - tell.green_title_hi - end + tool=(@opt.cmd =~/[MVv]/) \ + ? "#{@env.program.texinfo} #{@md.file.output_path.texinfo.dir}/#{@md.file.base_filename.info}" + : "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" + tell=@opt.cmd=~/[MVvz]/ \ + && @opt.cmd !~/q/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'TexInfo',tool).green_hi_blue + : SiSU_Screen::Ansi.new(@opt.cmd,'TexInfo',tool).green_title_hi + tell @md=SiSU_Param::Parameters.new(@opt).get - puts "\t#{@@cX.grey}TexInfo#{@@cX.off}" - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) directories - @marshalfile=my_make.dal_content + @marshalfile=SiSU_Env::InfoFile.new(@opt.fns).marshal.dal_content if FileTest.file?(@marshalfile)==true File.open(@marshalfile) { |f| @@tuned_file=Marshal.load(f)} - tell.meta_verse_skipped unless @opt.cmd =~/q/ + #tell.meta_verse_skipped if @opt.cmd =~/[vVM]/ else tex_array=IO.readlines(@opt.fns,'') SiSU_Metaverse.songsheet(tex_array) end tex_array=@@tuned_file - Texinfo_make.new(@md,tex_array).songsheet + TeXinfoMake.new(@md,tex_array).songsheet tex_array='' rescue; STDERR.puts SiSU_Screen::Ansi.new(@opt.cmd,$!,$@).rescue ensure end end end - class Texinfo_make + class TeXinfoMake include SiSU_Param - include SiSU_Texinfo_format + include SiSU_TexInfoFormat @@tex_1='(?:.+?)+~' #?? debug @@tabular="{tabular}" @@tex_pattern_margin_number="\\\\marginpar.+?\s+" def initialize(md,data) @md,@data=md,data - @env=SiSU_Env::Info_env.new(@md.fns) - @vz=SiSU_Env::Get_init.instance.skin + @env=SiSU_Env::InfoEnv.new(@md.fns) + @vz=SiSU_Env::GetInit.instance.skin + @f=SiSU_Env::FileOp.new(@md) end def songsheet begin - @data=pre - @data=endnote - @data=markup - @data=tail - output + data=@data + data=pre(data) + data=endnote(data) + data,head=markup(data) + objs_txt=tail(data) + doc_txt=[head,objs_txt] + output(doc_txt) makeinfo #KEEP reinstate when fixed #% - rescue; STDERR.puts SiSU_Screen::Ansi.new(@md.cmd,$!,$@).rescue + place_info + rescue; STDERR.puts SiSU_Screen::Ansi.new(@md.opt.cmd,$!,$@).rescue ensure end end - def pre - data=@data + def pre(data) + data_new=[] data.each do |dob| # DEBUG 2003w16 this is a kludge, because i could not get parameters # from param, Sort out ... revert to more elegant solution if dob.is =='table' @@flag['tables']='y' # KLUDGE get from param end - dob.obj.gsub!(/<:p[bn]>/,'') - dob.obj.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1(\2 [linked to:] \3)') - dob.obj.gsub!(/(^|#{Mx[:gl_c]}|\s)\{(.+?)\}((?:https?|file):\/\/\S+)/,'\1(\2 [linked to:] \3)') - do_mono=SiSU_Texinfo_format::Texinfo.new(@md,dob) + dob.obj=dob.obj.gsub(/<:p[bn]>/,''). + gsub(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1(\2 [linked to:] \3)'). + gsub(/(^|#{Mx[:gl_c]}|\s)\{(.+?)\}((?:https?|file):\/\/\S+)/,'\1(\2 [linked to:] \3)') + do_mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob) dob.obj=do_mono.spec_char(dob.obj) + data_new << dob end - data + data_new end - def endnote - data=@data + def endnote(data) + data_new=[] data.each do |dob| - if dob.of=~/para|group/ - dob.obj.gsub!(/\s*#{Mx[:en_a_o]}(?:\d+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} ') - dob.obj.gsub!(/\s*#{Mx[:en_a_o]}(\*+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} ') + if dob.of==:para \ + || dob.of==:block + dob.obj=dob.obj.gsub(/\s*#{Mx[:en_a_o]}(?:\d+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} '). + gsub(/\s*#{Mx[:en_a_o]}(\*+)\s+(.+?)#{Mx[:en_a_c]}/m,' @footnote{ \1} ') end - dob + data_new << dob end - data + data_new end def poem - data=@data + data,data_new=@data,[] @tex_file=[] @@counting=0 data.each do |dob| - if dob.is =='code' + if dob.is ==:code @@flag['code']=true @@counting=1 end - if dob.is =='verse' + if dob.is ==:verse @@flag['poem']=1 end if @@flag['code'] if @@flag['code'] \ - and dob.obj =~ /#{Mx[:gr_o]}code[-_](?:end|close)#{Mx[:gr_c]}/ #watch change not tested 200501 #fix + && (dob.obj =~ /#{Mx[:gr_o]}code[-_](?:end|close)#{Mx[:gr_c]}/) #watch change not tested 200501 #fix @@flag['code']=false end if @@flag['code'] \ - and dob.obj =~ /\S/ + && (dob.obj =~ /\S/) sub_array=dob.obj.dup @@line_mode=sub_array.scan(/.+/) Tune.code_lines(@@line_mode) @@ -196,11 +207,11 @@ module SiSU_TexInfo end elsif @@flag['poem']==1 if @@flag['poem']==1 \ - and dob.obj =~ /#{Mx[:gr_o]}verse[-_](?:end|close)#{Mx[:gr_c]}/ #watch change not tested 200501 #fix + && (dob.obj =~ /#{Mx[:gr_o]}verse[-_](?:end|close)#{Mx[:gr_c]}/) #watch change not tested 200501 #fix @@flag['poem']=0 end if @@flag['poem']==1 \ - and dob.obj =~ /\S/ + && (dob.obj =~ /\S/) sub_array=dob.obj.dup @@line_mode=sub_array.scan(/.+/) Tune.code_lines(@@line_mode) @@ -208,53 +219,58 @@ module SiSU_TexInfo end end @tex_file << dob.obj + data_new << dob end + data_new end def code_lines - data=@data + data,data_new=@data,[] data.each do |line| - if line =~ /\S/ \ - and line !~ /#{Mx[:gr_o]}(code|verse).+/ #fix - if @@flag['code'] - line.gsub!(/^\s*(.+)/m,"\\noindent \\marginpar\[left-text\]{\\begin{tiny}#{@@counting}\\end{tiny}}\\1\\") + if (line =~ /\S/) \ + && (line !~ /#{Mx[:gr_o]}(code|verse).+/) #fix + line=if @@flag['code'] + line.gsub(/^\s*(.+)/m,"\\noindent \\marginpar\[left-text\]{\\begin{tiny}#{@@counting}\\end{tiny}}\\1\\") @@counting+=1 if @@flag['code'] - else line.gsub!(/(.+)/m,'\noindent\1') + else line.gsub(/(.+)/m,'\noindent\1') end end + data_new << line end end def tables - data=@data + data,data_new=@data,[] @tex_file=[] @@tableheader=0 data.each do |dob| if dob.obj =~ /#{Mx[:tc_p]}|#{Mx[:gr_o]}T/ui #fix - do_mono=SiSU_Texinfo_format::Texinfo.new(@md,dob) + do_mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob) dob.obj=do_mono.longtable # using longtable latex package end @tex_file << dob.obj + data_new << dob end + data_new end - def markup - data=@data + def markup(data) + data_new=[] @tex_file=[] @row_break='\\\\\\' @break_page="#{@row_break}\n#{@row_break} \n" md={} - @tex_file << SiSU_Texinfo_format::Texinfo.new(@md).head - mono=SiSU_Texinfo_format::Texinfo.new(@md) + @tex_file << SiSU_TexInfoFormat::Texinfo.new(@md).head + mono=SiSU_TexInfoFormat::Texinfo.new(@md) @tex_file << mono.topnode(@md.title.full) texinfo_menu=[] n_menu,n_submenu=0,0 @submenu,@subsubmenu={},{} data.each do |dob| - if dob.is =='heading' \ - and dob.ln.to_s =~ /^[1-3]$/ - toc=SiSU_Texinfo_format::Texinfo.new(@md,dob) + if dob.is ==:heading \ + && (dob.ln.to_s =~ /^[1-3]$/) + toc=SiSU_TexInfoFormat::Texinfo.new(@md,dob) texinfo_menu << toc.menu - elsif dob.is =='heading' \ - and dob.ln.to_s =~ /^[4-6]$/ - toc=SiSU_Texinfo_format::Texinfo.new(@md,dob) + elsif dob.is ==:heading \ + && (dob.ln.to_s =~ /^[4-6]$/) + toc=SiSU_TexInfoFormat::Texinfo.new(@md,dob) texinfo_menu << toc.menu case dob.ln when 4 @@ -270,10 +286,12 @@ module SiSU_TexInfo @subsubmenu[n_submenu] << toc.menu end else - dob.obj.gsub!(/\s*(?:<:?br>|<br \/>)\s*/,"\n\n") + dob.obj=dob.obj.gsub(/\s*(?:<:?br>|<br \/>)\s*/,"\n\n") end + data_new << dob end - texinfo_menu.compact! + data=data_new + texinfo_menu=texinfo_menu.compact texinfo_menu << "* Dublin Core::" @tex_file << texinfo_menu @tex_file << "* Index::\n" + @@ -281,105 +299,118 @@ module SiSU_TexInfo "@c %% 5\n\n" n_menu,n_submenu=0,0 @@do_submenu,@@do_subsubmenu=1,1 + data_new=[] data.each do |dob| - mono=SiSU_Texinfo_format::Texinfo.new(@md,dob) - if dob.is=='heading' + mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob) + if dob.is==:heading case dob.ln - when 1; mono.level1 - when 2; mono.level2 - when 3; mono.level3 + when 1; dob=mono.level1 + when 2; dob=mono.level2 + when 3; dob=mono.level3 when 4; - mono.level4 + dob=mono.level4 n_menu+=1 @@do_submenu,@@do_subsubmenu=1,1 when 5; n_submenu+=1 @@do_subsubmenu=1 if @@do_submenu==1 - menu=SiSU_Texinfo_format::Texinfo_txt.new(@md,dob,@submenu[n_menu]) + menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu]) dob.obj="#{menu.submenu}#{mono.level5.obj}" @@do_submenu=0 - else mono.level5 + else dob=mono.level5 end when 6; if @@do_submenu==1 - menu=SiSU_Texinfo_format::Texinfo_txt.new(@md,dob,@submenu[n_menu]) + menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu]) dob.obj="#{menu.subsubmenu}#{mono.level6.obj}" @@do_subsubmenu=0 else - mono.level6 + dob=mono.level6 end end else if dob.obj !~/\S/ dob.obj=nil else - if dob.is=='para' \ - and dob.obj !~/##{dob.ocn}/ + if dob.is==:para \ + && (dob.obj !~/##{dob.ocn}/) dob.obj="#{dob.obj} ##{dob.ocn}" end end end #%case with endnotes - dob.obj.gsub!(/\s*[0-8]\\+(\S+)?\s+/,' ') if dob.obj - @tex_file << dob.obj if dob.obj and dob.is !~/structure|comment/ #sort exceptions + dob.obj=dob.obj.gsub(/\s*[0-8]\\+(\S+)?\s+/,' ') if dob.obj + data_new << dob end - data=@tex_file + [data_new, @tex_file] end def number_titles - data=@data + data,data_new=@data,[] @tex_file=[] input=%{#{@md.markup}}[/(num_top\s*=\s*(\d?))?/m,2] # else default usually 4 # this was a bit of a trick required to pass nil to input if nothing matched... #puts input num_top=input.to_i t_no1=0; t_no2=0; t_no3=0; t_no4=0; no1=num_top; no2=(num_top + 1); no3=(num_top + 2); no4=(num_top + 3); data.each do |dob| - if @md.markup =~ /num_top/i \ - and dob.obj !~ /#{Rx[:meta]}/ - if dob.obj =~ /^[1-6]\\+(?:~\S+)?\s*<!h-.+?-!>/ \ - and dob.obj !~ /<:\d-endnotes>/ - header=dob.obj[/<!h-(.+?)-!>/m, 1].gsub!(/-/m,'.') - dob.obj.gsub!(/^(?:[1-6]\\+(?:~\S+)|<:([12356]|4-.+?-)>)\s*<!h-.+?-!>/, + if (@md.markup =~ /num_top/i) \ + && (dob.obj !~ /#{Rx[:meta]}/) + if (dob.obj =~ /^[1-6]\\+(?:~\S+)?\s*<!h-.+?-!>/) \ + && (dob.obj !~ /<:\d-endnotes>/) + header=dob.obj[/<!h-(.+?)-!>/m, 1].gsub(/-/m,'.') + dob.obj=dob.obj.gsub(/^(?:[1-6]\\+(?:~\S+)|<:([12356]|4-.+?-)>)\s*<!h-.+?-!>/, "\\1 #{header} ") end elsif dob.obj=~ /<!h!>|<!h\d!>|<!h.+?!>|<!!h.+?!>/ if dob.obj=~ /<!h-.+?-!>/ - dob.obj.gsub!(/<!h-(.+?)-!>/,'\1 ') + dob.obj=dob.obj.gsub(/<!h-(.+?)-!>/,'\1 ') end end @tex_file << dob.obj end - data=@tex_file + data_new << dob end - def tail - data=@data - tex=SiSU_Texinfo_format::Texinfo.new(@md) - data << tex.dublincore - data << tex.tail + def tail(data) + tex=SiSU_TexInfoFormat::Texinfo.new(@md) + objs_txt=[] + data.each do |dob| + if dob.obj \ + && (dob.is !=:structure \ + && dob.is !=:comment) + objs_txt << dob.obj if dob.obj + end + end + objs_txt << tex.dublincore << tex.tail + objs_txt end - def output - data=@data - data.compact! - filename=%{#{@env.path.texi}/#{@md.fnb}.texinfo} - filename_texinfo=File.new(filename,'w+') - puts filename if @md.cmd =~/M/ - data.each {|s| (filename_texinfo.puts s,"\n") if s} - filename_texinfo.close + def output(data) + filename_texinfo=%{#{@env.processing_path.texi}/#{@md.fnb}.texinfo} + file_texinfo=File.new(filename_texinfo,'w+') + puts filename_texinfo if @md.opt.cmd =~/M/ + data.each {|s| (file_texinfo.puts s,"\n") if s} + file_texinfo.close end def makeinfo if @md.fns =~/\.(?:-|ssm\.)?sst$/ - m=/(.+?)\.([_-]?sst)$/.match(@md.fns) + m=/(.+?)\.((?:-|ssm\.)?sst)$/.match(@md.fns) fnb,sfx=m[1],m[2] pwd=Dir.pwd case sfx when /(?:-|ssm\.)?sst$/ - @env=SiSU_Env::Info_env.new(@md.fns,@md.cmd) - Dir.chdir(@env.path.texi) - texinfo=SiSU_Env::System_call.new("#{fnb}.texinfo") + @env=SiSU_Env::InfoEnv.new(@md.fns,@md.opt.cmd) + Dir.chdir(@env.processing_path.texi) + texinfo=SiSU_Env::SystemCall.new("#{fnb}.texinfo") texinfo.makeinfo end Dir.chdir(pwd) end + def place_info + unless FileTest.directory?(@f.output_path.texinfo.dir) + FileUtils::mkdir_p(@f.output_path.texinfo.dir) + end + info_src=%{#{@env.processing_path.texi}/#{@md.fnb}.info} + FileUtils::cp(info_src, @f.place_file.info.dir) + end end end end diff --git a/lib/sisu/v2/texinfo_format.rb b/lib/sisu/v4/texinfo_format.rb index 5e1d8af4..78f2a188 100644 --- a/lib/sisu/v2/texinfo_format.rb +++ b/lib/sisu/v4/texinfo_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,9 +55,9 @@ ** Description: texinfo formatting template =end -module SiSU_Texinfo_format +module SiSU_TexInfoFormat @@table_pg_break_counter=1 - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param include SiSU_Viz class Texinfo @@ -67,38 +66,37 @@ module SiSU_Texinfo_format @@tex_pattern_margin_number="\\\\marginpar.+?\s+" def initialize(md,dob=nil) @md,@dob=md,dob - if dob.class==Hash + if dob.is_a?(Hash) p dob.class p caller - elsif dob.class==String + elsif dob.is_a?(String) p dob.class p caller end - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def head t=Time.now year=t.year filename=%{#{@md.fns}}[/(.+?)\.\w\w\d\d$/,1] title=spec_char(@md.title.full) - title=title.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ") - title.gsub!(/\$/,"\\$") - title.gsub!(/[,]\s*/,' - ') + title=title.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} "). + gsub(/\$/,"\\$"). + gsub(/[,]\s*/,' - ') if @md.title.sub subtitle=spec_char(@md.title.sub) - subtitle=subtitle.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ") - subtitle.gsub!(/\$/,"\\$") - subtitle.gsub!(/[,]\s*/,' - ') + subtitle=subtitle.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} "). + gsub(/\$/,"\\$"). + gsub(/[,]\s*/,' - ') subtitle="@subtitle @value{VERSION}, @value{UPDATED}\n" #bugwatch end subtitle ||='' author=@md.author if @md.author author ||='' - author.gsub!(/[\*]/,'') #if author - v=SiSU_Env::Info_version.instance.get_version + author=author.gsub(/[\*]/,'') #if author + v=SiSU_Env::InfoVersion.instance.get_version head =<<WOK \\input texinfo @c -*-texinfo-*- -@comment $Id$ @comment %**start of header @setfilename #{@md.fnb}.info @settitle #{title} @value{VERSION} @@ -151,9 +149,9 @@ WOK end def topnode(txt) txt=spec_char(txt) - txt=txt.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ") - txt.gsub!(/\$/,"\\$") - txt.gsub!(/[,]\s*/,' - ') + txt=txt.gsub(/<(br|p|i)>|<\/\s*(br|p|i)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} "). + gsub(/\$/,"\\$"). + gsub(/[,]\s*/,' - ') "@c %% 4\n" + "@ifnottex\n" + "@node Top\n" + @@ -262,165 +260,154 @@ WOK relation="Relation: #{relation}\n\n" if relation #dc coverage="Coverage: #{coverage}\n\n" if coverage #dc rights="Rights: #{rights}\n\n" if rights #dc - "@node Dublin Core\n" + - "@unnumbered Dublin Core\n" + - "@cindex chapter, Dublin Core\n\n" + - "#{full_title}" + - "#{author}" + - "#{subject}" + - "#{description}" + - "#{publisher}" + - "#{contributor}" + - "#{date}" + - "#{date_created}" + - "#{date_issued}" + - "#{date_available}" + - "#{date_valid}" + - "#{date_modified}" + - "#{format}" + - "#{identifier}" + - "#{source}" + - "#{language}" + - "#{relation}" + - "#{coverage}" + - "#{rights}" + - "\n\n" + <<WOK +@node Dublin Core +@unnumbered Dublin Core +@cindex chapter, Dublin Core + +#{full_title}#{author}#{subject}#{description}#{publisher}#{contributor}#{date}#{date_created}#{date_issued}#{date_available}#{date_valid}#{date_modified}#{format}#{identifier}#{source}#{language}#{relation}#{coverage}#{rights} + +WOK end def tail - "@c %% 6\n" + - "@node Index\n" + - "@unnumbered Index\n" + - "@printindex cp\n\n" + - "@bye" + <<WOK +@c %% 6 +@node Index +@unnumbered Index +@printindex cp + +@bye +WOK end def clean(dob) - if dob.is=='heading' \ + if dob.is==:heading \ and dob.obj !~/##{dob.ocn}/ dob.obj="#{dob.obj} ##{dob.ocn}" end - dob.obj.gsub!(/<:#>/,'') - dob.obj.strip! + dob.obj=dob.obj.gsub(/\n/m,' '). + gsub(/<:#>/,''). + gsub(/,\s+/,' - '). + strip dob end def menu dob=clean(@dob) m=dob.obj - m.gsub!(/[:,]\s*/,' - ') - m.gsub!(/@footnote\{.+?\}\s+/,'') + m=m.gsub(/[:,]\s*/,' - '). + gsub(/@footnote\{.+?\}\s+/,'') m="* #{m}::" end def level1 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def level2 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def level3 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def level4 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def level5 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def level6 dob=clean(@dob) nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'') - dob.obj="@node #{nd}\n@unnumbered #{dob.obj}\n@cindex chapter, #{nd}\n" + dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n" dob end def submenu @dob.obj=@dob.obj.join("\n") - @dob.obj.gsub!(/[5]\\+~\S+/,'') + @dob.obj=@dob.obj.gsub(/[5]\\+~\S+/,'') dob=clean(@dob) - dob.obj="@menu\n#{dob.obj}\n@end menu\n\n" - dob.obj.gsub!(/.+/m,"#{dob.obj}") + dob.obj="@menu\n#{dob.obj}\n@end menu\n\n". + gsub(/.+/m,"#{dob.obj}") end def subsubmenu @dob.obj=@dob.obj.join("\n") - @dob.obj.gsub!(/[6]\\+~\S+/,'') + @dob.obj=@dob.obj.gsub(/[6]\\+~\S+/,'') dob=clean(@dob) - dob.obj="@menu\n#{dob.obj}\n@end menu\n\n" - dob.obj.gsub!(/.+/m,"#{dob.obj}") + dob.obj="@menu\n#{dob.obj}\n@end menu\n\n". + gsub(/.+/m,"#{dob.obj}") end def indent1 - @dob.obj.gsub!(/<:i1>(.*)/,'\1') + @dob.obj=@dob.obj.gsub(/<:i1>(.*)/,'\1') end def indent2 - @dob.obj.gsub!(/<:i2>(.*)/,'\1') + @dob.obj=@dob.obj.gsub(/<:i2>(.*)/,'\1') end def spec_char(txt) # special characters - txt.gsub!(/#{Mx[:br_eof]}/i,'') - txt.gsub!(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'(c)') - txt.gsub!(/#{Mx[:gl_o]}#(?:lt|060)#{Mx[:gl_c]}/,'<'); txt.gsub!(/#{Mx[:gl_o]}(gt|#062)#{Mx[:gl_c]}/,'>') - txt.gsub!(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'); txt.gsub!(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}') - txt.gsub!(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') - txt.gsub!(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!') - txt.gsub!(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#') - txt.gsub!(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*') - txt.gsub!(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/') - txt.gsub!(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_') - txt.gsub!(/#{Mx[:br_nl]}+/,"\n") - txt.gsub!(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' ') - #txt.gsub!(/\\/,'\\backslash ') - txt.gsub!(/<:pb>/,'\\newpage') - txt.gsub!(/\\backslash copyright/,'\\copyright ') - txt.gsub!(/\^/,'\\wedge ') - txt.gsub!(/(\$)/,"\\$") - txt.gsub!(/\~/,'\\~') - txt.gsub!(/#{Mx[:url_o]}(https?:\S+?)#{Mx[:url_c]}/,'<\1>') - txt.gsub!(/#{Mx[:url_o]}_(https?:\S+?)#{Mx[:url_c]}/,'\1') - txt.gsub!(/§/i,'\S') - txt.gsub!(/£/i,'\pounds') - txt.gsub!(/å/,'\aa'); txt.gsub!(/Å/,'\AA') - txt.gsub!(/æ/,'\ae'); txt.gsub!(/Æ/,'\AE') - txt.gsub!(/ø/,'\o'); txt.gsub!(/Ø/,'\O') - txt.gsub!(/<a href=".+?">/i,' ') - txt.gsub!(/<\/a>/i,' ') - txt.gsub!(/<:ee>/i,'') - txt.gsub!(/<!>/i,' ') - txt.gsub!(/#{Mx[:br_paragrph]}/i,'') #watch - txt.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'*\1*') - txt.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'/\1/') - txt.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'_\1_') - txt.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'[\1]') - txt.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^\1^') - txt.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+\1+') - txt.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"') - txt.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'-\1-') - txt.gsub!(/@/i,'@@') - txt.gsub!(/\{/,'@{'); txt.gsub!(/\}/,'@}') - txt.gsub!(/(?: |#{Mx[:nbsp]})+/,' ') # ~ character for hardspace - txt.gsub!(/&(\S+?);/,' ') - txt.gsub!(/&/,'<=and>') - txt.gsub!(/(\s+&\s+)/,' and ') - txt.gsub!(/(\&)/,"\\&") - txt.gsub!(/"(.+?)"/,"`\\1'") # open & close " - txt.gsub!(/\s+"/," `") # open " - txt.gsub!(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*"/,'\1`') # open " - txt.gsub!(/"(\s|\.|,|:|;)/,"'\\1") # close " - txt.gsub!(/"([1-6-]\\+(?:~\S+)?|<.+?>)?\s*$/,"'\\1") # close " - txt.gsub!(/"(\.|,)/,"'") # close " - txt.gsub!(/\s+'/," `") # open ' - txt.gsub!(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*'/,'\1`') # open ' - txt.gsub!(/(<font.*?>|<\/font>)/,'') - txt + txt=txt.gsub(/#{Mx[:br_eof]}/i,''). + gsub(/#{Mx[:gl_o]}#169#{Mx[:gl_c]}/,'(c)'). + gsub(/#{Mx[:gl_o]}#(?:lt|060)#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}(gt|#062)#{Mx[:gl_c]}/,'>'). + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{').gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~'). + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). + gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\'). + gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,"\n\n"). # watch + gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' '). + #gsub(/\\/,'\\backslash '). + gsub(/<:pb>/,'\\newpage'). + gsub(/\\backslash copyright/,'\\copyright '). + gsub(/\^/,'\\wedge '). + gsub(/(\$)/,"\\$"). + gsub(/\~/,'\\~'). + gsub(/#{Mx[:url_o]}(https?:\S+?)#{Mx[:url_c]}/,'<\1>'). + gsub(/#{Mx[:url_o]}_(https?:\S+?)#{Mx[:url_c]}/,'\1'). + gsub(/§/i,'\S'). + gsub(/£/i,'\pounds'). + gsub(/å/,'\aa').gsub(/Å/,'\AA'). + gsub(/æ/,'\ae').gsub(/Æ/,'\AE'). + gsub(/ø/,'\o').gsub(/Ø/,'\O'). + gsub(/<a href=".+?">/i,' '). + gsub(/<\/a>/i,' '). + gsub(/<!>/i,' '). + gsub(/#{Mx[:br_paragrph]}/i,''). #watch + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'*\1*'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'/\1/'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'_\1_'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'[\1]'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'^\1^'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+\1+'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'-\1-'). + gsub(/@/i,'@@'). + gsub(/\{/,'@{').gsub(/\}/,'@}'). + gsub(/(?: |#{Mx[:nbsp]})+/,' '). # ~ character for hardspace + gsub(/&(\S+?);/,' '). + gsub(/&/,'<=and>'). + gsub(/(\s+&\s+)/,' and '). + gsub(/(\&)/,"\\&"). + gsub(/"(.+?)"/,"`\\1'"). # open & close " + gsub(/\s+"/," `"). # open " + gsub(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*"/,'\1`'). # open " + gsub(/"(\s|\.|,|:|;)/,"'\\1"). # close " + gsub(/"([1-6-]\\+(?:~\S+)?|<.+?>)?\s*$/,"'\\1"). # close " + gsub(/"(\.|,)/,"'"). # close " + gsub(/\s+'/," `"). # open ' + gsub(/^([1-6-]\\+(?:~\S+)?|<.+?>)?\s*'/,'\1`'). # open ' + gsub(/(<font.*?>|<\/font>)/,'') end def longtable @end_table="\\end{longtable}" @@ -440,28 +427,28 @@ WOK @colW=@colW.join @@start_table="\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" + "\\begin{longtable}[hb]#{@colW}\n" - @dob.obj.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix + @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix end if @dob =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ #fix - @dob.obj.gsub!(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/," #{@end_table}") #fix + @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/," #{@end_table}") #fix end - @dob.obj.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'') + @dob.obj=@dob.obj.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'') if @@tableheader==1 if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u tablefoot=para[/\<!f(.+?)!\>/,1] - @dob.obj.gsub!(/\<!f(.+?)!\>/,'') - @dob.obj.gsub!(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u, - "{\\begin{tiny} {\\bfseries \\1}\\end{tiny}}&") - @dob.obj.gsub!(/&>\s*$/, - " #{@row_break} \\hline\\endhead #{@row_break}") + @dob.obj=@dob.obj.gsub(/\<!f(.+?)!\>/,''). + gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u, + "{\\begin{tiny} {\\bfseries \\1}\\end{tiny}}&"). + gsub(/&>\s*$/, + " #{@row_break} \\hline\\endhead #{@row_break}") @dob="#{@dob} \\multicolumn{#{@@number_of_cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n" if tablefoot @@tableheader=0 @@number_of_cols=0 end else if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u - @dob.obj.gsub!(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&") - @dob.obj.gsub!(/&>\s*$/," #{@row_break}") + @dob.obj=@dob.obj.gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&"). + gsub(/&>\s*$/," #{@row_break}") end end @dob @@ -482,10 +469,10 @@ WOK @colW << "p{#{col_w}cm}" if col_w end @@start_table="\\begin{tabular}{#{@colW}}\n" - @dob.obj.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix + @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c\d+?;.+#{Mx[:gr_c]}/u,"#{@@start_table}") #fix end if @dob =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ #fix - @dob.obj.gsub!(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/,"#{@end_table}") #fix + @dob.obj=@dob.obj.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/,"#{@end_table}") #fix @@table_pg_break_counter=1 end if @dob =~/#{Mx[:tc_o]}#{Mx[:tc_p]}/u @@ -496,39 +483,39 @@ WOK "#{@@start_table}\n" @@table_pg_break_counter=1 else - @dob.obj.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'') + @dob.obj=@dob.obj.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'') @@table_pg_break_counter+=1 tablefoot=@dob[/\<!f(.+?)!\>/] - @dob.obj.gsub!(/\<!f(.+?)!\>/,'') + @dob.obj=@dob.obj.gsub(/\<!f(.+?)!\>/,'') end end if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u - @dob.obj.gsub!(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&") - @dob.obj.gsub!(/&>\s*$/,"#{@row_break}") + @dob.obj=@dob.obj.gsub(/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u,"\\begin{tiny}\\1\\end{tiny}&"). + gsub(/&>\s*$/,"#{@row_break}") end @dob end def graphics - dir=SiSU_Env::Info_env.new(@md.fns) - @dob.obj.gsub!(/<::\s+(\S+?)\s+>/i, #watch - "\\includegraphics*[width=11pt]{#{dir.path.image_source_tex}/c_\\1.png}") + dir=SiSU_Env::InfoEnv.new(@md.fns) + @dob.obj=@dob.obj.gsub(/<::\s+(\S+?)\s+>/i, #watch + "\\includegraphics*[width=11pt]{#{dir.path.image_source_include}/c_\\1.png}") end def image - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) width="100" width=@dob[/<:image.+?width=``(\d+)''.+?>/im,1] width=width.to_i*0.4 - @dob.obj.gsub!(/<:image\s+((?:https?|file|ftp)\S+)\s+(\S+)\s+.+\s+?>/i, - "\\href{\\1}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_tex}/\\2}}") - @dob.obj.gsub!(/<:image\s+(\S+)\s+.+\s+?>/i, - "\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_tex}/\\1}") + @dob.obj=@dob.obj.gsub(/<:image\s+((?:https?|file|ftp)\S+)\s+(\S+)\s+.+\s+?>/i, + "\\href{\\1}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/\\2}}"). + gsub(/<:image\s+(\S+)\s+.+\s+?>/i, + "\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/\\1}") end def png # very messy clean up ! - work area, testing z=@dob[/\\\{(.+?)\}(?:image|png)/,1] # match operator for z \\ fragile ! image,w,x,y=z.scan(/\S+/) - image.gsub!(/\\/,'') - @dob.obj.gsub!(/\\\{\S+\.(png|jpg|gif).+?\}(image|png)/,"<image #{image} not available>") # fragile match operator\\ fragile ! + image=image.gsub(/\\/,'') + @dob.obj=@dob.obj.gsub(/\\\{\S+\.(png|jpg|gif).+?\}(image|png)/,"<image #{image} not available>") # fragile match operator\\ fragile ! end def http # very messy clean up ! - work area, testing @@ -536,7 +523,7 @@ WOK url=@dob[/((?:https?|file|ftp):\S+)/im,1] if @dob =~/\.(png|jpg|gif)/ image,w,x,y=z.scan(/\S+/) - image.gsub!(/\\/,'') + image=image.gsub(/\\/,'') width=200 width=z[/w=(\d+)/im,1] if z =~/w=(\d+)/ width=width.to_i*0.8 @@ -545,41 +532,39 @@ WOK caption="{\\\\\\\ \n\\begin{scriptsize}#{c}\\end{scriptsize}&}" if c end if image - dir=SiSU_Env::Info_env.new(@md.fns) - @dob.obj.gsub!(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/, # fragile match operator\\ fragile ! - "\n\\href{#{url}}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_tex}/#{image}}}#{caption}") + dir=SiSU_Env::InfoEnv.new(@md.fns) + @dob.obj=@dob.obj.gsub(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/, # fragile match operator\\ fragile ! + "\n\\href{#{url}}{\\includegraphics*[width=#{width}pt]{#{dir.path.image_source_include}/#{image}}}#{caption}") else link=z[/(.+?)\\/im,1] - @dob.obj.gsub!(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+#{Mx[:url_c]}/,"\n\\noindent\\href{#{url}}{#{link}}") # fragile match operator\\ fragile ! + @dob.obj=@dob.obj.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+#{Mx[:url_c]}/,"\n\\noindent\\href{#{url}}{#{link}}") # fragile match operator\\ fragile ! end end end - class Texinfo_txt + class TeXinfoTxt def initialize(md,dob,txt) @md,@dob,@txt=md,dob,txt end def clean(dob,txt) - if dob.is=='heading' \ + if dob.is==:heading \ and txt !~/##{dob.ocn}/ txt="#{dob.obj} ##{dob.ocn}" end - txt.gsub!(/<:#>/,'') - txt.strip! - txt + txt=txt.gsub(/<:#>/,'').strip end def submenu txt=@txt.join("\n") - txt.gsub!(/[5]\\+~\S+/,'') + txt=txt.gsub(/[5]\\+~\S+/,'') txt=clean(@dob,txt) txt="@menu\n#{txt}\n@end menu\n\n" - txt.gsub!(/.+/m,"#{txt}") + txt=txt.gsub(/.+/m,"#{txt}") end def subsubmenu txt=@txt.join("\n") - txt.gsub!(/[6]\\+~\S+/,'') + txt=txt.gsub(/[6]\\+~\S+/,'') txt=clean(@dob,txt) txt="@menu\n#{dob.obj}\n@end menu\n\n" - txt.gsub!(/.+/m,"#{txt}") + txt=txt.gsub(/.+/m,"#{txt}") end end end diff --git a/lib/sisu/v4/texpdf.rb b/lib/sisu/v4/texpdf.rb new file mode 100644 index 00000000..0665c9b4 --- /dev/null +++ b/lib/sisu/v4/texpdf.rb @@ -0,0 +1,979 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: LaTeX generation + +=end +module SiSU_TeX + require 'pstore' + require_relative 'defaults' # defaults.rb + include SiSU_Viz + require_relative 'particulars' # particulars.rb + include SiSU_Particulars + require_relative 'texpdf_format' # texpdf_format.rb + include SiSU_TeX_Pdf + require_relative 'shared_metadata' # shared_metadata.rb + require_relative 'prog_text_translation' # prog_text_translation.rb + @tex_file=@@tex_footnote_array=@@tex_col_w=[] + @@tabular="{tabular}" + @@column_instruct=@@squigle_close=@@tex_line_mode=@@tex_word_mode=@@line_mode='' + @@tex_debug_counter=@@table_pagebreak_counter=@@tex_footnote_call_counter=@@tex_table_flag=@@tex_counter=@@tex_column=@@tex_columns=@@tex_columns=@@counting=0 + @@tex_pattern_margin_number=/\\\\begin\\\{tiny\\\}\\\\hspace\\\{0mm\\\}\\\\end\\\{tiny\\\}\\\{\\\\marginpar.+?\s+/ + @@n=@@tableheader=@@rights=nil + @@date ||=SiSU_Env::InfoDate.new + class Source + require 'pstore' + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + include SiSU_Viz + require_relative 'dal' # dal.rb + include SiSU_DAL + include SiSU_TeX + def initialize(opt) + @opt=opt + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) + @md=@particulars.md + @env=SiSU_Env::InfoEnv.new(@md.fns) #@env=@particulars.env + end + def directories + begin + case @opt.fns + when /\.(?:-|ssm\.)?sst$/ + SiSU_Env::FileOp.new(@md).mkdir + Dir.mkdir(@env.processing_path.tex) unless FileTest.directory?(@env.processing_path.tex) + end + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def read + song + end + def song + begin + @md=@particulars.md + SiSU_Screen::Ansi.new(@opt.cmd,'LaTeX/PDF',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_title_hi unless @opt.cmd =~/q/ + if @opt.cmd =~/[MVv]/ + path=@env.url.output_tell + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.program.pdf_viewer} #{@md.file.output_path.pdf.dir}/#{@md.file.base_filename.pdf_l}pdf").flow + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@opt.fns} #{@env.program.pdf_viewer} #{@md.file.output_path.pdf.dir}/#{@md.file.base_filename.pdf_p}pdf").flow + end + @md=@particulars.md + $flag=@md.opt.cmd #introduced to pass 0 for no object citation numbers... to texpdf_format + directories + #% needed needs to be reprogrammed !!! + SiSU_Env::InfoSkin.new(@md).select + dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here + SiSU_TeX::Source::LaTeXcreate.new(@particulars).songsheet + dal_array='' + pwd=Dir.pwd + SiSU_TeX::Source::LaTeXtoPdf.new(@md,@particulars.env).latexrun_selective + Dir.chdir(pwd) + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + unless @opt.cmd =~/[MV]/ #check maintenance flag + texfiles=Dir["#{@env.processing_path.tex}/#{@opt.fns}*"] + texfiles.each do |f| + if FileTest.file?(f) + File.unlink(f) + end + end + end + @tex_file=@@tex_footnote_array=[] + @@column_instruct='' + @@squigle_close=@@tex_line_mode=@@tex_word_mode=@@line_mode='' + @@tex_debug_counter=@@table_pagebreak_counter=@@tex_footnote_call_counter=@@tex_table_flag=@@tex_counter=@@tex_column=@@tex_columns=@@tex_columns=@@counting=0 + @@tex_col_w=[] + @@n=@@tableheader=@@rights=nil + @@date=SiSU_Env::InfoDate.new + @@flag={} + $flag=1 #remove at some stage + SiSU_Env::Clear.new(@opt.cmd,@opt.fns).param_instantiate + end + end + private + class LaTeXtoPdf + @@n_lpdf||=0 #change + def initialize(md,env) + @md,@env=md,env + @f=SiSU_Env::FileOp.new(@md).base_filename + end + def latex_do(texfilename,papersize) + @texfilename=texfilename + @@n_lpdf=@@n_lpdf+1 + SiSU_Screen::Ansi.new(@md.opt.cmd,"#{papersize} portrait ->").dark_grey_title_hi if @md.opt.cmd =~/[MVv]/ + tex_fn_base=@texfilename.gsub(/\.tex$/,'') + cmd=SiSU_Env::SystemCall.new("#{tex_fn_base}.tex",'',@md.opt.cmd) + tell=SiSU_Screen::Ansi.new(@md.opt.cmd) + tell.grey_open if @md.opt.cmd =~/[MVv]/ + if "#{tex_fn_base}" =~/\w+/ \ + and "#{papersize}" =~/\w+/ + 2.times { |i| cmd.latex2pdf(@md,papersize) } #comment out to skip processing of latex portrait + end + tell.p_off if @md.opt.cmd =~/[MVv]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"#{papersize} landscape ->").dark_grey_title_hi if @md.opt.cmd =~/[MVv]/ + cmd=SiSU_Env::SystemCall.new("#{tex_fn_base}.landscape.tex",'',@md.opt.cmd) + tell.grey_open if @md.opt.cmd =~/[MVv]/ + if "#{tex_fn_base}" =~/\w+/ \ + and "#{papersize}" =~/\w+/ + 2.times { |i| cmd.latex2pdf(@md,papersize) } #comment out to skip processing of latex landscape + end + tell.p_off if @md.opt.cmd =~/[MVv]/ + pwd=Dir.pwd + portrait_pdf="#{pwd}/#{tex_fn_base}.pdf" + landscape_pdf="#{pwd}/#{tex_fn_base}.landscape.pdf" + case papersize + when /a4/; pdf_p=@f.pdf_p_a4; pdf_l=@f.pdf_l_a4 + when /a5/; pdf_p=@f.pdf_p_a5; pdf_l=@f.pdf_l_a5 + when /b5/; pdf_p=@f.pdf_p_b5; pdf_l=@f.pdf_l_b5 + when /letter/; pdf_p=@f.pdf_p_letter; pdf_l=@f.pdf_l_letter + when /legal/; pdf_p=@f.pdf_p_legal; pdf_l=@f.pdf_l_legal + else pdf_p=@f.pdf_p_a4; pdf_l=@f.pdf_l_a4 + end + FileUtils::mkdir_p(@md.file.output_path.pdf.dir) unless FileTest.directory?(@md.file.output_path.pdf.dir) + if FileTest.file?(portrait_pdf) + FileUtils::cp(portrait_pdf,"#{@md.file.output_path.pdf.dir}/#{pdf_p}") + FileUtils::rm(portrait_pdf) + else p "#{__FILE__}:#{__LINE__} NOT FOUND: #{portrait_pdf}" if @md.opt.cmd.inspect =~/M/ + end + if FileTest.file?(landscape_pdf) + FileUtils::cp(landscape_pdf,"#{@md.file.output_path.pdf.dir}/#{pdf_l}") + FileUtils::rm(landscape_pdf) + else p "#{__FILE__}:#{__LINE__} NOT FOUND: #{landscape_pdf}" if @md.opt.cmd.inspect =~/M/ + end + SiSU_Screen::Ansi.new(@md.opt.cmd,@@n_lpdf,'processed (SiSU LaTeX to pdf - using pdfetex aka. pdftex or pdflatex)').generic_number if @md.opt.cmd =~/[MVv]/ + end + def latexrun_selective + begin + pwd=Dir.pwd + Dir.chdir(pwd) #watch + @tex_f_no=0 + info={} + if FileTest.file?(@env.source_file_with_path) + @md.papersize_array.each do |ps| + if @md.fns =~/\.(?:-|ssm\.)?sst$/ + case @md.fns + when /\.(?:-|ssm\.)?sst$/ + if FileTest.directory?(@env.processing_path.tex)==true + Dir.chdir(@env.processing_path.tex) + texfile=@md.fns.gsub(/$/,".#{ps}.tex"). + gsub(/~/,'-') + if File.exist?(texfile) \ + and File.size(texfile) > 0 + @tex_f_no+=1 + #p "#{__FILE__}:#{__LINE__} texpdf generation disabled" if @md.opt.cmd.inspect =~/M/ #%% disable temporarily, re-enable + latex_do(texfile,ps) + else + puts "\tzero file size #{@env.processing_path.tex}/#{texfile}" + end + end + end + end + end + case @md.papersize_array[0] #default pdf + when /a4/; pdf_p=@f.pdf_p_a4; pdf_l=@f.pdf_l_a4 + when /a5/; pdf_p=@f.pdf_p_a5; pdf_l=@f.pdf_l_a5 + when /b5/; pdf_p=@f.pdf_p_b5; pdf_l=@f.pdf_l_b5 + when /letter/; pdf_p=@f.pdf_p_letter; pdf_l=@f.pdf_l_letter + when /legal/; pdf_p=@f.pdf_p_legal; pdf_l=@f.pdf_l_legal + else pdf_p=@f.pdf_p_a4; pdf_l=@f.pdf_l_a4 + end + if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{pdf_p}") + mklnk=if @md.file.output_dir_structure.by_language_code? \ + or @md.file.output_dir_structure.by_filetype? + "#{@md.fnb}.portrait.pdf" + else 'portrait.pdf' + end + if FileTest.directory?(@md.file.output_path.pdf.dir) + pwd=Dir.pwd + Dir.chdir(@md.file.output_path.pdf.dir) + FileUtils::rm_f(mklnk) + FileUtils::ln_s(pdf_p, mklnk) + Dir.chdir(pwd) + end + end + if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{pdf_l}") + mklnk=if @md.file.output_dir_structure.by_language_code? \ + or @md.file.output_dir_structure.by_filetype? + "#{@md.fnb}.landscape.pdf" + else 'landscape.pdf' + end + pwd_set=Dir.pwd + Dir.chdir(@md.file.output_path.pdf.dir) + FileUtils::rm_f(mklnk) + FileUtils::ln_s(pdf_l, mklnk) + Dir.chdir(pwd_set) + end + else + SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* FILE NOT FOUND: << #{@md.fns} >> - requested latex system processing skipped").warn + end + lst=Dir["*.{aux,log,out}"] + lst.each {|file| File.unlink(file)} if lst + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + end + end + end + class LaTeXcreate + @@tex_head={ + 'a4'=> { p: nil, l: nil }, + 'a5'=> { p: nil, l: nil }, + 'b5'=> { p: nil, l: nil }, + 'letter'=>{ p: nil, l: nil }, + 'legal'=> { p: nil, l: nil }, + 'book'=> { p: nil, l: nil } + } + @@prefix_b=nil + def initialize(particulars) + @particulars=particulars + @md=@particulars.md + @env=SiSU_Env::InfoEnv.new(@md.fns) #@env=@particulars.env + @data=@particulars.dal_array # dal file drawn here + @st={ tex: {} } + @tex_ml=SiSU_TeX_Pdf::UseTeX.new(@md) + @vz=SiSU_Env::GetInit.instance.skin + @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern + @brace_url=SiSU_Viz::Skin.new.url_decoration + l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language + @language=l[:n] + @translate=SiSU_Translate::Source.new(@md,@language) + @codeblock_box='listings' #alternative 'boites' + @make ||=SiSU_Env::ProcessingSettings.new(@md) + end + def songsheet + begin + data=@data + @@tex_footnote_array=[] + @@rights=nil + SiSU_Screen::Ansi.new(@md.opt.cmd,"pdfTex portrait & landscape").txt_grey if @md.opt.cmd=~/[MVvz]/ + if defined? @md.rights.all \ + and not @md.rights.all.empty? + rght=@md.rights #.author.dup #dup is necessary, else contents of :rights changed + sp_char=SiSU_TeX_Pdf::SpecialCharacters.new(@md,rght.copyright.all) + copymark=@md.author_copymark \ + ? '{\begin{small}\copyright\end{small}} ' + : '' + copymark='Copyright {\begin{small}\copyright\end{small}} ' + copyright=sp_char.special_characters_safe.gsub(/^\s*Copyright \(C\)/, copymark) + @@rights||="\n #{Tex[:backslash]*2}[3]\\ \\linebreak #{copyright}" + end + if defined? @md.notes.prefix_b \ + and not @md.notes.prefix_b.empty? + sp_char=SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.notes.prefix_b) + prefix_b=sp_char.special_characters_safe + @@prefix_b="\n #{Tex[:backslash]*2}[3]\\ \\linebreak \\ #{prefix_b}\n" unless @@prefix_b + end + data=pre(data) + data=footnote(data) + if @md.flag_tables #WORK ON 2009 + data=tables(data) #uncomment to start experimenting with tables + end + data=number_paras(data) + data=markup(data) + output(data) + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + protected + def pre(data) + @tex_file=[] + data.each do |dob| + # DEBUG 2003w16 this is a kludge, because i could not get parameters + # from param, Sort out ... revert to more elegant solution + # even more of a kludge as had to insert newlines where code is used not satisfactory, think about + dob.tmp=dob.obj #.dup + if dob.is==:para \ + || dob.is==:heading + dob.tmp=dob.tmp.gsub(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,'') + dob.tmp=SiSU_TeX_Pdf::SpecialCharacters.new(@md,dob.tmp).special_characters + if dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + dob.tmp=SiSU_TeX_Pdf::FormatTextObject.new(@md,dob.tmp).url_str_internal(dob.tmp) + end + elsif dob.is ==:code + dob.tmp=if @codeblock_box=='listings' + dob.tmp + else + SiSU_TeX_Pdf::SpecialCharacters.new(@md,dob.tmp).special_characters_code + end + elsif dob.is ==:break + if dob.obj==Mx[:br_page]; dob.tmp='\newpage' + elsif dob.obj==Mx[:br_page_new]; dob.tmp='\clearpage' + elsif dob.obj==Mx[:br_obj]; dob.tmp='\parasep' + end + elsif dob.is==:comment \ + || dob.is==:meta + dob.tmp='' #dob.tmp=nil + end + end + data + end + def footnote(data) + data.each do |dob| + # EMBEDDED FOOTNOTES / ENDNOTES should be straightforward but not quite a synch. + if dob.tmp =~/#{Mx[:en_a_o]}[\d*+]+\s|#{Mx[:en_b_o]}([*+]\d+)\s/ + dob.tmp=dob.tmp.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m,"\\footnote[\\1]{%\n \\2} "). + gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/m,"\\FootnoteA{\\1}{%\n \\2} "). + gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/m,"\\FootnoteA{\\1}{%\n \\2} ") + end + end + data + end + def tables_hash(md,dob) + @block={} + @dob=dob + @md.papersize_array.each do |ps| + @@tableheader={ ps => { p: 0, l: 0 } } + dob.tmp={ tmp: dob.tmp, paper_size: ps } + format_l=SiSU_TeX_Pdf::FormatTextObject.new(md,dob) + dob.tmp={ tmp: dob.tmp, paper_size: ps } + format_p=SiSU_TeX_Pdf::FormatTextObject.new(md,dob) + @block[ps]={ + l: format_l.longtable_landscape, + p: format_p.longtable_portrait + } + end + @dob.tmp=@block + @dob + end + def tables(data) + @tex_file=[] + data.each do |dob| + @tex_file << if dob.is_a?(String) \ + or dob.is_a?(Hash) + dob + elsif dob.is==:table + tables_hash(@md,dob) #Hash result + else dob + end + end + @tex_file + end + def enclose(dob) + dob + end + def box_boites(dob,ocn) + sp_char=SiSU_TeX_Pdf::SpecialCharacters.new(@md,dob.tmp,dob.is) + dob.tmp=sp_char.special_characters_safe + dob.tmp=dob.tmp.gsub(/(#{Mx[:nbsp]})/m,'{\color{mywhite}\1}'). + #dob.tmp.gsub(/#{Mx[:nbsp]}/m,'{~}') # dob.tmp.gsub(/#{Mx[:nbsp]}\s*/m,'{~}') + gsub(/#{Mx[:vline]}/m,'\vline'). + gsub(/ \\( |#{Mx[:br_nl]})/,' {\textbackslash}\1'). + gsub(/#{Mx[:br_nl]}\s*\Z/m,''). + gsub(/#{Mx[:br_nl]}{2}/,'\newline \\\\\\ '). + gsub(/#{Mx[:br_nl]}/,' \\\\\\ '). + gsub(/\n\n\n/m," \\newline\n\n") + ocn=SiSU_TeX_Pdf::FormatTextObject.new(@md).ocn_display(dob) + dob.tmp = ocn \ + + @tex_ml.paraskip_small \ + + '\begin{Codeblock}' \ + + '\begin{codeblockboitebox} \hardspace \newline ' \ + + dob.tmp \ + + '\end{codeblockboitebox}' \ + + '\end{Codeblock}' \ + + "\n" \ + + @tex_ml.paraskip_normal + dob + end + def box_listings(dob,ocn) + sp_char=SiSU_TeX_Pdf::SpecialCharacters.new(@md,dob.tmp,dob.is) + dob.tmp=sp_char.characters_code_listings + dob.tmp=dob.tmp.gsub(/^\s+/m,''). #bug, fix earlier, should be made unecessary + gsub(/#{Mx[:nbsp]}/m,' '). + gsub(/#{Mx[:vline]}/m,'|'). + gsub(/#{Mx[:br_nl]}(?:\s?\n)?/m,"\n"). + gsub(/\n\n\n/m," \n\n") + ocn=SiSU_TeX_Pdf::FormatTextObject.new(@md).ocn_display(dob) + dob.tmp = ocn \ + + @tex_ml.paraskip_small \ + + '\begin{Codeblock}' \ + + "\n" \ + + '\begin{lstlisting} ' \ + + "\n" \ + + dob.tmp \ + + "\n" \ + + '\end{lstlisting} ' \ + + "\n" \ + + '\end{Codeblock}' \ + + "\n" \ + + @tex_ml.paraskip_normal + dob + end + def markup_common(dob) + tex_f=nil + txt_obj={ dal: dob } + if dob.of==:block + @lineone=if dob.is==:block \ + || dob.is==:group \ + || dob.is==:alt \ + || dob.is==:verse + dob.tmp=dob.tmp.gsub(/#{Mx[:nbsp]}/m,' \hardspace '). + gsub(/#{Mx[:gl_bullet]}/m,'\txtbullet \hardspace '). #Bullet environment not used for grouped text, no hanging indent here + gsub(/#{Mx[:br_nl]}+/m,"\n\n") #match not ideal, but currently not inserting extra newlines anyway + ocn=SiSU_TeX_Pdf::FormatTextObject.new(@md).ocn_display(dob) + dob.tmp=if dob.is==:group \ + || dob.is==:block \ + || dob.is==:alt + dob.tmp=SiSU_TeX_Pdf::SpecialCharacters.new(@md,dob.tmp).special_characters_safe + ocn \ + + @tex_ml.paraskip_small \ + + "\n" \ + + ' \\begin{footnotesize}' \ + + "\n\n" \ + + dob.tmp \ + + '\\end{footnotesize}' \ + + "\n" \ + + @tex_ml.paraskip_normal + elsif dob.is==:verse + dob.tmp=dob.tmp.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/m,'\begin{bfseries}\1 \end{bfseries}'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/m,'\emph{\1}'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/m,'\uline{\1}') + ocn \ + + @tex_ml.paraskip_tiny \ + + "\n" \ + + ' \\begin{footnotesize}' \ + + "\n\n" \ + + dob.tmp \ + + '\\end{footnotesize}' \ + + "\n" \ + + @tex_ml.paraskip_normal \ + + "\n\\linebreak\n" + end + dob + elsif dob.is ==:code + dob=if @codeblock_box == 'listings' + box_listings(dob,ocn) + elsif @codeblock_box == 'boites' + box_boites(dob,ocn) + else + box_boites(dob,ocn) + end + dob + else 'error' #should never occur + end + dob=enclose(dob) unless dob.tmp =~/^$/ + dob + else + tst=SiSU_TeX_Pdf::FormatTextObject.new(@md,dob) + case dob.is + when :heading + case dob.ln + when 1..3 + tst.heading_major + when 4 + tst.level4 + when 5 + tst.level5 + when 6 + tst.level6 + else dob + end + when :heading_insert + br="\n\\\\\n" + if dob.name=='book_index' + h=tst.heading_major + heading="\\clearpage\n" + h.tmp + idx_arr=[] + idx=SiSU_Particulars::CombinedSingleton.instance.get_idx_raw(@md.opt).raw_idx + idx.each do |x| + x=if x.is_a?(String) + x=SiSU_TeX_Pdf::SpecialCharacters.new(@md,x).special_characters + x=SiSU_TeX_Pdf::FormatTextObject.new(@md,x).url_str_internal(x,true) + else x=nil + end + idx_arr << x.sub(/,$/,'') if x.is_a?(String) + end + idx_str=idx_arr.join(br) + l=heading + br + idx_str + p=heading + br + + '\begin{multicols}{2}' + br + + idx_str + br + + '\end{multicols}' + dob.tmp={ l: l, p: p } + elsif dob.ln==2 \ + and dob.obj=~/Metadata\b/ + tst.heading_major + elsif dob.ln==4 \ + and dob.obj=~/Metadata\b/ + h=tst.level4 + metadata=SiSU_Metadata::TeX_Metadata.new(@md).metadata_tex + dob.tmp=h.tmp + ' ' + '\begin{scriptsize}' + metadata.join(br) + '\end{scriptsize}' + else dob.tmp='' # dob.tmp={ l: '', p: '' } + end + when :para + if dob.bullet_ + dob.tmp=tst.bullet + elsif dob.indent \ + and dob.hang \ + and dob.indent =~/[1-9]/ \ + and dob.indent == dob.hang + dob.tmp=tst.indent + elsif dob.hang \ + and dob.hang =~/[0-9]/ \ + and (dob.indent != dob.hang or dob.indent =~/[1-9]/) + dob.tmp=tst.hang + else + dob.tmp=dob.tmp.strip + dob=enclose(dob) unless dob.tmp =~/^$/ + end + else + dob.tmp=dob.tmp.strip unless dob.is==:code + dob=enclose(dob) unless dob.tmp =~/^$/ + end + if dob.is_a?(String) + dob.tmp=dob.tmp.gsub(/\s*(?:#{Mx[:br_line]}|#{Mx[:br_nl]})\s*/,' \newline '). #% tread with care + gsub(/(\.#{Tex[:tilde]}\S*\s*|<:\S+>|#{Mx[:fa_o]}.*?#{Mx[:fa_c]}|#{Mx[:gr_o]}.*?#{Mx[:gr_c]}|<!.*?!>|<!>)/,' ') #% tread with care + end + dob + end + if dob.tmp =~/(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image\b)/m \ + && dob.is !=:code + dob=SiSU_TeX_Pdf::BareUrls.new(@md,dob).bare_urls + tst=SiSU_TeX_Pdf::FormatTextObject.new(@md,dob) + dob=tst.urls_txt_and_images + dob + elsif dob.tmp =~/https?:\/\/\S+\b/m \ + && dob.is ==:code \ + && @codeblock_box !='listings' + dob=SiSU_TeX_Pdf::BareUrls.new(@md,dob).bare_urls_in_code + dob + end + if dob.class !=Hash \ + && dob.tmp =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\b/ \ + && dob.is !=:code + tst=SiSU_TeX_Pdf::FormatTextObject.new(@md,dob) + end + dob + end + def tex_box_listings + <<WOK +\\definecolor{listinggray}{gray}{0.9} +\\definecolor{lbcolor}{rgb}{0.9,0.9,0.9} +\\lstset{ + backgroundcolor=\\color{lbcolor}, + tabsize=4, + rulecolor=, + language=, + basicstyle=\\scriptsize, + upquote=true, + aboveskip={1.5\\baselineskip}, + columns=fixed, + showstringspaces=false, + extendedchars=true, + breaklines=true, + prebreak = \\raisebox{0ex}[0ex][0ex]{\\ensuremath{\\hookleftarrow}}, + frame=single, + showtabs=false, + showspaces=false, + showstringspaces=false, + identifierstyle=\\ttfamily, + keywordstyle=\\color[rgb]{0,0,1}, + commentstyle=\\color[rgb]{0.133,0.545,0.133}, + stringstyle=\\color[rgb]{0.627,0.126,0.941}, +} +WOK + end + def tex_box_boites + <<WOK +\\def\\codeblockboitebox{% + \\def\\bkvz@before@breakbox{\\ifhmode\\par\\fi\\vskip\\breakboxskip\\relax}% + \\def\\bkvz@set@linewidth{\\advance\\linewidth -2\\fboxrule + \\advance\\linewidth -2\\fboxsep} % + \\def\\bk@line{\\hbox to \\linewidth{% + \\ifbkcount\\smash{\\llap{\\the\\bk@lcnt\\ }}\\fi + \\psframebox*[framesep=0pt,linewidth=0pt]{% + \\vrule\\@width\\fboxrule \\hskip\\fboxsep + \\box\\bk@bxa + \\hskip\\fboxsep \\vrule\\@width\\fboxrule + }% + }}% + %\\def\\bkvz@top{\\hrule\\@height\\fboxrule} + \\def\\bkvz@top{\\hrule height .6pt}% + \\def\\bkvz@bottom{\\hrule\\@height\\fboxrule}% + \\breakbox} +\\def\\endcodeblockboitebox{\\endbreakbox} +WOK + end + def tex_codeblock + codeblock_box=if @codeblock_box=='listings' + tex_box_listings + elsif @codeblock_box=='boites' + tex_box_boites + else + tex_box_boites + end + codeblock_box + end + def markup(data) + @tex_file=[] + md={} + home=@vz.txt_home.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}|#{Mx[:br_paragraph]}|\\\\/,' - ') #no line splitting in heading neither html nor latex + title=@md.title.full.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}|#{Mx[:br_paragraph]}|\\\\/,' - ') #no line splitting in heading neither html nor latex + @md.papersize_array.each do |ps| + txt_obj={ txt: "#{home}: - #{title}", paper_size: ps, orientation: 'portrait' } + orient_portrait=SiSU_TeX_Pdf::FormatHead.new(@md,txt_obj) + txt_obj={ txt: "#{home}: - #{title}", paper_size: ps, orientation: 'landscape' } + orient_landscape=SiSU_TeX_Pdf::FormatHead.new(@md,txt_obj) + @@tex_head[ps][:p]=orient_portrait.document_head_with_orientation(@codeblock_box) + @@tex_head[ps][:l]=orient_landscape.document_head_with_orientation(@codeblock_box) + end + @tex_file <<<<WOK +#{@tex_ml.header}#{@tex_ml.footer} +\\tolerance=300 +\\clubpenalty=300 +\\widowpenalty=300 +\\makeatother +\\makeatother +\\chardef\\txtbullet="2022 +\\chardef\\tilde="7E +%\\chardef\\asterisk="2A +\\def\\asterisk{{\\rm \\char42} } +\\definecolor{Light}{gray}{.92} +\\newcommand{\\Codeblock}[1]{\\normaltext\\raggedright\\small\\ttfamily\\texbackslash#1} +\\newcommand{\\monosp}[1]{\\normaltext\\ttfamily\\texbackslash#1} +\\newcommand{\\parasep}{\\\\ \\begin{center}*\\hspace{2em}*\\hspace{2em}*\\end{center} \\\\} +\\newcommand{\\hardspace}{{~}} +%\\newcommand{\\hardspace}{\\hspace{.5em}} +\\newcommand{\\caret}{{\\^{~}}} +\\newcommand{\\pipe}{{\\textbar}} +\\newcommand{\\curlyopen}{\{} +\\newcommand{\\curlyclose}{\}} +\\newcommand{\\lt}{{\UseTextSymbol{OML}{<}}} +\\newcommand{\\gt}{{\UseTextSymbol{OML}{>}}} +\\newcommand{\\slash}{{/}} +\\newcommand{\\underscore}{\\_} +\\newcommand{\\exclaim}{\\Verbatim{!}} +#{tex_codeblock} +% (tilde hash amp affected by http) +% \\sloppy +\\begin{document} +WOK + sisu_rc_footnote=if @md.sc_info then @tex_ml.doc_sc_info_footnote_full + else @tex_ml.doc_sc_info_footnote_brief + end + @copymark='' #check and remove as now is superflous + x={} + txt_obj={ title: @md.title.full } + x[:l]=SiSU_TeX_Pdf::FormatTextObject.new(@md,txt_obj).title_landscape + x[:p]=SiSU_TeX_Pdf::FormatTextObject.new(@md,txt_obj).title_portrait + @tex_file << x + x=nil + if defined? @md.creator.author \ + and @md.creator.author + sp_char=SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.creator.author) + author=sp_char.special_characters + @tex_file << if @md.author_home + <<WOK + +\\author{\\href{#{@md.author_home}}{#{@copymark} \\textnormal{#{author}}}} +WOK + else "\n\\author{#{@copymark} \\textnormal{#{author}}}" + end + end + @tex_file << unless @md.fnb =~/^mail\s*$/; @tex_ml.site + else '\date' + end + @tex_file <<<<WOK +\\pagenumbering{roman}\\maketitle +\\pagestyle{fancy} +WOK + if defined? @md.rights.all \ + and @md.rights.all + @tex_file << "\\newpage\n" + @tex_file << @@rights + @tex_file << @@prefix_b if defined? @md.creator.prefix_b and @md.creator.prefix_b + end + x={} + if (@make.build.toc?) + toc=<<WOK +\\renewcommand{\\contentsname}{#{@translate.contents}} +\\tableofcontents +WOK + toc_pb={ l: @tex_ml.newpage('landscape'), p: @tex_ml.newpage('portrait') } + else + toc='' + toc_pb={ l: '', p: '' } + end + x[:l] =<<WOK +#{@tex_ml.newpage('landscape')} +\\pagestyle{fancy} +#{toc}#{toc_pb[:l]} +\\pagenumbering{arabic} +#{@tex_ml.paraskip_normal} +#{@tex_ml.newpage('landscape')} +WOK + x[:p] =<<WOK +#{@tex_ml.newpage('portrait')} +\\pagestyle{fancy} +#{toc}#{toc_pb[:p]} +#{@tex_ml.newpage('portrait')} +\\pagenumbering{arabic} +#{@tex_ml.paraskip_normal} +#{@tex_ml.newpage('portrait')} +WOK + @tex_file << x + x=nil + data.each do |dob| #% case follows with levels 1-6 indents & graphics + if dob.is_a?(Hash) + elsif dob.of==:para \ + || dob.of==:block #GATEWAY FIX FIX stuff + dob=markup_common(dob) + elsif dob.is==:table + if ( dob.tmp['a4'] \ + or dob.tmp['a5'] \ + or dob.tmp['b5'] \ + or dob.tmp['letter'] \ + or dob.tmp['legal']) + @md.papersize_array.each do |ps| + if dob.tmp[ps] + if (dob.tmp[ps][:p] and dob.tmp[ps][:l]) + dob.tmp[ps]={ + p: markup_common(dob.tmp[ps][:p]), + l: markup_common(dob.tmp[ps][:l]) + } + else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/ + end + end + end + elsif dob.tmp.is_a?(Hash) \ + and (dob.tmp[:p] and dob.tmp[:l]) + dob = { + p: markup_common(dob.tmp[:p]), + l: markup_common(dob.tmp[:l]) + } + else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/ + end + end + @tex_file << dob + end + @st[:tex][:stmp]||=@md.stmpd + stamp=@st[:tex][:stmp] if @st[:tex][:stmp] + if stamp + use=stamp.gsub(/\n/,"#{Tex[:backslash]*2}\n") + @tex_file << "\n\\newpage\n" + @tex_file << "\\section*" + + "{#{@tex_ml.owner_chapter}}\n" + + "\\addcontentsline{toc}" + + "{section}{#{@tex_ml.owner_chapter}}\n" + @tex_file << "#{use}\n" + @tex_file << @@rights if @@rights + end + @tex_file << "\n\\end{document}" + end + def number_paras_numbering(dob) # need tables and other types of object + if dob.of ==:para + paranum=dob.ocn ? dob.ocn : '' + paranum = '' if paranum.to_i==0 + paranumber_display=if @make.build.ocn? + tags='' + #[keep] code that follows inserts "name tags" as hypertargets, currently using ocn (converting nametags to ocn) for internal linking, related code: |texpdf_format.rb|@|uses nametags directly| + #if dob.tags.length > 0 # insert tags "hypertargets" + # dob.tags.each do |t| + # tags=tags +"\\hspace{0mm}\\hypertarget{#{t}}{\\hspace{0mm}}" + # end + #end + "\\begin{tiny}\\hspace{0mm}\\end{tiny}{\\marginpar{\\begin{tiny}\\hspace{0mm}\\hypertarget{#{dob.ocn}}{#{dob.ocn}}#{tags}\\end{tiny}}}" #ocn object citation numbering + else '' + end + dob.tmp = paranumber_display + dob.tmp + end + dob + end + def number_paras(data) + tex_file=[] + data.each do |dob| + dob=if dob.is_a?(Hash) + if ( dob['a4'] \ + or dob['a5'] \ + or dob['b5'] \ + or dob['letter'] \ + or dob['legal']) + para_hash={} + @md.papersize_array.each do |ps| + if defined? dob.tmp and dob.tmp[ps] + if (dob.tmp[ps][:p] and dob.tmp[ps][:l]) + para_hash[ps]={ + p: number_paras_numbering(dob.tmp[ps][:p]), + l: number_paras_numbering(dob.tmp[ps][:l]) + } + dob.tmp=para_hash + else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/ + end + end + end + elsif (dob.tmp[:p] and dob.tmp[:l]) + dob.tmp = { + p: number_paras_numbering(dob.tmp[:p]), + l: number_paras_numbering(dob.tmp[:l]) + } + else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/ + end + else + dob=if dob.of !=:comment \ + || dob.of !=:meta \ + || dob.of !=:layout + number_paras_numbering(dob) + else dob + end + end + end + data + end + def output_morph_hash(o) + ps,h,fn=o[:ps],o[:h],o[:filename] + if h[ps] \ + and (h[ps][:p] and h[ps][:l]) + if h[ps][:p] + h[ps][:p]=h[ps][:p].gsub(/[ ]+$/m,''). + gsub(/\n\n\n+/m,"\n\n") + end + if h[ps][:l] + h[ps][:l]=h[ps][:l].gsub(/[ ]+$/m,''). + gsub(/\n\n\n+/m,"\n\n") + end + #h[ps][:p].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[ps][:p] + #h[ps][:l].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[ps][:l] + if h[ps][:p] !~/\A\s*\Z/ + fn[:portrait].puts h[ps][:p],"\n" + end + if h[ps][:l] !~/\A\s*\Z/ + fn[:landscape].puts h[ps][:l],"\n" + end + elsif (h[:p] and h[:l]) + if h[:p] + h[:p]=h[:p].gsub(/[ ]+$/m,''). + gsub(/\n\n\n+/m,"\n\n") + end + if h[:l] + h[:l]=h[:l].gsub(/[ ]+$/m,''). + gsub(/\n\n\n+/m,"\n\n") + end + #h[:p].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[:p] + #h[:l].gsub!(/(?:^[ ]+|[ ]+$)/m,'') if h[:l] + if h[:p] !~/\A\s*\Z/ + fn[:portrait].puts h[:p],"\n" + end + if h[:l] !~/\A\s*\Z/ + fn[:landscape].puts h[:l],"\n" + end + else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/ + end + end + def output(array) + @array=array=array.flatten.compact + fns_l=@md.fns.gsub(/~/,'-') #this is a sorry fix, but necessary as it appears latex programs like not ~ + @md.papersize_array.each do |ps| + file={ + landscape: File.new("#{@env.processing_path.tex}/#{fns_l}.#{ps}.landscape.tex",'w+'), + portrait: File.new("#{@env.processing_path.tex}/#{fns_l}.#{ps}.tex",'w+') + } + file[:portrait] << @@tex_head[ps][:p] + file[:landscape] << @@tex_head[ps][:l] + array.each do |morph| + if morph.is_a?(String) + #morph.gsub!(/^\s+/,'') + if morph !~/\A\s*\Z/ + file[:portrait].puts morph,"\n" + file[:landscape].puts morph,"\n" + end + elsif morph.class.inspect =~ /SiSU_DAL_DocumentStructure/ \ + and morph.tmp \ + and morph.tmp.is_a?(String) + if morph.is !=:code \ + && morph.of !=:block + morph.tmp=morph.tmp.gsub(/^\s+/,'') + else morph.tmp + end + if (morph.tmp !~/\A\s*\Z/) \ + || morph.is==:code + file[:portrait].puts morph.tmp,"\n" + file[:landscape].puts morph.tmp,"\n" + end + elsif morph.is_a?(Hash) #inserted headers and the like, only + h={ ps: ps, h: morph, filename: file } + output_morph_hash(h) + elsif morph.tmp.is_a?(Hash) #tables & images? + h={ ps: ps, h: morph.tmp, filename: file } + output_morph_hash(h) + end + end + array=@array + file[:portrait].close + file[:landscape].close + end + @@tex_head={ + 'a4'=> { p: nil, l: nil }, + 'a5'=> { p: nil, l: nil }, + 'b5'=> { p: nil, l: nil }, + 'letter'=>{ p: nil, l: nil }, + 'legal'=> { p: nil, l: nil }, + 'book'=> { p: nil, l: nil } + } + array=[] + end + end + end +end +__END__ diff --git a/lib/sisu/v2/texpdf_format.rb b/lib/sisu/v4/texpdf_format.rb index 018232ac..2bd558bc 100644 --- a/lib/sisu/v2/texpdf_format.rb +++ b/lib/sisu/v4/texpdf_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2011, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -59,40 +58,39 @@ module SiSU_TeX_Pdf @@table_pg_break_counter=1 include SiSU_Viz - class Bare_urls + class BareUrls def initialize(md,dob=nil) @md,@dob=md,dob @brace_url=SiSU_Viz::Skin.new.url_decoration end def bare_urls - @dob.obj.gsub!(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - "#{@brace_url.tex_open}\\1</a>#{@brace_url.tex_close}") - @dob.tmp.gsub!(/(^|[^\\])_/m,'\1\_') #watch may not work - @dob.tmp.gsub!(/(^|[^#{Mx[:lnk_c]}])#{Mx[:url_o]}_?(?:\\?_)?(\S+?)#{Mx[:url_c]}/m, - "\\1#{@brace_url.tex_open}\\begin{scriptsize}\\url{\\2}\\end{scriptsize}#{@brace_url.tex_close}") + @dob.obj=@dob.obj.gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, + "#{@brace_url.tex_open}\\1</a>#{@brace_url.tex_close}") + @dob.tmp=@dob.tmp.gsub(/(^|[^\\])_/m,'\1\_'). #watch may not work + gsub(/(^|[^#{Mx[:lnk_c]}])#{Mx[:url_o]}_?(?:\\?_)?(\S+?)#{Mx[:url_c]}/m, + "\\1#{@brace_url.tex_open}\\begin{scriptsize}\\url{\\2}\\end{scriptsize}#{@brace_url.tex_close}") @dob end def bare_urls_in_code - @dob.tmp.gsub!(/(^|[^\\])_/m,'\1\_') #watch may not work - @dob.tmp.gsub!(/(https?:\/\/\S+?)([{]|[.,;)\]]?(?: |$))/m, - '\begin{scriptsize}\url{\1}\end{scriptsize}\2') + @dob.tmp=@dob.tmp.gsub(/(^|[^\\])_/m,'\1\_'). #watch may not work + gsub(/(https?:\/\/\S+?)([{]|[.,;)\]]?(?: |$))/m, + '\begin{scriptsize}\url{\1}\end{scriptsize}\2') @dob end end - class Format_text_object - require 'iconv' - require "#{SiSU_lib}/defaults" # defaults.rb + class FormatTextObject + require_relative 'defaults' # defaults.rb attr_accessor :string,:string1,:orientation,:url,:dir,:tex - @@sys=SiSU_Env::System_call.new + @@sys=SiSU_Env::SystemCall.new @@tex_pattern_margin_number=/\\begin\{tiny\}\\hspace\{0mm\}\\end\{tiny\}\{\\marginpar.+?\}\}\}/ @@tableheader={ - 'a4' => { :p => 0, :l => 0 }, - 'a5' => { :p => 0, :l => 0 }, - 'b5' => { :p => 0, :l => 0 }, - 'letter' => { :p => 0, :l => 0 }, - 'legal' => { :p => 0, :l => 0 } + 'a4' => { p: 0, l: 0 }, + 'a5' => { p: 0, l: 0 }, + 'b5' => { p: 0, l: 0 }, + 'letter' => { p: 0, l: 0 }, + 'legal' => { p: 0, l: 0 } } - @@sys=SiSU_Env::System_call.new + @@sys=SiSU_Env::SystemCall.new def initialize(md,dob=nil) @md,@dob=md,dob if defined? @md.image \ @@ -101,31 +99,34 @@ module SiSU_TeX_Pdf else @center_begin,@center_end='','' end @start_table='' - @tx=SiSU_Env::Get_init.instance.tex + @tx=SiSU_Env::GetInit.instance.tex @brace_rel=SiSU_Viz::Skin.new.rel_decoration - @env ||=SiSU_Env::Info_env.new(@md.fns) - @tex2pdf=@@tex3pdf ||=SiSU_Env::System_call.new.tex2pdf_engine + @env ||=SiSU_Env::InfoEnv.new(@md.fns) + @tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine + @make ||=SiSU_Env::ProcessingSettings.new(@md) end def ocn_display(dob) - "\\begin{tiny}\\hspace{0mm}\\end{tiny}{\\marginpar{\\begin{tiny}\\hspace{0mm}\\hypertarget{#{dob.ocn}}{#{dob.ocn}}\\end{tiny}}}" #ocn object citation numbering + show_ocn=(@make.build.ocn?) \ + ? dob.ocn + : '' + "\\begin{tiny}\\hspace{0mm}\\end{tiny}{\\marginpar{\\begin{tiny}\\hspace{0mm}\\hypertarget{#{dob.ocn}}{#{show_ocn}}\\end{tiny}}}" #ocn object citation numbering end def table_special_characters(r) - r.gsub!(/#{Mx[:tc_p]}|$/u,'&') - r.gsub!(/%/,'\%') - r.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}') - r.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}') - r.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}') # ulem - r.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''") # quote #CHECK - r.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}') # ulem - r.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}') # ulem - r.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$") - r.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$") - r + r=r.gsub(/#{Mx[:tc_p]}|$/u,'&'). + gsub(/%/,'\%'). + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}'). # ulem + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''"). # quote #CHECK + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}'). # ulem + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}'). # ulem + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$"). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$") end def longtable_landscape end_table='\end{longtable}' row_break='\\\\\\' - txt=if @dob.is=='table' + txt=if @dob.is==:table tw=case @dob.tmp[:paper_size] when /a4/i; @tx.a4.landscape.w #European default, SiSU default when /letter/i; @tx.letter.landscape.w #U.S. default @@ -148,19 +149,21 @@ module SiSU_TeX_Pdf "\\begin{tiny}\n\\begin{longtable}#{colW}\n" rows=@dob.obj.split(/#{Mx[:br_nl]}/) if @dob.head_ #result imperfect, check on - rows[0].gsub!(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&') - rows[0].gsub!(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}") + rows[0]=rows[0].gsub(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&'). + gsub(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}") end + rows_new=[] rows.each do |r| r=table_special_characters(r) - r.gsub!(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/ + r=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/ if r=~/\<!f(.+?)!\>/ # not tested table footer if any tablefoot=$1 - r.gsub!(/\<!f(.+?)!\>/,'') + r=r.gsub(/\<!f(.+?)!\>/,'') r="#{r} \\multicolumn{#{@dob.cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n" end + rows_new << r end - table=rows.join #@dob[:dal].obj=rows.join + table=rows_new.join #@dob[:dal].obj=rows.join ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}" else '' end @@ -168,7 +171,7 @@ module SiSU_TeX_Pdf def longtable_portrait end_table='\end{longtable}' row_break='\\\\\\' - txt=if @dob.is=='table' + txt=if @dob.is==:table tw=case @dob.tmp[:paper_size] when /a4/i; @tx.a4.portrait.w #European default, SiSU default when /letter/i; @tx.letter.portrait.w #U.S. default @@ -180,7 +183,7 @@ module SiSU_TeX_Pdf textwidth=tw.to_i - 20 colW=[] colW << '{' - @dob.widths.each do |x| + @dob.widths.each do |x| x=(x.to_i * textwidth)/100 #x=(x.to_i/100.0 * 160) col_w=x.to_s # x.gsub(/.+/,'l\|') #unless x.nil? colW << "p{#{col_w}mm}" if col_w @@ -191,19 +194,21 @@ module SiSU_TeX_Pdf "\\begin{tiny}\n\\begin{longtable}#{colW}\n" rows=@dob.obj.split(/#{Mx[:br_nl]}/) if @dob.head_ - rows[0].gsub!(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&') - rows[0].gsub!(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}") + rows[0]=rows[0].gsub(/(^|.+?)(?:#{Mx[:tc_p]}|$)/u,'\bfseries \1&'). + gsub(/&\s*$/," #{row_break} \\hline\\endhead #{row_break}") end + rows_new=[] rows.each do |r| r=table_special_characters(r) - r.gsub!(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/ + r=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/ if r=~/\<!f(.+?)!\>/ # not tested table footer if any tablefoot=$1 - r.gsub!(/\<!f(.+?)!\>/,'') + r=r.gsub(/\<!f(.+?)!\>/,'') r="#{r} \\multicolumn{#{@dob.cols}}{l}{\\tiny #{tablefoot}} \\\\ \\hline\n\\endfoot\n\\hline\n" end + rows_new << r end - table=rows.join #@dob[:dal].obj=rows.join + table=rows_new.join #@dob[:dal].obj=rows.join ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}" else '' end @@ -211,17 +216,18 @@ module SiSU_TeX_Pdf def heading_major dob=@dob title=@md.title.full - dob.tmp.strip! if dob.tmp - dob.tmp.gsub!(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2') + dob.tmp=dob.tmp.strip if dob.tmp + dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'') cont_ln=dob.tmp.dup - cont_ln.gsub!(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2') - cont_ln.gsub!(@@tex_pattern_margin_number,'') + cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(@@tex_pattern_margin_number,'') clearp=(dob.lv =~/B/ && dob.obj =='Metadata') ? "\\clearpage\n" : '' if dob.tmp =~/\\[Ff]ootnote/ #and dob =~/^[1-6]#{Tex[:tilde]}/ # removing footnotes from headings! - cont_ln.gsub!(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ') - cont_ln.gsub!(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') + cont_ln=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' '). + gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') end - dob.tmp.gsub!(/^(.*)\n?$/m, + dob.tmp=dob.tmp.gsub(/^(.*)\n?$/m, "#{clearp}\\part*{\\1} \\addcontentsline{toc}{section}{#{cont_ln}} \\markboth{#{title}}\n") @@ -229,23 +235,24 @@ module SiSU_TeX_Pdf end def level4 dob=@dob - dob.tmp.strip! if dob.tmp - dob.tmp.gsub!(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2') + dob.tmp=dob.tmp.strip if dob.tmp + dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'') cont_ln=dob.tmp.dup - cont_ln.gsub!(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2') - cont_ln.gsub!(@@tex_pattern_margin_number,'') - cont_ln.gsub!(/#{Tex[:backslash]*2}/,"#{Tex[:backslash]*4}") # added w42 - cont_ln.gsub!(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 - cont_ln.gsub!(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(@@tex_pattern_margin_number,''). + gsub(/#{Tex[:backslash]*2}/,"#{Tex[:backslash]*4}"). # added w42 + gsub(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,''). #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + gsub(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 title=@md.title.full if dob.name =~/endnotes/ - dob.tmp.gsub!(/.+/m,'') + dob.tmp=dob.tmp.gsub(/.+/m,'') end if dob.tmp =~/\\footnote/ #and dob =~/^[1-6]#{Tex[:tilde]}/ # removing footnotes from headings! - cont_ln.gsub!(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ') - cont_ln.gsub!(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') + cont_ln=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' '). + gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') end - dob.tmp.gsub!(/^(.*)?\n?$/m,"\\subsubsection*{\\1} + dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m,"\\subsubsection*{\\1} \\addcontentsline{toc}{subsection}{#{cont_ln}} \\markright{#{title}}") dob @@ -253,19 +260,20 @@ module SiSU_TeX_Pdf def level5 dob=@dob # there is a problem here with creation of headers does not do what you would want it to header starts with a * and is not in bold work on \\@txt*, same for next section 2002w46 - dob.tmp.strip! if dob.tmp - dob.tmp.gsub!(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2') + dob.tmp=dob.tmp.strip if dob.tmp + dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'') cont_ln=dob.tmp.dup - cont_ln.gsub!(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2') - cont_ln.gsub!(@@tex_pattern_margin_number,'') - cont_ln.gsub!(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 - cont_ln.gsub!(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 - cont_ln.gsub!(/\\\&/,' and ') #revisit: tmp bugfix 200507, substitutes & with 'and' in toc, needed e.g. for AT&T, see ffa + cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(@@tex_pattern_margin_number,''). + gsub(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,''). #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + gsub(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,''). #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + gsub(/\\\&/,' and ') #revisit: tmp bugfix 200507, substitutes & with 'and' in toc, needed e.g. for AT&T, see ffa if dob.tmp =~/\\footnote/ #and dob =~/^[1-6]#{Tex[:tilde]}/ # removing footnotes from headings! - cont_ln.gsub!(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ') - cont_ln.gsub!(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') + cont_ln=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' '). + gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') end - dob.tmp.gsub!(/^(.*)?\n?$/m, + dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m, "\\subsubsection*{\\1} \\addcontentsline{toc}{subsubsection}{#{cont_ln} \\\\ }") @@ -274,23 +282,161 @@ module SiSU_TeX_Pdf def level6 dob=@dob # there is a problem here with creation of headers does not do what you would want it to header starts with a * and is not in bold work on \\sub@txt*, same for previous section 2002w46 - dob.tmp.strip! if dob.tmp - dob.tmp.gsub!(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2') + dob.tmp=dob.tmp.strip if dob.tmp + dob.tmp=dob.tmp.gsub(/\\begin\{(bfseries|itshape)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(/#{Mx[:url_o]}|#{Mx[:url_c]}/,'') cont_ln=dob.tmp.dup - cont_ln.gsub!(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2') - cont_ln.gsub!(@@tex_pattern_margin_number,'') - cont_ln.gsub!(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 - cont_ln.gsub!(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + cont_ln=cont_ln.gsub(/\\begin\{(monosp)\}(.+?)\\end\{\1\}/m,'\2'). + gsub(@@tex_pattern_margin_number,''). + gsub(/\\footnote\[\d+\]\{%.+?\\end\{scriptsize\}\s*\}/m,''). #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 + gsub(/\\Footnote[A]\{[*+]+\d*\}\{%.+?\\end\{scriptsize\}\s*\}/m,'') #arbitrary bugfix, revisit should not be necessary, eg. wta.1994 2004w22 if dob.tmp =~/\\footnote/ #and dob =~/^[1-6]#{Tex[:tilde]}/ # removing footnotes from headings! - cont_ln.gsub!(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ') - cont_ln.gsub!(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') + cont_ln=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' '). + gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ') end - dob.tmp.gsub!(/^(.*)?\n?$/m, + dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m, "\\subsubsection*{\\1} \\addcontentsline{toc}{subsubsection}{~~~~#{cont_ln} \\\\ }") + #dob.tmp.gsub(/^(.*)?\n?$/m, + # '\subsubsection*{\1}') dob end + def hang + case @dob.indent + when /0/ + case @dob.hang + when /0/; indent,hang='0mm', '0mm' + when /1/; indent,hang='0mm','10mm' + when /2/; indent,hang='0mm','20mm' + when /3/; indent,hang='0mm','30mm' + when /4/; indent,hang='0mm','40mm' + when /5/; indent,hang='0mm','50mm' + when /6/; indent,hang='0mm','60mm' + when /7/; indent,hang='0mm','70mm' + when /8/; indent,hang='0mm','80mm' + when /9/; indent,hang='0mm','90mm' + end + when /1/ + case @dob.hang + when /0/; indent,hang='10mm','-10mm' + when /1/; indent,hang='10mm', '0mm' + when /2/; indent,hang='10mm', '10mm' + when /3/; indent,hang='10mm', '20mm' + when /4/; indent,hang='10mm', '30mm' + when /5/; indent,hang='10mm', '40mm' + when /6/; indent,hang='10mm', '50mm' + when /7/; indent,hang='10mm', '60mm' + when /8/; indent,hang='10mm', '70mm' + when /9/; indent,hang='10mm', '80mm' + end + when /2/ + case @dob.hang + when /0/; indent,hang='20mm','-20mm' + when /1/; indent,hang='20mm','-10mm' + when /2/; indent,hang='20mm', '0mm' + when /3/; indent,hang='20mm', '10mm' + when /4/; indent,hang='20mm', '20mm' + when /5/; indent,hang='20mm', '30mm' + when /6/; indent,hang='20mm', '40mm' + when /7/; indent,hang='20mm', '50mm' + when /8/; indent,hang='20mm', '60mm' + when /9/; indent,hang='20mm', '70mm' + end + when /3/ + case @dob.hang + when /0/; indent,hang='30mm','-30mm' + when /1/; indent,hang='30mm','-20mm' + when /2/; indent,hang='30mm','-10mm' + when /3/; indent,hang='30mm', '0mm' + when /4/; indent,hang='30mm', '10mm' + when /5/; indent,hang='30mm', '20mm' + when /6/; indent,hang='30mm', '30mm' + when /7/; indent,hang='30mm', '40mm' + when /8/; indent,hang='30mm', '50mm' + when /9/; indent,hang='30mm', '60mm' + end + when /4/ + case @dob.hang + when /0/; indent,hang='40mm','-40mm' + when /1/; indent,hang='40mm','-30mm' + when /2/; indent,hang='40mm','-20mm' + when /3/; indent,hang='40mm','-10mm' + when /4/; indent,hang='40mm', '0mm' + when /5/; indent,hang='40mm', '10mm' + when /6/; indent,hang='40mm', '20mm' + when /7/; indent,hang='40mm', '30mm' + when /8/; indent,hang='40mm', '40mm' + when /9/; indent,hang='40mm', '50mm' + end + when /5/ + case @dob.hang + when /0/; indent,hang='50mm','-50mm' + when /1/; indent,hang='50mm','-40mm' + when /2/; indent,hang='50mm','-30mm' + when /3/; indent,hang='50mm','-20mm' + when /4/; indent,hang='50mm','-10mm' + when /5/; indent,hang='50mm', '0mm' + when /6/; indent,hang='50mm', '10mm' + when /7/; indent,hang='50mm', '20mm' + when /8/; indent,hang='50mm', '30mm' + when /9/; indent,hang='50mm', '40mm' + end + when /6/ + case @dob.hang + when /0/; indent,hang='60mm','-60mm' + when /1/; indent,hang='60mm','-50mm' + when /2/; indent,hang='60mm','-40mm' + when /3/; indent,hang='60mm','-30mm' + when /4/; indent,hang='60mm','-20mm' + when /5/; indent,hang='60mm','-10mm' + when /6/; indent,hang='60mm', '0mm' + when /7/; indent,hang='60mm', '10mm' + when /8/; indent,hang='60mm', '20mm' + when /9/; indent,hang='60mm', '30mm' + end + when /7/ + case @dob.hang + when /0/; indent,hang='70mm','-70mm' + when /1/; indent,hang='70mm','-60mm' + when /2/; indent,hang='70mm','-50mm' + when /3/; indent,hang='70mm','-40mm' + when /4/; indent,hang='70mm','-30mm' + when /5/; indent,hang='70mm','-20mm' + when /6/; indent,hang='70mm','-10mm' + when /7/; indent,hang='70mm', '0mm' + when /8/; indent,hang='70mm', '10mm' + when /9/; indent,hang='70mm', '20mm' + end + when /8/ + case @dob.hang + when /0/; indent,hang='80mm','-80mm' + when /1/; indent,hang='80mm','-70mm' + when /2/; indent,hang='80mm','-60mm' + when /3/; indent,hang='80mm','-50mm' + when /4/; indent,hang='80mm','-40mm' + when /5/; indent,hang='80mm','-30mm' + when /6/; indent,hang='80mm','-20mm' + when /7/; indent,hang='80mm','-10mm' + when /8/; indent,hang='80mm', '0mm' + when /9/; indent,hang='80mm', '10mm' + end + when /9/ + case @dob.hang + when /0/; indent,hang='90mm','-90mm' + when /1/; indent,hang='90mm','-80mm' + when /2/; indent,hang='90mm','-70mm' + when /3/; indent,hang='90mm','-60mm' + when /4/; indent,hang='90mm','-50mm' + when /5/; indent,hang='90mm','-40mm' + when /6/; indent,hang='90mm','-30mm' + when /7/; indent,hang='90mm','-20mm' + when /8/; indent,hang='90mm','-10mm' + when /9/; indent,hang='90mm', '0mm' + end + end + "\\begin{ParagraphHang}{#{indent}}{#{hang}}#{@dob.tmp} \\end{ParagraphHang}}" + end def indent indent=case @dob.indent when /1/; '0mm' @@ -326,79 +472,18 @@ module SiSU_TeX_Pdf blt end def symbol_graphic - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) image='c_' + /<:=\s*(\S+?)\s*>/m.match(@txt).captures.join + '.png' #watch - if FileTest.file?("#{dir.path.image_source_tex}/#{image}") + if FileTest.file?("#{dir.path.image_source_include}/#{image}") @txt.gsub!(/<:=\s*(\S+?)\s*>/, - "\\includegraphics*[width=11pt]{#{dir.path.image_source_tex}/c_\\1.png}") + "\\includegraphics*[width=11pt]{#{dir.path.image_source_include}/c_\\1.png}") else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{image}" missing},"search path: #{dir.path.image_source_tex}").error2 unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:",%{"#{image}" missing},"search path: #{dir.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ @txt.gsub!(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,'') # fragile match operator\\ fragile ! end end - def image - dir=SiSU_Env::Info_env.new(@md.fns) - image,m=/#{Mx[:lnk_o]}\s*(\S+)\s+.+?width=``(\d+)''.+?#{Mx[:lnk_c]}/m.match(@txt).captures - width=m[1] || '100' - width=width.to_i*0.4 - image_source=if @md.fns =~/\.(?:ssm\.)?sst$/ \ - and FileTest.file?("#{dir.path.image_source_local_tex}/#{image}") - dir.path.image_source_local_tex - elsif @md.fns =~/\.-ss[tm]$/ \ - and FileTest.file?("#{dir.path.image_source_remote_tex}/#{image}") - dir.path.image_source_remote_tex - elsif FileTest.file?("#{dir.path.image_source_tex}/#{image}") - dir.path.image_source_tex - else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{image}" missing},"search locations: #{dir.path.image_source_local_tex},#{dir.path.image_source_remote_tex} and #{dir.path.image_source_tex}").error2 unless @md.cmd =~/q/ - nil - end - if image_source #CHECK - @txt.gsub!(/#{Mx[:lnk_o]}\s*(\S+)\s+.+?#{Mx[:lnk_c]}/, - @center_begin + "\\includegraphics*[width=#{width}pt]{#{image_source}/\\1}" + @center_end ) - else @txt.gsub!(/#{Mx[:lnk_o]}\s*(\S+)\s+.+?#{Mx[:lnk_c]}/,'\1}') - end - end - def png(ps='') #fc missing image check - dir=SiSU_Env::Info_env.new(@md.fns) - # messy clean up - z=@txt[/#{Mx[:lnk_o]}(\S.+?)#{Mx[:lnk_c]}(?:image|png)/,1].strip if @txt =~ /#{Mx[:lnk_o]}\S.+?#{Mx[:lnk_c]}(?:image|png)/ # match operator for z \\ fragile ! - if z #debug 2004w14 - image=z[/(\S+?\.(?:png|jpg|gif)\b)/m] - image.gsub!(/\\/,'') - width=if z =~ /\d+x\d*/ - w=(z[/\s(\d+)x\d*/,1]).to_i - w*0.8 - else '100' #revisit, is bug for small images/icons - end - width='380' if width.to_i > 380 - c=z[/``(.+?)''/m] - end - hsp="\n{\\color{mywhite} .}&~\n" # ~ character for hardspace - caption="{\\\\\\\ \n\\begin{scriptsize}#{hsp*3}#{c}\\end{scriptsize}&}" if c - image_source=if @md.fns =~/\.(?:ssm\.)?sst$/ \ - and FileTest.file?("#{dir.path.image_source_local_tex}/#{image}") - dir.path.image_source_local_tex - elsif @md.fns =~/\.-ss[tm]$/ \ - and FileTest.file?("#{dir.path.image_source_remote_tex}/#{image}") - dir.path.image_source_remote_tex - elsif FileTest.file?("#{dir.path.image_source_tex}/#{image}") - dir.path.image_source_tex - else - unless image.nil? \ - or image.length < 2 - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{image}" missing},"search locations: #{dir.path.image_source_local_tex},#{dir.path.image_source_remote_tex} and #{dir.path.image_source_tex}").error2 unless @md.cmd =~/q/ - end - nil - end - if image_source - @txt.gsub!(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}(image|png)/, # fragile match operator\\ fragile ! - "#{@center_begin}\n\\includegraphics*[width=#{width}pt]{#{image_source}/#{image}}#{caption}#{@center_end}") - else @txt.gsub!(/#{Mx[:lnk_o]}\S+\.(png|jpg|gif).+?#{Mx[:lnk_c]}(image|png)/,'') - end - end def url_str_internal(str,idx=nil) - map_nametags=SiSU_Particulars::Combined_singleton.instance.get_map_nametags(@md).nametags_map #p map_nametags + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/m rgx_url_relative=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}:\S+?#{Mx[:rel_c]}/m rgx_url_internal=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}#?\S+?#{Mx[:rel_c]}/m @@ -419,10 +504,10 @@ module SiSU_TeX_Pdf map_nametags[url][:ocn] else nil end - ocn_lnk=(url=~/^\d+$/ ? url : ocn_lnk) + ocn_lnk=(url=~/^\d+$/ ? url : ocn_lnk) if ocn_lnk and not ocn_lnk.empty? idx \ - ? (str.sub!(rgx_url_internal,"\\hyperlink{#{ocn_lnk}}{#{link}}")) \ + ? (str.sub!(rgx_url_internal,"\\hyperlink{#{ocn_lnk}}{#{link}}")) : (str.sub!(rgx_url_internal,"#{@brace_rel.tex_open}\\hyperlink{#{ocn_lnk}}{#{link}}#{@brace_rel.tex_close}")) else puts %{name tag: "#{url}" not found} @@ -433,8 +518,7 @@ module SiSU_TeX_Pdf #? (str.sub!(rgx_url_internal,"\\hyperlink{#{url}}{#{link}}")) \ #: (str.sub!(rgx_url_internal,"#{@brace_rel.tex_open}\\hyperlink{#{url}}{#{link}}#{@brace_rel.tex_close}")) end - str.gsub!(/#{Xx[:protect]}/,'') - str + str=str.gsub(/#{Xx[:protect]}/,'') end def url_str(str) rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m @@ -446,7 +530,7 @@ module SiSU_TeX_Pdf link=z.strip link.gsub!(/&/,"#{Xx[:protect]}&") str.sub!(rgx_url_generic,"#{@brace_rel.tex_open}\\href{#{url}}{#{link}}#{@brace_rel.tex_close}") - str.gsub!(/#{Xx[:protect]}/,'') + str=str.gsub(/#{Xx[:protect]}/,'') str else str end @@ -471,6 +555,8 @@ module SiSU_TeX_Pdf link.gsub!(/&/,"#{Xx[:protect]}&") dob.tmp.sub!(rgx_url_generic,"#{@brace_rel.tex_open}\\href{#{url}}{#{link}}#{@brace_rel.tex_close}#{punctuate}") dob.tmp.gsub!(/#{Xx[:protect]}/,'') + #dob.tmp=dob.tmp.sub(rgx_url_generic,"#{@brace_rel.tex_open}\\href{#{url}}{#{link}}#{@brace_rel.tex_close}#{punctuate}"). + # gsub(/#{Xx[:protect]}/,'') dob else dob end @@ -480,7 +566,7 @@ module SiSU_TeX_Pdf end def urls_txt_and_images dob=@dob - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) @dm={ 'a4'=> @tx.a4.landscape.img_px, 'letter'=> @tx.letter.landscape.img_px, @@ -537,44 +623,61 @@ module SiSU_TeX_Pdf hsp="\n{\\color{mywhite} .}&~\n" # ~ character for hardspace caption=(c ? "{\\\\\ \n\\begin{scriptsize}#{hsp*3}#{c}\\end{scriptsize}&}" : '') elsif images_hash[ps] =~/#{Mx[:lnk_o]}\s*(\S+\.?\.(?:png|jpg|gif))/m - SiSU_Screen::Ansi.new(@md.cmd,%{document built without image: "#{$1}" as image dimensions not provided (either image not found or neither imagemagick nor graphicsmagick is installed)?\n}).print_grey #unless @opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,%{document built without image: "#{$1}" as image dimensions not provided (either image not found or neither imagemagick nor graphicsmagick is installed)?\n}).print_grey #unless @opt.cmd =~/q/ images_hash[ps].gsub!(/#{Mx[:lnk_o]}\s*(\S+\.?\.(?:png|jpg|gif))/,'[image]') end if image #most images fc etc. #% clean up ! - if @md.fns =~/\.(?:ssm\.)?sst$/ \ - and FileTest.file?("#{dir.path.image_source_local_tex}/#{image}") + if FileTest.file?("#{dir.path.image_source_include}/#{image}") case images_hash[ps] when url_image_rgx images_hash[ps].sub!(url_image_rgx, - "#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_local_tex}/#{image}}}#{caption} #{@center_end}") + "#{@center_begin}\\\n\\href{#{url}}\n{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include}/#{image}}}#{caption}#{@center_end}") when image_rgx images_hash[ps].sub!(image_rgx, - "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_local_tex}/#{image}}#{caption} #{@center_end}") + "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include}/#{image}}#{caption}#{@center_end}") end images_hash[ps] - elsif @md.fns =~/\.-ss[tm]$/ \ - and FileTest.file?("#{dir.path.image_source_remote_tex}/#{image}") + elsif @md.opt.f_pth[:pth] =~/\/\S+?\/sisupod\/\S+?\/sisupod\/doc/ + pt=/(\/\S+?\/sisupod\/\S+?\/sisupod)\/doc/.match(@md.opt.f_pth[:pth])[1] + img_src=pt + '/image' + if FileTest.file?("#{img_src}/#{image}") + img_src + + case images_hash[ps] + when url_image_rgx + images_hash[ps].sub!(url_image_rgx, + "#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{img_src}/#{image}}}#{caption} #{@center_end}") + when image_rgx + images_hash[ps].sub!(image_rgx, + "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{img_src}/#{image}}#{caption} #{@center_end}") + end + images_hash[ps] + end + + elsif @md.fns =~/\.(?:ssm\.)?sst$/ \ + and FileTest.file?("#{dir.path.image_source_include_local}/#{image}") case images_hash[ps] when url_image_rgx images_hash[ps].sub!(url_image_rgx, - "#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_remote_tex}/#{image}}}#{caption}#{@center_end}") + "#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_local}/#{image}}}#{caption} #{@center_end}") when image_rgx images_hash[ps].sub!(image_rgx, - "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_remote_tex}/#{image}}#{caption}#{@center_end}") + "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_local}/#{image}}#{caption} #{@center_end}") end images_hash[ps] - elsif FileTest.file?("#{dir.path.image_source_tex}/#{image}") + elsif @md.fns =~/\.-ss[tm]$/ \ + and FileTest.file?("#{dir.path.image_source_include_remote}/#{image}") case images_hash[ps] when url_image_rgx images_hash[ps].sub!(url_image_rgx, - "#{@center_begin}\\\n\\href{#{url}}\n{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_tex}/#{image}}}#{caption}#{@center_end}") + "#{@center_begin}\\\n\\href{#{url}}{\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_remote}/#{image}}}#{caption}#{@center_end}") when image_rgx images_hash[ps].sub!(image_rgx, - "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_tex}/#{image}}#{caption}#{@center_end}") + "#{@center_begin}\\\n\\includegraphics*[width=#{width[ps]}pt]{#{dir.path.image_source_include_remote}/#{image}}#{caption}#{@center_end}") end images_hash[ps] else - SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{image}" missing},"search locations: #{dir.path.image_source_local_tex},#{dir.path.image_source_remote_tex} and #{dir.path.image_source_tex}").error2 unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,"ERROR - image:",%{"#{image}" missing},"search locations: #{dir.path.image_source_include_local},#{dir.path.image_source_include_remote} and #{dir.path.image_source_include}").error2 unless @md.opt.cmd =~/q/ if images_hash[ps] =~url_image_rgx \ or images_hash[ps] =~image_rgx images_hash[ps]='' @@ -595,13 +698,13 @@ module SiSU_TeX_Pdf images_hash use_images_hash={} images_hash.each do |k,t| - use_images_hash[k]={ :l =>t, :p =>t} + use_images_hash[k]={ l: t, p: t} end dob.tmp=use_images_hash dob end def title - title=SiSU_TeX_Pdf::Special_characters.new(@md,@md.title.full).special_characters_safe + title=SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.title.full).special_characters_safe "\n\\title{#{title}}" end def title_landscape @@ -611,12 +714,12 @@ module SiSU_TeX_Pdf title end end - class Format_head - require "#{SiSU_lib}/i18n" # defaults.rb + class FormatHead + require_relative 'prog_text_translation' # prog_text_translation.rb def initialize(md,t_o) @md,@t_o=md,t_o - @env=SiSU_Env::Info_env.new(@md.fns) - if t_o.class==Hash + @env=SiSU_Env::InfoEnv.new(@md.fns) + if t_o.is_a?(Hash) @txt =t_o[:txt] || nil @subtitle=t_o[:subtitle] || nil @ps=t_o[:paper_size] || nil @@ -626,28 +729,73 @@ module SiSU_TeX_Pdf p t_o.class p caller end - @tx=SiSU_Env::Get_init.instance.tex + @tx=SiSU_Env::GetInit.instance.tex @brace_url=SiSU_Viz::Skin.new.url_decoration - @tex2pdf=@@tex3pdf ||=SiSU_Env::System_call.new.tex2pdf_engine + @tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine @ps=@txt if @txt=~/(?:a4|letter|legal|book|a5|b5)/i - @lang ||=SiSU_i18n::Language.new(@md) + @lang ||=SiSU_i18n::Languages.new #.list[@md.opt.lng][:xlp] + @author=if defined? @md.creator.author \ + and @md.creator.author=~/\S+/ + SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.creator.author).special_characters_safe + else '' + end + @subject=if defined? @md.classify.subject \ + and @md.classify.subject=~/\S+/ + SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.classify.subject).special_characters_safe + else '' + end + @keywords=if defined? @md.classify.keywords \ + and @md.classify.keywords=~/\S+/ + SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.classify.keywords).special_characters_safe + else '' + end end def tex_head_lang #babel 18n lang_char_arr=@md.i18n - mainlang_char=lang_char_arr.slice(0) - mainlang=@lang.tex_name(mainlang_char) - otherlang=[] - lang_char_arr.slice(1..9).each { |ch| otherlang << @lang.tex_name(ch) } + mainlang_char=if @md.i18n == Array \ + and @md.i18n.length > 0 + lang_char_arr.slice(0) + else @md.opt.lng + end + mainlang=@lang.list[mainlang_char][:xlp] + otherlang=if mainlang != 'english' + [ @lang.list['en'][:xlp] ] + else [] + end + if lang_char_arr.length > 0 + lang_char_arr.slice(1..9).each { |ch| otherlang << @lang.list[ch][:xlp] } + otherlang=otherlang.uniq + end otherlang=otherlang.join(',') - { :mainlang=>mainlang, :otherlang=>otherlang } + { mainlang: mainlang, otherlang: otherlang } end def tex_head_encode - texpdf_font=if defined? @md.make.texpdf_font \ - and not @md.make.texpdf_font.nil? \ - and @md.make.texpdf_font=~/\S{3,}/ - @md.make.texpdf_font - else @env.font.texpdf + texpdf_font=if defined? @md.make.texpdf_font.main \ + and not @md.make.texpdf_font.main.nil? \ + and @md.make.texpdf_font.main=~/\S{3,}/ + @md.make.texpdf_font.main + else @env.font.texpdf.main + end + texpdf_font_sans=if defined? @md.make.texpdf_font.sans \ + and not @md.make.texpdf_font.sans.nil? \ + and @md.make.texpdf_font.sans=~/\S{3,}/ # not used + @md.make.texpdf_font.sans + else @env.font.texpdf.sans + end + texpdf_font_serif=if defined? @md.make.texpdf_font.serif \ + and not @md.make.texpdf_font.serif.nil? \ + and @md.make.texpdf_font.serif=~/\S{3,}/ # not used + @md.make.texpdf_font.serif + else @env.font.texpdf.serif + end + texpdf_font_mono=if defined? @md.make.texpdf_font.mono \ + and not @md.make.texpdf_font.mono.nil? \ + and @md.make.texpdf_font.mono=~/\S{3,}/ + @md.make.texpdf_font.mono + else @env.font.texpdf.mono end + # you may wish to check selected font against avaiable fonts: + # fc-list :outline -f "%{family}\n" case @tex2pdf when /xe/ <<WOK @@ -655,6 +803,9 @@ module SiSU_TeX_Pdf \\setmainlanguage{#{tex_head_lang[:mainlang]}} \\setotherlanguage{#{tex_head_lang[:otherlang]}} \\setmainfont{#{texpdf_font}} +\\setmonofont[Scale=0.85]{#{texpdf_font_mono}} +% \\setsansfont{#{texpdf_font_sans}} +% \\setromanfont{#{texpdf_font_serif}} WOK when /pdf/ if @md.file_encoding =~ /iso-?8859/i #% iso8859 @@ -672,7 +823,7 @@ WOK end end def tex_head_info - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] + generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] lastdone="Last Generated on: #{Time.now}" rubyv="Ruby version: #{@md.ruby_version}" <<WOK @@ -689,9 +840,9 @@ WOK <<WOK #{tex_head_info} \\documentclass[#{d[:fontsize]},#{d[:papertype]},titlepage]{scrartcl} %with titlepage -\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} -\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} -\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} +\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} +\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} +\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} \\setlength{\\headsep}{#{d[:headsep]}} \\setlength{\\marginparsep}{#{d[:marginparsep]}} \\setlength{\\marginparwidth}{#{d[:marginparwidth]}} @@ -702,9 +853,9 @@ WOK <<WOK #{tex_head_info} \\documentclass[#{d[:fontsize]},#{d[:papertype]},landscape,titlepage,twocolumn]{scrartcl} %with titlepage -\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} -\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} -\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} +\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} +\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} +\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} \\setlength{\\headsep}{#{d[:headsep]}} \\setlength{\\columnsep}{#{d[:columnsep]}} \\setlength{\\marginparsep}{#{d[:marginparsep]}} @@ -715,9 +866,9 @@ WOK <<WOK #{tex_head_info} \\documentclass[#{d[:fontsize]},#{d[:papertype]},titlepage]{scrartcl} %with titlepage -\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} -\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} -\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} +\\setlength{\\textheight}{#{d[:textheight]}mm} \\setlength{\\textwidth}{#{d[:textwidth]}mm} +\\setlength{\\oddsidemargin}{#{d[:oddsidemargin]}} \\setlength{\\evensidemargin}{#{d[:evensidemargin]}} +\\setlength{\\topmargin}{#{d[:topmargin]}} \\setlength{\\headheight}{#{d[:headheight]}} \\setlength{\\headsep}{#{d[:headsep]}} \\setlength{\\marginparsep}{#{d[:marginparsep]}} \\setlength{\\marginparwidth}{#{d[:marginparwidth]}} @@ -816,10 +967,9 @@ WOK \\usepackage[#{@tex2pdf}, #{color.strip} pdftitle={#{@txt}}, -% pdftitle={Untitled}, - pdfauthor={LM-sisu-scribe}, - pdfsubject={law}, - pdfkeywords={law}, + pdfauthor={#{@author}}, + pdfsubject={#{@subject}}, + pdfkeywords={#{@keywords}}, pageanchor=true, plainpages=true, pdfpagelabels=true, @@ -874,6 +1024,20 @@ WOK WOK end end + def tex_head_codeblock(codeblock_box_type) + codeblock_box=if codeblock_box_type=='listings' + <<WOK +\\usepackage{listings} +\\usepackage{color} +\\usepackage{textcomp} +WOK + elsif codeblock_box_type=='boites' + "\\usepackage{boites}" + else + "\\usepackage{boites}" + end + codeblock_box + end def tex_head_misc <<WOK \\usepackage{textcomp} @@ -889,14 +1053,15 @@ WOK % amssymb used for backslash WOK end - def document_head_with_orientation + def document_head_with_orientation(codeblock_box_type) endnotes=("\\usepackage{endnotes}" if @txt =~/endnotes?/)||'' #not implemented see also def endnotes - @lang.tex_name(@md.i18n[0]) + @lang.list[@md.i18n[0]][:xlp] <<WOK #{tex_head_paper} #{tex_head_encode} #{tex_head_pdftex_dvi} #{tex_head_misc} +#{tex_head_codeblock(codeblock_box_type)} \\setcounter{secnumdepth}{2} \\setcounter{tocdepth}{4} \\makeatletter @@ -916,6 +1081,19 @@ WOK \\item[] } {\\end{list}} + +\\newenvironment{ParagraphHang}[2]% +{ +\\begin{list}{}{% +\\setlength\\topsep{0pt}% +\\addtolength{\\leftmargin}{#1} +\\itemindent=#2 +\\setlength\\parsep{0pt plus 1pt}% +} +\\item[] +} +{\\end{list}} + \\newenvironment{Bullet}[1]% { \\begin{list}{}{% @@ -954,20 +1132,65 @@ WOK {-\\baselineskip}{0.5\\baselineskip}% {\\normalfont\\normalsize\\itshape\\raggedright}} % \\makeatother -\\selectlanguage{#{@lang.tex_name(@md.i18n[0])}} +\\selectlanguage{#{@lang.list[@md.i18n[0]][:xlp]}} WOK end def a4generic end end - class Special_characters - def initialize(md,str,is='') + class SpecialCharacters + def initialize(md,str,is=:default) @md,@txt,@is=md,str,is @brace_url=SiSU_Viz::Skin.new.url_decoration - @tex2pdf=@@tex3pdf ||=SiSU_Env::System_call.new.tex2pdf_engine + @tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine + end + def xetex_code_listings(str,is=:default) # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list + word=str.scan(/\S+|\n/) #unless line =~/^(?:@\S|%+\s)/ + para_array=[] + str=if word + word.each do |w| # _ - / # | : ! ^ ~ + w=w.gsub(/#{Mx[:gl_o]}#lt#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}#gt#{Mx[:gl_c]}/,'>'). + gsub(/[\\]?~/,'~'). + gsub(/[#{Mx[:br_line]}#{Mx[:br_paragraph]}]/,"\n"). #watch + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'~'). #126 usual + gsub(/\\?\||#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|') #unless is=='code' #unless w=~/<~\d+;(?:[ohmu]|[0-6]:)\d+;\w\d+>/ # | SiSU not really special sisu character but done, also LaTeX + para_array << w + end + str=para_array.join(' ') + str=str.strip unless is==:code + str + else '' + end + str=str.gsub(/\s*#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}\s*/,' '). + gsub(/.+?<-#>/,''). + gsub(/#{Mx[:br_eof]}/,''). + gsub(/#{Mx[:br_endnotes]}/,''). + #problem sequence -> + gsub(/&(?:lt|#060);/,'<'). # < SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#(?:gt|062)#{Mx[:gl_c]}/,'>'). # > SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'{'). # { SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'}'). # } SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'~'). # ~ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'#'). # # SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). # ! SiSU not really special sisu character but done, also LaTeX + #gsub(/(^|\s)\*\s/,'\1\asterisk '). # * should you wish to escape astrisk e.g. describing \*{bold}* + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'*'). # * should you wish to escape astrisk e.g. describing \*{bold}* + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). # - SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#043#{Mx[:gl_c]}/,'+'). # + SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#044#{Mx[:gl_c]}/,','). # + SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#038#{Mx[:gl_c]}/,'&'). #unless @txt=~/<:code>/ # / SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'/'). # / SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\\'). # \ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'_'). # _ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|'). # | SiSU not really special sisu character but done, also LaTeX + gsub(/#{Mx[:gl_o]}#058#{Mx[:gl_c]}/,':'). # : SiSU not really special sisu character but done, also LaTeX + gsub(/#{Mx[:gl_o]}#094#{Mx[:gl_c]}|\^/,'^'). # ^ SiSU not really special sisu character but done, also LaTeX + ##watch placement, problem sequence ^ + gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' '). + gsub(/\\copy(right|mark)?/,'<=copymark>') # ok problem with superscript end - def xetex_special_characters_1(str,is='') # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list - #str=Iconv.conv('ISO-8859-1', 'UTF-8', @txt) + def xetex_special_characters_1(str,is=:default) # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list + #str=Iconv.conv('ISO-8859-1', 'UTF-8', @txt) # `require': iconv will be deprecated in the future, use String#encode instead. word=str.scan(/\S+|\n/) #unless line =~/^(?:@\S|%+\s)/ para_array=[] str=if word @@ -975,166 +1198,149 @@ WOK if w !~/https?:/ \ and w=~/\/\S+?\// \ and w.length > 6 - w.gsub!(/([_.\/])/,'\1\-') + w=w.gsub(/([_.\/])/,'\1\-') end - w.gsub!(/#{Mx[:gl_o]}#lt#{Mx[:gl_c]}/,'<'); w.gsub!(/#{Mx[:gl_o]}#gt#{Mx[:gl_c]}/,'>') - w.gsub!(/[\\]?~/,'<=tilde>') - w.gsub!(/[#{Mx[:br_line]}#{Mx[:br_paragraph]}]/,' \newline ') #watch - w.gsub!(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>') #126 usual - w.gsub!(/\\?\||#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'<=pipe>') #unless is=='code' #unless w=~/<~\d+;(?:[ohmu]|[0-6]:)\d+;\w\d+>/ # | SiSU not really special sisu character but done, also LaTeX + w=w.gsub(/#{Mx[:gl_o]}#lt#{Mx[:gl_c]}/,'<').gsub(/#{Mx[:gl_o]}#gt#{Mx[:gl_c]}/,'>'). + gsub(/[\\]?~/,'<=tilde>'). + gsub(/[#{Mx[:br_line]}#{Mx[:br_paragraph]}]/,' \newline '). #watch + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>'). #126 usual + gsub(/\\?\||#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'\pipe') #unless is=='code' #unless w=~/<~\d+;(?:[ohmu]|[0-6]:)\d+;\w\d+>/ # | SiSU not really special sisu character but done, also LaTeX if w !~/#{Mx[:rel_o]}/ \ and w !~/#{Mx[:gl_o]}#/ - w.gsub!(/\#/,'<=hash>') + w=w.gsub(/\#/,'<=hash>') end para_array << w end str=para_array.join(' ') - str=str.strip unless is=='code' + str=str.strip unless is==:code str else '' end - str.gsub(/\s*#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}\s*/,' ') - str.gsub!(/.+?<-#>/,'') - str.gsub!(/#{Mx[:br_eof]}/,'') - str.gsub!(/#{Mx[:br_endnotes]}/,'') + str=str.gsub(/\s*#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}\s*/,' '). + gsub(/.+?<-#>/,''). + gsub(/#{Mx[:br_eof]}/,''). + gsub(/#{Mx[:br_endnotes]}/,'') #problem sequence -> - str.gsub!(/&(?:nbsp);|#{Mx[:nbsp]}/,'<=hardspace>') unless is=='code' # < SiSU special character also LaTeX - str.gsub!(/&(?:lt|#060);/,'<=lt>') # < SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#(?:gt|062)#{Mx[:gl_c]}/,'<=gt>') # > SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'<=curlyopen>') # { SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'<=curlyclose>') # } SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>') # ~ SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'\#') # # SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!') # ! SiSU not really special sisu character but done, also LaTeX - str.gsub!(/(^|\s)\*\s/,'\1\asterisk ') # * should you wish to escape astrisk e.g. describing \*{bold}* - str.gsub!(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'\*') # * should you wish to escape astrisk e.g. describing \*{bold}* - str.gsub!(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-') # - SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#043#{Mx[:gl_c]}/,'+') # + SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#044#{Mx[:gl_c]}/,',') # + SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#038#{Mx[:gl_c]}/,'<=amp>') #unless @txt=~/<:code>/ # / SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'<=slash>') # / SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'<=backslash>') # \ SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'<=underscore>') # _ SiSU special character also LaTeX - str.gsub!(/#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|') # | SiSU not really special sisu character but done, also LaTeX - str.gsub!(/#{Mx[:gl_o]}#058#{Mx[:gl_c]}/,':') # : SiSU not really special sisu character but done, also LaTeX - str.gsub!(/#{Mx[:gl_o]}#094#{Mx[:gl_c]}|\^/,'<=caret>') # ^ SiSU not really special sisu character but done, also LaTeX + str=str.gsub(/&(?:nbsp);|#{Mx[:nbsp]}/,'\hardspace') unless is==:code # < SiSU special character also LaTeX + str=str.gsub(/&(?:lt|#060);/,'\lt'). # < SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#(?:gt|062)#{Mx[:gl_c]}/,'\gt'). # > SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#123#{Mx[:gl_c]}/,'\curlyopen'). # { SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#125#{Mx[:gl_c]}/,'\curlyclose'). # } SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/,'<=tilde>'). # ~ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#035#{Mx[:gl_c]}/,'\#'). # # SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#033#{Mx[:gl_c]}/,'!'). # ! SiSU not really special sisu character but done, also LaTeX + gsub(/(^|\s)\*\s/,'\1\asterisk '). # * should you wish to escape astrisk e.g. describing \*{bold}* + gsub(/#{Mx[:gl_o]}#042#{Mx[:gl_c]}/,'\*'). # * should you wish to escape astrisk e.g. describing \*{bold}* + gsub(/#{Mx[:gl_o]}#045#{Mx[:gl_c]}/,'-'). # - SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#043#{Mx[:gl_c]}/,'+'). # + SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#044#{Mx[:gl_c]}/,','). # + SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#038#{Mx[:gl_c]}/,'<=amp>'). #unless @txt=~/<:code>/ # / SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#047#{Mx[:gl_c]}/,'\slash'). # / SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#092#{Mx[:gl_c]}/,'\textbackslash'). # \ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#095#{Mx[:gl_c]}/,'<=underscore>'). # _ SiSU special character also LaTeX + gsub(/#{Mx[:gl_o]}#124#{Mx[:gl_c]}/,'|'). # | SiSU not really special sisu character but done, also LaTeX + gsub(/#{Mx[:gl_o]}#058#{Mx[:gl_c]}/,':'). # : SiSU not really special sisu character but done, also LaTeX + gsub(/#{Mx[:gl_o]}#094#{Mx[:gl_c]}|\^/,'\caret'). # ^ SiSU not really special sisu character but done, also LaTeX ##watch placement, problem sequence ^ - str.gsub!(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' ') - str.gsub!(/\\copy(right|mark)?/,'<=copymark>') # ok problem with superscript - str - end - def xetex_special_characters_2(str,is='') - str.gsub!(/#{Mx[:gl_o]}#156#{Mx[:gl_c]}/,'\oe ') - str.gsub!(/\$/,'\$') - str.gsub!(/\#/,'\#') - str.gsub!(/\%/,'\%') - str.gsub!(/\~/,'\~') #revist, should not be necessary to mark remaining tildes + gsub(/<sup><font face=symbol>&atild;<\/font><\/sup>/,' '). + gsub(/\\copy(right|mark)?/,'<=copymark>') # ok problem with superscript + end + def xetex_special_characters_2(str,is=:default) + str=str.gsub(/#{Mx[:gl_o]}#156#{Mx[:gl_c]}/,'\oe '). + gsub(/\$/,'\$'). + gsub(/\#/,'\#'). + gsub(/\%/,'\%'). + gsub(/\~/,'\~') #revist, should not be necessary to mark remaining tildes if str !~/^\s*#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\s/ - str.gsub!(/_/,'\_') + str=str.gsub(/_/,'\_') end - str.gsub!(/\{/,'\{') - str.gsub!(/\}/,'\}') - if is=='code' - str.gsub!(/&/,'{\\\&}') - str.gsub!(/\\~(\\\{)/,'{$\tilde$}\1') - str.gsub!(/(\\\})\\~/,'\1{$\tilde$}') - str.gsub!(/\\~(\[)/,'{$\tilde$}\1') - str.gsub!(/(\])\\~/,'\1{$\tilde$}') - str.gsub!(/<=tilde>/,'{$\tilde$}') - str.gsub!(/<=pipe>/,'{\textbar}') - str.gsub!(/<=caret>/,'{\^{~}}') - str.gsub!(/<=hash>/,'{\#}') + str=str.gsub(/\{/,'\{'). + gsub(/\}/,'\}') + str=if is==:code + str.gsub(/&/,'{\\\&}'). + gsub(/\\~(\\\{)/,'{$\tilde$}\1'). + gsub(/(\\\})\\~/,'\1{$\tilde$}'). + gsub(/\\~(\[)/,'{$\tilde$}\1'). + gsub(/(\])\\~/,'\1{$\tilde$}'). + gsub(/<=tilde>/,'{$\tilde$}'). + gsub(/<=hash>/,'{\#}') else - str.gsub!(/ |#{Mx[:nbsp]}/,'~') # ~ character for hardspace - str.gsub!(/&/,'<=amp>') + str.gsub(/ |#{Mx[:nbsp]}/,'~'). # ~ character for hardspace + gsub(/&/,'<=amp>') end - str.gsub!(/&\S+?;/,' ') - str.gsub!(/§/u,'\S') #latex: space between next character not preserved? #str.gsub!(/§ /,'\S ') - str.gsub!(/£/u,'\pounds') - str.gsub!(/<a href=".+?">/,' ') - str.gsub!(/<\/a>/,' ') - str.gsub!(/((?:^|\s)#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - '\1\begin{scriptsize}\url{\2}\end{scriptsize}\3') #special case \{ e.g. \}http://url - str.gsub!(/#{Mx[:url_o]}\\_(\S+?)#{Mx[:url_c]}/, - '\begin{scriptsize}\url{\1}\end{scriptsize}') #special case \{ e.g. \}http://url - str.gsub!(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '\begin{scriptsize}\\url{\1}\end{scriptsize}') #specially escaped url no decoration - unless is=='code' - str.gsub!(/(^|#{Mx[:gl_c]}|\s)((?:https?|file|ftp):\/\/\S+?\.[^'"\s]+?)([;.,]?(?=\s|$))/, + str=str.gsub(/&\S+?;/,' '). + gsub(/§/u,'\S'). #latex: space between next character not preserved? #str.gsub(/§ /,'\S ') + gsub(/£/u,'\pounds'). + gsub(/<a href=".+?">/,' '). + gsub(/<\/a>/,' '). + gsub(/((?:^|\s)#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, + '\1\begin{scriptsize}\url{\2}\end{scriptsize}\3'). #special case \{ e.g. \}http://url + gsub(/#{Mx[:url_o]}\\_(\S+?)#{Mx[:url_c]}/, + '\begin{scriptsize}\url{\1}\end{scriptsize}'). #special case \{ e.g. \}http://url + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, + '\begin{scriptsize}\\url{\1}\end{scriptsize}') #specially escaped url no decoration + unless is==:code + str=str.gsub(/(^|#{Mx[:gl_c]}|\s)((?:https?|file|ftp):\/\/\S+?\.[^'"\s]+?)([;.,]?(?=\s|$))/, "\\1#{@brace_url.tex_open}\\begin{scriptsize}\\url{\\2}\\end{scriptsize}#{@brace_url.tex_close}\\3") #url matching with decoration <url> positive lookahead, sequence issue with { linked }http://url cannot use \b at start - else #code-block: angle brackets special characters, note _ already escaped - str.gsub!(/\\_</m,'{\UseTextSymbol{OML}{<}}') - str.gsub!(/\\_>/m,'{\UseTextSymbol{OML}{>}}') end - str.gsub!(/<:ee>/,'') - str.gsub!(/<!>/,' ') - #proposed change, insert, but may be redundant - str.gsub!(/<(br|p)>|<\/\s*(br|p)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} ") # Work Area - str.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}') - str.gsub!(/<h\d+>(.+?)<\/h\d+>/,'\begin{bfseries}\1 \end{bfseries}') - str.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}') - str.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}') # ulem - str.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''") # quote #CHECK - str.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}') # ulem - str.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}') # ulem - str.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$") - str.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$") - str.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\begin{monosp}\1\end{monosp}') - unless is=='code' - str.gsub!(/"(.+?)"/,'“\1”') # quote marks / quotations open & close " need condition exclude for code - str.gsub!(/\s+"/,' “') # open " - str.gsub!(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*"/,'\1“') #fix Mx[:lv_o] # open " - str.gsub!(/"(\s|\.|,|:|;)/,'”\1') # close " - str.gsub!(/"(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*$/,'”\1') #fix Mx[:lv_o] # close " - str.gsub!(/"(\.|,)/,'”') # close " - str.gsub!(/\s+'/,' `') # open ' - str.gsub!(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*'/,'\1`') #fix Mx[:lv_o] # open ' + str=str.gsub(/<:ee>/,''). + gsub(/<!>/,' '). #proposed change, insert, but may be redundant + gsub(/<(br|p)>|<\/\s*(br|p)>|<(br|p)\s*\/>/," #{Tex[:backslash]*2} "). # Work Area + gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\begin{bfseries}\1 \end{bfseries}'). + gsub(/<h\d+>(.+?)<\/h\d+>/,'\begin{bfseries}\1 \end{bfseries}'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\emph{\1}'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\uline{\1}'). # ulem + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,"``\\1''"). # quote #CHECK + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\uline{\1}'). # ulem + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\sout{\1}'). # ulem + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,"\$^{\\textrm{\\1}}\$"). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,"\$_{\\textrm{\\1}}\$"). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\begin{monosp}\1\end{monosp}') + unless is==:code + str=str.gsub(/"(.+?)"/,'“\1”'). # quote marks / quotations open & close " need condition exclude for code + gsub(/\s+"/,' “'). # open " + gsub(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*"/,'\1“'). #fix Mx[:lv_o] # open " + gsub(/"(\s|\.|,|:|;)/,'”\1'). # close " + gsub(/"(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*$/,'”\1'). #fix Mx[:lv_o] # close " + gsub(/"(\.|,)/,'”'). # close " + gsub(/\s+'/,' `'). # open ' + gsub(/^(#{Mx[:lv_o]}[1-6-]:\S*?#{Mx[:lv_c]}|<.+?>)?\s*'/,'\1`') #fix Mx[:lv_o] # open ' end - str.gsub!(/(<font.*?>|<\/font>)/,'') - str.gsub!(/\s*#{Mx[:fa_superscript_o]}(\S+?)#{Mx[:fa_superscript_c]}/,'^\1') + str=str.gsub(/(<font.*?>|<\/font>)/,''). + gsub(/\s*#{Mx[:fa_superscript_o]}(\S+?)#{Mx[:fa_superscript_c]}/,'^\1') str end def xetex_special_characters_3(str) - str.gsub!(/<br(\s*[^\/][^>])/,'\1') # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder - str.gsub!(/([^<][^b][^r]\s+)\/>/,'\1') # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder - #problem sequence (another kludge) -> - str.gsub!(/<=lt>/m,'{\UseTextSymbol{OML}{<}}') - str.gsub!(/<=gt>/m,'{\UseTextSymbol{OML}{>}}') - str.gsub!(/<=underscore>/,'\_') + str=str.gsub(/<br(\s*[^\/][^>])/,'\1'). # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder + gsub(/([^<][^b][^r]\s+)\/>/,'\1') # clean up, incredibly messy :-( footnote indents, problems if match exists in ordinary paragraphs? check! Work Area 200501 a bit tricky as must be able to match multiple times, and to clean remainder while str =~/(https?:\/\/\S+?)(?:<=tilde>\S+)+/ #tilde in urls \href treated differently from text #FIX - str.gsub!(/(https?:\/\/\S+?)(?:<=tilde>(\S+))+/,'\1~\2') + str=str.gsub(/(https?:\/\/\S+?)(?:<=tilde>(\S+))+/,'\1~\2') end - str.gsub!(/<=tilde>/,'{$\tilde$}') - str.gsub!(/<=pipe>/,'{\textbar}') - str.gsub!(/<=caret>/,'{\^{~}}') - str.gsub!(/<=exclaim>/,'\Verbatim{!}') - str.gsub!(/(https?:\/\/\S+?)(?:(?:<=hash>)(\S+))+/,'\1#\2') #hash in urls \href treated differently from text #FIX - str.gsub!(/<=hash>/,'{\#}') - str.gsub!(/<=hardspace>/,'{~}') #changed ... 2005 + str=str.gsub(/<=tilde>/,'{$\tilde$}'). + gsub(/(https?:\/\/\S+?)(?:(?:<=hash>)(\S+))+/,'\1#\2'). #hash in urls \href treated differently from text #FIX + gsub(/<=hash>/,'{\#}') while str =~/(https?:\/\/\S+?)(?:<=amp>\S+)+/ #amp in urls \href treated differently from text #FIX - str.gsub!(/(https?:\/\/\S+?)(?:<=amp>(\S+))+/,'\1&\2') + str=str.gsub(/(https?:\/\/\S+?)(?:<=amp>(\S+))+/,'\1&\2') end - str.gsub!(/<=amp>/,'{\\\&}') #changed ... 2005 - str.gsub!(/<=slash>/,'{/}') - str.gsub!(/<=backslash>/,'{\textbackslash}') - str.gsub!(/<=copymark>\s*(.+)/, - '^\copyright \textnormal{\1} \2') # watch likely to be problematic + str=str.gsub(/<=amp>/,'{\\\&}'). #changed ... 2005 + gsub(/<=copymark>\s*(.+)/, + '^\copyright \textnormal{\1} \2') # watch likely to be problematic str end - def special_characters_curly(str) - str.gsub!(/<=curlyopen>/,'\{') - str.gsub!(/<=curlyclose>/,'\}') - str + def special_characters_safe_close(str) + str=str.gsub(/<=tilde>/,'{$\tilde$}'). + gsub(/<=hash>/,'{\#}'). + gsub(/<=amp>/,'{\\\&}'). #changed ... 2005 + gsub(/<=copymark>\s*(.+)/, + '^\copyright \textnormal{\1} \2') # watch likely to be problematic end def special_characters_code_fix(str) - str.gsub!(/<=hardspace>/,'{~}') - str.gsub!(/<=pipe>/,'{\textbar}') - str.gsub!(/<=tilde>/,'{$\tilde$}') + str=str.gsub(/<=tilde>/,'{$\tilde$}') str end def special_characters_unsafe_1(str) #depreciated, make obsolete # some substitutions are sequence sensitive, rearrange with care. - str.gsub!(/\\backslash (copyright|clearpage|newpage)/,"\\\\\\1") #kludge bad solution, find out where tail is sent through specChar ! + str=str.gsub(/\\textbackslash (copyright|clearpage|newpage)/,"\\\\\\1") #kludge bad solution, find out where tail is sent through specChar ! str end def special_characters #special characters - some substitutions are sequence sensitive, rearrange with care. @@ -1147,8 +1353,8 @@ WOK end def special_word_break_points str=@txt - str.gsub!(/([_,.;:\/|=])/,'\1\-') - str.gsub!(/(--)(\S{4,})/,'\1\-\2') + str=str.gsub(/([_,.;:\/|=])/,'\1\-'). + gsub(/(--)(\S{4,})/,'\1\-\2') @txt=str end def special_number_break_points @@ -1160,20 +1366,26 @@ WOK str,is=@txt,@is str=xetex_special_characters_1(str,is) unless str.nil? str=xetex_special_characters_2(str,is) unless str.nil? # remove this to start with, causes issues + str=special_characters_safe_close(str) unless str.nil? + @txt=str + end + def characters_code_listings #special characters - some substitutions are sequence sensitive, rearrange with care. + str,is=@txt,@is + str=xetex_code_listings(str,is) unless str.nil? @txt=str end def special_characters_code str=@txt - str.gsub!(/ \\\\([ #{Mx[:br_nl]}]+|$)/,' \textbackslash\textbackslash\hardspace\1') + str=str.gsub(/ \\\\([ #{Mx[:br_nl]}]+|$)/,' \textbackslash\textbackslash\hardspace\1') str end end - class Use_TeX + class UseTeX attr_accessor :url,:txt,:date def initialize(md) @md=md - @vz=SiSU_Env::Get_init.instance.skin - @date=SiSU_Env::Info_date.new # #{@date.year} + @vz=SiSU_Env::GetInit.instance.skin + @date=SiSU_Env::InfoDate.new # #{@date.year} @copymark='{\\begin{footnotesize}\\raisebox{1ex}{\\copyright}\\end{footnotesize}}' @brace_url=SiSU_Viz::Skin.new.url_decoration end @@ -1205,7 +1417,7 @@ WOK end def header "\\lhead[ ]{ }\n" + - "\\chead[ \\fancyplain{} \\bfseries \\footnotesize \\leftmark ]{ \\fancyplain{} \\bfseries \\footnotesize \\rightmark }\n" + + "\\chead[ \\fancyplain{} \\bfseries \\footnotesize \\leftmark ]{ \\fancyplain{} \\bfseries \\footnotesize \\rightmark }\n" + "\\rhead[ ]{ }\n" end def footer @@ -1247,7 +1459,7 @@ WOK end end def sisu_rights - v=SiSU_Env::Info_version.instance.get_version + v=SiSU_Env::InfoVersion.instance.get_version base_prog_txt=if @md.base_program case @md.base_program when /kdissert/i; "\n\\\\ This document prepared using \\href{http://freehackers.org/~tnagy/kdissert/}{Kdissert \\ http://freehackers.org/~tnagy/kdissert/ } \\\\ Kdissert is Document Mapping software by Thomas Nagy" @@ -1275,7 +1487,7 @@ WOK " \\footnote{%\nGenerated by \\href{http://www.jus.uio.no/sisu}{SiSU} \\ \\href{http://www.jus.uio.no/sisu}{www.jus.uio.no/sisu} \\newline \\href{http://www.sisudoc.org}{www.sisudoc.org} \\\n}" end def doc_sc_info - v=SiSU_Env::Info_version.instance.get_version + v=SiSU_Env::InfoVersion.instance.get_version <<WOK \\\\ {\\begin{footnotesize} @@ -1287,7 +1499,7 @@ Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu }\\- ve WOK end def doc_no_sc_info - v=SiSU_Env::Info_version.instance.get_version + v=SiSU_Env::InfoVersion.instance.get_version <<WOK \\\\ {\\begin{small} @@ -1299,16 +1511,6 @@ Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu } \\\\ \\end{small}}& WOK end - def manifest_info - url=@md.fnb.gsub(/(?:\\)*([$&~%_#}{^])/,'\\\\\1') - fn=@md.fn[:manifest].gsub(/(?:\\)*([$&~%_#}{^])/,'\\\\\1') -<<WOK -{\\begin{footnotesize} -\\\\ For alternative output formats of this document check: -\\\\ #{@brace_url.tex_open}\\begin{scriptsize}\\href{#{@vz.url_root_http}/#{url}/#{fn}}{#{@vz.url_root_http}/#{url}/#{fn}}\\end{scriptsize}#{@brace_url.tex_close} -\\end{footnotesize}}& -WOK - end def endnotes #not used should be inserted before MetaData section which preceeds doc_tail, but is "part of document" <<WOK \\subsection*{Endnotes} @@ -1318,13 +1520,13 @@ WOK WOK end def doc_tail - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) base_html="#{dir.url.root}/#{@md.fnb}" - v=SiSU_Env::Info_version.instance.get_version - sisu_ico=if FileTest.file?("#{dir.path.image_source_tex}/sisu.png") - "\\includegraphics*[width=60pt]{#{dir.path.image_source_tex}/sisu.png}" + v=SiSU_Env::InfoVersion.instance.get_version + sisu_ico=if FileTest.file?("#{dir.path.image_source_include}/sisu.png") + "\\includegraphics*[width=60pt]{#{dir.path.image_source_include}/sisu.png}" else - SiSU_Screen::Ansi.new(@md.cmd,'WARNING - image directory or image(s) missing:', %{"#{dir.path.image_source_tex}"} ).warn unless @md.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'WARNING - image directory or image(s) missing:', %{"#{dir.path.image_source_include}"} ).warn unless @md.opt.cmd =~/q/ " SiSU " end url=@md.fnb.gsub(/(?:\\)*([$&~%_#}{^])/,'\\\\\1') @@ -1336,13 +1538,13 @@ WOK \"Support Open Standards and Software Libré for the Information Technology Infrastructure\" RA\\subsubsection*{Information on this document copy #{site}} \\addcontentsline{toc}{subsection}{Information on this document copy} {\\begin{footnotesize} -\\\\ Generated by \\href{http://www.jus.uio.no/sisu/}{SiSU} found at \\href{http://www.jus.uio.no/sisu/}{www.jus.uio.no/sisu} \\begin{tiny}[ #{v[:project]} #{v[:version]} #{v[:date_stamp]} ]\\end{tiny} \\href{http://www.sisudoc.org}{www.sisudoc.org}. SiSU is software for document structuring, publishing and search (using SiSU: object citation numbering, markup, meta-markup, and system) Copyright #{@copymark} 1997, current #{@date.year_static} Ralph Amissah, All Rights Reserved. +\\\\ Generated by \\href{http://www.jus.uio.no/sisu/}{SiSU} found at \\href{http://www.jus.uio.no/sisu/}{www.jus.uio.no/sisu} \\begin{tiny}[ #{v[:project]} #{v[:version]} #{v[:date_stamp]} ]\\end{tiny} \\href{http://www.sisudoc.org}{www.sisudoc.org}. SiSU is software for document structuring, publishing and search (using SiSU: object citation numbering, markup, meta-markup, and system) Copyright #{@copymark} 1997, current #{@date.year_static} Ralph Amissah, All Rights Reserved. \\\\ SiSU is released under \\href{http://www.fsf.org/licenses/gpl.html}{GPL 3 } or later (\\href{http://www.fsf.org/licenses/gpl.html}{www.fsf.org/licenses/gpl.html}). {\\end{footnotesize} {\\begin{small} -\\\\ W3 since October 3 1993 \\href{http://www.jus.uio.no/sisu/}{#{sisu_ico}}SiSU 1997, current #{@date.year_static}. \\\\ #{sitename} presentations at \\begin{scriptsize}#{site}\\end{scriptsize} \\\\ \\\\ #{@md.title.full} \\textbf{pdf} versions can be found at: \\\\ +\\\\ W3 since October 3 1993 \\href{http://www.jus.uio.no/sisu/}{#{sisu_ico}}SiSU 1997, current #{@date.year_static}. \\\\ #{sitename} presentations at \\begin{scriptsize}#{site}\\end{scriptsize} \\\\ \\\\ #{@md.title.full} \\textbf{pdf} versions can be found at: \\\\ {\\end{small} -\\\\ #{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:pdf_p]}}\\end{scriptsize}#{@brace_url.tex_close} \\\\ -#{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:pdf_l]}}\\end{scriptsize}#{@brace_url.tex_close} \\\\ +\\\\ #{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:pdf_p]}}\\end{scriptsize}#{@brace_url.tex_close} \\\\ +#{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:pdf_l]}}\\end{scriptsize}#{@brace_url.tex_close} \\\\ \\\\\n#{@md.title.full} \\textbf{html} versions may be found at: \\\\ #{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:toc]}}\\end{scriptsize}#{@brace_url.tex_close} or \\\\ #{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:doc]}}\\end{scriptsize}#{@brace_url.tex_close} @@ -1358,7 +1560,7 @@ WOK WOK end def mail_tail #not retested, the old mail_tail is commented out and appended to this program - dir=SiSU_Env::Info_env.new(@md.fns) + dir=SiSU_Env::InfoEnv.new(@md.fns) <<WOK \\subsection*{Mail sender details} \\addcontentsline{toc}{subsection}{Mail sender details} @@ -1369,7 +1571,7 @@ Mail from: ralph@amissah.com\\\\ \\\\ \"Support Open Standards and Open Sources for the Information Technology Infrastructure\" RA \\subsubsection*{Information on this document copy #{site}\\copyright} -Presentations' look and feel generated by \\href{http://www.jus.uio.no/sisu/}{SiSU Scribe} \\href{http://www.jus.uio.no/sisu/}{http://www.jus.uio.no/sisu/} programmed in Ruby on Debian/Gnu/Linux by Copyright \\copyright Ralph Amissah, W3 since October 3 1993 \\href{http://www.jus.uio.no/sisu/}{\\includegraphics*[width=35pt]{#{dir.path.image_source_tex}/sisu.png}}for #{sitename}. SiSU Scribe (sisu information structuring unit) produces Electronic Documents, i.e. it generates structured output for use in a number of file formats, including the pdf file produced here. +Presentations' look and feel generated by \\href{http://www.jus.uio.no/sisu/}{SiSU Scribe} \\href{http://www.jus.uio.no/sisu/}{http://www.jus.uio.no/sisu/} programmed in Ruby on Debian/Gnu/Linux by Copyright \\copyright Ralph Amissah, W3 since October 3 1993 \\href{http://www.jus.uio.no/sisu/}{\\includegraphics*[width=35pt]{#{dir.path.image_source_include}/sisu.png}}for #{sitename}. SiSU Scribe (sisu information structuring unit) produces Electronic Documents, i.e. it generates structured output for use in a number of file formats, including the pdf file produced here. WOK end end diff --git a/lib/sisu/v4/update.rb b/lib/sisu/v4/update.rb new file mode 100644 index 00000000..4630d640 --- /dev/null +++ b/lib/sisu/v4/update.rb @@ -0,0 +1,138 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: update previous output (with similar output file type formats) + +=end +module SiSU_UpdateControlFlag + require_relative 'sysenv' # sysenv.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.cmd,'Checking previous output',base_path).green_hi_blue unless @md.opt.cmd =~/q/ + SetCF.new(@md).set_flags + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error 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__ diff --git a/lib/sisu/v4/urls.rb b/lib/sisu/v4/urls.rb new file mode 100644 index 00000000..0aba1d89 --- /dev/null +++ b/lib/sisu/v4/urls.rb @@ -0,0 +1,442 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: urls for output files + +=end +module SiSU_Urls + require_relative 'particulars' # particulars.rb + include SiSU_Particulars + require_relative 'sysenv' # sysenv.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::InfoError.new($!,$@,@opt.cmd).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + end + class OutputUrls + attr_reader :fns,:fnb,:cmd,:dir,:m_regular,:u + def initialize(opt) + @opt=opt + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_env_md(opt) + @cmd=@opt.cmd + @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 + @u ||= { + 'b --xhtml (XHTML)'=>@fn[:xhtml], + 'D[iu] --psql (DBI import/update postgresql)'=>'dbi psql', + 'd --sqlite (DBI sqlite)'=>'dbi sqlite3', + 'd[iu] --sqlite (DBI sqlite)'=>'dbi sqlite3', + 'e --epub (EPUB)'=>@fn[:epub], + 'P --pot (Pot)'=>@fn[:pot], + 'h --html (HTML segmented)'=>@fn[:toc], + 'h --html (HTML scroll)'=>@fn[:doc], + 'I --texinfo (Info file)'=>'info', + 'i --manpage (manpage)'=>'manpage', + 'm --dal (Document Abstraction)'=>'dal', + 'N --hash-digests (Digests md5/sha256)'=>@fn[:digest], + 'o --odt (ODF:ODT - Open Document)'=>@fn[:odf], + 'p --pdf (PDF landscape)'=>@fn[:pdf_l], + 'p --pdf (PDF portrait)'=>@fn[:pdf_p], + 'E --profile (Ruby profiler)'=>'profile', + 's --source (sisu markup)'=>@opt.fno, + 'S --sisupod (sisupod)'=>@fn[:sisupod], + 't --txt (Plain-text (endnotes))'=>@fn[:plain], + 'x --xml-sax (XML sax type)'=>@fn[:sax], + 'X --xml-dom (XML dom type)'=>@fn[:dom], + 'Q --qrcode (QR Code jpg)'=>@fn[:qrcode], + 'y --manifest (Manifest, html)'=>@fn[:manifest], + 'Y (Sitemap, xml)'=>@fn[:sitemap], + 'w --concordance (Concordance, html)'=>@fn[:concordance], + }.sort {|a,b| a[0].downcase<=>b[0].downcase} + end + def songsheet + begin + @opt.cmd=~/U/ ? urls_all : (urls_select unless @opt.cmd=~/q/) + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def show + def source + def src(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.text_editor} #{@md.file.output_path.src.dir}/#{y}").result + end + def pod(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.sisupod.dir}/#{y}").result + end + self + end + def generic(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} #{@env.url.output_tell}/#{@fnb}/#{y}").result + end + def meta(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.text_editor} ~#{y}/#{@fnb}.#{y}").result + end + def text(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.txt.dir}/#{@md.file.base_filename.txt}").result + end + def epub(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.epub_viewer} #{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}").result + end + def html + def scroll(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.html_scroll.dir}/#{@md.file.base_filename.html_scroll}").result + end + def toc(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_segtoc}").result + end + def concordance(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}").result + end + def manifest(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}").result + end + self + end + def qrcode(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}").result + end + def odt(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.odf_viewer} file://#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}").result + end + def pdf + def portrait(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.pdf_viewer} #{@md.file.output_path.pdf.dir}/#{@md.file.base_filename.pdf_p}pdf").result + end + def landscape(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.pdf_viewer} #{@md.file.output_path.pdf.dir}/#{@md.file.base_filename.pdf_l}pdf").result + end + self + end + def manpage(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.manpage_viewer} #{@md.file.output_path.manpage.dir}/#{@md.file.base_filename.manpage}").result + end + def pinfo(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","pinfo -f #{@md.file.output_path.texinfo.dir}/#{@md.file.base_filename.info}").result + end + def po4a + def po(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@md.file.output_path.po.dir}/#{y}").result + end + def pot(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@md.file.output_path.pot.dir}/#{y}").result + end + self + end + def xhtml(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}").result + end + def xml + def sax(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}").result + end + def dom(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}").result + end + def sitemap(x) #BROKEN + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.sitemaps.dir}/#{@md.file.base_filename.sitemap}").result + end + self + end + def hash_digest(x) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","#{@prog.web_browser} file://#{@md.file.output_path.hash_digest.dir}/#{@md.file.base_filename.hash_digest}").result + end + def db + def psql(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x} DBI psql","#{@pwd_stub}::#{@opt.fns}",y).result + end + def sqlite(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x} DBI sqlite","sqlite3 #{@env.path.webserv}/#{@md.opt.f_pth[:pth_stub]}/sisu_sqlite.db").result + end + def sqlite_discreet(x,y) + SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","sqlite3 #{@md.file.output_path.sqlite_discreet.dir}/#{@md.file.base_filename.sqlite_discreet}").result + end + self + end + self + end + def urls_maintenance(opt,x,y) + if x=~/^([abcehHmNoptwxXy])/ \ + and opt.cmd =~/[abcehHmNoptwxXy]/ \ + and x=~/^[#{opt.cmd}]/ \ + and opt.cmd =~/[MV]/ + m=$1 + f=y + tool=@prog.text_editor + if x =~/^m/ \ + and @opt.cmd=~/m/ \ + and x=~/^[#{opt.cmd}]/ + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.dal}/#{@opt.fns}.meta").maintenance + end + if x=~/^([hw])/ \ + and @opt.cmd=~/[hw]/ \ + and x=~/^[#{@opt.cmd}]/ \ + and x !~/segmented/; "#{y}.html" + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.tune}/#{@md.fns}.tune").maintenance + end + if x=~/^p/ \ + and @opt.cmd=~/p/ \ + and x=~/^[#{@opt.cmd}]/ + tool=@prog.pdf_viewer + fns=@opt.fns.gsub(/~/,'-') + unless @opt.cmd =~/q/ + tell=if x =~/landscape/ + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.tex}/#{fns}.landscape.tex") + else SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.tex}/#{fns}.tex") + end + tell.maintenance + end + end + if x=~/^o/ \ + and @opt.cmd=~/o/ \ + and x=~/^[#{@opt.cmd}]/ + tool=@prog.odf_viewer + end + if x=~/^e/ \ + and @opt.cmd=~/e/ \ + and x=~/^[#{@opt.cmd}]/ + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.epub}/#{Ep[:d_oebps]}/toc.xhtml").maintenance + end + if x=~/^o/ \ + and @opt.cmd=~/o/ \ + and x=~/^[#{@opt.cmd}]/ + SiSU_Screen::Ansi.new(@opt.cmd,"-#{x}","#{@prog.text_editor} #{@env.processing_path.odf}/#{@opt.fns}/odt/content.xml").maintenance + end + end + end + def urls_select + unless @opt.cmd =~/q/ + i1="[#{@opt.f_pth[:lng_is]}]" + i2="file://#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}" + @opt.cmd=~/[MVvz]/ \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'URLs').green_title_hi + : SiSU_Screen::Ansi.new(@opt.cmd,'URL (output manifest)',i1, i2).grey_title_grey_blue + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@md.file.output_path.manifest.dir}/#{@md.file.base_filename.manifest}").flow if @opt.cmd =~/[MVv]/ + end + m=/.+\/(?:src\/)?(\S+)/im # m=/.+?\/(?:src\/)?([^\/]+)$/im # m=/.+\/(\S+)/m + @pwd_stub="#{@env.url.output_tell}"[m,1] + unless @opt.cmd =~/q/ + @u.each do |x,y| + if @opt.fns =~ @m_regular + if @opt.cmd =~/[MVv]/ + if x=~/--txt\b/ \ + and @opt.act[:txt][:set]==:on + show.text(x) + end + if x=~/--xhtml\b/ \ + and @opt.act[:xhtml][:set]==:on + show.xhtml(x) + end + if x=~/--psql\b/ \ + and @opt.act[:psql][:set]==:on + show.db.psql(x,y) + end + if x=~/d\s+--sqlite\b|--sql\b/ \ + and @opt.act[:sqlite_discreet][:set]==:on + show.db.sqlite_discreet(x,y) + end + if x=~/d\[iu\]\s+--sqlite\b/ \ + and @opt.act[:sqlite][:set]==:on + show.db.sqlite(x,y) + end + if x=~/--epub\b/ \ + and @opt.act[:epub][:set]==:on + show.epub(x) + end + if x=~/--html\b/ \ + and @opt.act[:html][:set]==:on + if x =~/scroll/ + show.html.scroll(x) + else + show.html.toc(x) + end + end + if x=~/--texinfo\b/ \ + and @opt.cmd =~/I/ + show.pinfo(x,y) + end + if x=~/--manpage\b/ \ + and @opt.act[:manpage][:set]==:on + show.manpage(x) + end + if x=~/--hash-digests\b/ \ + and @opt.cmd =~/N/ + show.hash_digest(x) + end + if x=~/--odt\b|--odf\b/ \ + and @opt.act[:odt][:set]==:on + show.odt(x) + end + if x=~/^P/ \ + and @opt.cmd =~/P/ + if @opt.fns =~/\S+?~\S{2}(?:_\S{2})?\.ss[mt]/ + f=y.gsub(/\.pot$/,'.po') + show.po4a.po(x,f) + else + show.po4a.pot(x,f) + end + end + if x=~/--pdf\b/ \ + and @opt.act[:pdf][:set]==:on + if x =~/portrait/ + show.pdf.portrait(x) + else + show.pdf.landscape(x) + end + end + if x=~/--sisupod\b/ \ + and @opt.act[:sisupod][:set]==:on + (@opt.fno =~/\.ssm$/) \ + ? y.gsub(/(?:\~\S{2,3})?(\.ssm.sst\.txz)$/,'.ssm.txz') + : y.gsub(/(?:\~\S{2,3})?(\.sst\.txz)$/,'\1') + show.source.pod(x,y) + end + if x=~/--source\b/ \ + and @opt.act[:share_source][:set]==:on + show.source.src(x,y) + end + if x=~/--concordance\b/ \ + and @opt.act[:concordance][:set]==:on + show.html.concordance(x) + end + if x=~/--xml-dom\b/ \ + and @opt.act[:xml_dom][:set]==:on + show.xml.dom(x) + end + if x=~/--xml-sax\b/ \ + and @opt.act[:xml_sax][:set]==:on + show.xml.sax(x) + end + if x=~/--qrcode\b/ \ + and @opt.act[:qrcode][:set]==:on + show.qrcode(x) + end + if x=~/--sitemap\b/ \ + and @opt.cmd =~/Y/ #BROKEN + show.xml.sitemap(x) + end + if x=~/--manifest\b/ \ + and @opt.act[:manifest][:set]==:on + show.html.manifest(x) + end + end + urls_maintenance(@opt,x,y) if @opt.cmd =~/[MV]/ + 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.cmd,'URLs',i).grey_title_hi + @u.each do |x,y| + tell=case x + when /^m/ + show.meta(x,y) + when /^[BcdNsxXy]/ + show.generic(x,y) + when /^[at]/ + show.text(x) + when /^b/ + show.xhtml(x) + when /^e/ + show.epub(x) + when /^h/ + if x =~/scroll/ + show.html.scroll(x) + else + show.html.toc(x) + end + when /^o/ + show.odt(x) + when /^p/ + if x =~/portrait/ + show.pdf.portrait(x) + else + show.pdf.landscape(x) + end + when /^w/ + show.html.concordance(x) + when /^Y/ + show.xml.sitemap(x) + when /^I/ + show.pinfo(x,y) + when /^i/ + show.manpage(x) + end + end + end + end +end +__END__ diff --git a/lib/sisu/v4/webrick.rb b/lib/sisu/v4/webrick.rb new file mode 100644 index 00000000..96280d0c --- /dev/null +++ b/lib/sisu/v4/webrick.rb @@ -0,0 +1,185 @@ +# encoding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + SiSU, a framework for document structuring, publishing and search + + Copyright (C) Ralph Amissah + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see <http://www.gnu.org/licenses/>. + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + <http://www.fsf.org/licensing/licenses/gpl.html> + <http://www.gnu.org/licenses/gpl.html> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + + * SiSU uses: + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + * Hompages: + <http://www.jus.uio.no/sisu> + <http://www.sisudoc.org> + + * Download: + <http://www.sisudoc.org/sisu/en/SiSU/download.html> + + * Ralph Amissah + <ralph@amissah.com> + <ralph.amissah@gmail.com> + + ** Description: webrick share - note sisu by default does not link with file + suffixes, see man pages for options + +=end +module SiSU_Webserv + class WebrickStart + require 'webrick' + include WEBrick + require 'time' + require_relative 'sysenv' # sysenv.rb + include SiSU_Env + include SiSU_Screen + def initialize + begin #% + @cX=SiSU_Screen::Ansi.new('yes').cX + @env=SiSU_Env::InfoEnv.new + port=SiSU_Env::InfoPort.new + @host=@env.url.webrick + host='localhost' + @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.cyan}#{x}#{@cX.off}\t#{@cX.grey}see#{@cX.off} #{@cX.blue}#{@host}:#{@port}#{x}/wb.cgi#{@cX.off} #{@cX.ruby}@#{@cX.off} #{@cX.blue}#{@host}:#{@port}#{x}/#{@cX.off}" + } + puts "#{@cX.grey}" + 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 + require 'time' + require 'cgi' + require 'fcgi' + 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 {page.b{'<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 &") + } + puts " #{@cX.off}" + #get=@argv.shift if @argv[0] =~/pwd/ #% argv + get=Dir.pwd + brick(@port,get) + rescue + require_relative 'sysenv' # sysenv.rb + SiSU_Errors::InfoError.new($!,$@,'-W',nil).error do #fix + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + def brick(port,get='') + cgidir=if get=~/pwd/; Dir.pwd + else '/usr/lib/cgi-bin' # @env.path.cgi + 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::InfoError.new($!,$@,'-W',nil).error do #fix + __LINE__.to_s + ':' + __FILE__ + end + ensure + end + end + end +ensure +end +__END__ diff --git a/lib/sisu/v2/wikispeak.rb b/lib/sisu/v4/wikispeak.rb index df6cdb50..725be0a5 100644 --- a/lib/sisu/v2/wikispeak.rb +++ b/lib/sisu/v4/wikispeak.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,14 +56,14 @@ =end module SiSU_Wikispeak - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env include SiSU_Param include SiSU_Viz - require "#{SiSU_lib}/plaintext_format" # plaintext_format.rb + require_relative 'plaintext_format' # plaintext_format.rb include Format - require "#{SiSU_lib}/shared_txt" + require_relative 'shared_txt' pwd=Dir.pwd @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 @@tablefoot='' @@ -76,24 +75,26 @@ module SiSU_Wikispeak def read begin @md=SiSU_Param::Parameters.new(@opt).get - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) path=@env.path.output_tell tool=(@opt.cmd =~/[MVv]/) \ - ? "#{@env.program.text_editor} #{path}/#{@md.fnb}/#{@md.fn[:wiki]}" \ + ? "#{@env.program.text_editor} #{path}/#{@md.fnb}/#{@md.fn[:wiki]}" : '' SiSU_Screen::Ansi.new(@opt.cmd,'Wikispeak',tool).green_hi_blue unless @opt.cmd =~/q/ SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/#{@md.fnb}/#{@md.fn[:wiki]}").flow if @opt.cmd =~/[MV]/ - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) @dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here SiSU_Wikispeak::Source::Scroll.new(@dal_array,@md).songsheet - SiSU_Env::Info_skin.new(@md).select #watch - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + SiSU_Env::InfoSkin.new(@md).select #watch + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end private - class Split_text_object <Source - require "#{SiSU_lib}/plaintext_format" # plaintext_format.rb + class SplitTextObject <Source + require_relative 'plaintext_format' # plaintext_format.rb include Format include SiSU_Viz @@alt_id_count=0 @@ -102,7 +103,7 @@ module SiSU_Wikispeak def initialize(para) @para=para @format,@ocn='ordinary','ordinary' - @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern + @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern end def lev_segname_para_ocn @text=nil @@ -133,23 +134,23 @@ module SiSU_Wikispeak 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::Format_text_object.new(format,@text,@ocn) + Format::FormatTextObject.new(format,@text,@ocn) else - Format::Format_text_object.new(format,@text,"#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}") + 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 - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils @@endnotes_para=[] - @@wiki={ :body=>[],:open=>[],:close=>[],:head=>[],:metadata=>[],:tail=>[],:endnotes=>[] } + @@wiki={ body: [], open: [], close: [], head: [], metadata: [], tail: [], endnotes: [] } @@dp=nil def initialize(data,md) @data,@md=data,md - @vz=SiSU_Env::Get_init.instance.skin - @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern + @vz=SiSU_Env::GetInit.instance.skin + @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' @@ -165,7 +166,7 @@ module SiSU_Wikispeak @n=[] end def wiki_metadata(meta) - util=SiSU_text_utils::Wrap.new(meta.text,70,15,1) + util=SiSU_TextUtils::Wrap.new(meta.text,70,15,1) txt=util.line_wrap @@wiki[:metadata] <<= if meta.type=='meta' <<WOK @@ -176,8 +177,8 @@ WOK end end def wiki_tail - SiSU_Env::Info_skin.new(@md).select - vz=SiSU_Env::Get_init.instance.skin + SiSU_Env::InfoSkin.new(@md).select + vz=SiSU_Env::GetInit.instance.skin generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] lastdone="Last Generated on: #{Time.now}" rubyv="Ruby version: #{@md.ruby_version}" @@ -228,7 +229,7 @@ WOK end def markup # Used for major markup instructions data=@data - dir=SiSU_Env::Info_env.new(@md.fns) + dir=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]='' } @@ -248,7 +249,7 @@ WOK 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!(/<:(?: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!(/<:(?: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') @@ -258,16 +259,16 @@ WOK para.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*#{Mx[:lnk_c]}\S+/,'[image: "\1"]') wordlist=para.scan(/\S+/) if para =~/^@(\S+?):\s+(.+?)\Z/m # for headers - d_meta=SiSU_text_utils::Header_scan.new(@md,para).meta + 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::Paragraph_number.new(paranum) + @p_num=Format::ParagraphNumber.new(paranum) end - @sto=Split_text_object.new(para).lev_segname_para_ocn + @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 \ @@ -282,7 +283,7 @@ WOK 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::Split_text_object + 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+))?/ @@ -306,7 +307,7 @@ WOK elsif para =~/(#{Mx[:tc_p]}|#{Mx[:gr_o]}Th?)/u #tables ! #fix elsif para =~/(.*)<!#!>(.*)/ one,two=$1,$2 - format_text=Format_text_object.new(one,two) + format_text=FormatTextObject.new(one,two) para=format_text.seg_no_paranum end if (para =~/<a name="n\d+">/ \ @@ -316,12 +317,12 @@ WOK case para when /<:i1>/ if para =~/.*<:#>.*$/ - format_text=Format_text_object.new(para,'') + format_text=FormatTextObject.new(para,'') para=format_text.scr_indent_one_no_paranum end when /<:i2>/ if para =~/.*<:#>.*$/ - format_text=Format_text_object.new(para,'') + format_text=FormatTextObject.new(para,'') para=format_text.scr_indent_one_no_paranum end end @@ -330,7 +331,7 @@ WOK end if para =~/<:center>/ one,two=/(.*)<:center>(.*)/.match(para)[1,2] - format_text=Format_text_object.new(one,two) + format_text=FormatTextObject.new(one,two) para=format_text.center end para.gsub!(/<!.+!>/,' ') if para ## Clean Prepared Text @@ -356,8 +357,8 @@ WOK @content,@md=content,md end def wiki #%wiki output - SiSU_Env::SiSU_file.new(@md).mkdir - filename_wiki=SiSU_Env::SiSU_file.new(@md,@md.fn[:wiki]).mkfile + 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/ diff --git a/lib/sisu/v2/xhtml.rb b/lib/sisu/v4/xhtml.rb index f142f3ce..e73b97b7 100644 --- a/lib/sisu/v2/xhtml.rb +++ b/lib/sisu/v4/xhtml.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,25 +56,25 @@ ** Notes: tidy -xml scroll.xhtml >> index.tidy =end module SiSU_XHTML - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge - require "#{SiSU_lib}/xml_format" # xml_format.rb - include SiSU_XML_format - require "#{SiSU_lib}/rexml" # rexml.rb + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge + require_relative 'xml_format' # xml_format.rb + include SiSU_XML_Format + require_relative 'rexml' # rexml.rb include SiSU_Rexml - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb + require_relative 'shared_metadata' # shared_metadata.rb @@alt_id_count,@@tablehead,@@number_of_cols=0,0,0 @@tablefoot='' class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @@ -83,47 +82,57 @@ module SiSU_XHTML unless @opt.cmd =~/q/ path=@env.path.output_tell loc=@env.url.output_tell - tool=if @opt.cmd =~/[MV]/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:xhtml]}\n\t#{@env.program.xml_viewer} #{path}/#{@md.fnb}/#{@md.fn[:xhtml]}" - elsif @opt.cmd =~/v/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:xhtml]}" - else @opt.fns + tool=if @opt.cmd =~/[MV]/ + "#{@env.program.web_browser} file://#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}" + elsif @opt.cmd =~/v/ + "#{@env.program.web_browser} file://#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}" + else "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" end @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XHTML',tool).colorize \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XHTML',tool).colorize : SiSU_Screen::Ansi.new(@opt.cmd,'XHTML',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{path}/#{@md.fnb}/#{@md.fn[:xhtml]}").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"/#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}").flow if @opt.cmd =~/[MV]/ end SiSU_XHTML::Source::Songsheet.new(@particulars).song - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css end end private class Songsheet def initialize(particulars) @env,@md,@dal_array,@particulars=particulars.env,particulars.md,particulars.dal_array,particulars + @file=SiSU_Env::FileOp.new(@md) end def song begin SiSU_XHTML::Source::Scroll.new(@particulars).songsheet - SiSU_XHTML::Source::Tidy.new(@md,@env).xml if @md.cmd =~/[vVM]/ # test wellformedness, comment out when not in use - SiSU_Rexml::Rexml.new(@md,@md.fn[:xhtml]).xml if @md.cmd =~/M/ # test rexml parsing, comment out when not in use #debug - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + SiSU_XHTML::Source::Tidy.new(@md,@file.place_file.xhtml.dir).xml if @md.opt.cmd =~/[vVM]/ # test wellformedness, comment out when not in use + SiSU_Rexml::Rexml.new(@md,@file.place_file.xhtml.dir).xml if @md.opt.cmd =~/M/ # test rexml parsing, comment out when not in use #debug + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end end class Scroll - require "#{SiSU_lib}/shared_xhtml" # shared_xhtml.rb #check already called - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - require "#{SiSU_lib}/css" # css.rb - @@xml={ :body=>[],:sisu=>[],:open=>[],:close=>[],:head=>[] } + require_relative 'shared_xhtml' # shared_xhtml.rb #check already called + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + require_relative 'css' # css.rb + @@xml={ body: [], sisu: [], open: [], close: [], head: [] } def initialize(particulars) @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin @tab="\t" - @trans=SiSU_XML_munge::Trans.new(@md) - @sys=SiSU_Env::System_call.new + @trans=SiSU_XML_Munge::Trans.new(@md) + @sys=SiSU_Env::SystemCall.new end def songsheet pre @@ -133,39 +142,39 @@ module SiSU_XHTML end protected def embedded_endnotes(dob='') - dob.obj.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><number>\1</number><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><number>\1</number><note>\2</note></endnote> '). + gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> '). + gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') end def extract_endnotes(dob='') notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/) notes.flatten.each do |e| s=e.to_s - util=SiSU_text_utils::Wrap.new(s,70) + util=SiSU_TextUtils::Wrap.new(s,70) wrap=util.line_wrap - wrap.gsub!(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK + wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote notenumber="\\1"> #{Ax[:tab]*2}\\1. \\2 #{Ax[:tab]*1}</endnote> WOK -) - wrap.gsub!(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK +). + gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote symbol="\\1"> #{Ax[:tab]*2}\\1 \\2 #{Ax[:tab]*1}</endnote> WOK -) - wrap.gsub!(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK +). + gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote symbol="\\1.length"> #{Ax[:tab]*2}\\1 \\2 #{Ax[:tab]*1}</endnote> WOK ) #KEEP alternative presentation of endnotes -# wrap.gsub!(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK +# wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK ##{Ax[:tab]*1}<p class="endnote" notenumber="\\1"> ##{Ax[:tab]*2}\\1. \\2 ##{Ax[:tab]*1}</p> @@ -175,7 +184,7 @@ WOK end end def xml_head - metadata=Metadata::Summary.new(@md).xhtml_scroll.metadata + metadata=SiSU_Metadata::Summary.new(@md).xhtml_scroll.metadata @@xml[:head] << metadata end def name_tags(dob) @@ -189,18 +198,19 @@ WOK tags end def xml_structure(dob,type='norm') - if dob.is =~/para|heading/ + if dob.is ==:para \ + || dob.is ==:heading named=name_tags(dob) - if dob.is=='heading' + if dob.is==:heading lv=dob.ln n=dob.ln - 1 n3=dob.ln + 2 else lv=nil end extract_endnotes(dob) - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>') #footnote/endnote clean - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean - util=SiSU_text_utils::Wrap.new(dob.obj,70) + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + util=SiSU_TextUtils::Wrap.new(dob.obj,70) wrapped=util.line_wrap @@xml[:body] << if defined? dob.ocn %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@ -214,12 +224,25 @@ WOK @endnotes=[] end end + def block_structure(dob) + named=name_tags(dob) + dob=@trans.markup_block(dob) + dob.obj=dob.obj.strip. + gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} + @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} + @@xml[:body] << %{#{Ax[:tab]*1}<text class="block">#{named}#{Ax[:tab]*1}} + @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}} + @@xml[:body] << %{#{Ax[:tab]*1}</text>} + @@xml[:body] << "#{Ax[:tab]*0}</object>" + end def group_structure(dob) named=name_tags(dob) dob=@trans.markup_group(dob) - dob.obj.strip! - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>') #footnote/endnote clean - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + dob.obj=dob.obj.strip. + gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="group">#{named}#{Ax[:tab]*1}} @@ -230,7 +253,7 @@ WOK def poem_structure(dob) named=name_tags(dob) dob=@trans.markup_group(dob) - dob.obj.strip! + dob.obj=dob.obj.strip @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="verse">#{named}#{Ax[:tab]*1}} @@ -241,8 +264,7 @@ WOK def code_structure(dob) named=name_tags(dob) dob=@trans.markup_group(dob) - dob.obj.gsub!(/\s\s/,'  ') - dob.obj.strip! + dob.obj=dob.obj.gsub(/\s\s/,'  ').strip @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="code">#{named}#{Ax[:tab]*1}} @@ -252,7 +274,7 @@ WOK end def table_structure(dob) named=name_tags(dob) - table=SiSU_XHTML_shared::Table_xhtml.new(dob) + table=SiSU_XHTML_Shared::TableXHTML.new(dob) @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*2}#{named}#{table.table.obj}} @@ -276,11 +298,11 @@ WOK if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ if defined? dob.ocn #look to move to format section ocn=(dob.ocn.to_s =~/\d+/) ? dob.ocn : nil - @p_num=SiSU_XML_format::Paragraph_number.new(@md,ocn) + @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,ocn) end if not @rcdc - x=SiSU_XML_format::Format_seg.new(@md,dob) - if dob.is=='heading' + x=SiSU_XML_Format::FormatSeg.new(@md,dob) + if dob.is==:heading xml_structure(dob) dob.obj=case dob.ln when 1; x.heading_body1 @@ -291,28 +313,35 @@ WOK when 6; x.heading_body6 end else - if dob.is =='verse' + if dob.is ==:verse poem_structure(dob) - elsif dob.is =='group' + elsif dob.is ==:group group_structure(dob) - elsif dob.is =='code' + elsif dob.is ==:block + block_structure(dob) + elsif dob.is ==:code code_structure(dob) - elsif dob.is =='table' + elsif dob.is ==:table table_structure(dob) - elsif dob.is =='para' \ + elsif dob.is ==:para \ and dob.indent.to_s =~/[1-9]/ \ and dob.bullet_==true xml_structure(dob,"indent_bullet#{dob.indent}") - elsif dob.is =='para' \ - and dob.indent.to_s =~/[1-9]/ + elsif dob.is ==:para \ + and dob.indent.to_s =~/[1-9]/ \ + and dob.indent == dob.hang xml_structure(dob,"indent#{dob.indent}") + elsif dob.is==:para \ + and dob.hang.to_s =~/[0-9]/ \ + and dob.indent != dob.hang + xml_structure(dob,"hang#{dob.hang.to_s}_indent#{dob.indent.to_s}") else xml_structure(dob) end end if dob.obj =~/.*<:#>.*$/ #investigate removal dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/ - txt_obj={:txt =>dob} - format_text=Format_text_object.new(@md,txt_obj) + txt_obj={ txt: dob } + format_text=FormatTextObject.new(@md,txt_obj) format_text.scr_inden_ocn_e_no_paranum end end @@ -320,7 +349,7 @@ WOK end else # end - dob.obj.gsub!(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj + dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj end end 6.downto(4) do |x| @@ -333,14 +362,14 @@ WOK end end def pre - rdf=SiSU_XML_tags::RDF.new(@md) - dir=SiSU_Env::Info_env.new + rdf=SiSU_XML_Tags::RDF.new(@md) + dir=SiSU_Env::InfoEnv.new @@xml[:head],@@xml[:body]=[],[] - css=SiSU_Env::CSS_select.new(@md).xhtml + stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xhtml').stylesheet encoding=(@sys.locale =~/utf-?8/i) ? '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' : '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>' @@xml[:open] =<<WOK #{encoding} -<?xml-stylesheet type="text/css" href="../#{@env.path.style}/#{css}"?> +#{stylesheet.css_head_xml} #{rdf.comment_xml} <document> WOK @@ -357,7 +386,7 @@ WOK content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata] content << @@xml[:owner_details] if @md.stmp =~/\w\w/ content << @@xml[:tail] << @@xml[:close] - content.flatten!.compact! + content=content.flatten.compact Output.new(content,@md).xhtml @@xml={} end @@ -365,34 +394,35 @@ WOK class Output def initialize(data,md) @data,@md=data,md + @file=SiSU_Env::FileOp.new(@md) end def xhtml - SiSU_Env::SiSU_file.new(@md).mkdir - filename_xml=SiSU_Env::SiSU_file.new(@md,@md.fn[:xhtml]).mkfile + SiSU_Env::FileOp.new(@md).mkdir + filename_xml=@file.write_file.xhtml @data.each do |str| - str.gsub!(/\A\s+\Z/m,'') #str.gsub!(/^\s+$/,'') + str=str.gsub(/\A\s+\Z/m,'') #str.gsub(/^\s+$/,'') filename_xml.puts str unless str.empty? end filename_xml.close end end class Tidy - def initialize(md,dir) - @md,@env=md,dir - @prog=SiSU_Env::Info_program.new + def initialize(md,file) + @md,@file=md,file + @prog=SiSU_Env::InfoProgram.new end def xml if @prog.tidy !=false - if @md.cmd =~/[VM]/ - unless @md.cmd =~/q/ - SiSU_Screen::Ansi.new(@md.cmd,'invert','Using XML Tidy','check document structure').colorize - tell=SiSU_Screen::Ansi.new(@md.cmd,'invert','','') + if @md.opt.cmd =~/[VM]/ + unless @md.opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','Using XML Tidy','check document structure').colorize + tell=SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','','') tell.grey_open end tidyfile='/dev/null' #don't want one or screen output, check for alternative flags - tidy=SiSU_Env::System_call.new("#{@env.path.output}/#{@md.fnb}/#{@md.fn[:xhtml]}",tidyfile) + tidy=SiSU_Env::SystemCall.new(@file,tidyfile) tidy.well_formed? - tell.p_off unless @md.cmd =~/q/ + tell.p_off unless @md.opt.cmd =~/q/ end end end diff --git a/lib/sisu/v2/xhtml_table.rb b/lib/sisu/v4/xhtml_table.rb index 25db60c8..30701433 100644 --- a/lib/sisu/v2/xhtml_table.rb +++ b/lib/sisu/v4/xhtml_table.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,13 +55,13 @@ ** Description: shared html parts =end -module SiSU_XHTML_table - require "#{SiSU_lib}/defaults" # defaults.rb - class Table_xhtml +module SiSU_XHTML_Table + require_relative 'defaults' # defaults.rb + class TableXHTML @@tablehead=0 @@tablefoot=[] #watch def initialize(table) - @table_obj,@vz=table,SiSU_Env::Get_init.instance.skin + @table_obj,@vz=table,SiSU_Env::GetInit.instance.skin end def table table_obj=@table_obj @@ -78,14 +77,14 @@ module SiSU_XHTML_table table_row_with_columns=table_row.split(Mx[:tc_p]) trc,nc=[],0 table_row_with_columns.each do |c| - c.gsub!(/^~$/,'') # tilde / empty cell - c.gsub!(/<:br>/,'<br />') + c=c.gsub(/^~$/,''). # tilde / empty cell + gsub(/<:br>/,'<br />') trc <<= if table_obj.head_ and nr==0; %{<th width="#{table_obj.widths[nc]}%">#{c}</th>} else %{<td width="#{table_obj.widths[nc]}%">#{c}</td>} end nc+=1 end - trc=trc.class==Array ? trc.flatten.join : trc + trc=(trc.is_a?(Array)) ? trc.flatten.join : trc trc=" <tr>#{trc}</tr>\n" nr+=1 table_rows << trc diff --git a/lib/sisu/v2/xml.rb b/lib/sisu/v4/xml.rb index d3ff280e..1346f33e 100644 --- a/lib/sisu/v2/xml.rb +++ b/lib/sisu/v4/xml.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,25 +56,25 @@ =end module SiSU_XML_SAX - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge - require "#{SiSU_lib}/xml_format" # xml_format.rb - include SiSU_XML_format - require "#{SiSU_lib}/rexml" # rexml.rb + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge + require_relative 'xml_format' # xml_format.rb + include SiSU_XML_Format + require_relative 'rexml' # rexml.rb include SiSU_Rexml - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb + require_relative 'shared_metadata' # shared_metadata.rb @@alt_id_count,@@tablehead,@@number_of_cols=0,0,0 @@tablefoot='' class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @@ -83,47 +82,55 @@ module SiSU_XML_SAX unless @opt.cmd =~/q/ path=@env.path.output_tell loc=@env.url.output_tell - tool=if @opt.cmd =~/[MV]/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:sax]}\n\t#{@env.program.xml_viewer} #{path}/#{@md.fnb}/#{@md.fn[:sax]}" - elsif @opt.cmd =~/v/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:sax]}" - else @opt.fns + tool=if @opt.cmd =~/[MV]/; "#{@env.program.web_browser} file://#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}\n\t#{@env.program.xml_viewer} file://#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}" + elsif @opt.cmd =~/v/; "#{@env.program.web_browser} file://#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}" + else "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" end @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XML SAX',tool).colorize \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XML SAX',tool).colorize : SiSU_Screen::Ansi.new(@opt.cmd,'XML SAX',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{path}/#{@md.fnb}/#{@md.fn[:sax]}").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}").flow if @opt.cmd =~/[MV]/ end SiSU_XML_SAX::Source::Songsheet.new(@particulars).song - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure #file closed in songsheet + SiSU_Env::CreateSite.new(@opt.cmd).cp_css end end private class Songsheet def initialize(particulars) @env,@md,@dal_array,@particulars=particulars.env,particulars.md,particulars.dal_array,particulars + @file=SiSU_Env::FileOp.new(@md) end def song begin SiSU_XML_SAX::Source::Scroll.new(@particulars).songsheet - SiSU_XML_SAX::Source::Tidy.new(@md,@env).xml if @md.cmd =~/[vVM]/ # test wellformedness, comment out when not in use - SiSU_Rexml::Rexml.new(@md,@md.fn[:sax]).xml if @md.cmd =~/M/ # test rexml parsing, comment out when not in use #debug - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + SiSU_XML_SAX::Source::Tidy.new(@md,@file.place_file.xml_sax.dir).xml if @md.opt.cmd =~/[vVM]/ # test wellformedness, comment out when not in use + SiSU_Rexml::Rexml.new(@md,@file.place_file.xml_sax.dir).xml if @md.opt.cmd =~/M/ # test rexml parsing, comment out when not in use #debug + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end end class Scroll - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - require "#{SiSU_lib}/css" # css.rb - require "#{SiSU_lib}/shared_xhtml" # decide use, whether xml rather than xhtml - @@xml={ :body=>[],:open=>[],:close=>[],:head=>[] } + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + require_relative 'css' # css.rb + require_relative 'shared_xhtml' # decide use, whether xml rather than xhtml + @@xml={ body: [], open: [], close: [], head: [] } def initialize(particulars) @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @vz=SiSU_Env::Get_init.instance.skin - @trans=SiSU_XML_munge::Trans.new(@md) - @sys=SiSU_Env::System_call.new + @vz=SiSU_Env::GetInit.instance.skin + @trans=SiSU_XML_Munge::Trans.new(@md) + @sys=SiSU_Env::SystemCall.new end def songsheet pre @@ -133,20 +140,20 @@ module SiSU_XML_SAX end protected def embedded_endnotes(dob='') - dob.obj.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><number>\1</number><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><number>\1</number><note>\2</note></endnote> '). + gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> '). + gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') end def extract_endnotes(dob='') notes=dob.obj.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/) notes.flatten.each do |e| s=e.to_s - util=SiSU_text_utils::Wrap.new(s,70) + util=SiSU_TextUtils::Wrap.new(s,70) wrap=util.line_wrap - wrap.gsub!(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK + wrap=wrap.gsub(/^(\d+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote notenumber="\\1"> #{Ax[:tab]*2}<number>\\1</number> #{Ax[:tab]*2}<note> @@ -154,8 +161,8 @@ module SiSU_XML_SAX #{Ax[:tab]*2}</note> #{Ax[:tab]*1}</endnote> WOK -) - wrap.gsub!(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK +). + gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote symbol="\\1"> #{Ax[:tab]*2}<symbol>\\1</symbol> #{Ax[:tab]*2}<note> @@ -163,8 +170,8 @@ WOK #{Ax[:tab]*2}</note> #{Ax[:tab]*1}</endnote> WOK -) - wrap.gsub!(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK +). + gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK #{Ax[:tab]*1}<endnote symbol="\\1.length"> #{Ax[:tab]*2}<symbol>\\1</symbol> #{Ax[:tab]*2}<note> @@ -177,7 +184,7 @@ WOK end end def xml_head - metadata=Metadata::Summary.new(@md).xml_sax.metadata + metadata=SiSU_Metadata::Summary.new(@md).xml_sax.metadata @@xml[:head] << metadata end def xml_sc(md='') @@ -203,18 +210,18 @@ WOK @@xml[:sc]=sc end def xml_structure(dob,type='norm') - if dob.is=='heading' + if dob.is==:heading lv=dob.ln n=dob.ln - 1 n3=dob.ln + 2 else lv=nil end extract_endnotes(dob) - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>') #footnote/endnote clean - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean #if defined? dob.obj #t_ograph="#{dob.obj}" - util=SiSU_text_utils::Wrap.new(dob.obj,70) + util=SiSU_TextUtils::Wrap.new(dob.obj,70) wrapped=util.line_wrap #end @@xml[:body] << if defined? dob.ocn; %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@ -229,12 +236,27 @@ WOK @@xml[:body] << "#{Ax[:tab]*0}</object>" @endnotes=[] end + def block_structure(dob='') + extract_endnotes(dob) + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + dob=@trans.markup_block(dob) + dob.obj=dob.obj.strip + @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} + @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} + @@xml[:body] << %{#{Ax[:tab]*1}<text class="block">#{Ax[:tab]*1}} + @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}} + @@xml[:body] << %{#{Ax[:tab]*1}</text>} + @@xml[:body] << "#{Ax[:tab]*0}</object>" + @@xml[:body] << @endnotes if @endnotes + @endnotes=[] + end def group_structure(dob='') extract_endnotes(dob) - dob.obj.gsub!(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>') #footnote/endnote clean - dob.obj.gsub!(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_a_c]}/,'<en>\1</en>'). #footnote/endnote clean + gsub(/#{Mx[:en_b_o]}([\d*+]+)\s+(?:.+?)#{Mx[:en_b_c]}/,'<en>\1</en>') #footnote/endnote clean dob=@trans.markup_group(dob) - dob.obj.strip! + dob.obj=dob.obj.strip @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="group">#{Ax[:tab]*1}} @@ -246,8 +268,8 @@ WOK end def poem_structure(dob='') dob=@trans.markup_group(dob) - #dob.obj.gsub!(/\s\s/,'  ') - dob.obj.strip! + #dob.obj.gsub(/\s\s/,'  ') + dob.obj=dob.obj.strip @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="verse">#{Ax[:tab]*1}} @@ -257,8 +279,7 @@ WOK end def code_structure(dob='') dob=@trans.markup_group(dob) - dob.obj.gsub!(/\s\s/,'  ') - dob.obj.strip! + dob.obj=dob.obj.gsub(/\s\s/,'  ').strip @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="code">#{Ax[:tab]*1}} @@ -267,7 +288,7 @@ WOK @@xml[:body] << "#{Ax[:tab]*0}</object>" end def table_structure(dob) - table=SiSU_XHTML_shared::Table_xhtml.new(dob) + table=SiSU_XHTML_Shared::TableXHTML.new(dob) @@xml[:body] << %{#{Ax[:tab]*0}<object id="#{dob.ocn}">} @@xml[:body] << %{#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>} @@xml[:body] << %{#{Ax[:tab]*1}<text class="table">#{Ax[:tab]*1}} @@ -291,20 +312,20 @@ WOK @trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8 dob=@trans.markup(dob) if @rcdc==false \ - and (dob.is =~/^meta/ \ + and (dob.is ==:meta \ and dob.obj =~/Document Information/) @rcdc=true end if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ if defined? dob.ocn #look to move to format section ocn=((dob.ocn.to_s =~/\d+/) ? dob.ocn : nil) - @p_num=SiSU_XML_format::Paragraph_number.new(@md,ocn) + @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,ocn) end if not @rcdc if defined? dob.ocn \ and dob.ocn.to_s =~/\d+/ - x=SiSU_XML_format::Format_seg.new(@md,dob) - if dob.is=='heading' + x=SiSU_XML_Format::FormatSeg.new(@md,dob) + if dob.is==:heading xml_structure(dob) dob.obj=case dob.ln when 1; x.heading_body1 @@ -315,32 +336,39 @@ WOK when 6; x.heading_body6 end else - if dob.is=='verse' + if dob.is==:verse poem_structure(dob) - elsif dob.is=='group' + elsif dob.is==:group group_structure(dob) - elsif dob.is=='code' + elsif dob.is==:block + block_structure(dob) + elsif dob.is==:code code_structure(dob) - elsif dob.is=='table' # FIX, check css, will need to modify + elsif dob.is==:table # FIX, check css, will need to modify table_structure(dob) - elsif dob.is =~ /^para/ \ + elsif dob.is ==:para \ and dob.indent.to_s =~/[1-9]/ \ and dob.bullet_==true xml_structure(dob,"indent_bullet#{dob.indent}") - elsif dob.is =~ /^para/ \ - and dob.indent.to_s =~/[1-9]/ + elsif dob.is ==:para \ + and dob.indent.to_s =~/[1-9]/ \ + and dob.indent == dob.hang xml_structure(dob,"indent#{dob.indent}") + elsif dob.is ==:para \ + and dob.hang.to_s =~/[0-9]/ \ + and dob.indent != dob.hang + xml_structure(dob,"hang#{dob.hang.to_s}_indent#{dob.indent.to_s}") else xml_structure(dob) end end elsif dob.obj =~/(#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ elsif dob.obj =~/MetaData/ - txt_obj={:txt =>'<br /><a name="metadata">MetaData</a>'} - format_scroll=Format_scroll.new(@md,txt_obj) + txt_obj={ txt: '<br /><a name="metadata">MetaData</a>' } + format_scroll=FormatScroll.new(@md,txt_obj) dob.obj=format_scroll.bold_para elsif dob.obj =~/(Owner Details)/ -# txt_obj={:txt =>'<br /><a name="owner.details">Owner Details</a>'} -# format_scroll=Format_scroll.new(@md,txt_obj) +# txt_obj={ txt: '<br /><a name="owner.details">Owner Details</a>' } +# format_scroll=FormatScroll.new(@md,txt_obj) # @@xml[:owner_details]=format_scroll.bold_para dob.obj='' end @@ -350,14 +378,14 @@ WOK end if dob.obj =~/.*<:#>.*$/ #investigate removal dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/ - txt_obj={:txt =>dob} - format_text=Format_text_object.new(@md,txt_obj) + txt_obj={ txt: dob } + format_text=FormatTextObject.new(@md,txt_obj) format_text.scr_inden_ocn_e_no_paranum end end else # end - dob.obj.gsub!(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj + dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj end end 6.downto(4) do |x| @@ -371,16 +399,16 @@ WOK #6.downto(1) { |x| y=x - 1; @@xml[:body] << "#{Ax[:tab]*y}</level #{x}>" if @level[x]==true } end def pre - rdf=SiSU_XML_tags::RDF.new(@md) - dir=SiSU_Env::Info_env.new + rdf=SiSU_XML_Tags::RDF.new(@md) + dir=SiSU_Env::InfoEnv.new @@xml[:head],@@xml[:body]=[],[] - css=SiSU_Env::CSS_select.new(@md).xml_sax + stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xml_sax').stylesheet encoding=if @sys.locale =~/utf-?8/i; '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' else '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>' end @@xml[:open] =<<WOK #{encoding} -<?xml-stylesheet type="text/css" href="../#{dir.path.style}/#{css}"?> +#{stylesheet.css_head_xml} #{rdf.comment_xml} <document> WOK @@ -398,7 +426,7 @@ WOK content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata] content << @@xml[:owner_details] if @md.stmp =~/\w\w/ content << @@xml[:tail] << @@xml[:close] - content.flatten!.compact! + content=content.flatten.compact Output.new(content,@md).xml @@xml={} end @@ -406,34 +434,35 @@ WOK class Output def initialize(data,md) @data,@md=data,md + @file=SiSU_Env::FileOp.new(@md) end def xml - SiSU_Env::SiSU_file.new(@md).mkdir - filename_xml=SiSU_Env::SiSU_file.new(@md,@md.fn[:sax]).mkfile + SiSU_Env::FileOp.new(@md).mkdir + filename_xml=@file.write_file.xml_sax @data.each do |str| - str.gsub!(/\A\s+\Z/m,'') #str.gsub!(/^\s+$/,'') + str=str.gsub(/\A\s+\Z/m,'') filename_xml.puts str unless str.empty? end filename_xml.close end end class Tidy - def initialize(md,dir) - @md,@env=md,dir - @prog=SiSU_Env::Info_program.new + def initialize(md,file) + @md,@file=md,file + @prog=SiSU_Env::InfoProgram.new end def xml if @prog.tidy !=false #note values can be other than true - if @md.cmd =~/[VM]/ - unless @md.cmd =~/q/ - SiSU_Screen::Ansi.new(@md.cmd,'invert','Using XML Tidy','check document structure').colorize - tell=SiSU_Screen::Ansi.new(@md.cmd,'invert','','') + if @md.opt.cmd =~/[VM]/ + unless @md.opt.cmd =~/q/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','Using XML Tidy','check document structure').colorize + tell=SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','','') tell.grey_open end tidyfile='/dev/null' #don't want one or screen output, check for alternative flags - tidy=SiSU_Env::System_call.new("#{@env.path.output}/#{@md.fnb}/#{@md.fn[:sax]}",tidyfile) + tidy=SiSU_Env::SystemCall.new(@file,tidyfile) tidy.well_formed? - tell.p_off unless @md.cmd =~/q/ + tell.p_off unless @md.opt.cmd =~/q/ end end end diff --git a/lib/sisu/v2/xml_dom.rb b/lib/sisu/v4/xml_dom.rb index c07364f2..4508c389 100644 --- a/lib/sisu/v2/xml_dom.rb +++ b/lib/sisu/v4/xml_dom.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -30,9 +31,10 @@ 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.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf> + + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -44,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -54,26 +56,26 @@ ** Notes: tidy -xml dom.xml >> index.tidy =end module SiSU_XML_DOM - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz - require "#{SiSU_lib}/particulars" # particulars.rb + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge - require "#{SiSU_lib}/xml_format" # xml_format.rb - include SiSU_XML_format - require "#{SiSU_lib}/rexml" # rexml.rb + require_relative 'dal' # dal.rb + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge + require_relative 'xml_format' # xml_format.rb + include SiSU_XML_Format + require_relative 'rexml' # rexml.rb include SiSU_Rexml - require "#{SiSU_lib}/shared_metadata" # shared_metadata.rb + require_relative 'shared_metadata' # shared_metadata.rb @@alt_id_count,@@tablehead,@@number_of_cols=0,0,0 @@tablefoot='' class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) end def read begin @@ -81,45 +83,53 @@ module SiSU_XML_DOM unless @opt.cmd =~/q/ path=@env.path.output_tell loc=@env.url.output_tell - tool=if @opt.cmd =~/[MV]/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:dom]}\n\t#{@env.program.xml_viewer} #{path}/#{@md.fnb}/#{@md.fn[:dom]}" - elsif @opt.cmd =~/v/; "#{@env.program.web_browser} #{loc}/#{@md.fnb}/#{@md.fn[:dom]}" - else @opt.fns + tool=if @opt.cmd =~/[MV]/; "#{@env.program.web_browser} file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}\n\t#{@env.program.xml_viewer} file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}" + elsif @opt.cmd =~/v/; "#{@env.program.web_browser} file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}" + else "[#{@opt.f_pth[:lng_is]}] #{@opt.fno}" end @opt.cmd=~/[MVvz]/ \ - ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XML DOM',tool).colorize \ + ? SiSU_Screen::Ansi.new(@opt.cmd,'invert','XML DOM',tool).colorize : SiSU_Screen::Ansi.new(@opt.cmd,'XML DOM',tool).green_title_hi - SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{path}/#{@md.fnb}/#{@md.fn[:dom]}").flow if @opt.cmd =~/[MV]/ + SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}").flow if @opt.cmd =~/[MV]/ end SiSU_XML_DOM::Source::Songsheet.new(@particulars).songsheet - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure + SiSU_Env::CreateSite.new(@opt.cmd).cp_css end end private class Songsheet def initialize(particulars) @env,@md,@dal_array,@particulars=particulars.env,particulars.md,particulars.dal_array,particulars + @file=SiSU_Env::FileOp.new(@md) end def songsheet begin SiSU_XML_DOM::Source::Scroll.new(@particulars).songsheet - SiSU_XML_DOM::Source::Tidy.new(@md,@env).xml if @md.cmd =~/[vVM]/ # test wellformedness, comment out when not in use - SiSU_Rexml::Rexml.new(@md,@md.fn[:dom]).xml if @md.cmd =~/M/ # test rexml parsing, comment out when not in use #debug - rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error + SiSU_XML_DOM::Source::Tidy.new(@md,@file.place_file.xml_dom.dir).xml if @md.opt.cmd =~/[vVM]/ # test wellformedness, comment out when not in use + SiSU_Rexml::Rexml.new(@md,@file.place_file.xml_dom.dir).xml if @md.opt.cmd =~/M/ # test rexml parsing, comment out when not in use #debug + rescue + SiSU_Errors::InfoError.new($!,$@,@md.opt.cmd,@md.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end end class Scroll - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - require "#{SiSU_lib}/shared_xhtml" # decide use, whether xml rather than xhtml - @@xml={ :body=>[],:open=>[],:close=>[],:head=>[],:sc=>[] } + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + require_relative 'shared_xhtml' # decide use, whether xml rather than xhtml + @@xml={ body: [], open: [], close: [], head: [], sc: [] } def initialize(particulars) @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @vz=SiSU_Env::Get_init.instance.skin - @trans=SiSU_XML_munge::Trans.new(@md) - @sys=SiSU_Env::System_call.new + @vz=SiSU_Env::GetInit.instance.skin + @trans=SiSU_XML_Munge::Trans.new(@md) + @sys=SiSU_Env::SystemCall.new end def songsheet pre @@ -129,15 +139,15 @@ module SiSU_XML_DOM end protected def xml_markup(dob='') - dob.obj.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><number>\1</number><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') - dob.obj.gsub!(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, - '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><number>\1</number><note>\2</note></endnote> '). + gsub(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> '). + gsub(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/, + '<endnote><symbol>\1</symbol><note>\2</note></endnote> ') end def xml_head - metadata=Metadata::Summary.new(@md).xml_dom.metadata + metadata=SiSU_Metadata::Summary.new(@md).xml_dom.metadata @@xml[:head] << metadata end def xml_sc(md='') @@ -164,7 +174,7 @@ WOK end def xml_element(dob,xml_el='',xml_content='',type='norm') n=n1=n2=n3=0 - if dob.is=='heading' + if dob.is==:heading lv=dob.ln n=dob.ln - 1 n1=dob.ln @@ -199,7 +209,7 @@ WOK end def xml_structure(dob,type='norm') n=n1=n2=n3=0 - if dob.is=='heading' + if dob.is==:heading lv=dob.ln n=dob.ln - 1 n1=dob.ln @@ -306,26 +316,30 @@ WOK @@xml[:body] << %{#{Ax[:tab]*6}</object>} end end + def block_structure(dob) + dob=@trans.markup_block(dob) #decide check & FIX + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m, + '<endnote><number>\1</number><note>\2</note></endnote> ').strip + dob + end def group_structure(dob) dob=@trans.markup_group(dob) #decide check & FIX - dob.obj.gsub!(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m, - '<endnote><number>\1</number><note>\2</note></endnote> ') - dob.obj.strip! + dob.obj=dob.obj.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/m, + '<endnote><number>\1</number><note>\2</note></endnote> ').strip dob end def poem_structure(dob) dob=@trans.markup_group(dob) #decide check & FIX - dob.obj.strip! + dob.obj=dob.obj.strip dob end def code_structure(dob) dob=@trans.markup_group(dob) #decide check & FIX - dob.obj.gsub!(/\s\s/,'  ') - dob.obj.strip! + dob.obj=dob.obj.gsub(/\s\s/,'  ').strip dob end def table_structure(dob) #tables - table=SiSU_XHTML_shared::Table_xhtml.new(dob) + table=SiSU_XHTML_Shared::TableXHTML.new(dob) end def markup(data) xml_sc(@md) @@ -339,18 +353,18 @@ WOK @trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8 dob=@trans.markup(dob) if @rcdc==false \ - and (dob.is =~/^meta/ \ + and (dob.is ==:meta \ and dob.obj =~/Document Information/) @rcdc=true end if dob !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ - @p_num=SiSU_XML_format::Paragraph_number.new(@md,dob.ocn) if defined? dob.ocn + @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,dob.ocn) if defined? dob.ocn if not @rcdc if defined? dob.ocn \ and dob.ocn.to_s =~/\d+/ - format_scroll=SiSU_XML_format::Format_scroll.new(@md,dob) if dob.is=='para' and dob.indent ##FIX - x=SiSU_XML_format::Format_seg.new(@md,dob) - if dob.is=='heading' + format_scroll=SiSU_XML_Format::FormatScroll.new(@md,dob) if dob.is==:para and dob.indent ##FIX + x=SiSU_XML_Format::FormatSeg.new(@md,dob) + if dob.is==:heading if dob.ln==1 type="heading_section_#{dob.ln.to_s}" xml_markup(dob) @@ -383,27 +397,36 @@ WOK end else ocn=dob.ocn - if dob.is=='verse' + if dob.is==:verse type='verse' poem_structure(dob) #redo - elsif dob.is=='group' + elsif dob.is==:group type='group' group_structure(dob) #redo - elsif dob.is=='code' + elsif dob.is==:block + type='block' + block_structure(dob) #redo + elsif dob.is==:code type='code' code_structure(dob) #redo - elsif dob.is=='table' # tables come as single block #work area 2005w13 + elsif dob.is==:table # tables come as single block #work area 2005w13 type='table' table_structure(dob) - elsif dob.is=='para' \ + elsif dob.is==:para \ and dob.indent.to_s =~/[1-9]/ \ and dob.bullet_ type="indent_bullet#{dob.indent.to_s}" xml_markup(dob) - elsif dob.is=='para' \ - and dob.indent.to_s =~/[1-9]/ + elsif dob.is==:para \ + and dob.indent.to_s =~/[1-9]/ \ + and dob.indent == dob.hang type="indent#{dob.indent.to_s}" xml_markup(dob) + elsif dob.is==:para \ + and dob.hang.to_s =~/[0-9]/ \ + and dob.indent != dob.hang + type="hang#{dob.hang.to_s}_indent#{dob.indent.to_s}" + xml_markup(dob) else type='norm' xml_markup(dob) @@ -412,8 +435,8 @@ WOK end elsif dob.obj =~/(#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ elsif dob.obj =~/(MetaData)/ - txt_obj={:txt =>'<br /><a name="metadata">MetaData</a>'} - format_scroll=Format_scroll.new(@md,txt_obj) + txt_obj={ txt: '<br /><a name="metadata">MetaData</a>' } + format_scroll=FormatScroll.new(@md,txt_obj) dob.obj=format_scroll.bold_para elsif dob.obj =~/(Owner Details)/ dob.obj='' @@ -424,8 +447,8 @@ WOK end if dob.obj =~/.*<:#>.*$/ dob.obj=if dob.obj =~ /#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}/ - txt_obj={:txt =>dob.obj} - format_text=Format_text_object.new(@md,txt_obj) + txt_obj={ txt: dob.obj } + format_text=FormatTextObject.new(@md,txt_obj) format_text.scr_inden_ocn_e_no_paranum end end @@ -433,7 +456,7 @@ WOK end else # end - dob.obj.gsub!(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj + dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj end end @content_flag=true @@ -454,15 +477,15 @@ WOK end end def pre - rdf=SiSU_XML_tags::RDF.new(@md) - dir=SiSU_Env::Info_env.new - css=SiSU_Env::CSS_select.new(@md).xml_dom + rdf=SiSU_XML_Tags::RDF.new(@md) + dir=SiSU_Env::InfoEnv.new + stylesheet=SiSU_Style::CSS_HeadInfo.new(@md,'xml_dom').stylesheet encoding=if @sys.locale =~/utf-?8/i; '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' else '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>' end @@xml[:open] =<<WOK #{encoding} -<?xml-stylesheet type="text/css" href="../#{dir.path.style}/#{css}"?> +#{stylesheet.css_head_xml} #{rdf.comment_xml} <document> WOK @@ -480,7 +503,7 @@ WOK content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata] content << @@xml[:owner_details] if @md.stmp =~/\w\w/ content << @@xml[:tail] << @@xml[:close] - content.flatten!.compact! + content=content.flatten.compact Output.new(content,@md).xml @@xml[:head],@@xml[:body],@@xml[:tail]=[],[],[] # check whether should be nil end @@ -489,32 +512,33 @@ WOK include SiSU_Param def initialize(data,md) @data,@md=data,md + @file=SiSU_Env::FileOp.new(@md) end def xml - SiSU_Env::SiSU_file.new(@md).mkdir - filename_xml=SiSU_Env::SiSU_file.new(@md,@md.fn[:dom]).mkfile + SiSU_Env::FileOp.new(@md).mkdir + filename_xml=@file.write_file.xml_dom @data.each do |str| - str.gsub!(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') + str=str.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') filename_xml.puts str unless str.empty? end filename_xml.close end end class Tidy - def initialize(md,dir) - @md,@env=md,dir - @prog=SiSU_Env::Info_program.new + def initialize(md,file) + @md,@file=md,file + @prog=SiSU_Env::InfoProgram.new end def xml if @prog.tidy !=false - if @md.cmd =~/[VM]/ - SiSU_Screen::Ansi.new(@md.cmd,'invert','Using XML Tidy','check document structure').colorize unless @md.cmd =~/q/ - tell=SiSU_Screen::Ansi.new(@md.cmd,'invert','','') - tell.grey_open unless @md.cmd =~/q/ + if @md.opt.cmd =~/[VM]/ + SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','Using XML Tidy','check document structure').colorize unless @md.opt.cmd =~/q/ + tell=SiSU_Screen::Ansi.new(@md.opt.cmd,'invert','','') + tell.grey_open unless @md.opt.cmd =~/q/ tidyfile='/dev/null' #don't want one or screen output, check for alternative flags - tidy=SiSU_Env::System_call.new("#{@env.path.output}/#{@md.fnb}/#{@md.fn[:dom]}",tidyfile) + tidy=SiSU_Env::SystemCall.new(@file,tidyfile) tidy.well_formed? - tell.p_off unless @md.cmd =~/q/ + tell.p_off unless @md.opt.cmd =~/q/ end end end diff --git a/lib/sisu/v2/xml_fictionbook.rb b/lib/sisu/v4/xml_fictionbook.rb index 045fdb93..abb903e9 100644 --- a/lib/sisu/v2/xml_fictionbook.rb +++ b/lib/sisu/v4/xml_fictionbook.rb @@ -1,13 +1,14 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU - * Description: extract and print an XML rendition of document structure to screen + * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,23 +46,23 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> <ralph.amissah@gmail.com> - ** Description: SiSU information Structuring Universe, processing + ** Description: extract and print an XML rendition of document structure to screen =end module SiSU_XML_Fictionbook - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/shared_txt" # shared_txt.rb - include SiSU_text_utils - require "#{SiSU_lib}/shared_xml" # shared_xml.rb - include SiSU_XML_munge + require_relative 'shared_txt' # shared_txt.rb + include SiSU_TextUtils + require_relative 'shared_xml' # shared_xml.rb + include SiSU_XML_Munge include SiSU_Param pwd=Dir.pwd class Source @@ -76,7 +75,10 @@ module SiSU_XML_Fictionbook @md=SiSU_Param::Parameters.new(@opt).get @dal_array=SiSU_DAL::Source.new(@opt).get SiSU_XML_Fictionbook::Source::Scroll.new(@dal_array,@md).songsheet - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end @@ -84,8 +86,8 @@ module SiSU_XML_Fictionbook class Scroll <Source def initialize(data='',md='') @data,@md=data,md - @trans=SiSU_XML_munge::Trans.new(@md) - @file_fictionbook=SiSU_Env::SiSU_file.new(@md,'fictionbook.xml').mkfile + @trans=SiSU_XML_Munge::Trans.new(@md) + @file_fictionbook=SiSU_Env::FileOp.new(@md,'fictionbook.xml').mkfile end def songsheet @t='fictionbook' @@ -103,8 +105,8 @@ module SiSU_XML_Fictionbook tail end def head - version=SiSU_Env::Info_version.instance.get_version - rb_ver=SiSU_Env::Info_version.instance.rbversion + version=SiSU_Env::InfoVersion.instance.get_version + rb_ver=SiSU_Env::InfoVersion.instance.rbversion date_available=if defined? @md.date.available; "\n <p>#{@md.date.available} Initial version</p>" else '' end @@ -151,14 +153,14 @@ WOK @data.each do |para| @endnotes << para.scan(/~\{(.+?)\}~/m) end - @endnotes.flatten! + @endnotes=@endnotes.flatten end def endnotes @endnotes.each do |endnote| - endnote.strip! + endnote=endnote.strip endnote=@trans.markup_fictionbook(endnote) endnote="<p>#{endnote}</p>" - util=SiSU_text_utils::Wrap.new(endnote,80,10) + util=SiSU_TextUtils::Wrap.new(endnote,80,10) endnote=util.line_wrap put(endnote) end @@ -171,17 +173,17 @@ WOK put(tail) end def markup(para,type='') - para.strip! + para=para.strip para=@trans.markup_fictionbook(para) para=if type.empty?; "<p>#{para}</p>" else "<#{type}><p>#{para}</p></#{type}>" end - util=SiSU_text_utils::Wrap.new(para,80,10) + util=SiSU_TextUtils::Wrap.new(para,80,10) wrap=util.line_wrap end def put(line) @file_fictionbook.puts line - puts line if @md.cmd =~/V/ + puts line if @md.opt.cmd =~/V/ end def structure_build_tag_close(lev,h) @sp=' ' @@ -261,7 +263,7 @@ WOK y="#{@sp*6}<#{@s[6]}>\n#{x[:para]}" @h[0]=6 else - y=if @md.cmd =~/V/; "#{x[:para]}" + y=if @md.opt.cmd =~/V/; "#{x[:para]}" else nil end end @@ -286,7 +288,7 @@ WOK @ds[c][:para]=markup(para,'title') else @ds[c]={} - @ds[c][:para]=markup(para) if @md.cmd =~/V/ + @ds[c][:para]=markup(para) if @md.opt.cmd =~/V/ end c+=1 end diff --git a/lib/sisu/v2/xml_format.rb b/lib/sisu/v4/xml_format.rb index c98c2111..52874eb1 100644 --- a/lib/sisu/v2/xml_format.rb +++ b/lib/sisu/v4/xml_format.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,11 +56,11 @@ ** Notes: tidy -xml index.xml >> index.tidy =end -module SiSU_XML_format - require "#{SiSU_lib}/param" # param.rb +module SiSU_XML_Format + require_relative 'param' # param.rb include SiSU_Param include SiSU_Viz - class Paragraph_number + class ParagraphNumber def initialize(md,paranum) @md=md @paranum=(paranum ? (/(\d+)/m.match(paranum)[1]) : nil) @@ -84,7 +83,7 @@ module SiSU_XML_format p_num_goto end end - class Head_information + class HeadInformation def initialize #dc rdf @full_title=@subtitle=@author=@subject=@description=@publisher=@contributor=@date=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@copyright=@owner=@keywords='' @md=@@md @@ -193,20 +192,12 @@ module SiSU_XML_format @copyright=%{<meta name="copyright" content="#{@md.rights.copyright.all}" />\n} if @md.rights.copyright.all # possibly redundant see dc.rights @owner=%{<meta name="owner" content="#{@md.owner}" />\n} if @md.owner @keywords=%{<meta name="keywords" content="#{@md.keywords}" />\n} if @md.keywords - @vz=SiSU_Env::Get_init.instance.skin #margin,paragraph,table,banner,url,png,txt,color,font,nav_txt,nav_png,credits,js,php + @vz=SiSU_Env::GetInit.instance.skin #margin,paragraph,table,banner,url,png,txt,color,font,nav_txt,nav_png,credits,js,php @index='index' end - def toc_head_escript #embedded script in this case PHP - end def table_close '</font> </td></tr></table>' end - def buttons_home - %{\n#{@banner.home_and_index_buttons}\n} - end - def copyat - %{copy @ <a href="#{@url.home}" #{@js.home}>#{@txt.home}</a>} - end def toc_head <<WOK <html> @@ -274,7 +265,7 @@ module SiSU_XML_format WOK end end - class Format_text_object + class FormatTextObject attr_accessor :md,:txt,:format,:paranum,:p_num,:para_id,:headname,:font def initialize(md,dob) @md,@dob=md,dob @@ -282,19 +273,19 @@ WOK @paranum=/(\d+)/m.match(@dob[:ocn])[1] @headname='' @headname=%{<a name="h#{dob.name}"></a>} if defined? dob.name - @p_num=SiSU_XML_format::Paragraph_number.new(@md,dob.ocn) + @p_num=SiSU_XML_Format::ParagraphNumber.new(@md,dob.ocn) end rgx=/^[1-6-]~{1,2}/ #watch @lnk_url=@lnk_url.gsub(rgx,'') if @lnk_url =~rgx rgx=/~\{\d+\s+(.+?)\}~/ @lnk_url=@lnk_url.gsub(rgx,'\1') if @lnk_url =~rgx - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def scr_endnote_body "<endnote>#{@txt}</endnote> " end end - class Format_scroll < Format_text_object + class FormatScroll < FormatTextObject def initialize(md,dob) super(md,dob) end @@ -327,33 +318,26 @@ WOK %{<p class="paranum"><font size="1" color="#777777"> #{@dob.ocn}</font></p>\n} end end - class Paragraph_number + class ParagraphNumber def initialize(md,ocn) @md,@ocn=md,ocn.to_s @ocn ||='' - vz=SiSU_Env::Get_init.instance.skin - @skin_no_ocn=if not ocn - true - elsif defined? vz.ocn_display_off \ - and vz.ocn_display_off==true - true - else false - end end def ocn_display - if @md.markup.inspect =~/no_ocn/ \ - or @md.mod.inspect =~/--no-ocn/ \ - or @skin_no_ocn - ocn_class='ocn_off' - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"> </label>}) - elsif @ocn.to_i==0 - @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"><a name="#{@ocn}"> </a></label>}) - else + @make=SiSU_Env::ProcessingSettings.new(@md) + if @make.build.ocn? ocn_class='ocn' + if @ocn.to_i==0 + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"><a name="#{@ocn}"> </a></label>}) + else + @ocn.gsub(/^(\d+|)$/, + %{<label class="#{ocn_class}"><a name="#{@ocn}">\\1</a></label>}) + end + else + ocn_class='ocn_off' @ocn.gsub(/^(\d+|)$/, - %{<label class="#{ocn_class}"><a name="#{@ocn}">\\1</a></label>}) + %{<label class="#{ocn_class}"> </label>}) end end def name @@ -366,15 +350,15 @@ WOK %{<a href="##{@ocn}">} end end - class Head_information + class HeadInformation include SiSU_Viz attr_reader :md,:sfx,:pdf,:rdf,:vz def initialize(md) @md=md - @rdf=SiSU_XML_tags::RDF.new(md) + @rdf=SiSU_XML_Tags::RDF.new(md) # DublinCore 1 - title - @vz=SiSU_Env::Get_init.instance.skin - @css=SiSU_Env::CSS_stylesheet.new(md) + @vz=SiSU_Env::GetInit.instance.skin + @stylesheet=SiSU_Style::CSS_HeadInfo.new(md).stylesheet @seg_name_html=(SiSU_HTML::Source::Seg.new.seg_name_html || []) @seg_name_html_tracker=(SiSU_HTML::Source::Seg.new.seg_name_html_tracker || []) @index='index' @@ -390,108 +374,14 @@ WOK %{ </font> #{@vz.table_close}} end - def buttons_home - %{<!- home and index buttons -!> - #{@vz.banner_home_and_index_buttons} -<!- home and index buttons -!>} - end - def copyat - %{#{@vz.paragraph_font_tiny}copy @ - <a href="#{@vz.url_home}" #{@vz.js_home}> - #{@vz.txt_home} - </a></font>} - end def html_close #moved %{</body> </html>} end end - class Widget < Head_information - def initialize(md) - super(md) - @md=md - @cf_defaults=SiSU_Env::Info_processing_flag.new - end - def home - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="../index.html" target="_top"> - #{@vz.png_homepage}</a> -</td> -} - end - def scroll(text) - if @md.fns =~ /\.(?:-|ssm\.)?sst$/ - scroll=%{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:doc]}" target="_top" #{@vz.js_doc}> - #{text} - </a> -</td> -} - end - end - def seg(text) - %{<td align="center" bgcolor="#99CC66"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_doc}> - #{text} - </a> -</td> -} - end - def search - env=SiSU_Env::Info_env.new(@md.fns,@md) - env.widget.search_form('sisusearch',nil,nil,true) - end - def manifest - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> - #{@vz.nav_txt_manifest} - </a> -</td>} - end - def pdf - pdf=if @md.programs[:pdf] \ - and @cf_defaults.cf_0 =~/p/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_p]}" target="_top" #{@vz.js_portrait}> - #{@vz.nav_txt_pdf_portrait} - </a> -</td> -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:pdf_l]}" target="_top" #{@vz.js_landscape}> - #{@vz.nav_txt_pdf_landscape} - </a> -</td> -} - else '' - end - end - def odf - odf=if @cf_defaults.cf_0 =~/o/ - %{ -<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:odf]}" target="_top" #{@vz.js_odf}> - #{@vz.nav_txt_odf} - </a> -</td>} - else '' - end - end - def concordance(text) - if @md.concord_make \ - and @md.wc_words < 300000 #max word count for display of concordance here as would now be a large file - %{<td align="center" bgcolor=#{@vz.color_band2}> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a> - </td>} - else '' - end - end - end class XML end - class Head_toc < Head_information + class HeadToc < HeadInformation def initialize(md) super(md) @md=md @@ -537,7 +427,7 @@ WOK if type=~/pdf/ @tocband_segtoc=make_scroll_seg_pdf end - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" alt="->"> + firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top" alt="->"> #{@vz.png_nav_nxt} </a>} if @md.firstseg =~/\S+/ %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> @@ -556,7 +446,7 @@ WOK if type=~/pdf/ @tocband_segtoc=make_scroll_seg_pdf end - firstseg=%{<a href="#{@md.fnl[:pre]}#{@md.firstseg}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" alt="->"> + firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top" alt="->"> #{@vz.png_nav_nxt} </a>} if @md.firstseg =~/\S+/ %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> @@ -571,21 +461,6 @@ WOK #{@vz.table_close} <p />} end - def manifest_link(text) - %{<font size=2> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}>#{text}</a> - </font>} - end - def concordance_link(text) - if @md.concord_make - %{<font size=2> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a> - </font>} - else '' - end - end def make_seg_scroll_pdf wgt=Widget.new(@md) scroll=%{<td align="center" bgcolor=#{@vz.color_band2}> @@ -642,67 +517,12 @@ WOK <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> #{@rdf.rdftoc} #{@rdf.metatag_html} -#{@css.html} +#{@stylesheet.css_head} </head> #{@vz.color_body} <a name="top" id="top"></a> <a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} - end - def concordance - if @md.concord_make - %{#{@vz.margin_css} - <h4 class="toc"> - <a href="./#{@md.fn[:concordance]}" #{@vz.js_concordance}> - <i>Concordance</i> - </a> - </h4> -#{@vz.table_close}} - else - %{#{@vz.margin_css} -#{@vz.table_close}} - end - end - def links_guide_vertical_open #??? - url=(((defined? @vz.url_hp) && @vz.url_hp =~/^https?:\/\/\S+$/) ? @vz.url_hp : @vz.url_home) - %{ -<div id="vertical_links"> - <ul id="vertical"> - <li class="refbold"> - <a href="#{url}" #{@vz.js_home}> - #{@vz.txt_hp} - </a> - </li> - <li class="ref"> - Quick Ref.: - </li> - <li class="ref"> - <a href="#{@md.fn[:manifest]}" target="_top"> - Manifest - </a> - </li> -<!- quick ref -!>} - end - def links_guide_horizontal_open #??? - url=(((defined? @vz.url_hp) && @vz.url_hp =~/^https?:\/\/\S+$/) ? @vz.url_hp : @vz.url_home) - %{ -<div id="horizontal_links"> - <ul id="horizontal"> - <li class="refbold"> - <a href="#{url}" #{@vz.js_home}> - #{@vz.txt_hp} - </a> - </li> - <li class="ref"> - Quick Ref.: - </li> - <li class="ref"> - <a href="#{@md.fn[:manifest]}" target="_top"> - Manifest - </a> - </li> -<!- quick ref -!>} +<a name="start" id="start"></a>} end def links_guide_open(type='horizontal') if type=='vertical'; links_guide_vertical_open @@ -789,16 +609,12 @@ WOK def metadata %{#{@vz.margin_css} <h4 class="toc"> - <a href="#{@metalink}" #{@vz.js_metalink}> + <a href="#{@metalink}"> <i>MetaData</i> </a> </h4> #{@vz.table_close}} end - def seg_metadata - @metalink=%{./#{@md.fn[:metadata]}} - metadata - end def seg_tail %{ <div class="main_column"> @@ -864,7 +680,7 @@ WOK } end end - class Head_seg < Head_information + class HeadSeg < HeadInformation def initialize(md) #(md='') super(md) end @@ -883,43 +699,24 @@ WOK #{@vz.color_body} <a name="top" id="top"></a> <a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} +<a name="start" id="start"></a>} end def title_banner(title,subtitle,creator) end def dot_control_pre_next %{<table summary="segment hidden control pre and next" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> <tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-1]}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> - #{@vz.png_nav_dot_pre} - </a> -</td> -<td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> - #{@vz.png_nav_dot_toc} - </a> -</td> -<td align="right"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> - #{@vz.png_nav_dot_nxt} - </a> -#{@vz.table_close}} - end - def dot_control_pre - %{<table summary="segment hidden control pre" width="100%" border="0" cellpadding="0" bgcolor=#{@vz.color_grey_pale} align="center"> -<tr><td align="left"> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-2]}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> + <a href="#{@seg_name_html[@seg_name_html_tracker-1]}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_dot_pre} </a> </td> <td align="center"> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> + <a href="#{@index}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_dot_toc} </a> </td> <td align="right"> - <a href="#{@md.fn[:toc]}" target="_top" #{@vz.js_next}> + <a href="#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_dot_nxt} </a> #{@vz.table_close}} @@ -927,17 +724,17 @@ WOK def toc_nav(f_pre=false,f_nxt=false,use=1) pre=nxt='' toc=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@index}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_toc}> + <a href="#{@index}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_toc} </a> </td>} pre=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker-use]}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_prev}> + <a href="#{@seg_name_html[@seg_name_html_tracker-use]}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_pre} </a> </td>} if f_pre==true nxt=%{<td align="center" bgcolor=#{@vz.color_band1}> - <a href="#{@md.fnl[:pre]}#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.fnl[:mid]}#{Sfx[:xhtml]}#{@md.fnl[:post]}" target="_top" #{@vz.js_next}> + <a href="#{@seg_name_html[@seg_name_html_tracker+1]}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top"> #{@vz.png_nav_nxt} </a> </td>} if f_nxt==true @@ -959,27 +756,10 @@ WOK def toc_pre2 toc_nav(true,false,2).dup end - def manifest_link(text) - %{<font size=2> - <a href="#{@md.fn[:manifest]}" target="_top" #{@vz.js_manifest}> - #{text} - </a> - </font>} - end - def concordance_link(text) - if @md.concord_make - %{<font size=2> - <a href="#{@md.fn[:concordance]}" target="_top" #{@vz.js_concordance}> - #{text} - </a> - </font>} - else '' - end - end def doc_types #used in seg_nav_band ### scroll=seg='' wgt=Widget.new(@md) - #dir=SiSU_Env::Info_env.new(@md.fns) + #dir=SiSU_Env::InfoEnv.new(@md.fns) x=if @md.concord_make %{ <table summary="segment navigation available documents types: toc,doc,pdf,concordance" border="0" cellpadding="3" cellspacing="0"> @@ -1025,7 +805,7 @@ WOK <font size="2">} end def header_advert_local_1 - dir=SiSU_Env::Info_env.new(@fns) + dir=SiSU_Env::InfoEnv.new(@fns) %{ <center> <table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> <tr><td align="center" bgcolor="white"> @@ -1037,7 +817,7 @@ WOK </center>} end def header_advert_local_2 - dir=SiSU_Env::Info_env.new(@fns) + dir=SiSU_Env::InfoEnv.new(@fns) %{ <center> <table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> <tr><td align="center" bgcolor="white"> @@ -1049,7 +829,7 @@ WOK </center>} end def header_advert_external - dir=SiSU_Env::Info_env.new(@fns) + dir=SiSU_Env::InfoEnv.new(@fns) %{ <center> <table summary="image" border="0" cellpadding="3" cellspacing="0" align="center"> <tr><td align="center" bgcolor="white"> @@ -1129,17 +909,12 @@ WOK <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> #{@rdf.rdfseg} #{@rdf.metatag_html} -#{@css.html} +#{@stylesheet.css_head} </head> #{@vz.color_body} <a name="top" id="top"></a> <a name="up" id="up"></a> -<a name="start" id="start"></a> -#{@vz.js_top}} - end - def toc_metadata - @metalink=%{./#{@md.fn[:meatadata]}} - toc_metadata +<a name="start" id="start"></a>} end def title_banner(title,subtitle,creator) %{ @@ -1163,7 +938,7 @@ WOK } end end - class Head_scroll < Head_toc + class HeadScroll < HeadToc def initialize(md) #(md='') super(md) end @@ -1197,12 +972,12 @@ WOK #{@vz.paragraph_txt}} end end - class Format_text_object - @vz=SiSU_Env::Get_init.instance.skin + class FormatTextObject + @vz=SiSU_Env::GetInit.instance.skin attr_accessor :md,:dob,:txt,:ocn,:format,:table,:link,:linkname,:paranum,:p_num,:headname,:banner,:url def initialize(md,t_o) @md,@t_o=md,t_o - if t_o.class==Hash + if t_o.is_a?(Hash) @txt =t_o[:txt] || nil @ocn =t_o[:ocn] || nil @ocn_display =t_o[:ocn_display] || nil @@ -1221,11 +996,11 @@ WOK @ocn=if defined? t_o.ocn; t_o.ocn.to_s else nil end - @headname=if t_o.is=='heading' and defined? t_o.name; t_o.name + @headname=if t_o.is==:heading and defined? t_o.name; t_o.name else nil end else - if @md.cmd =~/M/ + if @md.opt.cmd =~/M/ p __FILE__ +':'+ __LINE__.to_s p t_o.class p caller @@ -1233,7 +1008,7 @@ WOK end if defined? @t_o.ocn ocn=((@t_o.ocn.to_s =~/\d+/) ? @t_o.ocn : nil) - @p_num=Paragraph_number.new(@md,ocn) + @p_num=ParagraphNumber.new(@md,ocn) end if @format and not @format.empty? if @format=~/^\d:(\S+)/ #need more reliable marker #if @format =~ /#{Rx[:lv]}/ @@ -1244,7 +1019,7 @@ WOK end end @dob=t_o if defined? t_o.is - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end def endnote_body %{ @@ -1372,17 +1147,18 @@ WOK end def gsub_body #fix - case @txt + @txt=case @txt when /^\s*\((i+|iv|v|vi+|ix|x|xi+)\)/ - @txt.gsub!(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>') - @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>') + @txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>'). + gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>') when /^\s*\(?(\d|[a-z])+\)/ - @txt.gsub!(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>') - @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>') + @txt.gsub(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>'). + gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>') when /^\s*\d{1,3}\.\s/ - @txt.gsub!(/^\s*(\d+\.)/,'<b>\1</b>') + @txt.gsub(/^\s*(\d+\.)/,'<b>\1</b>') when /^\s*[A-Z]\.\s/ - @txt.gsub!(/^\s*([A-Z]\.)/,'<b>\1</b>') + @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>') + else @txt end end def bold_para @@ -1395,8 +1171,8 @@ WOK #{@vz.table_close}} end def bold_header - @txt.gsub!(/[1-9]~(\S+)/,'<a name="\1"></a>') - @txt.gsub!(/[1-9]~/,'') + @txt=@txt.gsub(/[1-9]~(\S+)/,'<a name="\1"></a>'). + gsub(/[1-9]~/,'') %{<p class="bold"> #{@txt} </p> @@ -1417,13 +1193,13 @@ WOK %{<p class="centerbold">#{@txt}</p>\n} end end - class Format_scroll < Format_text_object + class FormatScroll < FormatTextObject def initialize(md,txt) super(md,txt) - @vz=SiSU_Env::Get_init.instance.skin + @vz=SiSU_Env::GetInit.instance.skin end end - class Format_seg < Format_text_object + class FormatSeg < FormatTextObject def initialize(md,txt) super(md,txt) end @@ -1479,7 +1255,7 @@ WOK fn='doc' if fn.empty? #you may wish to reconsider, sends to 'doc' where no segment info # Sfx[:html] or Sfx[:xhtml] ? %{ <p class="endnote"> - #{@endnote_part_a}#{@md.fnl[:pre]}#{fn}#{@md.fnl[:mid]}#{Sfx[:html]}#{@md.fnl[:post]}#{@endnote_part_b} + #{@endnote_part_a}#{fn}#{@md.lang_code_insert}#{Sfx[:html]}#{@endnote_part_b} </p> } end @@ -1492,9 +1268,9 @@ WOK note='' if txt =~/(#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}\s*)/m note=$1 - note.gsub!(/[\n\s]+/m,' ') - txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') - txt.gsub!(/<a[\n\s]+name="-\d+"[\n\s]+href="#_\d+"> <sup>\d+<\/sup> /m,'') + note=note.gsub(/[\n\s]+/m,' ') + txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' '). + gsub(/<a[\n\s]+name="-\d+"[\n\s]+href="#_\d+"> <sup>\d+<\/sup> /m,'') end %{<#{tag} class="#{attrib}"> <a href="##{@ocn}"><i>#{txt}</i></a> #{note} @@ -1508,7 +1284,7 @@ WOK end #% para sisu def header_sub(tag,attrib) - @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') + @txt=@txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ') %{ <div class="substance"> #{@p_num.ocn_display} @@ -1557,7 +1333,7 @@ WOK "<center>#{@txt}</center>" end end - class Format_toc < Format_text_object + class FormatToc < FormatTextObject def initialize(md,txt) super(md,txt) end diff --git a/lib/sisu/v2/xml_md_oai_pmh_dc.rb b/lib/sisu/v4/xml_md_oai_pmh_dc.rb index 5851a36b..6abbe30e 100644 --- a/lib/sisu/v2/xml_md_oai_pmh_dc.rb +++ b/lib/sisu/v4/xml_md_oai_pmh_dc.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -56,10 +55,10 @@ ** Description: summary of generated outputs and metadata =end -module SiSU_XML_metadata - require "#{SiSU_lib}/sysenv" # sysenv.rb +module SiSU_XML_Metadata + require_relative 'sysenv' # sysenv.rb include SiSU_Env - require "#{SiSU_lib}/param" # param.rb + require_relative 'param' # param.rb include SiSU_Param class OAI_PMH def initialize(opt) @@ -184,7 +183,7 @@ WOK end def meta_content_clean(content='') unless content.nil? - content.tr!('"',"'") + content=content.tr('"',"'") end content end @@ -192,8 +191,8 @@ WOK '</oai_dc:dc>' end def output - SiSU_Env::SiSU_file.new(@md).mkdir - oai_pmh=SiSU_Env::SiSU_file.new(@md,@md.fn[:oai_pmh]).mkfile #implement in param + SiSU_Env::FileOp.new(@md).mkdir + oai_pmh=SiSU_Env::FileOp.new(@md,@md.fn[:oai_pmh]).mkfile #implement in param oai_pmh << pre body.each do |x| oai_pmh << x diff --git a/lib/sisu/v2/xml_scaffold.rb b/lib/sisu/v4/xml_scaffold.rb index d85acd7e..2b7ae055 100644 --- a/lib/sisu/v2/xml_scaffold.rb +++ b/lib/sisu/v4/xml_scaffold.rb @@ -1,13 +1,14 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU - * Description: extract and print an XML rendition of document structure to screen + * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,33 +46,36 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> <ralph.amissah@gmail.com> - ** Description: SiSU information Structuring Universe, processing + ** Description: extract and print an XML rendition of document structure to screen =end -module SiSU_XML_scaffold - require "#{SiSU_lib}/particulars" # particulars.rb +module SiSU_XML_Scaffold + require_relative 'particulars' # particulars.rb include SiSU_Particulars - require "#{SiSU_lib}/dal" # dal.rb - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'dal' # dal.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd class Source def initialize(opt) @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) + @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt) @sp=' ' end def read begin @md,@dal_array=@particulars.md,@particulars.dal_array - SiSU_XML_scaffold::Source::Scroll.new(@dal_array,@md).songsheet - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error + SiSU_XML_Scaffold::Source::Scroll.new(@dal_array,@md).songsheet + rescue + SiSU_Errors::InfoError.new($!,$@,@opt.cmd,@opt.fns).error do + __LINE__.to_s + ':' + __FILE__ + end ensure end end @@ -103,20 +105,20 @@ module SiSU_XML_scaffold # 'sect2' # 'section' #] #] data=@data - structure_outline(data) if @md.cmd =~/V/ - structure_simple(data) if @md.cmd =~/V/ + structure_outline(data) if @md.opt.cmd =~/V/ + structure_simple(data) if @md.opt.cmd =~/V/ structure_build(data) end def structure_outline(data) puts "\ninfo outline --->\n\n" data.each do |o| - puts "#{o.ocn} #{o.ln} #{o.obj}" if o.is =~/^heading/ + puts "#{o.ocn} #{o.ln} #{o.obj}" if (o.is ==:heading || o.is ==:heading_insert) end end def structure_simple(data) puts "\nheading outline --->\n\n" data.each_with_index do |o,i| - if o.is =~ /^heading/; puts "<#{@s[o.ln]}>#{o.ocn} #{o.ln} #{o.obj}</#{@s[o.ln]}>" + if (o.is ==:heading || o.is ==:heading_insert); puts "<#{@s[o.ln]}>#{o.ocn} #{o.ln} #{o.obj}</#{@s[o.ln]}>" end end end @@ -125,7 +127,7 @@ module SiSU_XML_scaffold h=[0,false,false,false] puts "<#{@s[0]}>" data.each_with_index do |o,i| - if o.is =~/^heading/ + if (o.is ==:heading || o.is ==:heading_insert) case o.ln when 1 structure_build_tag_close(o.ln,h) diff --git a/lib/sisu/v2/xml_tables.rb b/lib/sisu/v4/xml_tables.rb index 71bcb37e..ba89e791 100644 --- a/lib/sisu/v2/xml_tables.rb +++ b/lib/sisu/v4/xml_tables.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,36 +56,36 @@ =end module SiSU_Tables - require "#{SiSU_lib}/defaults" # defaults.rb + require_relative 'defaults' # defaults.rb include SiSU_Viz class Table #_xml @@tablehead=0 @@tablefoot=[] #watch #bug??? #check was @@tablefoot def initialize(one,ocn='') - @one,@parablock,@ocn,@vz=one,one,ocn,SiSU_Env::Get_init.instance.skin + @one,@parablock,@ocn,@vz=one,one,ocn,SiSU_Env::GetInit.instance.skin end def table_split #% used but, no longer operational, revisit @new_content=[] @one.split(/\n/).each do |parablock| - table=Table_xml.new("#{parablock}\n") + table=TableXML.new("#{parablock}\n") @new_content << table.table end @new_content.join end end - class Table_xml <Table + class TableXML <Table @@tablehead=0 @@tablefoot=[] def initialize(one,ocn='') - @one,@parablock,@ocn,@vz=one,one,ocn,SiSU_Env::Get_init.instance.skin + @one,@parablock,@ocn,@vz=one,one,ocn,SiSU_Env::GetInit.instance.skin end def table m=@parablock[/<!f(.+?)!>/,1] @@tablefoot << m if m - @parablock.gsub!(/<!f.+?!>/,'') + @parablock=@parablock.gsub(/<!f.+?!>/,'') @@tablehead=1 if @parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u if @parablock =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}/u - @parablock.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+);\w\d+;\w\d+#{Mx[:gr_c]}/u, + @parablock=@parablock.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+);\w\d+;\w\d+#{Mx[:gr_c]}/u, %{\n<ocn>#{@ocn}</ocn><table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">}) end if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ @@ -96,37 +95,33 @@ module SiSU_Tables end if @@tablehead==1 if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}/u - @parablock.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + @parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, %{<tr> - <td width="\\1%" valign="top"> - #{@vz.paragraph_table_xml}<b>}) - @parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{</b></td><td width="\\1%" valign="top"> - #{@vz.paragraph_table_xml}<b>}) - @parablock.gsub!(/#{Mx[:tc_c]}/,"</b>\n</td>\n</tr>") + <td width="\\1%" valign="top"><b>}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{</b></td><td width="\\1%" valign="top"><b>}). + gsub(/#{Mx[:tc_c]}/,"</b>\n</td>\n</tr>") @@tablehead=0 end @parablock else - @parablock.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + @parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, %{<tr> - <td width="\\1%" valign="top"> - #{@vz.paragraph_table_xml}}) - @parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, - %{ + <td width="\\1%" valign="top">}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{ </td> - <td width="\\1%" valign="top"> - #{@vz.paragraph_table_xml}}) - @parablock.gsub!(/#{Mx[:tc_c]}/,"\n</td>\n</tr>\n") + <td width="\\1%" valign="top">}). + gsub(/#{Mx[:tc_c]}/,"\n</td>\n</tr>\n") end @parablock end end - class Table_xml_exp <Table + class TableXMLexp <Table @@tablehead=0 @@tablefoot=[] def initialize(one) - @one,@parablock,@vz=one,one,SiSU_Env::Get_init.instance.skin + @one,@parablock,@vz=one,one,SiSU_Env::GetInit.instance.skin end def table_head(inf) %{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> @@ -159,7 +154,7 @@ module SiSU_Tables def table m=@parablock[/<!f(.+?)!>/,1] @@tablefoot << m if m - @parablock.gsub!(/<!f.+?!>/,'') + @parablock=@parablock.gsub(/<!f.+?!>/,'') @@tablehead=1 if @parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u if @parablock =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+);\w\d+;\w\d+#{Mx[:gr_c]}/u; @parablock=table_head($1) end @@ -173,26 +168,26 @@ module SiSU_Tables if @@tablehead==1 if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}/u if @parablock =~/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u - @parablock.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1,true)) + @parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1,true)) end if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u - @parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1,true)) + @parablock=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1,true)) end if @parablock =~/#{Mx[:tc_c]}/ - @parablock.gsub!(/#{Mx[:tc_c]}/,table_row_close(true)) + @parablock=@parablock.gsub(/#{Mx[:tc_c]}/,table_row_close(true)) end @@tablehead=0 end @parablock else if @parablock =~/^#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u - @parablock.gsub!(/^#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1)) + @parablock=@parablock.gsub(/^#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1)) end if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u - @parablock.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1)) + @parablock=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1)) end if @parablock =~/#{Mx[:tc_c]}/ - @parablock.gsub!(/#{Mx[:tc_c]}/,table_row_close) + @parablock=@parablock.gsub(/#{Mx[:tc_c]}/,table_row_close) end @parablock end diff --git a/lib/sisu/v2/zap.rb b/lib/sisu/v4/zap.rb index 4e925813..5e338da2 100644 --- a/lib/sisu/v2/zap.rb +++ b/lib/sisu/v4/zap.rb @@ -1,4 +1,4 @@ -# coding: utf-8 +# encoding: utf-8 =begin * Name: SiSU @@ -7,7 +7,8 @@ * Author: Ralph Amissah - * Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved. + * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010, 2011, 2012 Ralph Amissah, All Rights Reserved. * License: GPL 3 or later: @@ -33,9 +34,7 @@ <http://www.fsf.org/licensing/licenses/gpl.html> <http://www.gnu.org/licenses/gpl.html> - <http://www.jus.uio.no/sisu/gpl.fsf/toc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> - <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> * SiSU uses: * Standard SiSU markup syntax, @@ -47,7 +46,7 @@ <http://www.sisudoc.org> * Download: - <http://www.jus.uio.no/sisu/SiSU/download.html> + <http://www.sisudoc.org/sisu/en/SiSU/download.html> * Ralph Amissah <ralph@amissah.com> @@ -57,18 +56,18 @@ =end module SiSU_Zap - require "#{SiSU_lib}/sysenv" # sysenv.rb + require_relative 'sysenv' # sysenv.rb include SiSU_Env pwd=Dir.pwd class Source def initialize(opt) @opt=opt - @env=SiSU_Env::Info_env.new(@opt.fns) + @env=SiSU_Env::InfoEnv.new(@opt.fns) @zap_path="#{@env.path.output}/#{@env.fnb}" - @zap=SiSU_Env::Clean_output.new(@opt) + @zap=SiSU_Env::CleanOutput.new(@opt) end def read - if SiSU_Env::Info_settings.new.permission?('zap') + if SiSU_Env::InfoSettings.new.permission?('zap') tell=SiSU_Screen::Ansi.new(@opt.cmd,"Clean files related to processing #{@opt.cmd} ->","#{@opt.fns} -> #{@zap_path}") @zap.zap.main_output @zap.zap.site_map |