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 | |
| parent | v3: 3.3.3 version & changelog, dates touched (diff) | |
v4: 4.0.0 new branch & version & changelog "opened"
| -rw-r--r-- | CHANGELOG | 34 | ||||
| l--------- | CHANGELOGS/CHANGELOG_v1 | 1 | ||||
| l--------- | CHANGELOGS/CHANGELOG_v2 | 1 | ||||
| l--------- | CHANGELOGS/CHANGELOG_v3 | 1 | ||||
| l--------- | CHANGELOGS/CHANGELOG_v4 | 1 | ||||
| l--------- | CHANGELOG_v1 | 1 | ||||
| l--------- | CHANGELOG_v2 | 1 | ||||
| l--------- | CHANGELOG_v3 | 1 | ||||
| -rw-r--r-- | README | 29 | ||||
| -rw-r--r-- | bin/sisu | 14 | ||||
| -rw-r--r-- | bin/sisu-git | 2 | ||||
| -rw-r--r-- | bin/sisu-po | 2 | ||||
| -rw-r--r-- | bin/sisu-webrick | 2 | ||||
| -rw-r--r-- | bin/sisu3 | 12 | ||||
| -rw-r--r-- | bin/sisu4 (renamed from bin/sisu2) | 16 | ||||
| -rw-r--r-- | bin/sisu_termsheet | 148 | ||||
| -rw-r--r-- | bin/sisu_webrick | 135 | ||||
| -rw-r--r-- | conf/sisu/v4/sisurc.yml (renamed from conf/sisu/v2/sisurc.yml) | 28 | ||||
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v1 | 5 | ||||
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v2 | 25 | ||||
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v3 | 6 | ||||
| -rw-r--r-- | data/doc/sisu/CHANGELOG_v4 | 26 | ||||
| -rw-r--r-- | data/doc/sisu/markup-samples/sisu_manual/_sisu/v4/sisurc.yml (renamed from data/doc/sisu/markup-samples/sisu_manual/_sisu/v2/sisurc.yml) | 28 | ||||
| -rw-r--r-- | data/sisu/v2/conf/convert/modify.rb | 272 | ||||
| -rw-r--r-- | data/sisu/v2/v/version.yml | 5 | ||||
| -rw-r--r-- | data/sisu/v4/conf/cgi-bin/sisu_search_pgsql.cgi (renamed from data/sisu/v2/conf/cgi-bin/sisu_search_pgsql.cgi) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/cgi-bin/sisu_search_sqlite.cgi (renamed from data/sisu/v2/conf/cgi-bin/sisu_search_sqlite.cgi) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/completion/README (renamed from data/sisu/v2/conf/completion/README) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/completion/_sisu (renamed from data/sisu/v2/conf/completion/_sisu) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/convert/kdissert_to_sisu (renamed from data/sisu/v2/conf/convert/kdissert_to_sisu) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/convert/modify.rb | 376 | ||||
| -rw-r--r-- | data/sisu/v4/conf/convert/sisu_convert (renamed from data/sisu/v2/conf/convert/sisu_convert) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/convert/wvHtml.xml (renamed from data/sisu/v2/conf/convert/wvHtml.xml) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/convert/wvSiSU.xml (renamed from data/sisu/v2/conf/convert/wvSiSU.xml) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/README (renamed from data/sisu/v2/conf/editor-syntax-etc/README) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/diakonos/diakonos.conf (renamed from data/sisu/v2/conf/editor-syntax-etc/diakonos/diakonos.conf) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/emacs/README (renamed from data/sisu/v2/conf/editor-syntax-etc/emacs/README) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/emacs/sisu-mode.el (renamed from data/sisu/v2/conf/editor-syntax-etc/emacs/sisu-mode.el) | 12 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/gedit/sisu.lang (renamed from data/sisu/v2/conf/editor-syntax-etc/gedit/sisu.lang) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/kate/sisu.xml (renamed from data/sisu/v2/conf/editor-syntax-etc/kate/sisu.xml) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/nano/nanorc (renamed from data/sisu/v2/conf/editor-syntax-etc/nano/nanorc) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/nedit/sisu_nedit.pats (renamed from data/sisu/v2/conf/editor-syntax-etc/nedit/sisu_nedit.pats) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/8.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/8.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/slate.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/slate.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/filetype.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/filetype.vim) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/ftplugin/sisu.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/ftplugin/sisu.vim) | 9 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu.vim (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/syntax/sisu.vim) | 149 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu_next.vim | 281 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssi.tpl (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssi.tpl) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssm.tpl (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssm.tpl) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/templates/sst.tpl (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/templates/sst.tpl) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/editor-syntax-etc/vim/vim-sisu.yaml (renamed from data/sisu/v2/conf/editor-syntax-etc/vim/vim-sisu.yaml) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu (renamed from data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu_www (renamed from data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu_www) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/conf/ruby/irbrc (renamed from data/sisu/v2/conf/ruby/irbrc) | 0 | ||||
| -rw-r--r-- | data/sisu/v4/v/version.yml | 5 | ||||
| -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 | ||||
| -rw-r--r-- | man/man1/sisu-concordance.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-epub.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-git.1 | 39 | ||||
| -rw-r--r-- | man/man1/sisu-harvest.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-html.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-odf.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-pdf.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-pg.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-po.1 | 42 | ||||
| -rw-r--r-- | man/man1/sisu-sqlite.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-txt.1 | 6 | ||||
| -rw-r--r-- | man/man1/sisu-webrick.1 (renamed from man/man1/sisu_webrick.1) | 0 | ||||
| -rw-r--r-- | man/man1/sisu.1 | 2 | ||||
| l--------- | man/man1/sisu4.1 (renamed from man/man1/sisu2.1) | 0 | ||||
| -rw-r--r-- | man/man1/sisu_termsheet.1 | 66 | 
226 files changed, 33600 insertions, 22925 deletions
@@ -1,26 +1,30 @@ -%% SiSU versions 2 & 3, 2011 +%% SiSU versions 4 & 3 2012  Homepage: <http://www.jus.uio.no/sisu> -* README CHANGELOG CHANGELOG_v1 CHANGELOG_v2 CHANGELOG_v3 +* README CHANGELOG CHANGELOG_v1 CHANGELOG_v2 CHANGELOG_v3 CHANGELOG_v4 -Herein (this package) reside SiSU versions 2 and 3. +Herein (this package) reside SiSU versions 4 and 3. -README CHANGELOG_1 CHANGELOG_v2 CHANGELOG_v3 +Changelogs are to be found in the CHANGELOGS directory: -This tarball contains two versions of SiSU, the stable version 2 and the -under-development version 3. For version 1 look to sisu 2.7 and earlier. +CHANGELOGS/CHANGELOG_v4 +CHANGELOGS/CHANGELOG_v3 +CHANGELOGS/CHANGELOG_v2 +CHANGELOGS/CHANGELOG_v1 -The input for v2 & v3, a SiSU marked-up document is the same. +you might also look at the README file -As version 2 is the current implementation the source tarball is named after -it, and the command sisu by default runs version 2. To run version 3 add the -flag --v3, i.e. sisu --v3 [filename], or run sisu3 +* v1 sisu pretty mature in operation and syntax +* v2 introduces new processing middle layer (document abstraction); +   markup same except for minor changes to document headers; +   epub output introduced +* v3 introduces alternative (configurable) output structures +* v4 retires what were referred to as sisu skins -Compatibility Notes - -Versions 3 is experimental and attempts to introduce output more compatible -with mobile devices and other non-web use and more internationalisation -possibilities. Please see CHANGELOG_v3 +This tarball contains two versions of SiSU, version 4 and version 3 which it +replaced +The input for sisu v2, v3 & v4, a SiSU marked-up document is unchanged apart +from document headers.  * homepage at: <http://www.jus.uio.no/sisu>  * <http://www.jus.uio.no/sisu/SiSU/download> diff --git a/CHANGELOGS/CHANGELOG_v1 b/CHANGELOGS/CHANGELOG_v1 new file mode 120000 index 00000000..dce668b5 --- /dev/null +++ b/CHANGELOGS/CHANGELOG_v1 @@ -0,0 +1 @@ +../data/doc/sisu/CHANGELOG_v1
\ No newline at end of file diff --git a/CHANGELOGS/CHANGELOG_v2 b/CHANGELOGS/CHANGELOG_v2 new file mode 120000 index 00000000..e87e244c --- /dev/null +++ b/CHANGELOGS/CHANGELOG_v2 @@ -0,0 +1 @@ +../data/doc/sisu/CHANGELOG_v2
\ No newline at end of file diff --git a/CHANGELOGS/CHANGELOG_v3 b/CHANGELOGS/CHANGELOG_v3 new file mode 120000 index 00000000..5fc15e3e --- /dev/null +++ b/CHANGELOGS/CHANGELOG_v3 @@ -0,0 +1 @@ +../data/doc/sisu/CHANGELOG_v3
\ No newline at end of file diff --git a/CHANGELOGS/CHANGELOG_v4 b/CHANGELOGS/CHANGELOG_v4 new file mode 120000 index 00000000..a587bc66 --- /dev/null +++ b/CHANGELOGS/CHANGELOG_v4 @@ -0,0 +1 @@ +../data/doc/sisu/CHANGELOG_v4
\ No newline at end of file diff --git a/CHANGELOG_v1 b/CHANGELOG_v1 deleted file mode 120000 index feac476b..00000000 --- a/CHANGELOG_v1 +++ /dev/null @@ -1 +0,0 @@ -data/doc/sisu/CHANGELOG_v1
\ No newline at end of file diff --git a/CHANGELOG_v2 b/CHANGELOG_v2 deleted file mode 120000 index 48716b0c..00000000 --- a/CHANGELOG_v2 +++ /dev/null @@ -1 +0,0 @@ -data/doc/sisu/CHANGELOG_v2
\ No newline at end of file diff --git a/CHANGELOG_v3 b/CHANGELOG_v3 deleted file mode 120000 index e29fe00f..00000000 --- a/CHANGELOG_v3 +++ /dev/null @@ -1 +0,0 @@ -data/doc/sisu/CHANGELOG_v3
\ No newline at end of file @@ -1,8 +1,12 @@ -%% SiSU versions 2 & 3, 2011 +%% SiSU versions 4 & 3, 2011  Homepage: <http://www.jus.uio.no/sisu> -* README CHANGELOG CHANGELOG_v1 CHANGELOG_v2 CHANGELOG_v3 +* README +* CHANGELOGS/CHANGELOG_v4 +* CHANGELOGS/CHANGELOG_v3 +* CHANGELOGS/CHANGELOG_v2 +* CHANGELOGS/CHANGELOG_v1 -Herein (this package) reside SiSU versions 1 and 2. +Herein (this package) reside SiSU versions 4 and 3.  %% Description  --------------- @@ -515,19 +519,14 @@ features within the ruby language suited to what the application does.  Development is curently on version 2, version 1 is likely to remain for some  time as a reference implementation. -%% v1, v2 Compatibility Notes ---------------- - -Versions 1 and 2 are not quite compatible, version 1 and version 2 will run -against each other's documents but document metadata, and processing -instructions may be lost. - -On the input side, version 1 and 2 headers are different, version 2 headers -have been tidied, see document markup samples provided +%% Versions -On the output side, the sql databases produced if search is to be implemented -are not the same and a database must be generated for each version, most other -differences should be relatively cosmetic. +* v1 sisu pretty mature in operation and syntax +* v2 introduces new processing middle layer (document abstraction); +   markup same except for minor changes to document headers; +   epub output introduced +* v3 introduces alternative (configurable) output structures +* v4 retires what were referred to as sisu skins  %% License  --------------- @@ -45,24 +45,22 @@ WOK    $KCODE='u' if RUBY_VERSION < '1.9'    argv=$*    SiSU_version_dir=case argv.inspect -  when /"(?:--v2)"/ -    check_sisu_legacy_ruby_version? -    'v2'    when /"(?:--v3)"/      check_sisu_stable_ruby_version?      'v3' +  when /"(?:--v4)"/ +    check_sisu_stable_ruby_version? +    'v4'    when /"(?:--dev)"/      check_sisu_dev_ruby_version? -    'v3' +    'v4'    else      check_sisu_stable_ruby_version? -    'v3' +    'v4'    end    SiSU_lib="sisu/#{SiSU_version_dir}"    require "#{SiSU_lib}/hub" -  unless SiSU_version_dir == 'v2' -    SiSU::HubMaster.new(argv) -  end +  SiSU::HubMaster.new(argv)  rescue    STDERR.puts 'ERROR'    STDERR.puts $! diff --git a/bin/sisu-git b/bin/sisu-git deleted file mode 100644 index d38b10c5..00000000 --- a/bin/sisu-git +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -sisu -g ${@} diff --git a/bin/sisu-po b/bin/sisu-po deleted file mode 100644 index 9d0d1b95..00000000 --- a/bin/sisu-po +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -sisu --v3 --po4a ${@} diff --git a/bin/sisu-webrick b/bin/sisu-webrick new file mode 100644 index 00000000..75d97238 --- /dev/null +++ b/bin/sisu-webrick @@ -0,0 +1,2 @@ +#!/bin/sh +sisu -W ${@} @@ -45,24 +45,22 @@ WOK    $KCODE='u' if RUBY_VERSION < '1.9'    argv=$*    SiSU_version_dir=case argv.inspect -  when /"(?:--v2)"/ -    check_sisu_legacy_ruby_version? -    'v2'    when /"(?:--v3)"/      check_sisu_stable_ruby_version?      'v3' +  when /"(?:--v4)"/ +    check_sisu_stable_ruby_version? +    'v4'    when /"(?:--dev)"/      check_sisu_dev_ruby_version? -    'v3' +    'v4'    else      check_sisu_stable_ruby_version?      'v3'    end    SiSU_lib="sisu/#{SiSU_version_dir}"    require "#{SiSU_lib}/hub" -  unless SiSU_version_dir == 'v2' -    SiSU::HubMaster.new(argv) -  end +  SiSU::HubMaster.new(argv)  rescue    STDERR.puts 'ERROR'    STDERR.puts $! @@ -45,24 +45,22 @@ WOK    $KCODE='u' if RUBY_VERSION < '1.9'    argv=$*    SiSU_version_dir=case argv.inspect -  when /"(?:--v2)"/ -    check_sisu_legacy_ruby_version? -    'v2'    when /"(?:--v3)"/      check_sisu_stable_ruby_version?      'v3' +  when /"(?:--v4)"/ +    check_sisu_stable_ruby_version? +    'v4'    when /"(?:--dev)"/      check_sisu_dev_ruby_version? -    'v3' +    'v4'    else -    check_sisu_legacy_ruby_version? -    'v2' +    check_sisu_stable_ruby_version? +    'v4'    end    SiSU_lib="sisu/#{SiSU_version_dir}"    require "#{SiSU_lib}/hub" -  unless SiSU_version_dir == 'v2' -    SiSU::HubMaster.new(argv) -  end +  SiSU::HubMaster.new(argv)  rescue    STDERR.puts 'ERROR'    STDERR.puts $! diff --git a/bin/sisu_termsheet b/bin/sisu_termsheet deleted file mode 100644 index 73aa933e..00000000 --- a/bin/sisu_termsheet +++ /dev/null @@ -1,148 +0,0 @@ -#!/usr/bin/env ruby -# encoding: utf-8 -#SiSU: copyright (C) 1997 - 2012 Ralph Amissah; License GPL, see appended program information -begin -  def ruby_version_ok?(base_version) -    @v ||=RUBY_VERSION.scan(/\d+/) -    vb=base_version.scan(/\d+/) -    if @v[0].to_i <  vb[0].to_i \ -    or @v[0].to_i == vb[0].to_i \ -    && @v[1].to_i <  vb[1].to_i \ -    or @v[0].to_i == vb[0].to_i \ -    && @v[1].to_i == vb[1].to_i \ -    && @v[1].to_i <  vb[2].to_i -      raise "Please, use Ruby#{vb} or later, current Ruby #{RUBY_VERSION}" -    else check_incompatible_ruby_build? -    end -  end -  def check_incompatible_ruby_build? -    require 'rbconfig' -    e=Config::CONFIG -    if RUBY_VERSION == '1.9.2' \ -    && e['PATCHLEVEL'].to_i < 180 -      raise <<WOK -There are known issues with early versions of ruby1.9.2. -Please, use Ruby 1.9.2p180 or later, -current version #{e['RUBY_PROGRAM_VERSION']}p#{e['PATCHLEVEL']} -#{%x{ruby -v}.strip.to_s} - -WOK -    end -  end -  def check_sisu_legacy_ruby_version? -    rbv_sisu_legacy='1.9.2' #'1.8.7' -    ruby_version_ok?(rbv_sisu_legacy) -  end -  def check_sisu_stable_ruby_version? -    rbv_sisu_stable='1.9.2' -    ruby_version_ok?(rbv_sisu_stable) -  end -  def check_sisu_dev_ruby_version? -    rbv_sisu_dev='1.9.2' -    ruby_version_ok?(rbv_sisu_dev) -  end -  $VERBOSE=nil -  argv=$* -  SiSU_version_dir=case argv.inspect -  when /--v2/ -    check_sisu_legacy_ruby_version? -    'v2' -  when /--v3/ -    check_sisu_stable_ruby_version? -    'v3' -  when /--dev/ -    check_sisu_dev_ruby_version? -    'v3' #'v3dv' -  else -    check_sisu_stable_ruby_version? -    'v3' -  end -  SiSU_lib="sisu/#{SiSU_version_dir}" -  require "#{SiSU_lib}/termsheet" -rescue -  STDERR.puts 'ERROR' -  STDERR.puts $! -  STDERR.puts $@ -  require 'rbconfig' -  e=Config::CONFIG -  puts %{ -                   #{%x{ruby -v}.strip.to_s} -                   #{RUBY_VERSION} -    ruby version:  #{e['RUBY_PROGRAM_VERSION']}p#{e['PATCHLEVEL']} -    ruby named:    #{e['ruby_version']} -    rubylib:       #{e['rubylibdir']} -    rubylib local: #{e['sitelibdir']} -  } -  system(%{echo " -    system RUBYPATH: ${RUBYPATH} -    system RUBYLIB: ${RUBYLIB} -  "}) -end -__END__ - - * 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, specialised -    pre-processing wrapper - -    sisu -t x_bank.and.* -    e.g. sisu -t x_bank.and.*.termsheet.rb -    e.g. sisu_termsheet.rb -t x_bank.and.c*.termsheet.rb -    program calls upon termsheet file with extension termsheet.rb -    termsheet.rb calls upon relevant standard form files (to be used) with extension .sForm.rb -    there is also a standard_terms.rb file - with terms/details that are  constant -    the file produced is named after the termsheet.rb with that extension replaced with .er30 -    from there scribbler.rb is called upon its usual metaVerse html and pdf  creation -    ! :-) -    to test run -    termsheet.rb -f dev.export.import.trade.facility.termsheet.rb -    the term sheet calls the standard form or template that is to be run against it. diff --git a/bin/sisu_webrick b/bin/sisu_webrick deleted file mode 100644 index c14ec31e..00000000 --- a/bin/sisu_webrick +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env ruby -# encoding: utf-8 -#SiSU: copyright (C) 1997 - 2012 Ralph Amissah; License GPL, see appended program information -begin -  def ruby_version_ok?(base_version) -    @v ||=RUBY_VERSION.scan(/\d+/) -    vb=base_version.scan(/\d+/) -    if @v[0].to_i <  vb[0].to_i \ -    or @v[0].to_i == vb[0].to_i \ -    && @v[1].to_i <  vb[1].to_i \ -    or @v[0].to_i == vb[0].to_i \ -    && @v[1].to_i == vb[1].to_i \ -    && @v[1].to_i <  vb[2].to_i -      raise "Please, use Ruby#{vb} or later, current Ruby #{RUBY_VERSION}" -    else check_incompatible_ruby_build? -    end -  end -  def check_incompatible_ruby_build? -    require 'rbconfig' -    e=Config::CONFIG -    if RUBY_VERSION == '1.9.2' \ -    && e['PATCHLEVEL'].to_i < 180 -      raise <<WOK -There are known issues with early versions of ruby1.9.2. -Please, use Ruby 1.9.2p180 or later, -current version #{e['RUBY_PROGRAM_VERSION']}p#{e['PATCHLEVEL']} -#{%x{ruby -v}.strip.to_s} - -WOK -    end -  end -  def check_sisu_legacy_ruby_version? -    rbv_sisu_legacy='1.9.2' #'1.8.7' -    ruby_version_ok?(rbv_sisu_legacy) -  end -  def check_sisu_stable_ruby_version? -    rbv_sisu_stable='1.9.2' -    ruby_version_ok?(rbv_sisu_stable) -  end -  def check_sisu_dev_ruby_version? -    rbv_sisu_dev='1.9.2' -    ruby_version_ok?(rbv_sisu_dev) -  end -  $VERBOSE=nil -  argv=$* -  SiSU_version_dir=case argv.inspect -  when /--v2/ -    check_sisu_legacy_ruby_version? -    'v2' -  when /--v3/ -    check_sisu_stable_ruby_version? -    'v3' -  when /--dev/ -    check_sisu_dev_ruby_version? -    'v3' #'v3dv' -  else -    check_sisu_stable_ruby_version? -    'v3' -  end -  SiSU_lib="sisu/#{SiSU_version_dir}" -  require "#{SiSU_lib}/webrick" -rescue -  STDERR.puts 'ERROR' -  STDERR.puts $! -  STDERR.puts $@ -  require 'rbconfig' -  e=Config::CONFIG -  puts %{ -                   #{%x{ruby -v}.strip.to_s} -                   #{RUBY_VERSION} -    ruby version:  #{e['RUBY_PROGRAM_VERSION']}p#{e['PATCHLEVEL']} -    ruby named:    #{e['ruby_version']} -    rubylib:       #{e['rubylibdir']} -    rubylib local: #{e['sitelibdir']} -  } -  system(%{echo " -    system RUBYPATH: ${RUBYPATH} -    system RUBYLIB: ${RUBYLIB} -  "}) -end -__END__ - - * 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 diff --git a/conf/sisu/v2/sisurc.yml b/conf/sisu/v4/sisurc.yml index 86545f32..de2288f9 100644 --- a/conf/sisu/v2/sisurc.yml +++ b/conf/sisu/v4/sisurc.yml @@ -49,24 +49,24 @@ show_output_on: 'filesystem_url'  #% flag - set (non-default) processing flag shortcuts -1, -2 etc. (here adding colour and verbosity as default)  flag:    color:        true                        # making colour default -c is toggle, and will now toggle colour off -  default:      '-NhewpotbxXyYv'            # -m run by default; includes verbose +  default:      '-NhewpotbxXyYdv'           # -m run by default; includes verbose    i:            '-Nhewpoty'                 # -m run by default -  ii:           '-NhewpotbxX'               # -m run by default -  iii:          '-NhewpotbxXY'              # -m run by default -  iv:           '-NhewpoabxXYD --update'    # -m run by default +  ii:           '-NhewpotbxXd'              # -m run by default +  iii:          '-NhewpotbxXYd'             # -m run by default +  iv:           '-NhewpotbxXiIYd'           # -m run by default    v:            '-NhewpotbxXYDv --update'   # -m run by default; includes verbose -#% papersize, (LaTeX/pdf) available values: A4, US_letter, book_b5, book_a5, US_legal +#% papersize, (LaTeX/pdf) available values: A4, US_letter, book_b5, book_a5, US_legal  default:    papersize:    'A4,letter' -  #texpdf_font:  'Liberation Serif' # 'Liberation Sans' 'Liberation Serif' +  #language:      'en' +  #texpdf_font:       'Liberation Sans' # 'Liberation Sans' 'Liberation Serif' +  #texpdf_font_mono:  'Liberation Mono' #'Inconsolata'    #text_wrap:    78    #emphasis:     'bold' #make *{emphasis}* 'bold', 'italics' or 'underscore', default if not configured is 'bold'    #digest:       'sha' #sha is sha256, default is md5    #multilingual:  false    #language_file: 2 -  #language:     'English' -  #% markup, make *{emphasis}* 'bold' or 'italics', default if not configured is 'bold'  #% settings used by ssh scp @@ -95,9 +95,19 @@ default:  #  sqlite:  #    path:       ~ # './sisu_sqlite.db'  #    port:       "**" +  #html:  #  quick_ref:         true #default false  #  seg_title_banner:  true #default false +#odt: +#  ocn:               true +#plaintext: +#  ocn:               true + +#% output_dir_structure_by: language (language_and_filetype); filetype; or filename (original v1 & v2) +#output_dir_structure_by: filename +#output_dir_structure_by: filetype +output_dir_structure_by: language  permission_set:    zap:          false @@ -132,5 +142,5 @@ program_set:  #    action:          http://search.sisudoc.org  #    db:              sisu  #    title:           sample search form -  #promo:               sisu_search_libre, sisu_icon, sisu, open_society, fsf, ruby +#omit: minitoc diff --git a/data/doc/sisu/CHANGELOG_v1 b/data/doc/sisu/CHANGELOG_v1 index 4af76649..611d5c97 100644 --- a/data/doc/sisu/CHANGELOG_v1 +++ b/data/doc/sisu/CHANGELOG_v1 @@ -1,4 +1,7 @@  %% SiSU version 1 +v1 branch is legacy: v2 branch supersedes & replaces it +v1 sisu pretty mature in operation and syntax +v1 branch removed from sisu 3.0 available in sisu =< 2.7  * homepage at: <http://www.jus.uio.no/sisu>  * <http://www.jus.uio.no/sisu/SiSU/download> @@ -12,8 +15,6 @@ Reverse Chronological:  %% Legacy Branch, Reference -%% v1 branch removed from sisu 3.0 available in < sisu 2.8 (2.7 and below) -  %% 1.0.4.orig.tar.gz (2010-02-17:07/3) [2010-07-07]  http://www.jus.uio.no/sisu/pkg/src/sisu_1.0.3.orig.tar.gz    sisu_1.0.3.orig.tar.gz diff --git a/data/doc/sisu/CHANGELOG_v2 b/data/doc/sisu/CHANGELOG_v2 index ba0af469..1404f6d2 100644 --- a/data/doc/sisu/CHANGELOG_v2 +++ b/data/doc/sisu/CHANGELOG_v2 @@ -1,4 +1,10 @@  %% SiSU version 2 +v2 branch is legacy: v3 branch supersedes & replaces it +v2 branch supersedes & replaces v1 branch +v2 introduces new processing middle layer (document abstraction); +   markup same except for minor changes to document headers; +   epub output introduced +v2 branch removed from sisu 4.0; it is available in sisu =< 3.3.2  * homepage at: <http://www.jus.uio.no/sisu>  * <http://www.jus.uio.no/sisu/SiSU/download> @@ -8,9 +14,24 @@  * data/doc/sisu/sisu_markup_samples/sisu_manual/sisu_download.ssi  * CHANGELOG CHANGELOG_v2 CHANGELOG_v3 README data/doc/sisu/ -Reverse Chronological: +%% Legacy Branch, Reference -%% STABLE Branch +* new middle layer (document abstraction) that uses ruby objects to +  represent data (instead of strings) + +* downstream libraries updated to use v2 middle layer + +* sisu markup, changes to headers (metadata), input otherwise unchanged + +* output much the same as for version 1 with some tweaks +  * search, sql table structure changed for version 2, incompatible +  * internal linking of documents is once again supported +  * LaTeX/pdf book indexes link within the pdf text rather than to HTML +    version of document + +* EPUB output introduced using -e flag + +%% Reverse Chronological:  %% 2.9.12 (2012-02-14:07/2) [see 3.1.14.orig.tar.xz]  http://git.sisudoc.org/?p=code/sisu.git;a=log;h=refs/tags/sisu_3.1.14 diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3 index 261c1042..a42f334b 100644 --- a/data/doc/sisu/CHANGELOG_v3 +++ b/data/doc/sisu/CHANGELOG_v3 @@ -1,4 +1,8 @@  %% SiSU version 3 +v3 branch is legacy: v4 branch supersedes & replaces it +v3 branch supersedes & replaces v2 branch +v3 introduces alternative (configurable) output structures +v1 branch is removed; it is available in sisu =< 2.7  * homepage at: <http://www.jus.uio.no/sisu>  * <http://www.jus.uio.no/sisu/SiSU/download> @@ -8,6 +12,8 @@  * data/doc/sisu/sisu_markup_samples/sisu_manual/sisu_download.ssi  * CHANGELOG CHANGELOG_v2 CHANGELOG_v3 README data/doc/sisu/ +%% Legacy Branch, Reference +    Version 3 introduced output directory structures nad filenames more    compatible with mobile devices and other non-web use and more    internationalisation possibilities. diff --git a/data/doc/sisu/CHANGELOG_v4 b/data/doc/sisu/CHANGELOG_v4 new file mode 100644 index 00000000..c46b5484 --- /dev/null +++ b/data/doc/sisu/CHANGELOG_v4 @@ -0,0 +1,26 @@ +%% SiSU version 4 +v4 branch supersedes & replaces v3 branch +   initial goals: +   * remove/retire "skins"; replace some functionality with headers and/or yml +     file (consider header like syntax for document and site appearance info) +   * bin/sisu $0 make possible to run sisu command on/within project dir tree +   * bin/sisu $*, hub, make possible to specify dir path for markup files +v2 branch is removed; it is available in sisu =< 3.3.2 + +* homepage at: <http://www.jus.uio.no/sisu> +* <http://www.jus.uio.no/sisu/SiSU/download> +* <http://www.jus.uio.no/sisu/SiSU/changelog> +* <http://sisudoc.org/sisu/sisu_manual> +* data/doc/sisu/sisu_markup_samples/sisu_manual/sisu_manual.ssm +* data/doc/sisu/sisu_markup_samples/sisu_manual/sisu_download.ssi +* CHANGELOG CHANGELOG_v2 CHANGELOG_v3 README data/doc/sisu/ + +%% Reverse Chronological: + +%% 4.0.0.orig.tar.xz (2012-10-03:40/3) +http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/sisu_4.0.0 +http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=shortlog;h=refs/tags/debian/sisu_4.0.0-1 +http://www.jus.uio.no/sisu/pkg/src/sisu_4.0.0.orig.tar.xz +  sisu_4.0.0.orig.tar.xz +  sisu_4.0.0-1.dsc +  sisu_4.0.0-1.debian.tar.gz diff --git a/data/doc/sisu/markup-samples/sisu_manual/_sisu/v2/sisurc.yml b/data/doc/sisu/markup-samples/sisu_manual/_sisu/v4/sisurc.yml index 433c6967..6d11656d 100644 --- a/data/doc/sisu/markup-samples/sisu_manual/_sisu/v2/sisurc.yml +++ b/data/doc/sisu/markup-samples/sisu_manual/_sisu/v4/sisurc.yml @@ -49,12 +49,12 @@ show_output_on: 'filesystem_url'  #% flag - set (non-default) processing flag shortcuts -1, -2 etc. (here adding colour and verbosity as default)  flag:    color:        true                        # making colour default -c is toggle, and will now toggle colour off -  default:      '-NhewpotbxXyYv'            # -m run by default; includes verbose -  i:            '-Nhewpoty'                 # -m run by default -  ii:           '-NhewpotbxX'               # -m run by default -  iii:          '-NhewpotbxXY'              # -m run by default -  iv:           '-NhewpotbxXiIY'            # -m run by default -  v:            '-NhewpotbxXYDv --update'   # -m run by default; includes verbose +#  default:      '-NhewpotbxXyYv'            # -m run by default; includes verbose +#  i:            '-Nhewpoty'                 # -m run by default +#  ii:           '-NhewpotbxX'               # -m run by default +#  iii:          '-NhewpotbxXY'              # -m run by default +#  iv:           '-NhewpotbxXiIY'            # -m run by default +#  v:            '-NhewpotbxXYDv --update'   # -m run by default; includes verbose  #% papersize, (LaTeX/pdf) current values A4, US_letter, book_b5, book_a5, US_legal, easily extensible  default: @@ -83,11 +83,9 @@ default:  db:    postgresql:      port:       '5432' # '5432' -   #user:       'tst' # '[provide username]' -   #host:       'sisudoc.org' -   #user:       'ralph' -   ##port:       '5433' -   #port:       '5432' +   #host:       # '[if not localhost, provide host tcp/ip address or domain name]'' +   #user:       # '[(if different from user) provide username]' +   #password:   # '[password if required]'    sqlite:      user:       'ralph'      path:       ~ # './sisu_sqlite.db' @@ -95,13 +93,18 @@ db:      multi:      true  #    single:     true +#% output_dir_structure_by: language (language_and_filetype); filetype; or filename (original v1 & v2) +#output_dir_structure_by: filename +#output_dir_structure_by: filetype +output_dir_structure_by: language +  permission_set:    zap:               true    css_modify:        true    remote_base_site:  true  program_set: -  rmagick:       false +  rmagick:           true  #  wc:           true  #  editor:       true  #  postgresql:   true @@ -128,5 +131,4 @@ program_set:  #    action:          http://search.sisudoc.org  #    db:              sisu  #    title:           sample search form -  #promo:               sisu_search_libre, sisu_icon, sisu, open_society, fsf, ruby diff --git a/data/sisu/v2/conf/convert/modify.rb b/data/sisu/v2/conf/convert/modify.rb deleted file mode 100644 index c3fe47c9..00000000 --- a/data/sisu/v2/conf/convert/modify.rb +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/bin/env ruby -# encoding: utf-8 -=begin - * Name: modify.rb - * Author: Ralph Amissah -   * http://www.jus.uio.no/sisu -   * http://www.jus.uio.no/sisu/SiSU/download - * Description: A conversion script for canned substitutions, -     a fairly generic simple tool that can be used to store other canned conversions, -     used here for altering SiSU markup - * Copyright (C) 2004, 2006 Ralph Amissah - * Packaged with: SiSU information Structuring Universe - -     Structured information, Serialized Units - * SiSU Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Ralph Amissah - - * License: GPL 3 or later - -  Summary of GPL 3 - -  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, write to the Free Software Foundation, Inc., -  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -  If you have Internet connection, the latest version of the GPL should be -  available at these locations: -    http://www.fsf.org/licenses/gpl.html -    http://www.gnu.org/copyleft/gpl.html -    http://www.jus.uio.no/sisu/gpl3.fsf - -  (C) Ralph Amissah 1997, current 2009. -      All Rights Reserved. - - * Ralph Amissah: ralph@amissah.com -                  ralph.amissah@gmail.com - -=end -module SiSU_Modify -  class Convert_markup -    def initialize(cf,files) -      @cf,@files=cf,files -      @description="This is a script that contains canned text conversions for reuse" -    end -    def current_match_and_replace #Disable, edit manually -      clean_non_regular_characters -      #convert_pre_37_to_38_experimental -    end -    def message(text) -      response='' -      while response !~/yes/ -        print %{ -    #{text} -    to continue type "yes" [to exit type "no" or "quit"]: } -        response=File.new('/dev/tty').gets.strip -        exit if response =~/^(?:quit|no)$/ -      end -    end -    def help -    print <<WOK - -#@description - -modify.rb --default [filename/wildcard] -  performs the current default conversion that is set -  [handle with care, (may be disabled)] - -modify.rb --to38 [filename/wildcard] -  converts pre 0.37 sisu markup to 0.38 experimental - -modify.rb --to37 [filename/wildcard] -  converts pre 0.37 sisu markup to 0.38 experimental - -note converting twice in a single direction will result -in markup inconsistency - -An alternative script has been introduced, -try 'sisu --convert' - -modify.rb --default -  performs the current default conversion that is set -  on the files matched in default the settings -  [handle with care, (may be disabled)] - -WOK -      exit -    end -    #%% substitutions to be made -    def clean_non_regular_characters -      #/[^ a-zA-Z0-9,.!?;:/={}()%@#~\[\]"'´&$_+^-] -      #/[^ a-zA-Z0-9,.!?;:/={}()%@#~\[\]"'´&$_+^•’‘`“”–ffifffflfifl-] -      #message(%w{[^ a-zA-Z0-9,.!?;:/={}()%@#~\[\]"'´&$_+^-]}) -      message(%q{clean non regular characters}) -      [ -        [/’/,                     "'"], -        [/‘/,                     "'"], -        [/´/,                     "'"], -        [/`/,                     "'"], -        [/[“”]/,                  '"'], -        [/–/,                     '-'], -        [/ff/,                     'ff'], -        [/ffi/,                     'ffi'], -        [/ffl/,                     'ffl'], -        [/fi/,                     'fi'], -        [/fl/,                     'fl'], -        [/^•/,                    '_* '], -        [/•/,                     '*'] -      ] -    end -    def convert_pre_37_to_38_experimental -      message('convert sisu markup from 0.37 to 0.38 experimental (rad)') -      [ -        [/^0~(\S+?)([+-])\s+/,    "@\\1:\\2 "], -        [/^0~(\S+)\s+/,           "@\\1: "], -        [/^@toc:\s+/,             "@structure: "], -        [/^1~/,                   ':A~'], -        [/^2~/,                   ':B~'], -        [/^3~/,                   ':C~'], -        [/^4~/,                   '1~'], -        [/^5~/,                   '2~'], -        [/^6~/,                   '3~'] -      ] -    end -    def convert_38_experimental_to_37 -      message('convert sisu markup from 0.38 experimental (rad) to 0.37') -      [ -        [/^@(\S+?):([+-])\s+/,    "0~\\1\\2 "], -        [/^@(\S+?):\s+/,          "0~\\1 "], -        [/^0~structure\s+/,       "0~toc "], -        [/^1~/,                   '4~'], -        [/^2~/,                   '5~'], -        [/^3~/,                   '6~'], -        [/^:?A~/,                 '1~'], -        [/^:?B~/,                 '2~'], -        [/^:?C~/,                 '3~'] -      ] -    end -    def markup_version?(i) -      file=File.open(i,'r') -      cont=file.readlines -      file.close -      markup_version=nil -      cont.each do |y| -        if y =~/^:?A~/ -          markup_version='0.38' -          break -        end -        if y =~/^1~/ -          markup_version='0.37' -          break -        end -        #if y =~/^1{~/ -        #  markup_version='0.16' -        #  break -        #end -        markup_version='0.37' -      end -      markup_version -    end -    def conversion -      #%% do it                                   --------------------------> -      if @files and @files.length > 0 -        p @files -        mr=nil -        #%% changes to make m match, r replace      --------------------------> -        if @cf =~/--help/; help -        else -          message("WARNING, proceed at your own risk,\npermanent changes requested for the above named files\n  best that you check (manually) what this file is set to do\n  conversions set are at the top of the file") -          mr=case @cf -          when /--convert|default/;     current_match_and_replace -          when /--(?:(?:37)?to38|rad)/; convert_pre_37_to_38_experimental -          when /--(?:(?:38)?to37)/;     convert_38_experimental_to_37 -          else help -          end -        end -        match_and_replace=mr -        #start_processing =/not used in this example/i -        end_processing =/END\s+OF\s+FILE/ -        @files.each do |i| -          @new,@matched,@flag_start,@flag_end,@empty1,@empty2=true,false,false,false,false,false -          o="#{i}.bk" #o is for old -          file=File.open(i,'r') -          cont=file.readlines -          file.close -          cont.each do |y| -          #p y -          #p y if y =~/^[1-6]~/ -            match_and_replace.each do |m,r| -              if y =~m -                if @new -                  @new=false -                  File.unlink(o) if File.exists?(o) -                  #system("lv #{i} > #{o}") -                  File.rename(i,o) -                  File.unlink(i) if File.exists?(i) -                  @file=File.new(i,'w') -                  @matched=true -                  break -                end -              end -            end -          end -          if @matched -            puts "match in #{i}" -            @flag_start=true -            cont.each do |y| -              if y =~end_processing; @flag_end=true -              end -              if @flag_start and not @flag_end -                match_and_replace.each do |m,r| -                  if y =~m -                    p m.to_s + ' -> ' + r -                    puts "in:  #{y}" -                    y.gsub!(m,r) if m and r -                    puts "out: #{y}" -                  end -                end -              end -              #if y =~start_processing: @flag_start=true -              #end -              #if y =~m1 -              #end -              if y=~/^\s*$/; @empty1=true -              else           @empty1=false -              end -              @file.puts y unless (@empty1==true and @empty2==true) -              if y=~/^\s*$/; @empty2=true -              else           @empty2=false -              end -              #@file << y + "\n" -            end -            @file.close -          else puts "NO match in #{f}" -          end -        end -      else puts "this routine makes permanent changes to the contents of the files matched, as instructed within [no matches]" -      end -    end -  end -end -#%% files to match for this conversion set  -------------------------> -f=$* -p $* -cf=f[0].to_s -f.shift -match_and_replace=Array.new -#unless cf and cf =~/--/ -#  puts <<WOK -# -##@description -# -#usage: -#  modify.rb --convert [filename/wildcard] -#for help -#  modify.rb --help -#WOK -#  exit -#end -unless f.length > 0; f=Dir.glob("[a-z]*.ss?")  #restricted to sisu type files, it need not be -end -#f=Dir.glob("{bin,conf,data,lib}/**/*.rb")     #sisu development -#f=Dir.glob("[^_]/**/*")                       #all files subdirectories beneath pwd except those starting with _ -SiSU_Modify::Convert_markup.new(cf,f).conversion -__END__ diff --git a/data/sisu/v2/v/version.yml b/data/sisu/v2/v/version.yml deleted file mode 100644 index 663c9bd2..00000000 --- a/data/sisu/v2/v/version.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -:version: 2.9.12 -:date_stamp: 2012w07/2 -:date: "2012-02-14" -:project: SiSU diff --git a/data/sisu/v2/conf/cgi-bin/sisu_search_pgsql.cgi b/data/sisu/v4/conf/cgi-bin/sisu_search_pgsql.cgi index c196c756..c196c756 100644 --- a/data/sisu/v2/conf/cgi-bin/sisu_search_pgsql.cgi +++ b/data/sisu/v4/conf/cgi-bin/sisu_search_pgsql.cgi diff --git a/data/sisu/v2/conf/cgi-bin/sisu_search_sqlite.cgi b/data/sisu/v4/conf/cgi-bin/sisu_search_sqlite.cgi index 34bb3748..34bb3748 100644 --- a/data/sisu/v2/conf/cgi-bin/sisu_search_sqlite.cgi +++ b/data/sisu/v4/conf/cgi-bin/sisu_search_sqlite.cgi diff --git a/data/sisu/v2/conf/completion/README b/data/sisu/v4/conf/completion/README index d723a140..d723a140 100644 --- a/data/sisu/v2/conf/completion/README +++ b/data/sisu/v4/conf/completion/README diff --git a/data/sisu/v2/conf/completion/_sisu b/data/sisu/v4/conf/completion/_sisu index 076795cb..076795cb 100644 --- a/data/sisu/v2/conf/completion/_sisu +++ b/data/sisu/v4/conf/completion/_sisu diff --git a/data/sisu/v2/conf/convert/kdissert_to_sisu b/data/sisu/v4/conf/convert/kdissert_to_sisu index 35921c3e..35921c3e 100644 --- a/data/sisu/v2/conf/convert/kdissert_to_sisu +++ b/data/sisu/v4/conf/convert/kdissert_to_sisu diff --git a/data/sisu/v4/conf/convert/modify.rb b/data/sisu/v4/conf/convert/modify.rb new file mode 100644 index 00000000..8a4b9074 --- /dev/null +++ b/data/sisu/v4/conf/convert/modify.rb @@ -0,0 +1,376 @@ +#!/usr/bin/env ruby +# encoding: utf-8 +=begin + + * Name: modify.rb + + * Description: A conversion script for canned substitutions, +   a fairly generic simple tool that can be used to store other canned conversions, +   (used here for altering SiSU markup or the SiSU program) + + * Author: Ralph Amissah + + * Copyright: (C) 1997 - 2012, Ralph Amissah, All Rights Reserved. + + * License: GPL 3 or later: + + * Packaged with: SiSU a framework for document structuring, publishing & 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> + + * 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> + +=end +module SiSU_Modify +  class Operations +    def initialize(cf,files) +      @cf,@files=cf,files +      @description="This is a script that contains canned text conversions for reuse" +      pwd=Dir.pwd +      @mod_inst='modify_instructions.rb' +      @modify_instructions_script="#{pwd}/#{@mod_inst}" +      if FileTest.file?(@modify_instructions_script) ==true +        puts <<-WOK +  autoload script: "#{@modify_instructions_script}" +  used by "ruby  #{__FILE__} --convert" if +  "Extracted.new.modify.modules_and_classes" is used +  (see "matches_and_replaces") +  EDIT this file manually +  [to rebuild run: "ruby #{__FILE__} --build-gsub"] + +           WOK +      else +        puts <<-WOK +  autoload script does not exist: "#{@modify_instructions_script}" +  needed for "ruby  #{__FILE__} --convert" if +  "Extracted.new.modify.modules_and_classes" is used +  (see "matches_and_replaces") +  try run: "ruby #{__FILE__} --build-gsub" + +           WOK +      end +      autoload :Extracted, "./#{@mod_inst}" +    end +    def matches_and_replaces #edit manually +      [ +       #Extracted.new.modify.modules_and_classes, +       #Extracted.new.modify.modules, +       #Extracted.new.modify.classes, +       #modify.dates, +       #modify.modules, +       #modify.classes, +       #modify.misc, +      ] +    end +    def message(text) +      response='' +      while response !~/yes/ +        print %{ +    #{text} +    To continue type "yes" [to exit type "no" or "quit"]: } +        response=File.new('/dev/tty').gets.strip +        exit if response =~/^(?:quit|no)$/ +      end +    end +    def help +    print <<WOK + +#{@description} + +note converting twice in a single direction will result +in markup inconsistency + +modify.rb --convert +  performs the current conversion that is set in method "matches_and_replaces", +  this needs to be edited manually, as do the substitutions to be made on the +  files matched in the settings [handle with care] + +modify.rb --report +  reports on the names of modules and classes in each file requested +  (the defalt is all) + +modify.rb --build-gsub +  creates modify_instructions.rb methods for substitutions of methods and +  classes for editing + +WOK +      exit +    end +    #%% substitutions to be made +    #   [//,                                                                   ''], +    #def rename_default +    #  message(%q{rename SiSU modules, classes, date}) +    #  [ +    #    [/1997\s+-\s+2012/,                                                    '1997 - 2012'], +    #  ] +    #end +    def modify +      def misc +        [ +          #[//,                                                                  ''], +        ] +      end +      def dates +        [ +          [/1997\s+-\s+2011/,                                                    '1997 - 2012'], +        ] +      end +      def modules +        [ +         #[//,                                                                   ''], +        ] +      end +      def classes +        [ +         #[//,                                                                   ''], +        ] +      end +      self +    end +    def convert +      message("WARNING, proceed at your own risk,\npermanent changes requested for the above named files\n  best that you check (manually) what this file is set to do\n  conversions set are at the top of the file") +      if matches_and_replaces.length > 0 +        @files.each do |i| +          @new,@matched,@empty1,@empty2=true,false,false,false +          file=File.open(i,'r') +          cont=file.readlines +          file.close +          @file=File.new(i,'w') +          cont.each do |t| +            matches_and_replaces.each do |match_and_replace| +              match_and_replace.each do |m,r| +                if t =~m +                  p m.to_s + ' -> ' + r +                  puts "in:  #{t}" +                  t=t.gsub(m,r) if m and r +                  puts "out: #{t}" +                end +              end +            end +            if t=~/^\s*$/; @empty1=true +            else           @empty1=false +            end +            @file.puts t unless (@empty1==true and @empty2==true) +            if t=~/^\s*$/; @empty2=true +            else           @empty2=false +            end +          end +          @file.close +        end +      end +    end +    def report_modules_and_classes +      @f=nil +      @structure={} +      @arr={mod: [], cl: []} +      @files.each do |f| +        @new,@matched,@empty1,@empty2=true,false,false,false +        file=File.open(f,'r') +        cont=file.readlines +        file.close +        cont.each do |t| +          if f != @f +            @f=f +            @mod=nil +            #puts "---\n#{@f}" +            @structure[@f]={} +          end +          if t =~/^\s*module\s+\S+/ +            @mod=t.match(/^\s*module\s+(\S+)/)[1] +            #puts '  ' +   @mod +            @arr[:mod] << @mod +            @structure[@f].store(@mod,[]) +            #@structure[@f] = {@mod => []} +          end +          if t =~/^\s*class\s+\S+/ +            cl=t.match(/^\s*class\s+(\S+)/)[1] +            #puts '    ' + cl +            @arr[:cl] << cl +            @structure[@f][@mod] << cl +          end +        end +      end +      @structure.sort.each do |fl,modules| +         puts "---\n" + fl +         modules.sort.each do |mod,classes| +           puts '  ' + mod +           classes.sort.each do |cl| +             puts '    ' + cl +           end +         end +      end +      puts '---' +      puts 'number of modules: ' + @arr[:mod].length.to_s + ', unique: ' + @arr[:mod].uniq.length.to_s +      puts 'number of classes: ' + @arr[:cl].length.to_s + ', unique: ' + @arr[:cl].uniq.length.to_s +    end +    def build_search_and_replace_method_for_modules_and_classes +      @f=nil +      @structure={} +      @arr={mod: [], cl: []} +      @files.each do |f| +        @new,@matched,@empty1,@empty2=true,false,false,false +        file=File.open(f,'r') +        cont=file.readlines +        file.close +        cont.each do |t| +          if f != @f +            @f=f +            @mod=nil +            #puts "---\n#{@f}" +            @structure[@f]={} +          end +          if t =~/^\s*module\s+\S+/ +            @mod=t.match(/^\s*module\s+(\S+)/)[1] +            #puts '  ' +   @mod +            @arr[:mod] << @mod +            @structure[@f].store(@mod,[]) +            #@structure[@f] = {@mod => []} +          end +          if t =~/^\s*class\s+\S+/ +            cl=t.match(/^\s*class\s+(\S+)/)[1] +            #puts '    ' + cl +            @arr[:cl] << cl +            @structure[@f][@mod] << cl +          end +        end +      end +      puts 'number of modules: ' + @arr[:mod].length.to_s + ', unique: ' + @arr[:mod].uniq.length.to_s +      puts 'number of classes: ' + @arr[:cl].length.to_s + ', unique: ' + @arr[:cl].uniq.length.to_s +      method_modules_and_classes=[] +      method_modules_and_classes <<<<-WOK +#module SiSU_MC +  class Extracted +    def modify +      WOK +      #% modules_and_classes +      method_modules_and_classes <<<<-WOK +      def modules_and_classes +        [ +      WOK +      @structure.sort.each do |fl,modules| +         method_modules_and_classes << ' '*8 +  "##% -- " + fl +         modules.sort.each do |mod,classes| +           method_modules_and_classes << ' '*8 + '# ' + "[/#{mod}/," + ' '*(67 - mod.length) + "'#{mod}']," +           classes.uniq.sort.each do |cl| +             method_modules_and_classes << ' '*8 + '#   ' + "[/#{cl}/," + ' '*(65 - cl.length) + "'#{cl}']," +           end +         end +      end +      method_modules_and_classes <<<<-WOK +        ] +      end +      WOK +      #% modules +      method_modules_and_classes <<<<-WOK +      def modules +        [ +      WOK +      method_modules_and_classes << ' '*8 + '# ' + 'number of modules: ' + @arr[:mod].length.to_s + +        ', unique: ' + @arr[:mod].uniq.length.to_s +      @arr[:mod].uniq.sort.each do |mod| +        method_modules_and_classes << ' '*8 + '# ' + "[/#{mod}/," + ' '*(67 - mod.length) + "'#{mod}']," +      end +      method_modules_and_classes <<<<-WOK +        ] +      end +      WOK +      #% classes +      method_modules_and_classes <<<<-WOK +      def classes +        [ +      WOK +      method_modules_and_classes << ' '*8 + '# ' + 'number of classes: ' + @arr[:cl].length.to_s + +        ', unique: ' + @arr[:cl].uniq.length.to_s +      @arr[:cl].uniq.sort.each do |cl| +        method_modules_and_classes << ' '*8 + '# ' + "[/#{cl}/," + ' '*(67 - cl.length) + "'#{cl}']," +      end +      method_modules_and_classes <<<<-WOK +        ] +      end +      WOK +      method_modules_and_classes <<<<-WOK +      self +    end +  end +#end +      WOK +      #method_modules_and_classes.each{|x| puts x} +      if FileTest.file?(@modify_instructions_script) ==true +        message("WARNING << #{@mod_inst} >> exists (and may have been edited). The existing << #{@mod_inst} >> will be overwritten if you proceed.") +      end +      instructs=File.new(@modify_instructions_script,'w') +      method_modules_and_classes.each do |x| +        puts x +        instructs.puts x +      end +      instructs.close +    end +    def action +      if @files and @files.length > 0 +        p @files +        mr=nil +        #%% changes to make m match, r replace      --------------------------> +        if @cf =~/--help/; help +        else +          case @cf +          when /--convert/;    convert +          when /--report/;     report_modules_and_classes +          when /--build-gsub/; build_search_and_replace_method_for_modules_and_classes +          else help +          end +          #act +        end +      else puts "this routine makes permanent changes to the contents of the files matched, as instructed within [no matches]" +      end +    end +  end +end +#% files to match for this conversion set  -------------------------> +f=$* #; p $* +cf=f[0].to_s +f.shift +match_and_replace=Array.new +unless f.length > 0 +  f=if cf == '--report' \ +  or cf == '--build-gsub' +    Dir.glob("[a-zA-Z]*.rb")  #restrict to ruby files +  else +    Dir.glob("[a-zA-Z]*") +  end +  f=f.sort.delete_if { |x| x == __FILE__ or x == 'modify_instructions.rb' } +end +SiSU_Modify::Operations.new(cf,f).action +__END__ +#f=Dir.glob("{bin,conf,data,lib}/**/*.rb")     #sisu development +#f=Dir.glob("[^_]/**/*")                       #all files subdirectories beneath pwd except those starting with _ diff --git a/data/sisu/v2/conf/convert/sisu_convert b/data/sisu/v4/conf/convert/sisu_convert index a3a12189..a3a12189 100644 --- a/data/sisu/v2/conf/convert/sisu_convert +++ b/data/sisu/v4/conf/convert/sisu_convert diff --git a/data/sisu/v2/conf/convert/wvHtml.xml b/data/sisu/v4/conf/convert/wvHtml.xml index 3cc9dd29..3cc9dd29 100644 --- a/data/sisu/v2/conf/convert/wvHtml.xml +++ b/data/sisu/v4/conf/convert/wvHtml.xml diff --git a/data/sisu/v2/conf/convert/wvSiSU.xml b/data/sisu/v4/conf/convert/wvSiSU.xml index 271b00ff..271b00ff 100644 --- a/data/sisu/v2/conf/convert/wvSiSU.xml +++ b/data/sisu/v4/conf/convert/wvSiSU.xml diff --git a/data/sisu/v2/conf/editor-syntax-etc/README b/data/sisu/v4/conf/editor-syntax-etc/README index c03f3569..c03f3569 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/README +++ b/data/sisu/v4/conf/editor-syntax-etc/README diff --git a/data/sisu/v2/conf/editor-syntax-etc/diakonos/diakonos.conf b/data/sisu/v4/conf/editor-syntax-etc/diakonos/diakonos.conf index a3c3afe4..a3c3afe4 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/diakonos/diakonos.conf +++ b/data/sisu/v4/conf/editor-syntax-etc/diakonos/diakonos.conf diff --git a/data/sisu/v2/conf/editor-syntax-etc/emacs/README b/data/sisu/v4/conf/editor-syntax-etc/emacs/README index 24816c1e..24816c1e 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/emacs/README +++ b/data/sisu/v4/conf/editor-syntax-etc/emacs/README diff --git a/data/sisu/v2/conf/editor-syntax-etc/emacs/sisu-mode.el b/data/sisu/v4/conf/editor-syntax-etc/emacs/sisu-mode.el index 8ea5c023..84e7cbef 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/emacs/sisu-mode.el +++ b/data/sisu/v4/conf/editor-syntax-etc/emacs/sisu-mode.el @@ -251,15 +251,23 @@       ;;indented text       (cons "^_[1-9] "                  'general-font-lock-red1) +     (cons "^_[1-9]! "                 'general-font-lock-red1) + +     ;hanging indented text [proposed enable when implemented] +      (cons "^__[1-9] "                'general-font-lock-red1) +      (cons "^_[0-9]_[0-9] "           'general-font-lock-red1) +      (cons "^__[1-9]! "               'general-font-lock-red1) +      (cons "^_[0-9]_[0-9]! "          'general-font-lock-red1)       ;;url       (cons "\\(^\\|[ ]\\)http:[/][/][^ \t\n\r<]+" 'general-font-lock-blue2) -;; \\|\$ -       ;; Comment Lines       (cons "^% .*"                     'general-font-lock-blue1) +       ;; line break +     (cons " \\\\\\\\ "                    'general-font-lock-red1) +     ;; line break (depreciated)       (cons "<br>"                      'general-font-lock-red1)       ;; Section titles diff --git a/data/sisu/v2/conf/editor-syntax-etc/gedit/sisu.lang b/data/sisu/v4/conf/editor-syntax-etc/gedit/sisu.lang index b82d5f80..b82d5f80 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/gedit/sisu.lang +++ b/data/sisu/v4/conf/editor-syntax-etc/gedit/sisu.lang diff --git a/data/sisu/v2/conf/editor-syntax-etc/kate/sisu.xml b/data/sisu/v4/conf/editor-syntax-etc/kate/sisu.xml index a8054f2d..a8054f2d 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/kate/sisu.xml +++ b/data/sisu/v4/conf/editor-syntax-etc/kate/sisu.xml diff --git a/data/sisu/v2/conf/editor-syntax-etc/nano/nanorc b/data/sisu/v4/conf/editor-syntax-etc/nano/nanorc index 30ba439c..30ba439c 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/nano/nanorc +++ b/data/sisu/v4/conf/editor-syntax-etc/nano/nanorc diff --git a/data/sisu/v2/conf/editor-syntax-etc/nedit/sisu_nedit.pats b/data/sisu/v4/conf/editor-syntax-etc/nedit/sisu_nedit.pats index ef01b2be..ef01b2be 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/nedit/sisu_nedit.pats +++ b/data/sisu/v4/conf/editor-syntax-etc/nedit/sisu_nedit.pats diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/8.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/8.vim index 46d618f3..46d618f3 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/8.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/8.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim index aad6de0f..aad6de0f 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-ruby.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim index 03f192df..03f192df 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal-cterm-sisu.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal.vim index 1ff26a58..1ff26a58 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/frugal.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/frugal.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/slate.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/slate.vim index 238b27df..238b27df 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/slate.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/slate.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim index 3d8f92e1..3d8f92e1 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-ruby.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim index 9704dbd2..9704dbd2 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/colors/sparse-cterm-sisu.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/filetype.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/filetype.vim index 917c3e04..917c3e04 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/filetype.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/filetype.vim diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/ftplugin/sisu.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/ftplugin/sisu.vim index 160444fd..be3ff18f 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/ftplugin/sisu.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/ftplugin/sisu.vim @@ -1,6 +1,6 @@  "%% SiSU Vim ftplugin  " SiSU Maintainer: Ralph Amissah <ralph@amissah.com> -" SiSU Markup:     SiSU (sisu-2.0) 2010-06-05 +" SiSU Markup:     SiSU (sisu-3.3) 2012-08-18  " an ftplugin setting defaults for editing sisu markup files  :syntax on  :filetype on @@ -175,8 +175,15 @@  ":command! Fp FMake ^\s*[A-Za-z0-9#]  :command! Fp FMake ^\s*\S  :command! Fo FMake ^[%\"]\s*[{>] +"% linenumbering, on, relative, off +:map <Leader>nn :set <c-r>={'00':'','01':'r','10':'nor'}[&rnu.&nu]<CR>nu<CR>  "% cursorline  :highlight CursorLine guibg=black ctermbg=black  :highlight CursorColumn guibg=black ctermbg=black +:map <leader>cu :if &cursorcolumn <Bar> +    \set nocursorline nocursorcolumn <Bar> +  \else <Bar> +    \set cursorline cursorcolumn <Bar> +  \endif<cr>  :map <leader>cu- :set nocursorline nocursorcolumn<cr>  :map <leader>cu+ :set cursorline cursorcolumn<cr> diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/syntax/sisu.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu.vim index be92d62f..49c70986 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/syntax/sisu.vim +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu.vim @@ -1,7 +1,7 @@  " SiSU Vim syntax file  " SiSU Maintainer: Ralph Amissah <ralph@amissah.com> -" SiSU Markup:     SiSU (sisu-2.9.12) -" Last Change:     2012-02-11 +" SiSU Markup:     SiSU (sisu-3.3.3) +" Last Change:     2012-08-08  " URL:             <http://git.sisudoc.org/?p=code/sisu.git;a=blob;f=data/sisu/v3/conf/editor-syntax-etc/vim/syntax/sisu.vim;hb=HEAD>  "(originally looked at Ruby Vim by Mirko Nasato) @@ -14,19 +14,15 @@ endif  let s:cpo_save = &cpo  set cpo&vim -" Errors: +"% "Errors:  syn match sisu_error contains=sisu_link,sisu_error_wspace "<![^ei]\S\+!>" -" Markers Identifiers: + +"% "Markers Identifiers:  if !exists("sisu_no_identifiers")    syn match   sisu_mark_endnote                                           "\~^" -  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)" -  syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />" -  syn match   sisu_control             contains=@NoSpell                  "^<:p[bn]>\s*$" - "syn match   sisu_control             contains=@NoSpell                  "^<\(br\)\?:\(pg\|pgn\|pn\)>\s*$" - "syn match   sisu_control             contains=@NoSpell                  "^\[\(br\)\?:\(pg\|pgn\|pn\)\]\s*$" +  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)\|<br>\|<br />" +  syn match   sisu_control             contains=@NoSpell                  "^\(-\\\\-\|=\\\\=\|<:p[bn]>\)\s*$"    syn match   sisu_control             contains=@NoSpell                  "^<:\(bo\|---\)>\s*$" - "syn match   sisu_control             contains=@NoSpell                  "^<\(br\)\?:\(pr\|o\)>\s*$" - "syn match   sisu_control             contains=@NoSpell                  "^\[\(br\)\?:\(pr\|o\)\]\s*$"    syn match   sisu_marktail                                               "[~-]#"    syn match   sisu_control                                                "\""    syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)" @@ -37,14 +33,18 @@ if !exists("sisu_no_identifiers")    syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$"    syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$"    syn match   sisu_structure                                              "^:A\~$" + +"% "Document Sub Headers:    syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content -  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s"                               " &hon &institution +  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|editor\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s"                               " &hon &institution    syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s"                   " access_rights license    syn match   sisu_sub_header_classify                                    "^\s\+:\(topic_register\|coverage\|format\|identifier\|keywords\|relation\|subject\|type\|dewey\|loc\|oclc\|pg\|isbn\):\s"    syn match   sisu_sub_header_date                                       "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s"    syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s" -  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|plaintext_wrap\|texpdf_font\|skin\|stamp\|promo\|ad\|manpage\):\s" +  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|substitute\|omit\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|skin\|stamp\|promo\|ad\|manpage\):\s"    syn match   sisu_sub_header_notes                                       "^\s\+:\(abstract\|comment\|description\|history\|prefix\|prefix_[ab]\|suffix\):\s" + +"% "semantic markers: (ignore)    syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]"    syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]"    syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]" @@ -55,77 +55,123 @@ if !exists("sisu_no_identifiers")    syn match   sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+"  endif -"URLs Numbers And ASCII Codes: +"% "URLs Numbers And ASCII Codes:  syn match   sisu_number                              "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>"  syn match   sisu_number                              "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)" -"Tuned Error: (is error if not already matched) +"% "Tuned Error: (is error if not already matched)  syn match sisu_error             contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]"  syn match sisu_error             contains=sisu_error "<a href\|</a>]" -"Simple Paired Enclosed Markup: +"% "Simple Paired Enclosed Markup:  "url/link  syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$" -"header + +"% "Document Header: +" title  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" creator  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" dates  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" publisher  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" rights  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" classify document  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" original language (depreciated)  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" notes  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" links of interest  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" make, processing instructions  syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" -"headings -syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$" -"block/group text -syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table" -syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$" + +"% "Headings: +syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$" + +"% "Block Group Text: +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table" +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$" +" block, group, poem, alt  syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(block\|group\|poem\|alt\){" end="^}\(block\|group\|poem\|alt\)" +" code  syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code" -"endnotes -syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n" -syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n" -syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$" -"links and images -syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline -syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline -syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline -"some line operations -syn region sisu_control contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_control start="\(\(^\| \)!_ \|<:b>\)" end="$" -syn region sisu_normal contains=sisu_fontface,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$" + +"% "Endnotes: +" regular endnote or asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n" +" numbered asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n" +" endnote content marker (for binary content marking) +syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$" + +"% "Links And Images: +" image with url link (and possibly footnote of url) +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline +" sisu outputs, short notation +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline +" image +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline + +"% "Some Line Operations: +" bold line +syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$" +" indent and bullet paragraph +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$" +" indent and bullet (bold start) paragraph +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$" +" hanging indent paragraph [proposed] +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$" +" hanging indent (bold start/ definition) paragraph [proposed] +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$" +" list numbering  syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$" -"font face curly brackets + +"% "Font Face Curly Brackets:  "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline +" book index:  syn region sisu_index matchgroup=sisu_index_block start="^={" end="}" -syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*" -syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!" -syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_" -syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/" -syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+" -syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^" -syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="}," -syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#" +" emphasis: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*" +" bold: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!" +" underscore: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_" +" italics: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/" +" added: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+" +" superscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^" +" subscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="}," +" monospace: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#" +" strikethrough:  syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-" -syn region sisu_html contains=sisu_error contains=sisu_strikeout matchgroup=sisu_contain start="<a href=\".\{-}\">" end="</a>" oneline -"single words bold italicise etc. "workon -syn region sisu_control contains=sisu_error matchgroup=sisu_control start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline + +"% "Single Words Bold Italicise Etc: (depreciated) +syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline  syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline  "misc  syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline -"Expensive Mode: +"% "Expensive Mode:  if !exists("sisu_no_expensive")  else " not Expensive    syn region  sisu_content_alt  matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline  endif " Expensive? -"Headers And Headings: (Document Instructions) +"% "Headers And Headings: (Document Instructions)  syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+"  syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$" -"Errors: +"% "Errors:  syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]"  syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+"  syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$" @@ -149,16 +195,17 @@ syn match sisu_error contains=sisu_error "<dir>"  syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>"  syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$" -"Error Exceptions: +"% "Error Exceptions:  syn match sisu_control "\n$" "contains=ALL -syn match sisu_control " //" +"syn match sisu_control " //"  syn match sisu_error   "%{"  syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"  syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"  syn match sisu_comment "^%\{1,2\}.\+" -"Definitions Default Highlighting: +"% "Definitions Default Highlighting:  hi def link sisu_normal                Normal +hi def link sisu_bold                  Statement  hi def link sisu_header                PreProc  hi def link sisu_header_content        Normal  hi def link sisu_sub_header_title      Statement diff --git a/data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu_next.vim b/data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu_next.vim new file mode 100644 index 00000000..257e1cba --- /dev/null +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/syntax/sisu_next.vim @@ -0,0 +1,281 @@ +" SiSU Vim syntax file +" SiSU Maintainer: Ralph Amissah <ralph@amissah.com> +" SiSU Markup:     SiSU (sisu-3.1.0) +" Last Change:     2011-10-03 +" URL:             <http://git.sisudoc.org/?p=code/sisu.git;a=blob;f=data/sisu/v3/conf/editor-syntax-etc/vim/syntax/sisu.vim;hb=HEAD> +"(originally looked at Ruby Vim by Mirko Nasato) + +if version < 600 +  syntax clear +elseif exists("b:current_syntax") +  finish +else +endif +let s:cpo_save = &cpo +set cpo&vim + +"% "Errors: +syn match sisu_error contains=sisu_link,sisu_error_wspace "<![^ei]\S\+!>" + +"% "Markers Identifiers: +if !exists("sisu_no_identifiers") +  syn match   sisu_mark_endnote                                           "\~^" +  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)" +  syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />" +  syn match   sisu_control             contains=@NoSpell                  "^<:p[bn]>\s*$" + "syn match   sisu_control             contains=@NoSpell                  "^<\(br\)\?:\(pg\|pgn\|pn\)>\s*$" + "syn match   sisu_control             contains=@NoSpell                  "^\[\(br\)\?:\(pg\|pgn\|pn\)\]\s*$" +  syn match   sisu_control             contains=@NoSpell                  "^<:\(bo\|---\)>\s*$" + "syn match   sisu_control             contains=@NoSpell                  "^<\(br\)\?:\(pr\|o\)>\s*$" + "syn match   sisu_control             contains=@NoSpell                  "^\[\(br\)\?:\(pr\|o\)\]\s*$" +  syn match   sisu_marktail                                               "[~-]#" +  syn match   sisu_control                                                "\"" +  syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)" +  syn match   sisu_number              contains=@NoSpell                  "[0-9a-f]\{32\}\|[0-9a-f]\{64\}" +  syn match   sisu_link                contains=@NoSpell                  "\(_\?https\?://\|\.\.\/\)\S\+" +  syn match   sisu_link                                                   " \*\~\S\+" +  syn match   sisu_action                                                 "^<:insert\d\+>" +  syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$" +  syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$" +  syn match   sisu_structure                                              "^:A\~$" + +"% "Document Sub Headers: +  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content +  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|editor\):\s"                               " &hon &institution +  syn match   sisu_sub_header_contributor                                 "^\s\+:\(editor\|translator\|illustrator\|photographer\|audio\|video\|prepared_by\|digitized_by\):\s" +  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s"                   " access_rights license +  syn match   sisu_sub_header_classify                                    "^\s\+:\(topic_register\|coverage\|identifier\|keywords\|relation\|subject\|type\|dewey\|loc\):\s" +  syn match   sisu_sub_header_identify                                    "^\s\+:\(isbn\|urn\|oclc\|pg\):\s" +  syn match   sisu_sub_header_format                                      "^\s\+:\(mimetype\):\s" +  syn match   sisu_sub_header_date                                       "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s" +  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s" +  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|skin\|stamp\|promo\|ad\|manpage\):\s" +  syn match   sisu_sub_header_notes                                       "^\s\+:\(abstract\|comment\|description\|history\|prefix\|prefix_[ab]\|suffix\):\s" + +"% "semantic markers: (ignore) +  syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]" +  syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]" +  syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]" +  syn match   sisu_sem_ex_marker_block                                    "\([a-z][a-z._]*\|\):\[\|\]:[a-z._]*[a-z]" +  syn match   sisu_sem_block contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_mark_endnote,sisu_content_endnote "\([a-z]*\):{[^}].\{-}}:\1" +  syn match   sisu_sem_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";{[^}].\{-}};[a-z]\+" +  syn match   sisu_sem_ex_block contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_mark_endnote,sisu_content_endnote "\([a-z]*\):\[[^}].\{-}\]:\1" +  syn match   sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+" +endif + +"% "URLs Numbers And ASCII Codes: +syn match   sisu_number                              "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>" +syn match   sisu_number                              "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)" + +"% "Tuned Error: (is error if not already matched) +syn match sisu_error             contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]" +syn match sisu_error             contains=sisu_error "<a href\|</a>]" + +"% "Simple Paired Enclosed Markup: +"url/link +syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$" + +"% "Document Header: +" title +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" creator +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" contributor +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_contributor matchgroup=sisu_header start="^[@]contributor:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" dates +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" publisher +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" rights +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" classify document +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" identifier +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_identifier matchgroup=sisu_header start="^[@]identifier:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" format +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_format matchgroup=sisu_header start="^[@]format:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" original language (depreciated) +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" notes +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" links of interest +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" +" make, processing instructions +syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$" + +"% "Headings: +syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$" + +"% "Block Group Text: +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table" +" table +syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$" +" block, group, poem, alt +syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(block\|group\|poem\|alt\){" end="^}\(block\|group\|poem\|alt\)" +" code +syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code" + +"% "Endnotes: +" regular endnote or asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n" +" numbered asterisk or plus sign endnote +syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n" +" endnote content marker (for binary content marking) +syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$" + +"% "Links And Images: +" image with url link (and possibly footnote of url) +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline +" sisu outputs, short notation +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline +" image +syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline + +"% "Some Line Operations: +" bold line +syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$" +" indent and bullet paragraph +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$" +" indent and bullet (bold start) paragraph +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$" +" hanging indent paragraph [proposed] +syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$" +" hanging indent (bold start/ definition) paragraph [proposed] +syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$" +" list numbering +syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$" + +"% "Font Face Curly Brackets: +"syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline +" book index: +syn region sisu_index matchgroup=sisu_index_block start="^={" end="}" +" emphasis: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*" +" bold: +syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!" +" underscore: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_" +" italics: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/" +" added: +syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+" +" superscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^" +" subscript: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="}," +" monospace: +syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#" +" strikethrough: +syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-" +" (depreciated remove, consider marking as error): +" syn region sisu_html contains=sisu_error contains=sisu_strikeout matchgroup=sisu_contain start="<a href=\".\{-}\">" end="</a>" oneline + +"% "Single Words Bold Italicise Etc: (depreciated) +syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline +syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline +"misc +syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline + +"% "Expensive Mode: +if !exists("sisu_no_expensive") +else " not Expensive +  syn region  sisu_content_alt  matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline +endif " Expensive? + +"% "Headers And Headings: (Document Instructions) +syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+" +syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$" + +"% "Errors: +syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]" +syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+" +"syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+\|\t\+" +syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$" +syn match sisu_error contains=sisu_error_wspace "\t\+" +syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+" +syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]" +syn match sisu_error contains=sisu_error "\([!*/_\+,^]\){\([^(\}\1)]\)\{-}\n$" +syn match sisu_error contains=sisu_error "^[\~]{[^{]\{-}\n$" +syn match sisu_error contains=sisu_error "\s\+.{{" +syn match sisu_error contains=sisu_error "^\~\s*$" +syn match sisu_error contains=sisu_error "^0\~.*" +syn match sisu_error contains=sisu_error "^[1-9]\~\s*$" +syn match sisu_error contains=sisu_error "^[1-9]\~\S\+\s*$" +syn match sisu_error contains=sisu_error "[^{]\~\^[^ \)]" +syn match sisu_error contains=sisu_error "\~\^\s\+\.\s*" +syn match sisu_error contains=sisu_error "{\~^\S\+" +syn match sisu_error contains=sisu_error "[_/\*!^]{[ .,:;?><]*}[_/\*!^]" +syn match sisu_error contains=sisu_error "[^ (\"'(\[][_/\*!]{\|}[_/\*!][a-zA-Z0-9)\]\"']" +syn match sisu_error contains=sisu_error "<dir>" +"errors for filetype sisu, though not error in 'metaverse': +syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>" +syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$" + +"% "Error Exceptions: +syn match sisu_control "\n$" "contains=ALL +"syn match sisu_control " //" +syn match sisu_error   "%{" +syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>" +syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]" +syn match sisu_comment "^%\{1,2\}.\+" + +"% "Definitions Default Highlighting: +hi def link sisu_normal                Normal +hi def link sisu_bold                  Statement +hi def link sisu_header                PreProc +hi def link sisu_header_content        Normal +hi def link sisu_sub_header_title      Statement +hi def link sisu_sub_header_creator    Statement +hi def link sisu_sub_header_date       Statement +hi def link sisu_sub_header_publisher  Statement +hi def link sisu_sub_header_rights     Statement +hi def link sisu_sub_header_classify   Statement +hi def link sisu_sub_header_original   Statement +hi def link sisu_sub_header_links      Statement +hi def link sisu_sub_header_notes      Statement +hi def link sisu_sub_header_make       Statement +hi def link sisu_heading               Title +hi def link sisu_structure             Operator +hi def link sisu_contain               Include +hi def link sisu_mark_endnote          Delimiter +"hi def link sisu_mark_endnote          Include +hi def link sisu_require               NonText +hi def link sisu_link                  NonText +hi def link sisu_linked                String +hi def link sisu_fontface              Delimiter +"hi def link sisu_fontface              Include +hi def link sisu_strikeout             DiffDelete +hi def link sisu_content_alt           Special +hi def link sisu_sem_content           SpecialKey +hi def link sisu_sem_block             Special +hi def link sisu_sem_marker            Visual +"hi def link sisu_sem_marker            Structure +hi def link sisu_sem_marker_block      MatchParen +hi def link sisu_sem_ex_marker         FoldColumn +hi def link sisu_sem_ex_marker_block   Folded +hi def link sisu_sem_ex_content        Comment +"hi def link sisu_sem_ex_content        SpecialKey +hi def link sisu_sem_ex_block          Comment +hi def link sisu_index                 SpecialKey +hi def link sisu_index_block           Visual +hi def link sisu_content_endnote       Special +hi def link sisu_control               Delimiter +"hi def link sisu_control               Define +hi def link sisu_ocn                   Include +hi def link sisu_number                Number +hi def link sisu_identifier            Function +hi def link sisu_underline             Underlined +hi def link sisu_markpara              Include +hi def link sisu_marktail              Include +hi def link sisu_mark                  Identifier +hi def link sisu_break                 Structure +hi def link sisu_html                  Type +hi def link sisu_action                Identifier +hi def link sisu_comment               Comment +hi def link sisu_error_sem_marker      Error +hi def link sisu_error_wspace          Error +hi def link sisu_error                 Error +let b:current_syntax = "sisu" +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssi.tpl b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssi.tpl index a101dee6..a101dee6 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssi.tpl +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssi.tpl diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssm.tpl b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssm.tpl index cbda5053..cbda5053 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/ssm.tpl +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/ssm.tpl diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/sst.tpl b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/sst.tpl index dd19efb4..dd19efb4 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/templates/sst.tpl +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/templates/sst.tpl diff --git a/data/sisu/v2/conf/editor-syntax-etc/vim/vim-sisu.yaml b/data/sisu/v4/conf/editor-syntax-etc/vim/vim-sisu.yaml index ca665bc8..ca665bc8 100644 --- a/data/sisu/v2/conf/editor-syntax-etc/vim/vim-sisu.yaml +++ b/data/sisu/v4/conf/editor-syntax-etc/vim/vim-sisu.yaml diff --git a/data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu b/data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu index 6647de9f..6647de9f 100644 --- a/data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu +++ b/data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu diff --git a/data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu_www b/data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu_www index 0dd16c94..0dd16c94 100644 --- a/data/sisu/v2/conf/lighttpd/lighttpd.cfg.sisu_www +++ b/data/sisu/v4/conf/lighttpd/lighttpd.cfg.sisu_www diff --git a/data/sisu/v2/conf/ruby/irbrc b/data/sisu/v4/conf/ruby/irbrc index cceffdfc..cceffdfc 100644 --- a/data/sisu/v2/conf/ruby/irbrc +++ b/data/sisu/v4/conf/ruby/irbrc diff --git a/data/sisu/v4/v/version.yml b/data/sisu/v4/v/version.yml new file mode 100644 index 00000000..c5b927fa --- /dev/null +++ b/data/sisu/v4/v/version.yml @@ -0,0 +1,5 @@ +--- +:version: 4.0.0 +:date_stamp: 2012w40/3 +:date: "2012-10-03" +:project: SiSU 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 diff --git a/man/man1/sisu-concordance.1 b/man/man1/sisu-concordance.1 index 2b5a981f..f1eb4705 100644 --- a/man/man1/sisu-concordance.1 +++ b/man/man1/sisu-concordance.1 @@ -1,4 +1,4 @@ -.TH SISU\-CONCORDANCE 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-CONCORDANCE 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -16,8 +16,6 @@ The \fBsisu\-concordance\fR command is an alias for \fBsisu \-\-concordance\fR (  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-concordance\fR command is an alias for \fBsisu \-\-concordance\fR (  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-epub.1 b/man/man1/sisu-epub.1 index ab6a4d6e..bf4c2755 100644 --- a/man/man1/sisu-epub.1 +++ b/man/man1/sisu-epub.1 @@ -1,4 +1,4 @@ -.TH SISU\-EPUB 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-EPUB 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -16,8 +16,6 @@ The \fBsisu\-epub\fR command is an alias for \fBsisu \-\-epub\fR (or \fBsisu \-e  .br  \fIsisu\-concordance\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-epub\fR command is an alias for \fBsisu \-\-epub\fR (or \fBsisu \-e  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-git.1 b/man/man1/sisu-git.1 deleted file mode 100644 index c5c612eb..00000000 --- a/man/man1/sisu-git.1 +++ /dev/null @@ -1,39 +0,0 @@ -.TH SISU\-GIT 1 "2011\-03\-05" "2.8.1" "SiSU" - -.SH NAME -\fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system - -.SH SYNOPSIS -\fBsisu\-git\fR \fIsisu_document.sst\fR | \fIsisu_document.ssm\fR - -.SH DESCRIPTION -\fBSiSU\fR is a lightweight markup based document structuring, publishing and search framework for document collections. -.PP -The \fBsisu\-git\fR command is an alias for \fBsisu \-\-git\fR (or \fBsisu \-g\fR) which produces a git repository of the sisu source document and associated parts (images, ). - -.SH SEE ALSO -\fIsisu\fR(1), -.br -\fIsisu\-concordance\fR(1), -.br -\fIsisu\-epub\fR(1), -.br -\fIsisu\-harvest\fR(1), -.br -\fIsisu\-html\fR(1), -.br -\fIsisu\-pdf\fR(1), -.br -\fIsisu\-pg\fR(1), -.br -\fIsisu\-po\fR(1), -.br -\fIsisu\-sqlite\fR(1), -.br -\fIsisu\-txt\fR(1). - -.SH HOMEPAGE -More information about \fBSiSU\fR can be found at <\fIhttp://www.sisudoc.org/\fR> or <\fIhttp://www.jus.uio.no/sisu/\fR>. - -.SH AUTHOR -\fBSiSU\fR is written by Ralph Amissah <\fIralph@amissah.com\fR>. diff --git a/man/man1/sisu-harvest.1 b/man/man1/sisu-harvest.1 index 3967c18e..35b7b9c9 100644 --- a/man/man1/sisu-harvest.1 +++ b/man/man1/sisu-harvest.1 @@ -1,4 +1,4 @@ -.TH SISU\-HARVEST 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-HARVEST 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-harvest\fR command is an alias for \fBsisu \-\-harvest\fR which bas  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-html\fR(1),  .br  \fIsisu\-pdf\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-harvest\fR command is an alias for \fBsisu \-\-harvest\fR which bas  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-html.1 b/man/man1/sisu-html.1 index 7d80cb69..205cb8d9 100644 --- a/man/man1/sisu-html.1 +++ b/man/man1/sisu-html.1 @@ -1,4 +1,4 @@ -.TH SISU\-HTML 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-HTML 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-html\fR command is an alias for \fBsisu \-\-html\fR (or \fBsisu \-h  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-pdf\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-html\fR command is an alias for \fBsisu \-\-html\fR (or \fBsisu \-h  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-odf.1 b/man/man1/sisu-odf.1 index 9e3bbbba..18df172f 100644 --- a/man/man1/sisu-odf.1 +++ b/man/man1/sisu-odf.1 @@ -1,4 +1,4 @@ -.TH SISU\-ODF 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-ODF 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-odf\fR command is an alias for \fBsisu \-\-odt\fR (or \fBsisu \-o\f  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-odf\fR command is an alias for \fBsisu \-\-odt\fR (or \fBsisu \-o\f  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-pdf.1 b/man/man1/sisu-pdf.1 index 49a86ef1..07cd526d 100644 --- a/man/man1/sisu-pdf.1 +++ b/man/man1/sisu-pdf.1 @@ -1,4 +1,4 @@ -.TH SISU\-PDF 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-PDF 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-pdf\fR command is an alias for \fBsisu \-\-pdf\fR (or \fBsisu \-p\f  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -28,8 +26,6 @@ The \fBsisu\-pdf\fR command is an alias for \fBsisu \-\-pdf\fR (or \fBsisu \-p\f  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1),  .br  \fIsisu\-txt\fR(1). diff --git a/man/man1/sisu-pg.1 b/man/man1/sisu-pg.1 index 81125ff2..094b84d5 100644 --- a/man/man1/sisu-pg.1 +++ b/man/man1/sisu-pg.1 @@ -1,4 +1,4 @@ -.TH SISU\-PG 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-PG 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,16 +18,12 @@ The \fBsisu\-pq\fR command is an alias for \fBsisu \-\-pg\fR (or \fBsisu \-D\fR)  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1),  .br  \fIsisu\-pdf\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-odf\fR(1),  .br  \fIsisu\-sqlite\fR(1), diff --git a/man/man1/sisu-po.1 b/man/man1/sisu-po.1 deleted file mode 100644 index 7581369d..00000000 --- a/man/man1/sisu-po.1 +++ /dev/null @@ -1,42 +0,0 @@ -.TH SISU\-PO 1 "2011\-03\-05" "2.8.1" "SiSU" - -.SH NAME -\fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system - -.SH SYNOPSIS -\fBsisu\-po\fR \fIsisu_document.sst\fR | \fIsisu_document.ssm\fR - -.SH DESCRIPTION -\fBSiSU\fR is a lightweight markup based document structuring, publishing and search framework for document collections. -.PP -The \fBsisu\-po\fR command is an alias for \fBsisu \-\-po4a\fR (or \fBsisu \-o\fR) which provided two sisu markup files of the same document in different languages produces .pot and .po output of a SiSU markup file. Experimental, and under development. - -.SH SEE ALSO -\fIsisu\fR(1), -.br -\fIsisu\-concordance\fR(1), -.br -\fIsisu\-epub\fR(1), -.br -\fIsisu\-git\fR(1), -.br -\fIsisu\-harvest\fR(1), -.br -\fIsisu\-html\fR(1), -.br -\fIsisu\-odf\fR(1), -.br -\fIsisu\-pdf\fR(1), -.br -\fIsisu\-pg\fR(1), -.br -\fIsisu\-sqlite\fR(1), -.br -\fIsisu\-txt\fR(1). - -.SH HOMEPAGE -More information about \fBSiSU\fR can be found at <\fIhttp://www.sisudoc.org/\fR> or <\fIhttp://www.jus.uio.no/sisu/\fR>. - -.SH AUTHOR -\fBSiSU\fR is written by Ralph Amissah <\fIralph@amissah.com\fR>. - diff --git a/man/man1/sisu-sqlite.1 b/man/man1/sisu-sqlite.1 index 07b68619..96e091be 100644 --- a/man/man1/sisu-sqlite.1 +++ b/man/man1/sisu-sqlite.1 @@ -1,4 +1,4 @@ -.TH SISU\-SQLITE 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-SQLITE 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-sqlite\fR command is an alias for \fBsisu \-\-sqlite\fR (or \fBsisu  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -30,8 +28,6 @@ The \fBsisu\-sqlite\fR command is an alias for \fBsisu \-\-sqlite\fR (or \fBsisu  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-txt\fR(1).  .SH HOMEPAGE diff --git a/man/man1/sisu-txt.1 b/man/man1/sisu-txt.1 index 68d1b080..87fa6625 100644 --- a/man/man1/sisu-txt.1 +++ b/man/man1/sisu-txt.1 @@ -1,4 +1,4 @@ -.TH SISU\-TXT 1 "2011\-03\-05" "2.8.1" "SiSU" +.TH SISU-TXT 1 "2011-03-05" "2.8.1" "SiSU"  .SH NAME  \fBSiSU\fR \- Structured information, Serialized Units \- a document publishing system @@ -18,8 +18,6 @@ The \fBsisu\-txt\fR command is an alias for \fBsisu \-\-txt\fR (or \fBsisu \-t\f  .br  \fIsisu\-epub\fR(1),  .br -\fIsisu\-git\fR(1), -.br  \fIsisu\-harvest\fR(1),  .br  \fIsisu\-html\fR(1), @@ -30,8 +28,6 @@ The \fBsisu\-txt\fR command is an alias for \fBsisu \-\-txt\fR (or \fBsisu \-t\f  .br  \fIsisu\-pg\fR(1),  .br -\fIsisu\-po\fR(1), -.br  \fIsisu\-sqlite\fR(1).  .SH HOMEPAGE diff --git a/man/man1/sisu_webrick.1 b/man/man1/sisu-webrick.1 index 2cfe9455..2cfe9455 100644 --- a/man/man1/sisu_webrick.1 +++ b/man/man1/sisu-webrick.1 diff --git a/man/man1/sisu.1 b/man/man1/sisu.1 index 35af5f8d..4f82611f 100644 --- a/man/man1/sisu.1 +++ b/man/man1/sisu.1 @@ -1,4 +1,4 @@ -.TH "sisu" "1" "2012-05-25" "3.2.10" "SiSU" +.TH "sisu" "1" "2012-11-05" "4.0.0" "SiSU"  .br  .SH NAME  .br diff --git a/man/man1/sisu2.1 b/man/man1/sisu4.1 index 09708b31..09708b31 120000 --- a/man/man1/sisu2.1 +++ b/man/man1/sisu4.1 diff --git a/man/man1/sisu_termsheet.1 b/man/man1/sisu_termsheet.1 deleted file mode 100644 index 518e65fc..00000000 --- a/man/man1/sisu_termsheet.1 +++ /dev/null @@ -1,66 +0,0 @@ -.\"  Name: SiSU information Structuring Universe -.\"  Author: Ralph Amissah -.\"  Description: sisu termsheet (preprocessing) manpage -.\"  arch-tag: sisu manpage -.\"  License: GPL 3 or later -.\"  Notes: Process this file with -.\"    groff -man -Tascii sisu.1 -.\"    nroff -man sisu.1 | most -.\"  |sisu.1|@|^|<url:sisu.1> -.TH sisu_termsheet 1  "December 17, 2005" "version 0.34" "SiSU termsheet merge (sisu \-t [termsheet\-name])" -.SH NAME -.B SiSU -\- Structured information, Serialized Units \- a document publishing system -.SH SYNOPSIS -.PP -.B sisu -.B \-t -.I [termsheet\-name(s)] -.\"%% Description -.SH DESCRIPTION -.B sisu_termsheet -.I is part of SiSU is -.B invoked -.I through the sisu command (man sisu) -.PP -.\"%% Summary -.SH Summary of man page -.PP -sisu_termsheet, is started with the command: -.B sisu \-\-termsheet -.I [termsheet\-name(s)] -.\"%% Flags -.SH DOCUMENT PROCESSING COMMAND FLAGS -.PP -.BI sisu \ \-t \ [termsheet\-name(s)] -(runs sisu_termsheet) merges the termsheet(s) specified on the commandline with the documents it is instructed to merge in the termsheet(s), and produces regular -.I SiSU -output documents from the merged results. -.PP -[further documentation on termsheets required] -.\"%% Further Information -.SH FURTHER INFORMATION -.PP -For more information on -.I SiSU -see: -.I <http://www.jus.uio.no/sisu> -.PP -or -.I man sisu -.SH AUTHOR -Ralph Amissah -.I <ralph@amissah.com> -or -.I <ralph.amissah@gmail.com> -.SH SEE ALSO -.BR sisu(1), -.BR sisu(8), -.BR sisu_webrick(1), -.BR sisu_vim(7) - -.SH HOMEPAGE -More information about \fBSiSU\fR can be found at <\fIhttp://www.sisudoc.org/\fR> or <\fIhttp://www.jus.uio.no/sisu/\fR>. - -.SH AUTHOR -\fBSiSU\fR is written by Ralph Amissah <\fIralph@amissah.com\fR>.  | 
