aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v4
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v4')
-rw-r--r--lib/sisu/v4/air.rb85
-rw-r--r--lib/sisu/v4/author_format.rb116
-rw-r--r--lib/sisu/v4/cgi.rb90
-rw-r--r--lib/sisu/v4/cgi_pgsql.rb296
-rw-r--r--lib/sisu/v4/cgi_sql_common.rb1085
-rw-r--r--lib/sisu/v4/cgi_sqlite.rb257
-rw-r--r--lib/sisu/v4/composite.rb254
-rw-r--r--lib/sisu/v4/concordance.rb373
-rw-r--r--lib/sisu/v4/conf.rb257
-rw-r--r--lib/sisu/v4/constants.rb355
-rw-r--r--lib/sisu/v4/css.rb3443
-rw-r--r--lib/sisu/v4/dal.rb528
-rw-r--r--lib/sisu/v4/dal_character_check.rb107
-rw-r--r--lib/sisu/v4/dal_doc_objects.rb481
-rw-r--r--lib/sisu/v4/dal_doc_str.rb1368
-rw-r--r--lib/sisu/v4/dal_endnotes.rb128
-rw-r--r--lib/sisu/v4/dal_expand_insertions.rb450
-rw-r--r--lib/sisu/v4/dal_hash_digest.rb157
-rw-r--r--lib/sisu/v4/dal_idx.rb326
-rw-r--r--lib/sisu/v4/dal_images.rb161
-rw-r--r--lib/sisu/v4/dal_metadata.rb82
-rw-r--r--lib/sisu/v4/dal_misc_arrange.rb157
-rw-r--r--lib/sisu/v4/dal_numbering.rb473
-rw-r--r--lib/sisu/v4/dal_syntax.rb631
-rw-r--r--lib/sisu/v4/db_columns.rb2001
-rw-r--r--lib/sisu/v4/db_create.rb618
-rw-r--r--lib/sisu/v4/db_dbi.rb96
-rw-r--r--lib/sisu/v4/db_drop.rb194
-rw-r--r--lib/sisu/v4/db_import.rb734
-rw-r--r--lib/sisu/v4/db_indexes.rb117
-rw-r--r--lib/sisu/v4/db_load_tuple.rb326
-rw-r--r--lib/sisu/v4/db_remove.rb124
-rw-r--r--lib/sisu/v4/db_select.rb224
-rw-r--r--lib/sisu/v4/db_sqltxt.rb133
-rw-r--r--lib/sisu/v4/db_tests.rb120
-rw-r--r--lib/sisu/v4/dbi.rb148
-rw-r--r--lib/sisu/v4/dbi_discrete.rb184
-rw-r--r--lib/sisu/v4/defaults.rb1211
-rw-r--r--lib/sisu/v4/digests.rb389
-rw-r--r--lib/sisu/v4/embedded.rb145
-rw-r--r--lib/sisu/v4/epub.rb753
-rw-r--r--lib/sisu/v4/epub_concordance.rb324
-rw-r--r--lib/sisu/v4/epub_format.rb2236
-rw-r--r--lib/sisu/v4/epub_segments.rb539
-rw-r--r--lib/sisu/v4/epub_tune.rb329
-rw-r--r--lib/sisu/v4/errors.rb89
-rw-r--r--lib/sisu/v4/git.rb236
-rw-r--r--lib/sisu/v4/harvest.rb116
-rw-r--r--lib/sisu/v4/harvest_authors.rb406
-rw-r--r--lib/sisu/v4/harvest_topics.rb826
-rw-r--r--lib/sisu/v4/html.rb704
-rw-r--r--lib/sisu/v4/html_format.rb1426
-rw-r--r--lib/sisu/v4/html_minitoc.rb218
-rw-r--r--lib/sisu/v4/html_promo.rb445
-rw-r--r--lib/sisu/v4/html_scroll.rb224
-rw-r--r--lib/sisu/v4/html_segments.rb634
-rw-r--r--lib/sisu/v4/html_table.rb68
-rw-r--r--lib/sisu/v4/html_tune.rb297
-rw-r--r--lib/sisu/v4/hub.rb741
-rw-r--r--lib/sisu/v4/i18n.rb707
-rw-r--r--lib/sisu/v4/manifest.rb930
-rw-r--r--lib/sisu/v4/manpage.rb423
-rw-r--r--lib/sisu/v4/manpage_format.rb106
-rw-r--r--lib/sisu/v4/odf.rb807
-rw-r--r--lib/sisu/v4/odf_format.rb667
-rw-r--r--lib/sisu/v4/options.rb1077
-rw-r--r--lib/sisu/v4/param.rb1435
-rw-r--r--lib/sisu/v4/param_identify_markup.rb166
-rw-r--r--lib/sisu/v4/param_make.rb668
-rw-r--r--lib/sisu/v4/particulars.rb235
-rw-r--r--lib/sisu/v4/plaintext.rb427
-rw-r--r--lib/sisu/v4/plaintext_format.rb116
-rw-r--r--lib/sisu/v4/po4a.rb980
-rw-r--r--lib/sisu/v4/po4a_set.rb300
-rw-r--r--lib/sisu/v4/prog_text_translation.rb1707
-rw-r--r--lib/sisu/v4/qrcode.rb726
-rw-r--r--lib/sisu/v4/relaxng.rb1161
-rw-r--r--lib/sisu/v4/remote.rb205
-rw-r--r--lib/sisu/v4/response.rb78
-rw-r--r--lib/sisu/v4/rexml.rb127
-rw-r--r--lib/sisu/v4/screen_text_color.rb487
-rw-r--r--lib/sisu/v4/share_src.rb95
-rw-r--r--lib/sisu/v4/share_src_kdissert.rb90
-rw-r--r--lib/sisu/v4/shared_html.rb68
-rw-r--r--lib/sisu/v4/shared_html_lite.rb325
-rw-r--r--lib/sisu/v4/shared_images.rb141
-rw-r--r--lib/sisu/v4/shared_markup_alt.rb321
-rw-r--r--lib/sisu/v4/shared_metadata.rb1257
-rw-r--r--lib/sisu/v4/shared_sem.rb162
-rw-r--r--lib/sisu/v4/shared_sisupod_source.rb308
-rw-r--r--lib/sisu/v4/shared_txt.rb234
-rw-r--r--lib/sisu/v4/shared_xhtml.rb68
-rw-r--r--lib/sisu/v4/shared_xml.rb721
-rw-r--r--lib/sisu/v4/sisupod_make.rb155
-rw-r--r--lib/sisu/v4/sitemaps.rb220
-rw-r--r--lib/sisu/v4/spell.rb104
-rw-r--r--lib/sisu/v4/sst_convert_markup.rb315
-rw-r--r--lib/sisu/v4/sst_do_inline_footnotes.rb476
-rw-r--r--lib/sisu/v4/sst_from_xml.rb175
-rw-r--r--lib/sisu/v4/sst_identify_markup.rb487
-rw-r--r--lib/sisu/v4/sst_to_s_xml_sax.rb452
-rw-r--r--lib/sisu/v4/sysenv.rb6413
-rw-r--r--lib/sisu/v4/termsheet.rb167
-rw-r--r--lib/sisu/v4/texinfo.rb419
-rw-r--r--lib/sisu/v4/texinfo_format.rb544
-rw-r--r--lib/sisu/v4/texpdf.rb1064
-rw-r--r--lib/sisu/v4/texpdf_format.rb1688
-rw-r--r--lib/sisu/v4/update.rb142
-rw-r--r--lib/sisu/v4/urls.rb456
-rw-r--r--lib/sisu/v4/utils.rb169
-rw-r--r--lib/sisu/v4/webrick.rb188
-rw-r--r--lib/sisu/v4/wikispeak.rb369
-rw-r--r--lib/sisu/v4/xhtml.rb438
-rw-r--r--lib/sisu/v4/xhtml_table.rb102
-rw-r--r--lib/sisu/v4/xml.rb472
-rw-r--r--lib/sisu/v4/xml_dom.rb543
-rw-r--r--lib/sisu/v4/xml_fictionbook.rb305
-rw-r--r--lib/sisu/v4/xml_format.rb1421
-rw-r--r--lib/sisu/v4/xml_md_oai_pmh_dc.rb234
-rw-r--r--lib/sisu/v4/xml_scaffold.rb204
-rw-r--r--lib/sisu/v4/xml_tables.rb202
-rw-r--r--lib/sisu/v4/zap.rb88
122 files changed, 0 insertions, 64372 deletions
diff --git a/lib/sisu/v4/air.rb b/lib/sisu/v4/air.rb
deleted file mode 100644
index 1965eb10..00000000
--- a/lib/sisu/v4/air.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/air.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_Air
- require_relative 'particulars' # particulars.rb
- class Source
- @@dal_array=[]
- @@fns=nil
- def initialize(opt)
- @opt=opt
- @@fns||@opt.fns
- @particulars=SiSU_Particulars::Combined.new(opt)
- #@env=@particulars.env
- #@md=@particulars.md
- #@dal_array=@particulars.dal_array
- end
- def read
- end
- protected
- def print
- puts @particulars.md.inspect
- puts @particulars.env.inspect
- puts @particulars.dal_array
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/author_format.rb b/lib/sisu/v4/author_format.rb
deleted file mode 100644
index 479fbc8b..00000000
--- a/lib/sisu/v4/author_format.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/author_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_FormatAuthor
- class Author
- def initialize(author_param)
- @author_param=author_param
- end
- def author_details
- @authors,@author_array=[],[]
- authors=@author_param.scan(/[^;]+/)
- authors.each do |a|
- a=a.strip
- if a =~/"(.+?)"/
- @authors << { the: $1 }
- @author_array << $1.upcase
- else #if a =~/,/
- x=a.scan(/[^,]+/)
- x[0]=x[0].strip
- x[1]=x[1].strip if x[1]
- if x.length==1
- @authors << { the: x[0] }
- @author_array << x[0].upcase
- elsif x.length==2
- @authors << { the: x[0], others: x[1] }
- @author_array << "#{x[0].upcase}, #{x[1]}"
- else #p x.length
- end
- end
- end
- l = @authors.length
- authors_string=''
- @authors.each_with_index do |a,i|
- authors_string += if a[:others]
- if (l - i) > 1
- "#{a[:others]} #{a[:the]}, "
- else
- "#{a[:others]} #{a[:the]}"
- end
- else
- if (l - i) > 2
- "#{a[:the]}, "
- else
- "#{a[:the]}"
- end
- end
- end
- {
- last_first_a: authors,
- last_first_format_a: @author_array,
- authors_h: @authors,
- authors_s: authors_string,
- authors_param: @author_param
- }
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/cgi.rb b/lib/sisu/v4/cgi.rb
deleted file mode 100644
index acaa5396..00000000
--- a/lib/sisu/v4/cgi.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/cgi.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: generates naive cgi search form for search of sisu database
- (pgsql sqlite)
-
-=end
-module SiSU_CGI #% database building documents
- 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
- end
- def read
- if @opt.mod.inspect =~/--db[=-]["']?(?:pg|pg?sql|postgres(?:ql)?)["']+/
- SiSU_CGI_PgSQL::SearchPgSQL.new(@opt,@webserv).pgsql
- elsif @opt.mod.inspect =~/--db[=-](?:sqlite)/
- SiSU_CGI_SQLite::SearchSQLite.new(@opt,@webserv).sqlite
- else
- puts <<-WOK
- please select database type for which sample search form should be built (pgsql or sqlite)
- sisu --sample-search-form --db=sqlite
- sisu --sample-search-form --db=pg
- other options include
- --webserv-cgi='[cgi-server-name]'
- --webserv-output='[sisu-output-server-with-base-path]'
- WOK
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/cgi_pgsql.rb b/lib/sisu/v4/cgi_pgsql.rb
deleted file mode 100644
index f012fb51..00000000
--- a/lib/sisu/v4/cgi_pgsql.rb
+++ /dev/null
@@ -1,296 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/cgi_pgsql.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: generates naive cgi search form for search of sisu database (pgsql)
-
-=end
-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
- @cX=SiSU_Screen::Ansi.new(opt.cmd).cX
- @env=SiSU_Env::InfoEnv.new('',opt)
- @sys=SiSU_Env::SystemCall.new
- @db=SiSU_Env::InfoDb.new
- get_init=SiSU_Env::GetInit.new
- @rc=get_init.sisu_yaml.rc
- @name_of={}
- @name_of[:output_dir_structure]=if @opt.dir_structure_by.to_s =~/(?:language|filetype|filename)/
- @opt.dir_structure_by.to_s
- else 'language'
- end
- @name_of[:lingual]=if @opt.lingual.to_s =~/(?:mono|multi)/
- @opt.lingual.to_s
- else 'multi'
- end
- if defined? @rc['search'] \
- and defined? @rc['search']['sisu'] \
- and defined? @rc['search']['sisu']['action'] \
- and @rc['search']['sisu']['action'] =~/https?:\/\/\S+?\.cgi/ \
- and defined? @rc['search']['sisu']['db'] \
- and @rc['search']['sisu']['db'] =~/\S+/
- @name_of[:db]=@rc['search']['sisu']['db']
- else
- @name_of[:db]=@env.path.stub_pwd #'sisu' #breaks if not present
- false
- end
- @name_of[:host_url_cgi]="#{@env.url.webserv_base_cgi(@opt)}/cgi-bin"
- @name_of[:host_url_docs]=@env.url.webserv_files_from_db(@opt)
- @name_of[:cgi_script]=@env.url.cgi_sample_search_form_name(@opt)
- @name_of[:user]=@db.psql.user(@opt)
- @cgi_file_name=@name_of[:cgi_script]
- @image_src="#{@env.url.webserv_base_cgi(@opt)}/_sisu/image_sys"
- @common=SiSU_CGI_SQL::CGI_Common.new(@webserv,@opt,@image_src,@env)
- end
- def pgsql
- serve=[]
- if @sys.psql
- 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.is_a?(Array)
- available_db.flatten.each do |x|
- serve << x.gsub(/#{Db[:name_prefix]}(\S+)/,'\1')
- end
- else STDERR.puts "WARNING: no postgresql database available, (have you created one?)"
- end
- serve=serve.sort
- f1,f2='',''
- serve.each do |x|
- f1 << %{ <option value="#{Db[:name_prefix]}#{x}">#{x}</option>\n} unless x =~/apache|sisu\/image/ #check
- end
- end
- f2 << %q{ selected_db=%{<option value="#{@db_name_prefix}#{@stub}">#{@stub}</option>}} + "\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 << @common.dir_structure << @common.main3
- puts <<-WOK
- generated sample search form: #{@cX.green}#{@cgi_file_name}#{@cX.off}
- default database name: #{@cX.green}#{Db[:name_prefix]}#{@name_of[:db]}#{@cX.off} (#{@name_of[:db]})
- db user: #{@cX.green}#{@name_of[:user]}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-pg --db-user='#{@name_of[:user]}'#{@cX.off}
- cgi & db host on: #{@cX.blue}#{@name_of[:host_url_cgi]}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-pg --webserv-search='#{@name_of[:host_url_cgi]}'#{@cX.off}
- sisu output on: #{@cX.blue}#{@name_of[:host_url_docs]}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-pg --webserv-output='#{@name_of[:host_url_docs]}'#{@cX.off}
- cgi search form link name: #{@cX.green}#{@name_of[:cgi_script]}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-pg --cgi-search-form-name='#{@name_of[:cgi_script]}'#{@cX.off}
- #{@cX.fuchsia}(settings priority: command line; sisurc.yml; else defaults)#{@cX.off}
-
- #{@cX.fuchsia}BASED ON ALREADY EXISTING databases#{@cX.off} (default database name: #{@db.psql.db})
- NOTE it is first necessary to createdb,
- use sisu to create the tables & populate the postgresql db
-
- the database to be used for this directory (#{@db.psql.db})
- will have to be created manually if it does not exist:
- using postgresql tools directly (the following may work):
- (i) if you are not yet a postgresql user,
- #{@cX.brown}sudo su postgres
- createuser -d -a #{@env.user}
- exit#{@cX.off}
- (ii) create the database:
- #{@cX.brown}createdb #{@db.psql.db}#{@cX.off}
- [for a list of existing databases try 'psql --list']"
-
- now you can use sisu to create the database tables and populate the database with documents
-
- sisu --pg --dropall # removes existing postgresql db & tables
- sisu --pg --createall -v # creates postgresql db & tables
- sisu --pg --update -v *.sst *.ssm # populate the db
- sisu --sample-search-form --pg # creates the postgresql search form
- # this should be done after creating the db
- # to be searched
- sisu --webrick & # starts ruby webrick web server
-
- # if necessary make the directory '/usr/lib/cgi-bin'
- # here we copy the postgresql search form to cgi-bin
- # (copy #{@cgi_file_name} to your cgi directory)
- # set file permissions to 755
- WOK
- a=case @webserv
- when /pwd/; ''
- else <<-WOK
-
- sudo cp -vi #{Dir.pwd}/#{@cgi_file_name} /usr/lib/cgi-bin/.; \\
- sudo chmod -v 755 /usr/lib/cgi-bin/#{@cgi_file_name}
- WOK
- end
- SiSU_Screen::Ansi.new(@opt.cmd,a).warn
- a=<<-WOK
- #{@env.webserv_base_cgi(@opt)}/cgi-bin/#{@cgi_file_name}
- WOK
- SiSU_Screen::Ansi.new(@opt.cmd,a).print_blue
- a="\n\t(to create and populate postgresql database see 'man sisu' and in particular the --pg option)\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\tusing postgresql tools directly: 'createdb #{@db.psql.db}' for a list of existing databases try 'psql --list']"
- SiSU_Screen::Ansi.new(@opt.cmd,a).txt_grey
- else puts 'failed in attempt to write #{@cgi_file_name} to present directory, is directory writable?'
- end
- end
- def header0
- <<-WOK_SQL
-#!/usr/bin/env ruby
-=begin
-#{about}
- * Description: generates naive cgi search form for search of sisu database (pgsql)
-#{gpl}
-=end
- require 'cgi'
- require 'fcgi'
- require 'dbi'
- @stub_default='#{@name_of[:db]}'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@name_of[:host_url_cgi]}'
- @hosturl_files='#{@name_of[:host_url_docs]}'
- @output_dir_structure_by='#{@name_of[:output_dir_structure]}'
- @lingual='#{@name_of[:lingual]}'
- @port='#{@db.psql.port}'
- @db_name_prefix='#{Db[:name_prefix]}'
- @user='#{@name_of[:user]}' # check user name for access to pg database: e.g. www-data or '#{@env.user}'
- @base='#{@name_of[:host_url_cgi]}/#{@name_of[:cgi_script]}'
- WOK_SQL
- end
- def search_statement
- <<-'WOK_SQL'
- 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 }
- if @t =~/\S+/ or @q =~/\S+/
- if @t =~/\S+/ then unescaped_search=CGI.unescape(@t)
- elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q)
- end
- search_construct=[]
- 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}~*\( '").
- gsub(/(.+)/,"#{@l}~*\( '\\1' \)")
- end
- search_construct << unescaped_search
- search_construct=search_construct.join(' ')
- search[:search] << search_construct
- search[:flag]=true
- search
- end
- search
- end
- end
- WOK_SQL
- end
- def search_query1
- <<-'WOK_SQL'
- @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
- def search_query2
- <<-'WOK_SQL'
- 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.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
- end
- 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, 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
- end
- def sql_select_body_format
- %{<font color="#666666" size="2">#{sql_select_body}</font>}
- end
- def sql_select_endnotes_format
- %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}
- end
- def contents
- @conn.select_all(sql_select_body)
- end
- def endnotes
- @conn.select_all(sql_select_endnotes)
- end
- end
- WOK_SQL
- end
- def buttons1_pgsql
- <<-'WOK_SQL'
- <input type="checkbox" name="casesense" #{@checked_case}> case sensitive
- WOK_SQL
- end
- def dbi_connect
- <<-'WOK_SQL'
- dbi="dbi:Pg:database=#{@db};port=#{@port}"
- @conn=DBI.connect(dbi,@user)
- WOK_SQL
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/cgi_sql_common.rb b/lib/sisu/v4/cgi_sql_common.rb
deleted file mode 100644
index 2597b4a2..00000000
--- a/lib/sisu/v4/cgi_sql_common.rb
+++ /dev/null
@@ -1,1085 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/cgi_sql_common.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: generates naive cgi search form for search of sisu database (pgsql sqlite)
-
-=end
-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'
- * Name: SiSU information Structuring Universe
- * Author: Ralph Amissah
- * http://www.jus.uio.no/sisu
- * http://www.jus.uio.no/sisu/SiSU/download
- WOK_SQL
- end
- def gpl
- <<-'WOK_SQL'
- * Name: SiSU generated sample cgi search form
-
- * Description: generated sample cgi search form for SiSU
- (SiSU is a framework for document structuring, publishing and search)
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997 - 2013, Ralph Amissah, All Rights Reserved.
-
- * License: GPL 3 or later:
-
- SiSU, a framework for document structuring, publishing and search
-
- Copyright (C) Ralph Amissah
-
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
- You should have received a copy of the GNU General Public License along with
- this program. If not, see <http://www.gnu.org/licenses/>.
-
- If you have Internet connection, the latest version of the GPL should be
- available at these locations:
- <http://www.fsf.org/licenses/gpl.html>
- <http://www.gnu.org/licenses/gpl.html>
- <http://www.jus.uio.no/sisu/gpl.fsf>
-
- * 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>
- WOK_SQL
- end
- def header1
- <<-'WOK_SQL'
-#Common TOP
- @@offset=0
- @@canned_search_url=@base
- @color_heading='#DDFFAA'
- @color_match='#ffff48'
- class Form
- def initialize(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='')
- search_note='' if checked_searched !~/\S/
- the_can='' if checked_url !~/\S/
- 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:__; editor:__; contributor:__; date:__; type:__; format:__; identifier:__; source:__; language:__; relation:__; coverage:__; rights:__; comment:__; abstract:__; filename:__;</font><br />'
- else ''
- end
- end
- def submission_form
- search_form=<<-WOK
- WOK_SQL
- end
- def header_desc
- <<-WOK_SQL
- <!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 search form (sample): SiSU information Structuring Universe
- </title>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
- <meta name="sourcefile" content="SiSU._sst" />
- <link rel="generator" href="http://www.jus.uio.no/sisu" />
- <link rel="shortcut icon" href="#{@image_src}/rb7.ico" />
- <link rel="stylesheet" href="../_sisu/css/html.css" type="text/css" />
- </head>
- <body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">
- <table summary="band" border="0" cellpadding="3" cellspacing="0">
- <tr><td width="20%">
- <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
- <tr><td align="left" bgcolor="#ffffff">
- <br /><a href="http://sisudoc.org/" target="_top">
- <b>SiSU</b>
- </a>
- <br /><a href="http://git.sisudoc.org/" target="_top">
- git
- </a>
- </td></tr>
- </table>
- </td>
- <td>
- <label for="find"><b>#{@env.sample_search_form_title(@opt.dir_structure_by)}</b></label>
- </td></tr>
- </table>
- WOK_SQL
- end
- def header2
- <<-'WOK_SQL'
- <form action="#{@base}" id="Test Form" method="post">
- <table cellpadding="2">
- <tr><td valign=\"top\">
- <textarea id="find" name="find" type="text" rows="6" cols="40" maxlength="256">#{@search_field}</textarea>
- </td>
- <td valign=\"top\">
- #{@tip}
- #{@search_note}
- #{@the_can}
- </td></tr></table>
- <td valign=\"top\"><tr><td>
- <!input type="text" id="find" name="find" value="#{@search_field}" />
- <!input type="text" id="find" name="find" value="" />
- <font size="2" color="#222222">
- <b>to search:</b> select which database to search (drop-down menu below); enter your search query (in the form above); and <b>click on the search button</b> (below)
- <br />
- <select name="db" size="1">
- #{@selected_db}
- WOK_SQL
- end
- def buttons1
- <<-'WOK_SQL'
- </select>
- <input type="submit" value="SiSU search" />
- <input type="radio" name="view" value="index" #{@result_type[:index]}> index
- <input type="radio" name="view" value="text" #{@result_type[:text]}> text / grep
- WOK_SQL
- end
- def buttons2
- <<-'WOK_SQL'
- <br />
- match limit:
- <input type="radio" name="sql_match_limit" value="1000" #{@checked_sql_limit[:l1000]}> 1,000
- <input type="radio" name="sql_match_limit" value="2500" #{@checked_sql_limit[:l2500]}> 2,500
- <br />
- <input type="checkbox" name="echo" #{@checked_echo}> echo query
- <input type="checkbox" name="stats" #{@checked_stats}> result stats
- <input type="checkbox" name="url" #{@checked_url}> search url
- <input type="checkbox" name="searched" #{@checked_searched}> searched
- <input type="checkbox" name="tip" #{@checked_tip}> available fields
- <input type="checkbox" name="sql" #{@checked_sql}> sql statement
- <br />
- checks:
- <input type="radio" name="checks" value="check_default" #{@checked_default}> default
- <input type="radio" name="checks" value="check_selected" #{@checked_selected}> selected
- <input type="radio" name="checks" value="check_all" #{@checked_all}> all
- <input type="radio" name="checks" value="check_none" #{@checked_none}> none
- </font>
- </td></tr>
- </table>
- </form>
- WOK
- end
- end
- WOK_SQL
- end
- def search_request
- <<-'WOK_SQL'
- 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=@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:')
- @topic_register=text_to_match('topic_register:')
- @title=text_to_match('title:') # DublinCore 1 - title
- @author=text_to_match('(?:author|creator)s?:') # DublinCore 2 - creator/author
- @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
- @format=text_to_match('format:') # DublinCore 9 - format
- @identifier=text_to_match('identifier:') # DublinCore 10 - identifier
- @source=text_to_match('source:') # DublinCore 11 - source
- @language=text_to_match('language:') # DublinCore 12 - language
- @relation=text_to_match('relation:') # DublinCore 13 - relation
- @coverage=text_to_match('coverage:') # DublinCore 14 - coverage
- @rights=text_to_match('rights:') # DublinCore 15 - rights
- @keywords=text_to_match('key(?:words?)?:')
- @comment=text_to_match('comment:')
- @abstract=text_to_match('abs(?:tract)?:')
- @owner=text_to_match('owner:')
- @date_created=text_to_match('date_created:')
- @date_issued=text_to_match('date_issued:')
- @date_modified=text_to_match('date_modified:')
- @date_available=text_to_match('date_available:')
- @date_valid=text_to_match('date_valid:')
- @filename=text_to_match('filename:')
- @text1=text_to_match unless @keywords or @author or @title or @text1 or @fulltext or @comment or @abstract or @rights or @subject or @publisher or @date or @filename or @topic_register
- else
- @text1=q['s1'] if q['s1']=~/\S/
- @fulltext=q['ft'] if q['ft']=~/\S/
- @keywords=q['key'] if q['key']=~/\S/
- @title=q['ti'] if q['ti']=~/\S/
- @author=q['au'] if q['au']=~/\S/
- @topic_register=q['tr'] if q['tr']=~/\S/
- @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/
- @identifier=q['id'] if q['id']=~/\S/
- @source=q['src'] if q['src']=~/\S/
- @language=q['lang'] if q['lang']=~/\S/
- @relation=q['rel'] if q['rel']=~/\S/
- @coverage=q['cov'] if q['cov']=~/\S/
- @rights=q['cr'] if q['cr']=~/\S/
- @comment=q['co'] if q['co']=~/\S/
- @abstract=q['ab'] if q['ab']=~/\S/
- @date_created=q['dtc'] if q['dtc']=~/\S/
- @date_issued=q['dti'] if q['dti']=~/\S/
- @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/ 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
- end
- end
- def text_to_match(identifier='')
- m={
- 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] 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=str.gsub(/[()]/,'')
- str
- end
- search_string=search_string.strip.gsub(/\s+/,'+')
- #else
- # "__"
- end
- end
- end
- WOK_SQL
- end
- def search_statement_common
- <<-'WOK_SQL'
- 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: '' }
- #@offset||=@@offset
- #@offset+=@@limit
- search={ text: [], endnotes: [] }
- cse=(c =~/\S/) ? true : false
- 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_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.title',search_for.title,q['ti'],cse).string
- if st[:flag]
- search[:text] << st[:search]
- search[:endnotes] << st[:search]
- end
- 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_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_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_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_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_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_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_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_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_SearchString.new('metadata_and_text.notes_type',search_for.type,q['ty'],cse).string
- if st[:flag]
- search[:text] << st[:search]
- search[:endnotes] << st[:search]
- end
- 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_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_SearchString.new('metadata_and_text.notes_relation',search_for.relation,q['rel'],cse).string
- if st[:flag]
- search[:text] << st[:search]
- search[:endnotes] << st[:search]
- end
- st=DBI_SearchString.new('metadata_and_text.notes_coverage',search_for.coverage,q['cov'],cse).string
- if st[:flag]
- search[:text] << st[:search]
- search[:endnotes] << st[:search]
- end
- 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_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_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_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]
- end
- @@limit=q['ltd'] if q['ltd']=~/\d+/ # 1000
- @@offset=q['off'] if q['off']=~/\d+/ # 0
- WOK_SQL
- end
- def pages
- <<-'WOK_SQL'
- def sql_offset
- @@offset
- end
- def sql_match_limit
- @@limit
- end
- def sql_canned_search
- @offset_next=sql_offset.to_i + sql_match_limit.to_i
- @offset_previous=sql_offset.to_i - sql_match_limit.to_i
- def current
- @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + sql_offset.to_s
- end
- def next
- @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_next.to_s
- end
- def previous
- @offset_previous >= 0 \
- ? (@@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s)
- : ''
- end
- def start
- @@canned_search_url.to_s + '&ltd=' + sql_match_limit.to_s + '&off=' + 0.to_s
- end
- self
- end
- def pre_next(beyond_limit,img)
- can=sql_canned_search
- page=(sql_offset.to_i + sql_match_limit.to_i)/sql_match_limit.to_i
- if beyond_limit
- if page.to_s =~ /^1$/
- %{<br /><center>
- pg. #{page.to_s}
- <a href="#{can.next}">
- <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
- </a>
- </center>}
- elsif page.to_s =~ /^2$/
- %{<br /><center>
- <a href="#{can.previous}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
- </a>
- pg. #{page.to_s}
- <a href="#{can.next}">
- <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
- </a>
- </center>}
- else
- %{<br /><center>
- <a href="#{can.start}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
- </a>
- <a href="#{can.previous}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
- </a>
- pg. #{page.to_s}
- <a href="#{can.next}">
- <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt="&nbsp;&gt;&gt;" />
- </a>
- </center>}
- end
- else
- if page.to_s =~ /^1$/ then ''
- elsif page.to_s =~ /^2$/
- %{<br /><center>
- <a href="#{can.previous}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
- </a>
- pg. #{page.to_s}
- </center>}
- else
- %{<br /><center>
- <a href="#{can.start}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|&lt;&nbsp;" />
- </a>
- <a href="#{can.previous}">
- <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="&lt;&lt;&nbsp;" />
- </a>
- pg. #{page.to_s}
- </center>}
- end
- end
- end
- WOK_SQL
- end
- def tail
- v=SiSU_Env::InfoVersion.instance.get_version
- <<-WOK_SQL
- def tail
- <<-'WOK'
- <br /><hr /><br />
-<table summary="SiSU summary" bgcolor="#ffffff" cellpadding="2" border="0">
- <!-- widget sisu -->
-<tr><td valign="top" width="10%">
- <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">
- <tr><td align="left" bgcolor="#ffffff">
- <br /><a href="http://sisudoc.org/" target="_top">
- <b>SiSU</b>
- </a>
- <br /><a href="http://git.sisudoc.org/" target="_top">
- git
- </a>
- </td></tr>
- </table>
-</td>
-<td valign="top" width="45%">
-<!-- SiSU Rights -->
- <p class="tiny_left"><font color="#666666" size="2">
- Generated by
- #{v[:project]} #{v[:version]} #{v[:date]} (#{v[:date_stamp]})
- <br />
- <a href="http://www.sisudoc.org" >
- <b>#{v[:project]}</b></a> <sup>&copy;</sup> Ralph Amissah
- 1993, current 2013.
- All Rights Reserved.
- <br />
- #{v[:project]} is software for document structuring, publishing and search,
- <br />
- <a href="http://www.jus.uio.no/sisu" >
- www.jus.uio.no/sisu
- </a>
- and
- <a href="http://www.sisudoc.org" >
- www.sisudoc.org
- </a>
- sources
- <a href="http://git.sisudoc.org" >
- git.sisudoc.org
- </a>
- <br />
- <i>w3 since October 3 1993</i>
- <a href="mailto:ralph@amissah.com" >
- ralph@amissah.com
- </a>
- <br />
- mailing list subscription
- <a href="http://lists.sisudoc.org/listinfo/sisu" >
- http://lists.sisudoc.org/listinfo/sisu
- </a>
- <br />
- <a href="mailto:sisu@lists.sisudoc.org" >
- sisu@lists.sisudoc.org
- </a>
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- #{v[:project]} using:
- <br />Standard SiSU markup syntax,
- <br />Standard SiSU meta-markup syntax, and the
- <br />Standard SiSU <u>object citation numbering</u> and system, (object/text identifying/locating system)
- <br />
- <sup>&copy;</sup> Ralph Amissah 1997, current 2013.
- All Rights Reserved.
- </font></p>
-</td></tr>
- <!-- widget way better -->
-<tr><td valign="top" width="10%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="http://www.gnu.org/licenses/gpl.html">
- .:
- </a>
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- SiSU is released under
- <a href="http://www.gnu.org/licenses/gpl.html">GPL&nbsp;v3</a>
- or later,
- <a href="http://www.gnu.org/licenses/gpl.html">
- http://www.gnu.org/licenses/gpl.html
- </a>
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- #{v[:project]}, developed using
- <a href="http://www.ruby-lang.org/en/">
- Ruby
- </a>
- on
- <a href="http://www.debian.org/">
- Debian/Gnu/Linux
- </a>
- software infrastructure,
- with the usual GPL (or OSS) suspects.
- </font></p>
-</td></tr>
-</table>
- <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" id="credits"></a>
- </body></html>
- WOK
- end
- WOK_SQL
- end
- def main1
- <<-'WOK_SQL'
- @tail=tail
- @counter_txt_doc,@counter_txt_ocn,@counter_endn_doc,@counter_endn_ocn=0,0,0,0
- @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: [] }
- q=CGI.new
- @db=if cgi['db'] =~ /#{@db_name_prefix}(\S+)/
- @stub=$1
- cgi['db']
- else
- @stub=@stub_default
- @db_name_prefix + @stub
- 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: ''}
- @@limit=if cgi['sql_match_limit'].to_s=~/2500/
- checked_sql_limit={ l1000: '', l2500: 'checked'}
- '2500'
- else
- checked_sql_limit={ l1000: 'checked', l2500: ''}
- '1000'
- end
- checked_echo='checked' if cgi['echo'] =~/\S/
- checked_stats='checked' if cgi['stats'] =~/\S/
- checked_url='checked' if cgi['url'] =~/\S/ or cgi['u'].to_i==1
- checked_searched='checked' if cgi['searched'] =~/\S/
- checked_tip='checked' if cgi['tip'] =~/\S/
- checked_case='checked' if cgi['casesense'] =~/\S/
- checked_sql='checked' if cgi['sql'] =~/\S/
- if cgi['checks'] =~/check_all/ or cgi['check_all'] =~/\S/ or cgi['a'].to_i==1
- checked_all='checked'
- checked_echo=checked_stats=checked_url=checked_searched=checked_tip=checked_sql='checked'
- checked_none=''
- elsif cgi['checks'] =~/check_none/
- checked_none='checked'
- checked_all=checked_url=checked_stats=checked_searched=checked_tip=checked_echo=checked_sql=''
- elsif cgi['checks'] =~/check_selected/
- checked_selected='checked'
- elsif cgi['checks'] =~/check_default/
- checked_default='checked'
- checked_echo=checked_stats=checked_url='checked'
- checked_searched=checked_tip=checked_case=checked_sql=''
- else
- checked_selected='checked'
- checked_echo=checked_stats=checked_url='checked'
- checked_searched=checked_tip=checked_case=checked_sql=''
- end
- WOK_SQL
- end
- def main2
- <<-'WOK_SQL'
- search_field=cgi['find'] if cgi['find'] # =~/\S+/
- @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/
- s1='s1=' + CGI.escape(@search_for.text1) if @search_for.text1=~/\S/
- ft='&ft=' + CGI.escape(@search_for.fulltext) if @search_for.fulltext=~/\S/
- key='key=' + CGI.escape(@search_for.keywords) if @search_for.keywords=~/\S/
- ti='&ti=' + CGI.escape(@search_for.title) if @search_for.title=~/\S/
- au='&au=' + CGI.escape(@search_for.author) if @search_for.author=~/\S/
- tr='&tr=' + CGI.escape(@search_for.topic_register) if @search_for.topic_register=~/\S/
- 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/
- id='&id=' + CGI.escape(@search_for.identifier) if @search_for.identifier=~/\S/
- src='&src=' + CGI.escape(@search_for.source) if @search_for.source=~/\S/
- lang='&lang=' + CGI.escape(@search_for.language) if @search_for.language=~/\S/
- rel='&rel=' + CGI.escape(@search_for.relation) if @search_for.relation=~/\S/
- cov='&cov=' + CGI.escape(@search_for.coverage) if @search_for.coverage=~/\S/
- cr='&cr=' + CGI.escape(@search_for.rights) if @search_for.rights=~/\S/
- co='&co=' + CGI.escape(@search_for.comment) if @search_for.comment=~/\S/
- ab='&ab=' + CGI.escape(@search_for.abstract) if @search_for.abstract=~/\S/
- dtc='&dtc=' + CGI.escape(@search_for.date_created) if @search_for.date_created=~/\S/
- dti='&dti=' + CGI.escape(@search_for.date_issued) if @search_for.date_issued=~/\S/
- dtm='&dtm=' + CGI.escape(@search_for.date_modified) if @search_for.date_modified=~/\S/
- dta='&dta=' + CGI.escape(@search_for.date_available) if @search_for.date_available=~/\S/
- 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}#{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/
- @search[:text][1]=%{doc_objects.clean~'#{@search_for.text1}'} #s1
- @search[:endnotes][1]=%{endnotes.clean~'#{@search_for.text1}'} #s1
- else
- @search[:text][1]=%{doc_objects.clean~*'#{@search_for.text1}'} #s1
- @search[:endnotes][1]=%{endnotes.clean~*'#{@search_for.text1}'} #s1
- end
- canned_note='search url:'
- else
- @@canned_search_url="#{@base}?db=#{@db}&view=index"
- canned_note='search url example:'
- end
- if search_field =~/\S+/
- analyze_format=search_field.gsub(/\s*\n/,'; ')
- 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=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")
- end
- 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_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+/
- p_topic_register=%{topic_register: #{green}#{@search_for.topic_register}</font><br />} if @search_for.topic_register =~/\S+/
- p_subject=%{subject: #{green}#{@search_for.subject}</font><br />} if @search_for.subject =~/\S+/
- p_keywords=%{keywords: #{green}#{@search_for.keywords}</font><br />} if @search_for.keywords =~/\S+/
- p_identifier=%{identifier: #{green}#{@search_for.identifier}</font><br />} if @search_for.identifier =~/\S+/
- p_type=%{type: #{green}#{@search_for.type}</font><br />} if @search_for.type =~/\S+/
- p_format=%{format: #{green}#{@search_for.format}</font><br />} if @search_for.format =~/\S+/
- p_relation=%{relation: #{green}#{@search_for.relation}</font><br />} if @search_for.relation =~/\S+/
- p_coverage=%{coverage: #{green}#{@search_for.coverage}</font><br />} if @search_for.coverage =~/\S+/
- p_description=%{description: #{green}#{@search_for.description}</font><br />} if @search_for.description =~/\S+/
- p_abstract=%{abstract: #{green}#{@search_for.abstract}</font><br />} if @search_for.abstract =~/\S+/
- p_comment=%{comment: #{green}#{@search_for.comment}</font><br />} if @search_for.comment =~/\S+/
- p_publisher=%{publisher: #{green}#{@search_for.publisher}</font><br />} if @search_for.publisher =~/\S+/
- p_source=%{source: #{green}#{@search_for.source}</font><br />} if @search_for.source =~/\S+/
- p_language=%{language: #{green}#{@search_for.language}</font><br />} if @search_for.language =~/\S+/
- search_note=<<-WOK
- <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_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
- @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
- : 'Unavailable'
- if checked_case=~/\S/
- @search[:text]<<%{doc_objects.clean~'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~'#{CGI.unescape(s1)}'}
- else
- @search[:text]<<%{doc_objects.clean~*'#{CGI.unescape(s1)}'}
- @search[:endnotes]<<%{endnotes.clean~*'#{CGI.unescape(s1)}'}
- end
- #% 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='',''
- @search_regx=nil
- oldtid=0
- if @text_search_flag
- if checked_sql =~/\S/
- sql_select_body=dbi_statement.sql_select_body_format
- sql_select_endnotes=dbi_statement.sql_select_endnotes_format
- else sql_select_body,sql_select_endnotes='',''
- end
- @body_main << '<p><hr><br /><b>Main Text:</b><br />' << sql_select_body
- @endnotes << '<p><hr><br /><b>Endnotes:</b><br />' << sql_select_endnotes
- else
- end
- @hostpath="#{@hosturl_files}/#{@stub}"
- WOK_SQL
- end
- def dir_structure #@opt.dir_structure_by
- <<-'WOK_SQL'
- def path_manifest(fn,ln=nil)
- case @output_dir_structure_by
- when 'filename'
- @lingual =='mono' \
- ? "#{@hostpath}/#{fn}/sisu_manifest.html"
- : "#{@hostpath}/#{fn}/sisu_manifest.#{ln}.html"
- when 'filetype'
- @lingual =='mono' \
- ? "#{@hostpath}/manifest/#{fn}.html"
- : "#{@hostpath}/manifest/#{fn}.#{ln}.html"
- else
- "#{@hostpath}/#{ln}/manifest/#{fn}.html"
- end
- end
- def path_html_seg(fn,ln=nil)
- case @output_dir_structure_by
- when 'filename'
- "#{@hostpath}/#{fn}"
- when 'filetype'
- "#{@hostpath}/html/#{fn}"
- else
- "#{@hostpath}/#{ln}/html/#{fn}"
- end
- end
- def path_toc(fn,ln=nil)
- if @output_dir_structure_by =='filename' \
- or @output_dir_structure_by =='filetype'
- @lingual =='mono' \
- ? "#{path_html_seg(fn,ln)}/toc.html"
- : "#{path_html_seg(fn,ln)}/toc.#{ln}.html"
- else
- "#{path_html_seg(fn,ln)}/toc.html"
- end
- end
- def path_filename(fn,seg,ln=nil)
- if @output_dir_structure_by =='filename' \
- or @output_dir_structure_by =='filetype'
- @lingual =='mono' \
- ? "#{path_html_seg(fn,ln)}/#{seg}.html"
- : "#{path_html_seg(fn,ln)}/#{seg}.#{ln}.html"
- else
- "#{path_html_seg(fn,ln)}/#{seg}.html"
- end
- end
- def path_endnotes(fn,ln=nil)
- if @output_dir_structure_by =='filename' \
- or @output_dir_structure_by =='filetype'
- @lingual =='mono' \
- ? "#{path_html_seg(fn,ln)}/endnotes.html"
- : "#{path_html_seg(fn,ln)}/endnotes.#{ln}.html"
- else
- "#{path_html_seg(fn,ln)}/endnotes.html"
- end
- end
- def path_html_doc(fn,ln=nil)
- case @output_dir_structure_by
- when 'filename'
- @lingual =='mono' \
- ? "#{path_html_seg(fn,ln)}/scroll.html"
- : "#{path_html_seg(fn,ln)}/scroll.#{ln}.html"
- when 'filetype'
- @lingual =='mono' \
- ? "#{@hostpath}/html/#{fn}.html"
- : "#{@hostpath}/html/#{fn}.#{ln}.html"
- else
- "#{@hostpath}/#{ln}/html/#{fn}.html"
- end
- end
- WOK_SQL
- 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'][/.+?\.(ssm\.sst|sst)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
- else ''
- end
- #% 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']}&lang=#{c['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
- : %{<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>&nbsp;}
- 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">&nbsp;#{ti}</a></span> [#{c['language_document_char']}] by #{c['creator_author']} <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> #{can_txt_srch}<br />} if file_suffix=~/s/ #hmm watch file_suffix
- title=@text_search_flag \
- ? '<br /><hr>'+title
- : '<br />'+title
- @counter_txt_doc+=1
- oldtid=c['tid'].to_i
- else title=''
- end
- if @text_search_flag
- if cgi['view']=~/text/ \
- or (cgi['view']!~/index/ and cgi['search'] !~/search db/) #% txt body
- text=if c['suffix'] !~/1/ #seg
- if @search_for.text1 =~/\S+/ \
- or q['s1'] =~/\S+/ #% only this branch is working !!
- unescaped_search=if @search_for.text1 =~/\S+/
- CGI.unescape(@search_for.text1)
- elsif q['s1'] =~/\S+/
- CGI.unescape(q['s1'])
- else nil
- end
- @search_regx=if unescaped_search #check
- search_regex=[]
- build=unescaped_search.scan(/\S+/).each do |g|
- (g.to_s =~/(AND|OR)/) \
- ? (search_regex << '|')
- : (search_regex << %{#{g.to_s}})
- end
- search_regex=search_regex.join(' ')
- search_regex=search_regex.gsub(/\s*\|\s*/,'|')
- Regexp.new(search_regex, Regexp::IGNORECASE)
- else nil
- end
- 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']
- %{<hr><p><font size="2">ocn <b><a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{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
- @counter_txt_ocn+=1
- output=title+text
- else #elsif cgi['view']=~/index/ #% idx body
- if c['suffix'] !~/1/ #seg
- index=%{<a href="#{path_filename(location,c['seg'],c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, } if @text_search_flag
- elsif c['suffix'] =~/1/ #doc #FIX
- index=%{<a href="#{path_html_doc(location,c['language_document_char'])}##{c['ocn']}">#{c['ocn']}</a>, }
- end
- if c['seg'] =~/\S+/
- if @text_search_flag
- @counter_txt_ocn+=1
- output=title+index
- end
- else
- @counter_txt_ocn+=1
- output=c['suffix'] !~/1/ \
- ? title+index
- : %{#{title}#{c['ocn'].sort}, }
- end
- end
- else output=title
- end
- @counters_txt=if @counter_txt_doc > 0
- if checked_stats =~/\S/
- @@lt_t=(@counter_txt_ocn==dbi_statement.sql_match_limit.to_i) ? true : false
- start=(@@offset.to_i+1).to_s
- range=(@@offset.to_i+@counter_txt_ocn.to_i).to_s
- %{<hr /><font size="2" color="#666666">Found #{@counter_txt_ocn} times in the main body of #{@counter_txt_doc} documents [ matches #{start} to #{range} ]</font><br />}
- else ''
- end
- else ''
- end
- @body_main << output #+ details
- end
- #text_objects_endnote
- oldtid = 0
- s_endnotes.each do |e| #% endnotes
- location=e['src_filename'][/(.+?)\.(?:ssm\.sst|sst)$/,1]
- file_suffix=e['src_filename'][/.+?\.(ssm\.sst|sst)$/,1]
- lang=if location =~ /\S+?~(\S\S\S?)$/
- l=location[/\S+?~(\S\S\S?)$/,1]
- location=location.gsub(/(\S+?)~\S\S\S?/,'\1')
- l=".#{l}"
- else ''
- end
- #metadata_found_endnotes
- if @text_search_flag
- 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']}&lang=#{e['language_document_char']}&view=text"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a>&nbsp;}
- : %{<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>&nbsp;}
- title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html">&nbsp;#{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a>&nbsp;<a href="#{path_manifest(location,e['language_document_char'])}"><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 = ''
- end
- 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.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="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a></b> referred to from ocn <a href="#{path_html_doc(location,e['language_document_char'])}##{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="#{path_endnotes(location,e['language_document_char'])}#_#{e['nr']}">#{e['nr']}</a> [&sect; <a href="#{path_html_doc(location,e['language_document_char'])}##{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
- : false
- start=(@@offset.to_i+1).to_s
- range=(@@offset.to_i+@counter_endn_ocn.to_i).to_s
- %{<font size="2" color="#666666">Found #{@counter_endn_ocn} times in the endnotes of #{@counter_endn_doc} documents [ matches #{start} to #{range} ]</font><br />}
- else ''
- end
- end
- @endnotes << output #+ details
- 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(false,@image_src).to_s
- limit=dbi_statement.sql_match_limit.to_s
- 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"))
- s << CGI::escapeHTML(e.message) + '</pre>'
- cgi.out{s}
- next
- ensure # eg. disconnect from server
- @conn.disconnect if @conn
- end
- end
- WOK_SQL
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/cgi_sqlite.rb b/lib/sisu/v4/cgi_sqlite.rb
deleted file mode 100644
index da7aa97a..00000000
--- a/lib/sisu/v4/cgi_sqlite.rb
+++ /dev/null
@@ -1,257 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/cgi_sql_sqlite.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: generates naive cgi search form for search of sisu database (sqlite)
-
-=end
-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
- @cX=SiSU_Screen::Ansi.new(opt.cmd).cX
- @env=SiSU_Env::InfoEnv.new('',opt)
- @image_src="#{@env.url.webserv_cgi(@opt)}/_sisu/image_sys"
- @name_of={}
- @name_of[:output_dir_structure]=if @opt.dir_structure_by.to_s =~/(?:language|filetype|filename)/
- @opt.dir_structure_by.to_s
- else 'language'
- end
- @name_of[:lingual]=if @opt.lingual.to_s =~/(?:mono|multi)/
- @opt.lingual.to_s
- else 'multi'
- end
- @common=SiSU_CGI_SQL::CGI_Common.new(@webserv,@opt,@image_src,@env)
- @cgi_file_name=@env.url.cgi_sample_search_form_name(@opt)
- @name_of_sqlite_db_file='sisu_sqlite.db'
- end
- def sqlite
- serve=[]
- Dir.foreach(@env.path.webserv) do |x|
- if x !~/^\./ \
- and FileTest.directory?("#{@env.path.webserv}/#{x}")
- if FileTest.file?("#{@env.path.webserv}/#{x}/#{@name_of_sqlite_db_file}")
- serve << x unless x =~/^_\S+/
- end
- end
- end
- serve=serve.sort
- f1,f2,f3='','',''
- serve.each do |x|
- f1 << %{ <option value="#{Db[:name_prefix]}#{x}">#{x}</option>\n}
- end
- f2 << %{ selected_db=case cgi['db']\n}
- serve.each do |x|
- f2 << %{ when /#{Db[:name_prefix]}#{x}/; '<option value="#{Db[:name_prefix]}#{x}">#{x}</option>'\n}
- end
- f2 << " end\n"
- f3 << %{ db_name='#{@name_of_sqlite_db_file}'\n}
- f3 << %{ db_sqlite=case cgi['db']\n}
- serve.each do |x|
- f3 << %{ when /#{Db[:name_prefix]}#{x}/; "#{@env.path.webserv}/#{x}/\#{db_name}"\n}
- end
- f3 << %{ else '#{@env.path.webserv}/#{serve[0]}/\#{db_name}'\n end\n}
- if FileTest.writable?('.')
- 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
- puts <<-WOK
- generated sample search form: #{@cX.green}#{@cgi_file_name}#{@cX.off}
- default database name: #{@cX.green}#{Db[:name_prefix]}#{@env.path.stub_pwd}#{@cX.off} (#{@env.path.stub_pwd})
- cgi & db host on: #{@cX.blue}#{@env.url.webserv_base_cgi(@opt)}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-sqlite --webserv-search='#{@env.url.webserv_base_cgi(@opt)}'#{@cX.off}
- sisu output on: #{@cX.blue}#{@env.url.webserv_files_from_db(@opt)}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-sqlite --webserv-output='#{@env.url.webserv_files_from_db(@opt)}'#{@cX.off}
- cgi search form link name: #{@cX.green}#{@env.url.cgi_sample_search_form_name(@opt)}#{@cX.off}
- to modify use: #{@cX.brown}sisu --db-sqlite --cgi-search-form-name='#{@env.url.cgi_sample_search_form_name(@opt)}'#{@cX.off}
- #{@cX.fuchsia}(settings priority: command line; sisurc.yml; else defaults)#{@cX.off}
-
- #{@cX.fuchsia}NOTE it is first necessary to create the database and tables and populate it#{@cX.off}
-
- sisu --sqlite --dropall # removes existing postgresql db & tables
- sisu --sqlite --createall -v # creates postgresql db & tables
- sisu --sqlite --update -v *.sst *.ssm # populate the db
- sisu --sample-search-form --sqlite # creates the postgresql search form
- # this should be done after creating the db
- # to be searched
- sisu --webrick & # starts ruby webrick web server
-
- # if necessary make the directory '/usr/lib/cgi-bin'
- # here we copy the postgresql search form to cgi-bin
- # (copy #{@cgi_file_name} to your cgi directory)
- # set file permissions to 755
- WOK
- a=case @webserv
- when /pwd/; ''
- else <<-WOK
-
- sudo cp -vi #{Dir.pwd}/#{@cgi_file_name} /usr/lib/cgi-bin/.; \\
- sudo chmod -v 755 /usr/lib/cgi-bin/#{@cgi_file_name}
- WOK
- end
- 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
- a=<<-WOK
-
- #{@env.webserv_base_cgi(@opt)}/cgi-bin/#{@cgi_file_name}
-
- WOK
- SiSU_Screen::Ansi.new(@opt.cmd,a).print_blue
- else puts "failed in attempt to write #{@cgi_file_name} to present directory, is directory writable?"
- end
- end
- def header0
- <<-WOK_SQL
-#!/usr/bin/env ruby
-=begin
-#{about}
- * Description: generates naive cgi search form for search of sisu database (sqlite)
-#{gpl}
-=end
- require 'cgi'
- require 'fcgi'
- require 'dbi'
- @stub_default='sisu_sqlite'
- @image_src='#{@image_src}'
- @hosturl_cgi='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin'
- @hosturl_files='#{@env.url.webserv_files_from_db(@opt)}'
- @output_dir_structure_by='#{@name_of[:output_dir_structure]}'
- @lingual='#{@name_of[:lingual]}'
- @db_name_prefix='#{Db[:name_prefix]}'
- @base='#{@env.url.webserv_base_cgi(@opt)}/cgi-bin/#{@env.url.cgi_sample_search_form_name(@opt)}' #fix sqlite
- WOK_SQL
- end
- def search_statement
- <<-'WOK_SQL'
- class DBI_SearchString
- def initialize(l,t,q,cse=false)
- @l,@t,@q=l,t,q
- end
- def string
- search={ search: [], flag: false }
- if @t =~/\S+/ or @q =~/\S+/
- if @t =~/\S+/ then unescaped_search=CGI.unescape(@t)
- elsif @q =~/\S+/ then unescaped_search=CGI.unescape(@q)
- end
- search_construct=[]
- 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
- search[:flag]=true
- search
- end
- search
- end
- end
- WOK_SQL
- end
- def search_query1
- <<-'WOK_SQL'
- @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
- def search_query2
- <<-'WOK_SQL'
- 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.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
- end
- 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, 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
- end
- def sql_select_body_format
- %{<font color="#666666" size="2">#{sql_select_body}</font>}
- end
- def sql_select_endnotes_format
- %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}
- end
- def contents
- @conn.select_all(sql_select_body)
- end
- def endnotes
- @conn.select_all(sql_select_endnotes)
- end
- end
- WOK_SQL
- end
- def dbi_connect
- <<-'WOK_SQL'
- @dbi="DBI:SQLite3:#{db_sqlite}" #sqlite3 ?
- @conn=DBI.connect(@dbi)
- WOK_SQL
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/composite.rb b/lib/sisu/v4/composite.rb
deleted file mode 100644
index 2d537f4a..00000000
--- a/lib/sisu/v4/composite.rb
+++ /dev/null
@@ -1,254 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/composite.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: composite documents, assemble/build documents from other
- documents or parts of marked up text
-
-=end
-module SiSU_Assemble
- require_relative 'sysenv' # sysenv.rb
- class RemoteImage
- def initialize
- @env=SiSU_Env::InfoEnv.new
- end
- def image(dir)
- images=[]
- images[0]=dir
- images
- end
- 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|
- imagefile << g.read
- end
- imagefile.close
- end
- output_path="#{@env.path.webserv}/#{@env.path.stub_pwd}/_sisu/image_external"
- FileUtils::mkdir_p(output_path) unless FileTest.directory?(output_path)
- SiSU_Env::SystemCall.new("#{path}/*",output_path,'q').rsync
- end
- end
- class Composite
- @@imager={}
- def initialize(opt)
- @opt=opt
- @env=SiSU_Env::InfoEnv.new
- end
- def read
- begin
- pwd=Dir.pwd
- Dir.chdir(@opt.f_pth[:pth])
- @fns_array=IO.readlines(@opt.fno,'')
- assembled=insertions?
- write(assembled)
- Dir.chdir(pwd)
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def write(assembled)
- 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.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)
- imagefile=File.new(image,'w+')
- open("#{download_from}/#{i}") do |g|
- imagefile << g.read
- end
- imagefile.close
- end
- end
- end
- def insertion(fni,insert_array)
- 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\{/ then true
- elsif i =~/^\}code/ then false
- else @code_flag
- end
- if not @code_flag \
- and i !~/^%+\s/
- i=i.gsub(/^([123]|:?[ABC])~\? /,'% [conditional heading:] \1~ ') #off conditional heading (consider syntax)
- if i =~/^@\S+?:/
- i=i.gsub(/\n/m,"\n% ").
- gsub(/\n%\s+$/m,'').
- gsub(/^@\S+?:/m,"\n% [imported header:] ") #off imported headers
- end
- end
- file[:prepared] << i
- if i !~/^%+\s/ \
- and i =~rgx_image
- file[:images] << i.scan(rgx_image).uniq
- end
- end
- file[:prepared] << "\n% end import" << "\n\n"
- if file[:images].length > 0
- file[:images]=file[:images].flatten.uniq
- file[:images].delete_if {|x| x =~/https?:\/\// }
- end
- file
- end
- def insertions?
- data=@fns_array
- tuned_file,imagedir=[],[]
- SiSU_Screen::Ansi.new(@opt.cmd,'Composite Document',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").grey_title_hi unless @opt.cmd =~/q/
- data.each do |para|
- if para =~/^<<\s+(\S+?\.ss[it])$/ \
- or para =~/^<<\{(\S+?\.ss[it])\}$/ \
- or para =~/^(?:<<\s*)\|(\S+?)\|@\|.+?\|(?:req(?:quire)?\b|\s*\})?/ \
- or para =~/^r\{(.+?)\}/ #depreciated
- 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]$/ # and NetTest
- imagedir = /((?:https?|file):\/\/\S+?)\/[^\/]+?\.ss[ti]$/.match(loadfile).captures.join + '/_sisu/image' #watch
- require 'uri'
- image_uri=URI.parse(imagedir)
- require 'open-uri'
- require 'pp'
- insert=open(loadfile)
- insert_array=insert.dup
- insert.close
- file=insertion(loadfile,insert_array)
- @@imager[image_uri] ||=[]
- @@imager[image_uri] << file[:images]
- file[:prepared]
- elsif loadfile =~ /\.ss[ti]$/ \
- and FileTest.file?(loadfile)
- insert_array=IO.readlines(loadfile,'')
- file=insertion(loadfile,insert_array)
- file[:prepared]
- else
- cX=SiSU_Screen::Ansi.new(@opt.cmd).cX
- STDERR.puts "\t #{cX.fuchsia}ERROR#{cX.off} #{cX.brown}#{@opt.fns}#{cX.off} #{cX.fuchsia}requires invalid or non-existent file:#{cX.off} #{cX.brown}#{loadfile}#{cX.off}"
- para
- end
- else tuned_file << para
- end
- tuned_file=tuned_file.flatten.compact
- end
- if @@imager.length >0
- @@imager.each do |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,'')
- insertions?
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def insertions?
- data=@fns_array
- tuned_file=[]
- SiSU_Screen::Ansi.new(@opt.cmd,'Composite Document',@opt.fno).grey_title_hi unless @opt.cmd =~/q/
- @ssm=[@opt.fns]
- 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.fuchsia}ERROR#{cX.off} #{cX.brown}#{@opt.fns}#{cX.off} #{cX.fuchsia}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/v4/concordance.rb b/lib/sisu/v4/concordance.rb
deleted file mode 100644
index 5387dce3..00000000
--- a/lib/sisu/v4/concordance.rb
+++ /dev/null
@@ -1,373 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/concordance.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: concordance file (html concordance, wordmap, linked index of
- words in document)
-
-=end
-module SiSU_Concordance
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'html_format' # html_format.rb
- include SiSU_HTML_Format
- require_relative 'html_minitoc' # html_minitoc.rb
- class Source
- def initialize(opt)
- @opt=opt
- @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
- end
- def read
- begin
- @env,@md=@particulars.env,@particulars.md
- @env.url.output_tell
- 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).green_hi_blue
- : 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.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.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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- SiSU_Env::CreateSite.new(@opt.cmd).cp_css
- end
- end
- private
- class DocTitle
- include SiSU_Viz
- #revisit, both requires (html & shared_xml) needed for stand alone operation (sisu -w [filename])
- 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
- @file=SiSU_Env::FileOp.new(@md)
- @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="#{@file.path_rel_links.html_seg_2}_sisu/image/sisu.png" alt="SiSU home --&gt;"></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">&nbsp;</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
- @make=SiSU_Env::ProcessingSettings.new(@md)
- end
- def create
- 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
- 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>
-<head>
- <title>
- SiSU created WordIndex for: #{@md.title.full}
- </title>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
- <meta name="Description" content="&nbsp;SiSU created">
- <meta name="keywords" content="word index for #{@md.title.full}">
- <meta name="generator" content="SiSU (Linux &amp; Ruby!)">
- <link rel="generator" href="http://www.jus.uio.no/sisu" />
- <link rel="shortcut icon" href="../_sisu/image/rb7.ico" />
- #{stylesheet.css_head_seg}
-</head>
-<body>
- #{top_band}
- #{toc}
-<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>
- <p>
- <b>word</b> (number of occurences)<br />linked references to word within document <br />
- [if number of occurences exceed number of references - word occurs more than once in at least one reference. Footnote/endnotes are either assigned to the paragraph from which they are referenced or ignored, so it is relevant to check the footnotes referenced from within a paragraph as well.]
- </p>
- <p>
- (After the page is fully loaded) you can jump directly to a word by appending a hash (#) and the word to the url for this text, (do not forget that words are case sensitive, and may be listed twice (starting with and without an upper case letter)), #your_word # [&nbsp;http://[web host]/#{@fnb}/concordance.html#your_word&nbsp;]
- </p>
-WOK
- end
- end
- class Word
- @@word_previous=''
- def initialize(word,freq)
- @word,@freq=word,freq
- end
- def html
- w=if @word.capitalize==@@word_previous
- %{\n<p class="concordance_word">#{@word}</p><p class="concordance_count">(#{@freq})</p>\n\t<p class="concordance_object"> }
- else n=@word.strip.gsub(/\s+/,'_') #also need to convert extended character set to html
- %{\n<p class="concordance_word"><a name="#{n}">#{@word}</a></p><p class="concordance_count">(#{@freq})</p>\n\t<p class="concordance_object"> }
- end
- @@word_previous=@word.capitalize
- w
- end
- end
- class Words
- require_relative 'i18n' # i18n.rb
- include SiSU_i18n
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'html_format' # html_format.rb
- include SiSU_HTML_Format
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Screen
- @@dp=nil
- def initialize(particulars)
- @particulars=particulars
- begin
- @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array
- @file=SiSU_Env::FileOp.new(@md)
- @freq=Hash.new(0)
- @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]
- @rxp_title=Regexp.new("^#{Mx[:meta_o]}title#{Mx[:meta_c]}\s*(.+?)\s*$")
- @rxp_t1=Regexp.new('^T1')
- @rxp_t2=Regexp.new('^T2')
- @rxp_t3=Regexp.new('^T3')
- @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+|&nbsp;|#{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
- @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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def songsheet
- begin
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @file_concordance.close
- end
- end
- protected
- def location_scroll(wordlocation,show)
- %{<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}\##{wordlocation}">#{wordlocation}</a>; }
- end
- def location_seg(wordlocation,show) ##fix
- unless wordlocation.nil?
- wl=wordlocation.gsub(/(.+?)\#(\d+)/,"\\1#{@md.lang_code_insert}#{Sfx[:html]}#\\2")
- case wordlocation
- when /#{@rxp_t1}|@rxp_t2}|#{@rxp_t3}/
- %{[<a href="doc#{@md.lang_code_insert}#{Sfx[:html]}##{show}">H</a>]#{show}, }
- when /(.+?)\#(\d+)/
- %{<a href="#{wl}">#{show}</a>, }
- end
- end
- end
- def map_para
- @seg,ocn=nil,nil
- @word_map={}
- @dal_array.each do |line|
- if defined? line.ocn \
- and line.ocn.to_s =~/\d/
- 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=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
- 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=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=word.capitalize
- end
- @freq[word] +=1
- @word_map[word] ||= []
- if line !~ /#{@rxp_lv1}|#{@rxp_lv2}|#{@rxp_lv3}/
- loc_=%{#{location_seg("#{@seg}\##{ocn}",ocn).to_s}}
- unless loc_.empty?
- @word_map[word] << loc_
- end
- else
- @word_map[word] << case line
- when @rxp_lv1; location_seg('T1',ocn) #fix @rxp_lv # Mx[:lv_o]
- when @rxp_lv2; location_seg('T2',ocn) #fix @rxp_lv # Mx[:lv_o]
- when @rxp_lv3; location_seg('T3',ocn) #fix @rxp_lv # Mx[:lv_o]
- end
- end
- end
- end
- end
- end
- end
- end
- seg=''
- 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>,&nbsp;}}
- @file_concordance << '</p>'
- letter=alph.shift
- @file_concordance << %{\n<p class="letter"><a name="A">A</a></p>}
- for word in @freq.keys.sort! {|a,b| a.downcase<=>b.downcase}
- f=/^(\S)/.match(word)[1]
- if letter < f.upcase
- while letter < f.upcase
- if alph.length > 0
- letter=alph.shift
- @file_concordance << %{\n<p class="letter"><a name="#{letter}">#{letter}</a></p>}
- else break
- end
- end
- end
- keyword=SiSU_Concordance::Source::Word.new(word,@freq[word]).html
- if keyword !~ @rxp_excluded0
- if @word_map[word][0] =~ /\d+/
- @file_concordance << %{#{keyword}#{seg}#{@word_map[word].uniq.compact.join}}
- end
- @file_concordance << '</p>'
- end
- # special cases endnotes and header levels 1 - 3
- end
- @file_concordance << %{</div></body>\n</html>} # footer
- 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
-end
-__END__
diff --git a/lib/sisu/v4/conf.rb b/lib/sisu/v4/conf.rb
deleted file mode 100644
index 8ede007d..00000000
--- a/lib/sisu/v4/conf.rb
+++ /dev/null
@@ -1,257 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/conf.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: configuration
-
-=end
-module SiSU_Initialize
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- include SiSU_Screen
- 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
- 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 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::InfoEnv.new(@opt.fns)
- @suffix,@path={},{}
- @suffix[:rnc]='rnc'
- @suffix[:rng]='rng'
- @suffix[:xsd]='xsd'
- @path[:xml]= @env.path.output + '/_sisu/xml'
- @path[:xsd]= @env.path.output + '/_sisu/xml/xsd'
- @path[:rnc]= @env.path.output + '/_sisu/xml/rnc'
- @path[:rng]= @env.path.output + '/_sisu/xml/rng'
- @pwd,@home=Dir.pwd,@env.path.home
- end
- def make_homepage
- SiSU_Screen::Ansi.new(@opt.cmd,'invert','Make homepage','').colorize unless @opt.cmd =~/q/
- 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::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::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::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::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| 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
- dtd=File.new("#{@env.path.output}/#{@env.path.style}/#{@rxng.rng_name.output_sax}",'w')
- dtd << @rxng.dtd_sax
- dtd.close
- else trang_rnc_model_output_sax
- end
- else trang_rnc_model_output_sax
- end
- if @rxng.methods.join =~/[^_]dtd_dom\b/
- if @rxng.dtd_dom.length > 200
- dtd=File.new("#{@env.path.output}/#{@env.path.style}/#{@rxng.rng_name.output_dom}",'w')
- dtd << @rxng.dtd_dom
- dtd.close
- else trang_rnc_model_output_dom
- end
- else trang_rnc_model_output_dom
- end
- if @rxng.methods.join =~/[^_]dtd_node\b/
- if @rxng.dtd_node.length > 200
- dtd=File.new("#{@env.path.output}/#{@env.path.style}/#{@rxng.rng_name.input_node}",'w')
- dtd << @rxng.dtd_node
- dtd.close
- else trang_rnc_model_input_node
- end
- else trang_rnc_model_input_node
- end
- if @rxng.methods.join =~/[^_]dtd_xhtml\b/
- if @rxng.dtd_xhtml.length > 200
- dtd=File.new("#{@env.path.output}/#{@env.path.style}/#{@rxng.rng_name.output_xhtml}",'w')
- dtd << @rxng.dtd_xhtml
- dtd.close
- else trang_rnc_model_output_xhtml
- end
- else trang_rnc_model_output_xhtml
- end
- end
- def trang_rnc_model_output_sax
- s=@suffix
- 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
- rnc=File.new(rnc_src,'w')
- rnc << @rxng.rnc_model_output_sax
- rnc.close
- #xsd
- schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file)
- schema.relaxng(@opt.cmd)
- #rng
- schema=SiSU_Env::SystemCall.new(rnc_src,rng_file)
- schema.relaxng(@opt.cmd)
- #rnc
- 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.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
- rnc=File.new(rnc_src,'w')
- rnc << @rxng.rnc_model_output_dom
- rnc.close
- #xsd
- schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file)
- schema.relaxng(@opt.cmd)
- #rng
- schema=SiSU_Env::SystemCall.new(rnc_src,rng_file)
- schema.relaxng(@opt.cmd)
- #rnc
- 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.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
- rnc=File.new(rnc_src,'w')
- rnc << @rxng.rnc_model_output_xhtml
- rnc.close
- #xsd
- schema=SiSU_Env::SystemCall.new(rnc_src,xsd_file)
- schema.relaxng(@opt.cmd)
- #rng
- schema=SiSU_Env::SystemCall.new(rnc_src,rng_file)
- schema.relaxng(@opt.cmd)
- #rnc
- 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.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::SystemCall.new(rnc_file,dtd_file)
- schema.relaxng(@opt.cmd)
- end
- def trang_rnc_model_input_dom
- 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::SystemCall.new(rnc_file,dtd_file)
- schema.relaxng(@opt.cmd)
- end
- def trang_rnc_model_input_node
- rnc_file=@env.processing_path.dal + '/node.rnc'
- 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::SystemCall.new(rnc_file,dtd_file)
- schema.relaxng(@opt.cmd)
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/constants.rb b/lib/sisu/v4/constants.rb
deleted file mode 100644
index bb90cdc8..00000000
--- a/lib/sisu/v4/constants.rb
+++ /dev/null
@@ -1,355 +0,0 @@
-# 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, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/constants.rb;hb=HEAD>
-
- * 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='2013'
-Sfx={
- txt: '.txt',
- html: '.html',
- xhtml: '.xhtml',
- xml: '.xml',
- xml_sax: '.sax.xml',
- xml_dom: '.dom.xml',
- epub: '.epub',
- epub_xhtml: '.xhtml',
- odt: '.odt',
- pdf: '.pdf',
- manpage: '.1',
- info: '.info',
- texinfo: '.texinfo',
- sql: '.sql.db',
-}
-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_line: '▭',
- 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_line: { obj: Mx[:br_page_line] }, # line across page
- 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={
- ocn_o: '「', ocn_c: '」',
- url_o: '‹', url_c: '›',
- url_o_xml: '&lt;', url_c_xml: '&gt;',
- rel_o: '‹', rel_c: '›',
- lt_xml: '&lt;', gt_xml: '&gt;',
-}
-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: SiSU_is[:language_list],
- lv1: '*',
- lv2: '=',
- lv3: '=',
- lv4: '-',
- lv5: '.',
- lv6: '.',
-}
-Px[:lng_lst_rgx]=Px[:lng_lst].join('|')
-Ep={
- alt: :on,
- d_oebps: 'OEBPS',
- d_image: 'OEBPS/image',
- d_css: 'OEBPS/css',
- f_ncx: 'toc.ncx',
- f_opf: 'content.opf',
-}
-$ep=if Ep[:alt]==:on
- {
- o: 'opf:',
- hsp: ' ',
- }
-else
- {
- o: '',
- hsp: '&nbsp;',
- }
-end
-Db={
- name_prefix: "SiSU#{SiSU_is[:version_dir]}a_",
- name_prefix_db: "sisu_#{SiSU_is[:version_dir]}a_",
- 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_txt_long: 600,
- col_txt_short: 200,
- col_identify_hash: 256,
- col_library: 30,
- col_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',
-}
-S_CONF={
- header_make: 'sisu_document_make',
- rc_yml: 'sisurc.yml',
-}
-ANSI_C={
- red: "\033[#{31}m",
- green: "\033[#{32}m",
- yellow: "\033[#{33}m",
- blue: "\033[#{34}m",
- fuchsia: "\033[#{35}m",
- cyan: "\033[#{36}m",
- inv_red: "\033[#{41}m",
- inv_green: "\033[#{42}m",
- inv_yellow: "\033[#{43}m",
- inv_blue: "\033[#{44}m",
- inv_fuchsia: "\033[#{45}m",
- inv_cyan: "\033[#{46}m",
- b_red: "\033[#{91}m",
- b_green: "\033[#{92}m",
- b_yellow: "\033[#{93}m",
- b_blue: "\033[#{94}m",
- b_fuchsia: "\033[#{95}m",
- b_cyan: "\033[#{96}m",
- off: "\033[m"
-}
-DISABLE={
- epub: {
- internal_navigation: true,
- per_section_title: true,
- ncx_navpoint_unique_id: true,
- },
-}
-DEVELOPER={
- maintenance: :false,
-}
-__END__
-utils.rb
-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/v4/css.rb b/lib/sisu/v4/css.rb
deleted file mode 100644
index 0a433b31..00000000
--- a/lib/sisu/v4/css.rb
+++ /dev/null
@@ -1,3443 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/css.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: css stylesheets
-
-=end
-module SiSU_Style
- 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
- 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_Viz::Defaults.new
- end
- def fonts
- @vz.font_fonts
- end
- def html_tables #stylesheet for css table_pages
-<<WOK
-/* SiSU table output stylesheet */
- body {
- color: black;
- background: #{@vz.color_white};
- }
- p {
- display: block;
- line-height: 1.5;
- font-family: #{fonts};
- }
- a:link {
- color: #{@vz.color_blue_ink};
- text-decoration: none;
- }
- a:visited {
- color: #{@vz.color_blue_ink};
- text-decoration: none;
- /* background-color: #{@vz.color_blue_tinge}; */
- }
- a:hover {
- color: #{@vz.color_black};
- text-decoration: underline;
- background-color: #{@vz.color_yellow_light};
- }
- a:active {
- color: #{@vz.color_blue_ink};
- text-decoration: underline;
- }
-WOK
- end
- def harvest
- <<WOK
-/* SiSU harvest css default stylesheet */
- body {
- color: black;
- background: #ffffff;
- background-color: #ffffff;
- }
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- }
- a:hover {
- color: #000000;
- background-color: #f9f9aa;
- }
- a:hover img {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
-
- .norm, .bold {
- line-height: 150%;
- margin-left: 1em;
- margin-right: 2em;
- margin-top: 10px;
- margin-bottom: 0px;
- text-indent: 0mm;
- }
- p, h0, h1, h2, h3, h4, h5, h6 {
- display: block;
- font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
- font-size: 100%;
- font-weight: normal;
- line-height: 150%;
- /* text-align: justify; */
- margin-left: 1em;
- text-indent: 0mm;
- margin-top: 2px;
- margin-bottom: 2px;
- margin-right: 6px;
- text-align: left;
- }
- h1 {
- font-size: 120%;
- font-weight: bold;
- color: white;
- background: #000088;
- margin-left: 0em;
- }
- p.work {
- font-size: 80%;
- margin-left: 5em;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- }
- p.author {
- font-size: 100%;
- margin-left: 2em;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- }
- p.publication {
- font-size: 80%;
- margin-left: 4em;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- }
- p.letter {
- font-weight: bold;
- font-size: 60%;
- margin-left: 1em;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- color: white;
- background: #880000;
- }
- p.lev0 {
- font-size: 120%;
- margin-left: 1em;
- color: white;
- background: #000000;
- }
-
- p.lev1 {
- font-size: 110%;
- margin-left: 2em;
- color: white;
- background: #444444;
- }
-
- p.lev2 {
- font-size: 100%;
- margin-left: 3em;
- background: #888888;
- }
-
- p.lev3 {
- font-size: 90%;
- margin-left: 4em;
- background: #bbbbbb;
- }
-
- p.lev4 {
- font-size: 80%;
- margin-left: 5em;
- background: #eeeeee;
- }
-
- p.lev5 {
- font-size: 80%;
- margin-left: 6em;
- }
-WOK
- end
- def html #stylesheet for css html pages== html.css
-<<WOK
-/* SiSU css default stylesheet */
- body {
- color: black;
- background: #ffffff;
- background-color: #ffffff;
- }
-/*
- table {
- margin-left: 5%;
- display: block;
- }
- tr {
- display: block;
- }
- th,td {
- display: inline;
- vertical-align: top;
- }
-*/
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- }
- a:hover {
- color: #000000;
- background-color: #f9f9aa;
- }
- a.lnkocn:link {
- color: #777777;
- text-decoration: none;
- }
-/*
- a:hover {
- border-bottom: 2px solid #777777;
- background-color: #fff3b6;
- }
-*/
- a:hover img {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- div {
- margin-left: 0;
- margin-right: 0;
- }
- div.p {
- margin-left: 5%;
- margin-right: 1%;
- }
-
- #top_band {
- position: absolute;
- top: 0;
- bottom: 80px;
- width: 100%;
- }
- #top_band_search {
- position: absolute;
- top: 0px;
- right: 0px;
- margin-left: 75%;
- width: 20%;
- }
- #column_left {
- position: absolute;
- top: 80px;
- left: 0;
- margin-left: 1%;
- width: 20%;
- }
- #column_center {
- position: absolute;
- top: 80px;
- margin-left: 20%;
- width: 55%;
- }
- #column_right {
- position: absolute;
- top: 80px;
- right: 0px;
- margin-left: 75%;
- width: 25%;
- }
- #pane_major {
- position: absolute;
- top: 0px;
- left: 0;
- margin-left: 0;
- width: 80%;
- }
- #pane_minor {
- position: absolute;
- top: 0px;
- right: 0px;
- margin-left: 75%;
- width: 20%;
- background-color: #aaaaaa;
- }
-
- .norm, .bold, .verse, .group, .block, .alt {
- line-height: 133%;
- margin-left: 0em;
- margin-right: 2em;
- margin-top: 12px;
- margin-bottom: 0px;
- padding-left: 0em;
- text-indent: 0em;
- }
- p, h0, h1, h2, h3, h4, h5, h6 {
- display: block;
- font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
- font-size: 100%;
- font-weight: normal;
- line-height: 133%;
- text-align: justify;
- margin-left: 0em;
- margin-right: 2em;
- text-indent: 0mm;
- margin-top: 0.8em;
- margin-bottom: 0.8em;
- }
-
- /* indent */
-
- p.norm { }
- 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;
- margin-top: 6px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it1 {
- margin-left: 1em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it2 {
- margin-left: 2em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it3 {
- margin-left: 3em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it4 {
- margin-left: 4em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it5 {
- margin-left: 5em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it6 {
- margin-left: 6em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it7 {
- margin-left: 7em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it8 {
- margin-left: 8em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it9 {
- margin-left: 9em;
- margin-bottom: 0px;
- margin-top: 0px;
- line-height: 100%;
- }
-
- p.block { }
-
- p.group { }
-
- p.alt { }
-
- p.verse {
- margin-bottom: 6px;
- }
-
- p.code {
- font-family: inconsolata, andale mono, courier new, courier, monospace;
- font-size: 90%;
- text-align: left;
- background-color: #eeeeee;
- }
-
- p.caption {
- text-align: left;
- font-size: 80%;
- display: inline;
- }
-
- p.endnote {
- font-size: 96%;
- line-height: 120%;
- text-align: left;
- margin-right: 15mm;
- }
- p.endnote_indent {
- font-size: 96%;
- line-height: 120%;
- text-align: left;
- margin-left: 2em;
- margin-right: 15mm;
- }
-
- p.center {
- text-align: center;
- }
- p.bold {
- font-weight: bold;
- }
- p.bold_left {
- font-weight: bold;
- text-align: left;
- }
- p.centerbold {
- text-align: center;
- font-weight: bold;
- }
- p.em {
- font-weight: bold;
- font-style: normal;
- background: #fff3b6;
- }
-
- p.small {
- font-size: 80%;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- }
-
- .tiny, .tiny_left, .tiny_right, .tiny_center {
- font-size: 10px;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 6px;
- text-align: left;
- }
- p.tiny { }
- p.tiny_left {
- margin-left: 0px;
- margin-right: 0px;
- text-align: left;
- }
- p.tiny_right {
- margin-right: 1em;
- text-align: right;
- }
- p.tiny_center {
- margin-left: 0px;
- margin-right: 0px;
- text-align: center;
- }
-
- p.pane, p.pane_title, p.pane_blurb, p.pane_link, p.pane_indent {
- font-size: 80%;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-left: 2mm;
- margin-right: 4px;
- text-align: left;
- }
- p.pane { }
- p.pane_title {
- font-weight: bold;
- margin-bottom: 0px;
- }
- p.pane_blurb {
- font-size: 10px;
- margin-bottom: 0px;
- }
- p.pane_link {
- font-size: 10px;
- margin-bottom: 0px;
- margin-left: 4mm;
- }
- p.pane_indent {
- font-size: 10px;
- margin-bottom: 0px;
- margin-left: 4mm;
- }
-
- p.concordance_word {
- line-height: 150%;
- font-weight: bold;
- display: inline;
- margin-top: 4px;
- margin-bottom: 1px;
- }
- p.concordance_count {
- font-size: 80%;
- color: #777777;
- display: inline;
- margin-left: 0em;
- }
- p.concordance_object {
- font-size: 80%;
- line-height: 120%;
- text-align: left;
- margin-left: 3em;
- margin-top: 1px;
- margin-bottom: 3px;
- }
- p.book_index_lev1 {
- line-height: 100%;
- margin-top: 4px;
- margin-bottom: 1px;
- }
- p.book_index_lev2 {
- line-height: 100%;
- text-align: left;
- margin-left: 3em;
- margin-top: 1px;
- margin-bottom: 3px;
- }
-
- p.quickref {
- font-size: 10px;
- font-style: italic;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 5px;
- text-align: left;
- }
- p.bigref {
- font-size: 11px;
- font-weight: bold;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 5px;
- text-align: center;
- }
-
- p.letter {
- font-weight: bold;
- font-size: 80%;
- margin-left: 0em;
- margin-top: 2px;
- margin-bottom: 2px;
- margin-right: 6px;
- text-align: left;
- color: white;
- background: #880000;
- }
-
- tt {
- font-family: inconsolata, andale mono, courier new, courier, monospace;
- background-color: #eeeeee;
- }
-
- label.ocn {
- width: 2%;
- float: right;
- top: 0;
- font-size: 10px;
- margin-top: 0px;
- margin-bottom: 5px;
- color: #777777;
- margin-right: 5px;
- text-align: right;
- background-color: #ffffff;
- }
-
- table { }
- tr { }
- th,td {
- vertical-align: top;
- text-align: left;
- }
- th {
- font-weight: bold;
- }
-
- p.left,th.left,td.left {
- text-align: left;
- }
- p.small_left,th.small_left,td.small_left {
- text-align: left;
- font-size: 80%;
- }
- p.right,th.right,td.right {
- text-align: right;
- }
-
- #horizontal_links {
- background: #eeeeee;
- margin-left: 5%;
- margin-right: 5%;
- }
- #horizontal {
- margin: 0;
- padding: 0 0 0 10px;
- border-top: 1px solid #000077;
- border-bottom: 1px solid #000077;
- }
- #horizontal li {
- margin: 0 0 0 0;
- padding: 0 16px 0 0;
- display: inline;
- list-style-type: none;
- text-align: left;
- background: none;
- }
- #horizontal a {
- line-height: 12px;
- margin: 0 0 0 0;
- text-decoration: none;
- color: #000077;
- }
- #horizontal a.active, #horizontal a:hover {
- border-bottom: 2px solid #777777;
- padding-bottom: 2px;
- color: #000077;
- }
- #horizontal a:hover {
- color: #000077;
- }
-
- #document_versions {
- position: absolute;
- top: 10mm;
- right: 2%;
- width: 12%;
- float: right;
- }
-
- #vertical_links {
- position: absolute;
- top: 10mm;
- right: 0px;
- width: 20%;
- background: #dddddd;
- float: right;
- }
- #vertical {
- padding: 0 12px 0px 0px;
- margin-left: 2%;
- margin-right: 2%;
- }
- #vertical li {
- display: block;
- list-style-type: none;
- }
- #vertical a {
- line-height: 12px;
- text-decoration: none;
- color: #000077;
- }
- #vertical a.active, #vertical a:hover {
- border-bottom: 2px solid #777777;
- padding-bottom: 2px;
- color: #000077;
- }
-
- ul, li {
- list-style-type: none;
- list-style: none;
- padding-left: 20px;
- display: block;
- font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
- font-weight: normal;
- line-height: 150%;
- text-align: left;
- text-indent: 0mm;
- margin-left: 1em;
- margin-right: 2em;
- margin-top: 3px;
- margin-bottom: 3px;
- }
-
- li {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- }
-
- ul {
- }
- li.bullet { margin-left: 1em; }
- li.i1 { margin-left: 2em; }
- li.i2 { margin-left: 3em; }
- li.i3 { margin-left: 4em; }
- li.i4 { margin-left: 5em; }
- li.i5 { margin-left: 6em; }
- li.i6 { margin-left: 7em; }
- li.i7 { margin-left: 8em; }
- li.i8 { margin-left: 9em; }
- li.i9 { margin-left: 10em; }
-
- li.doc, li.ref, li.refcenter {
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 0px;
- font-size: 8px;
- font-style: normal;
- text-align: left;
- }
- li.doc {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- padding-left: 16px;
- margin-left: 10px;
- margin-right: 0px;
- }
- li.ref {
- background: none;
- padding-left: 0;
- margin-left: 0;
- color: #777777;
- }
- li.refcenter {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- padding-left: 20px;
- margin-left: 10%;
- font-size: 9px;
- color: #777777;
- text-align: center;
- }
- li.refbold {
- list-style-type: none;
- padding-left: 16px;
- margin-left: 0;
- margin-right: 10mm;
- font-weight: bold;
- }
-
- h0, h1, h2, h3, h4, h5, h6 {
- font-weight: bold;
- line-height: 120%;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- h4.norm, h5.norm, h6.norm {
- margin-top: 10px;
- margin-bottom: 0px;
- }
- h1.center, h2.center, h3.center, h4.center, h5.center, h6.center {
- text-align: center;
- }
- h1 { font-size: 120%; }
- h2 { font-size: 115%; }
- h3 { font-size: 110%; }
- h4 { font-size: 105%; }
- h5 { font-size: 100%; }
- h6 { font-size: 100%; }
- h0 { font-size: 80%; }
-
- h1.i {margin-left: 2em;}
- h2.i {margin-left: 3em;}
- h3.i {margin-left: 4em;}
- h4.i {margin-left: 5em;}
- h5.i {margin-left: 6em;}
- h6.i {margin-left: 7em;}
- h7.i {margin-left: 8em;}
- h8.i {margin-left: 9em;}
- h9.i {margin-left: 10em;}
- h1.top_band {
- display: inline;
- text-align: left;
- margin-top: 0;
- margin-left: 4mm;
- text-indent: 0mm;
- font-weight: bold;
- font-size: 120%;
- }
- h2.top_band_tiny {
- font-size: 10px;
- font-weight: normal;
- margin-top: 0px;
- margin-left: 4mm;
- text-indent: 0mm;
- margin-bottom: 0px;
- color: #777777;
- margin-left: 140px;
- margin-right: 0px;
- text-align: left;
- }
-
- p.top_band {
- display: inline;
- text-align: left;
- margin-top: 0;
- margin-left: 140px;
- text-indent: 0mm;
- font-weight: bold;
- font-size: 120%;
- }
- p.top_band_tiny {
- font-size: 10px;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-left: 140px;
- margin-right: 0px;
- text-align: left;
- }
- p.top_band_image {
- float: left;
- display: inline;
- text-align: left;
- margin-top: 0;
- margin-left: 1mm;
- text-indent: 0mm;
- margin-right: 1mm;
- }
-
- .banner, .subbanner {
- font-weight: bold;
- text-align: center;
- margin-left: 10mm;
- margin-right: 15mm;
- margin-top: 20px;
- margin-bottom: 10px;
- }
-
- h1.banner {
- font-size: 120%;
- }
- h1.subbanner {
- font-size: 115%;
- }
- h2.banner {
- font-size: 110%;
- }
- h3.banner {
- color: #990000;
- font-size: 105%;
- }
- h4.banner {
- color: #ff0000;
- font-size: 100%;
- }
- h5.banner {
- }
- h6.banner {
- }
-
- .toc {
- font-weight: normal;
- margin-top: 6px;
- margin-bottom: 6px;
- }
- h1.toc {
- margin-left: 1em;
- font-size: 115%;
- line-height: 150%;
- }
- h2.toc {
- margin-left: 2em;
- font-size: 110%;
- line-height: 140%;
- }
- h3.toc {
- margin-left: 3em;
- font-size: 105%;
- line-height: 120%;
- }
- h4.toc {
- margin-left: 4em;
- font-size: 100%;
- line-height: 120%;
- }
- h5.toc {
- margin-left: 5em;
- font-size: 95%;
- line-height: 110%;
- }
- h6.toc {
- margin-left: 6em;
- font-size: 90%;
- line-height: 110%;
- }
-
- .microtoc {
- margin-top: 2px;
- margin-bottom: 2px;
- }
-
- h1.microtoc {
- margin-left: 0mm;
- font-size: 115%;
- }
- h2.microtoc {
- margin-left: 5mm;
- font-size: 110%;
- }
- h3.microtoc {
- margin-left: 10mm;
- font-size: 105%;
- }
- h4.microtoc {
- margin-left: 15mm;
- font-weight: normal;
- font-size: 100%;
- }
- h5.microtoc {
- margin-left: 20mm;
- font-weight: normal;
- font-size: 95%;
- }
- h6.microtoc {
- margin-left: 25mm;
- font-weight: normal;
- font-size: 90%;
- }
-
- .subtoc {
- margin-right: 34%;
- font-weight: normal;
- }
- h5.subtoc {
- margin-left: 2em;
- font-size: 80%;
- margin-top: 2px;
- margin-bottom: 2px;
- }
- h6.subtoc {
- margin-left: 3em;
- font-size: 75%;
- margin-top: 0px;
- margin-bottom: 0px;
- }
-
- div.substance {
- width: 100%;
- background-color: #ffffff;
- }
- div.ocn {
- width: 5%;
- float: right;
- top: 0;
- background-color: #ffffff;
- }
- div.endnote {
- width: 95%;
- background-color: #fffffff;
- }
- div.toc {
- position: absolute;
- float: left;
- margin: 0;
- padding: 0;
- padding-top: 0.5em;
- border: 0;
- width: 13em;
- background-color: #eeeeee;
- margin-right:1em;
- }
- div.summary {
- margin: 0;
- padding: 0;
- border-left: 13em solid #eeeeee;
- padding-left: 1em;
- background-color: #eeeeee;
- }
- div.content, div.main_column {
- margin: 0;
- padding: 0;
- border-left: 13em solid #ffffff;
- padding-left: 1em;
- padding-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;
- padding-left: 1em;
- padding-right: 1em;
- }
- div.content:after {
- content:' ';
- clear:both;
- display:block;
- height:0;
- overflow:hidden
- }
- div.footer {
- clear:left;
- padding: 0.5em;
- font-size: 80%;
- margin: 0;
- }
- div.toc ul {
- list-style: none;
- padding: 0;
- margin: 0;
- }
- div.toc li ul a, li ul span.currentlink
- {
- font-weight: normal;
- font-size: 90%;
- padding-left: 2em;
- background-color: #eeeeee;
- }
- div.toc a, span.currentlink{
- display:block;
- text-decoration: none;
- padding-left: 0.5em;
- color: #0000aa;
- }
- hr {
- width: 90%;
- }
-
- span.currentlink {
- text-decoration: none;
- background-color: #aaaaf9;
- }
-
- div.toc a:visited {
- color: #0000aa;
- }
- div.toc a:hover {
- color: #000000;
- 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
- }
- h1.red, h2.red, h3.red, h4.red, h5.red, h6.red {
- text-align: center;
- color: #ff0000;
- margin-left: 5mm;
- text-indent: 5mm;
- margin-top: 30px;
- margin-bottom: 20px;
- margin-right: 15mm;
- }
- h1.ruby, h2.ruby, h3.ruby, h4.ruby, h5.ruby, h6.ruby {
- text-align: center;
- color: #990000;
- margin-left: 5mm;
- text-indent: 5mm;
- margin-top: 30px;
- margin-bottom: 20px;
- margin-right: 15mm;
- }
-WOK
- end
- def homepage #stylesheet for index, home page
-<<WOK
- body {color: black; background: #{@vz.color_white}; margin:10px 10px 0px 10px; padding:0px;}
- p { line-height: 1.5 }
- a:link {color: #{@vz.color_blue_ink}; text-decoration: none; }
- a:visited {color: #{@vz.color_blue_ink}; text-decoration: none; }
- a:hover {color: #{@vz.color_black}; text-decoration: underline; background-color: #{@vz.color_yellow_light};}
- a:active {color: #{@vz.color_blue_ink}; text-decoration: underline;}
- #banner {
- background:#{@vz.color_white};
- }
- #column_left {
- width:25%;
- float:left;
- background:#b9d4dd;
- padding-bottom:10px;
- }
- #column_center {
- width:55%;
- float:left;
- background:#{@vz.color_white};
- padding-bottom:10px;
- }
- #column_right {
- width:20%;
- float:left;
- background:#b9d4dd;
- padding-bottom:10px;
- }
- p,h1,pre {
- font-family: #{fonts};
- margin:0px 10px 10px 10px;
- }
- h1 {
- font-size:14px;
- padding-top:10px;
- }
- #column_right p { font-size:12px}
- #banner h1 { margin:0px; padding:10px}
-WOK
- end
- def xhtml #stylesheet for xhtml
-<<WOK
-/* SiSU css xhtml & sax.xml default style */
- document {
- display: block;
- margin-left: 0mm;
- margin-right: 0mm;
- }
- head {
- display: block;
- margin-bottom: 20px;
- background-color: #dddddd;
- }
- metadata {
- display: block;
- }
- meta {
- display: inline;
- line-height: 1;
- font-size: 10px;
- color: #990000;
- margin-right: 2mm;
- margin-top: 0px;
- margin-bottom: 0px;
-
- }
- data,md {
- display: inline;
- line-height: 1;
- font-size: 10px;
- color: #000099;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- source_control {
- display: block;
- }
- dc {
- display: block;
- font-family: #{fonts};
- color: blue;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- sc {
- display: inline;
- color: green;
- }
- keywords,copyright {
- display: block;
- font-family: #{fonts};
- color: red;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- table {
- margin-left: 5%;
- display: block;
- }
- tr {
- display: block;
- }
- th,td {
- display: inline;
- }
- body {
- color: black;
- background: #ffffff;
- }
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- /* background-color: #e3ecef; */
- }
- a:hover {
- color: #000000;
- text-decoration: underline;
- background-color: #fff3b6;
- }
- a:hover IMG {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- object {
- display: block;
- margin-left: 2mm;
- margin-right: 2mm;
- margin-top: 4px;
- margin-bottom: 8px;
- }
- text,text[class|="norm"] {
- display: block;
- font-family: #{fonts};
- text-align: justify;
- font-weight: normal;
- font-size: 100%;
- line-height: 150%;
- margin-left: 5%;
- margin-right: 5%;
- margin-top: 2px;
- margin-bottom: 0px;
- }
- text[class|="h1"] {
- font-size: 120%;
- font-weight: bold;
- text-align: left;
- line-height: 120%;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- text[class|="h2"] {
- font-weight: bold;
- font-size: 110%;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- text[class|="h3"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h4"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h5"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h6"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="indent0"] {
- padding-left: 10%;
- }
- text[class|="indent1"] {
- padding-left: 15%;
- }
- text[class|="indent2"] {
- padding-left: 20%;
- }
- text[class|="indent3"] {
- padding-left: 25%;
- }
- text[class|="indent4"] {
- padding-left: 30%;
- }
- text[class|="indent5"] {
- padding-left: 35%;
- }
- text[class|="indent6"] {
- padding-left: 40%;
- }
- text[class|="indent7"] {
- padding-left: 45%;
- }
- text[class|="indent8"] {
- padding-left: 50%;
- }
- text[class|="indent9"] {
- 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"] {
- text-indent: 10%;
- }
- text[class|="indent_bullet2"] {
- text-indent: 15%;
- }
- text[class|="indent_bullet3"] {
- text-indent: 20%;
- }
- text[class|="indent_bullet4"] {
- text-indent: 25%;
- }
- text[class|="indent_bullet5"] {
- text-indent: 30%;
- }
- text[class|="indent_bullet6"] {
- text-indent: 35%;
- }
- text[class|="indent_bullet7"] {
- text-indent: 40%;
- }
- text[class|="indent_bullet8"] {
- text-indent: 45%;
- }
- text[class|="indent_bullet9"] {
- text-indent: 50%;
- }
- text[class|="verse"], text[class|="block"], text[class|="group"], text[class|="code"] {
- text-align: left;
- }
- ocn {
- display: block;
- text-align: right;
- vertical-align: super;
- color: #990000;
- font-size: xx-small;
- margin-right: 0mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- named {
- display: block;
- margin-right: 0mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- endnote {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 10%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- endnote_indent {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 15%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- en {
- font-size: xx-small;
- vertical-align: super;
- }
- i { font-style: italic; }
- b { font-style: bold; }
- u { text-decoration: underline; }
- br { display: block; }
-
- text[class|="table"] {
- display: table;
- /* display: block; */
- text-align: left;
- }
-
- table {
- margin-left: 0%;
- display: block;
- /* display: table; */
- width: 100%;
- }
- tr {
- display: block;
- /* display: table-row; */
- }
- th, td {
- display: table-cell;
- /* display: inline; */
- vertical-align: top;
- }
- p.left, th.left, td.left {
- text-align: left;
- }
- p.small_left, th.small_left, td.small_left {
- text-align: left;
- font-size: 80%;
- }
- p.right, th.right, td.right {
- text-align: right;
- }
-
- .svg_outer {
- display: block;
- margin-bottom: 0;
- margin-left: 0;
- margin-right: 0;
- margin-top: 0;
- padding-bottom: 0;
- padding-left: 0;
- padding-right: 0;
- padding-top: 0;
- text-align: left;
- }
- .svg_inner {
- display: block;
- text-align: center;
- }
-WOK
- end
- def xml_sax #stylesheet for xml sax
- xhtml
- end
- def xml_dom #sylesheet for xml dom, work on, starts from copy of css_xhtml
-<<WOK
-/* SiSU css dom.xml default style */
- document {
- display: block;
- margin-left: 0mm;
- margin-right: 0mm;
- }
- head {
- display: block;
- margin-bottom: 20px;
- background-color: #dddddd;
- }
- header {
- display: block;
- }
- meta {
- display: inline;
- line-height: 1;
- font-size: 10px;
- color: #990000;
- margin-right: 2mm;
- margin-top: 0px;
- margin-bottom: 0px;
-
- }
- md {
- display: inline;
- line-height: 1;
- font-size: 10px;
- color: #000099;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- source_control {
- display: block;
- }
- dc {
- display: block;
- font-family: #{fonts};
- color: blue;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- sc {
- display: inline;
- color: green;
- }
- keywords,copyright {
- display: block;
- font-family: #{fonts};
- color: red;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- body {
- color: black;
- background: #ffffff;
- }
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- /* background-color: #e3ecef; */
- }
- a:hover {
- color: #000000;
- text-decoration: underline;
- background-color: #fff3b6;
- }
- a:hover IMG {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- object {
- display: block;
- margin-left: 2mm;
- margin-right: 2mm;
- margin-top: 4px;
- margin-bottom: 8px;
- }
- heading {
- font-weight: bold;
- }
- contents {
- font-weight: normal;
- }
- text {
- display: block;
- font-family: #{fonts};
- text-align: justify;
- font-size: 100%;
- line-height: 150%;
- margin-left: 5%;
- margin-right: 5%;
- margin-top: 2px;
- margin-bottom: 0px;
- }
- text[class|="norm"] {
- font-weight: normal;
- }
- text[class|="h1"] {
- font-size: 120%;
- font-weight: bold;
- text-align: left;
- line-height: 120%;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- text[class|="h2"] {
- font-weight: bold;
- font-size: 110%;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- text[class|="h3"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h4"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h5"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="h6"] {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- text[class|="indent0"] {
- padding-left: 10%;
- }
- text[class|="indent1"] {
- padding-left: 15%;
- }
- text[class|="indent2"] {
- padding-left: 20%;
- }
- text[class|="indent3"] {
- padding-left: 25%;
- }
- text[class|="indent4"] {
- padding-left: 30%;
- }
- text[class|="indent5"] {
- padding-left: 35%;
- }
- text[class|="indent6"] {
- padding-left: 40%;
- }
- text[class|="indent7"] {
- padding-left: 45%;
- }
- text[class|="indent8"] {
- padding-left: 50%;
- }
- text[class|="indent9"] {
- 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"] {
- padding-left: 10%;
- }
- text[class|="indent_bullet2"] {
- padding-left: 15%;
- }
- text[class|="indent_bullet3"] {
- padding-left: 20%;
- }
- text[class|="indent_bullet4"] {
- padding-left: 25%;
- }
- text[class|="indent_bullet5"] {
- padding-left: 30%;
- }
- text[class|="indent_bullet6"] {
- padding-left: 35%;
- }
- text[class|="indent_bullet7"] {
- padding-left: 40%;
- }
- text[class|="indent_bullet8"] {
- padding-left: 45%;
- }
- text[class|="indent_bullet9"] {
- padding-left: 50%;
- }
- text[class|="verse"], text[class|="block"], text[class|="group"], text[class|="code"] {
- text-align: left;
- }
- table {
- margin-left: 5%;
- display: block;
- }
- tr {
- display: block;
- }
- th, td {
- display: inline;
- }
- nametag {
- display: none;
- }
- number {
- padding-right: 4px;
- }
- ocn {
- font-weight: normal;
- display: block;
- text-align: right;
- vertical-align: super;
- color: #990000;
- font-size: xx-small;
- margin-right: 0mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- endnote {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 10%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- endnote_indent {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 15%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- en {
- font-size: xx-small;
- vertical-align: super;
- }
- i { font-style: italic; }
- b { font-style: bold; }
- u { text-decoration: underline; }
- br { display: block; }
-WOK
- end
- def docbook_xml #stylesheet for docbook
-<<WOK
-/* SiSU css docbook.xml default style */
- book {
- display: block;
- margin-left: 0mm;
- margin-right: 0mm;
- }
- bookinfo {
- display: block;
- margin-bottom: 20px;
- background-color: #dddddd;
- }
- source_control {
- display: block;
- }
- dc,sc {
- display: block;
- font-family: #{fonts};
- color: blue;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- sc {
- color: green;
- }
- keywords,copyright {
- display: block;
- font-family: #{fonts};
- color: red;
- background-color: #dddddd;
- font-weight: normal;
- text-align: justify;
- font-size: xx-small;
- line-height: 120%;
- margin-left: 5%;
- margin-right: 5mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- body {
- color: black;
- background: #ffffff;
- }
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- /* background-color: #e3ecef; */
- }
- a:hover {
- color: #000000;
- text-decoration: underline;
- background-color: #fff3b6;
- }
- a:hover IMG {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- object {
- display: block;
- margin-left: 2mm;
- margin-right: 2mm;
- margin-top: 4px;
- margin-bottom: 8px;
- }
- part {
- display: block;
- /* font-weight: bold; */
- }
- contents {
- font-weight: normal;
- }
- para {
- display: block;
- font-family: #{fonts};
- /* font-weight: normal; */
- text-align: justify;
- font-size: 100%;
- line-height: 150%;
- margin-left: 5%;
- margin-right: 5%;
- margin-top: 2px;
- margin-bottom: 0px;
- }
- para.verse, para.block, para.group, para.code {
- text-align: left;
- }
- para.norm {
- font-family: #{fonts};
- font-weight: normal;
- }
- para.h1, title {
- display: block;
- font-family: #{fonts};
- font-size: 120%;
- font-weight: bold;
- text-align: left;
- line-height: 120%;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- para.h2 {
- font-weight: bold;
- font-size: 110%;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- para.h3 {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- para.h4 {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- para.h5 {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- para.h6 {
- font-size: 110%;
- font-weight: bold;
- text-align: left;
- }
- table {
- margin-left: 5%;
- display: block;
- }
- tr {
- display: block;
- }
- th, td {
- display: inline;
- }
- nametag {
- display: none;
- }
- number {
- padding-right: 4px;
- }
- ocn {
- font-weight: normal;
- display: block;
- text-align: right;
- vertical-align: super;
- color: #990000;
- font-size: xx-small;
- margin-right: 0mm;
- margin-top: 0px;
- margin-bottom: 0px;
- }
- endnote {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 10%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- endnote_indent {
- display: block;
- font-size: small;
- font-family: #{fonts};
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 15%;
- margin-right: 5%;
- margin-top: 4px;
- margin-bottom: 0px;
- }
- en {
- font-size: xx-small;
- vertical-align: super;
- }
- i { font-style: italic; }
- b { font-style: bold; }
- u { text-decoration: underline; }
- br { display: block; }
-WOK
- end
- def css_xhtml_p #stylesheet for ...
-<<WOK
- body {
- color: black;
- background: #ffffff;
- }
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- /* background-color: #e3ecef; */
- }
- a:hover {
- color: #000000;
- text-decoration: underline;
- background-color: #fff3b6;
- }
- a:hover IMG {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- object {
- display: block;
- margin-top: 3px;
- margin-bottom: 3px;
- margin-right: 5mm;
- }
- p {
- display: block;
- font-family: #{fonts};
- font-size: 100%;
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- margin-left: 10mm;
- margin-top: 3px;
- margin-bottom: 0px;
- margin-right: 5mm
- }
- p.norm { }
- p.endnote {
- font-size: 100%;
- margin-left: 20%;
- text-indent: 5%
- }
- p.endnote_indent {
- font-size: 100%;
- margin-left: 25%;
- text-indent: 5%
- }
- p.h1 {
- font-family: #{fonts};
- font-weight: bold;
- line-height: 120%;
- margin-left: 10mm;
- margin-right: 10mm;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- p.h2 {
- font-weight: bold;
- font-size: 110%;
- margin-left: 10mm;
- margin-right: 15mm;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- p.h3 {
- font-size: 150%;
- font-weight: bold;
- text-align: left;
- }
- p.h4 {
- font-size: 150%;
- font-weight: bold;
- text-align: left;
- }
- p.h5 {
- font-size: 150%;
- font-weight: bold;
- text-align: left;
- }
- p.h6 {
- font-size: 150%;
- font-weight: bold;
- text-align: left;
- }
- ocn {
- display: block;
- text-align: right;
- vertical-align: super;
- color: #990000;
- font-size: xx-small;
- margin-top: 0px;
- margin-bottom: 6px;
- }
- en {
- font-size: xx-small;
- vertical-align: super;
- }
- i { font-style: italic; }
- b { font-style: bold; }
- u { text-decoration: underline; }
- br { display: block; }
-WOK
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal.rb b/lib/sisu/v4/dal.rb
deleted file mode 100644
index 839e4c9a..00000000
--- a/lib/sisu/v4/dal.rb
+++ /dev/null
@@ -1,528 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal.rb;hb=HEAD>
-
- * 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_misc_arrange' # dal_misc_arrange.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
- fn_use=if fnx \
- and fnx =~/\.ss[tmi]$/
- fnx
- elsif opt.fns =~/\.ssm$/
- opt.fns + '.sst'
- else
- opt.fns
- end
- @make_fns=SiSU_Env::InfoFile.new(fn_use)
- @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_array=[]
- @@fns=(@fnx && @fnx =~/\.ss[tmi]$/) \
- ? @fnx
- : @opt.fns
- create_dal
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@@fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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.blue_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}
- if @opt.cmd =~/M/
- dal_array.each do |obj|
- if defined? obj.parent
- if defined? obj.ln
- if defined? obj.node
- puts %{#{obj.ln}: #{obj.ocn} : #{obj.parent} : #{obj.node} - #{obj.lc}}
- else
- puts %{#{obj.ln}: #{obj.ocn} : #{obj.parent}}
- end
- else
- if defined? obj.node
- puts %{ #{obj.ocn} : #{obj.parent} : #{obj.node} - #{obj.lc}}
- else
- puts %{ #{obj.ocn} : #{obj.parent}}
- end
- end
- end
- end
- end
- dal_array
- end
- def read_fnm
- dal=[]
- dal=(FileTest.file?(@fnm)) \
- ? (File.open(@fnm,'r:utf-8'){ |f| dal=Marshal.load(f)})
- : SiSU_DAL::Source.new(@opt).create_dal
- end
- def read_fnc
- dal=[]
- dal=(FileTest.file?(@fnc)) \
- ? (File.open(@fnc,'r:utf-8'){ |f| dal=Marshal.load(f)})
- : SiSU_DAL::Source.new(@opt).create_dal
- end
- def read_idx_sst
- m=[]
- m=(FileTest.file?(@idx_sst)) \
- ? (File.open(@idx_sst,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- end
- def read_idx_raw
- m=[]
- m=(FileTest.file?(@idx_raw)) \
- ? (File.open(@idx_raw,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- end
- def read_idx_html
- m=[]
- m=(FileTest.file?(@idx_html)) \
- ? (File.open(@idx_html,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- end
- def read_idx_xhtml
- m=[]
- m=(FileTest.file?(@idx_xhtml)) \
- ? (File.open(@idx_xhtml,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- end
- def read_map_nametags
- m=[]
- m=(FileTest.file?(@map_nametags)) \
- ? (File.open(@map_nametags,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- end
- def read_map_ocn_htmlseg
- m=[]
- m=(FileTest.file?(@map_ocn_htmlseg)) \
- ? (File.open(@map_ocn_htmlseg,'r:utf-8'){ |f| m=Marshal.load(f)})
- : nil
- 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_MiscArrangeText::SI.new(@md,data).prepare_text # dal_misc_arrange.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/v4/dal_character_check.rb b/lib/sisu/v4/dal_character_check.rb
deleted file mode 100644
index 54e01f4a..00000000
--- a/lib/sisu/v4/dal_character_check.rb
+++ /dev/null
@@ -1,107 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_character_check.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_CharacterCheck
- class Check
- def initialize(data)
- @data=data
- @comment='%'
- @endnote_array=[]
- end
- def character_check_and_oldstyle_endnote_array
- data=@data
- @tuned_file,@endnote_array=[],[]
- endnote_no=1
- data.each do |dob|
- 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 #&lsquo; &rsquo; #&ldquo; &rdquo;
- gsub(/\\copy(?:right)?\b/,'&#169;').
- gsub(/\\trademark\b|\\tm\b/,'&#174;')
- dob.obj=dob.obj + "\n"
- 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_no+=1
- dob=nil if dob.obj =~/\^~ .+/ #watch, removes 'binary' endnote now in endnote array for later insertion
- end
- end
- end
- @tuned_file << dob if dob.is_a?(Object)
- end
- @tuned_file=@tuned_file.flatten.compact
- [@tuned_file,@endnote_array]
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_doc_objects.rb b/lib/sisu/v4/dal_doc_objects.rb
deleted file mode 100644
index 0561b363..00000000
--- a/lib/sisu/v4/dal_doc_objects.rb
+++ /dev/null
@@ -1,481 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_doc_objects.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: document abstraction
-
-=end
-module SiSU_DAL_DocumentStructure
- class Extract
- def extract(h,o)
- 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,:lc,:toc_,:name,:idx,:ocn,:odv,:osp,:node,:parent,:ocn_,:note_,:autonum_,:digest,:tmp
- def initialize
- @of=:para
- @is=@obj=@lv=@ln=@lc=@toc_=@name=@idx=@size=@ocn=@odv=@osp=@node=@parent=@ocn_=@note_=@autonum_=@digest=@tmp=nil
- @tags=[]
- end
- def heading_ln(lv)
- 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)
- 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
- lc= h[:lc] || ((defined? o.lc) ? o.lc : nil) #Integer, document structure collapsed level, convenience (collapse sisu's dual level document structure for markup with simple linear structure)
- 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,@lc,@name,@tags,@obj,@idx,@ocn,@odv,@osp,@node,@parent,@toc_,@ocn_,@note_,@autonum_,@digest,@tmp=of,is,lv,ln,lc,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,:lc,:status,:is,:of,:tmp
- def initialize
- @of=:structure
- @is=@obj=@node=@lv=@ln=@lc=@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
- lc= h[:lc] || ((defined? o.lc) ? o.lc : nil) #Integer, document structure collapsed level, convenience (collapse sisu's dual level document structure for markup with simple linear structure)
- 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,@lc,@tmp=of,is,obj,status,node,lv,ln,lc,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 ObjectFlag
- attr_accessor :obj,:is,:of,:flag,:mod,:tmp
- def initialize
- @of=:flag
- @is=@obj=@flag=@mod=@tmp=nil
- end
- def flag(h,o=nil)
- of= @of #String, classification - group
- is= :flag #String, classification - specific type
- obj= nil #String, text content
- flag= h[:flag] || ((defined? o.flag) ? o.flag : nil) #String, text content
- mod= h[:mod] || ((defined? o.mod) ? o.mod : nil) #String, text content
- tmp= h[:flag] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use
- @of,@is,@obj,@flag,@mod,@tmp=of,is,obj,flag,mod,tmp
- self
- end
- def flag_ocn(h,o=nil)
- of= @of #String, classification - group
- is= :flag_ocn #String, classification - specific type
- obj= nil #String, text content
- flag= h[:flag] || ((defined? o.flag) ? o.flag : nil) #String, text content
- mod= h[:mod] || ((defined? o.mod) ? o.mod : nil) #String, text content
- tmp= h[:flag] || ((defined? o.tmp) ? o.tmp : nil) #available for processing, empty after use
- @of,@is,@obj,@flag,@mod,@tmp=of,is,obj,flag,mod,tmp
- self
- end
- end
- class ObjectLayout
- attr_accessor :obj,:is,:of,:from,:tmp
- def initialize
- @of=:layout
- @is=@obj=@from=@tmp=nil
- end
- def break(h,f=nil) #decide how to deal with
- of= @of #String, classification - group
- is= :break #String, classification - specific type
- obj= h[:obj] #String, text content
- from= f
- tmp= h[:tmp] #available for processing, empty after use
- @of,@is,@obj,@from,@tmp=of,is,obj,from,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
deleted file mode 100644
index 96e1ac5d..00000000
--- a/lib/sisu/v4/dal_doc_str.rb
+++ /dev/null
@@ -1,1368 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_doc_str.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: document abstraction
-
-=end
-module SiSU_DAL_DocumentStructureExtract
- class Instantiate < SiSU_Param::Parameters::Instructions
- @@flag={
- ocn: :on,
- code: :off,
- poem: :off,
- block: :off,
- group: :off,
- alt: :off,
- table: :off,
- table_to: :off,
- }
- def initialize
- @@counter=@@column=@@columns=0
- @@line_mode=''
- end
- end
- class Build
- @@flag={
- ocn: :on,
- code: :off,
- poem: :off,
- block: :off,
- group: :off,
- alt: :off,
- table: :off,
- table_to: :off,
- }
- 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])
- @pbl=SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_line])
- end
- def ln_get(lv)
- 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)
- str=~/\{\s*\S+?\.png.+?\}https?:\/\/\S+/ \
- ? true
- : false
- end
- def bullet_test(str)
- (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)
- (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 rgx_idx_ocn_seg
- @rgx_idx_ocn_seg=/(.+?)\s*[+](\d+)/
- end
- def construct_idx_array_and_hash(idxraw)
- idx_array_raw=idxraw.scan(/[^;]+/)
- idx_hash,idx_array,idx_lst={},[],[]
- idx_array_raw.each do |idx|
- idx_lst=case idx
- when /\S+?\s*:/
- idx_couplet_tmp=[]
- idx_couplet=idx.scan(/\s*[^:]+\s*/)
- if idx_couplet[1] =~/[|]/
- idx_couplet_tmp << idx_couplet[0] << idx_couplet[1].scan(/\s*[^|]+\s*/)
- else
- idx_couplet_tmp << idx_couplet[0] << [idx_couplet[1]]
- end
- idx_couplet=idx_couplet_tmp
- else [idx]
- end
- term_nodes=[]
- idx_lst.each do |term_node|
- case term_node
- when String
- term_node=term_node[0].chr.capitalize + term_node[1,term_node.length]
- term_node=(term_node =~/.+?[+]\d+/) \
- ? term_node
- : (term_node + '+0')
- term_nodes << term_node
- use,plus=rgx_idx_ocn_seg.match(term_node)[1,2]
- @use=use.strip
- idx_hash[@use]={ sub: [], plus: plus } unless idx_hash[@use] and defined? idx_hash[@use]
- when Array
- subterm_nodes=[]
- term_node.each do |subterm_node|
- subterm_node=(subterm_node =~/.+?[+]\d+/) \
- ? subterm_node
- : (subterm_node + '+0')
- subterm_nodes << subterm_node
- sub,sub_plus=rgx_idx_ocn_seg.match(subterm_node)[1,2]
- idx_hash[@use]={ sub: [], plus: 0 } unless idx_hash[@use] and defined? idx_hash[@use]
- idx_hash[@use][:sub] << {sub.strip => { plus: sub_plus }}
- end
- term_nodes << subterm_nodes
- end
- end
- idx_array << term_nodes
- end
- { hash: idx_hash, array: idx_array }
- end
- def identify_parts
- tuned_file=[]
- @tuned_block,@tuned_code=[],[]
- @@counter,@verse_count=0,0
- @metadata={}
- @data.each do |t_o|
- if t_o =~/^--([+~-])[#]$/
- h=case $1
- when /[+]/
- @@flag[:ocn]=:on
- {flag: :ocn_on}
- when /[~]/
- @@flag[:ocn]=:off_headings_substantive
- {flag: :ocn_off, mod: :headings_substantive}
- when /[-]/
- @@flag[:ocn]=:off_headings_exclude
- {flag: :ocn_off, mod: :headings_exclude}
- else
- @@flag[:ocn]=:on
- {flag: :ocn_on}
- end
- t_o=SiSU_DAL_DocumentStructure::ObjectFlag.new.flag_ocn(h)
- next
- end
- t_o=t_o.gsub(/(?:\n\s*\n)+/m,"\n") if @@flag[:code]==:off
- if t_o !~/^(?:code|poem|alt|group|block)\{|^\}(?:code|poem|alt|group|block)|^(?:table\{|\{table)[ ~]/ \
- and t_o !~/^[`]{3}\s+(?:code|poem|alt|group|block|table)|^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/ \
- and @@flag[:code]==:off \
- and @@flag[:poem]==:off \
- and @@flag[:group]==:off \
- and @@flag[:block]==:off \
- and @@flag[:alt]==:off \
- and @@flag[:table]==:off
- unless t_o =~/^(?:@\S+?:|%+)\s/ # extract book index for paragraph if any
- idx=if t_o=~/^=\{(.+)\}\s*$\Z/m; m=$1
- m=m.split(/\n/).join(' ').
- gsub(/\s+([|:;])\s+/,'\1').
- gsub(/\s+([+]\d+)\s+/,'\1')
- t_o=t_o.gsub(/\n=\{.+\}\s*$\Z/m,'')
- idx_array_and_hash=construct_idx_array_and_hash(m)
- idx_array_and_hash[:hash]
- 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)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
- obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
- obj << ' ~#'
- end
- end
- end
- 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)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
- obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
- obj << ' ~#'
- end
- end
- end
- 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)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- if @@flag[:ocn]==:off_headings_exclude
- obj << ' -#'
- elsif @@flag[:ocn]==:off_headings_substantive
- obj << ' ~#'
- end
- end
- end
- 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
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- obj << ' ~#'
- end
- end
- 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
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- obj << ' ~#'
- end
- end
- 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],:markup)
- when /^(?:=\\\\=|<:pn>)\s*$/ #[br:pgn]
- SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new],:markup)
- when /^-\.\.-\s*$/ #[br:pgl]
- SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_line],:markup)
- else #paragraph
- image=image_test(t_o)
- note=endnote_test?(t_o)
- obj,tags=extract_tags(t_o)
- if @@flag[:ocn]==:off_headings_exclude \
- or @@flag[:ocn]==:off_headings_substantive
- unless obj =~ /[~-][#]\s*$/
- obj << ' ~#'
- end
- end
- 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 @@flag[:code]==:off
- if t_o =~/^(?:code\{|[`]{3}\s+code)/
- @@flag[:code]=case t_o
- when /^code\{/; :curls
- when /^[`]{3}\s+code/; :tics
- else @@flag[:code] #error
- end
- @@counter=1
- @codeblock_numbered=(t_o =~/^(?:code\{#|[`]{3}\s+code\s[#])/) ? true : false
- h={ obj: 'code block start' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- elsif t_o =~/^(?:poem\{|[`]{3}\s+poem)/
- @@flag[:poem]=case t_o
- when /^poem\{/; :curls
- when /^[`]{3}\s+poem/; :tics
- else @@flag[:poem] #error
- end
- h={ obj: 'poem start' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- tuned_file << t_o
- elsif t_o =~/^(?:group\{|[`]{3}\s+group)/
- @@flag[:group]=case t_o
- when /^group\{/; :curls
- when /^[`]{3}\s+group/; :tics
- else @@flag[:group] #error
- end
- h={ obj: 'group text start' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- tuned_file << t_o
- elsif t_o =~/^(?:block\{|[`]{3}\s+block)/
- @@flag[:block]=case t_o
- when /^block\{/; :curls
- when /^[`]{3}\s+block/; :tics
- else @@flag[:block] #error
- end
- h={ obj: 'block text start' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- tuned_file << t_o
- elsif t_o =~/^(?:alt\{|[`]{3}\s+alt)/
- @@flag[:alt]=case t_o
- when /^alt\{/; :curls
- when /^[`]{3}\s+alt/; :tics
- else @@flag[:alt] #error
- end
- h={ obj: 'alt text start' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- tuned_file << t_o
- elsif t_o =~/^(?:table\{|[`]{3}\s+table|\{table)[ ~]/
- h={ obj: 'table start' } #introduce a counter
- ins=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- tuned_file << ins
- if t_o=~/^table\{(?:~h)?\s+/
- @@flag[:table]=:curls
- @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=~/^[`]{3}\s+table(?:~h)?\s+c\d+/
- @@flag[:table]=:tics
- @rows=''
- case t_o
- when /^[`]{3}\s+table~h\s+c(\d+);\s+(.+)/
- cols=$1
- col=$2.scan(/\d+/)
- heading=true
- when /^[`]{3}\s+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]
- 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=~/^[`]{3}\s+table(?:~h)?\s+/
- m1,m2,hd=nil,nil,nil
- h=case t_o
- when /^[`]{3}\s+table~h\s+(.+?)\n(.+)\Z/m #two table representations should be consolidated as one
- m1,tbl,hd=$1,$2,true
- when /^[`]{3}\s+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
- 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]==:curls or @@flag[:table]==:tics
- if (@@flag[:table]==:curls \
- and t_o =~/^\}table/) \
- or (@@flag[:table]==:tics \
- and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:table]=:off
- 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,''
- h={ obj: 'table end' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- t_o
- else
- if t_o.is_a?(String) \
- and t_o !~/^(?:table\{|[`]{3}\s+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]==:curls or @@flag[:code]==:tics
- if (@@flag[:code]==:curls and t_o =~/^\}code/) \
- or (@@flag[:code]==:tics and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:code]=:off
- 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)
- end
- if (@@flag[:code]==:curls or @@flag[:code]==:tics) \
- and t_o.is_a?(String)
- sub_array=t_o.dup + "#{Mx[:br_nl]}"
- @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]==:curls or @@flag[:poem]==:tics) \
- or (@@flag[:group]==:curls or @@flag[:group]==:tics) \
- or (@@flag[:block]==:curls or @@flag[:block]==:tics) \
- or (@@flag[:alt]==:curls or @@flag[:alt]==:tics)
- if (@@flag[:poem]==:curls and t_o =~/^\}poem/) \
- or (@@flag[:poem]==:tics and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:poem]=:off
- h={ obj: 'poem end' } #introduce a counter
- t_o=SiSU_DAL_DocumentStructure::ObjectComment.new.comment(h)
- elsif (@@flag[:group]==:curls and t_o =~/^\}group/) \
- or (@@flag[:group]==:tics and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:group]=:off
- 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)
- elsif (@@flag[:block]==:curls and t_o =~/^\}block/) \
- or (@@flag[:block]==:tics and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:block]=:off
- 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)
- elsif (@@flag[:alt]==:curls and t_o =~/^\}alt/) \
- or (@@flag[:alt]==:tics and t_o =~/^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/)
- @@flag[:alt]=:off
- 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)
- end
- if (@@flag[:poem]==:curls or @@flag[:poem]==:tics \
- or @@flag[:group]==:curls or @@flag[:group]==:tics \
- or @@flag[:alt]==:curls or @@flag[:alt]==:tics) \
- and t_o =~/\S/ \
- and t_o !~/^(?:\}(?:verse|code|alt|group|block)|(?:verse|code|alt|group|block)\{)/ \
- and t_o !~/^[`]{3}\s+(?:code|poem|alt|group|block)|^[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$/ # fix logic
- sub_array=t_o.dup
- @line_mode=sub_array.scan(/.+/)
- type=if @@flag[:poem]==:curls or @@flag[:poem]==:tics
- 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
- :poem
- else :group
- end
- end
- @verse_count+=1 if @@flag[:poem]==:curls or @@flag[:poem]==:tics
- end
- if @@flag[:code]==:off
- if @@flag[:poem]==:curls or @@flag[:poem]==:tics \
- or @@flag[:group]==:curls or @@flag[:group]==:tics \
- or @@flag[:alt]==:curls or @@flag[:alt]==:tics
- 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)
- 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=:none)
- lines,lines_new=@data,[]
- lines.each do |line|
- line=if line =~/\S/ \
- and line !~/^(?:code\{|\}code)/ \
- and line !~/^(?:[`]{3}\s+code|[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*$)/ \
- and not line.is_a?(Hash) #watch
- @@counter+=1 if @@flag[:code]==:curls or @@flag[:code]==:tics
- 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
- @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
- end
- class OCN
- def initialize(md,data)
- @md,@data=md,data
- end
- def structure_info
- def lv
- %w[0 A~ B~ C~ 1 2 3]
- end
- def possible_parents(child)
- case child
- when /A~/
- 'none'
- when /B~/
- 'A~'
- when /C~/
- 'B~'
- when /1/
- 'A~, B~, C~'
- when /2/
- '1'
- when /3/
- '2'
- end
- end
- def possible_children(parent)
- case parent
- when /A~/
- 'B~, 1'
- when /B~/
- 'C~, 1'
- when /C~/
- '1'
- when /1/
- '2'
- when /2/
- '3'
- when /3/
- 'none'
- end
- end
- self
- end
- def document_structure_check_info(node,node_parent,status=:ok)
- node_ln=/^([0-6])/.match(node)[1].to_i
- node_parent_ln=/^([0-6])/.match(node_parent)[1].to_i
- if status==:error \
- or @md.opt.act[:maintenance][:set]==:on
- puts %{node: #{node}, parent node: #{node_parent} #{status.upcase}}
- if status==:error
- node_ln=/^([0-6])/.match(node)[1].to_i
- node_parent_ln=/^([0-6])/.match(node_parent)[1].to_i
- puts %{current level: #{structure_info.lv[node_ln]} (possible parent levels: #{structure_info.possible_parents(structure_info.lv[node_ln])})
-parent level: #{structure_info.lv[node_parent_ln]} (possible child levels: #{structure_info.possible_children(structure_info.lv[node_parent_ln])})
--- }
- end
- end
- end
- def warning_incorrect_parent_level_or_level(txt)
- puts %{warning,
-#{txt}
-has incorrect level and/or parent level}
- 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=ocnu=0 # h heading, o other, t table, g group, i image
- 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 #&nbsp; added with Tune.code #¡
- parent=node1=node2=node3=node4=node5=node6=nil
- node0='0:0;0'
- @collapsed_lv1=1
- 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}"
- document_structure_check_info(node1,node0)
- @collapsed_lv1=1
- collapsed_level=@collapsed_lv1
- node,ocn_sp,parent=node1,"h#{ocnh}",node0 #FIX
- elsif ln==2 \
- or ln=~@md.lv2; ocnh2+=1
- node2="2:#{ocnh2};#{ocn}"
- parent=if node1
- document_structure_check_info(node2,node1)
- @collapsed_lv2=@collapsed_lv1+1
- node1
- else
- document_structure_check_info(node2,node0,:error)
- node0
- end
- collapsed_level=@collapsed_lv2
- node,ocn_sp=node2,"h#{ocnh}"
- elsif ln==3 \
- or ln=~@md.lv3; ocnh3+=1
- node3="3:#{ocnh3};#{ocn}"
- parent=if node2
- document_structure_check_info(node3,node2)
- @collapsed_lv3=@collapsed_lv2+1
- node2
- elsif node1
- warning_incorrect_parent_level_or_level(dob.obj)
- puts %{parent is :A~ & this level #{dob.lv}
-either parent should be level :B~
-or this level should be level :B~ rather than #{dob.lv}}
- document_structure_check_info(node3,node1,:error)
- @collapsed_lv3=@collapsed_lv1+1
- node1
- else
- document_structure_check_info(node3,node0,:error)
- warning_incorrect_parent_level_or_level(dob.obj)
- node0
- end
- collapsed_level=@collapsed_lv3
- node,ocn_sp=node3,"h#{ocnh}"
- elsif ln==4 \
- or ln=~@md.lv4; ocnh4+=1
- node4="4:#{ocnh4};#{ocn}"
- parent=if node3
- document_structure_check_info(node4,node3)
- @collapsed_lv4=@collapsed_lv3+1
- node3
- elsif node2
- document_structure_check_info(node4,node2)
- @collapsed_lv4=@collapsed_lv2+1
- node2
- elsif node1
- document_structure_check_info(node4,node1)
- @collapsed_lv4=@collapsed_lv1+1
- node1
- else
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node4,node0,:error)
- node0
- end
- collapsed_level=@collapsed_lv4
- node,ocn_sp=node4,"h#{ocnh}"
- elsif ln==5 \
- or ln=~@md.lv5; ocnh5+=1
- node5="5:#{ocnh5};#{ocn}"
- parent=if node4
- document_structure_check_info(node5,node4)
- @collapsed_lv5=@collapsed_lv4+1
- node4
- elsif node3
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node5,node3,:error)
- @collapsed_lv5=@collapsed_lv3+1
- node3
- elsif node2
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node5,node2,:error)
- @collapsed_lv5=@collapsed_lv2+1
- node2
- elsif node1
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node5,node1,:error)
- @collapsed_lv5=@collapsed_lv1+1
- node1
- else
- document_structure_check_info(node5,node0,:error)
- node0
- end
- collapsed_level=@collapsed_lv5
- node,ocn_sp=node5,"h#{ocnh}"
- elsif ln==6 \
- or ln=~@md.lv6; ocnh6+=1
- node6="6:#{ocnh6};#{ocn}"
- parent=if node5
- document_structure_check_info(node6,node5)
- @collapsed_lv6=@collapsed_lv5+1
- node5
- elsif node4
- warning_incorrect_parent_level_or_level(dob.obj)
- puts "parent is level 4~ & this level #{dob.lv}
-either parent should be level 5~
-or this level should be 5~ rather #{dob.lv}" #level 6
- document_structure_check_info(node6,node4,:error)
- @collapsed_lv6=@collapsed_lv4+1
- node4
- elsif node3
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node6,node3,:error)
- @collapsed_lv6=@collapsed_lv3+1
- node3
- elsif node2
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node6,node2,:error)
- @collapsed_lv6=@collapsed_lv2+1
- node2
- elsif node1
- warning_incorrect_parent_level_or_level(dob.obj)
- document_structure_check_info(node6,node1,:error)
- @collapsed_lv6=@collapsed_lv1+1
- node1
- else
- document_structure_check_info(node6,node0,:error)
- node0
- end
- collapsed_level=@collapsed_lv6
- node,ocn_sp=node6,"h#{ocnh}"
- 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,dob.lc=ln,node,ocn,ocn_dv,ocn_sp,parent,collapsed_level
- 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, hang: dob.hang, indent: dob.indent, bullet_: dob.bullet_, tags: dob.tags, parent: dob.parent }
- dob=SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h,dob)
- elsif dob.is==:heading
- h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: true, parent: dob.parent }
- 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, hang: dob.hang, indent: dob.indent, bullet_: dob.bullet_, tags: dob.tags, parent: dob.parent }
- dob=SiSU_DAL_DocumentStructure::ObjectPara.new.paragraph(h,dob)
- elsif dob.is==:heading
- h={ obj: dob.obj, ocn_: false, ocn: nil, toc_: false, parent: dob.parent }
- 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/v4/dal_endnotes.rb b/lib/sisu/v4/dal_endnotes.rb
deleted file mode 100644
index a32d02f7..00000000
--- a/lib/sisu/v4/dal_endnotes.rb
+++ /dev/null
@@ -1,128 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_doc_endnotes.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_Endnotes
- class Endnotes
- def initialize(md,data,endnote_array=nil)
- @md,@data,@endnote_array=md,data,endnote_array
- @endnote_counter,@endnote_counter_asterisk,@endnote_counter_dag=1,1,1
- end
- def endnotes
- data=@data
- @tuned_file=[]
- endnote_ref=1
- data.each do |dob|
- # manually numbered endnotes <!e(\d)!> <!e_(\d)!> -->
- 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.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) \
- && (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=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(' ')
- endnote_ref+=1
- when /~\^(?:\s|$)|<:e>/ #%note inserts endnotes previously gathered from /^(<!e[:_]!>|[-~]\{{3})/ (in earlier loop)
- word_mode=dob.obj.scan(/\S+/m)
- word_mode=endnote_call_number(word_mode)
- dob.obj=word_mode.join(' ')
- endnote_ref+=1
- end
- end
- @tuned_file << dob
- end
- @endnote_counter,@endnote_counter_asterisk,@endnote_counter_dag=1,1,1
- @tuned_file=@tuned_file.flatten
- end
- def endnote_call_number(words)
- words.each do |word|
- case word
- when /#{Mx[:en_a_o]}/
- unless word =~/#{Mx[:en_a_o]}[*+]+/
- word.gsub!(/#{Mx[:en_a_o]}/,"#{Mx[:en_a_o]}#{@endnote_counter} ")
- @endnote_counter+=1
- end
- when /#{Mx[:en_b_o]}/
- if word =~/#{Mx[:en_b_o]}[+]/
- word.gsub!(/#{Mx[:en_b_o]}[+]/,"#{Mx[:en_b_o]}\+#{@endnote_counter_dag} ")
- @endnote_counter_dag+=1
- else
- word.gsub!(/#{Mx[:en_b_o]}[*]?/,"#{Mx[:en_b_o]}\*#{@endnote_counter_asterisk} ")
- @endnote_counter_asterisk+=1
- end
- when /~\^|<:e>/
- if @endnote_array
- word.gsub!(/~\^|<:e>/,"#{@endnote_array[@endnote_counter-1]}")
- @endnote_counter+=1
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_expand_insertions.rb b/lib/sisu/v4/dal_expand_insertions.rb
deleted file mode 100644
index be258417..00000000
--- a/lib/sisu/v4/dal_expand_insertions.rb
+++ /dev/null
@@ -1,450 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_expand_insertions.rb;hb=HEAD>
-
- * 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 fnh
- {
- fn: @linked_doc,
- }
- end
- def path_and_file(fn,pth)
- "#{@base_path}/#{pth}/#{fn}"
- end
- def manifest
- fn=@md.file.base_filename.manifest(fnh)
- path_and_file(fn,'manifest')
- end
- def html_toc
- fn=@md.file.base_filename.html_segtoc(fnh)
- "#{@base_path}/html/#{@linked_doc}/#{fn}"
- end
- def html_doc
- fn=@md.file.base_filename.html_scroll(fnh)
- path_and_file(fn,'html')
- end
- def html_concordance
- fn=@md.file.base_filename.html_concordance
- "#{@base_path}/html/#{@linked_doc}/#{fn}"
- end
- def epub
- fn=@md.file.base_filename.epub(fnh)
- path_and_file(fn,'epub')
- end
- def pdf_landscape
- fn=@md.file.base_filename.pdf_l_a4(fnh)
- path_and_file(fn,'pdf')
- end
- def pdf_portrait
- fn=@md.file.base_filename.pdf_p_a4(fnh)
- path_and_file(fn,'pdf')
- end
- def odt
- fn=@md.file.base_filename.odt(fnh)
- path_and_file(fn,'odt')
- end
- def xhtml
- fn=@md.file.base_filename.xhtml(fnh)
- path_and_file(fn,'xhtml')
- end
- def xml_sax
- fn=@md.file.base_filename.xml_sax(fnh)
- path_and_file(fn,'xml_sax')
- end
- def xml_dom
- fn=@md.file.base_filename.xml_dom(fnh)
- path_and_file(fn,'xml_dom')
- end
- def txt
- fn=@md.file.base_filename.txt(fnh)
- path_and_file(fn,'txt')
- end
- def digest
- fn=@md.file.base_filename.hash_digest(fnh)
- path_and_file(fn,'digest')
- end
- def source
- "#{@base_path}/src/#{@src}"
- end
- def sisupod
- "#{@base_path}/src/#{@src}.zip"
- end
- self
- end
- def by_filetype(linked_doc,lng,src=nil)
- @linked_doc,@lng,@src=linked_doc,lng,src
- @lc=SiSU_Env::FilenameLanguageCodeInsert.new(@md.opt,lng).language_code_insert
- @base_path="#{@md.file.output_path.base.url}"
- def fnh
- {
- fn: @linked_doc,
- lng: @lc,
- }
- end
- def path_and_file(fn,pth)
- "#{@base_path}/#{pth}/#{fn}"
- end
- def manifest
- fn=@md.file.base_filename.manifest(fnh)
- path_and_file(fn,'manifest')
- end
- def html_toc
- fn=@md.file.base_filename.html_segtoc(fnh)
- path_and_file(fn,'html')
- end
- def html_doc
- fn=@md.file.base_filename.html_scroll(fnh)
- path_and_file(fn,'html')
- end
- def html_concordance
- fn=@md.file.base_filename.html_concordance
- path_and_file(fn,'html')
- end
- def epub
- fn=@md.file.base_filename.epub(fnh)
- path_and_file(fn,'epub')
- end
- def pdf_landscape
- fn=@md.file.base_filename.pdf_l_a4(fnh)
- path_and_file(fn,'pdf')
- end
- def pdf_portrait
- fn=@md.file.base_filename.pdf_p_a4(fnh)
- path_and_file(fn,'pdf')
- end
- def odt
- fn=@md.file.base_filename.odt(fnh)
- path_and_file(fn,'odt')
- end
- def xhtml
- fn=@md.file.base_filename.xhtml(fnh)
- path_and_file(fn,'xhtml')
- end
- def xml_sax
- fn=@md.file.base_filename.xml_sax(fnh)
- path_and_file(fn,'xml_sax')
- end
- def xml_dom
- fn=@md.file.base_filename.xml_dom(fnh)
- path_and_file(fn,'xml_dom')
- end
- def txt
- fn=@md.file.base_filename.txt(fnh)
- path_and_file(fn,'txt')
- end
- def digest
- fn=@md.file.base_filename.hash_digest(fnh)
- path_and_file(fn,'digest')
- end
- def source
- "#{@base_path}/src/#{@src}"
- end
- def sisupod
- "#{@base_path}/src/#{@src}.zip"
- end
- self
- end
- def by_filename(linked_doc,lng,src=nil)
- @linked_doc,@lng,@src=linked_doc,lng,src
- @lc=SiSU_Env::FilenameLanguageCodeInsert.new(@md.opt,lng).language_code_insert
- @base_path="#{@md.file.output_path.base.url}/#{@linked_doc}"
- def fnh
- {
- fn: @linked_doc,
- lng: @lc,
- }
- end
- def path_and_file(fn,pth=nil)
- (pth.nil?) \
- ? "#{@base_path}/#{fn}"
- : "#{@base_path}/#{pth}/#{fn}"
- end
- def manifest
- fn=@md.file.base_filename.manifest(fnh)
- path_and_file(fn)
- end
- def html_toc
- fn=@md.file.base_filename.html_segtoc(fnh)
- path_and_file(fn)
- end
- def html_doc
- fn=@md.file.base_filename.html_scroll(fnh)
- path_and_file(fn)
- end
- def html_concordance
- fn=@md.file.base_filename.html_concordance
- path_and_file(fn)
- end
- def epub
- fn=@md.file.base_filename.epub(fnh)
- path_and_file(fn,'epub')
- end
- def pdf_landscape
- fn=@md.file.base_filename.pdf_l_a4(fnh)
- path_and_file(fn)
- end
- def pdf_portrait
- fn=@md.file.base_filename.pdf_p_a4(fnh)
- path_and_file(fn)
- end
- def odt
- fn=@md.file.base_filename.odt(fnh)
- path_and_file(fn)
- end
- def xhtml
- fn=@md.file.base_filename.xhtml(fnh)
- path_and_file(fn)
- end
- def xml_sax
- fn=@md.file.base_filename.xml_sax(fnh)
- path_and_file(fn)
- end
- def xml_dom
- fn=@md.file.base_filename.xml_dom(fnh)
- path_and_file(fn)
- end
- def txt
- fn=@md.file.base_filename.txt(fnh)
- path_and_file(fn)
- end
- def digest
- fn=@md.file.base_filename.hash_digest(fnh)
- path_and_file(fn)
- 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\{|[`]{3}\s+code)/
- true
- elsif para =~/^(?:\}code|[`]{3}(?:\s|$))/m
- false
- else codeblock_
- end
- if para !~/^%+\s/ \
- and not codeblock_ \
- and para =~/\{(?:~\^\s+)?(.+?)\s\[(?:\d(?:[sS]*))\]\}(?:\.\.\/\S+?\/|\S+?\.ss[tm]\b)/
- manifest=nil
- @u=SiSU_Env::InfoEnv.new.url
- m_cmd=''
- if defined? @u.remote
- if /(?<m_pre>.+?)\{(?<m_txt>.+?)\s\[(?<m_cmd>\d[sS]*)\]\}(?<m_source>(?<m_linked_doc>\S+?)\.ss[tm]\b)(?<m_note>.*)/m =~ para
- m_pre=m_pre.strip
- elsif /\{(?<m_txt>.+?)\s\[(?<m_cmd>\d[sS]*)\]\}(?<m_source>(?<m_linked_doc>\S+?)\.ss[tm]\b)(?<m_note>.*)/m =~ para
- end
- if m_linked_doc =~ /(\S+?)\/(\S+)/
- m_linked_doc,m_linked_doc_lang=$1,$2
- else
- m_linked_doc,m_linked_doc_lang=m_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+)?(?<m_txt>.+?)\s\[(?<m_cmd>\d[sS]*)\]\}\.\.\/(?<m_linked_doc>\S+?)\/(?<m_note>\s+#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]})?/ =~ para
- end
- end
- lnk=case @md.opt.dir_structure_by
- when :language
- {
- manifest: by_language(m_linked_doc,m_linked_doc_lang).manifest,
- html_toc: by_language(m_linked_doc,m_linked_doc_lang).html_toc,
- html_doc: by_language(m_linked_doc,m_linked_doc_lang).html_doc,
- epub: by_language(m_linked_doc,m_linked_doc_lang).epub,
- pdf_landscape: by_language(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- pdf_portrait: by_language(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- odt: by_language(m_linked_doc,m_linked_doc_lang).odt,
- xhtml: by_language(m_linked_doc,m_linked_doc_lang).xhtml,
- xml_sax: by_language(m_linked_doc,m_linked_doc_lang).xml_sax,
- xml_dom: by_language(m_linked_doc,m_linked_doc_lang).xml_dom,
- txt: by_language(m_linked_doc,m_linked_doc_lang).txt,
- html_concordance: by_language(m_linked_doc,m_linked_doc_lang).html_concordance,
- digest: by_language(m_linked_doc,m_linked_doc_lang).digest,
- sisupod: by_language(m_linked_doc,m_linked_doc_lang,m_source).sisupod,
- source: by_language(m_linked_doc,m_linked_doc_lang,m_source).source,
- }
- when :filetype
- {
- manifest: by_filetype(m_linked_doc,m_linked_doc_lang).manifest,
- html_toc: by_filetype(m_linked_doc,m_linked_doc_lang).html_toc,
- html_doc: by_filetype(m_linked_doc,m_linked_doc_lang).html_doc,
- epub: by_filetype(m_linked_doc,m_linked_doc_lang).epub,
- pdf_landscape: by_filetype(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- pdf_portrait: by_filetype(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- odt: by_filetype(m_linked_doc,m_linked_doc_lang).odt,
- xhtml: by_filetype(m_linked_doc,m_linked_doc_lang).xhtml,
- xml_sax: by_filetype(m_linked_doc,m_linked_doc_lang).xml_sax,
- xml_dom: by_filetype(m_linked_doc,m_linked_doc_lang).xml_dom,
- txt: by_filetype(m_linked_doc,m_linked_doc_lang).txt,
- html_concordance: by_filetype(m_linked_doc,m_linked_doc_lang).html_concordance,
- digest: by_filetype(m_linked_doc,m_linked_doc_lang).digest,
- sisupod: by_filetype(m_linked_doc,m_linked_doc_lang,m_source).sisupod,
- source: by_filetype(m_linked_doc,m_linked_doc_lang,m_source).source,
- }
- else
- {
- manifest: by_filename(m_linked_doc,m_linked_doc_lang).manifest,
- html_toc: by_filename(m_linked_doc,m_linked_doc_lang).html_toc,
- html_doc: by_filename(m_linked_doc,m_linked_doc_lang).html_doc,
- epub: by_filename(m_linked_doc,m_linked_doc_lang).epub,
- pdf_landscape: by_filename(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- pdf_portrait: by_filename(m_linked_doc,m_linked_doc_lang).pdf_landscape,
- odt: by_filename(m_linked_doc,m_linked_doc_lang).odt,
- xhtml: by_filename(m_linked_doc,m_linked_doc_lang).xhtml,
- xml_sax: by_filename(m_linked_doc,m_linked_doc_lang).xml_sax,
- xml_dom: by_filename(m_linked_doc,m_linked_doc_lang).xml_dom,
- txt: by_filename(m_linked_doc,m_linked_doc_lang).txt,
- html_concordance: by_filename(m_linked_doc,m_linked_doc_lang).html_concordance,
- digest: by_filename(m_linked_doc,m_linked_doc_lang).digest,
- sisupod: by_filename(m_linked_doc,m_linked_doc_lang,m_source).sisupod,
- source: by_filename(m_linked_doc,m_linked_doc_lang,m_source).source,
- }
- end
- linked_title="#{m_pre}{#{m_txt} }#{lnk[:manifest]}#{m_note}\n\n"
- tuned_file_tmp << linked_title
- output_filetypes=output_filetypes_in_cmd(m_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/v4/dal_hash_digest.rb b/lib/sisu/v4/dal_hash_digest.rb
deleted file mode 100644
index 9c3f2d14..00000000
--- a/lib/sisu/v4/dal_hash_digest.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_hash_digest.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-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::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.compact
- @tuned_file=[]
- sha_ =(@env.digest.type=='sha256' ? true : false)
- sha_ ? (require 'digest/sha2') : (require 'digest/md5')
- data.each do |t_o|
- unless t_o.obj.is_a?(Array)
- t_o.obj=t_o.obj.strip
- end
- 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)
- end
- else
- for hash_class in [ Digest::MD5 ]
- @tuned_file << stamped(t_o,hash_class)
- end
- end
- else @tuned_file << t_o unless t_o.nil?
- end
- end
- @tuned_file=@tuned_file.flatten
- #use md5 or to create hash of each dal object including ocn, & add into to each dal object
- end
- def endnote_digest(data)
- t_o_bit=[]
- data.each do |en_plus|
- t_o_bit <<= case en_plus
- 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_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 STDERR.puts "Error Exception - problem encountered with:\n#{en_plus}" #arbitrary exception, tidy up
- end
- else en_plus
- end
- end
- 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_TextRepresentation::Alter.new(t_o).strip_clean_of_extra_spaces
- #SiSU_TextRepresentation::Alter.new(t_o).strip_clean_of_markup #check
- #SiSU_TextRepresentation::Alter.new(t_o).semi_revert_markup #check
- #SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst #check
- 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_digest=[]
- 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]
- else ''
- end
- t_o_plus_en << t_o_tail
- en_and_t_o_digest << endnote_digest(t_o_plus_en)
- en_and_t_o_digest.join(' ')
- else #@tuned << t_o + Mx[:id_o] + digest_strip + ':' + digest_all + Mx[:id_c] unless t_o.nil?
- end
- else #@tuned << t_o + Mx[:id_o] + digest_strip + ':' + digest_all + Mx[:id_c] unless t_o.nil?
- end
- t_o #KEEP intact
- end
- 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(/ [ ]+/,' ').
- 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
-__END__
diff --git a/lib/sisu/v4/dal_idx.rb b/lib/sisu/v4/dal_idx.rb
deleted file mode 100644
index 5fbfe5df..00000000
--- a/lib/sisu/v4/dal_idx.rb
+++ /dev/null
@@ -1,326 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_idx.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-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::InfoEnv.new(@md.fns)
- end
- def indexing_song
- data=@data
- data,sisu_markup_idx_rel,sisu_markup_idx_rel_html_seg,html_idx,xhtml_idx=extract_book_index(data)
- data=clean_and_insert_index(data,sisu_markup_idx_rel_html_seg)
- [data,sisu_markup_idx_rel,sisu_markup_idx_rel_html_seg,html_idx,xhtml_idx]
- end
- def extract_book_index(data)
- tuned_file=[]
- idx_array=[]
- data.each do |dob|
- if (dob.is ==:heading \
- || dob.is ==:heading_insert) \
- && dob.ln==4
- @seg=dob.name
- end
- if defined? dob.idx \
- and dob.idx.is_a?(Hash)
- idx_array << {idx: dob.idx, ocn: dob.ocn, seg: @seg }
- end
- tuned_file << dob if dob
- end
- if idx_array.length > 0
- the_idx=construct_book_index(idx_array)
- sisu_markup_idx_rel,sisu_markup_idx_rel_html_seg,html_idx,xhtml_idx=nil,nil,nil,nil
- if @md.book_idx
- idx=index(the_idx)
- sisu_markup_idx_rel,sisu_markup_idx_rel_html_seg,html_idx,xhtml_idx=idx[:sst_rel],idx[:sst_rel_html_seg],idx[:html],idx[:xhtml]
- end
- end
- [tuned_file,sisu_markup_idx_rel,sisu_markup_idx_rel_html_seg,html_idx,xhtml_idx]
- end
- def construct_book_index(idx_array)
- the_idx={}
- idx_array.each do |idx|
- idx[:idx].each_pair do |term,term_info|
- location=(term_info[:plus].to_i > 0) \
- ? (%{#{idx[:ocn]}-#{idx[:ocn].to_i + term_info[:plus].to_i}})
- : idx[:ocn].to_s
- the_idx[term]={} unless the_idx[term] and defined? the_idx[term]
- the_idx[term]['node_0_terms']=[] unless the_idx[term]['node_0_terms'] and defined? the_idx[term]['node_0_terms']
- the_idx[term]['node_0_terms'] << { ocn: idx[:ocn], range: location, seg: idx[:seg] }
- if term_info[:sub].is_a?(Array) \
- and term_info[:sub].length > 0
- term_info[:sub].each do |y|
- y.each_pair do |subterm,subterm_info|
- location=(subterm_info[:plus].to_i > 0) \
- ? (%{#{idx[:ocn]}-#{idx[:ocn].to_i + subterm_info[:plus].to_i}})
- : idx[:ocn].to_s
- the_idx[term]={} unless the_idx[term] and defined? the_idx[term]
- the_idx[term]['node_0_terms']=[] unless the_idx[term]['node_0_terms'] and defined? the_idx[term]['node_0_terms']
- the_idx[term]['node_1_subterms']={} unless the_idx[term]['node_1_subterms'] and defined? the_idx[term]['node_1_subterms']
- the_idx[term]['node_1_subterms'][subterm]=[] unless the_idx[term]['node_1_subterms'][subterm] and defined? the_idx[term]['node_1_subterms'][subterm]
- the_idx[term]['node_1_subterms'][subterm] << { ocn: idx[:ocn], range: location, seg: idx[:seg] }
- end
- end
- end
- end
- end
- the_idx=the_idx.sort
- the_idx
- end
- def clean_xml(str)
- str=str.gsub(/&/,'&amp;')
- 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_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_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_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]
- idx[:html] << '<p>'
- idx[:xhtml] << '<p>'
- alph.each do |x|
- if x =~/[0-9]/
- idx[:html] << ''
- idx[:xhtml] << ''
- else
- idx[:html] << %{<a href="##{x}">#{x}</a>,#{$ep[:hsp]}}
- idx[:xhtml] << %{<a href="##{x.downcase}">#{x}</a>,#{$ep[:hsp]}}
- end
- end
- idx[:html] << '</p>'
- idx[:xhtml] << '</p>'
- letter=alph.shift
- idx[:html] << %{\n<p class="book_index_lev1"><a name="numeral"></a></p>}
- idx[:xhtml] << %{\n<p class="letter" id="numeral">0 - 9</p>}
- the_idx.each do |i|
- i.each do |x|
- if x.is_a?(String)
- f=/^(\S)/.match(x)[1]
- if letter < f
- while letter < f
- if alph.length > 0
- letter=alph.shift
- idx[:html] << %{\n<p class="letter"><a name="#{letter}">#{letter}</a></p><p class="book_index_lev1"><a name="#{letter.downcase}"> </a></p>}
- idx[:xhtml] << %{\n<p class="letter" id="#{letter.downcase}">#{letter}</p>}
- else break
- end
- end
- end
- idx[:sst_rel_html_seg] << %{\n\n#{Mx[:fa_bold_o]}#{x},#{Mx[:fa_bold_c]} }
- idx[:sst_rel] << %{\n\n#{Mx[:fa_bold_o]}#{x},#{Mx[:fa_bold_c]} }
- aname=x.gsub(/\s+/,'_')
- idx[:html] << %{\n<p class="book_index_lev1"><a name="#{aname}"><b>#{x}</b></a>, }
- c=clean_xml(x.dup)
- idx[:xhtml] << %{\n<p class="book_index_lev1"><b>#{c}</b>, }
- @o=idx[:sst_rel_html_seg].index(idx[:sst_rel_html_seg].last)
- @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.opt.cmd =~/V/
- elsif x.is_a?(Array)
- p 'array error? -->'
- print x
- elsif x.is_a?(Hash)
- if x['node_0_terms'].is_a?(Array)
- x['node_0_terms'].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.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.opt.cmd =~/V/
- else p 'error'
- end
- end
- idx[:html][@q]=idx[:html][@q] + '</p>'
- idx[:xhtml][@r]=idx[:xhtml][@r] + '</p>'
- end
- if x['node_1_subterms']
- x['node_1_subterms'].sort.each do |k,y|
- if k !~/node_0_terms/
- idx[:sst_rel_html_seg][@o]=idx[:sst_rel_html_seg][@o] + %{#{k}, }
- idx[:sst_rel][@t]=idx[:sst_rel][@t] + %{#{k}, }
- 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.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.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.opt.cmd =~/V/
- else p 'error'
- end
- end
- idx[:html][@q]=idx[:html][@q] + '</p>'
- idx[:xhtml][@r]=idx[:xhtml][@r] + '</p>'
- end
- end
- end
- @x +=1
- end
- end
- end
- 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.is_a?(String)
- print "\n" + x + ', '
- elsif x.is_a?(Array)
- p 'array error? -->'
- print x
- elsif x.is_a?(Hash)
- if x['node_0_terms'].is_a?(Array)
- x['node_0_terms'].each do |a|
- if a[:range]
- print a[:range] + ', '
- elsif a[:ocn]
- print a[:ocn] + ', '
- else p 'error'
- end
- end
- end
- if x['node_1_subterms']
- x['node_1_subterms'].sort.each do |k,y|
- if k !~/node_0_terms/
- print "\n\t" + k + ', '
- y.each do |z|
- if z[:range]
- print z[:range] + ', '
- elsif z[:ocn]
- print z[:ocn] + ', '
- else p 'error'
- end
- end
- end
- end
- end
- end
- end
- end
- end
- def output_idx(idx)
- if @md.book_idx
- path="#{@env.path.output}/#{@md.fnb}"
- Dir.mkdir(path) unless FileTest.directory?(path)
- puts "#{path}/#{@md.fn[:book_idx_html]} #{__FILE__}::#{__LINE__}"
- html_index_file=File.new("#{path}/#{@md.fn[:book_idx_html]}",'w')
- idx[:html].each {|x| html_index_file << x }
- html_index_file.close
- end
- end
- def clean_and_insert_index(data,sisu_markup_idx)
- tuned_file=[]
- data.each do |dob|
- tuned_file << dob
- if dob.obj =~/#{Mx[:br_endnotes]}/ \
- and sisu_markup_idx
- sisu_markup_idx.each do |idx|
- tuned_file << idx
- end
- end
- end
- tuned_file
- end
- def clean_index(data) #check on use of dob
- tuned_file=[]
- data.each do |para|
- para=para.gsub(/\n*#{@rgx_idx}/m,'')
- tuned_file << para
- end
- tuned_file
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_images.rb b/lib/sisu/v4/dal_images.rb
deleted file mode 100644
index 3d445b1e..00000000
--- a/lib/sisu/v4/dal_images.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_images.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_Images
- class Images
- #require 'RMagick'
- #include Magick
- def initialize(md,data)
- @md,@data=md,data
- end
- def images
- data=@data
- tuned_file=[]
- @rmgk=false
- imagemagick_=true #imagemagick_=SiSU_Env::InfoSettings.new.program?('rmagick')
- if imagemagick_
- begin
- @rmgk=SiSU_Env::Load.new('RMagick').prog
- rescue
- @rmgk=false
- end
- else
- 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=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))/
- if imagemagick_
- imgs=dob.obj.scan(m).flatten
- img_col=img_row=nil
- images=imgs.each do |image|
- 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
- break if FileTest.exist?("#{img_pth}/#{image}")
- end
- if FileTest.exist?("#{image_path}/#{image}")
- if @rmgk
- img=Magick::ImageList.new("#{image_path}/#{image}")
- img_col,img_row=img.columns,img.rows
- else
- 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::SystemCall.new.imagemagick
- gmgk=SiSU_Env::SystemCall.new.graphicksmagick
- if imgk or gmgk
- if imgk
- imgsys=`identify #{image_path}/#{image}`.strip #system call
- elsif gmgk
- imgsys=`gm identify #{image_path}/#{image}`.strip #system call
- end
- img_col,img_row=/(\d+)x(\d+)/m.match(imgsys)[1,2]
- img_col,img_row=img_col.to_i,img_row.to_i
- end
- end
- row=((img && defined? img.rows) ? img.rows : img_row)
- col=((img && defined? img.columns) ? img.columns : img_col)
- if img_col > img_row #landscape
- if img_col> 640
- img_col=640
- img_row=((1.00*img_col/col)*row).round
- end
- else #portrait
- if img_col> 640
- img_col=640
- img_row=((1.00*img_col/col)*row).round
- end
- if img_row > 640
- img_row=640
- img_col=((1.00*img_row/row)*col).round
- end
- end
- 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.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
- 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
- tuned_file
- end
- end
-end
-__END__
-imgsys=`identify #{image_path}/#{image}`.strip
diff --git a/lib/sisu/v4/dal_metadata.rb b/lib/sisu/v4/dal_metadata.rb
deleted file mode 100644
index 9273d88a..00000000
--- a/lib/sisu/v4/dal_metadata.rb
+++ /dev/null
@@ -1,82 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_metadata.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_Metadata
- class Metadata
- def initialize(md,metad)
- @md,@metadata=md,metad
- 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_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_DAL_DocumentStructure::ObjectHeading.new.heading(h)
- end
- def metadata
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_misc_arrange.rb b/lib/sisu/v4/dal_misc_arrange.rb
deleted file mode 100644
index e6cc72db..00000000
--- a/lib/sisu/v4/dal_misc_arrange.rb
+++ /dev/null
@@ -1,157 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v5/dal_misc_arrange.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_MiscArrangeText
- class SI
- def initialize(md,data)
- @md,@data=md,data
- end
- def conditional_headings(para)
- 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=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
- para
- end
- def code_blocks(para)
- def ticks(para)
- block_open,block_close,text=nil,nil,nil
- if para =~/\A[`]{3}\s+.+?\n.+?\n[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m
- block_open,text,block_close=/\A([`]{3}\s+.+?)\n(.+?)\n([`]{3}(\s+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.match(para)[1..3]
- ((para=~/^[`]{3}\s+table(?:~h)?\s+/) \
- and (para !~/^[`]{3}\s+table(?:~h)?\s+c\d+/)) \
- ? para
- : (para=[]; para << block_open << text << block_close)
- elsif para =~/\A[`]{3}\s+.+?\n.*?\Z/m #look at, study
- block_open,text=/\A([`]{3}(?:\s+.+?))\n(.*?)\Z/m.match(para)[1,2]
- para=[]
- if not text.to_s.empty?
- para << block_open << text
- else
- para << block_open
- end
- elsif para =~/\A.+?\n[`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?\s*\Z/m
- text,block_close=/\A(.+?)\n([`]{3}(?:\s+[~-][#]|\s+\~\{.+?\}\~)?)\s*\Z/m.match(para)[1,2]
- para=[]
- if not text.to_s.empty?
- para << text.to_s << block_close
- else
- para << block_close
- end
- else para
- end
- para
- end
- def curly_braces(para)
- block_open,block_close,text=nil,nil,nil
- para=if para =~/\A(?:code|poem|alt|group|block|table)\{ .+?\n.+?\n\}(?:code|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
- block_open,text,block_close=/\A((?:code|poem|alt|group|block|table)\{ .+?)\n(.+?)\n(\}(?:code|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.match(para)[1..3]
- para=[]
- para << block_open << text << block_close
- elsif para =~/\A(?:code|poem|alt|group|block|table)\{ .+?\n.+?\Z/m
- block_open,text=/\A((?:code|poem|alt|group|block|table)\{ .+?)\n(.+?)\Z/m.match(para)[1,2]
- para=[]
- if not text.to_s.empty?
- para << block_open << text
- else
- para << block_open
- end
- elsif para =~/\A.+?\n\}(?:code|poem|alt|group|block|table)(?: [~-][#])?\s*\Z/m
- text,block_close=/\A(.+?)\n(\}(?:code|poem|alt|group|block|table)(?: [~-][#])?)\s*\Z/m.match(para)[1,2]
- para=[]
- if not text.to_s.empty?
- para << text.to_s << block_close
- else
- para << block_close
- end
- else para
- end
- para
- end
- para=para =~/^```/m \
- ? ticks(para)
- : para
- para=(para =~/^(?:code|poem|alt|group|block|table)\{|^\}(?:code|poem|alt|group|block|table)/m) \
- ? curly_braces(para)
- : para
- end
- def prepare_text
- data=@data
- data_new=[],[]
- 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]=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]=data[0].gsub(/^(SiSU\s*[\d.]*)$/,'% \1').
- gsub(/^(sisu-[\d.]+)$/,'% \1')
- end
- data.each do |para|
- para=conditional_headings(para)
- data_new << code_blocks(para)
- end
- data_new=data_new.flatten
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_numbering.rb b/lib/sisu/v4/dal_numbering.rb
deleted file mode 100644
index c2ac6785..00000000
--- a/lib/sisu/v4/dal_numbering.rb
+++ /dev/null
@@ -1,473 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_numbering.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DAL_Numbering
- class Numbering
- attr_accessor :obj,:osp,:ocn,:lv,:name,:index,:comment
- def initialize(md,data)
- @md,@data=md,data
- @obj=@type=@ocn=@lv=@name=@index=@comment=nil
- end
- def numbering_song
- data=@data
- data=number_plaintext_para(data)
- data=auto_number_heading_ie_title(data.compact) #tr issue
- data=ocn(data.compact) #watch
- data=xml(data.compact)
- data=minor_numbering(data.compact)
- data,tags_map,ocn_html_seg_map=name_para_seg_filename(data)
- data=set_heading_top(data) unless @md.set_heading_top
- [data,tags_map,ocn_html_seg_map]
- end
- def number_plaintext_para(data)
- @tuned_file=[]
- data.each do |dob|
- 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.is_a?(Array)
- dob.obj=dob.obj.gsub(/^\s+/,'').
- gsub(/\s$/,"\n")
- end
- @tuned_file << dob
- end
- @tuned_file=@tuned_file.flatten
- end
- def number_sub_heading(dob,num,title_no)
- unless dob.obj =~/\d+\.|(?:chapter|article|section|clause)\s+\d+/i #name selection arbitrary, fix
- 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
- end
- if @md.toc_lev_limit \
- and @md.toc_lev_limit < num
- dob.obj=dob.obj.gsub(/^/,'!_ ') #bold line, watch
- end
- end
- dob
- end
- def heading_tag_clean(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=[]
- if defined? @md.make.num_top \
- and @md.make.num_top \
- and @md.make.num_top !~/^$/
- input||=@md.make.num_top
- end
- num_top=(input ? input.to_i : nil)
- t_no1=t_no2=t_no3=0
- if num_top
- no1=num_top; no2=(num_top + 1); no3=(num_top + 2)
- end
- chapter_number_counter=0
- data=data.compact
- data.each do |dob| #@md.seg_names << [additions to segment names]
- title_no=nil
- 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=dob.obj.gsub(/^#\s/,"#{chapter_number_counter} ").
- gsub(/#([:,]?\s|[.]?$)/,"#{chapter_number_counter}\\1")
- end
- if dob.ln==no1
- @subnumber=1
- @subnumber=0 if dob.ln==no1
- end
- if dob.ln.to_s =~/^[1-6]/ \
- and not dob.toc_ \
- and dob.obj !~/#{Mx[:fa_o]}(?:~#|-#)#{Mx[:fa_c]}/ # <-- fix
- if dob.ln==no1
- t_no1+=1; t_no2=0; t_no3=0
- title_no="#{t_no1}"
- 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
- dob.tags=[title_no,dob.tags].flatten if title_no !~/^\d+$/ #check whether will work across file types with stop signs
- 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=(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=dob.obj.gsub(/^/,"#{title_no}. ")
- end
- @md.seg_names << title_no
- end
- if dob.ln!=no1 \
- 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=dob.obj.gsub(/^/i,"#{title_no}. ")
- end
- end
- if dob.ln==no1 #watch because here you change dob.name
- dob.tags=["h#{title_no}",dob.tags].flatten #check whether will work across file types with stop signs
- end
- if dob.ln==no2 #watch because here you change dob.name
- t_no2+=1; t_no3=0
- title_no="#{t_no1}.#{t_no2}"
- dob.tags=["h#{title_no}",dob.tags].flatten #check whether will work across file types with stop signs
- dob=number_sub_heading(dob,no2,title_no)
- end
- if dob.ln==no3 #watch because here you change dob.name
- t_no3+=1
- title_no="#{t_no1}.#{t_no2}.#{t_no3}"
- dob.tags=["h#{title_no}",dob.tags].flatten #check whether will work across file types with stop signs
- dob=number_sub_heading(dob,no3,title_no)
- end
- elsif dob.ln.to_s =~/^[1-6]/ \
- and dob.name =~ /^[\w-]+-/ # endnotes, watch2005# endnotes, watch2005
- 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 \
- 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
- if (dob.name.nil? or dob.name.empty?) \
- and dob.ln.to_s =~/^[1-9]/ \
- and dob.obj =~ /^([\d\.]+)/ #risky (must be unique) consider output to 4~~\d instead of 4~\d
- dob.name=$1
- dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ #check whether will work across file types with stop signs
- end
- if @md.toc_lev_limit
- end
- elsif defined? dob.name \
- and dob.name
- dob.tags=[dob.name,dob.tags].flatten if dob.name !~/^\d+$/ #check whether will work across file types with stop signs
- end
- dob.tags=dob.tags.uniq if defined? dob.tags
- @tuned_file << dob
- end
- @tuned_file=@tuned_file.flatten
- end
- def ocn(data) #and auto segment numbering increment
- @tuned_file=SiSU_DAL_DocumentStructureExtract::OCN.new(@md,data).ocn
- @tuned_file
- end
- def xml(data)
- @tuned_file=SiSU_DAL_DocumentStructureExtract::XML.new(@md,data).dom
- @tuned_file
- end
- def minor_numbering(data) #and auto segment numbering increment
- @tuned_file=[]
- 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 \
- || 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
- if dob.obj =~/^#[ 1]/ \
- and dob.obj !~/^#\s+(?:~#)?$/
- letter_small=0
- number_small=0 if dob.obj =~ /^#1/
- number_small+=1
- dob.obj=dob.obj.gsub(/^#[ 1]/,"#{number_small}. ")
- end
- if dob.obj =~/^_# /
- dob.obj=dob.obj.gsub(/^_# /,"#{letter[letter_small]}. ")
- dob.indent='1'
- letter_small+=1
- end
- end
- end
- @tuned_file << dob
- end
- @tuned_file=@tuned_file.flatten
- end
- def name_para_seg_filename(data) #segment naming, remaining
- # paragraph name/numbering rules
- # manual naming overrides, manual naming may be
- # alpha-numeric characters mixed,
- # numeric only (a number), if
- # all segments have been named,
- # the numbers used are over 1000 or
- # it is not minded that auto-numbering uses a funny scheme for naming segments (not yet implemented)
- # [for now a warning is printed for such documents on use of maintenance or very-verbose flag]
- # auto-naming takes the form of giving numbers to segments
- # the rules for which are as follows
- # if the title/heading text starts with a numeric, then that is used (1 3.1 3rd etc.)
- # otherwise the level 4 segment number from the embedded document structure info is used
- # if there is none a sequential number is designated, preceded by an underscore
- @tuned_file,@unique_auto_name=[],[]
- tags={}
- art_filename_auto=1
- @counter=1
- 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 \
- && dob.ln \
- and dob.ln.to_s =~/^[456]/
- if dob.ln==4 \
- and not dob.name \
- and not @md.set_heading_seg
- @md.set_heading_seg=true
- end
- 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=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.opt.cmd =~/[VM]/
- end
- end
- if dob.ln==4 \
- and dob.name #extract segment name from embedded document structure info
- 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
- end
- end
- if dob.ln==4 \
- 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 @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
- @md.seg_names << segn_auto
- else puts 'segment name (numbering) error'
- end
- art_filename_auto+=1
- end
- if dob.ln==4 \
- and not dob.name #should not occur
- puts "e r r o r -\t#{__FILE__}::#{__LINE__}\n#{dob.inspect}"
- end
- end
- if (dob.is ==:heading \
- || dob.is ==:heading_insert) \
- && dob.ln==4
- @seg=dob.name
- end
- @tuned_file << if dob.is==:heading \
- && (@md.pagenew || @md.pagebreak || @md.pageline)
- m=dob.ln.to_s
- dob_tmp=[]
- if @md.pagenew.inspect =~/#{m}/
- dob_tmp << SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_new]) << dob
- elsif @md.pagebreak.inspect =~/#{m}/
- dob_tmp << SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page]) << dob
- elsif @md.pageline.inspect =~/#{m}/
- dob_tmp << SiSU_DAL_DocumentStructure::ObjectLayout.new.break(Hx[:br_page_line]) << dob
- end
- unless dob_tmp.length > 0; dob
- else dob_tmp
- end
- else dob
- 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
- tags["#{dob.ocn}"]={ segname: @segname }
- ocn_html_seg[dob.ocn]=if (dob.is==:heading || dob.is==:heading_insert)
- if dob.ln =~/[1-3]/
- { seg: nil, level: dob.ln }
- else #elsif dob.ln =~/[4-6]/
- { seg: @seg, level: dob.ln }
- end
- else
- { seg: @seg, level: nil }
- end
- end
- dob.tags=dob.tags.uniq if defined? dob.tags
- if defined? dob.tags \
- and dob.tags.length > 0
- #@segname=((dob.is=='heading'|| dob.is=='heading_insert') && dob.ln==4 && (defined? dob.name)) \
- #? (dob.name) \
- #: @segname
- dob.tags.each do |y|
- tags[y]={ ocn: dob.ocn.to_s, segname: @segname }
- end
- end
- dob
- end
- ocn_html_seg.each_with_index do |ocn,i|
- if ocn \
- and ocn[:level].to_s=~/[1-3]/
- (1..4).each do |x|
- if ocn_html_seg[i+x] and ocn_html_seg[i+x][:level]==4
- ocn[:seg]=ocn_html_seg[i+x][:seg]
- end
- end
- end
- end
- if @md.seg_names.length > 0
- @md.set_heading_seg=true
- end
- tuned_file=@tuned_file.flatten
- [tuned_file,tags,ocn_html_seg]
- 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.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
- 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
- end
- @tuned_file=@tuned_file.flatten
- end
- 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.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
- @md.set_heading_seg=true
- 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
- @tuned_file << dob
- end
- @tuned_file=@tuned_file.flatten
- end
- 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.opt.cmd =~/[MV]/
- @tuned_file=[]
- data.each do |t_o|
- unless @md.set_header_title
- if t_o !~/^%{1,2}\s/m \
- and t_o !~/\A\s*\Z/m
- @tuned_file << "#{Mx[:meta_o]}title#{Mx[:meta_c]} #{@md.heading_seg_first}"
- @md.title.main=@md.heading_seg_first
- @md.set_header_title=true
- end
- end
- @tuned_file << t_o
- end
- @tuned_file=@tuned_file.flatten
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dal_syntax.rb b/lib/sisu/v4/dal_syntax.rb
deleted file mode 100644
index 0f57307e..00000000
--- a/lib/sisu/v4/dal_syntax.rb
+++ /dev/null
@@ -1,631 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dal_syntax.rb;hb=HEAD>
-
- * 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='')
- @md,@data=md,data
- @vz=SiSU_Viz::Defaults.new
- @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.emphasis_set_to \
- and not @md.emphasis_set_to.nil?
- @md.emphasis_set_to
- 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|$)} #not implemented
- @line_scan_ital=if defined? @md.italics_match_list[:str]
- /#{@http_m}|#{bold_line}|#{@manmkp_ital}#{tail_m_ital}|#{@md.italics_match_list[: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.bold_match_list[:str] \
- and @md.bold_match_list[:str]) \
- and (defined? @vz.markup_make_bold[:str] \
- and @vz.markup_make_bold[:str])
- /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.bold_match_list[:str]}|#{@vz.markup_make_bold[:str]})#{tail_m_bold}|\S+|\n/i
- elsif defined? @md.bold_match_list[:str] \
- and @md.bold_match_list[:str]
- /#{@http_m}|#{bold_line}|(?:#{@manmkp_bold}|#{@md.bold_match_list[: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
- gsub(/(?:^-\.\.-\s*$)/,"#{Mx[:br_page_line]}")
- end
- dob
- end
- def wordlist_italics(dob)
- dob=dob.dup
- if (defined? @md.italics_match_list[:str] \
- and @md.italics_match_list[: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.italics_match_list[:regx] \
- and @md.italics_match_list[:regx]
- w=w.gsub(@md.italics_match_list[: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.substitution_match_list[:match_and_replace] \
- and @md.substitution_match_list[: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.substitution_match_list[:matches]}/
- @md.substitution_match_list[: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.bold_match_list[:str] \
- and @md.bold_match_list[: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.bold_match_list[:regx] \
- and @md.bold_match_list[:regx] #document header: @bold: [bold word list]
- w=w.gsub(@md.bold_match_list[:regx],"#{Mx[:fa_bold_o]}\\1#{Mx[:fa_bold_c]}")
- elsif defined? @vz.markup_make_bold \
- and @vz.markup_make_bold #defaults 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_lines(dob,leader)
- while (dob.obj =~/#{Mx[:br_nl]}/ \
- and dob.obj =~/(?:#{leader})([*!\/_#])\{(.+?)\}\1/m) \
- and $2 =~/#{Mx[:br_nl]}/
- dob=if dob.obj =~/#{Mx[:br_nl]}/ \
- and dob.obj =~/(#{leader})([*!\/_#])\{(.+?)\}\2/m
- lead,fce,txt=$1,$2,$3
- dob=if txt =~/#{Mx[:br_nl]}/
- lead_break=if dob.obj =~/^#{Mx[:br_nl]}/
- dob.obj=dob.obj.sub(/^#{Mx[:br_nl]}/,'')
- Mx[:br_nl]
- else ''
- end
- txt="#{lead_break}#{fce}\{" + txt.split(Mx[:br_nl]).join("\}#{fce}#{Mx[:br_nl]}#{fce}\{") + "\}#{fce}"
- dob.obj=dob.obj.sub(/(?:^|#{Mx[:gl_c]}|\s+|['"]|[#{Mx[:nbsp]}#{Mx[:fa_o_c]}#{Mx[:fa_c]}#{Mx[:lnk_o]}#{Mx[:br_nl]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:tc_c]}#{Mx[:tc_p]}]|[\(\[\{]|\>)([*!\/_#])\{.+?\}\1/m,"#{lead}#{txt}")
- dob
- else dob
- end
- end
- dob
- end
- dob
- end
- def fontface(dob)
- leader=/^|#{Mx[:gl_c]}|\s+|['"]|[#{Mx[:nbsp]}#{Mx[:fa_o_c]}#{Mx[:fa_c]}#{Mx[:lnk_o]}#{Mx[:br_nl]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:tc_c]}#{Mx[:tc_p]}]|[\(\[\{]|[、。]|\>/
- dob=fontface_lines(dob,leader)
- dob.obj=dob.obj.gsub(/(#{leader})\*\{(.+?)\}\*/m,
- "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis
- gsub(/(#{leader})!\{(.+?)\}!/m,
- "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold
- gsub(/(#{leader})\/\{(.+?)\}\//m,
- "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics
- gsub(/(#{leader})_\{(.+?)\}_/m,
- "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore
- gsub(/(#{leader})#\{(.+?)\}#/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(/&nbsp;/,"#{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]}"). #&amp; #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)&lt;(br(?: \/)?)&gt;([\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/v4/db_columns.rb b/lib/sisu/v4/db_columns.rb
deleted file mode 100644
index 488df7c5..00000000
--- a/lib/sisu/v4/db_columns.rb
+++ /dev/null
@@ -1,2001 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_columns.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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::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")
- if @db.share_source?
- @sisutxt=special_character_escape(src)
- else @sisutxt=''
- end
- @fulltext=clean_searchable_text(txt_arr)
- else @sisutxt,@fulltext='',''
- end
- end
-#% structures
- #def column_define
- # def varchar(name,size)
- # "#{name} VARCHAR(#{size}) NULL,"
- # end
- #end
-=begin
-#% title
-@title:
- :subtitle:
- :short:
- :edition:
- :language:
- :note:
-=end
- def column
- def title # DublinCore 1 - title
- def name
- 'title'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_title]}) NOT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata full document title [DC1]';}
- end
- def tuple
- if defined? @md.title.full \
- and @md.title.full=~/\S+/
- txt=@md.title.full
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_main
- def name
- 'title_main'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_title_part]}) NOT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata main document title';}
- end
- def tuple
- if defined? @md.title.main \
- and @md.title.main=~/\S+/
- txt=@md.title.main
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_sub
- def name
- 'title_sub'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_title_part]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document subtitle';}
- end
- def tuple
- if defined? @md.title.sub \
- and @md.title.sub=~/\S+/
- txt=@md.title.sub
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_short
- def name
- 'title_short'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_title_part]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document short title if any';}
- end
- def tuple
- if defined? @md.title.short \
- and @md.title.short=~/\S+/
- txt=@md.title.short
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_edition
- def name
- 'title_edition'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_title_edition]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document edition (version)';}
- end
- def tuple
- if defined? @md.title.edition \
- and @md.title.edition=~/\S+/
- txt=@md.title.edition
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_note
- def name
- 'title_note'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes associated with title';}
- end
- def tuple
- if defined? @md.title.note \
- and @md.title.note=~/\S+/
- txt=@md.title.note
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_language
- def name
- 'title_language'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document language [DC12]';}
- end
- def tuple
- if @lang.list[@md.opt.lng][:n]
- txt=@lang.list[@md.opt.lng][:n]
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def title_language_char # consider
- def name
- 'title_language_char'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language_char]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document language iso code';}
- end
- def tuple
- if defined? @md.opt.lng \
- and @md.opt.lng=~/\S+/
- txt=@md.opt.lng
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% creator
-@creator:
- :author:
- :editor:
- :contributor:
- :illustrator:
- :photographer:
- :translator:
- :prepared_by:
- :digitized_by:
- :audio:
- :video:
-=end
- def creator_author # DublinCore 2 - creator/author (author)
- def name
- 'creator_author'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document author (creator) [DC2]';}
- end
- def tuple
- if defined? @md.creator.author_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_author_honorific # consider
- def name
- 'creator_author_hon'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_creator_misc_short]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document author honorific (title e.g, Ms. Dr. Prof.)';}
- end
- def tuple
- if defined? @md.creator.author_hon \
- and @md.creator.author_hon=~/\S+/
- txt=@md.creator.author_hon
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_author_nationality # consider
- def name
- 'creator_author_nationality'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_creator_misc_short]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata nationality of document author (creator)';}
- end
- def tuple
- if defined? @md.creator.author_nationality_detail \
- and @md.creator.author_nationality=~/\S+/
- txt=@md.creator.author_nationality_detail
- 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
- 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
- end
- self
- end
- def creator_contributor # DublinCore 6 - contributor
- def name
- 'creator_contributor'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document contributor name(s) [DC6]';}
- end
- def tuple
- if defined? @md.creator.contributor_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_illustrator
- def name
- 'creator_illustrator'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document illustrator name(s)';}
- end
- def tuple
- if defined? @md.creator.illustrator_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_photographer
- def name
- 'creator_photographer'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document photographer name(s)';}
- end
- def tuple
- if defined? @md.creator.photographer_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_translator
- def name
- 'creator_translator'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document translator name(s)';}
- end
- def tuple
- if defined? @md.creator.translator_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_prepared_by
- def name
- 'creator_prepared_by'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document prepared by name(s)';}
- end
- def tuple
- if defined? @md.creator.prepared_by_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_digitized_by
- def name
- 'creator_digitized_by'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document digitized by name(s)';}
- end
- def tuple
- if defined? @md.creator.digitized_by_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_audio
- def name
- 'creator_audio'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document audio by name(s)';}
- end
- def tuple
- if defined? @md.creator.audio_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def creator_video
- def name
- 'creator_video'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document video by name(s)';}
- end
- def tuple
- if defined? @md.creator.video_detail \
- 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=txt.gsub(/[;, ]+\s*$/,'')
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% language
-#taken from other fields
-@title:
- :language:
-@original:
- :language:
-#not available -->
-#@language:
-# :document:
-# :original:
-=end
- def language_document
- def name
- 'language_document'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document language';}
- end
- def tuple
- if @lang.list[@md.opt.lng][:n]
- txt=@lang.list[@md.opt.lng][:n]
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def language_document_char
- def name
- 'language_document_char'
- end
- def create_column
- "#{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
- #modify check, is now required, SiSUv3d_
- if defined? @md.opt.lng \
- and @md.opt.lng=~/\S+/
- txt=@md.opt.lng
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def language_original
- def name
- 'language_original'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata original document/text language';}
- end
- def tuple
- if defined? @md.language.original \
- and @md.language.original=~/\S+/
- txt=@md.language.original
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def language_original_char
- def name
- 'language_original_char'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language_char]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document language';}
- end
- def tuple
- if defined? @md.language.original_char \
- and @md.language.original_char=~/\S+/
- txt=@md.language.original_char
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% date
-@date:
- :added_to_site:
- :available:
- :created:
- :issued:
- :modified:
- :published:
- :valid:
- :translated:
- :original_publication:
-=end
- def date_added_to_site
- def name
- 'date_added_to_site'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- #"#{name} DATE,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date added to site';}
- end
- def tuple
- if defined? @md.date.added_to_site \
- and @md.date.added_to_site=~/\S+/
- txt=@md.date.added_to_site
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_available
- def name
- 'date_available'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date added to site [DC]';}
- end
- def tuple
- if defined? @md.date.available \
- and @md.date.available=~/\S+/
- txt=@md.date.available
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_created
- def name
- 'date_created'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date created [DC]';}
- end
- def tuple
- if defined? @md.date.created \
- and @md.date.created=~/\S+/
- txt=@md.date.created
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_issued
- def name
- 'date_issued'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date issued [DC]';}
- end
- def tuple
- if defined? @md.date.issued \
- and @md.date.issued=~/\S+/
- txt=@md.date.issued
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_modified
- def name
- 'date_modified'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date modified [DC]';}
- end
- def tuple
- if defined? @md.date.modified \
- and @md.date.modified=~/\S+/
- txt=@md.date.modified
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_published
- def name
- 'date_published'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date published [DC7]';}
- end
- def tuple
- if defined? @md.date.published \
- and @md.date.published=~/\S+/
- txt=@md.date.published
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_valid
- def name
- 'date_valid'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date valid [DC]';}
- end
- def tuple
- if defined? @md.date.valid \
- and @md.date.valid=~/\S+/
- txt=@md.date.valid
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_translated
- def name
- 'date_translated'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date translated';}
- end
- def tuple
- if defined? @md.date.translated \
- and @md.date.translated=~/\S+/
- txt=@md.date.translated
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_original_publication
- def name
- 'date_original_publication'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_date_text]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date of original publication';}
- end
- def tuple
- if defined? @md.date.original_publication \
- and @md.date.original_publication=~/\S+/
- txt=@md.date.original_publication
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def date_generated
- def name
- 'date_generated'
- end
- def create_column #choose other representation of time
- "#{name} VARCHAR(30) NULL,"
- #"#{name} VARCHAR(10) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata date of sisu generation of document, automatically populated';}
- end
- def tuple #choose other representation of time
- if defined? @md.generated \
- and @md.generated.to_s=~/\S+/
- txt=@md.generated.to_s
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% publisher
-@publisher:
-=end
- def publisher
- def name
- 'publisher'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document publisher [DC5]';}
- end
- def tuple
- if defined? @md.publisher \
- and @md.publisher=~/\S+/
- txt=@md.publisher
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-##% current
-# def current_publisher
-# def name
-# 'current_publisher'
-# end
-# def size
-# 10
-# end
-# def create_column
-# "#{name} VARCHAR(#{current_publisher.size}) NULL,"
-# end
-# def tuple
-# t=if defined? @md.current.publisher \
-# and @md.current.publisher=~/\S+/
-# txt=@md.current.publisher
-# txt=special_character_escape(txt)
-# "'#{txt}', "
-# end
-# end
-# self
-# end
-=begin
-#% original
-@original:
- :publisher:
- #:date: #repeated under date
- :language:
- :institution:
- :nationality:
- :source:
-=end
- def original_publisher
- def name
- 'original_publisher'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original publisher [DC5]';}
- end
- def tuple
- if defined? @md.original.publisher \
- and @md.original.publisher=~/\S+/
- txt=@md.original.publisher
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def original_language
- def name
- 'original_language'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original language';}
- end
- def tuple
- if defined? @md.original.language \
- and @md.original.language=~/\S+/
- txt=@md.original.language
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def original_language_char # consider
- def name
- 'original_language_char'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language_char]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original language iso character';}
- end
- def tuple
- if defined? @md.original.language_char \
- and @md.original.language_char=~/\S+/
- txt=@md.original.language_char
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def original_source
- def name
- 'original_source'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original source [DC11]';}
- end
- def tuple
- if defined? @md.original.source \
- and @md.original.source=~/\S+/
- txt=@md.original.source
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def original_institution
- def name
- 'original_institution'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_name]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original institution';}
- end
- def tuple
- if defined? @md.original.institution \
- and @md.original.institution=~/\S+/
- txt=@md.original.institution
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def original_nationality
- def name
- 'original_nationality'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_language]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document original nationality';}
- end
- def tuple
- if defined? @md.original.nationality \
- and @md.original.nationality=~/\S+/
- txt=@md.original.nationality
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% rights
-@rights:
- #:copyright: #mapped to :text: used where no other copyrights and included in :all:
- :text:
- :translation:
- :illustrations:
- :photographs:
- :preparation:
- :digitization:
- :audio:
- :video:
- :license:
- :all:
-=end
- def rights_all
- def name
- 'rights'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata rights associated with document (composite) [DC15]';}
- end
- def tuple
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/
- txt=@md.rights.all
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_text
- def name
- 'rights_copyright_text'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text';}
- end
- def tuple
- if defined? @md.rights.copyright_text \
- and @md.rights.copyright_text=~/\S+/
- txt=@md.rights.copyright_text
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_translation
- def name
- 'rights_copyright_translation'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text translation (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_translation \
- and @md.rights.copyright_translation=~/\S+/
- txt=@md.rights.copyright_translation
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_illustrations
- def name
- 'rights_copyright_illustrations'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text illustrations (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_illustrations \
- and @md.rights.copyright_illustrations=~/\S+/
- txt=@md.rights.copyright_illustrations
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_photographs
- def name
- 'rights_copyright_photographs'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text photographs (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_photographs \
- and @md.rights.copyright_photographs=~/\S+/
- txt=@md.rights.copyright_photographs
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_preparation
- def name
- 'rights_copyright_preparation'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text preparation (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_preparation \
- and @md.rights.copyright_preparation=~/\S+/
- txt=@md.rights.copyright_preparation
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_digitization
- def name
- 'rights_copyright_digitization'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text digitization (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_digitization \
- and @md.rights.copyright_digitization=~/\S+/
- txt=@md.rights.copyright_digitization
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_audio
- def name
- 'rights_copyright_audio'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text audio (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_audio \
- and @md.rights.copyright_audio=~/\S+/
- txt=@md.rights.copyright_audio
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_copyright_video
- def name
- 'rights_copyright_video'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata copyright associated for document text video (if any)';}
- end
- def tuple
- if defined? @md.rights.copyright_video \
- and @md.rights.copyright_video=~/\S+/
- txt=@md.rights.copyright_video
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def rights_license
- def name
- 'rights_license'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata license granted for use of document if any)';}
- end
- def tuple
- if defined? @md.rights.license \
- and @md.rights.license=~/\S+/
- txt=@md.rights.license
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% identifier
-@identifier:
- :oclc:
- :isbn:
-=end
- def identifier_oclc
- def name
- 'identifier_oclc'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_library]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata identifier document Online Computer Library Center number';}
- end
- def tuple
- if defined? @md.identifier.oclc \
- and @md.identifier.oclc=~/\S+/
- txt=@md.identifier.oclc
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def identifier_isbn
- def name
- 'identifier_isbn'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_small]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata identifier document isbn (if any)';}
- end
- def tuple
- if defined? @md.identifier.isbn \
- and @md.identifier.isbn=~/\S+/
- txt=@md.identifier.isbn
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% classify
-@classify:
- :topic_register:
- :subject:
- :keywords:
- :type:
- :loc:
- :dewey:
-=end
- def classify_topic_register
- def name
- 'classify_topic_register'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_info_note]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document topic register (semi-structured document subject information)';}
- end
- def tuple
- if defined? @md.classify.topic_register \
- and @md.classify.topic_register=~/\S+/
- txt=@md.classify.topic_register
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def classify_subject
- def name
- 'classify_subject'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_long]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document subject matter [DC3]';}
- end
- def tuple
- if defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/
- txt=@md.classify.subject
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def classify_loc
- def name
- 'classify_loc'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_library]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document Library of Congress';}
- end
- def tuple
- if defined? @md.classify.loc \
- and @md.classify.loc=~/\S+/
- txt=@md.classify.loc
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def classify_dewey
- def name
- 'classify_dewey'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_library]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document Dewey';}
- end
- def tuple
- if defined? @md.classify.dewey \
- and @md.classify.dewey=~/\S+/
- txt=@md.classify.dewey
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def classify_keywords
- def name
- 'classify_keywords'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_long]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document keywords';}
- end
- def tuple
- if defined? @md.classify.keywords \
- and @md.classify.keywords=~/\S+/
- txt=@md.classify.keywords
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% notes
-@notes:
- :abstract:
- :description:
- :comment:
- :coverage:
- :relation:
- :format:
- :history:
- :prefix:
- :prefix_a:
- :prefix_b:
- :suffix:
-=end
- def notes_abstract
- def name
- 'notes_abstract'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes abstract';}
- end
- def tuple
- if defined? @md.notes.abstract \
- and @md.notes.abstract=~/\S+/
- txt=@md.notes.abstract
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_description
- def name
- 'notes_description'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes description [DC4]';}
- end
- def tuple
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/
- txt=@md.notes.description
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_comment
- def name
- 'notes_comment'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes comment';}
- end
- def tuple
- if defined? @md.notes.comment \
- and @md.notes.comment=~/\S+/
- txt=@md.notes.comment
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_coverage
- def name
- 'notes_coverage'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_short]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document coverage [DC14]';}
- end
- def tuple
- if defined? @md.classify.coverage \
- and @md.classify.coverage=~/\S+/
- txt=@md.classify.coverage
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_relation
- def name
- 'notes_relation'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_short]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document relation [DC13]';}
- end
- def tuple
- if defined? @md.classify.relation \
- and @md.classify.relation=~/\S+/
- txt=@md.classify.relation
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_history #check, consider removal
- def name
- 'notes_history'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_long]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes history';}
- end
- def tuple
- if defined? @md.notes.history \
- and @md.notes.history=~/\S+/
- txt=@md.notes.history
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_type #check
- def name
- 'notes_type'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_long]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata notes document type [DC8]';}
- end
- def tuple
- if defined? @md.notes.type \
- and @md.notes.type=~/\S+/
- txt=@md.notes.type
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_format
- def name
- 'notes_format'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_txt_long]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata classify document format [DC9]';}
- end
- def tuple
- if defined? @md.classify.format \
- and @md.classify.format=~/\S+/
- txt=@md.classify.format
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_prefix
- def name
- 'notes_prefix'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes prefix';}
- end
- def tuple
- if defined? @md.notes.prefix \
- and @md.notes.prefix=~/\S+/
- txt=@md.notes.prefix
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_prefix_a
- def name
- 'notes_prefix_a'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes prefix_a';}
- end
- def tuple
- if defined? @md.notes.prefix_a \
- and @md.notes.prefix_a=~/\S+/
- txt=@md.notes.prefix_a
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_prefix_b
- def name
- 'notes_prefix_b'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes prefix_b';}
- end
- def tuple
- if defined? @md.notes.prefix_b \
- and @md.notes.prefix_b=~/\S+/
- txt=@md.notes.prefix_b
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def notes_suffix
- def name
- 'notes_suffix'
- end
- def create_column # keep text
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document notes suffix';}
- end
- def tuple
- if defined? @md.notes.suffix \
- and @md.notes.suffix=~/\S+/
- txt=@md.notes.suffix
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% src
-=end
- def src_filename
- def name
- 'src_filename'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_filename]}) NOT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'sisu markup source text filename';}
- end
- def tuple
- if defined? @md.fns \
- and @md.fns=~/\S+/
- txt=@md.fns
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def src_fingerprint
- def name
- 'src_fingerprint' #hash/digest, sha256 or md5
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_digest]}) NULL,"
- #"#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'sisu markup source text fingerprint, hash digest sha256 (or md5)';}
- end
- def tuple
- if defined? @md.dgst \
- and @md.dgst.is_a?(Array) \
- and @md.dgst[1]=~/\S+/
- txt=@md.dgst[1]
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def src_filesize
- def name
- 'src_filesize'
- end
- def create_column
- "#{name} VARCHAR(#{Db[:col_filesize]}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'sisu markup source text file size';}
- end
- def tuple
- if defined? @md.filesize \
- and @md.filesize=~/\S+/
- txt=@md.filesize
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def src_word_count
- def name
- 'src_word_count'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'sisu markup source text word count';}
- end
- def tuple
- if defined? @md.wc_words \
- and @md.wc_words=~/\S+/
- txt=@md.wc_words
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- def src_txt # consider naming sisusrc
- def name
- 'src_text'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'sisu markup source text (if shared)';}
- end
- def tuple
- if @md.opt.mod.inspect=~/import|update/ \
- and FileTest.exist?(@md.fns)
- ["#{name}, ","'#{@sisutxt}', "]
- else ['','']
- end
- end
- self
- end
-=begin
-#% misc
-@links:
-=end
- def fulltext
- def name
- 'fulltext'
- end
- def create_column
- "#{name} TEXT NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'document full text clean, searchable';}
- end
- def tuple
- if @md.opt.mod.inspect=~/import|update/ \
- and FileTest.exist?(@md.fns)
- ["#{name}, ","'#{@fulltext}', "]
- else ['','']
- end
- end
- self
- end
- def links
- def name
- 'links'
- end
- def create_column
- "#{name} TEXT NULL,"
- #"#{name} VARCHAR(#{links.size}) NULL,"
- end
- def column_comment
- %{COMMENT ON COLUMN metadata_and_text.#{name}
- IS 'metadata document links';}
- end
- def tuple
- if defined? @md.links \
- and @md.links=~/\S+/
- txt=@md.links
- txt=special_character_escape(txt)
- ["#{name}, ","'#{txt}', "]
- else ['','']
- end
- end
- self
- end
- self
- end
- end
- class ColumnSize
- def document_clean # restriction not necessary
- 60000
- end
- def document_body
- 16000
- end
- def document_seg
- 120
- end
- def document_seg_full
- 120
- end
- def endnote_clean # restriction not necessary
- 60000
- end
- def endnote_body
- 16000
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_create.rb b/lib/sisu/v4/db_create.rb
deleted file mode 100644
index e5b8dc78..00000000
--- a/lib/sisu/v4/db_create.rb
+++ /dev/null
@@ -1,618 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_create.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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') \
- ? (SiSU_DbCreate::Comment.new(@conn,@sql_type))
- : nil
- @@dl ||=SiSU_Env::InfoEnv.new.digest.length
- end
- def available
- DBI.available_drivers.each do |driver|
- puts "Driver: #{driver}"
- DBI.data_sources(driver).each do |dsn|
- puts "\tDatasource: #{dsn}"
- end
- end
- end
- def create_db
- @env=SiSU_Env::InfoEnv.new(@opt.fns)
- tell=(@sql_type=='sqlite') \
- ? SiSU_Screen::Ansi.new(@opt.cmd,'Create SQLite db tables in:',%{"#{@file}"})
- : SiSU_Screen::Ansi.new(@opt.cmd,'Create pgSQL db tables in:',%{"#{Db[:name_prefix]}#{@env.path.stub_pwd}"})
- tell.dark_grey_title_hi 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::InfoEnv.new('')
- if @opt.cmd =~/d/
- dir.path.webserv_stub_ensure
- end
- end
- def create_table
- def metadata_and_text
- print %{
- currently using sisu dbi module
- to be populated from document files
- create tables metadata_and_text
- data import through ruby transfer
- } if @opt.cmd =~/[VM]/
- create_metadata_and_text=%{
- CREATE TABLE metadata_and_text (
- tid BIGINT PRIMARY KEY,
- /* title */
- #{column.title.create_column}
- #{column.title_main.create_column}
- #{column.title_sub.create_column}
- #{column.title_short.create_column}
- #{column.title_edition.create_column}
- #{column.title_note.create_column}
- #{column.title_language.create_column}
- #{column.title_language_char.create_column}
- /* creator */
- #{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}
- #{column.creator_translator.create_column}
- #{column.creator_prepared_by.create_column}
- #{column.creator_digitized_by.create_column}
- #{column.creator_audio.create_column}
- #{column.creator_video.create_column}
- /* language */
- #{column.language_document.create_column}
- #{column.language_document_char.create_column}
- #{column.language_original.create_column}
- #{column.language_original_char.create_column}
- /* date */
- #{column.date_added_to_site.create_column}
- #{column.date_available.create_column}
- #{column.date_created.create_column}
- #{column.date_issued.create_column}
- #{column.date_modified.create_column}
- #{column.date_published.create_column}
- #{column.date_valid.create_column}
- #{column.date_translated.create_column}
- #{column.date_original_publication.create_column}
- #{column.date_generated.create_column}
- /* publisher */
- #{column.publisher.create_column}
- /* original */
- #{column.original_publisher.create_column}
- #{column.original_language.create_column}
- #{column.original_language_char.create_column}
- #{column.original_source.create_column}
- #{column.original_institution.create_column}
- #{column.original_nationality.create_column}
- /* rights */
- #{column.rights_all.create_column}
- #{column.rights_copyright_text.create_column}
- #{column.rights_copyright_translation.create_column}
- #{column.rights_copyright_illustrations.create_column}
- #{column.rights_copyright_photographs.create_column}
- #{column.rights_copyright_preparation.create_column}
- #{column.rights_copyright_digitization.create_column}
- #{column.rights_copyright_audio.create_column}
- #{column.rights_copyright_video.create_column}
- #{column.rights_license.create_column}
- /* classify */
- #{column.classify_topic_register.create_column}
- #{column.classify_subject.create_column}
- #{column.classify_loc.create_column}
- #{column.classify_dewey.create_column}
- #{column.classify_keywords.create_column}
- /* identifier */
- #{column.identifier_oclc.create_column}
- #{column.identifier_isbn.create_column}
- /* notes */
- #{column.notes_abstract.create_column}
- #{column.notes_description.create_column}
- #{column.notes_comment.create_column}
- #{column.notes_history.create_column}
- #{column.notes_coverage.create_column}
- #{column.notes_relation.create_column}
- /* column.notes_source.create_column */
- #{column.notes_type.create_column}
- #{column.notes_format.create_column}
- #{column.notes_prefix.create_column}
- #{column.notes_prefix_a.create_column}
- #{column.notes_prefix_b.create_column}
- #{column.notes_suffix.create_column}
- /* src */
- #{column.src_filename.create_column}
- #{column.src_fingerprint.create_column}
- #{column.src_filesize.create_column}
- #{column.src_word_count.create_column}
- #{column.src_txt.create_column}
- /* misc */
- #{column.fulltext.create_column}
- #{column.links.create_column.gsub(/,$/,'')}
-/* subj VARCHAR(64) NULL, */
-/* contact VARCHAR(100) NULL, */
-/* information VARCHAR(100) NULL, */
-/* types CHAR(1) NULL, */
-/* writing_focus_nationality VARCHAR(100) NULL, */
- );
- }
- @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
- } if @opt.cmd =~/[VM]/
- create_doc_objects=%{
- CREATE TABLE doc_objects (
- lid BIGINT PRIMARY KEY,
- metadata_tid BIGINT REFERENCES metadata_and_text,
- ocn SMALLINT,
- ocnd VARCHAR(6),
- ocns VARCHAR(6),
- clean TEXT NULL,
- body TEXT NULL,
- book_idx TEXT NULL,
- seg VARCHAR(256) NULL,
- lev_an VARCHAR(1),
- lev SMALLINT NULL,
- lev1 SMALLINT,
- lev2 SMALLINT,
- lev3 SMALLINT,
- lev4 SMALLINT,
- lev5 SMALLINT,
- lev6 SMALLINT,
- en_a SMALLINT NULL,
- en_z SMALLINT NULL,
- en_a_asterisk SMALLINT NULL,
- en_z_asterisk SMALLINT NULL,
- en_a_plus SMALLINT NULL,
- en_z_plus SMALLINT NULL,
- t_of VARCHAR(16),
- t_is VARCHAR(16),
- node VARCHAR(16) NULL,
- parent VARCHAR(16) NULL,
- digest_clean CHAR(#{@@dl}),
- digest_all CHAR(#{@@dl}),
- types CHAR(1) NULL
- );
- }
- @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
- } if @opt.cmd =~/[VM]/
- create_endnotes=%{
- CREATE TABLE endnotes (
- nid BIGINT PRIMARY KEY,
- document_lid BIGINT REFERENCES doc_objects,
- nr SMALLINT,
- clean TEXT NULL,
- body TEXT NULL,
- ocn SMALLINT,
- ocnd VARCHAR(6),
- ocns VARCHAR(6),
- digest_clean CHAR(#{@@dl}),
- metadata_tid BIGINT REFERENCES metadata_and_text
- );
- }
- @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
- } if @opt.cmd =~/[VM]/
- create_endnotes_asterisk=%{
- CREATE TABLE endnotes_asterisk (
- nid BIGINT PRIMARY KEY,
- document_lid BIGINT REFERENCES doc_objects,
- nr SMALLINT,
- clean TEXT NULL,
- body TEXT NULL,
- ocn SMALLINT,
- ocnd VARCHAR(6),
- ocns VARCHAR(6),
- digest_clean CHAR(#{@@dl}),
- metadata_tid BIGINT REFERENCES metadata_and_text
- );
- }
- @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
- } if @opt.cmd =~/[VM]/
- create_endnotes_plus=%{
- CREATE TABLE endnotes_plus (
- nid BIGINT PRIMARY KEY,
- document_lid BIGINT REFERENCES doc_objects,
- nr SMALLINT,
- clean TEXT NULL,
- body TEXT NULL,
- ocn SMALLINT,
- ocnd VARCHAR(6),
- ocns VARCHAR(6),
- digest_clean CHAR(#{@@dl}),
- metadata_tid BIGINT REFERENCES metadata_and_text
- );
- }
- @conn.execute(create_endnotes_plus)
- @comment.psql.endnotes_plus if @comment
- end
- def urls # create doc_objects file links mapping
- print %{
- currently using sisu dbi module
- to be populated from doc_objects files
- create tables urls
- data import through ruby transfer
- } if @opt.cmd =~/[VM]/
- create_urls=%{
- CREATE TABLE urls (
- metadata_tid BIGINT REFERENCES metadata_and_text,
- plaintext varchar(512),
- html_toc varchar(512),
- html_doc varchar(512),
- xhtml varchar(512),
- xml_sax varchar(512),
- xml_dom varchar(512),
- odf varchar(512),
- pdf_p varchar(512),
- pdf_l varchar(512),
- concordance varchar(512),
- latex_p varchar(512),
- latex_l varchar(512),
- digest varchar(512),
- manifest varchar(512),
- markup varchar(512),
- sisupod varchar(512)
- );
- }
- @conn.execute(create_urls)
- @comment.psql.urls if @comment
- end
- self
- end
- end
- class Comment < SiSU_DbColumns::Columns
- def initialize(conn,sql_type='pg')
- @conn=conn
- if sql_type =~ /pg/; psql
- end
- end
- def psql
- def conn_execute_array(sql_arr)
- @conn.transaction do |conn|
- sql_arr.each do |sql|
- conn.execute(sql)
- end
- end
- end
- def metadata_and_text
- sql_arr=[
- %{COMMENT ON Table metadata_and_text
- IS 'contains SiSU metadata and fulltext for search (including source .sst if shared)';},
- %{COMMENT ON COLUMN metadata_and_text.tid
- IS 'unique';},
- %{#{column.title.column_comment}},
- %{#{column.title_main.column_comment}},
- %{#{column.title_sub.column_comment}},
- %{#{column.title_short.column_comment}},
- %{#{column.title_edition.column_comment}},
- %{#{column.title_note.column_comment}},
- %{#{column.title_language.column_comment}},
- %{#{column.title_language_char.column_comment}},
- %{#{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}},
- %{#{column.creator_translator.column_comment}},
- %{#{column.creator_prepared_by.column_comment}},
- %{#{column.creator_digitized_by.column_comment}},
- %{#{column.creator_audio.column_comment}},
- %{#{column.creator_video.column_comment}},
- %{#{column.language_document.column_comment}},
- %{#{column.language_document_char.column_comment}},
- %{#{column.language_original.column_comment}},
- %{#{column.language_original_char.column_comment}},
- %{#{column.date_added_to_site.column_comment}},
- %{#{column.date_available.column_comment}},
- %{#{column.date_created.column_comment}},
- %{#{column.date_issued.column_comment}},
- %{#{column.date_modified.column_comment}},
- %{#{column.date_published.column_comment}},
- %{#{column.date_valid.column_comment}},
- %{#{column.date_translated.column_comment}},
- %{#{column.date_original_publication.column_comment}},
- %{#{column.date_generated.column_comment}},
- %{#{column.publisher.column_comment}},
- %{#{column.original_publisher.column_comment}},
- %{#{column.original_language.column_comment}},
- %{#{column.original_language_char.column_comment}},
- %{#{column.original_source.column_comment}},
- %{#{column.original_institution.column_comment}},
- %{#{column.original_nationality.column_comment}},
- %{#{column.rights_all.column_comment}},
- %{#{column.rights_copyright_text.column_comment}},
- %{#{column.rights_copyright_translation.column_comment}},
- %{#{column.rights_copyright_illustrations.column_comment}},
- %{#{column.rights_copyright_photographs.column_comment}},
- %{#{column.rights_copyright_preparation.column_comment}},
- %{#{column.rights_copyright_digitization.column_comment}},
- %{#{column.rights_copyright_audio.column_comment}},
- %{#{column.rights_copyright_video.column_comment}},
- %{#{column.rights_license.column_comment}},
- %{#{column.classify_topic_register.column_comment}},
- %{#{column.classify_subject.column_comment}},
- %{#{column.classify_loc.column_comment}},
- %{#{column.classify_dewey.column_comment}},
- %{#{column.classify_keywords.column_comment}},
- %{#{column.identifier_oclc.column_comment}},
- %{#{column.identifier_isbn.column_comment}},
- %{#{column.notes_abstract.column_comment}},
- %{#{column.notes_comment.column_comment}},
- %{#{column.notes_description.column_comment}},
- %{#{column.notes_history.column_comment}},
- %{#{column.notes_coverage.column_comment}},
- %{#{column.notes_relation.column_comment}},
- %{#{column.notes_type.column_comment}},
- %{#{column.notes_format.column_comment}},
- %{#{column.notes_prefix.column_comment}},
- %{#{column.notes_prefix_a.column_comment}},
- %{#{column.notes_prefix_b.column_comment}},
- %{#{column.notes_suffix.column_comment}},
- %{#{column.src_filename.column_comment}},
- %{#{column.src_fingerprint.column_comment}},
- %{#{column.src_filesize.column_comment}},
- %{#{column.src_word_count.column_comment}},
- %{#{column.src_txt.column_comment}},
- %{#{column.fulltext.column_comment}},
- %{#{column.links.column_comment}},
- ]
- conn_execute_array(sql_arr)
- end
- def doc_objects
- sql_arr=[
- %{COMMENT ON Table doc_objects
- IS 'contains searchable text of SiSU document objects';},
- %{COMMENT ON COLUMN doc_objects.lid
- IS 'unique';},
- %{COMMENT ON COLUMN doc_objects.metadata_tid
- IS 'tie to title in metadata_and_text';},
- %{COMMENT ON COLUMN doc_objects.lev_an
- IS 'doc level A-C 1-6';},
- %{COMMENT ON COLUMN doc_objects.lev
- IS 'doc level 1-6 \d\~';},
- %{COMMENT ON COLUMN doc_objects.seg
- IS 'segment name from level number 4 (lv 1)';},
- %{COMMENT ON COLUMN doc_objects.ocn
- IS 'object citation number';},
- %{COMMENT ON COLUMN doc_objects.en_a
- IS 'first endnote number in text object (eg. NULL or 34) (used with en_z to create range)';},
- %{COMMENT ON COLUMN doc_objects.en_z
- IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a to create range)';},
- %{COMMENT ON COLUMN doc_objects.en_a_asterisk
- IS 'first endnote number in text object (eg. NULL or 34) (used with en_z_asterisk to create range)';},
- %{COMMENT ON COLUMN doc_objects.en_z_asterisk
- IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a_asterisk to create range)';},
- %{COMMENT ON COLUMN doc_objects.en_a_plus
- IS 'first endnote number in text object (eg. NULL or 34) (used with en_z_plus to create range)';},
- %{COMMENT ON COLUMN doc_objects.en_z_plus
- IS 'last endnote number within text object (eg. NULL, 34 or say 47) (used with en_a_plus to create range)';},
- %{COMMENT ON COLUMN doc_objects.types
- IS 'document types seg scroll';},
- %{COMMENT ON COLUMN doc_objects.clean
- 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
- IS 'document structure, level number 2';},
- %{COMMENT ON COLUMN doc_objects.lev3
- IS 'document structure, level number 3';},
- %{COMMENT ON COLUMN doc_objects.lev4
- IS 'document structure, level number 4';},
- %{COMMENT ON COLUMN doc_objects.lev5
- IS 'document structure, level number 5';},
- %{COMMENT ON COLUMN doc_objects.lev6
- IS 'document structure, level number 6';},
- %{COMMENT ON COLUMN doc_objects.t_of
- IS 'document structure, type of object (object is of)';},
- %{COMMENT ON COLUMN doc_objects.t_is
- IS 'document structure, object is';},
- %{COMMENT ON COLUMN doc_objects.node
- IS 'document structure, object node if heading';},
- %{COMMENT ON COLUMN doc_objects.parent
- IS 'document structure, object parent (is a heading)';}
- ]
- conn_execute_array(sql_arr)
- end
- def endnotes
- sql_arr=[
- %{COMMENT ON Table endnotes
- IS 'contains searchable text of SiSU documents endnotes';},
- %{COMMENT ON COLUMN endnotes.nid
- IS 'unique';},
- %{COMMENT ON COLUMN endnotes.document_lid
- IS 'ties to text block from which referenced';},
- %{COMMENT ON COLUMN endnotes.nr
- IS 'endnote number <!e_(\d+)!>';},
- %{COMMENT ON COLUMN endnotes.clean
- IS 'endnote substantive content, stripped of markup';},
- %{COMMENT ON COLUMN endnotes.body
- IS 'endnote substantive content';},
- %{COMMENT ON COLUMN endnotes.ocn
- IS 'object citation no# <\~(\d+)> from which endnote is referenced';},
- %{COMMENT ON COLUMN doc_objects.metadata_tid
- IS 'tie to title in metadata_and_text - unique for each document';}
- ]
- conn_execute_array(sql_arr)
- end
- def endnotes_asterisk
- sql_arr=[
- %{COMMENT ON Table endnotes_asterisk
- IS 'contains searchable text of SiSU documents endnotes marked with asterisk';},
- %{COMMENT ON COLUMN endnotes_asterisk.nid
- IS 'unique';},
- %{COMMENT ON COLUMN endnotes_asterisk.document_lid
- IS 'ties to text block from which referenced';},
- %{COMMENT ON COLUMN endnotes_asterisk.nr
- IS 'endnote number <!e_(\d+)!>';},
- %{COMMENT ON COLUMN endnotes_asterisk.clean
- IS 'endnote substantive content, stripped of markup';},
- %{COMMENT ON COLUMN endnotes_asterisk.body
- IS 'endnote substantive content';},
- %{COMMENT ON COLUMN endnotes_asterisk.ocn
- IS 'object citation no# <\~(\d+)> from which endnote is referenced';},
- %{COMMENT ON COLUMN doc_objects.metadata_tid
- IS 'tie to title in metadata_and_text - unique for each document';}
- ]
- conn_execute_array(sql_arr)
- end
- def endnotes_plus
- sql_arr=[
- %{COMMENT ON Table endnotes_plus
- IS 'contains searchable text of SiSU documents endnotes marked with plus';},
- %{COMMENT ON COLUMN endnotes_plus.nid
- IS 'unique';},
- %{COMMENT ON COLUMN endnotes_plus.document_lid
- IS 'ties to text block from which referenced';},
- %{COMMENT ON COLUMN endnotes_plus.nr
- IS 'endnote number <!e_(\d+)!>';},
- %{COMMENT ON COLUMN endnotes_plus.clean
- IS 'endnote substantive content, stripped of markup';},
- %{COMMENT ON COLUMN endnotes_plus.body
- IS 'endnote substantive content';},
- %{COMMENT ON COLUMN endnotes_plus.ocn
- IS 'object citation no# <\~(\d+)> from which endnote is referenced';},
- %{COMMENT ON COLUMN doc_objects.metadata_tid
- IS 'tie to title in metadata_and_text - unique for each document';},
- ]
- conn_execute_array(sql_arr)
- end
- def urls
- sql_arr=[
- %{COMMENT ON Table urls
- IS 'contains base url links to different SiSU output';},
- %{COMMENT ON COLUMN doc_objects.metadata_tid
- IS 'tie to title in metadata_and_text - unique for each document, the mapping of rows is one to one';},
- %{COMMENT ON COLUMN urls.plaintext
- IS 'plaintext utf-8';},
- %{COMMENT ON COLUMN urls.html_toc
- IS 'table of contents for segmented html document';},
- %{COMMENT ON COLUMN urls.html_doc
- IS 'html document (scroll)';},
- %{COMMENT ON COLUMN urls.xhtml
- IS 'xhtml document (scroll)';},
- %{COMMENT ON COLUMN urls.xml_sax
- IS 'xml sax oriented document (scroll)';},
- %{COMMENT ON COLUMN urls.xml_dom
- IS 'xml dom oriented document (scroll)';},
- %{COMMENT ON COLUMN urls.odf
- IS 'opendocument format text';},
- %{COMMENT ON COLUMN urls.pdf_p
- IS 'pdf portrait';},
- %{COMMENT ON COLUMN urls.pdf_l
- IS 'pdf landscape';},
- %{COMMENT ON COLUMN urls.concordance
- IS 'rudimentary document index linked to html';},
- %{COMMENT ON COLUMN urls.latex_p
- IS 'latex portrait';},
- %{COMMENT ON COLUMN urls.latex_l
- IS 'latex_landscape';},
- %{COMMENT ON COLUMN urls.markup
- IS 'markup';},
- %{COMMENT ON COLUMN urls.sisupod
- IS 'SiSU document format .tgz (all SiSU information on document)';},
- ]
- conn_execute_array(sql_arr)
- end
- self
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_dbi.rb b/lib/sisu/v4/db_dbi.rb
deleted file mode 100644
index 7fd9b520..00000000
--- a/lib/sisu/v4/db_dbi.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_dbi.rb;hb=HEAD>
-
- * 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/v4/db_drop.rb b/lib/sisu/v4/db_drop.rb
deleted file mode 100644
index 80167822..00000000
--- a/lib/sisu/v4/db_drop.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_drop.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-module SiSU_DbDrop
- class Drop
- 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
- case @sql_type
- when /sqlite/
- cascade=''
- else
- cascade='CASCADE'
- end
- @drop_table=[
- "DROP TABLE metadata_and_text #{cascade};",
- "DROP TABLE doc_objects #{cascade};",
- "DROP TABLE urls #{cascade};",
- "DROP TABLE endnotes #{cascade};",
- "DROP TABLE endnotes_asterisk #{cascade};",
- "DROP TABLE endnotes_plus #{cascade};",
- ]
- end
- def drop
- def tables #% drop all tables
- begin
- msg_sqlite="as not all disk space is recovered after dropping the database << #{@db_info.sqlite.db} >>, you may be better off deleting the file, and recreating it as necessary"
- case @sql_type
- when /sqlite/
- puts msg_sqlite
- ans=@ans.response?('remove sql database?')
- if ans \
- and File.exist?(@db_info.sqlite.db)
- @conn.close
- File.unlink(@db_info.sqlite.db)
- db=SiSU_Env::InfoDb.new
- conn=db.sqlite.conn_sqlite3
- 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
- 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::Rescued.new($!,$@,'-D').location do
- __LINE__.to_s + ':' + __FILE__
- end
- sdb.output_dir?
- end
- exit
- else
- @conn.transaction
- @drop_table.each do |d|
- @conn.execute(d)
- end
- @conn.commit
- end
- else
- @drop_table.each do |d|
- @conn.execute(d)
- end
- end
- rescue
- case @sql_type
- when /sqlite/
- ans=@ans.response?('remove sql database?')
- if ans and File.exist?(@db_info.sqlite.db); File.unlink(@db_info.sqlite.db)
- end
- else
- @drop_table.each do |d|
- @conn.execute(d)
- end
- end
- ensure
- end
- end
- def indexes
- def conn_execute_array(sql_arr)
- @conn.transaction do |conn|
- sql_arr.each do |sql|
- conn.execute(sql)
- end
- end
- end
- def base #% drop base indexes
- print "\n drop documents common indexes\n" unless @opt.cmd =~/q/
- sql_arr=[
- %{DROP INDEX idx_title;},
- %{DROP INDEX idx_author;},
- %{DROP INDEX idx_filename;},
- %{DROP INDEX idx_topics;},
- %{DROP INDEX idx_ocn;},
- %{DROP INDEX idx_digest_clean;},
- %{DROP INDEX idx_digest_all;},
- %{DROP INDEX idx_lev1;},
- %{DROP INDEX idx_lev2;},
- %{DROP INDEX idx_lev3;},
- %{DROP INDEX idx_lev4;},
- %{DROP INDEX idx_lev5;},
- %{DROP INDEX idx_lev6;},
- %{DROP INDEX idx_endnote_nr;},
- %{DROP INDEX idx_digest_en;},
- %{DROP INDEX idx_endnote_nr_asterisk;},
- %{DROP INDEX idx_endnote_asterisk;},
- %{DROP INDEX idx_digest_en_asterisk;},
- %{DROP INDEX idx_endnote_nr_plus;},
- %{DROP INDEX idx_endnote_plus;},
- %{DROP INDEX idx_digest_en_plus},
- ]
- conn_execute_array(sql_arr)
- end
- def text #% drop TEXT indexes, sqlite
- print "\n drop documents TEXT indexes\n" unless @opt.cmd =~/q/
- sql_arr=[
- %{DROP INDEX idx_clean;},
- %{DROP INDEX idx_endnote},
- ]
- conn_execute_array(sql_arr)
- end
- self
- end
- indexes.base
- @opt.cmd=~/D/ || ((@opt.mod=~/psql/) ? '' : indexes.text)
- self
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_import.rb b/lib/sisu/v4/db_import.rb
deleted file mode 100644
index 0384795a..00000000
--- a/lib/sisu/v4/db_import.rb
+++ /dev/null
@@ -1,734 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_import.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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_DbText::Prepare
- include SiSU_Param
- include SiSU_Screen
- @@dl=nil
- @@hname=nil
- attr_accessor :tp
- 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::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
- @md.fnb
- end
- @fnc="#{@dal}/#{@opt.fns}.content.rbm"
- @@seg,@@seg_full='','' #create? consider placing field just before clean text as opposed to seg which contains seg(.html) name info seg_full would contain seg info for levels 5 & 6 where available eg seg_full may be 7.3 (level 5) and 7.3.1 (level 6) where seg is 7
- @col=Hash.new('')
- @col[:ocn]=''
- @counter={}
- @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
- : 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.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=@driver_sqlite3 \
- ? @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::InfoDb.new
- @pdf_fn=SiSU_Env::FileOp.new(@md).base_filename
- @@dl ||=SiSU_Env::InfoEnv.new.digest.length
- end
- def marshal_load
- 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 = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- file_exist=@sql_type=~/sqlite/ \
- ? @conn.get_first_value(select_first_match)
- : @conn.select_one(select_first_match)
- if not file_exist
- t_d=[] # transaction_data
- t_d << db_import_metadata
- t_d << db_import_documents(@dal_array)
- t_d << db_import_urls(@dal_array,@fnc) #import OID on/off
- t_d=t_d.flatten
- if @opt.cmd =~/[MV]/
- puts @conn.class if defined? @conn.class
- puts @conn.driver_name if defined? @conn.driver_name
- puts @conn.driver if defined? @conn.driver
- end
- begin
- if @sql_type=~/sqlite/
- @conn.transaction do |conn|
- t_d.each do |sql|
- conn.execute(sql)
- end
- end
- #also 'execute' works for sqlite
- #@conn.execute("BEGIN")
- # t_d.each do |sql|
- # @conn.execute(sql)
- # end
- #@conn.execute("COMMIT")
- else
- #'do' works for postgresql
- @conn.do("BEGIN")
- t_d.each do |sql|
- @conn.do(sql)
- end
- @conn.do("COMMIT")
- end
- rescue DBI::DatabaseError => e
- STDERR.puts "Error code: #{e.err}"
- STDERR.puts "Error message: #{e.errstr}"
- STDERR.puts "Error SQLSTATE: #{e.state}"
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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
- if @opt.cmd =~/M/
- puts sql
- p @conn.methods.sort
- puts "#{__FILE__}:#{__LINE__}"
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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
- if @opt.cmd =~/M/
- puts sql
- p @conn.methods.sort
- puts "#{__FILE__}:#{__LINE__}"
- end
- ensure
- end
- else
- if file_exist
- @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
- def pf_db_import_transaction_open
- end
- def pf_db_import_transaction_close
- end
- def book_idx_hash_to_str(book_idx)
- book_idx=book_idx ? book_idx : ''
- book_idx_str,book_subidx_part='',''
- if not book_idx.empty?
- book_idx_str=''
- book_idx.each_pair do |k0,v0|
- book_idx_str << %{#{k0}+#{v0[:plus]}}
- book_subidx_part=''
- if v0[:sub].length > 0
- v0[:sub].each do |subterms|
- subterms.each_pair do |k1,v1|
- book_subidx_part << %{\n #{k1}+#{v1[:plus]} | }
- end
- end
- book_idx_str=book_idx_str + ':' + book_subidx_part
- end
- end
- end
- book_idx_str
- end
- def db_import_metadata #% import documents - populate database
- print %{ #{@cX.grey}import documents dbi_unit #{@cX.off} } if @opt.cmd =~/vVM/
- @tp={}
- @md=SiSU_Param::Parameters.new(@opt).get
-#% sisutxt & fulltxt
- if FileTest.exist?(@md.fns)
- txt_arr=IO.readlines(@md.fns,'')
- src=txt_arr.join("\n")
- src=special_character_escape(src)
- @tp[:sisutxt_f],@tp[:sisutxt_i]='sisutxt, ',"'#{src}', "
- txt=clean_searchable_text(txt_arr)
- #txt=special_character_escape(txt)
- @tp[:fulltxt_f],@tp[:fulltxt_i]='fulltxt, ',"'#{txt}', "
- end
-#% title
- if defined? @md.title.full \
- and @md.title.full=~/\S+/ # DublinCore 1 - title
- #@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;'
- 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.flatten[0] }
- end
- @@id_t=id_t if id_t
- rescue
- puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/
- end
- @@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_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
- def db_import_documents(dal_array) #% import documents - populate main database table, import into substantive database tables (tuple)
- begin
- @col[:tid]=@@id_t
- @en,@en_ast,@en_pls,@tuple_array=[],[],[],[]
- @col[:en_a],@col[:en_z]=nil,nil
- dal_array.each do |data|
- data.obj.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\1')
- data.obj.gsub!(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\1')
- 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 \
- || data.of ==:heading \
- || data.of ==:heading_insert \
- || data.of ==:block \
- || data.of ==:group # regular text what of code-blocks grouped text etc.
- notedata=data.obj.dup
- #% :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
- 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=book_idx_hash_to_str(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] then @en_a_asterisk,@en_z_asterisk=@en_ast[0].first,@en_ast[0].last
- end
- if @en_pls[0] then @en_a_plus,@en_z_plus=@en_pls[0].first,@en_pls[0].last
- end
- t=SiSU_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint)
- @tuple_array << t.tuple
- case @col[:lev]
- when /1/; @col[:lv1]+=1
- when /2/; @col[:lv2]+=1
- when /3/; @col[:lv3]+=1
- end
- @col[:lev]=@col[:plaintext]=@col[:body]=''
- 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
- @col[:lid]+=1
- @col[:lev]=4
- @hname=if @col[:seg] \
- and not @col[:seg].to_s.empty?
- @@hname=@col[:seg].to_s
- else @@hname
- end
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html"
- txt=endnotes(txt).extract_any
- 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=book_idx_hash_to_str(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_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint)
- @tuple_array << t.tuple
- @col[:lev]=@col[:plaintext]=@col[:body]=''
- 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 \
- && data.ln==5 \
- && data.name #check data.name
- @@seg ||='' #nil # watch
- @col[:seg]=@@seg
- @col[:lv5]+=1
- @col[:lid]+=1
- @col[:lev]=5
- @hname=if @col[:seg] \
- and not @col[:seg].to_s.empty?
- @@hname=@col[:seg].to_s
- else @@hname
- end
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html"
- txt=endnotes(txt).extract_any
- 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=book_idx_hash_to_str(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_DbTuple::LoadDocuments.new(@conn,@col,@opt,@file_maint)
- @tuple_array << t.tuple
- @col[:lev]=@col[:plaintext]=@col[:body]=''
- 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 && data.ln==6 && data.name #check data.name
- @@seg ||='' #nil # watch
- @col[:seg]=@@seg
- @col[:lv6]+=1
- @col[:lid]+=1
- @col[:lev]=6
- @hname=if @col[:seg] \
- and not @col[:seg].to_s.empty?
- @@hname=@col[:seg].to_s
- else @@hname
- end
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html"
- txt=endnotes(txt).extract_any
- 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=book_idx_hash_to_str(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_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=''
- txt,@col[:ocn],@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.odv,data.osp,data.of,data.is,'',data.parent,'',''
- @hname=if @col[:seg] \
- and not @col[:seg].to_s.empty?
- @@hname=@col[:seg].to_s
- else @@hname
- end
- @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_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)}")
- end
- txt=%{\n\nLARGE TEXT BLOCK OMITTED\n\n}
- end
- @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]
- 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_FormatShared::CSS_Format.new(@md,data).norm
- end
- @col[:body]=special_character_escape(body)
- plaintext=@col[:body].dup
- plaintext=strip_markup(plaintext)
- @col[:plaintext]=clean_searchable_text(plaintext)
- book_idx=book_idx_hash_to_str(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
- @col[:lev]=@col[:plaintext]=@col[:body]=@col[:words]=''
- end
- if notedata =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/ #% import into database endnotes tables
- endnote_array=notedata.scan(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/)
- endnote_array.each do |inf|
- if inf[/#{Mx[:en_a_o]}\d+.+?#{Mx[:en_a_c]}/]
- if inf[/#{Mx[:en_a_o]}(\d+)(.+?)#{Mx[:en_a_c]}/]
- nr,txt,digest_clean=$1,$2.strip,0
- end
- @id_n+=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)}")
- end
- 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
- }
- t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint)
- @tuple_array << t.tuple
- end
- end
- end
- word_mode=notedata.scan(/\S+/)
- end
- if notedata =~/#{Mx[:en_b_o]}\*.+?#{Mx[:en_b_c]}/ #% import into database endnotes tables
- endnote_array=notedata.scan(/#{Mx[:en_b_o]}\*.+?#{Mx[:en_b_c]}/)
- endnote_array.each do |inf|
- if inf[/#{Mx[:en_b_o]}\*\d+.+?#{Mx[:en_b_c]}/] # dal new endnotes 2003w31/1
- if inf[/#{Mx[:en_b_o]}[*](\d+)(.+?)#{Mx[:en_b_c]}/] # dal new endnotes 2003w31/1
- nr,txt,digest_clean=$1,$2.strip,0
- end
- @id_n+=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)}")
- end
- 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
- }
- t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint)
- @tuple_array << t.tuple
- end
- end
- end
- word_mode=notedata.scan(/\S+/)
- end
- if notedata =~/#{Mx[:en_b_o]}\+.+?#{Mx[:en_b_c]}/ #% import into database endnotes tables
- endnote_array=notedata.scan(/#{Mx[:en_b_o]}\+.+?#{Mx[:en_b_c]}/)
- endnote_array.each do |inf|
- if inf[/#{Mx[:en_b_o]}\+\d+.+?#{Mx[:en_b_c]}/] # dal new endnotes 2003w31/1
- if inf[/#{Mx[:en_b_o]}[+](\d+)(.+?)#{Mx[:en_b_c]}/] # dal new endnotes 2003w31/1
- nr,txt,digest_clean=$1,$2.strip,0
- end
- @id_n+=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)}")
- end
- 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
- }
- t=SiSU_DbTuple::LoadEndnotes.new(@conn,en,@opt,@file_maint)
- @tuple_array << t.tuple
- end
- end
- end
- word_mode=notedata.scan(/\S+/)
- end
- end
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- @tuple_array
- end
- def endnotes(txt)
- @txt=txt
- def extract_any
- if @txt =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[*+]?(\d+)\s+.+?(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/
- endnotes(@txt).range
- @en << endnotes(@txt).standard if @txt =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/
- @en_ast << endnotes(@txt).asterisk if @txt =~/#{Mx[:en_b_o]}\*.+?#{Mx[:en_b_c]}/
- @en_pls << endnotes(@txt).plus if @txt =~/#{Mx[:en_b_o]}\+.+?#{Mx[:en_b_c]}/
- @txt=endnotes(@txt).clean_text
- end
- @txt
- end
- def standard
- (@txt =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/) \
- ? @txt.scan(/#{Mx[:en_a_o]}(\d+).+?#{Mx[:en_a_c]}/)
- : nil
- end
- def asterisk
- (@txt =~/#{Mx[:en_b_o]}\*.+?#{Mx[:en_b_c]}/) \
- ? @txt.scan(/#{Mx[:en_b_o]}[*](\d+).+?#{Mx[:en_b_c]}/)
- : nil
- end
- def plus
- (@txt =~/#{Mx[:en_b_o]}\+.+?#{Mx[:en_b_c]}/) \
- ? @txt.scan(/#{Mx[:en_b_o]}[+](\d+).+?#{Mx[:en_b_c]}/)
- : nil
- end
- def clean_text(base_url=nil)
- @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>').
- 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
- def range
- @col[:en_a]=@col[:en_z]=nil
- if @txt =~/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}([*]\d+).+?#{Mx[:en_b_c]}|#{Mx[:en_b_o]}([+]\d+).+?#{Mx[:en_b_c]}/
- word_array=@txt.scan(/\S+/)
- word_array.each do |w|
- if w[/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})[*+]?(\d+)\s+.+?(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/] # not tested since change 2003w31
- @col[:en_a]=$1 unless @col[:en_a]
- @col[:en_z]=@col[:en_a].dup unless @col[:en_a]
- @col[:en_z]=$1 if @col[:en_a]
- end
- end
- end
- @col
- end
- self
- end
- def db_import_urls(dbi_unit,content) #% import documents OID - populate database
- begin
- @fnc=content
- @env=SiSU_Env::InfoEnv.new(@opt.fns)
- f,u={},{}
- if @fnb.empty? \
- or @fnb.nil?
- p 'file output path error' #remove
- end
- 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?("#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_segtoc}")==true
- f[:html_toc],u[:html_toc]='html_toc,', "'#{@md.file.output_path.html_seg.url}/#{@md.file.base_filename.html_segtoc}',"
- end
- 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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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?("#{@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_DbTuple::LoadUrls.new(@conn,f,u,@@id_t,@opt,@file_maint)
- tuple=t.tuple
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- tuple
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_indexes.rb b/lib/sisu/v4/db_indexes.rb
deleted file mode 100644
index 98cf28cb..00000000
--- a/lib/sisu/v4/db_indexes.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_indexes.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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
- end
- def create_indexes # check added from pg not tested
- def conn_execute_array(sql_arr)
- @conn.transaction do |conn|
- sql_arr.each do |sql|
- conn.execute(sql)
- end
- end
- end
- def base
- 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);},
- %{CREATE INDEX idx_digest_all ON doc_objects(digest_all);},
- %{CREATE INDEX idx_lev1 ON doc_objects(lev1);},
- %{CREATE INDEX idx_lev2 ON doc_objects(lev2);},
- %{CREATE INDEX idx_lev3 ON doc_objects(lev3);},
- %{CREATE INDEX idx_lev4 ON doc_objects(lev4);},
- %{CREATE INDEX idx_lev5 ON doc_objects(lev5);},
- %{CREATE INDEX idx_lev6 ON doc_objects(lev6);},
- %{CREATE INDEX idx_endnote_nr ON endnotes(nr);},
- %{CREATE INDEX idx_digest_en ON endnotes(digest_clean);},
- %{CREATE INDEX idx_endnote_nr_asterisk ON endnotes_asterisk(nr);},
- %{CREATE INDEX idx_endnote_asterisk ON endnotes_asterisk(clean);},
- %{CREATE INDEX idx_digest_en_asterisk ON endnotes_asterisk(digest_clean);},
- %{CREATE INDEX idx_endnote_nr_plus ON endnotes_plus(nr);},
- %{CREATE INDEX idx_endnote_plus ON endnotes_plus(clean);},
- %{CREATE INDEX idx_digest_en_plus ON endnotes_plus(digest_clean);},
- %{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" if @opt.cmd =~/[VM]/
- sql_arr=[
- %{CREATE INDEX idx_clean ON doc_objects(clean);},
- %{CREATE INDEX idx_endnote ON endnotes(clean);}
- ]
- conn_execute_array(sql_arr)
- end
- base
- @opt.cmd=~/D/ || ((@opt.mod=~/psql/) ? '' : text)
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_load_tuple.rb b/lib/sisu/v4/db_load_tuple.rb
deleted file mode 100644
index 68d05ec8..00000000
--- a/lib/sisu/v4/db_load_tuple.rb
+++ /dev/null
@@ -1,326 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_load_tuple.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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_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 \
- or @col[:lev]==2 \
- or @col[:lev]==3 \
- or @col[:lev]==4 \
- or @col[:lev]==5 \
- or @col[:lev]==6 #changed from \d+ ??
- @col[:lev]=0
- end
- @col[:ocn]=0 unless @col[:ocn].inspect=~/\d+/
- @cX=SiSU_Screen::Ansi.new(@opt.cmd).cX
- end
- def tuple #% import line
- sql_entry=if @col[:en_a]
- "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, 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_maint.inspect
- puts sql_entry
- end
- @file_maint.puts sql_entry
- else
- if @opt.cmd =~/V/
- puts sql_entry
- @file_maint.puts sql_entry
- end
- end
- if @opt.cmd =~/v/
- if @col[:lev].inspect =~/[12356789]/
- lev=case @col[:lev].inspect
- when /1/; ':A'
- when /2/; ':B'
- when /3/; ':C'
- when /5/; ' 2'
- when /6/; ' 3'
- end
- puts %{#{lev}>\t#{@col[:lv1]}\t#{@col[:lv2]}\t#{@col[:lv3]}\t#{@col[:lv4]}\t#{@col[:lv5]}\t#{@col[:lv6]}\t#{@col[:ocn]}\t#{@col[:node]}\t#{@col[:ocns]}}
- elsif @col[:lev].inspect =~/[4]/
- puts %{ #{@cX.green}1>#{@cX.off}\t#{@col[:lv1]}\t#{@col[:lv2]}\t#{@col[:lv3]}\t#{@col[:lv4]}\t#{@col[:lv5]}\t#{@col[:lv6]}\t#{@col[:ocn]}\t#{@col[:node]}\t#{@col[:ocns]}\t#{@col[:seg]}}
- end
- end
- sql_entry
- end
- end
- 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 (
-#{@tp.column.title.tuple[0]}
-#{@tp.column.title_main.tuple[0]}
-#{@tp.column.title_sub.tuple[0]}
-#{@tp.column.title_short.tuple[0]}
-#{@tp.column.title_edition.tuple[0]}
-#{@tp.column.title_note.tuple[0]}
-#{@tp.column.title_language.tuple[0]}
-#{@tp.column.title_language_char.tuple[0]}
-#{@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]}
-#{@tp.column.creator_translator.tuple[0]}
-#{@tp.column.creator_prepared_by.tuple[0]}
-#{@tp.column.creator_digitized_by.tuple[0]}
-#{@tp.column.creator_audio.tuple[0]}
-#{@tp.column.creator_video.tuple[0]}
-#{@tp.column.language_document.tuple[0]}
-#{@tp.column.language_document_char.tuple[0]}
-#{@tp.column.language_original.tuple[0]}
-#{@tp.column.language_original_char.tuple[0]}
-#{@tp.column.date_added_to_site.tuple[0]}
-#{@tp.column.date_available.tuple[0]}
-#{@tp.column.date_created.tuple[0]}
-#{@tp.column.date_issued.tuple[0]}
-#{@tp.column.date_modified.tuple[0]}
-#{@tp.column.date_published.tuple[0]}
-#{@tp.column.date_valid.tuple[0]}
-#{@tp.column.date_translated.tuple[0]}
-#{@tp.column.date_original_publication.tuple[0]}
-#{@tp.column.date_generated.tuple[0]}
-#{@tp.column.publisher.tuple[0]}
-#{@tp.column.original_publisher.tuple[0]}
-#{@tp.column.original_language.tuple[0]}
-#{@tp.column.original_language_char.tuple[0]}
-#{@tp.column.original_source.tuple[0]}
-#{@tp.column.original_institution.tuple[0]}
-#{@tp.column.original_nationality.tuple[0]}
-#{@tp.column.rights_all.tuple[0]}
-#{@tp.column.rights_copyright_text.tuple[0]}
-#{@tp.column.rights_copyright_translation.tuple[0]}
-#{@tp.column.rights_copyright_illustrations.tuple[0]}
-#{@tp.column.rights_copyright_photographs.tuple[0]}
-#{@tp.column.rights_copyright_preparation.tuple[0]}
-#{@tp.column.rights_copyright_digitization.tuple[0]}
-#{@tp.column.rights_copyright_audio.tuple[0]}
-#{@tp.column.rights_copyright_video.tuple[0]}
-#{@tp.column.rights_license.tuple[0]}
-#{@tp.column.classify_topic_register.tuple[0]}
-#{@tp.column.classify_subject.tuple[0]}
-#{@tp.column.classify_loc.tuple[0]}
-#{@tp.column.classify_dewey.tuple[0]}
-#{@tp.column.classify_keywords.tuple[0]}
-#{@tp.column.identifier_oclc.tuple[0]}
-#{@tp.column.identifier_isbn.tuple[0]}
-#{@tp.column.notes_abstract.tuple[0]}
-#{@tp.column.notes_description.tuple[0]}
-#{@tp.column.notes_comment.tuple[0]}
-#{@tp.column.notes_history.tuple[0]}
-#{@tp.column.notes_format.tuple[0]}
-#{@tp.column.notes_relation.tuple[0]}
-#{@tp.column.notes_coverage.tuple[0]}
-#{@tp.column.notes_type.tuple[0]}
-#{@tp.column.notes_prefix.tuple[0]}
-#{@tp.column.notes_prefix_a.tuple[0]}
-#{@tp.column.notes_prefix_b.tuple[0]}
-#{@tp.column.notes_suffix.tuple[0]}
-#{@tp.column.src_filename.tuple[0]}
-#{@tp.column.src_fingerprint.tuple[0]}
-#{@tp.column.src_filesize.tuple[0]}
-#{@tp.column.src_word_count.tuple[0]}
-#{@tp.column.src_txt.tuple[0]}
-#{@tp.column.fulltext.tuple[0]}
-#{@tp.column.links.tuple[0]}
-tid)
-" +
- "VALUES (
-#{@tp.column.title.tuple[1]}
-#{@tp.column.title_main.tuple[1]}
-#{@tp.column.title_sub.tuple[1]}
-#{@tp.column.title_short.tuple[1]}
-#{@tp.column.title_edition.tuple[1]}
-#{@tp.column.title_note.tuple[1]}
-#{@tp.column.title_language.tuple[1]}
-#{@tp.column.title_language_char.tuple[1]}
-#{@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]}
-#{@tp.column.creator_translator.tuple[1]}
-#{@tp.column.creator_prepared_by.tuple[1]}
-#{@tp.column.creator_digitized_by.tuple[1]}
-#{@tp.column.creator_audio.tuple[1]}
-#{@tp.column.creator_video.tuple[1]}
-#{@tp.column.language_document.tuple[1]}
-#{@tp.column.language_document_char.tuple[1]}
-#{@tp.column.language_original.tuple[1]}
-#{@tp.column.language_original_char.tuple[1]}
-#{@tp.column.date_added_to_site.tuple[1]}
-#{@tp.column.date_available.tuple[1]}
-#{@tp.column.date_created.tuple[1]}
-#{@tp.column.date_issued.tuple[1]}
-#{@tp.column.date_modified.tuple[1]}
-#{@tp.column.date_published.tuple[1]}
-#{@tp.column.date_valid.tuple[1]}
-#{@tp.column.date_translated.tuple[1]}
-#{@tp.column.date_original_publication.tuple[1]}
-#{@tp.column.date_generated.tuple[1]}
-#{@tp.column.publisher.tuple[1]}
-#{@tp.column.original_publisher.tuple[1]}
-#{@tp.column.original_language.tuple[1]}
-#{@tp.column.original_language_char.tuple[1]}
-#{@tp.column.original_source.tuple[1]}
-#{@tp.column.original_institution.tuple[1]}
-#{@tp.column.original_nationality.tuple[1]}
-#{@tp.column.rights_all.tuple[1]}
-#{@tp.column.rights_copyright_text.tuple[1]}
-#{@tp.column.rights_copyright_translation.tuple[1]}
-#{@tp.column.rights_copyright_illustrations.tuple[1]}
-#{@tp.column.rights_copyright_photographs.tuple[1]}
-#{@tp.column.rights_copyright_preparation.tuple[1]}
-#{@tp.column.rights_copyright_digitization.tuple[1]}
-#{@tp.column.rights_copyright_audio.tuple[1]}
-#{@tp.column.rights_copyright_video.tuple[1]}
-#{@tp.column.rights_license.tuple[1]}
-#{@tp.column.classify_topic_register.tuple[1]}
-#{@tp.column.classify_subject.tuple[1]}
-#{@tp.column.classify_loc.tuple[1]}
-#{@tp.column.classify_dewey.tuple[1]}
-#{@tp.column.classify_keywords.tuple[1]}
-#{@tp.column.identifier_oclc.tuple[1]}
-#{@tp.column.identifier_isbn.tuple[1]}
-#{@tp.column.notes_abstract.tuple[1]}
-#{@tp.column.notes_comment.tuple[1]}
-#{@tp.column.notes_description.tuple[1]}
-#{@tp.column.notes_history.tuple[1]}
-#{@tp.column.notes_format.tuple[1]}
-#{@tp.column.notes_relation.tuple[1]}
-#{@tp.column.notes_coverage.tuple[1]}
-#{@tp.column.notes_type.tuple[1]}
-#{@tp.column.notes_prefix.tuple[1]}
-#{@tp.column.notes_prefix_a.tuple[1]}
-#{@tp.column.notes_prefix_b.tuple[1]}
-#{@tp.column.notes_suffix.tuple[1]}
-#{@tp.column.src_filename.tuple[1]}
-#{@tp.column.src_fingerprint.tuple[1]}
-#{@tp.column.src_filesize.tuple[1]}
-#{@tp.column.src_word_count.tuple[1]}
-#{@tp.column.src_txt.tuple[1]}
-#{@tp.column.fulltext.tuple[1]}
-#{@tp.column.links.tuple[1]}
-#{@id}
-);"
- 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_maint.puts sql_entry if @md.opt.cmd =~/V/
- end
- sql_entry
- end
- end
- 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_maint.puts sql_entry
- else
- @file_maint.puts sql_entry if @opt.cmd =~/V/
- end
- sql_entry
- end
- end
- 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_maint.puts sql_entry
- else
- @file_maint.puts sql_entry if @opt.cmd =~/V/
- end
- sql_entry
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_remove.rb b/lib/sisu/v4/db_remove.rb
deleted file mode 100644
index c402f959..00000000
--- a/lib/sisu/v4/db_remove.rb
+++ /dev/null
@@ -1,124 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_remove.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-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::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
- : false
- end
- del_id=if driver_sqlite3
- remove_selected=%{
- SELECT tid
- FROM metadata_and_text
- WHERE src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- @conn.get_first_value(remove_selected).to_i
- else
- remove_selected=%{
- SELECT metadata_and_text.tid
- FROM metadata_and_text
- WHERE metadata_and_text.src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- x=@conn.select_one(remove_selected)
- x ? (x.join.to_i) : nil
- end
- if del_id
- sql_entry=[
- "DELETE FROM endnotes WHERE metadata_tid = '#{del_id}';",
- "DELETE FROM endnotes_asterisk WHERE metadata_tid = '#{del_id}';",
- "DELETE FROM endnotes_plus WHERE metadata_tid = '#{del_id}';",
- "DELETE FROM doc_objects WHERE metadata_tid = '#{del_id}';",
- "DELETE FROM urls WHERE metadata_tid = '#{del_id}';",
- "DELETE FROM metadata_and_text WHERE metadata_and_text.tid = '#{del_id}';",
- ]
- if driver_sqlite3
- @conn.transaction
- sql_entry.each do |s|
- @conn.execute(s)
- end
- @conn.commit if driver_sqlite3
- else
- sql_entry.each do |s|
- @conn.execute(s)
- end
- end
- if @opt.cmd =~/M/
- @file.puts sql_entry if @opt.cmd =~/M/
- end
- else
- SiSU_Screen::Ansi.new(@opt.cmd,"no such file in database #{@db.psql.db}::#{@opt.fns}").puts_grey if @opt.cmd =~/vVM/
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_select.rb b/lib/sisu/v4/db_select.rb
deleted file mode 100644
index f6d07030..00000000
--- a/lib/sisu/v4/db_select.rb
+++ /dev/null
@@ -1,224 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_select.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-module SiSU_DbSelect
- class Case
- def initialize(opt,conn='',sql_type='pg')
- @opt,@conn,@sql_type=opt,conn,sql_type
- @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_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_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
- end
- end
- def db_exist?
- if @sql_type=='sqlite' \
- and (not (FileTest.file?(@db.sqlite.db)) or FileTest.zero?(@db.sqlite.db))
- puts %{no connection with #{@sql_type} database established, createdb "#{@db.sqlite.db}"?}
- exit
- end
- if @conn.is_a?(NilClass)
- db=@sql_type=='sqlite' \
- ? @db.sqlite.db
- : @db.psql.db
- puts %{no connection with #{@sql_type} database established, createdb "#{db}"?}
- exit
- end
- end
- def sql_maintenance_file
- file=if @opt.inspect =~/M/
- 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
- def cases
- @opt.mod.each do |mod|
- case mod
- when /^--createdb$/
- @sdb.output_dir?
- begin
- @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::Rescued.new($!,$@,'-D').location; @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
- 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
- rescue; @sdb.output_dir?
- end
- when /^--cr(eate)?lex$/
- @sdb.output_dir?
- begin
- @sdb.create_table.doc_objects
- rescue; @sdb.output_dir?
- end
- when /^--cr(eate)?metadata$/
- @sdb.output_dir?
- begin
- @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,"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 /^--update$/
- db_exist?
- @sdb_remove_doc.remove
- @sdb_import.marshal_load
- 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)?$/
- db_exist?
- @sdb_no.drop.tables
- when /^--dropindex(es)?$/
- db_exist?
- @sdb_no.drop.indexes
- when /^--(?:dropall|drop)$/
- db_exist?
- @sdb_no.drop.tables
- when /^--(?:db=)?(?:(?:sq)?lite|pg(?:sql)?|my(?:sql)?)$/
- when /^--(?:v\d+|dev)$/
- else
- 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
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/db_sqltxt.rb b/lib/sisu/v4/db_sqltxt.rb
deleted file mode 100644
index c6b0f858..00000000
--- a/lib/sisu/v4/db_sqltxt.rb
+++ /dev/null
@@ -1,133 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_sqltxt.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_DbText
- class Prepare
- def special_character_escape(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.is_a?(String)) ? arr.split(/\n+/m) : arr
- arr.each do |s|
- 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=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.opt.cmd.inspect =~/q/
- end
- if defined? @md.title \
- and defined? @md.title.full \
- and not @md.title.full.empty?
- s=s.gsub(/@title/,@md.title.full)
- else
- SiSU_Screen::Ansi.new('v','WARNING Document Title missing; provide @title:',@md.fnb).warn unless @md.opt.cmd.inspect =~/q/
- end
- end
- 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=s.gsub(/~\{.+?\}~/m,'').
- gsub(/ \s+/m,' ')
- #special_character_escape(s)
- s
- end
- txt_arr << arr << en
- #txt_arr=txt_arr.flatten
- txt=txt_arr.flatten.join("\n")
- txt=special_character_escape(txt)
- txt
- end
- def strip_markup(str) #define rules, make same as in dal clean
- str=str.gsub(/#{Mx[:fa_superscript_o]}(\d+)#{Mx[:fa_superscript_c]}/,'[\1]').
- gsub(/(?:&nbsp\\;|#{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,}/)
- str=a.uniq.sort.join(' ')
- str
- end
- end
-end
-__END__
-
diff --git a/lib/sisu/v4/db_tests.rb b/lib/sisu/v4/db_tests.rb
deleted file mode 100644
index 86b3ad97..00000000
--- a/lib/sisu/v4/db_tests.rb
+++ /dev/null
@@ -1,120 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/db_tests.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by the different db types, dbi, postgresql,
- sqlite
-
-=end
-module SiSU_DbTests
- class Test
- def initialize(info,opt)
- @ck,@opt=info,opt
- unless @opt.cmd =~/q/
- puts @ck.tp[:fns] if @ck.tp[:fns] and not @ck.tp[:fns].empty?
- puts @ck.tp[:title] if @ck.tp[:title] and not @ck.tp[:title].empty?
- puts @ck.tp[:creator] if @ck.tp[:creator] and not @ck.tp[:creator].empty?
- end
- end
- def verify
- unless @opt.cmd =~/q/
- puts @ck.tp[:fns].length.to_s + ' checklength ' + @ck.tp[:fns] if @ck.tp[:fns] and @ck.tp[:fns].length >@ck.lt_filename
- puts @ck.tp[:title].length.to_s + ' checklength ' + @ck.tp[:title] if @ck.tp[:title] and @ck.tp[:title].length >@ck.lt_title
- puts @ck.tp[:subtitle].length.to_s + ' checklength ' + @ck.tp[:subtitle] if @ck.tp[:subtitle] and @ck.tp[:subtitle].length >@ck.lt_subtitle
- puts @ck.tp[:creator].length.to_s + ' checklength ' + @ck.tp[:creator] if @ck.tp[:creator] and @ck.tp[:creator].length >@ck.lt_creator
- puts @ck.tp[:author_title].length.to_s + ' checklength ' + @ck.tp[:author_title] if @ck.tp[:author_title] and @ck.tp[:author_title].length >@ck.lt_author_title
- puts @ck.tp[:illustrator].length.to_s + ' checklength ' + @ck.tp[:illustrator] if @ck.tp[:illustrator] and @ck.tp[:illustrator].length >@ck.lt_illustrator
- puts @ck.tp[:translator].length.to_s + ' checklength ' + @ck.tp[:translator] if @ck.tp[:translator] and @ck.tp[:translator].length >@ck.lt_translator
- puts @ck.tp[:prepared_by].length.to_s + ' checklength ' + @ck.tp[:prepared_by] if @ck.tp[:prepared_by] and @ck.tp[:prepared_by].length >@ck.lt_prepared_by
- puts @ck.tp[:digitized_by].length.to_s + ' checklength ' + @ck.tp[:digitized_by] if @ck.tp[:digitized_by] and @ck.tp[:digitized_by].length >@ck.lt_digitized_by
- puts @ck.tp[:subject].length.to_s + ' checklength ' + @ck.tp[:subject] if @ck.tp[:subject] and @ck.tp[:subject].length >@ck.lt_subject
- puts @ck.tp[:description].length.to_s + ' checklength ' + @ck.tp[:description] if @ck.tp[:description] and @ck.tp[:description].length >@ck.lt_description
- puts @ck.tp[:publisher].length.to_s + ' checklength ' + @ck.tp[:publisher] if @ck.tp[:publisher] and @ck.tp[:publisher].length >@ck.lt_publisher
- puts @ck.tp[:contributor].length.to_s + ' checklength ' + @ck.tp[:contributor] if @ck.tp[:contributor] and @ck.tp[:contributor].length >@ck.lt_contributor
- puts @ck.tp[:date].length.to_s + ' checklength ' + @ck.tp[:date] if @ck.tp[:date] and @ck.tp[:date].length >@ck.lt_date
- puts @ck.tp[:date_created].length.to_s + ' checklength ' + @ck.tp[:date_created] if @ck.tp[:date_created] and @ck.tp[:date_created].length >@ck.lt_date
- puts @ck.tp[:date_issued].length.to_s + ' checklength ' + @ck.tp[:date_issued] if @ck.tp[:date_issued] and @ck.tp[:date_issued].length >@ck.lt_date
- puts @ck.tp[:date_valid].length.to_s + ' checklength ' + @ck.tp[:date_valid] if @ck.tp[:date_valid] and @ck.tp[:date_valid].length >@ck.lt_date
- puts @ck.tp[:date_available].length.to_s + ' checklength ' + @ck.tp[:date_available] if @ck.tp[:date_available] and @ck.tp[:date_available].length >@ck.lt_date
- puts @ck.tp[:date_modified].length.to_s + ' checklength ' + @ck.tp[:date_modified] if @ck.tp[:date_modified] and @ck.tp[:date_modified].length >@ck.lt_date
- puts @ck.tp[:date_translated].length.to_s + ' checklength ' + @ck.tp[:date_translated] if @ck.tp[:date_translated] and @ck.tp[:date_translated].length >@ck.lt_date
- puts @ck.tp[:date_added_to_site].length.to_s + ' checklength ' + @ck.tp[:date_added_to_site] if @ck.tp[:date_added_to_site] and @ck.tp[:date_added_to_site].length >@ck.lt_date
- puts @ck.tp[:type].length.to_s + ' checklength ' + @ck.tp[:type] if @ck.tp[:type] and @ck.tp[:type].length >@ck.lt_type
- puts @ck.tp[:format].length.to_s + ' checklength ' + @ck.tp[:format] if @ck.tp[:format] and @ck.tp[:format].length >@ck.lt_format
- puts @ck.tp[:identifier].length.to_s + ' checklength ' + @ck.tp[:identifier] if @ck.tp[:identifier] and @ck.tp[:identifier].length >@ck.lt_identifier
- puts @ck.tp[:source].length.to_s + ' checklength ' + @ck.tp[:source] if @ck.tp[:source] and @ck.tp[:source].length >@ck.lt_source
- puts @ck.tp[:language].length.to_s + ' checklength ' + @ck.tp[:language] if @ck.tp[:language] and @ck.tp[:language].length >@ck.lt_language
- puts @ck.tp[:language_original].length.to_s + ' checklength ' + @ck.tp[:language_original] if @ck.tp[:language_original] and @ck.tp[:language_original].length >@ck.lt_language_original
- puts @ck.tp[:relation].length.to_s + ' checklength ' + @ck.tp[:relation] if @ck.tp[:relation] and @ck.tp[:relation].length >@ck.lt_relation
- puts @ck.tp[:coverage].length.to_s + ' checklength ' + @ck.tp[:coverage] if @ck.tp[:coverage] and @ck.tp[:coverage].length >@ck.lt_coverage
- puts @ck.tp[:rights].length.to_s + ' checklength ' + @ck.tp[:rights] if @ck.tp[:rights] and @ck.tp[:rights].length >@ck.lt_rights
- puts @ck.tp[:copyright].length.to_s + ' checklength ' + @ck.tp[:copyright] if @ck.tp[:copyright] and @ck.tp[:copyright].length >@ck.lt_copyright
- puts @ck.tp[:owner].length.to_s + ' checklength ' + @ck.tp[:owner] if @ck.tp[:owner] and @ck.tp[:owner].length >@ck.lt_owner
- puts @ck.tp[:keywords].length.to_s + ' checklength ' + @ck.tp[:keywords] if @ck.tp[:keywords] and @ck.tp[:keywords].length >@ck.lt_keywords
- puts @ck.tp[:abstract].length.to_s + ' checklength ' + @ck.tp[:abstract] if @ck.tp[:abstract] and @ck.tp[:abstract].length >@ck.lt_abstract
- puts @ck.tp[:comment].length.to_s + ' checklength ' + @ck.tp[:comment] if @ck.tp[:comment] and @ck.tp[:comment].length >@ck.lt_comment
- puts @ck.tp[:loc].length.to_s + ' checklength ' + @ck.tp[:loc] if @ck.tp[:loc] and @ck.tp[:loc].length >@ck.lt_loc
- puts @ck.tp[:dewey].length.to_s + ' checklength ' + @ck.tp[:dewey] if @ck.tp[:dewey] and @ck.tp[:dewey].length >@ck.lt_dewey
- puts @ck.tp[:isbn].length.to_s + ' checklength ' + @ck.tp[:isbn] if @ck.tp[:isbn] and @ck.tp[:isbn].length >@ck.lt_isbn
- puts @ck.tp[:pg].length.to_s + ' checklength ' + @ck.tp[:pg] if @ck.tp[:pg] and @ck.tp[:pg].length >@ck.lt_pg
- puts @ck.tp[:topic_register].length.to_s + ' checklength ' + @ck.tp[:topic_register] if @ck.tp[:topic_register] and @ck.tp[:topci_register].length >@ck.lt_topic_register
- puts @ck.tp[:date] if @ck.tp[:date] and not @ck.tp[:date].empty? and @ck.tp[:date] !~/\d\d-\d\d-\d\d/
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dbi.rb b/lib/sisu/v4/dbi.rb
deleted file mode 100644
index 3cd9dc85..00000000
--- a/lib/sisu/v4/dbi.rb
+++ /dev/null
@@ -1,148 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dbi.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: postgresql module, dbi import frame
-
-=end
-module SiSU_DBI #% database building
- 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
- class SQL
- def initialize(opt)
- SiSU_Env::Load.new('dbi',true).prog
- @opt=opt
- @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)?/
- maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/
- 'pg'
- elsif @opt.cmd =~/d/ \
- and @opt.mod.inspect =~/--(?:db[=-])?pg(?:sql)?/
- maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/
- 'pg'
- elsif @opt.cmd=~/d/ \
- or @opt.mod.inspect =~/--(?:sq)?lite/
- maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/
- 'sqlite'
- elsif @opt.cmd =~/d/ \
- and @opt.mod.inspect =~/--(?:db[=-])?(?:sq)?lite/
- maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/
- 'sqlite'
- else
- maintenance_check(@opt,__FILE__,__LINE__) if @opt.cmd.inspect =~/M/
- 'sqlite'
- end
- end
- end
- def maintenance_check(opt,file,line)
- p opt.mod
- p opt.cmd
- p "at #{file} #{line}"
- end
- def read_psql
- begin
- @conn=@db.psql.conn_dbi
- rescue
- if @opt.mod.inspect=~/--(createall|create)/
- cX=SiSU_Screen::Ansi.new(@opt.cmd).cX
- puts <<-WOK
-manually create the database: "#{cX.green}#{@db.db}#{cX.off}" if it does not yet exist
- #{cX.yellow}createdb #{@db.db}#{cX.off}
- WOK
- #sudo su -p postgres; createdb #{@db.db}; #[createuser?]
- end
- ensure
- end
- end
- def read_sqlite
- begin
- @conn=@db.sqlite.conn_sqlite3
- rescue
- ensure
- end
- end
- def connect
- case @sql_type
- when /pg/; read_psql
- when /sqlite/; read_sqlite
- end
- SiSU_Screen::Ansi.new(@opt.cmd,"DBI (#{@sql_type}) #{@opt.mod}",@opt.fno).dbi_title unless @opt.cmd =~/q/
- begin
- SiSU_DbDBI::Case.new(@opt,@conn,@sql_type).cases
- rescue
- SiSU_Errors::Rescued.new($!,$@,@cf,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- begin
- rescue
- connect
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/dbi_discrete.rb b/lib/sisu/v4/dbi_discrete.rb
deleted file mode 100644
index d96fbe13..00000000
--- a/lib/sisu/v4/dbi_discrete.rb
+++ /dev/null
@@ -1,184 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/dbi_discrete.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: postgresql module, dbi import frame
-
-=end
-module SiSU_DBI_Discrete #% database building
- 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_discrete.dir
- @filename=@md.file.base_filename.sqlite_discrete
- @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_discrete.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::Rescued.new($!,$@,'-d').location 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
- SiSU_Screen::Ansi.new(@opt.cmd,"DBI (#{@sql_type}) #{@opt.mod}",@opt.fns).dbi_title unless @opt.cmd =~/q/
- @db.sqlite_discrete.conn_sqlite3
- rescue
- SiSU_Errors::Rescued.new($!,$@,@cf,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def populate
- end
- def sql_maintenance_file
- file=if @opt.inspect =~/M/
- 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/v4/defaults.rb b/lib/sisu/v4/defaults.rb
deleted file mode 100644
index 69af0fa5..00000000
--- a/lib/sisu/v4/defaults.rb
+++ /dev/null
@@ -1,1211 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/defaults.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: Default values
-
-=end
-$latex_run=nil
-module SiSU_Viz
- require 'uri'
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'css' # css.rb
- include SiSU_Style
- class Defaults
- 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::InfoEnv.new
- @date=SiSU_Env::InfoDate.new #{@date.year}
- @v=SiSU_Env::InfoVersion.instance.get_version
- end
- #% glyph
- def glyph_bullet # &bullet;
- '&#149;&nbsp;' # [&#149; flagged]
- end
- #% html
- def html_hardspace
- '&nbsp;'
- 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
- #% decorate
- def decorate_italics
- 'title|article|book|journal'
- end
- def decorate_bold
- end
- def decorate_uppercase
- 'surname'
- end
- #% semantic
- def sem_title #dc 1
- 'title'
- end
- def sem_article
- 'article'
- end
- def sem_book
- 'book'
- end
- def sem_journal
- 'journal'
- end
- def sem_fullname # (contains: firstname, surname) #issues arise as contains surname etc.
- 'fullname'
- end
- def sem_first
- 'first'
- end
- def sem_surname
- 'surname'
- end
- def sem_middle
- 'middle'
- end
- def sem_creator #dc 2 #==fullname (contains: firstname, surname)
- 'creator'
- end
- def sem_author #==fullname (contains: firstname, surname)
- 'author'
- end
- def sem_editor #==fullname (contains: firstname, surname)
- 'editor'
- end
- def sem_illustrator #==fullname (contains: firstname, surname)
- 'illustrator'
- end
- def sem_translator #==fullname (contains: firstname, surname)
- 'translator'
- end
- def sem_isbn # 10 or 13
- 'isbn'
- end
- def sem_isbn_10
- 'isbn10'
- end
- def sem_isbn_13
- 'isbn13'
- end
- def sem_loc # library of congress
- 'loc'
- end
- def sem_dewey
- 'dewey'
- end
- def sem_pg # project gutenberg number
- 'pg'
- end
- def sem_subject #dc 3
- 'subject'
- end
- def sem_date #dc 7
- 'date'
- end
- def sem_date_created
- 'date_created'
- end
- def sem_date_issued
- 'date_issued'
- end
- def sem_date_available
- 'date_available'
- end
- def sem_date_valid
- 'date_valid'
- end
- def sem_date_modified
- 'date_modified'
- end
- def sem_type #dc 8
- 'type'
- end
- def sem_description #dc 4
- 'description'
- end
- def sem_publisher #dc 5
- 'publisher'
- end
- def sem_contributor #dc 6
- 'contributor'
- end
- def sem_format #dc 9
- 'format'
- end
- def sem_identifier #dc 10
- 'identifier'
- end
- def sem_source #dc 11
- 'source'
- end
- def sem_language #dc 12
- 'language'
- end
- def sem_relation #dc 13
- 'source'
- end
- def sem_coverage #dc 14
- 'coverage'
- end
- def sem_rights #dc 15
- 'rights'
- end
- def sem_copyright
- 'copyright'
- end
- def sem_license
- 'license'
- end
- def sem_prepared_by
- 'prepared_by'
- end
- def sem_digitized_by
- 'digitized_by'
- end
- def sem_keywords
- 'keywords'
- end
- def sem_comments
- 'comments'
- end
- def sem_abstract
- 'abstract'
- end
- #% path
- def path_stylesheet_home
- %{ <link rel="stylesheet" href="./#{@dir.path.style}/homepage.css" type="text/css" />}
- end
- #% text #changed from txt to avoid naming conflicts #FOLLOW
- def txt_generator
- %{ <meta name="generator" content="#{@v[:project]} #{@v[:version]} of #{@v[:date_stamp]} (#{@v[:date]}) (n*x and Ruby!)" />
- <link rel="generator" href="http://www.sisudoc.org/" />}
- end
- def txt_generator_comment
- %{ <!- #{@v[:project]} #{@v[:version]} of #{@v[:date_stamp]} (#{@v[:date]}) (n*x and Ruby!)" http://www.sisudoc.org/ ->}
- end
- def txt_hp
- '&nbsp;SiSU'
- end
- def txt_hp_alias
- 'SiSU'
- end
- def txt_home
- 'SiSU'
- end
- def txt_signature # used in latex/pdf footer
- 'SiSU'
- end
- #% url
- def url_urify(uri)
- URI.parse(uri)
- end
- def url_sisu
- 'http://www.sisudoc.org/'
- end
- def url_sisudoc
- 'http://www.sisudoc.org'
- end
- def url_footer_signature
- 'http://www.sisudoc.org/'
- end
- def url_root
- '/sisu' #watch
- end
- def url_root_http
- 'http://www.sisudoc.org/' #watch
- end
- def url_home
- 'http://www.sisudoc.org/' # used in pdf header
- end
- def url_site #used as stub... where there are subdirectories and is different from home
- url_home
- #'http://www.sisudoc.org/' # used in pdf header
- end
- def url_txt
- 'www.sisudoc.org/'
- end
- def url_path_image_base #used for html image display
- "#{Xx[:html_relative2]}_sisu/image"
- end
- def url_path_image #used for html image display
- "#{Xx[:html_relative2]}_sisu/image"
- end
- def url_path_image_sys #used for html image display
- "#{Xx[:html_relative2]}_sisu/image_sys"
- end
- def url_decoration
- def tex_open #'{\UseTextSymbol{OML}{<}}'
- Dx[:url_o]
- end
- def tex_close #'{\UseTextSymbol{OML}{>}}'
- Dx[:url_c]
- end
- def xml_open #'&lt;'
- Dx[:url_o]
- end
- def xml_close #'&gt;'
- Dx[:url_c]
- end
- def txt_open
- '<'
- end
- def txt_close
- '>'
- end
- self
- end
- def rel_decoration
- def tex_open #'{\UseTextSymbol{OML}{<}}'
- Dx[:rel_o]
- end
- def tex_close #'{\UseTextSymbol{OML}{>}}'
- Dx[:rel_c]
- end
- def xml_open #'&lt;'
- Dx[:rel_o]
- end
- def xml_close #'&gt;'
- Dx[:rel_c]
- end
- def txt_open
- '<'
- end
- def txt_close
- '>'
- end
- self
- end
- #% color
- def color_body
- %{<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">}
- end
- def color_white
- '"#ffffff"'
- end
- def color_black
- '#000000'
- end
- def color_blue_ink
- '#003399'
- end
- def color_blue_tinge
- '#e3ecef'
- end
- def color_blue_grey
- '#8faebf'
- end
- def color_blue_murky
- '#437389'
- end
- def color_beige
- '#f1e8de'
- end
- def color_subtleglow
- '#dddccc'
- end
- def color_glow
- '#fff0c3'
- end
- def color_rose
- '#ffdec9'
- end
- def color_turquoise
- '#1c869b'
- end
- def color_grey_pale
- '#eeeeee'
- end
- def color_grey_medium
- '#cccccc'
- end
- def color_grey
- '#999999'
- end
- def color_yellow_light
- '#fff3b6'
- end
- def color_yellow
- '#ffde14'
- end
- def color_yellow_dark
- '#ffcc00'
- end
- def color_green_light
- '#b7d398' # #e2efd5 #b7d398 #b1c999 # '#aed19e'
- end
- def color_green
- '#0a8400'
- end
- def color_green_dark
- '#086800'
- end
- def color_ruby
- '#a00000'
- end
- def color_maroon
- '#800000'
- end
- def color_paper
- %{"#{color_white}"}
- end
- def color_band1
- %{"#{color_white}"}
- end
- def color_band2
- %{"#{color_white}"}
- end
- def color_body
- %{<body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">}
- end
- def color_font_face #was font WATCH
- "#{color_black}"
- end
- def color_surround
- %{"#{color_white}"}
- end
- def color_band
- %{"#{color_white}"}
- end
- def color_table1
- 'ffffcc'
- end
- def color_table2
- 'c0d0f0'
- end
- def color_band1
- '"#ffffff"'
- end
- def color_band2
- '"#ffffff"'
- end
- #% icon
- def icon_ico
- 'rb7.ico'
- end
- def icon_sisu
- 'sisu.png'
- end
- def icon_manifest
- 'b_info.png'
- end
- def icon_doc
- 'b_doc.png'
- end
- def icon_toc
- 'b_toc.png'
- end
- def icon_wmp
- 'b_wmp.png'
- end
- def icon_odf
- 'b_odf.png'
- end
- def icon_epub
- 'b_epub.png'
- end
- def icon_pdf
- 'b_pdf.png'
- end
- def icon_pdf_portrait
- 'b_pdf.png'
- end
- def icon_pdf_landscape
- 'b_pdf.png'
- end
- def icon_choice
- 'b_choice.png'
- end
- def icon_new
- 'b_new.png'
- end
- def icon_dot_clear
- 'dot_clear.png'
- end
- def icon_dot_white
- 'dot_white.png'
- end
- def icon_dot
- icon_dot_white
- end
- def icon_home_button
- 'sisu.png'
- end
- def icon_next
- 'arrow_next_red.png'
- end
- def icon_previous
- 'arrow_prev_red.png'
- end
- def icon_up
- 'arrow_up_red.png'
- end
- #% font
- def font_fonts
- @fonts
- end
- def font_face
- %{face="#{font_fonts}"}
- end
- def font_color
- 'color="#000000"'
- end
- def font_size_endnote
- 'size="3"'
- end
- def font_small
- 'size="3"'
- end
- def font_tiny
- 'size="2"'
- end
- #% markup
- def markup_italics_list #regular expression of words to be italised
- end
- def markup_bold_list #regular expression of words to be made bold
- 'SiSU'
- end
- def markup_make_italic
- if defined? italics_list \
- and italics_list
- make={}
- if italics_list
- r=italics_list.dup
- x=case r
- when /\/i$/; 'i'
- else ''
- end
- r=r.gsub(/^\/(.+?)\/i?/,'\1').
- gsub(/\(/,'(?:') # avoid need to escape use of brackets within regex provided
- m='\b(' + r + ')\b'
- make[:str]
- make[:regx]=(x =~/i/) \
- ? (/#{m}/i)
- : (/#{m}/)
- else nil
- end
- end
- end
- def markup_make_bold
- if defined? bold_list \
- and not bold_list.empty?
- make={}
- if bold_list
- r=bold_list.dup
- x=case r
- when /\/i$/; 'i'
- else ''
- end
- r.gsub(/^\/(.+?)\/i?/,'\1').
- gsub(/\(/,'(?:') # avoid need to escape use of brackets within regex provided
- m='\b(' + r + ')\b'
- make[:str]
- make[:regx]=(x =~/i/) \
- ? (/#{m}/i)
- : (/#{m}/)
- else nil
- end
- make
- end
- end
- #% paragraph
- def paragraph_txt
- %{<p class="normal">}
- end
- def paragraph_endnote
- %{<p class="endnote">}
- end
- def paragraph_font_tiny
- %{<font #{font_tiny} #{font_face}>}
- end
- def paragraph_font_small
- %{<font #{font_small} #{font_face}>}
- end
- #% table
- def table_close
- '</td></tr>
-</table>'
- end
- def table_width_1
- '"100%"'
- end
- def table_width_2
- '"99%"'
- end
- def table_width_txt
- '"94%"'
- end
- def table_width_txt_r
- '"96%"'
- end
- def table_cellpad_box
- '"20"'
- end
- #% indent
- def indent_level_0
- '"1%"'
- end
- def indent_level_1
- '"4%"'
- end
- def indent_level_2
- '"6%"'
- end
- def indent_level_3
- '"8%"'
- end
- def indent_level_4
- '"10%"'
- end
- #% margin
- def margin_num
- '</p> </td><td width="4%" align="right" valign="top">'
- end
- def margin_numless
- '</td><td width="4%" align="right" valign="top">'
- end
- def margin_num_css
- '</td>
-<td width="2%" align="right" valign="top"> '
- end
- def margin_txt_w1
- %{<table summary="" width=#{table_width_txt_r} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width="6%" align="right">&nbsp;</td>
-<td width="90%" valign="top" align="justify">}
- end
- def margin_txt_w2
- %{<table summary="" width=#{table_width_txt_r} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width="10%" align="right">&nbsp;</td>
-<td width="86%" valign="top" align="justify">}
- end
- def margin_txt_0
- %{<table summary="" width=#{table_width_txt} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width=#{indent_level_0} align="right">
-</td><td valign="top" align="justify">}
- end
- def margin_txt_1
- %{<table summary="" width=#{table_width_txt} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width=#{indent_level_1} align="right"></td><td valign="top" align="justify">}
- end
- def margin_txt_2
- %{<table summary="" width=#{table_width_txt} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width=#{indent_level_2} align="right">
-</td>
-<td valign="top" align="justify">}
- end
- def margin_txt_3
- %{<table summary="" width=#{table_width_txt} border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td width=#{indent_level_3} align="right">
-</td>
-<td valign="top" align="justify">}
- end
- def margin_css
- '<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">
-<tr><td valign="top" align="justify"> '
- end
- #% png
- def png_ico
- %{ <link rel="shortcut icon" href="../_sisu/image/#{icon_ico}" />}
- end
- def png_sisu #check url path
- %{ <a href="#{@url.sisu}">
- <img border="0" width="160" height="60" src="#{url_path_image}/#{icon_sisu}" alt="SiSU" />
- </a>}
- end
- def png_site
- %{<img src="#{url_path_image}/#{icon_site}" alt="@" border="0" />}
- end
- def png_nav
- %{<img border="0" height="15" width="15" src="#{url_path_image_sys}/#{icon_bluebell}" alt="Contents" />}
- end
- def png_manifest
- %{<img border="0" height="15" width="15" src="#{url_path_image_sys}/#{icon_manifest}" alt="Document Manifest" />}
- end
- def png_doc
- %{<img border="0" height="15" width="15" src="#{url_path_image_sys}/#{icon_doc}" alt="Full Text" />}
- end
- def png_toc
- %{<img border="0" height="18" width="15" src="#{url_path_image_sys}/#{icon_toc}" alt="TOC linked" />}
- end
- def png_odf
- %{<img border="0" height="18" width="18" src="#{url_path_image_sys}/#{icon_odf}" alt="ODF/ODT" />}
- end
- def png_epub
- %{<img border="0" height="18" width="15" src="#{url_path_image_sys}/#{icon_epub}" alt="EPUB" />}
- end
- def png_pdf
- %{<img border="0" height="18" width="15" src="#{url_path_image_sys}/#{icon_pdf}" alt="PDF" />}
- end
- def png_pdf_portrait
- %{<img border="0" height="18" width="15" src="#{url_path_image_sys}/#{icon_pdf}" alt="PDF portrait" />}
- end
- def png_pdf_landscape
- %{<img border="0" height="15" width="18" src="#{url_path_image_sys}/#{icon_pdf}" alt="PDF landscape" />}
- end
- def png_home
- #dir=SiSU_Env::InfoEnv.new #(@fns)
- %{<img border="0" src="#{url_path_image_base}/#{icon_home_button}" alt="#{txt_home} --&gt;" />}
- #%{<img border="0" src="#{dir.url.images_local}/#{icon_home_button}" alt="#{txt_home} --&gt;" />}
- end
- def png_home_button
- rel=@dir.path_rel_links.html_scroll_2
- %{<img border="0" src="#{rel}/#{icon_home_button}" alt="#{txt_home} --&gt;" />}
- end
- #% png_nav #not currently used
- #% nav_txt
- def nav_txt_homepage
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;home&nbsp;
- </font> }
- end
- def nav_txt_toc_link
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;&nbsp;toc&nbsp;
- </font> }
- end
- def nav_txt_doc_link
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;scroll&nbsp;
- </font> }
- end
- def nav_txt_manifest
- #{png_manifest}&nbsp;document&nbsp;manifest
- %{ <font face="#{font_fonts}" size="2">
- [&nbsp;document&nbsp;manifest&nbsp;]
- </font> }
- end
- def nav_txt_concordance
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;&nbsp;A-Z&nbsp;
- </font> }
- end
- def nav_txt_pdf_portrait
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;pdf&nbsp;
- </font> }
- end
- def nav_txt_pdf_landscape
- %{ <font face="#{font_fonts}" size="2">
- &nbsp;pdf&nbsp;
- </font> }
- end
- #% banner
- def banner_home_button_only
- %{<a href="#{url_site}/">
- #{png_home_button}
- </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">
- #{png_home}
- </a>
-</td>
-<td width="90%">
-#{table_close}}
- end
- def banner_instrument_cover_band_scr
- '<table summary="scroll instrument cover band" width="100%" border="0" cellpadding="8" bgcolor="#ffffff" align="center">
-<tr><td align="center">'
- end
- def banner_instrument_cover_band_seg
- '<table summary="segment instrument cover band, title, author, location" width="100%" border="0" cellpadding="8" bgcolor="#ffffff" align="center">
-<tr><td align="center">'
- end
- #% widget
- def widget_promo # Array used to build promo from list.yml and promo.yml
- # ['sisu_icon','sisu','sisu_search_libre','open_society','fsf','ruby']
- end
- def widgets_open
-<<WOK
-<table summary="SiSU summary" bgcolor="#ffffff" cellpadding="4" border="0">
-WOK
- end
- def widget_sisu_text
-<<WOK
- <p class="tiny"><font color="#666666" size="2">
- Output generated by
- <a href="#{url_sisu}">
- #{@v[:project]}
- </a>
- #{@v[:version]} #{@v[:date]} (#{@v[:date_stamp]})
- </font></p>
-WOK
- end
- def widget_sisu
-<<WOK
-<!-- widget sisu -->
-<tr><td valign="top" width="100%">
-<!-- SiSU Rights -->
-#{widget_sisu_text}
-</td></tr>
-WOK
- end
- def widget_sisu_verbose
-<<WOK
-<!-- widget sisu -->
-<tr><td valign="top" width="10%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="#{url_sisu}">
- <img border="0" src="../_sisu/image/sisu.png" alt="SiSU" width="120" height="39" />
- </a>
- </font></p>
-</td><td valign="top" width="45%">
-<!-- SiSU Rights -->
- <p class="tiny_left"><font color="#666666" size="2">
- Output generated by
- <a href="#{url_sisu}">
- #{@v[:project]}
- </a>
- #{@v[:version]} #{@v[:date]} (#{@v[:date_stamp]})
- <br />
- <a href="#{url_sisu}">
- <b>#{@v[:project]}</b>
- </a>
- Copyright <sup>&copy;</sup> Ralph Amissah
- 1997, current #{@date.year_static}.
- All Rights Reserved.
- <br />
- <a href="#{url_sisu}">
- #{@v[:project]}
- </a>
- is software for document structuring, publishing and search,
- <br />
- <a href="#{url_sisu}">
- www.sisudoc.org/
- </a>
- and
- <a href="#{url_sisudoc}">
- www.sisudoc.org
- </a>
- <br />
- <i>w3 since October 3 1993</i>
- <a href="mailto:ralph@amissah.com">
- ralph@amissah.com
- </a>
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- #{@v[:project]} using:
- <br />Standard SiSU markup syntax,
- <br />Standard SiSU meta-markup syntax, and the
- <br />Standard SiSU <u>object citation numbering</u> and system, (object/text positioning system)
- <br />
- Copyright <sup>&copy;</sup> Ralph Amissah 1997, current #{@date.year_static}.
- All Rights Reserved.
- </font></p>
-</td></tr>
-WOK
- end
- def widget_way_better
- <<WOK
-<!-- widget way better -->
-<tr><td valign="top" width="10%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="http://www.gnu.org/licenses/gpl.html">
- <img border="0" src="../_sisu/image/gplv3_free_software.png" alt="GPLv3" width="127" height="51" />
- </a>
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- <a href="#{url_sisu}">
- #{@v[:project]}
- </a>
- is released under
- <a href="http://www.gnu.org/licenses/gpl.html">GPLv3</a>
- or later,
- #{url_decoration.xml_open}<a href="http://www.gnu.org/licenses/gpl.html">http://www.gnu.org/licenses/gpl.html</a>#{url_decoration.xml_close}
- </font></p>
-</td><td valign="top" width="45%">
- <p class="tiny_left"><font color="#666666" size="2">
- #{@v[:project]}, developed using
- <a href="http://www.ruby-lang.org/en/">
- Ruby
- </a>
- on
- <a href="http://www.debian.org/">
- Debian/Gnu/Linux
- </a>
- software infrastructure,
- with the usual GPL (or OSS) suspects.
- <br />
- Better - "performance, reliability, scalability, security &amp; total cost of ownership"
- [not to mention flexibility &amp; choice] use of and adherence to open standards (where practical and fair) and it is software libré.
- <br />
- Get With the Future
- <a href="http://www.sisudoc.org/">
- Way Better!
- </a>
- </font></p>
-</td></tr>
-WOK
- end
- #% credits
- def credits_sisu_manifest
- widget_sisu_text
- end
- def credits_sisu
- %{<div class="substance">
-<table summary="SiSU summary" bgcolor="#ffffff" cellpadding="4" border="0">
-<tr><td>
- #{widget_sisu}
-</table></div>}
- ''
- end
- def credits_splash
- end
- def credits_sisu_epub
- %{<div class="substance">
-<p class="center"><a href="http://www.openebook.org"><b>EPUB</b></a> generated by <a href="http://www.sisudoc.org"><b>#{@v[:project]}</b></a> v#{@v[:version]}, GPL3</p>
-</div>}
- ''
- end
- end
- class Home < Defaults
- def initialize
- @v=SiSU_Env::InfoVersion.instance.get_version
- @dir=SiSU_Env::InfoEnv.new
- @date=SiSU_Env::InfoDate.new #{@date.year}
- end
- def redirect
- <<WOK
-<html><head>
-<title>SiSU</title>
-<meta http-equiv="refresh" content="0, url=http://www.sisudoc.org/sisu/SiSU/">
-</head>
-<body>
-SiSU informtion provided at <a href="http://www.sisudoc.org/sisu/SiSU/">www.sisudoc.org/sisu/SiSU</a><p />
-If your browser supports redirection, you will be escorted there shortly.
-</body>
-</html>
-WOK
- end
- def homepage
- <<WOK
-<html xmlns="http://www.w3.org/1999/xhtml">
-<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, EPUB, XHTML, XML, ODF (OpenDocument), LaTeX, PDF, SQL (PostgreSQL and SQLite), and for search</title>
-<meta name="dc.title" content="SiSU - SiSU information Structuring Universe, Structured information Serialised Units, #{@date.year_static}" />
-<meta name="dc.creator" content="Ralph Amissah" />
-<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, EPUB, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" />
-<meta name="dc.publisher" content= "SiSU http://www.sisudoc.org/" />
-<meta name="dc.language" content="en" />
-<meta name="dc.rights" content="Copyright Ralph Amissah" />
-<meta name="generator" content="#{@v[:project]} #{@v[:version]} of #{@v[:date_stamp]} (#{@v[:date]}) (n*x and Ruby!)" />
-<link rel="generator" href="http://www.sisudoc.org/" />
-<link rel="stylesheet" href="./#{@dir.path.style}/harvest.css" 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</h1>
-<p>
-[<a href="http://sisudoc.org/sisu_manual/en/html/sisu/toc.html">Manual</a>]
-</p>
-<p>
-[<a href="http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary">Source</a>]
-[<a href="http://lists.sisudoc.org/listinfo/sisu">List Info (sisu@lists.sisudoc.org)</a>]
-</p>
-
-<h1>SiSU Markup Samples</h1>
-<p>
-[<a href="http://sources.sisudoc.org/gitweb/?p=doc/sisu-markup-samples.git;a=summary">Source</a>]
-[<a href="http://sisudoc.org/sisu_markup_samples.html">Output</a>]
-</p>
-
-<hr />
-
-<h2 class="top_band_tiny">
- Structured information, Serialized Units
- &nbsp;&nbsp;
- <a href="http://www.sisudoc.org" target="_top">
- &lt;www.sisudoc.org&gt;
- </a>
- &nbsp;&nbsp;or&nbsp;&nbsp;
- <a href="http://www.jus.uio.no/sisu/" target="_top">
- &lt;www.jus.uio.no/sisu/&gt;
- </a>
-software for electronic texts, document collections, books, digital libraries &amp; search, with "atomic search" &amp; text locating system (shared object citation numbering: "<i>ocn</i>").
-Outputs include: plaintext, HTML, EPUB, ODT (OpenDocumentText), (XHTML, XML,) LaTeX, PDF, SQL (PostgreSQL and SQLite).
-</h2>
-<p class="small">
-<a href="mailto:sisu@lists.sisudoc.org">
-&lt;sisu@lists.sisudoc.org&gt;
-</a>
-<a href="http://lists.sisudoc.org/listinfo/sisu">
-&lt;http://lists.sisudoc.org/listinfo/sisu&gt;
-</a>
-</p>
-<p class="small">
-<a href="mailto:ralph@amissah.com">
-&lt;ralph@amissah.com&gt;
-</a>
-<a href="mailto:ralph.amissah@gmail.com">
-&lt;ralph.amissah@gmail.com&gt;
-</a>
-</p>
-<p class="tiny">
-#{@v[:project]} #{@v[:version]} of #{@v[:date_stamp]} (#{@v[:date]}) (n*x and Ruby!), #{@date.year_static}.
-</p>
-<p class="tiny">
-w3 since October 3 1993.
-</p>
-</body>
-</html>
-WOK
- end
- def home_toc
- ' '
- end
- end
- class Inserts
- end
- class TeX < Defaults
- def initialize(papersize='')
- @papersize=papersize
- end
- def a4
- def portrait
- def w
- 160
- end
- def h
- 228
- end
- def img_px
- 450
- end
- self
- end
- def landscape
- def w
- 238
- end
- def h
- 160
- end
- def img_px
- 300
- end
- self
- end
- self
- end
- def letter
- def portrait
- def w
- 166
- end
- def h
- 212
- end
- def img_px
- 468
- end
- self
- end
- def landscape
- def w
- 226
- end
- def h
- 166
- end
- def img_px
- 290
- end
- self
- end
- self
- end
- def legal
- def portrait
- def w
- 168
- end
- def h
- 286
- end
- def img_px
- 474
- end
- self
- end
- def landscape
- def w
- 296
- end
- def h
- 166
- end
- def img_px
- 420
- end
- self
- end
- self
- end
- def b5
- def portrait
- def w
- 140
- end
- def h
- 204
- end
- def img_px
- 356
- end
- self
- end
- def landscape
- def w
- 200
- end
- def h
- 130
- end
- def img_px
- 260
- end
- self
- end
- self
- end
- def a5
- def portrait
- def w
- 112
- end
- def h
- 162
- end
- def img_px
- 280
- end
- self
- end
- def landscape
- def w
- 152
- end
- def h
- 100
- end
- def img_px
- 190
- end
- self
- end
- self
- end
- def dimensions
- case @papersize
- when /a4/; a4
- when /letter/; letter
- when /legal/; legal
- when /b5/; b5
- when /a5/; a5
- else a4
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/digests.rb b/lib/sisu/v4/digests.rb
deleted file mode 100644
index 75a340b0..00000000
--- a/lib/sisu/v4/digests.rb
+++ /dev/null
@@ -1,389 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/digests.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: document digests (md5|sha256) and structure processing
-
-=end
-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
- class Source
- @@dg=nil
- def initialize(opt)
- @opt=opt
- @fnb=@opt.fnb
- @@endnotes_para=[]
- @@dg=nil
- @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} 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_title_hi
- 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
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class Scroll <Source
- @@dl=nil
- @@ds={}
- @@description,@@ds[:digests],@@ds[:tree],@@ds[:summary],@@sc_info=[],[],[],[],[]
- def initialize(particulars) #data='',md='')
- @particulars=particulars
- @data,@env,@md=@particulars.dal_array,@particulars.env,@particulars.md
- SiSU_Env::FileOp.new(@md).mkdir
- @@dg ||=@env.digest.type
- @@dl ||=@env.digest.length
- @dg,@dl=@@dg,@@dl
- l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
- @language=l[:n]
- @tr=SiSU_Translate::Source.new(@md,@language)
- @sp=' '
- end
- def songsheet
- @@description,@@ds[:digests],@@ds[:tree],@@ds[:summary],@@sc_info=[],[],[],[],[]
- message_digest
- dal_structure
- supplementary
- output
- end
- def description(f,e='')
- puts f + e.to_s if @md.opt.cmd =~/V/
- @@description << f << e
- end
- def digests(f,e='')
- 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.opt.cmd =~/V/
- @@ds[:tree] << f << e
- end
- def dal_structure_summary(f,e='')
- 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.opt.cmd =~/V/
- @@sc_info << f << e
- end
- def output
- 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)
- txt=txt.gsub(/([()])/,"\\\\\\1")
- end
- def message_digest
- data=@data
- sys=SiSU_Env::SystemCall.new
- @p=[]
- @g,@v,@r='','',''
- data.each do |para|
- x=nil
- y,para_endnotes=[],[]
- 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,d_clean,d_all=$1,$2,$3
- @ocn=ocn unless ocn.to_i==0
- 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
- images=[]
- if para !~/^%+\s/ \
- and para =~/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+\.(png|jpg|gif))\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/
- images=para.scan(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+\.(?:png|jpg|gif))\s.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/).flatten
- else nil
- end
- x=case para
- when /^#{Mx[:meta_o]}title#{Mx[:meta_c]}/
- "\n" << ' '*0 << '@' << ' '*9
- when /^#{Mx[:meta_o]}subtitle#{Mx[:meta_c]}/
- "\n" << ' '*1 << '@' << ' '*8
- when /^#{Mx[:lv_o]}1:/ #fix Mx[:lv_o]
- "\n" << ' '*2 << ':A ' << ' '*6 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- when /^#{Mx[:lv_o]}2:/ #fix Mx[:lv_o]
- "\n" << ' '*3 << ':B ' << ' '*5 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- when /^#{Mx[:lv_o]}3:/ #fix Mx[:lv_o]
- "\n" << ' '*4 << ':C ' << ' '*4 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- when /^#{Mx[:lv_o]}4:/ #fix Mx[:lv_o]
- "\n" << ' '*5 << '1' << ' '*4 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- when /^#{Mx[:lv_o]}5:/ #fix Mx[:lv_o]
- "\n" << ' '*6 << '2' << ' '*3 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- when /^#{Mx[:lv_o]}6:/ #fix Mx[:lv_o]
- "\n" << ' '*7 << '3' << ' '*2 << '- ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all
- else
- if para =~/MD5\(\S+?\.sst\)=\s*<u>([0-9a-f]{#{@dl}})<\/u>/ #watch
- @n,@s=/MD5\((\S+?\.sst)\)=\s*<u>([0-9a-f]{#{@dl}})<\/u>/.match(para)[1,2]
- end
- x=unless ocn =~ /^0$/
- if images \
- 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_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 << /\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 << (@dg =~/^sha(?:2|256)$/) \
- ? sys.sha256(para_image)
- : sys.md5(para_image)
- else
- @image_name << ' '*16 + i + ' [image missing]'
- @image_dgst << ''
- @image_dgst[1]=not_found_msg + ' '*(32-not_found_msg.length)
- end
- end
- line= "\n" + ' '*9 + ' - ' + ocn + ' '*(10-ocn.length) + d_clean + ' ' + d_all + "\n"
- line_image=[]
- c=0
- @image_name.each do |ok|
- line_image << %{ #{@img[c]} #{@image_dgst[c][1]} #{@image_name[c]}}
- c +=1
- end
- line=line + line_image.join("\n")
- else "\n" + ' '*9 + ' - ' + ocn + ' '*(10-ocn.length) + d_clean + ' ' + d_all
- end
- else
- prefix=''
- metad=[@tr.full_title,@tr.author,@tr.translator,@tr.illustrator,@tr.prepared_by,@tr.digitized_by,@tr.description,@tr.subject,@tr.abstract,@tr.publisher,@tr.contributor,@tr.date_created,@tr.date_issued,@tr.date_available,@tr.date_modified,@tr.date_valid,@tr.date,@tr.type,@tr.format,@tr.rights,@tr.identifier,@tr.source,@tr.language,@tr.language_original,@tr.relation,@tr.coverage,@tr.keywords,@tr.comments,@tr.cls_loc,@tr.cls_dewey,@tr.cls_gutenberg,@tr.cls_isbn,@tr.prefix_a,@tr.prefix_b,@tr.sourcefile,@tr.sourcefile_digest,@tr.last_generated,@tr.sisu_version,@tr.ruby_version,@tr.sc_number,@tr.sc_date,'Generated by: ','Ruby version: ']
- metad.each do |n|
- m=rgx_txt(n)
- if m=~/\S+/ \
- and para=~/^#{m}:/
- x,o=0,18
- while x < 2; o = o + 2
- x=o - n.length
- end
- space=' '*x
- prefix="#{n.downcase}#{space}"
- break
- else prefix=' '*9
- end
- end
- m_title=rgx_txt(@tr.full_title)
- m_author=rgx_txt(@tr.author)
- m_sourcefile_digest=rgx_txt(@tr.sourcefile_digest)
- m_sisu_version=rgx_txt(@tr.sisu_version)
- m_last_generated=rgx_txt(@tr.last_generated)
- m_ruby_version=rgx_txt(@tr.ruby_version)
- case para
- when /#{m_title}: /
- @t=/#{m_title}: (.+?)#{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]}/.match(para)[1].gsub(/<\/?u>/,'').strip
- when /#{m_author}: /
- @c=/#{m_author}: (.+?)#{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]}/.match(para)[1].gsub(/<\/?u>/,'').strip
- when /#{m_sourcefile_digest}.+?<u>/ #watch
- dgst_extra="\n" << ' '*21 << 'source' << ' '*4 << @md.dgst[1] << ' '*34 << @md.fns
- when /#{m_sisu_version}: /
- @v=/#{m_sisu_version}: (.+?)#{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]}/.match(para)[1].gsub(/<\/?u>/,'').strip
- when /#{m_last_generated}: /
- @g=/#{m_last_generated}: (.+?)#{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]}/.match(para)[1].gsub(/<\/?u>/,'').strip
- when /#{m_ruby_version}: /
- @r=/#{m_ruby_version}: (.+?)#{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]}/.match(para)[1].gsub(/<\/?u>/,'').strip
- end
- dgst_extra ||=''
- "\n" << prefix << ' - ' << ocn << ' '*(10-ocn.length) << d_clean << ' ' << d_all << dgst_extra << "\n"
- end
- end
- para_endnotes[0].each { |e| y << "\n" + ' '*(28-e[0].length) + "[#{e[0].to_s}] #{e[1].to_s}" } if para_endnotes[0]
- if y; digests(x,y)
- else digests(x)
- end
- end
- end
- manifest="#{@env.url.root}/#{@md.fnb}/sisu_manifest.html"
- a=%{ocn digest clean (no markup/notes),#{@sp*33}digest all (includes markup & endnotes)\n}
- description("#{@md.title.full}\n")
- description("#{@md.author}\n")
- description("#{@md.fns}\n")
- description("----------------------------------------------\n")
- description("SiSU Document Content Certificate (Digest/DCC)\n")
- description("----------------------------------------------\n")
- description(" #{@dg} digests\n")
- description("------------\n")
- description("Sourcefile digest: #{@md.dgst[1]}\n")
- description(" source filename: #{@md.fns}\n")
- description("available outputs: #{manifest}\n")
- #description(" time generated: #{@g}\n")
- #description(" SiSU version used: #{@v}\n")
- #description(" Ruby version used: #{@r}\n")
- description("------------\n")
- description("Document Digests\n")
- description(a)
- end
- def dal_structure
- data=@data
- endnotes=nil
- data.each do |t_o|
- dgst=SiSU_TextRepresentation::ModifiedTextPlusHashDigest.new(@md,t_o).composite.dgst
- if dgst
- 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
- 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]}")
- if dgst[:images]
- dgst[:images].each do |img|
- digests("#{@sp*8}#{img[:img_dgst]}#{@sp*66}#{img[:img_type]} #{img[:img_name]}")
- end
- end
- end
- if dgst[:endnotes]
- dgst[:endnotes].each do |en|
- digests("#{@sp*8}#{en[:note_dgst]}#{@sp*66}note [#{en[:note_number]}]")
- endnotes=en[:note_number]
- end
- end
- end
- end
- l=Hash.new(0)
- ocn=nil
- dal_structure_tree("------------\n")
- dal_structure_tree("document structure[*]\n")
- data.each do |t_o|
- if t_o.is==:heading
- x=case t_o.ln
- when 1; l[1] +=1 #fix Mx[:lv_o]
- ' '*0 << ':A'
- when 2; l[2] +=1 #fix Mx[:lv_o]
- ' '*1 << ':B'
- when 3; l[3] +=1 #fix Mx[:lv_o]
- ' '*2 << ':C'
- when 4; l[4] +=1 #fix Mx[:lv_o]
- ' '*3 << '1'
- when 5; l[5] +=1 #fix Mx[:lv_o]
- ' '*4 << '2'
- when 6; l[6] +=1 #fix Mx[:lv_o]
- ' '*5 << '3'
- else nil
- end
- end
- 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")
- dal_structure_summary("------------\n")
- dal_structure_summary("document structure[*]\n")
- [0,1,2,3,4,5,6].each do |y|
- v=case y
- when 1; ':A'
- when 2; ':B'
- when 3; ':C'
- when 4; '1 '
- when 5; '2 '
- when 6; '3 '
- end
- dal_structure_summary("#{v} = #{l[y]}\n") if l[y] > 0
- end
- dal_structure_summary("objects (ocn) = #{ocn}\n")
- dal_structure_summary("endnotes = #{endnotes}\n")
- dal_structure_summary(" [*] number of headers (@) and of each heading level (:A to :C and 1 to 3)\n")
- end
- def supplementary
- if defined? @md.sc_number \
- and @md.sc_number
- rcinfo("------------\n")
- rcinfo("source control information\n")
- rcinfo(" (the following information while not important for document content certification\n may help the publisher in locating the version referred to)\n")
- rcinfo(" rcs version number: #{@md.sc_number}\n")
- if defined? @md.sc_date \
- and @md.sc_date
- rcinfo(" rcs date: #{@md.sc_date}\n")
- end
- if defined? @md.sc_time \
- and @md.sc_time
- rcinfo(" rcs time: #{@md.sc_time}\n")
- end
- end
- rcinfo("------------\n")
- rcinfo("Note: the time generated related fields (text and digests) will vary between otherwise identical document outputs\n")
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/embedded.rb b/lib/sisu/v4/embedded.rb
deleted file mode 100644
index c36af0e5..00000000
--- a/lib/sisu/v4/embedded.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/embedded.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: sitemap created from parameters extracted from input file(s)
-
-=end
-module SiSU_Embedded
- require_relative 'param' # param.rb
- include SiSU_Param
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Source
- def initialize(opt)
- @opt=opt
- @md=SiSU_Param::Parameters.new(@opt).get
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @rhost=SiSU_Env::InfoRemote.new(@opt).remote_host_base
- @base_src_dir=@opt.f_pth[:pth].sub(/\/#{@opt.f_pth[:lng]}$/,'')
- @f=SiSU_Env::FileOp.new(@md)
- end
- def read
- songsheet
- end
- def songsheet
- images
- audio
- multimedia
- begin
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def images
- src="#{@base_src_dir}/_sisu/image"
- ldest=@env.path.output
- img_dir="#{@env.path.output}/_sisu/image"
- @rhost.each do |remote_conn|
- if @md.opt.cmd.inspect =~/[vVMR]/ \
- and FileTest.directory?(src)
- FileUtils::mkdir_p(img_dir) unless FileTest.directory?(img_dir)
- src_ec=@f.place_file.images.rel + '/' + @md.ec[:image].join(" #{@f.output_path.images.rel}/")
- unless @opt.fns =~/\.-sst$/
- SiSU_Env::SystemCall.new(src_ec,ldest,'q').rsync('--relative',@opt.base_path)
- #if @md.opt.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="#{@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.opt.cmd.inspect =~/[vVMR]/ \
- and FileTest.directory?(src)
- FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest)
- src_ec="#{src}/" + @md.ec[:audio].join(" #{src}/")
- SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync
- if @md.opt.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="#{@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.opt.cmd.inspect =~/[vVMR]/ \
- and FileTest.directory?(src)
- FileUtils::mkdir_p(ldest) unless FileTest.directory?(ldest)
- src_ec="#{src}/" + @md.ec[:multimedia].join(" #{src}/")
- SiSU_Env::SystemCall.new(src_ec,"#{ldest}/.",'q').rsync
- if @md.opt.cmd.inspect =~/R/ #rsync to remote video directory
- SiSU_Env::SystemCall.new(src_ec,"#{rdest}/.",'q').rsync
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/epub.rb b/lib/sisu/v4/epub.rb
deleted file mode 100644
index d83e3aad..00000000
--- a/lib/sisu/v4/epub.rb
+++ /dev/null
@@ -1,753 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/epub.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: epub generation, processing
-
-=end
-module SiSU_EPUB
- require 'pstore'
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'xhtml_table' # xhtml_table.rb
- require_relative 'epub_format' # epub_format.rb
- include SiSU_EPUB_Format
- require_relative 'epub_segments' # epub_segments.rb
- include SiSU_EPUB_Seg
- require_relative 'epub_tune' # epub_tune.rb
- include SiSU_EPUB_Tune
- require_relative 'epub_concordance' # epub_concordance.rb
- class Source
- def initialize(opt)
- @opt=opt
- @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
- end
- def read
- songsheet
- end
- def songsheet
- begin
- @md=@particulars.md
- @fnb=@md.fnb
- @env=@particulars.env
- unless @opt.cmd =~/q/
- 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_title_hi
- 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.processing_path.epub_bld #(@md)
- @env.processing_path.epub_cp_images(@md)
- data=nil
- 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
- toc=SiSU_EPUB::Source::Toc.new(@md,data).songsheet
- data=@tuned_file_array
- SiSU_EPUB::Source::ScrollHeadAndSegToc.new(@md,toc).in_common #watch
- SiSU_EPUB::Source::Seg.new(@md,data).songsheet
- SiSU_EPUB::Source::Output.new(@md).songsheet
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- unless @opt.cmd =~/[MV]/ #check maintenance flag
- texfiles=Dir["#{@env.processing_path.tune}/#{@opt.fns}*"]
- texfiles.each do |f|
- if FileTest.file?(f)
- File.unlink(f)
- end
- end
- end
- 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){[]}
- @@filename_seg,@@seg_url,@@fn,@@to_lev4,@@get_hash_to,@@get_hash_fn='','','','','','',''
- @@is4=@@is3=@@is2=@@is1=@@heading1=@@heading2=@@heading3=@@heading4=0
- end
- end
- private
- class XHTML_Environment
- def initialize(particulars)
- @particulars=particulars
- @md,@env=particulars.md,particulars.env
- @vz=SiSU_Viz::Defaults.new
- @env,@css=particulars.env,SiSU_Style::CSS.new
- end
- def directories
- SiSU_Env::FileOp.new(@md).mkdir.output.epub
- end
- def tuned_file_instructions
- @tell=SiSU_Screen::Ansi.new(@md.opt.cmd)
- directories
- dal_array=@particulars.dal_array # dal file drawn here
- @tuned_file_array=SiSU_EPUB_Tune::Tune.new(dal_array,@md).songsheet
- @tuned_file_array
- end
- end
- class Endnotes
- include SiSU_EPUB_Format
- def initialize(md,data)
- @md,@data=md,data
- end
- def scroll
- @scr_endnotes=[]
- @data.each do |dob|
- pg=dob.dup
- 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
- endnote_array = pg.obj.scan(/#{Mx[:en_a_o]}[\d*+]+(.+?)#{Mx[:en_a_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d*]+\s.+?#{Mx[:en_b_c]}/m
- endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d*]+(.+?)#{Mx[:en_b_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d+]+\s.+?#{Mx[:en_b_c]}/m
- 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::FormatScroll.new(@md,txt_obj)
- @scr_endnotes << format_scroll.endnote_body
- end
- end
- end
- end
- @scr_endnotes
- end
- end
- class Toc
- @@toc={ seg: [], seg_mini: [], scr: [], ncx: [], opf: [] }
- @@seg_url=''
- @@firstseg=nil
- def initialize(md=nil,data='')
- @md,@data=md,data
- @vz=SiSU_Viz::Defaults.new
- @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.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,md_opf_a_guide=[],[],[]
- @nav_no=0
- @s_a_no,@s_b_no,@s_c_no,@lv5_no,@lv6_no=0,0,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
- @@toc[:ncx] << @epub.toc_ncx.navmap_open
- @@toc[:opf] << @epub.metadata_opf.package_open
- @@toc[:opf] << @epub.metadata_opf.metadata
- @@toc[:opf] << @epub.metadata_opf.manifest_open
- @@toc[:seg] << %{<div class="content">\n<div class="substance">}
- @@toc[:scr] << %{<div class="content">\n<div class="substance">}
- if defined? @md.make.cover_image \
- and @md.make.cover_image.is_a?(Hash) \
- and @md.make.cover_image[:cover] =~/\S+/
- md_opf_a_content << @epub.metadata_opf.manifest_cover_image_information(@md)
- md_opf_a_spine << @epub.metadata_opf.spine_cover_image
- md_opf_a_guide << @epub.metadata_opf.guide_cover_image
- end
- md_opf_a_content << @epub.metadata_opf.manifest_content_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 \
- || dob.is==:heading_insert
- dob_toc=dob.dup
- toc=case dob_toc.ln
- when 1
- @s_a_no +=1
- lv_name='section_a' + @s_a_no.to_s
- @nav_no+=1
- @nav_no2=@nav_no
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @@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],@ncxo[5],@ncxo[6]=true,false,false,false,false,false
- @epub.sections(dob_toc,lv_name)
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) 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,lv_name)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_1
- when 2
- @s_b_no +=1
- lv_name='section_b' + @s_b_no.to_s
- @nav_no+=1
- @nav_no2=@nav_no
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @@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],@ncxo[5],@ncxo[6]=true,false,false,false,false
- @epub.sections(dob_toc,lv_name)
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc
- md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_2
- when 3
- @s_c_no +=1
- lv_name='section_c' + @s_c_no.to_s
- @nav_no+=1
- @nav_no3=@nav_no
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[3]
- @ncxo[3],@ncxo[4],@ncxo[5],@ncxo[6]=true,false,false,false
- @epub.sections(dob_toc,lv_name)
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc
- md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_3
- when 4
- @ncx_cls=[]
- lv_name=dob_toc.name
- @nav_no+=1
- @dob_name=dob.name
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[4]
- @ncxo[4],@ncxo[5],@ncxo[6]=true,false,false
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name) if dob_toc
- md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_4
- when 5
- @ncx_cls=[]
- hashtag='#o' + dob_toc.ocn.to_s
- lv_name=@dob_name
- @nav_no+=1
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @ncxo[5],@ncxo[6]=true,false
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name,hashtag) if dob_toc
- md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name,hashtag)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name,hashtag)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name,hashtag)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_5
- when 6
- @ncx_cls=[]
- hashtag='#o' + dob_toc.ocn.to_s
- lv_name=@dob_name
- @nav_no+=1
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @ncxo[6]=true
- @@toc[:ncx] << @epub.toc_ncx.navpoint(dob_toc,@nav_no,lv_name,hashtag) if dob_toc
- md_opf_a_content << @epub.metadata_opf.manifest_content(dob_toc,lv_name,hashtag)
- md_opf_a_spine << @epub.metadata_opf.spine(dob_toc,lv_name,hashtag)
- md_opf_a_guide << @epub.metadata_opf.guide(dob_toc,lv_name,hashtag)
- SiSU_EPUB::Source::Toc.new(@md,dob_toc).level_6
- else nil
- end
- toc.each do |k,d|
- d.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
- end if toc
- if @@firstseg.nil? \
- and dob.ln==4 \
- and dob.name =~/\S+/
- @@firstseg=dob.name
- end
- if toc
- begin
- @@toc[:seg] << toc[:seg]
- @@toc[:scr] << toc[:seg]
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
- end
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[6]
- @@toc[:ncx] << @epub.toc_ncx.navpoint_close if @ncxo[5]
- @@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],@ncxo[5],@ncxo[6]=false,false,false,false,false,false
- md_opf_a_content << @epub.metadata_opf.manifest_images(@md.ec[:image])
- @@toc[:seg] << "</div>\n</div>"
- @@toc[:scr] << "</div>\n</div>"
- @@toc[:ncx] << @epub.toc_ncx.navmap_close
- @@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
- 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
- protected
- def level_1
- dob=@data
- linkname,link=dob.obj.strip,dob.ocn
- title=if dob.obj !~/Document Information/
- linkname
- else
- link='metadata'
- %{<b><a href="#{link}#{Sfx[:epub_xhtml]}">#{linkname}</a></b>}
- end
- toc={}
- 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
- title=if dob.ocn ==0
- if dob.name =~/^meta/ \
- and dob.obj =~/Document Information/
- %{<a href="#docinfo">#{linkname}</a>}
- else linkname
- end
- else
- @@toc[:scr] << '<br />'
- link=(dob.ln) \
- ? dob.ln
- : ''
- %{<b><a href="##{link}">#{linkname}</a></b>}
- end
- 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
- else format_toc.lev1
- end
- toc
- end
- def level_2
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- if ocn \
- and ocn !~/#/
- p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn)
- end
- txt_obj={ txt: linkname }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc={}
- toc[:seg]=format_toc.lev2
- if p_num
- title=%{#{p_num.goto}#{linkname}</a>}
- txt_obj={ txt: title }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev2
- end
- toc
- end
- def level_3
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- if ocn \
- and ocn !~/#/
- p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn)
- end
- txt_obj={ txt: linkname }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc={}
- toc[:seg]=format_toc.lev3
- if p_num
- title=%{#{p_num.goto}#{linkname}</a>}
- txt_obj={ txt: title }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev3
- end
- toc
- end
- def level_4
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- p_num=SiSU_EPUB_Format::ParagraphNumber.new(@md,ocn) if ocn
- if dob.ln==4
- 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="\\1#{Sfx[:epub_xhtml]}">} +
- %{\\1 \\2</a> })
- end
- 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
- title=%{#{p_num.goto}#{linkname}</a>} if p_num
- txt_obj={ txt: title }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev4
- toc
- end
- def level_5
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- toc={}
- if ocn \
- and 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::FormatToc.new(@md,txt_obj)
- toc[:seg]=format_toc.lev5
- title=%{#{p_num.goto}#{linkname}</a>}
- txt_obj={ txt: title }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev5
- end
- toc
- end
- def level_6
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- toc={}
- if ocn \
- and 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::FormatToc.new(@md,txt_obj)
- toc[:seg]=format_toc.lev6
- title=%{#{p_num.goto}#{linkname}</a>}
- txt_obj={ txt: title }
- format_toc=SiSU_EPUB_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev6
- end
- toc
- end
- end
- class ScrollHeadAndSegToc < Toc
- def initialize(md='',toc='',links_guide_toc='')
- @md,@toc,@links_guide_toc=md,toc,links_guide_toc
- @vz=SiSU_Viz::Defaults.new
- end
- def in_common
- toc_shared=[]
- segtoc=[]
- 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=dochead.gsub(/toc\.(html)/,'doc.\1') #kludge
- toc_shared << dochead #<< ads.div.major
- segtoc << format_head_toc.head #<< ads.div.major
- if defined? @md.rights.all \
- and @md.rights.all
- rights=format_head_toc.rights.all
- 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::CleanXHTML.new(prefix_b).clean
- end
- 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::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(/(\*+)/,%{#{$ep[:hsp]}<sup><a href="#notes">\\1</a></sup>})
- tmp_head=creator_endnote + "\n"
- 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
- tmp_head=nil
- if defined? @md.prefix_a \
- and @md.prefix_a
- tmp_head ||= %{#{@md.prefix_a}\n}
- toc_shared << tmp_head.dup
- segtoc << tmp_head.dup
- end
- tmp_head=nil
- toc_shared << @links_guide_toc
- if defined? @md.rights.all \
- and @md.rights.all
- toc_shared << rights
- end
- if defined? @md.prefix_b \
- and @md.prefix_b
- toc_shared << prefix_b
- end
- #Table of Contents added/appended here
- toc_shared << @toc[:scr]
- segtoc << @links_guide_toc
- segtoc << @toc[:seg]
- if defined? @md.rights.all \
- and @md.rights.all
- segtoc << rights
- end
- if defined? @md.prefix_b \
- and @md.prefix_b
- segtoc << prefix_b
- end
- #Segtoc tail added here
- segtoc << format_head_toc.xhtml_close
- segtoc=segtoc.flatten.compact #watch
- SiSU_EPUB::Source::Output.new(@md).make_cover_image
- SiSU_EPUB::Source::Output.new(@md,segtoc).make_segtoc
- segtoc=[]
- @toc[:scr],@toc[:seg]=[],[]
- toc_shared
- end
- end
- class Table < SiSU_XHTML_Table::TableXHTML
- end
- class Seg < SiSU_EPUB_Seg::Seg
- end
- class Output
- def initialize(md,output='')
- @md,@output=md,output
- @epub_doc="#{@md.fnb}.epub"
- @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
- metainf_container
- css
- images if @md.ec[:image]
- #concordance #uncomment to enable inclusion of concordance file
- output_zip
- end
- def 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_file.epub.metainf_cont
- out<<@epub_header.metainf_container
- out.close
- end
- def css
- 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_file.epub.toc_ncx
- @output.each do |para|
- unless para =~/\A\s*\Z/
- out.puts para
- end
- end
- out.close
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def epub_metadata_opf
- begin
- out=@make_file.epub.metadata
- @output.each do |para|
- unless para =~/\A\s*\Z/
- out.puts para
- end
- end
- out.close
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def images
- 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.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
- def concordance
- SiSU_EPUB_Concordance::Source.new(@md.opt).read
- end
- def output_zip
- 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 make_cover_image
- begin
- if @md.make.cover_image? \
- and @md.make.cover_image.is_a?(Hash) \
- and @md.make.cover_image[:cover] =~/\S+/
- filename_xhtml=@make_file.epub.xhtml_cover_image
- cover_image=<<WOK
-<?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">
- <head>
- <title>Cover</title>
- <meta http-equiv="Content-Type" content='text/html; charset=utf-8' />
- <link rel="stylesheet" href="css/xhtml.css" type="text/css" />
- <style type="text/css"> img { max-width: 100%; } </style>
- </head>
- <body bgcolor="#ffffff" text="#000000" link="#003090" lang="en" xml:lang="en">
- <div class="svg_outer">
- <div class="svg_inner">
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 #{@md.make.cover_image[:w]} #{@md.make.cover_image[:h]}" preserveAspectRatio="xMidYMid meet">
- <image width="#{@md.make.cover_image[:w]}" height="#{@md.make.cover_image[:h]}" xlink:href="image/#{@md.make.cover_image[:cover]}" />
- </svg>
- </div>
- </div>
- </body>
-</html>
-WOK
- filename_xhtml.puts cover_image,"\n"
- filename_xhtml.close
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def make_segtoc
- begin
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/epub_concordance.rb b/lib/sisu/v4/epub_concordance.rb
deleted file mode 100644
index 838e4595..00000000
--- a/lib/sisu/v4/epub_concordance.rb
+++ /dev/null
@@ -1,324 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/epub_concordance.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: epub concordance file (html concordance, wordmap, linked index
- of words in document)
-
-=end
-module SiSU_EPUB_Concordance
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'epub_format' # epub_format.rb
- include SiSU_EPUB_Format
- class Source
- def initialize(opt)
- @opt=opt
- @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)
- end
- def read
- begin
- @env,@md=@particulars.env,@particulars.md
- 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.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.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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class DocTitle
- include SiSU_Viz
- #revisit, both requires (html & shared_xml) needed for stand alone operation (sisu -w [filename])
- 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_Viz::Defaults.new
- @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">#{$ep[:hsp]}</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::HeadToc.new(@md)
- dochead=format_head_toc.head
- <<WOK
-#{dochead}
-<div class="content">
- #{@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>
- <p>
- <b>word</b> (number of occurences)<br />linked references to word within document <br />
- [if number of occurences exceed number of references - word occurs more than once in at least one reference. Footnote/endnotes are either assigned to the paragraph from which they are referenced or ignored, so it is relevant to check the footnotes referenced from within a paragraph as well.]
- </p>
- <p>
- (After the page is fully loaded) you can jump directly to a word by appending a hash (#) and the word to the url for this text, (do not forget that words are case sensitive, and may be listed twice (starting with and without an upper case letter)), #your_word # [#{$ep[:hsp]}http://[web host]/#{@fnb}/concordance.html#your_word#{$ep[:hsp]}]
- </p>
-WOK
- end
- end
- class Word
- @@word_previous=''
- def initialize(word,freq)
- @word,@freq=word,freq
- end
- def html
- w=if @word.capitalize==@@word_previous
- %{\n<p class="concordance_word">#{@word}</p><p class="concordance_count">(#{@freq})</p>\n\t<p class="concordance_object"> }
- else n=@word.strip.gsub(/\s+/,'_') #also need to convert extended character set to html
- %{\n<p class="concordance_word"><a name="#{n}">#{@word}</a></p><p class="concordance_count">(#{@freq})</p>\n\t<p class="concordance_object"> }
- end
- @@word_previous=@word.capitalize
- w
- end
- end
- class Words
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'epub_format' # epub_format.rb
- include SiSU_EPUB_Format
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Screen
- def initialize(particulars)
- @particulars=particulars
- begin
- @vz=SiSU_Viz::Defaults.new
- @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array
- @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]
- @rxp_lv3=/^#{Mx[:lv_o]}3:/ #fix Mx[:lv_o]
- @rxp_seg=/^#{Mx[:lv_o]}4:(\S+?)#{Mx[:lv_c]}/
- @rxp_title=Regexp.new("^#{Mx[:meta_o]}title#{Mx[:meta_c]}\s*(.+?)\s*$")
- @rxp_t1=Regexp.new('^T1')
- @rxp_t2=Regexp.new('^T2')
- @rxp_t3=Regexp.new('^T3')
- @rxp_excluded1=/(?:https?|file|ftp):\/\/\S+/
- @rxp_excluded0=/^(?:#{Mx[:fa_bold_o]}|#{Mx[:fa_italics_o]})?(?:to\d+|\d+|&nbsp;|#{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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @file_concordance.close
- end
- end
- protected
- def location_scroll(wordlocation,show)
- @wordlocation=wordlocation
- %{<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+)/,"\\1#{Sfx[:epub_xhtml]}#o\\2") unless wordlocation.nil?
- case @wordlocation
- when @rxp_t1
- %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, }
- when @rxp_t2
- %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, }
- when @rxp_t3
- %{[<a href="doc#{Sfx[:epub_xhtml]}##{@show}">H</a>]#{@show}, }
- else %{<a href="#{@word_location_seg}">#{@show}</a>, }
- end
- end
- def map_para
- @seg,toy=nil,nil
- @word_map={}
- @dal_array.each do |line|
- if defined? line.ocn
- if (line.is ==:heading \
- || line.is ==:heading_insert) \
- && line.ln==4
- @seg=line.name
- end
- 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=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=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=word.capitalize
- end
- @freq[word] +=1
- @word_map[word] ||= []
- if line !~@rxp_lv1 \
- and line !~@rxp_lv2 \
- and line !~@rxp_lv3
- @word_map[word] << location_seg("#{@seg}\##{toy}",toy)
- else
- @word_map[word] << case line
- when @rxp_lv1; location_seg('T1',toy)
- when @rxp_lv2; location_seg('T2',toy)
- when @rxp_lv3; location_seg('T3',toy)
- end
- end
- end
- end
- end
- end
- end
- end
- seg=''
- @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>,#{$ep[:hsp]}}}
- @file_concordance << '</p>'
- letter=alph.shift
- @file_concordance << %{\n<p class="letter"><a name="A">A</a></p>}
- for word in @freq.keys.sort! {|a,b| a.downcase<=>b.downcase}
- f=/^(\S)/.match(word)[1]
- if letter < f.upcase
- while letter < f.upcase
- if alph.length > 0
- letter=alph.shift
- @file_concordance << %{\n<p class="letter"><a name="#{letter}">#{letter}</a></p>}
- else break
- end
- end
- end
- keyword=SiSU_EPUB_Concordance::Source::Word.new(word,@freq[word]).html
- if keyword !~ @rxp_excluded0
- if @word_map[word][0] =~ /\d+/
- @file_concordance << %{#{keyword}#{seg}#{@word_map[word].uniq.compact.join}}
- end
- @file_concordance << '</p>'
- end
- # special cases endnotes and header levels 1 - 3
- end
- credits=@vz.credits_sisu_epub
- @file_concordance << %{</div>>#{credits}</body>\n</html>} # footer
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/epub_format.rb b/lib/sisu/v4/epub_format.rb
deleted file mode 100644
index 4a060806..00000000
--- a/lib/sisu/v4/epub_format.rb
+++ /dev/null
@@ -1,2236 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/epub_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: epub formating, css template
-
-=end
-module SiSU_EPUB_Format
- include SiSU_Viz
- class ParagraphNumber
- def initialize(md,ocn)
- @md,@ocn=md,ocn.to_s
- @ocn ||=''
- end
- def ocn_display
- make=SiSU_Env::ProcessingSettings.new(@md)
- if make.build.ocn?
- ocn_class='ocn'
- if @ocn==nil \
- or @ocn.to_i==0 \
- or @ocn.empty?
- %{<label class="ocn_off"></label>}
- else
- @ocn.gsub(/^(\d+|)$/,
- %{<label class="#{ocn_class}"><a href="#o\\1" class="lnk#{ocn_class}">\\1</a></label>})
- end
- else
- %{<label class="ocn_off"></label>}
- end
- end
- def name
- (@ocn==nil || @ocn.empty?) ? '' : %{<a name="#{@ocn}"></a>}
- end
- def id #w3c? "tidy" complains about numbers as identifiers ! annoying
- (@ocn==nil || @ocn.empty?) ? '' : %{id="o#{@ocn}"}
- end
- def goto
- (@ocn==nil || @ocn.empty?) ? '' : %{<a href="##{@ocn}">}
- end
- end
- class CSS
- def css_epub_xhtml
- <<-WOK
-/* SiSU epub css default stylesheet */
- body {
- color: black;
- background: #ffffff;
- background-color: #ffffff;
- }
-/*
- table {
- margin-left: 5%;
- display: block;
- }
- tr {
- display: block;
- }
- th,td {
- display: inline;
- vertical-align: top;
- }
-*/
- a:link {
- color: #003399;
- text-decoration: none;
- }
- a:visited {
- color: #003399;
- text-decoration: none;
- }
- a:hover {
- color: #000000;
- background-color: #f9f9aa;
- }
-/*
- a:hover {
- border-bottom: 2px solid #777777;
- background-color: #fff3b6;
- }
-*/
- a:hover img {
- background-color: #ffffff;
- }
- a:active {
- color: #003399;
- text-decoration: underline;
- }
- a.lnkocn:link {
- color: #777777;
- text-decoration: none;
- }
- div {
- margin-left: 0;
- margin-right: 0;
- }
- div.p {
- margin-left: 5%;
- margin-right: 1%;
- }
-
- .norm, .bold, .verse, .group, .block, .alt {
- line-height: 133%;
- margin-left: 0em;
- margin-right: 2em;
- margin-top: 12px;
- margin-bottom: 0px;
- padding-left: 0em;
- text-indent: 0mm;
- }
- p, h0, h1, h2, h3, h4, h5, h6 {
- display: block;
- font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
- font-size: 100%;
- font-weight: normal;
- line-height: 133%;
- text-align: justify;
- margin-left: 0em;
- margin-right: 2em;
- text-indent: 0mm;
- margin-top: 0.8em;
- margin-bottom: 0.8em;
- }
- p.norm { }
- 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;
- margin-top: 6px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it1 {
- margin-left: 1em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it2 {
- margin-left: 2em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it3 {
- margin-left: 3em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it4 {
- margin-left: 4em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it5 {
- margin-left: 5em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it6 {
- margin-left: 6em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it7 {
- margin-left: 7em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it8 {
- margin-left: 8em;
- margin-top: 0px;
- margin-bottom: 0px;
- line-height: 100%;
- }
- p.it9 {
- margin-left: 9em;
- margin-bottom: 0px;
- margin-top: 0px;
- line-height: 100%;
- }
-
- p.group { }
-
- p.block { }
-
- p.alt { }
-
- p.verse {
- margin-bottom: 6px;
- }
-
- p.code {
- font-family: inconsolata, andale mono, courier new, courier, monospace;
- font-size: 90%;
- text-align: left;
- background-color: #eeeeee;
- }
-
- p.caption {
- text-align: left;
- font-size: 80%;
- display: inline;
- }
-
- p.endnote {
- font-size: 96%;
- line-height: 120%;
- text-align: left;
- margin-right: 2em;
- }
- p.endnote_indent {
- font-size: 96%;
- line-height: 120%;
- text-align: left;
- margin-left: 2em;
- margin-right: 2em;
- }
-
- p.center {
- text-align: center;
- }
- p.align_right {
- text-align: right;
- }
- p.bold {
- font-weight: bold;
- }
- p.bold_left {
- font-weight: bold;
- text-align: left;
- }
- p.centerbold {
- text-align: center;
- font-weight: bold;
- }
- p.em {
- font-weight: bold;
- font-style: normal;
- background: #fff3b6;
- }
-
- p.small {
- font-size: 80%;
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 6px;
- text-align: left;
- }
-
- .tiny, .tiny_left, .tiny_right, .tiny_center {
- font-size: 10px;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 6px;
- text-align: left;
- }
- p.tiny { }
- p.tiny_left {
- margin-left: 0px;
- margin-right: 0px;
- text-align: left;
- }
- p.tiny_right {
- margin-right: 1em;
- text-align: right;
- }
- p.tiny_center {
- margin-left: 0px;
- margin-right: 0px;
- text-align: center;
- }
-
- p.concordance_word {
- line-height: 150%;
- font-weight: bold;
- display: inline;
- margin-top: 4px;
- margin-bottom: 1px;
- }
- p.concordance_count {
- font-size: 80%;
- color: #777777;
- display: inline;
- margin-left: 0em;
- }
- p.concordance_object {
- font-size: 80%;
- line-height: 120%;
- text-align: left;
- margin-left: 3em;
- margin-top: 1px;
- margin-bottom: 3px;
- }
- p.book_index_lev1 {
- line-height: 100%;
- margin-top: 4px;
- margin-bottom: 1px;
- }
- p.book_index_lev2 {
- line-height: 100%;
- text-align: left;
- margin-left: 3em;
- margin-top: 1px;
- margin-bottom: 3px;
- }
-
- p.quickref {
- font-size: 10px;
- font-style: italic;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 5px;
- text-align: left;
- }
- p.bigref {
- font-size: 11px;
- font-weight: bold;
- margin-top: 0px;
- margin-bottom: 0px;
- color: #777777;
- margin-right: 5px;
- text-align: center;
- }
-
- p.letter {
- font-weight: bold;
- font-size: 80%;
- margin-left: 0em;
- margin-top: 2px;
- margin-bottom: 2px;
- margin-right: 6px;
- text-align: left;
- color: white;
- background: #880000;
- }
-
- tt {
- font-family: inconsolata, andale mono, courier new, courier, monospace;
- background-color: #eeeeee;
- }
-
- label.ocn {
- width: 2%;
- float: right;
- top: 0;
- font-size: 10px;
- margin-top: 0px;
- margin-bottom: 5px;
- color: #777777;
- margin-right: 5px;
- text-align: right;
- background-color: #ffffff;
- }
-
- table { }
- tr { }
- th,td {
- vertical-align: top;
- text-align: left;
- }
- th {
- font-weight: bold;
- }
-
- p.left, th.left, td.left {
- text-align: left;
- }
- p.small_left, th.small_left, td.small_left {
- text-align: left;
- font-size: 80%;
- }
- p.right, th.right, td.right {
- text-align: right;
- }
-
- #horizontal_links {
- background: #eeeeee;
- margin-left: 5%;
- margin-right: 5%;
- }
- #horizontal {
- margin: 0;
- padding: 0 0 0 10px;
- border-top: 1px solid #000077;
- border-bottom: 1px solid #000077;
- }
- #horizontal li {
- margin: 0 0 0 0;
- padding: 0 16px 0 0;
- display: inline;
- list-style-type: none;
- text-align: left;
- background: none;
- }
- #horizontal a {
- line-height: 12px;
- margin: 0 0 0 0;
- text-decoration: none;
- color: #000077;
- }
- #horizontal a.active, #horizontal a:hover {
- border-bottom: 2px solid #777777;
- padding-bottom: 2px;
- color: #000077;
- }
- #horizontal a:hover {
- color: #000077;
- }
-
- #document_versions {
- position: absolute;
- top: 10mm;
- right: 2%;
- width: 12%;
- float: right;
- }
-
- #vertical_links {
- position: absolute;
- top: 10mm;
- right: 0px;
- width: 20%;
- background: #dddddd;
- float: right;
- }
- #vertical {
- padding: 0 12px 0px 0px;
- margin-left: 2%;
- margin-right: 2%;
- }
- #vertical li {
- display: block;
- list-style-type: none;
- }
- #vertical a {
- line-height: 12px;
- text-decoration: none;
- color: #000077;
- }
- #vertical a.active, #vertical a:hover {
- border-bottom: 2px solid #777777;
- padding-bottom: 2px;
- color: #000077;
- }
-
- ul, li {
- list-style-type: none;
- list-style: none;
- padding-left: 20px;
- display: block;
- font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
- font-weight: normal;
- line-height: 150%;
- text-align: justify;
- text-indent: 0mm;
- margin-left: 1em;
- margin-right: 2em;
- margin-top: 3px;
- margin-bottom: 3px;
- }
-
- li {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- }
-
- ul {
- }
- li.bullet { margin-left: 0em; }
- li.i1 { margin-left: 1em; }
- li.i2 { margin-left: 2em; }
- li.i3 { margin-left: 3em; }
- li.i4 { margin-left: 4em; }
- li.i5 { margin-left: 5em; }
- li.i6 { margin-left: 6em; }
- li.i7 { margin-left: 7em; }
- li.i8 { margin-left: 8em; }
- li.i9 { margin-left: 9em; }
-
- li.doc, li.ref, li.refcenter {
- margin-top: 0px;
- margin-bottom: 0px;
- margin-right: 0px;
- font-size: 8px;
- font-style: normal;
- text-align: left;
- }
- li.doc {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- padding-left: 16px;
- margin-left: 10px;
- margin-right: 0px;
- }
- li.ref {
- background: none;
- padding-left: 0;
- margin-left: 0;
- color: #777777;
- }
- li.refcenter {
- background: url(../image/bullet_09.png) no-repeat 0px 6px;
- padding-left: 20px;
- margin-left: 10%;
- font-size: 9px;
- color: #777777;
- text-align: center;
- }
- li.refbold {
- list-style-type: none;
- padding-left: 16px;
- margin-left: 0;
- margin-right: 10mm;
- font-weight: bold;
- }
-
- h0, h1, h2, h3, h4, h5, h6 {
- font-weight: bold;
- line-height: 120%;
- text-align: left;
- margin-top: 20px;
- margin-bottom: 10px;
- }
- h4.norm, h5.norm, h6.norm {
- margin-top: 10px;
- margin-bottom: 0px;
- }
- h1.center, h2.center, h3.center, h4.center, h5.center, h6.center {
- text-align: center;
- }
- h1 { font-size: 120%; }
- h2 { font-size: 115%; }
- h3 { font-size: 110%; }
- h4 { font-size: 105%; }
- h5 { font-size: 100%; }
- h6 { font-size: 100%; }
- h0 { font-size: 80%; }
-
- h1.i {margin-left: 2em;}
- h2.i {margin-left: 3em;}
- h3.i {margin-left: 4em;}
- h4.i {margin-left: 5em;}
- h5.i {margin-left: 6em;}
- h6.i {margin-left: 7em;}
- h7.i {margin-left: 8em;}
- h8.i {margin-left: 9em;}
- h9.i {margin-left: 10em;}
-
- .toc {
- font-weight: normal;
- margin-top: 6px;
- margin-bottom: 6px;
- }
- h1.toc {
- margin-left: 1em;
- font-size: 115%;
- line-height: 150%;
- }
- h2.toc {
- margin-left: 2em;
- font-size: 110%;
- line-height: 140%;
- }
- h3.toc {
- margin-left: 3em;
- font-size: 105%;
- line-height: 120%;
- }
- h4.toc {
- margin-left: 4em;
- font-size: 100%;
- line-height: 120%;
- }
- h5.toc {
- margin-left: 5em;
- font-size: 95%;
- line-height: 110%;
- }
- h6.toc {
- margin-left: 6em;
- font-size: 90%;
- line-height: 110%;
- }
-
- .microtoc {
- margin-top: 2px;
- margin-bottom: 2px;
- }
-
- h1.microtoc {
- margin-left: 0mm;
- font-size: 115%;
- }
- h2.microtoc {
- margin-left: 5mm;
- font-size: 110%;
- }
- h3.microtoc {
- margin-left: 10mm;
- font-size: 105%;
- }
- h4.microtoc {
- margin-left: 15mm;
- font-weight: normal;
- font-size: 100%;
- }
- h5.microtoc {
- margin-left: 20mm;
- font-weight: normal;
- font-size: 95%;
- }
- h6.microtoc {
- margin-left: 25mm;
- font-weight: normal;
- font-size: 90%;
- }
-
- .subtoc {
- margin-right: 34%;
- font-weight: normal;
- }
- h5.subtoc {
- margin-left: 2em;
- font-size: 80%;
- margin-top: 2px;
- margin-bottom: 2px;
- }
- h6.subtoc {
- margin-left: 3em;
- font-size: 75%;
- margin-top: 0px;
- margin-bottom: 0px;
- }
-
- div.substance {
- width: 100%;
- background-color: #ffffff;
- }
- div.ocn {
- width: 5%;
- float: right;
- top: 0;
- background-color: #ffffff;
- }
- div.endnote {
- width: 100%;
- background-color: #fffffff;
- }
- div.toc {
- position: absolute;
- float: left;
- margin: 0;
- padding: 0;
- padding-top: 0.5em;
- border: 0;
- width: 5%;
- background-color: #eeeeee;
- margin-right:1em;
- }
- div.summary {
- margin: 0;
- padding: 0;
- border-left: 2em solid #eeeeee;
- padding-left: 0em;
- background-color: #eeeeee;
- }
- div.content, div.main_column {
- margin: 0;
- padding: 0;
- border-left: 0% solid #ffffff;
- padding-left: 5%;
- }
- div.content:after {
- content:' ';
- clear:both;
- display:block;
- height:0;
- overflow:hidden
- }
- div.footer {
- clear:left;
- padding: 0.5em;
- font-size: 80%;
- margin: 0;
- }
- div.toc ul {
- list-style: none;
- padding: 0;
- margin: 0;
- }
- div.toc li ul a, li ul span.currentlink
- {
- font-weight: normal;
- font-size: 90%;
- padding-left: 2em;
- background-color: #eeeeee;
- }
- div.toc a, span.currentlink{
- display:block;
- text-decoration: none;
- padding-left: 0.5em;
- color: #0000aa;
- }
- hr {
- width: 90%;
- }
-
- span.currentlink {
- text-decoration: none;
- background-color: #aaaaf9;
- }
-
- div.toc a:visited {
- color: #0000aa;
- }
- div.toc a:hover {
- color: #000000;
- background-color: #f9f9aa;
- }
-
- h1.c, h2.c, h3.c, h4.c, h5.c, h6.c, p.c {
- text-align: center
- }
- h1.red, h2.red, h3.red, h4.red, h5.red, h6.red {
- text-align: center;
- color: #ff0000;
- margin-left: 5mm;
- text-indent: 5mm;
- margin-top: 30px;
- margin-bottom: 20px;
- margin-right: 15mm;
- }
- h1.ruby, h2.ruby, h3.ruby, h4.ruby, h5.ruby, h6.ruby {
- text-align: center;
- color: #990000;
- margin-left: 5mm;
- text-indent: 5mm;
- margin-top: 30px;
- margin-bottom: 20px;
- margin-right: 15mm;
- }
- WOK
- end
- end
- module SanitizeXML
- def self.xml(x)
- if x.is_a?(String)
- x=x.gsub(/&nbsp;/,' ') if Ep[:alt]==:on
- x.gsub(/&/,'&amp;').
- gsub(/</,"&lt;").gsub(/>/,"&gt;").
- gsub(/#{Dx[:url_o]}/,Dx[:url_o_xml]).gsub(/#{Dx[:url_c]}/,Dx[:url_c_xml]).
- #gsub(/</,'&#60;').gsub(/>/,'&#62;').
- gsub(/\\\\/,'<br />').
- gsub(/&lt;br(?: \/)?&gt;/,'<br />')
- else x
- end
- end
- end
- class HeadInformation
- include SiSU_Viz
- attr_reader :md,:rdf,:vz
- def initialize(md)
- @md=md
- # DublinCore 1 - title
- @vz=SiSU_Viz::Defaults.new
- @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 || [])
- @tocband_scroll,@tocband_segtoc=nil,nil
- @index,@metalink='index','#metadata'
- end
- def doc_type_xhtml
- <<-WOK
-<?xml version='1.0' encoding='utf-8'?>
-<html xmlns="http://www.w3.org/1999/xhtml">
- WOK
- end
-=begin
-~/epub
- |-- META-INF
- | `-- container.xml # simple, make sure full-path of rootfile points to metadata.opf
- |-- content
- | |-- 1.xhtml
- | |-- 2.xhtml
- | |-- 3.xhtml
- | |-- ... .xhtml
- | |-- concordance.xhtml
- | |-- css
- | | `-- xhtml.css
- | |-- endnotes.xhtml
- | |-- image
- | | |-- arrow_next_red.png
- | | |-- arrow_prev_red.png
- | | |-- arrow_up_red.png
- | | `-- bullet_09.png
- | |-- index.xhtml
- | |-- meta.xhtml
- | |-- metadata.xhtml
- | `-- toc.xhtml
- |-- metadata.opf #(i) metadata dc; (ii) manifest (contents); (iii) spine (mimetypes)
- |-- mimetype # application/epub+zip
- `-- toc.ncx #(i) head (ii) doc title (iii) navmap, list of navigation points (like chapters)
-=end
- def doc_type
- doc_type_xhtml
- end
- def mimetype
- <<-WOK
-application/epub+zip
- 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 content.opf
- <<-WOK
-<?xml version='1.0' encoding='utf-8'?>
-<container version="1.0"
- xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
- <rootfiles>
- <rootfile full-path="#{Ep[:d_oebps]}/#{Ep[:f_opf]}"
- media-type="application/oebps-package+xml" />
- </rootfiles>
-</container>
- WOK
- end
- def sections(dob,fn_base)
- name=fn_base + Sfx[:epub_xhtml]
- dir_epub_cont=@md.env.processing_path.epub + '/' + Ep[:d_oebps]
- segfilename=dir_epub_cont + '/' + name
- 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="#o#{dob.ocn}" class="lnkocn">#{dob.ocn}</a></label>
- <h1 class="norm" id="o#{dob.ocn}">
- #{dob.obj}
- </h1>
- </div>
- </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
- head_open
- head
- head_close
- doc_title
- doc_author
- navmap_open
- #navmap ...
- navmap_close
- close
- end
- def open
- <<-WOK
-<?xml version='1.0' encoding='utf-8'?>
-<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
- WOK
- end
- def close
- <<-WOK
-</ncx>
- WOK
- end
- def head_open
- <<-WOK
- <head>
- WOK
- end
- def head
- depth=@md.lvs[1] + @md.lvs[2] + @md.lvs[3] + @md.lvs[4]
- title=SanitizeXML.xml(@md.title.full)
- author=SanitizeXML.xml(@md.author)
- <<-WOK
- <!-- four required metadata items (for all NCX documents,
- (including the relaxed constraints of OPS 2.0) -->
- <title>#{title} by #{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
- <<-WOK
- </head>
- WOK
- end
- def doc_title
- txt=SanitizeXML.xml(@md.title.full)
- <<-WOK
- <docTitle>
- <text>#{txt}</text>
- </docTitle>
- WOK
- end
- def doc_author
- txt=SanitizeXML.xml(@md.author)
- <<-WOK
- <docAuthor>
- <text>#{txt}</text>
- </docAuthor>
- WOK
- end
- def navmap_open
- <<-WOK
- <navMap>
- WOK
- end
- def navmap_sisu_toc(no)
- id_u=DISABLE[:epub][:ncx_navpoint_unique_id] \
- ? ''
- : "-#{no}"
- <<-WOK
- <navPoint id="navpoint#{id_u}" playOrder="#{no}">
- <navLabel>
- <text>Table of Contents</text>
- </navLabel>
- <content src="index#{Sfx[:epub_xhtml]}" />
- </navPoint>
- WOK
- end
- def navpoint(dob,no,fn_base,hashtag=nil)
- fn=fn_base + Sfx[:epub_xhtml]
- name=hashtag ? fn + hashtag : fn
- id_u=DISABLE[:epub][:ncx_navpoint_unique_id] \
- ? ''
- : "-#{no}"
- <<-WOK
- <navPoint class="chapter" id="navpoint#{id_u}" playOrder="#{no}">
- <navLabel>
- <text>#{dob.obj}</text>
- </navLabel>
- <content src="#{name}" />
- WOK
- end
- def navpoint_close
- <<-WOK
- </navPoint>
- WOK
- end
- def navmap_close
- <<-WOK
- </navMap>
- WOK
- end
- self
- end
- def metadata_opf #(i) metadata dc; (ii) manifest (contents); (iii) spine (mimetypes)
- def structure
- package_open
- metadata_open
- metadata_close
- manifest_open
- manifest_close
- spine_open
- spine_close
- guide_open
- guide_close
- package_close
- end
- def package_open
- <<-WOK
-<?xml version='1.0' encoding='utf-8'?>
-<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="EPB-UUID">
- WOK
- end
- def package_close
- <<-WOK
-</package>
- WOK
- end
- def metadata #metadata dc
- cover_image=if defined? @md.make.cover_image \
- and @md.make.cover_image.is_a?(Hash) \
- and @md.make.cover_image[:cover] =~/\S+/
- %{\n <#{$ep[:o]}meta name="cover" content="cover_image" />}
- else ''
- end
- author=if defined? @md.creator.author \
- and @md.creator.author =~/\S+/
- m=''
- @md.creator.author_detail.each do |i|
- surname=i[:the] \
- ? i[:the]
- : ''
- other_names=i[:others] \
- ? ', ' + i[:others]
- : ''
- m=(m.empty?) \
- ? (surname + other_names)
- : (m + '; ' + surname + ', ' + other_names)
- m=SanitizeXML.xml(m)
- end
- x=@md.creator.author.dup
- x=SanitizeXML.xml(x)
- %{\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 |i|
- surname=i[:the] \
- ? i[:the]
- : ''
- other_names=i[:others] \
- ? ', ' + i[:others]
- : ''
- m=(m.empty?) \
- ? (surname + other_names)
- : (m + '; ' + surname + ', ' + other_names)
- m=SanitizeXML.xml(m)
- end
- x=@md.creator.editor.dup
- x=SanitizeXML.xml(x)
- %{\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 |i|
- surname=i[:the] \
- ? i[:the]
- : ''
- other_names=i[:others] \
- ? ', ' + i[:others]
- : ''
- m=(m.empty?) \
- ? (surname + other_names)
- : (m + '; ' + surname + ', ' + other_names)
- m=SanitizeXML.xml(m)
- end
- x=@md.creator.translator.dup
- x=SanitizeXML.xml(x)
- %{\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+/
- m=''
- @md.creator.illustrator_detail.each do |i|
- surname=i[:the] \
- ? i[:the]
- : ''
- other_names=i[:others] \
- ? ', ' + i[:others]
- : ''
- m=(m.empty?) \
- ? (surname + other_names)
- : (m + '; ' + surname + ', ' + other_names)
- m=SanitizeXML.xml(m)
- end
- x=@md.creator.illustrator.dup
- x=SanitizeXML.xml(x)
- %{\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=SanitizeXML.xml(x)
- %{\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=SanitizeXML.xml(x)
- %{\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 \
- and @md.rights.all =~/\S+/
- rights=SanitizeXML.xml(@md.rights.all)
- rights=rights.gsub(/<br\s*\/?>/,' ')
- %{\n <dc:rights>#{rights}</dc:rights>}
- else ''
- end
- f=SiSU_Env::FileOp.new(@md)
- <<-WOK
- <#{$ep[:o]}metadata
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:opf="http://www.idpf.org/2007/opf"
- xmlns:dcterms="http://purl.org/dc/terms/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- unique-identifier="urn:uuid:#{@md.dgst[1]}" version="2.0">
- <dc:title>#{@md.title.full}</dc:title>
- #{cover_image}#{author}#{editor}#{translator}#{illustrator}#{language}#{date_published}#{subject}#{rights}
- <dc:identifier opf:scheme="URI">#{f.output_path.epub.url.gsub(/http:\/\//,'')}/#{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> -->
- </#{$ep[:o]}metadata>
- WOK
- end
- def manifest_open
- <<-WOK
- <manifest>
- <!-- NCX -->
- <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" />
- <!-- Content Documents -->
- WOK
- end
- def manifest_content_sisu_toc
- <<-WOK
- <item id="index#{Sfx[:epub_xhtml]}" href="index#{Sfx[:epub_xhtml]}" media-type="application/xhtml+xml" />
- WOK
- end
- def manifest_cover_image_information(md)
- if defined? md.make.cover_image \
- and @md.make.cover_image.is_a?(Hash) \
- and md.make.cover_image[:cover] =~/\S+/
- <<-WOK
- <item id="cover_image#{Sfx[:epub_xhtml]}" href="cover_image#{Sfx[:epub_xhtml]}" media-type="application/xhtml+xml" />
- WOK
- else ''
- end
- end
- def manifest_content(dob,fn_base,hashtag=nil)
- fn=fn_base + Sfx[:epub_xhtml]
- name=hashtag ? fn + hashtag : fn
- <<-WOK
- <item id="#{name}" href="#{name}" media-type="application/xhtml+xml" />
- WOK
- 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]
- type=type.sub(/jpg/,'jpeg')
- images<<<<-WOK
- <item id="#{image}" href="image/#{image}.#{type}" media-type="image/#{type}" />
- WOK
- end
- images=images.join('')
- images
- end
- def manifest_close
- <<-WOK
- </manifest>
- WOK
- end
- def spine_open
- #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_cover_image
- <<-WOK
- <itemref idref="cover_image#{Sfx[:epub_xhtml]}" />
- WOK
- end
- def spine_sisu_toc
- <<-WOK
- <itemref idref="index#{Sfx[:epub_xhtml]}" linear="yes" />
- WOK
- end
- def spine(dob,fn_base,hashtag=nil)
- fn=fn_base + Sfx[:epub_xhtml]
- name=hashtag ? fn + hashtag : fn
- <<-WOK
- <itemref idref="#{name}" linear="yes" />
- WOK
- end
- def spine_close
- <<-WOK
- </spine>
- WOK
- end
- def guide_open
- #guide: presentation order of XHTML files by reader).
- <<-WOK
- <guide>
- WOK
- end
- def guide_cover_image
- <<-WOK
- <reference type="cover" title="Cover of #{SanitizeXML.xml(@md.title.full)}" href="cover_image#{Sfx[:epub_xhtml]}" />
- WOK
- end
- def guide_sisu_toc
- <<-WOK
- <reference type="index#{Sfx[:epub_xhtml]}" href="index#{Sfx[:epub_xhtml]}" />
- WOK
- end
- def guide(dob,fn_base,hashtag=nil)
- fn=fn_base + Sfx[:epub_xhtml]
- name=hashtag ? fn + hashtag : fn
- name=name ? name : dob.name
- guide_name=(name =~/#{Sfx[:epub_xhtml]}/) ? name : (name + Sfx[:epub_xhtml])
- <<-WOK
- <reference type="text" href="#{guide_name}" />
- WOK
- end
- def guide_close
- <<-WOK
- </guide>
- WOK
- end
- self
- end
- def table_close
- %{ </font>
-#{@vz.table_close}}
- end
- def xhtml_close
- %{#{@vz.credits_sisu_epub}
- </body>
-</html>}
- end
- end
- class HeadToc < HeadInformation
- def initialize(md)
- super(md)
- @md=md
- @tocband_segtoc=make_seg
- end
- 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)
- if @md.concord_make
- %{<a href="#{@md.file.base_filename.html_concordance}" target="_top">
- #{text}
- </a>}
- else ''
- end
- end
- def head
- %{#{doc_type}
- <head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
- #{@css.xhtml_epub}
- </head>
- #{@vz.color_body}}
- end
- def concordance
- if @md.concord_make
- %{#{@vz.margin_css}
- <h4 class="toc">
- <a href="./#{@md.file.base_filename.html_concordance}">
- <i>Concordance</i>
- </a>
- </h4>
-#{@vz.table_close}}
- else
- %{#{@vz.margin_css}
-#{@vz.table_close}}
- end
- end
- def links_guide_open(type='horizontal')
- (type=='vertical') \
- ? links_guide_vertical_open
- : links_guide_horizontal_open
- end
- def prefix_a
- end
- def rights
- def all
- rights=SanitizeXML.xml(@md.rights.all)
- %{<p class="small_left">Rights: #{rights}</p>}
- end
- self
- end
- def prefix_b
- %{<p class="small_left">Prefix: #{@md.prefix_b}}
- end
- def make_seg
- concord=concordance_link(@vz.nav_txt_concordance)
- %{<table summary="toc segment" border="0" cellpadding="3" cellspacing="0">
-<tr><td align="center" bgcolor="white">
- #{@vz.nav_txt_toc_link}
-</td>
-<td align="center" bgcolor="white">
- <font size=2>
- #{concord}
-#{@vz.table_close}}
- end
- def manifest #check structure
- manifest=manifest_link(@vz.nav_txt_manifest)
- %{#{@vz.margin_txt_3}
- #{@vz.paragraph_font_small}
- #{manifest}
- </font>
-#{@vz.table_close}}
- end
- def concordance #check structure
- concord=concordance_link(@vz.nav_txt_concordance)
- %{#{@vz.margin_txt_3}
- #{@vz.paragraph_font_small}
- #{concord}
- </font>
-#{@vz.table_close}}
- end
- def metadata
- %{#{@vz.margin_css}
- <h4 class="toc">
- <a href="#{@metalink}">
- <i>MetaData</i>
- </a>
- </h4>
-#{@vz.table_close}}
- end
- end
- class HeadSeg < HeadInformation
- def initialize(md)
- super(md)
- 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}}
- end
- def endnote_mark
-%{
- <hr class="endnote" />
-}
- end
- end
- class HeadScroll < HeadToc
- def initialize(md)
- super(md)
- end
- def toc_owner_details
- %{#{@vz.margin_txt_3}
-#{@vz.paragraph_font_small}
- <a href="#owner.details">
- Owner Details
- <font size="1" color="#777777">
- #{$ep[:hsp]*3}
- </font>
- </a>
- </font>
-#{@vz.table_close}}
- end
- end
- class FormatTextObject
- @vz=SiSU_Viz::Defaults.new
- 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.is_a?(Hash)
- @txt =t_o[:txt] || nil
- @ocn =t_o[:ocn] || nil
- @ocn_display =t_o[:ocn_display] || nil
- @headname =t_o[:headname] || nil
- @trailer =t_o[:trailer] || nil
- @endnote_part_a =t_o[:endnote_part_a] || nil
- @endnote_part_b =t_o[:endnote_part_b] || nil
- @lnk_url =t_o[:lnk_url] || nil
- @lnk_txt =t_o[:lnk_txt] || nil
- @format =t_o[:format] || nil
- @target =t_o[:target] || nil #occasionally passed but not used
- 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=(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/
- @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)
- else
- 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=@txt.gsub(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'')
- end
- @p_num=ParagraphNumber.new(@md,@ocn)
- @vz=SiSU_Viz::Defaults.new
- end
- def nametags_seg(dob) #FIX
- tags=''
- if defined? dob.tags \
- and dob.tags.length > 0 # insert tags "hypertargets"
- dob.tags.each do |t|
- tags=tags << %{<a name="#{t}" />}
- end
- end
- tags
- end
- def endnote_body
- %{
-<p class="endnote">
- #{@txt}
-</p>
-}
- end
- def endnote_body_indent
- %{
- <p class="endnote_indent">
- #{@txt}
- </p>
-}
- end
- def no_paranum
- %{
-<div class="substance">
- <label class="ocn">#{$ep[:hsp]}</label>
- <p class="norm">
- #{@txt}
- </p>
-</div>
-}
- end
- 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}
- </#{tag}>#{ulc}
-</div>
-}
- end
- def para
- para_form_css('p','norm',@txt)
- end
- def group
- para_form_css('p','group',@txt)
- end
- def block
- para_form_css('p','block',@txt)
- end
- def alt
- para_form_css('p','alt',@txt)
- end
- def verse
- para_form_css('p','verse',@txt)
- end
- def code
- para_form_css('p','code',@txt)
- end
- def center
- para_form_css('p','center',@txt)
- end
- def bold
- para_form_css('p','bold',@txt)
- end
- def bullet
- para_form_css('li','bullet',@txt)
- end
- def table
- @txt=if @t_o.obj !~/^<table\s/
- table=SiSU_XHTML_Shared::TableXHTML.new(@t_o) #move, make happen earlier
- table.table.obj
- else @txt
- end
- para_form_css('p','norm',@txt)
- end
- def break
- @txt=@txt.gsub(/#{Mx[:br_page_new]}|#{Mx[:br_page]}|#{Mx[:br_page_line]}/,'<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,@txt)
- end
- def title_heading(tag,attrib)
- %{
-<div class="content">
-<#{tag} class="#{attrib}">
- #{@named}#{@txt}
- </#{tag}>
-</div>
-}
- end
- def title_heading1
- DISABLE[:epub][:per_section_title] \
- ? ''
- : title_heading('h1','tiny')
- end
- def title_heading2
- DISABLE[:epub][:per_section_title] \
- ? ''
- : title_heading('h2','tiny')
- end
- def title_heading3
- DISABLE[:epub][:per_section_title] \
- ? ''
- : title_heading('h3','tiny')
- end
- def title_heading4
- ''
- end
- 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}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name}
- #{@named}#{@txt}
- </#{tag}>
-</div>
-}
- end
- def seg_heading4
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <h1 class="norm" #{@p_num.id}>
- #{@txt}
- </h1>
-</div>
-}
- end
- def seg_heading5
- seg_heading_sub('p','bold',@txt)
- end
- def seg_heading6
- seg_heading_sub('p','bold',@txt)
- end
- def dl #check :trailer
- "<dl><b>#{@txt}</b> #{@trailer}</dl>"
- end
- def table_css_end
- '</table>
- </p>
- </div>'
- end
- 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>').
- 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>').
- 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>')
- when /^\s*[A-Z]\.\s/
- @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>')
- else @txt
- end
- end
- def bold_para
- %{#{@vz.margin_txt_0}
- <p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- #{$ep[:hsp]*3}
-#{@vz.table_close}}
- end
- def bold_heading #unused
- @txt=@txt.gsub(/[1-9]~\S+/,'').
- gsub(/[1-9]~/,'')
- %{<p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- #{$ep[:hsp]*3}
-#{@vz.table_close}}
- end
- def toc_head_copy_at
- @txt=SanitizeXML.xml(@txt)
- %{<p class="center">#{@txt}</p>\n}
- end
- def center
- @txt=SanitizeXML.xml(@txt)
- %{<p class="center">#{@txt}</p>\n}
- end
- def bold
- @txt=SanitizeXML.xml(@txt)
- %{<p class="bold">#{@txt}</p>\n}
- end
- def center_bold
- @txt=SanitizeXML.xml(@txt)
- %{<p class="centerbold">#{@txt}</p>\n}
- end
- end
- class FormatScroll < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- @vz=SiSU_Viz::Defaults.new
- end
- end
- class FormatSeg < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- 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}#{fn}#{Sfx[:epub_xhtml]}#{@endnote_part_b}
- </p>
-}
- end
- def clean(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)
- txt=if @txt \
- and @txt =~/<\/?i>|<a\s+name="\S+?">/mi
- @txt.gsub(/<\/?i>|<a\s+name="\S+?">/mi,'') #removes name markers from subtoc, go directly to substantive text
- else @txt
- end
- 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=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+">#{$ep[:hsp]}<sup id="note\d+">\d+<\/sup>#{$ep[:hsp]}/m,'').
- gsub(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">#{$ep[:hsp]}<sup id="note\d+">\d+<\/sup>#{$ep[:hsp]}/m,'') #remove
- end
- %{<#{tag} class="#{attrib}">
- <a href="#o#{@ocn}"><i>#{txt}</i></a> #{note}
- </#{tag}>}
- end
- def subtoc_lev5
- subtoc_lev('h5','subtoc') if @txt
- end
- def subtoc_lev6
- subtoc_lev('h6','subtoc') if @txt
- end
- 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}
- <#{tag} class="#{attrib}" #{@p_num.id}> #{@headname}
- #{@txt}
- </#{tag}>
-</div>
-}
- end
- def heading4
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <h1 class="norm" #{@p_num.id}>
- #{@t_o[:format]}
- #{@txt}
- </h1>
-</div>
-}
- end
- def heading5
- heading_sub('p','bold',@txt)
- end
- def heading6
- heading_sub('p','bold',@txt)
- end
- def navigation_heading4
- %{<table summary="navigation segment heading 4" width=100% bgcolor="#08163f" border="0">
-<tr><td align="center">
-<p class="bold">
- #{@txt}
-</p>
-#{@vz.table_close}}
- end
- def navigation_heading5
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_heading6
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_center
- %{<p class="centerbold">#{@txt}</p>}
- end
- end
- class FormatToc < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- end
- def links_guide
- %{ <li class="doc">
- <a href="#{@lnk_url}" target="_top">
- #{@lnk_txt}
- </a>
- </li>
-}
- end
- def lev(tag,attrib)
- if @txt
- %{<#{tag} class="#{attrib}">
- #{@txt}
- </#{tag}>
-}
- else ''
- end
- end
- def lev1
- lev('h1','toc')
- end
- def lev2
- lev('h2','toc')
- end
- def lev3
- lev('h3','toc')
- end
- def lev4
- lev('h4','toc')
- end
- def lev5
- lev('h5','toc')
- end
- def lev6
- lev('h6','toc')
- end
- def lev0 #docinfo
- lev('h0','toc')
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/epub_segments.rb b/lib/sisu/v4/epub_segments.rb
deleted file mode 100644
index 44db5fe9..00000000
--- a/lib/sisu/v4/epub_segments.rb
+++ /dev/null
@@ -1,539 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/epub_segments.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: epub segment generation, processing
-
-=end
-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]=[] #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_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=SiSU_Metadata::Summary.new(@md).xhtml_display.metadata
- @seg[:headings]=[]
- 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::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
-<p>A list of available output types may be available at the following url:</p>
-<p><a href="#{url_and_name}">#{url_and_name}</a></p>
-WOK
- else ''
- end
- @seg[:headings]=[]
- 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=filename_seg.flatten.compact #watch
- filename_seg.each do |str|
- unless str =~/\A\s*\Z/
- @output_epub_cont_seg << str.strip
- end
- end
- @output_epub_cont_seg.close
- end
- end
- end
- class Seg
- @@seg,@@seg_subtoc,@@seg_endnotes,@@seg_ad={},{},{},{}
- @@seg_name,@@seg_name_xhtml=[],[]
- @@seg_url=@@fn=@@get_hash_to=@@get_hash_fn=''
- @@loop_count=@@seg_total=@@tracker=0
- @@is4=@@is3=@@is2=@@is1=0
- @@heading1=@@heading2=@@heading3=@@heading4=0
- @@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
- @@fns_previous=''
- attr_reader :seg_name_xhtml,:seg_name_xhtml_tracker
- def initialize(md='',data='')
- @md,@data=md,data
- @vz=SiSU_Viz::Defaults.new
- @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
- data=get_subtoc_endnotes(@data)
- data=articles(data)
- SiSU_EPUB_Seg::Seg.new.cleanup # (((( added ))))
- #### (((( END )))) ####
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @@seg_name=[]
- end
- end
- protected
- def articles(data)
- tracking,newfile=0,0
- @@is4=@@is3=@@is2=@@is1=0
- printed_endnote_seg='n'
- idx_xhtml=nil
- if @md.book_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 \
- || dob.is==:heading_insert) \
- and dob.ln==4
- @@seg_name << dob.name
- dob.name
- end
- end
- @@seg_name_xhtml=@@seg_name
- @@seg_total=@@seg_name.length
- testforartnum=@@seg_name_xhtml
- SiSU_Screen::Ansi.new(@md.opt.cmd,@@seg_name.length) if @md.opt.cmd =~/[MVv]/
- 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+?"/
- # ##Consider: remove, reinstate earlier?
- # #while dob.obj =~/href="#{Xx[:segment]}#+(\S+?)"/
- # # m=$1
- # # if map_nametags[m][:segname]
- # # 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=dob.obj.sub(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#\\1"}) # not satisfactory
- # # end
- # #end
- #end
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- and dob.ln==4
- if dob.ocn==0
- @@heading4=dob.obj
- else @@heading4=dob.obj
- end
- @@is4=newfile=1
- end
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- and dob.ln==3
- @@heading3=dob.obj
- @@is4,@@is3=0,1
- end
- 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 \
- || 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 \
- || dob.is==:heading_insert) \
- and dob.ln==1
- $_ #; check
- end
- end
- if @@is4==1
- 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 \
- || dob.is==:heading_insert) \
- and dob.ln==4
- if tracking != 0
- 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 \
- or @@seg_name_xhtml[tracking-1] !~/endnotes|book_index|metadata/
- SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg).output
- elsif dob.is==:heading_insert
- if @@seg_name_xhtml[tracking-1]=='endnotes'
- SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'endnotes').output
- elsif @@seg_name_xhtml[tracking-1]=='book_index'
- 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
- SiSU_EPUB_Seg::Output.new(@md,output_epub_cont_seg,@@seg,'metadata').output
- else puts "#{__FILE__}::#{__LINE__}"
- end
- else puts "#{__FILE__}::#{__LINE__}"
- end
- SiSU_EPUB_Seg::Seg.new.reinitialise
- heading_art(dob)
- head(dob)
- 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')
- 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
- if tracking==0
- heading_art(dob)
- head(dob)
- end
- end
- tracking=tracking+1
- end
- 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.is_a?(Array)
- dob.obj.each do |pg|
- markup(pg)
- end
- end
- if testforartnum[tracking-1] =~/endnote/
- if printed_endnote_seg=='n'
- printed_endnote_seg='y'
- end
- end
- end
- end
- data
- end
- def heading_art(dob)
- @@seg[:title]=SiSU_EPUB_Format::HeadSeg.new(@md).head
- end
- def head(dob)
- clean=/<!.*?!>|<:.*?>$/
- @p_num ||= ''
- if @@is1==1
- if defined? @md.creator.author \
- and @md.creator.author
- @author=%{<b>#{@md.creator.author}</b>\n}
- end
- 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=@@heading1.gsub(/#{$ep[:hsp]}<a name="-[\d*+]+" href="#_[\d*+]+">#{$ep[:hsp]}<sup>[\d*+]+<\/sup>#{$ep[:hsp]}<\/a>/,'')
- end
- if @@is2==1
- heading2=@@heading2
- 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=@@heading2.gsub(/#{$ep[:hsp]}<a name="-[\d*+]+" href="#_[\d*+]+">#{$ep[:hsp]}<sup>[\d*+]+<\/sup>#{$ep[:hsp]}<\/a>/,'')
- end
- if @@is3==1
- heading3=@@heading3
- 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=@@heading3.gsub(/#{$ep[:hsp]}<a name="-[\d*+]+" href="#_[\d*+]+">#{$ep[:hsp]}<sup>[\d*+]+<\/sup>#{$ep[:hsp]}<\/a>/,'')
- end
- if @@is4==1
- heading4=@@heading4
- 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=[]
- 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::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 SplitTextObject
- elsif dob.ln==5
- sto.seg_heading5
- elsif dob.ln==6
- sto.seg_heading6
- end
- elsif dob.is==:para
- if dob.indent \
- and dob.hang \
- and dob.indent =~/[0-9]/ \
- and dob.hang =~/[0-9]/
- if dob.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 ==: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
- sto.code
- elsif dob.is==:table
- sto.table
- elsif dob.is==:break
- sto.break
- end
- if @md.flag_separate_endnotes # may need to revisit, check
- 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 \
- || 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 \
- || dob.is==:heading_insert \
- || dob.is==:para) \
- and dob.note_ #dob.obj =~/<a href="#note_ref\d+">&nbsp;<sup id=/ #endnote- note-
- format_seg=SiSU_EPUB_Format::FormatSeg.new(@md,dob)
- dob.obj=format_seg.no_paranum
- end
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- and dob.ln==4
- @@seg[:main] << %{\n<div class="content">\n}
- @@seg[:main] << dob_xhtml
- 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::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
- @@seg[:tail] << @@seg_endnotes[@@get_hash_fn].flatten #endnotes deposited at end of individual segments ||@|EXTRACTION OF ENDNOTES|
- end
- @@seg[:tail] << '</div>'
- @@seg[:tail] << '</div>' #this div closes div class content
- end
- @@seg[:close]=[]
- @@seg[:close] << format_head_seg.xhtml_close
- end
- def reinitialise
- @@seg[:headings],@@seg[:main],@@seg[:tail],@@seg[:credits]=Array.new(4){[]}
- end
- def cleanup
- reinitialise
- @@seg_total,@@tracker=0,0
- @@seg_endnotes,@@seg_subtoc={},{}
- @@seg_endnotes_array,@@seg_subtoc_array=[],[]
- @@seg[:endnote_all]=[]
- end
- def get_subtoc_endnotes(data) #get endnotes & sub-table of contents subtoc
- data.each do |dob|
- dob.obj=dob.obj.gsub(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1')
- if @md.flag_auto_endnotes
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- and 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 \
- || 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=[]
- if dob.name \
- and dob.obj
- @@fn=dob.name
- else
- @@fn=(dob.name =~/\S+/) \
- ? dob.name
- : ''
- end
- end
- end
- if dob.is==:heading \
- and dob.ln.to_s =~/^[56]/
- case dob.ln
- when 5
- 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::FormatSeg.new(@md,dob)
- subtoc=format_seg.subtoc_lev6 #keep and make available, this is the subtoc
- end
- @@seg_subtoc_array << subtoc
- end
- if @md.flag_auto_endnotes
- ast,pls='&#042;','&#043;'
- if dob.obj =~/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(?:\d|#{ast}|#{pls})+ / \
- 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)
- end
- if dob.obj=~/#{Mx[:en_b_o]}#{ast}\d+\s.+?#{Mx[:en_b_c]}/m
- endnote_array << dob.obj.scan(/#{Mx[:en_b_o]}#{ast}\d+\s.+?#{Mx[:en_b_c]}/m)
- end
- 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=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::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
- end
- @@seg_endnotes_array << note_match
- end
- try.join('<br \/>')
- #% creation of separate end segment/page of all endnotes referenced back to reference segment
- 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::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=dob.obj.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/epub_tune.rb b/lib/sisu/v4/epub_tune.rb
deleted file mode 100644
index dd9f478d..00000000
--- a/lib/sisu/v4/epub_tune.rb
+++ /dev/null
@@ -1,329 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/epub_tune.rb;hb=HEAD>
-
- * 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">
-&nbsp\;</td>
-<td width="94%" valign="top" align="justify">'
- @@table_align_close='</td>
-<td width="4%" align="right" valign="top">
-<font size="1" color="#777777">
-&nbsp;&nbsp;&nbsp;</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(/<br>/u,'<br />').
- gsub(/#{Mx[:nbsp]}/u,$ep[:hsp])
- end
- end
- class Tune
- def initialize(data,md)
- @data,@md=data,md
- @vz=SiSU_Viz::Defaults.new
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @sys=SiSU_Env::SystemCall.new
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @brace_url=SiSU_Viz::Defaults.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_angle_brackets
- 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
- SiSU_EPUB_Tune::Tune.new(@data,@md).output
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location 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,"●#{$ep[:hsp]*2}").
- gsub(/#{Dx[:url_o]}/,Dx[:url_o_xml]).gsub(/#{Dx[:url_c]}/,Dx[:url_c_xml]).
- gsub(/#{Mx[:nbsp]}/,$ep[:hsp]).
- 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>&copy;</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/,%{#{$ep[:hsp]}<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#{$ep[:hsp]}\{#{$ep[:hsp]}\\1#{$ep[:hsp]}\}</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,'&lt;').gsub(/>/m,'&gt;')
- end
- @tuned_file << dob
- end
- end
- def amp_angle_brackets
- data,data_new=@data,[]
- data.each do |dob|
- dob.obj=dob.obj.
- gsub(/&/u,'&amp;').
- gsub(/</u,'&lt;').gsub(/>/u,'&gt;')
- data_new << dob
- end
- data_new
- end
- def endnotes_html
- data=@data
- @tuned_file=[]
- a,s='_a','_s'
- ast,pls='&#042;','&#043;'
- 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/v4/errors.rb b/lib/sisu/v4/errors.rb
deleted file mode 100644
index fc9726d4..00000000
--- a/lib/sisu/v4/errors.rb
+++ /dev/null
@@ -1,89 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/errors.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, error screen reporting
-
-=end
-module SiSU_Errors
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env; include SiSU_Screen
- class Rescued <CreateFile
- def initialize(error,errorlist,cmd,fns='')
- @fns,@cmd,@error,@errorlist=fns,cmd,error,errorlist
- @cmd=(cmd \
- && (cmd =~/c/)) \
- ? 'Vc'
- : 'V'
- end
- def location
- file=@fns \
- ? (SiSU_Env::CreateFile.new(@fns).file_error)
- : (File.new('/tmp/errorlog.sisu','w+'))
- file << @fns << "\n" << @error << "\n" << @errorlist
- file.close
- if @cmd=~/[vVM]/
- SiSU_Screen::Ansi.new('',$!,$@).rescue do
- (block_given?) ? yield : __LINE__.to_s + ':' + __FILE__
- end
- else
- SiSU_Screen::Ansi.new('',"rescued, exception raised, silenced").puts_grey
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/git.rb b/lib/sisu/v4/git.rb
deleted file mode 100644
index f2291ba9..00000000
--- a/lib/sisu/v4/git.rb
+++ /dev/null
@@ -1,236 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/git.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_Git
- require_relative 'param' # param.rb
- require_relative 'sysenv' # sysenv.rb
- require_relative 'dal' # dal.rb
- class Source
- def initialize(opt)
- @opt=opt
- @env=SiSU_Env::InfoEnv.new
- @md=SiSU_Param::Parameters.new(@opt).get
- @file=SiSU_Env::FileOp.new(@md)
- l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
- unless @opt.lng==l[:c] # @md.i18n[0]==l[:c]
- p "using: #{@opt.lng} (@make: :language:); filename #{@md.fns} filename language: #{l[:c]}, mismatch"
- end
- if @env.output_dir_structure.multilingual?
- m=/((.+?)(?:\~\w{2,3})?)\.((?:-|ssm\.)?sst|ssm)$/ #watch added match for sss
- fnb,fnt=@opt.fns[m,2],@opt.fns[m,3]
- else m=/(.+?)\.((?:-|ssm\.)?sst|ssm)$/
- fnb=@fnn=@opt.fns[m,1]
- fnt=@opt.fns[m,2]
- end
- git_path_fnb=@env.processing_path.git + '/' + fnb
- #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],
- 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 create_file_structure_git
- make_dir_fnb
- if program_found?
- git_init
- end
- end
- def read
- create_file_structure_git
- populate.sisusrc_files
- #if program_found?
- # git_commit
- #end
- unless @opt.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?
- found=`whereis git`
- (found =~/bin\/git\b/) ? true : false
- end
- def make_dir_fnb
- FileUtils::mkdir_p(@git_path[:fnb]) unless FileTest.directory?(@git_path[:fnb])
- FileUtils::mkdir_p(@git_path[:doc]) unless FileTest.directory?(@git_path[:doc])
- FileUtils::mkdir_p(@git_path[:po]) unless FileTest.directory?(@git_path[:po])
- FileUtils::mkdir_p(@git_path[:pot]) unless FileTest.directory?(@git_path[:pot])
- FileUtils::mkdir_p(@git_path[:conf]) unless FileTest.directory?(@git_path[:conf])
- FileUtils::mkdir_p(@git_path[:image]) unless FileTest.directory?(@git_path[:image])
- #FileUtils::mkdir_p(@git_path[:audio]) unless FileTest.directory?(@git_path[:audio])
- #FileUtils::mkdir_p(@git_path[:video]) unless FileTest.directory?(@git_path[:video])
- end
- def git_init
- unless FileTest.directory?("#{@git_path[:fnb]}/.git")
- pwd=Dir.pwd
- Dir.chdir(@git_path[:fnb])
- system("git init ")
- Dir.chdir(pwd)
- end
- end
- def git_commit
- if program_found?
- if FileTest.directory?("#{@git_path[:fnb]}")
- pwd=Dir.pwd
- Dir.chdir(@git_path[:fnb])
- system("
- git add . \
- && git commit -a
- ")
- Dir.chdir(pwd)
- end
- end
- end
- def populate
- def identify_language_versions
- print __FILE__ + ':'
- p __LINE__
- end
- def copy_src_head
- if @opt.f_pth[:lng]
- FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{@opt.fns}",@git_path[:doc])
- elsif @opt.fns =~/\.ssm\.sst/
- ssm=@opt.fns.gsub(/\.ssm\.sst/,'.ssm')
- FileUtils::cp_r("#{@env.path.pwd}/#{ssm}",@git_path[:doc])
- else
- FileUtils::cp_r("#{@env.path.pwd}/#{@opt.fns}",@git_path[:doc])
- end
- end
- def copy_related_sst_ssi
- doc_import=[]
- @rgx_doc_import=/^<<\s(\S+?\.ss[ti])/
- file_array=IO.readlines(@opt.fns,'')
- file_array.each do |f|
- if f =~@rgx_doc_import
- doc_import = doc_import + f.scan(@rgx_doc_import).uniq.flatten
- end
- end
- doc_import.each do |f|
- if @opt.f_pth[:lng]
- FileUtils::cp_r("#{@env.path.pwd}/#{@opt.f_pth[:lng]}/#{f}",@git_path[:doc])
- else
- FileUtils::cp_r("#{@env.path.pwd}/#{f}",@git_path[:doc])
- end
- end
- end
- def locate_parse_file
- composite_src=@opt.fns=~/\.ssm$/ ? true : false
- if composite_src \
- and @opt.cmd.inspect !~/m/
- ##SiSU_Assemble::Composite.new(@opt).read
- #SiSU_DAL::Source.new(@opt).read # -m
- "#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst"
- elsif composite_src
- "#{@env.processing_path.composite_file}/#{@opt.fnb}.ssm.sst"
- else "#{@env.path.pwd}/#{@opt.fns}"
- end
- end
- def read_composite
- #print __FILE__ + ':'
- #p __LINE__
- end
- def sisuyaml_rc
- sisurc=@env.path.sisurc_path
- if FileTest.file?(sisurc)
- FileUtils::cp_r(sisurc,@git_path[:conf])
- end
- end
- def read_src
- print __FILE__ + ':'
- p __LINE__
- end
- def composite_src?
- @opt.fns=~/\.ssm$/ ? true : false
- end
- def sisusrc_files
- populate.copy_src_head
- if composite_src?
- populate.copy_related_sst_ssi
- end
- #parse_file_name=locate_parse_file
- #parse_file=IO.readlines(parse_file_name,'')
- populate.sisuyaml_rc #(parse_file)
- #populate.extract_composite_source
- #populate.read_composite # or read_each_composite
- populate.identify_language_versions
- end
- self
- end
- end
-end
-__END__
-@file.output_path.sisugit
diff --git a/lib/sisu/v4/harvest.rb b/lib/sisu/v4/harvest.rb
deleted file mode 100644
index 0b4dc4c2..00000000
--- a/lib/sisu/v4/harvest.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# 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, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/harvest.rb;hb=HEAD>
-
- * 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
deleted file mode 100644
index a5f68cc7..00000000
--- a/lib/sisu/v4/harvest_authors.rb
+++ /dev/null
@@ -1,406 +0,0 @@
-# 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, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/harvest_authors.rb;hb=HEAD>
-
- * 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
- 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_arr|
- @@the_idx_authors[lang] ||= {}
- idx_arr.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.new.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_Viz::Defaults.new
- 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)
- fileinfo=(@opt.cmd =~/[vVM]/) ? ("file://#{file}") : ''
- SiSU_Screen::Ansi.new(@opt.cmd,"harvest authors (#{@opt.files.length} files)",fileinfo).dark_grey_title_hi unless @opt.cmd =~/q/
- @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 |lg|
- if @env.output_dir_structure.by? == :language
- harvest_pth="../../#{lg}/manifest"
- file="#{harvest_pth}/authors.html"
- elsif @env.output_dir_structure.by? == :filetype
- harvest_pth='.'
- file="#{harvest_pth}/authors.#{lg}.html"
- elsif @env.output_dir_structure.by? == :filename
- harvest_pth='.'
- file="#{harvest_pth}/authors.#{lg}.html"
- end
- l=ln[lg][:t]
- harvest_languages += %{<a href="#{file}">#{l}</a>&nbsp;&nbsp;&nbsp;}
- end
- sv=SiSU_Env::InfoVersion.instance.get_version
- if @env.output_dir_structure.by? == :language
- home_pth='../..'
- output_structure_by='(output organised by language &amp; filetype)'
- elsif @env.output_dir_structure.by? == :filetype
- home_pth='..'
- output_structure_by='(output organised by filetype)'
- elsif @env.output_dir_structure.by? == :filename
- home_pth='.'
- output_structure_by='(output organised by filename)'
- else
- home_pth='.'
- output_structure_by='(output organised by ?)'
- end
- <<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 #{output_structure_by}</h1>
-<p>[<a href="#{home_pth}/index.html">&nbsp;HOME&nbsp;</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>,&nbsp;})
- 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
- lang_code_insert=SiSU_Env::FilenameLanguageCodeInsert.new(@opt,lng).language_code_insert
- works=[]
- a[1][:md].each do |i|
- manifest_at=if @env.output_dir_structure.by? == :language
- i[:file] + Sfx[:html]
- elsif @env.output_dir_structure.by? == :filetype
- i[:file] + '.' + lang_code_insert + Sfx[:html]
- elsif @env.output_dir_structure.by? == :filename
- "./#{i[:file]}/#{i[:page]}"
- else '' #error
- end
- work=[ "#{i[:date]} #{i[:title]}", %{<p class="publication">#{i[:date]} <a href="#{manifest_at}">#{i[:title]}</a>, #{i[:author][:authors_s]}</p>} ]
- works<<=(@output[lng][:html_mnt].is_a?(File)) \
- ? (work.concat([%{<p class="publication">[<a href="#{i[:file]}.sst">src</a>]&nbsp;&nbsp;#{i[:date]} <a href="file://#{manifest_at}">#{i[:title]}</a>, #{i[:author][:authors_s]} -- [<a href="#{i[:file]}.sst">#{i[:file]}.sst</a>]</p>}]))
- : work
- end
- works.sort_by {|y| y[0]}.each do |z|
- @output[lng][:html] << z[1]
- @output[lng][:html_mnt] << z[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
deleted file mode 100644
index 09104f30..00000000
--- a/lib/sisu/v4/harvest_topics.rb
+++ /dev/null
@@ -1,826 +0,0 @@
-# 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, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/harvest_topics.rb;hb=HEAD>
-
- * 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
- 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
- construct_book_topic_hash(the_idx)
- end
- def capital(txt)
- txt_a=txt.scan(/\S+/)
- tx=''
- txt_a.each do |t|
- tx += t[0].chr.capitalize + t[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
- { 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_arr|
- @@the_idx_topics[lang] ||= {}
- idx_arr.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
- @the_a.sort_by { |x| x[0] } #; y.each {|z| puts z}
- end
- def construct_book_topic_hash(t)
- @the_h={}
- t.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,y0|
- if extract == 0
- @the_h[x0] ||={ md: [] }
- @the_h[x0][:md] << y0
- else
- @the_h[x0] ||={}
- end
- #puts ' '*0 + x0
- if extract >= 1
- y0.each_pair do |x1,y1|
- if extract == 1
- @the_h[x0][x1] ||={ md: [] }
- @the_h[x0][x1][:md] << y1
- else
- @the_h[x0][x1] ||={}
- end
- #puts ' '*1 + x1
- if extract >= 2
- y1.each_pair do |x2,y2|
- if extract == 2
- @the_h[x0][x1][x2] ||={ md: [] }
- @the_h[x0][x1][x2][:md] << y2
- else
- @the_h[x0][x1][x2] ||={}
- end
- #puts ' '*2 + x2
- if extract >= 3
- y2.each_pair do |x3,y3|
- if extract == 3
- @the_h[x0][x1][x2][x3] ||={ md: [] }
- @the_h[x0][x1][x2][x3][:md] << y3
- else
- @the_h[x0][x1][x2][x3] ||={}
- end
- #puts ' '*3 + x3
- if extract == 4
- y3.each_pair do |x4,y4|
- if extract == 4
- @the_h[x0][x1][x2][x3][x4] ||={ md: [] }
- @the_h[x0][x1][x2][x3][x4][:md] << y4
- else
- @the_h[x0][x1][x2][x3][x4] ||={}
- end
- #puts ' '*4 + x4
- if extract == 5
- y4.each_pair do |x5,y5|
- if extract == 5
- @the_h[x0][x1][x2][x3][x4][x5] ||={ md: [] }
- @the_h[x0][x1][x2][x3][x4][x5][:md] << y5
- 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,y0|
- puts ' '*0 + x0 if x0.is_a?(String)
- if y0.is_a?(Hash)
- y0.each_pair do |x1,y1|
- puts ' '*1 + x1 if x1.is_a?(String)
- if y1.is_a?(Hash)
- y1.each_pair do |x2,y2|
- puts ' '*2 + x2 if x2.is_a?(String)
- if y2.is_a?(Hash)
- y2.each_pair do |x3,y3|
- puts ' '*3 + x3 if x3.is_a?(String)
- if y3.is_a?(Hash)
- y3.each_pair do |x4,y4|
- puts ' '*4 + x4 if x4.is_a?(String)
- if y4.is_a?(Hash)
- y4.each_pair do |x5,y5|
- 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,y0|
- puts ' '*0 + x0 if x0.is_a?(String)
- if y0.is_a?(Hash)
- if y0.has_key?(:md)
- y0[:md].each { |x| puts ' '*5 + x[:title] }
- end
- y0.each_pair do |x1,y1|
- puts ' '*1 + x1 if x1.is_a?(String)
- if y1.is_a?(Hash)
- if y1.has_key?(:md)
- y1[:md].each { |x| puts ' '*5 + x[:title] }
- end
- y1.each_pair do |x2,y2|
- puts ' '*2 + x2 if x2.is_a?(String)
- if y2.is_a?(Hash)
- if y2.has_key?(:md)
- y2[:md].each { |x| puts ' '*5 + x[:title] }
- end
- y2.each_pair do |x3,y3|
- puts ' '*3 + x3 if x3.is_a?(String)
- if y3.is_a?(Hash)
- if y3.has_key?(:md)
- y3[:md].each { |x| puts ' '*5 + x[:title] }
- end
- y3.each_pair do |x4,y4|
- puts ' '*4 + x4 if x4.is_a?(String)
- if y4.is_a?(Hash)
- if y4.has_key?(:md)
- y4[:md].each { |x| puts ' '*5 + x[:title] }
- end
- y4.each_pair do |x5,y5|
- 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.new.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_Viz::Defaults.new
- 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)
- fileinfo=(@opt.cmd =~/[vVM]/) ? ("file://#{file}") : ''
- SiSU_Screen::Ansi.new(@opt.cmd,"harvest topics(#{@opt.files.length} files)",fileinfo).dark_grey_title_hi unless @opt.cmd =~/q/
- @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,y0|
- lng=x0
- if x0.is_a?(String)
- #do_string_name(lng,'lev0',x0)
- #puts ' '*0 + x0
- end
- if y0.is_a?(Hash)
- if y0.has_key?(:md)
- y0[:md].each do |x|
- #do_hash(lng,attrib,x) #lv==0 ?
- #puts ' '*5 + x[:title]
- end
- end
- y0.each_pair do |x1,y1|
- if x1.is_a?(String)
- do_string_name(lng,'lev0',x1)
- #puts ' '*1 + x1
- end
- if y1.is_a?(Hash)
- if y1.has_key?(:md)
- y1[:md].each do |x|
- do_hash(lng,0,x)
- #puts ' '*5 + x[:title]
- end
- end
- y1.each_pair do |x2,y2|
- if x2.is_a?(String)
- do_string(lng,'lev1',x2)
- #puts ' '*2 + x2
- end
- if y2.is_a?(Hash)
- if y2.has_key?(:md)
- y2[:md].each do |x|
- do_hash(lng,1,x)
- #puts ' '*5 + x[:title]
- end
- end
- y2.each_pair do |x3,y3|
- if x3.is_a?(String)
- do_string(lng,'lev2',x3)
- #puts ' '*3 + x3
- end
- if y3.is_a?(Hash)
- if y3.has_key?(:md)
- y3[:md].each do |x|
- do_hash(lng,2,x)
- #puts ' '*5 + x[:title]
- end
- end
- y3.each_pair do |x4,y4|
- if x4.is_a?(String)
- do_string(lng,'lev3',x4)
- #puts ' '*4 + x4
- end
- if y4.is_a?(Hash)
- if y4.has_key?(:md)
- y4[:md].each do |x|
- do_hash(lng,3,x)
- #puts ' '*5 + x[:title]
- end
- end
- y4.each_pair do |x5,y5|
- 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 |lg|
- if @env.output_dir_structure.by? == :language
- harvest_pth="../../#{lg}/manifest"
- file="#{harvest_pth}/topics.html"
- elsif @env.output_dir_structure.by? == :filetype
- harvest_pth='.'
- file="#{harvest_pth}/topics.#{lg}.html"
- elsif @env.output_dir_structure.by? == :filename
- harvest_pth='.'
- file="#{harvest_pth}/topics.#{lg}.html"
- end
- l=ln[lg][:t]
- harvest_languages += %{<a href="#{file}">#{l}</a>&nbsp;&nbsp;&nbsp;}
- end
- sv=SiSU_Env::InfoVersion.instance.get_version
- if @env.output_dir_structure.by? == :language
- home_pth='../..'
- output_structure_by='(output organised by language &amp; filetype)'
- elsif @env.output_dir_structure.by? == :filetype
- home_pth='..'
- output_structure_by='(output organised by filetype)'
- elsif @env.output_dir_structure.by? == :filename
- home_pth='.'
- output_structure_by='(output organised by filename)'
- else
- home_pth='.'
- output_structure_by='(output organised by ?)'
- end
- <<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 #{output_structure_by}</h1>
-<p>[<a href="#{home_pth}/index.html">&nbsp;HOME&nbsp;</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>,&nbsp;})
- 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)
- lang_code_insert=SiSU_Env::FilenameLanguageCodeInsert.new(@opt,lng).language_code_insert
- manifest_at=if @env.output_dir_structure.by? == :language
- hash[:file] + Sfx[:html]
- elsif @env.output_dir_structure.by? == :filetype
- hash[:file] + lang_code_insert + Sfx[: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>]&nbsp;&nbsp;<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/v4/html.rb b/lib/sisu/v4/html.rb
deleted file mode 100644
index 7acb279a..00000000
--- a/lib/sisu/v4/html.rb
+++ /dev/null
@@ -1,704 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: html generation, processing
-
-=end
-module SiSU_HTML
- require 'pstore'
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'html_table' # html_table.rb
- require_relative 'html_format' # html_format.rb
- include SiSU_HTML_Format
- 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::CombinedSingleton.instance.get_all(opt)
- end
- def read
- begin
- songsheet
- ensure
- SiSU_Env::CreateSite.new(@opt.cmd).cp_css
- end
- end
- def songsheet
- begin
- @md=@particulars.md
- @fnb=@md.fnb
- @env=@particulars.env
- primary_output_file=(@opt.act[:html_seg][:set]==:on) \
- ? (@md.file.output_path.html_seg.dir + '/' + @md.file.base_filename.html_segtoc)
- : (@md.file.output_path.html_scroll.dir + '/' + @md.file.base_filename.html_scroll)
- unless @opt.cmd =~/q/
- tool=(@opt.cmd =~/[MVvz]/) \
- ? ("#{@env.program.web_browser} file://#{primary_output_file}")
- : ("[#{@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_title_hi
- SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"file://#{primary_output_file}").flow if @opt.cmd =~/[MV]/
- end
- data=nil
- tuned_file_array=SiSU_HTML::Source::HTML_Environment.new(@particulars).tuned_file_instructions
- data=tuned_file_array
- if @opt.act[:html_scroll][:set]==:on
- scr_endnotes=SiSU_HTML::Source::Endnotes.new(data,@md).scroll
- end
- toc=SiSU_HTML::Source::Toc.new(@md,data).songsheet
- links_guide=SiSU_HTML::Source::LinksGuide.new(data,@md).toc
- data=tuned_file_array
- scr_toc=SiSU_HTML::Source::ScrollHeadAndSegToc.new(@md,toc,links_guide).in_common #watch
- if @opt.act[:html_seg][:set]==:on
- SiSU_HTML::Source::Seg.new(@md,data).songsheet
- end
- data=tuned_file_array
- if @opt.act[:html_scroll][:set]==:on
- scr=SiSU_HTML::Source::Scroll.new(@md,data,scr_endnotes).songsheet
- 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
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- unless @opt.cmd =~/[MV]/ #check maintenance flag
- texfiles=Dir["#{@env.processing_path.tune}/#{@opt.fns}*"]
- texfiles.each do |f|
- if FileTest.file?(f)
- File.unlink(f)
- end
- end
- end
- 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){[]}
- @@filename_seg,@@seg_url,@@fn,@@to_lev4,@@get_hash_to,@@get_hash_fn='','','','','','',''
- @@is4=@@is3=@@is2=@@is1=@@heading1=@@heading2=@@heading3=@@heading4=0
- end
- end
- private
- class HTML_Environment
- def initialize(particulars)
- @particulars=particulars
- @md,@env=particulars.md,particulars.env
- @vz=SiSU_Viz::Defaults.new
- @env,@css=particulars.env,SiSU_Style::CSS.new
- end
- def tuned_file_instructions
- @tell=SiSU_Screen::Ansi.new(@md.opt.cmd)
- 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 LinksGuide
- @links_guide_toc=[]
- def initialize(data,md)
- @data,@md=data,md
- @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::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=(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::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::HeadToc.new(@md)
- @links_guide_toc << format_head_toc.links_guide_close #(guide_type)
- @links_guide_toc
- else ''
- end
- end
- end
- class Endnotes
- include SiSU_HTML_Format
- def initialize(data,md)
- @data,@md=data,md
- end
- def scroll
- @scr_endnotes=[]
- SiSU_HTML_Format::HeadScroll.new(@md)
- @data.each do |dob|
- pg=dob.dup
- 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
- endnote_array = pg.obj.scan(/#{Mx[:en_a_o]}[\d*+]+(.+?)#{Mx[:en_a_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d*]+\s.+?#{Mx[:en_b_c]}/m
- endnote_array = pg.obj.scan(/#{Mx[:en_b_o]}[\d*]+(.+?)#{Mx[:en_b_c]}/m)
- end
- if pg.obj=~/#{Mx[:en_b_o]}[\d+]+\s.+?#{Mx[:en_b_c]}/m
- 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::FormatScroll.new(@md,txt_obj)
- @scr_endnotes << format_scroll.endnote_body
- end
- end
- end
- end
- @scr_endnotes
- end
- end
- class Toc <LinksGuide
- @@toc={ seg: [], seg_mini: [], scr: [] }
- @@seg_url=''
- @@firstseg=nil
- def initialize(md=nil,data='')
- @data,@md=data,md
- @vz=SiSU_Viz::Defaults.new
- @tell=SiSU_Screen::Ansi.new(@md.opt.cmd) if @md
- end
- def songsheet #extracts toc for scroll & seg
- SiSU_Screen::Ansi.new(@md.opt.cmd,'Toc').txt_grey if @md.opt.cmd =~/[MVv]/
- toc=nil
- @@firstseg=nil
- @@toc={ seg: [], seg_mini: [], scr: [] }
- @data.each do |dob|
- if dob.is==:heading \
- || dob.is==:heading_insert
- dob_toc=dob.dup
- toc=if dob_toc.is ==:heading \
- || dob.is==:heading_insert
- toc=case dob_toc.ln
- 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
- toc.each do |k,d|
- d.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
- end if toc
- if @@firstseg.nil? \
- and dob.ln==4 \
- and dob.name =~/\S+/
- @@firstseg=dob.name
- end
- if toc
- begin
- @@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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
- end
- @md.firstseg=@@firstseg
- @@toc
- end
- def minitoc
- minitoc=@@toc[:seg_mini].join("\n")
- '<div class="toc">' + minitoc + '</div>'
- end
- protected
- def rss #sort all wrong, disabled but kept
- @@toc[:seg] <<<<WOK
-<center>
-<table><tr><td>
-<p><font color="#222222" #{@font.face} size="2">
-(relatively static) RSS feeds for DOCUMENTS:<br />
-<a href="../rssfeed/documents.xml"><img border="0" height="14" width="36" src="../_sisu/image/rss.png" alt="RSS feed"></a>&nbsp;http://www.jus.uio.no/lm/rssfeed/documents.xml<br />
-<a href="../rssfeed/tradelaw.xml"><img border="0" height="14" width="36" src="../_sisu/image/rss.png" alt="RSS feed"></a>&nbsp;http://www.jus.uio.no/lm/rssfeed/tradelaw.xml<br />
-<a href="../rssfeed/environmental.xml"><img border="0" height="14" width="36" src="../_sisu/image/rss.png" alt="RSS feed"></a>&nbsp;http://www.jus.uio.no/lm/rssfeed/environmental.xml<br />
-<center><a href="mailto:info@address.com" target="_top">info@address.com</a></center>
-</font></p>
-</td></tr></table>
-WOK
- end
-#not used -->
- def level_endnotes
- if @md.flag_endnotes
- 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::HeadToc.new(@md)
- @@toc[:seg_mini] << format_head_toc.mini_seg_concordance
- end
- def level_metadata
- 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::HeadToc.new(@d0c)
- @@toc[:scr] << format_head_toc.concordance
- @@toc[:seg] << format_head_toc.concordance
- @@toc[:seg_mini] << format_head_toc.mini_concordance
- end
-# <-- not used
- def level_1
- dob=@data
- linkname,link=dob.obj.strip,dob.ocn
- if link \
- and link !~/#/ #% keep eye on link
- SiSU_HTML_Format::ParagraphNumber.new(@md,link)
- end
- title=if dob.obj !~/^Metadata$/; linkname
- else
- link='metadata'
- %{<b><a href="#{link}#{@md.lang_code_insert}#{Sfx[:html]}">#{linkname}</a></b>}
- end
- toc={}
- 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
- else format_toc.lev1
- end
- toc[:seg_mini]=if dob.name =~/^meta/ \
- and dob.obj =~/Document Information/
- @md.concord_make \
- ? format_toc.mini_concord_tail
- : format_toc.mini_tail
- else format_toc.mini_lev1
- end
- title=if dob.ocn ==0
- if dob.name =~/^meta/ \
- and dob.obj =~/Document Information/
- %{<a href="#docinfo">#{linkname}</a>}
- else linkname
- end
- else
- @@toc[:scr] << '<br />'
- link=(dob.ln) \
- ? dob.ln
- : ''
- %{<b><a href="##{link}">#{linkname}</a></b>}
- end
- txt_obj={ txt: title }
- format_toc=SiSU_HTML_Format::FormatToc.new(@md,txt_obj)
- toc[:scr]=if dob.obj =~/^Metadata$/; ''
- else format_toc.lev1
- end
- toc
- end
- def level_2
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- p_num=if ocn \
- and ocn !~/#/
- SiSU_HTML_Format::ParagraphNumber.new(@md,ocn)
- else nil
- end
- 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::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev2
- end
- toc
- end
- def level_3
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- p_num=if ocn \
- and ocn !~/#/
- SiSU_HTML_Format::ParagraphNumber.new(@md,ocn)
- else nil
- end
- 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::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev3
- end
- toc
- end
- def level_4
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn) if ocn
- if dob.ln ==4
- fnh={
- fn: dob.name,
- }
- f=@md.file.base_filename.html_seg(fnh)
- seg_link=%{ <a href="#{f}" target="_top">
- #{dob.obj}
- </a> }
- @@seg_url=dob.name
- elsif dob.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/
- fn,hd=/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/.match(dob.obj)[1,2]
- fnh={
- fn: fn,
- }
- f=@md.file.base_filename.html_seg(fnh)
- seg_link=%{<a href="#{f}" target="_top">#{fn} #{hd}</a> }
- end
- 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=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
- end
- def level_5
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- toc={}
- if ocn \
- and ocn !~/#/
- fnh={
- fn: @@seg_url,
- }
- f=@md.file.base_filename.html_seg(fnh)
- p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn)
- lnk_n_txt=%{ <a href="#{f}##{ocn}">
- #{linkname}
- </a>}
- 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::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev5
- end
- toc
- end
- def level_6
- dob=@data
- linkname,ocn=dob.obj.strip,dob.ocn
- toc={}
- if ocn \
- and ocn !~/#/
- fnh={
- fn: @@seg_url,
- }
- f=@md.file.base_filename.html_seg(fnh)
- p_num=SiSU_HTML_Format::ParagraphNumber.new(@md,ocn)
- lnk_n_txt=%{ <a href="#{f}##{ocn}">
- #{linkname}
-</a>}
- 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::FormatToc.new(@md,txt_obj)
- toc[:scr]=format_toc.lev6
- end
- toc
- end
- def level_crosslink
- dob=@data
- 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}
- &nbsp;&nbsp;\\2
- <\/a>
- </td></tr></table>
-})
- else
- dob.gsub(/^4~!\s+(\S+)\s+(.+)/,
- %{<table><tr><td width ="80">
- </td><td>
- <a href="\\1" target="_top">
- #{@png.crosslink}
- &nbsp;&nbsp;\\2
- <\/a>
- </td></tr></table>
-})
- end
- end
- end
- class ScrollHeadAndSegToc < Toc
- def initialize(md='',toc='',links_guide_toc='')
- @md,@toc,@links_guide_toc=md,toc,links_guide_toc
- @vz=SiSU_Viz::Defaults.new
- @make=SiSU_Env::ProcessingSettings.new(@md)
- end
- def in_common
- toc_shared=[]
- @segtoc=[]
- 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=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
- 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::CleanHTML.new(rights).clean
- end
- if @md.prefix_b
- prefix_b=format_head_toc.notes.prefix_b
- 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
- 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::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(/(\*+)/,
- %{&nbsp;<sup><a href="#notes">\\1</a></sup>})
- tmp_head=creator_endnote + "\n"
- 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
- toc_shared << "#{@vz.table_close*1}\n"
- @segtoc << "#{@vz.table_close*1}\n"
- tmp_head=nil
- if @md.prefix_a
- tmp_head ||= %{<p />#{@md.prefix_a}\n}
- toc_shared << tmp_head.dup
- @segtoc << tmp_head.dup
- end
- tmp_head=nil
- toc_shared << @links_guide_toc
- if defined? @md.rights.all #and ? @md.rights.all
- toc_shared << rights
- end
- if defined? @md.prefix_b
- toc_shared << prefix_b
- end
- 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 \
- and not @md.rights.all.empty?
- @segtoc << rights
- end
- @segtoc << prefix_b if @md.prefix_b
- #Segtoc tail added here
- @segtoc << "</p>\n" #bugfix sort later DEBUGNOW
- @segtoc << @seg_toc_band_bottom
- 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=@segtoc.flatten.compact #watch
- if @md.opt.act[:html_seg][:set]==:on
- SiSU_HTML::Source::Output.new(@segtoc,@md).segtoc
- end
- @segtoc=[]
- @toc[:scr],@toc[:seg]=[],[]
- toc_shared
- end
- end
- class Table < SiSU_HTML_Table::TableHTML
- end
- class Scroll < SiSU_HTML_Scroll::Scroll
- end
- 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=[]
- 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
- end
- class Output
- def initialize(data='',md='')
- @data,@md=data,md
- @file=SiSU_Env::FileOp.new(md)
- @o_str ||=SiSU_Env::ProcessingSettings.new(md).output_dir_structure
- end
- def scroll
- if @md.opt.act[:html_scroll][:set]==:on
- begin
- @filename_html_scroll=@file.write_file.html_scroll
- @data.each do |para|
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @filename_html_scroll.close
- end
- end
- end
- def segtoc
- if @md.opt.act[:html_seg][:set]==:on
- begin
- @filename_html_segtoc=@file.write_file.html_segtoc
- @data.each do |para|
- 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"
- end
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @filename_html_segtoc.close
- pwd_set=Dir.pwd
- idx_lnk=(@o_str.dump_or_redirect?) \
- ? @file.base_filename.manifest
- : @file.base_filename.html_segtoc
- 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
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/html_format.rb b/lib/sisu/v4/html_format.rb
deleted file mode 100644
index e69e3de3..00000000
--- a/lib/sisu/v4/html_format.rb
+++ /dev/null
@@ -1,1426 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: html formating, css template
-
-=end
-module SiSU_HTML_Format
- include SiSU_Viz
- class ParagraphNumber
- def initialize(md,ocn)
- @md,@ocn=md,ocn.to_s
- @ocn ||=''
- end
- def ocn_display
- make=SiSU_Env::ProcessingSettings.new(@md)
- if make.build.ocn?
- ocn_class='ocn'
- if @ocn.to_i==0 \
- or @ocn.empty?
- %{<label class="ocn_off">&nbsp;</label>}
- else
- @ocn.gsub(/^(\d+|)$/,
- %{<label class="#{ocn_class}"><a name="#{@ocn}" href="##{@ocn}" class="lnk#{ocn_class}">\\1</a></label>})
- end
- else
- %{<label class="ocn_off">&nbsp;</label>}
- end
- end
- def name
- (@ocn==nil || @ocn.empty?) ? '' : %{<a name="#{@ocn}"></a>}
- end
- def id #w3c? "tidy" complains about numbers as identifiers ! annoying
- (@ocn==nil || @ocn.empty?) ? '' : %{id="o#{@ocn}"}
- end
- def goto
- (@ocn==nil || @ocn.empty?) ? '' : %{<a href="##{@ocn}">}
- end
- end
- 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_Viz::Defaults.new
- @seg_name_html=(SiSU_HTML::Source::Seg.new.seg_name_html || [])
- @seg_name_html_tracker=(SiSU_HTML::Source::Seg.new.seg_name_html_tracker || [])
- @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,@metalink='index','#metadata'
- @toc=@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="&lt;&lt;&nbsp;previous" />}
- end
- def nxt
- %{<img border="0" width="22" height="22" src="#{url_path_image_sys}/#{icon.next}" alt="next&nbsp;&gt;&gt;" />}
- end
- def dot_toc
- %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="&#094;" />}
- end
- def dot_pre
- %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="&lt;" />}
- end
- def dot_nxt
- %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="&gt;" />}
- end
- self
- end
- def doc_types(page=:seg) #used in toc & seg_nav_band
- 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>
-<td align="center" bgcolor=#{@vz.color_band2}>
- #{wgt.manifest(page)}
- #{wgt.search}
-</tr></table>}
- end
- def rdf
- SiSU_XML_Tags::RDF.new(md)
- end
- def doc_type
- %{<!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">\n}
- end
- def table_close
- %{ </font>
-#{@vz.table_close}}
- end
- def button_home(page=:seg)
- button=%{ <table summary="home button / home information" border="0" cellpadding="3" cellspacing="0">\n <tr><td align="left" bgcolor="#ffffff">\n}
- if @md.make.home_button_image.is_a?(Hash)
- image_path=if page==:manifest
- @md.file.output_path.manifest.rel_image
- elsif page==:scroll
- @md.file.output_path.html_scroll.rel_image
- else
- @md.file.output_path.html_seg.rel_image
- end
- SiSU_Env::FileOp.new(@md)
- button +=%{ <p class="tiny_left"><a href="#{@md.make.home_button_image[:link]}" target="_top"><img border="0" src="#{image_path}/#{@md.make.home_button_image[:home_button]}" width="#{@md.make.home_button_image[:w]}" height="#{@md.make.home_button_image[:h]}" alt="home icon --&gt;" /></a></p>\n}
- elsif @md.home_button_links.is_a?(Array)
- @md.home_button_links.each do |links|
- button +=%{ <p class="tiny_left"><a href="#{links[:url]}/" target="_top">\n #{links[:say]}\n </a></p>\n}
- end
- end
- button +=%{ </td></tr>\n </table>}
- button
- end
- def html_close #moved
- %{</body>
-</html>}
- end
- end
- class Widget < HeadInformation
- def initialize(md)
- super(md)
- @md=md
- @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}>
- <a href="../index.html" target="_top">
- #{@vz.nav_txt_homepage}</a>
-</td>
-}
- end
- def scroll(text)
- if @md.fns =~ /\.(?:-|ssm\.)?sst$/
- %{<td align="center" bgcolor=#{@vz.color_band2}>
- <a href="#{Xx[:html_relative1]}html/#{@file.base_filename.html_scroll}" target="_top">
- #{text}
- </a>
-</td>
-}
- end
- end
- def seg(text)
- %{<td align="center" bgcolor="#99CC66">
- <a href="#{@md.file.base_filename.html_segtoc}" target="_top">
- #{text}
- </a>
-</td>
-}
- end
- def search
- 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(page=:seg)
- 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
- if page==:manifest
- manifest_lnk="#{@md.file.output_path.manifest.url}/#{@file.base_filename.manifest}"
- brace_url=SiSU_Viz::Defaults.new.url_decoration
- %{<td align="center" bgcolor=#{@vz.color_band2}>
- <font face="#{@vz.font_fonts}" size="2">
- #{brace_url.xml_open}<a href="#{manifest_lnk}" target="_top">#{@md.file.output_path.manifest.url}/#{@file.base_filename.manifest}</a>#{brace_url.xml_close}
- </font>
-</td>}
- else
- %{<td align="center" bgcolor=#{@vz.color_band2}>
- <a href="#{manifest_lnk}" target="_top">
- #{@vz.nav_txt_manifest}
- </a>
-</td>}
- end
- 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="#{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="#{Xx[:html_relative1]}pdf/#{@file.base_filename.pdf_l}" target="_top">
- #{@vz.nav_txt_pdf_landscape}
- </a>
-</td>
-}
- else ''
- end
- end
- end
- class XML
- end
- 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)
- @file=SiSU_Env::FileOp.new(@md)
- end
- def scroll_head_navigation_band
- if @make.build.html_top_band?
- <<WOK
-<td align="center" width="60%">
- #{make_scroll_search_form_and_manifest_link}
-</td>
-WOK
- %{<table summary="table of contents scroll navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}>
-<tr><td width="20%">
- #{button_home(:scroll)}
-</td>
-<td width="75%" align="center">
- #{doc_types}
-</td>
-<td width="20%">
- &nbsp;
-#{@vz.table_close}
-<p />}
- else ''
- end
- end
- def concordance_navigation_band
- if @make.build.html_top_band?
- %{<table summary="concordance navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}>
-<tr><td width="20%">
- #{button_home}
-</td>
-<td width="75%" align="center">
- #{doc_types}
-</td>
-<td width="5%" align="right">
- &nbsp;<a href="toc.html" target="_top" alt="-&gt;">
- #{png_nav.toc}
- </a>&nbsp;
-#{@vz.table_close}
-<p />}
- else ''
- end
- end
- def seg_head_navigation_band(page=:seg)
- if page==:manifest
- nxt=(@file.output_dir_structure.by_language_code? \
- || @file.output_dir_structure.by_filetype?) \
- ? "../html/#{@md.fnb}/toc#{@md.lang_code_insert}#{Sfx[:html]}"
- : "toc#{@md.lang_code_insert}#{Sfx[:html]}"
- firstseg=%{<a href="#{nxt}" target="_top" alt="-&gt;">
- #{png_nav.nxt}</a>}
- elsif @md.firstseg =~/\S+/
- firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top" alt="-&gt;">
- #{png_nav.nxt}</a>}
- end
- %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}>
-<tr><td width="20%">
-#{button_home(page)}
-</td>
-<td width="75%" align="center">
- #{doc_types(page)}
-</td>
-<td width="5%" align="right">
- &nbsp;#{firstseg}&nbsp;
-#{@vz.table_close}
-<p />}
- end
- def manifest_link(text)
-# @file=SiSU_Env::FileOp.new(@md) if @md
- %{<font size=2>
- <a href="#{@md.file.base_filename.manifest}" target="_top">#{text}</a>
- </font>}
- end
- def concordance_link(text)
- if @md.concord_make
- %{<font size=2>
- <a href="#{@md.file.base_filename.html_concordance}" target="_top">
- #{text}
- </a>
- </font>}
- else ''
- end
- end
- def make_scroll_search_form_and_manifest_link
- wgt=SiSU_HTML_Format::Widget.new(@md)
- %{<td align="center" bgcolor=#{@vz.color_band2}>
- #{@vz.nav_txt_doc_link}
-</td>
-}
- %{<table summary="toc segment and scroll with pdf" border="0" cellpadding="3" cellspacing="0">
-<tr>
- #{wgt.manifest}
- #{wgt.search}
-</tr></table>}
- end
- def make_scroll_seg_pdf
- seg=''
- wgt=SiSU_HTML_Format::Widget.new(@md)
- seg=%{<td align="center" bgcolor=#{@vz.color_band2}>
- #{@vz.nav_txt_toc_link}
-</td>
-}
- %{<table summary="toc scroll and segment with pdf" border="0" cellpadding="3" cellspacing="0">
-<tr>
-<td align="center" bgcolor=#{@vz.color_band2}>
- #{wgt.manifest}
- #{wgt.search}
-</tr></table>}
- end
- def make_concordance
- 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}>
- #{wgt.manifest}
- #{wgt.search}
-</tr></table>}
- end
- def head
- rdf=SiSU_XML_Tags::RDF.new(@md)
- %{#{doc_type}
-<head>
- <title>
- #{@md.html_title}
- </title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-#{rdf.metatag_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>}
- end
- def concordance
- if @md.concord_make
- %{#{@vz.margin_css}
- <h4 class="toc">
- <a href="./#{@md.file.base_filename.html_concordance}">
- <i>Concordance</i>
- </a>
- </h4>
-#{@vz.table_close}}
- else
- %{#{@vz.margin_css}
-#{@vz.table_close}}
- 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.txt_hp}
- </a>
- </li>
- <li class="ref">
- Quick Ref.:
- </li>
- <li class="ref">
- <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.txt_hp}
- </a>
- </li>
- <li class="ref">
- Quick Ref.:
- </li>
- <li class="ref">
- <a href="#{@md.file.base_filename.manifest}" alt="Document Manifest" target="_top">
- Manifest
- </a>
- </li>
-<!- quick ref -!>}
- end
- def links_guide_open(type='horizontal')
- (type=='vertical') \
- ? links_guide_vertical_open
- : links_guide_horizontal_open
- end
- def links_guide_close
- insert=''
- insert=if @md.sfx_src =~/s?/
- link='http://sisudoc.org' #get from defaults
- url='sisudoc.org'
- name='SiSU electronic documents' #get from defaults
- insert= %{
- <li class="ref">
- <a href="#{link}" alt="#{name}" target="_top">
- #{url}
- </a>
- </li>
- </ul>
-</div>
-}
- end
- %{ #{insert}
-<!- quick ref -!>}
- end
- def prefix_a
- end
- def rights
- def all
- rights=@md.rights.all.gsub(/^\s*Copyright\s+\(C\)/,'Copyright <sup>&copy;</sup>&nbsp;')
- %{<p class="small_left">Rights: #{rights}</p>
-<p />}
- end
- self
- end
- def prefix_b
- %{<p class="small_left">Prefix: #{@md.prefix_b}<p />}
- end
- def scroll_head_title_banner_open
- icon=@md.icon ? %{<center>\n#{@md.icon}\n</center>} : ''
- %{#{icon}
-#{@vz.banner_instrument_cover_band_scr}}
- end
- def seg_head_title_banner_open
- icon=@md.icon ? %{<center>\n#{@md.icon}\n</center>} : ''
- %{#{icon}
-#{@vz.banner_instrument_cover_band_seg}}
- end
- def make_scroll
- concord=concordance_link(@vz.nav_txt_concordance)
- %{<table summary="toc scroll" border="0" cellpadding="3" cellspacing="0">
-<tr><td align="center" bgcolor="white" border="0">
- #{@vz.nav_txt_doc_link}
-</td>
-<td align="center" bgcolor="white">
- #{concord}
-#{@vz.table_close}}
- end
- def make_seg
- concord=concordance_link(@vz.nav_txt_concordance)
- %{<table summary="toc segment" border="0" cellpadding="3" cellspacing="0">
-<tr><td align="center" bgcolor="white">
- #{@vz.nav_txt_toc_link}
-</td>
-<td align="center" bgcolor="white">
- <font size=2>
- #{concord}
-#{@vz.table_close}}
- end
- def manifest #check structure
- 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)
- %{#{@vz.margin_txt_3}
- #{@vz.paragraph_font_small}
- #{concord}
- </font>
-#{@vz.table_close}}
- end
- def metadata
- %{#{@vz.margin_css}
- <h4 class="toc">
- <a href="#{@metalink}">
- <i>MetaData</i>
- </a>
- </h4>
-#{@vz.table_close}}
- end
- def seg_tail
- %{
-<div class="main_column">
-<p>&nbsp;<p>
-<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>&nbsp;</p>
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-</div>
-</div>
-}
- end
- def scroll_tail #debug
- nav=scroll_head_navigation_band
- %{
-<div class="main_column">
-#{nav}
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-}
- end
- def seg_navigation_tail #this is a bug area, look up and "tidy"
- %{
-<div class="main_column">
-<p>&nbsp;</p>
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-</div>
-</div>
-}
- end
- end
- class HeadSeg < HeadInformation
- def initialize(md)
- super(md)
- 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="#{pre}" target="_top">
- #{png_nav.dot_pre}
- </a>
-</td>
-<td align="center">
- <a href="#{up}" target="_top">
- #{png_nav.dot_toc}
- </a>
-</td>
-<td align="right">
- <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="#{pre}" target="_top">
- #{png_nav.dot_pre}
- </a>
-</td>
-<td align="center">
- <a href="#{up}" target="_top">
- #{png_nav.dot_toc}
- </a>
-</td>
-<td align="right">
- <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="#{@toc}" target="_top">
- #{png_nav.toc}
- </a>
-</td>}
- pre=%{<td align="center" bgcolor=#{@vz.color_band1}>
- <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="#{@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}
-#{toc}
-#{nxt}
-<td>
-#{@vz.table_close}}
- end
- def toc_next2
- toc_nav(false,true).dup
- end
- def toc_pre_next2
- toc_nav(true,true).dup
- end
- def toc_pre2
- toc_nav(true,false,2).dup
- end
- def manifest_link(text)
- %{<font size=2>
- <a href="#{@md.file.base_filename.manifest}" target="_top">
- #{text}
- </a>
- </font>}
- end
- def concordance_link(text)
- if @md.concord_make
- %{<font size=2>
- <a href="#{@md.file.base_filename.html_concordance}" target="_top">
- #{text}
- </a>
- </font>}
- else ''
- 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 credit
- %{
-<div class="main_column">
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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" id="credits"></a>
-</div></div>
-}
- end
- def navigation_band(segtocband,seg_table_top_control) #change name to navigation_band_banner
- %{<table summary="segment navigation band with banner" bgcolor=#{@vz.color_band1} width="100%"><tr>
-<td width="20%" align="left">
-#{button_home}
-</td>
-<td width="75%" align="center">
- #{doc_types}
-</td>
-<td width="5%" align="right">
- #{segtocband}
-</td></tr>
-</table>
-#{seg_table_top_control}}
- end
- def navigation_band_bottom(segtocband,seg_table_top_control) #change name to navigation_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="5%" align="right">
- #{segtocband}
- </td></tr>
- </table>
- #{seg_table_top_control}
-</div>
-}
- end
- def endnote_mark
-%{
-<p class="center" id="endnotes">
- <hr class="endnote" />
-</p>}
- end
- def endnote_section_open
-%{
-<div class="endnote">
-}
- end
- def endnote_section_close
-%{
-</div>
-} #revisit
- end
- def head_seg
- 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}
-#{@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>}
- end
- def title_banner(title,subtitle,creator)
- %{
-<div class="summary">
- <p class="tiny">
- #{title}
- </p>
- <p class="tiny">
- #{subtitle}
- </p>
- <p class="tiny">
- #{creator}
- </p>
- <p class="tiny">
- copy @
- <a href="#{@vz.url_home}">
- #{@vz.txt_home}
- </a>
- </p>
-</div>
-}
- end
- end
- class HeadScroll < HeadToc
- def initialize(md)
- super(md)
- end
- def toc_owner_details
- %{#{@vz.margin_txt_3}
-#{@vz.paragraph_font_small}
- <a href="#owner.details">
- Owner Details
- <font size="1" color="#777777">
- &nbsp;&nbsp;&nbsp;
- </font>
- </a>
- </font>
-#{@vz.table_close}}
- end
- end
- class FormatTextObject
- @vz=SiSU_Viz::Defaults.new
- 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.is_a?(Hash)
- @txt =t_o[:txt] || nil
- @ocn =t_o[:ocn] || nil
- @ocn_display =t_o[:ocn_display] || nil
- @headname =t_o[:headname] || nil
- @trailer =t_o[:trailer] || nil
- @endnote_part_a =t_o[:endnote_part_a] || nil
- @endnote_part_b =t_o[:endnote_part_b] || nil
- @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_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)
- else
- 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=@txt.gsub(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'')
- end
- @p_num=ParagraphNumber.new(@md,@ocn)
- @vz=SiSU_Viz::Defaults.new
- @make=SiSU_Env::ProcessingSettings.new(@md)
- end
- def nametags_scroll(dob)
- tags=''
- if defined? dob.tags \
- and dob.tags.length > 0 # insert tags "hypertargets"
- dob.tags.each do |t|
- tags=tags << %{<named id="#{t}" />}
- end
- end
- tags
- end
- def nametags_seg(dob) #FIX
- tags=''
- if defined? dob.tags \
- and dob.tags.length > 0 # insert tags "hypertargets"
- dob.tags.each do |t|
- tags=tags << %{<a name="#{t}" ></a>}
- end
- end
- tags
- end
- def headname #check whether used
- hn=if @t_o.is ==:heading \
- and not @t_o.name.empty? #determine use
- 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
- end
- def endnote_body
- %{
-<p class="endnote">
- #{@txt}
-</p>
-}
- end
- def endnote_body_indent
- %{
- <p class="endnote_indent">
- #{@txt}
- </p>
-}
- end
- def no_paranum
- %{
-<div class="substance">
- <label class="ocn">&nbsp;</label>
- <p class="norm">
- #{@txt}
- </p>
-</div>
-}
- end
- def para_form_css(tag,attrib) # 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}
- </#{tag}>#{ulc}
-</div>
-}
- end
- def para
- para_form_css('p','norm')
- end
- def block
- para_form_css('p','block')
- end
- def group
- para_form_css('p','group')
- end
- def alt
- para_form_css('p','alt')
- end
- def verse
- para_form_css('p','verse')
- end
- def code
- para_form_css('p','code')
- end
- def center
- para_form_css('p','center')
- end
- def bold
- para_form_css('p','bold')
- end
- def bullet
- para_form_css('li','bullet')
- end
- def table
- @txt=if @t_o.obj !~/^<table\s/
- 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 format(tag,attrib)
- para_form_css(tag,attrib)
- end
- def heading_normal(tag,attrib)
- section_break=(tag=~/h[1-4]/) \
- ? '<br /><hr width=90% /><br />'
- : ''
- %{#{section_break}
-<div class="substance">
- #{@p_num.ocn_display}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name}
- #{@named}<a name="h#{@headname}">#{@txt}</a>
- </#{tag}>
-</div>
-}
- end
- def heading_body
- heading_normal('p','norm')
- end
- def heading_body1
- heading_normal('h1','norm')
- end
- def heading_body2
- heading_normal('h2','norm')
- end
- def heading_body3
- heading_normal('h3','norm')
- end
- def heading_body4
- heading_normal('h4','norm')
- end
- def heading_body5
- heading_normal('h5','norm')
- end
- def heading_body6
- heading_normal('h6','norm')
- end
- def title_heading(tag,attrib)
- cl=(@make.build.html_minitoc?) \
- ? 'content'
- : 'content0'
- %{
-<div class="#{cl}">
-<#{tag} class="#{attrib}">
- #{@named}#{@txt}
- </#{tag}>
-</div>
-}
- end
- def title_heading1
- title_heading('h1','tiny')
- end
- def title_heading2
- title_heading('h2','tiny')
- end
- def title_heading3
- title_heading('h3','tiny')
- end
- def title_heading4
- ''
- end
- def seg_heading_sub(tag,attrib)
- @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}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name} #{@headnamed}
- #{@named}#{@txt}
- </#{tag}>
-</div>
-}
- end
- def seg_heading4
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <h1 class="norm" #{@p_num.id}>#{@p_num.name}
- #{@txt}
- </h1>
-</div>
-}
- end
- def seg_heading5
- seg_heading_sub('p','bold')
- end
- def seg_heading6
- seg_heading_sub('p','bold')
- end
- def dl #check :trailer
- "<dl><b>#{@txt}</b> #{@trailer}</dl>"
- end
- def table_css_end
- '</table>
- </p>
- </div>'
- end
- def gsub_body #fix
- @txt=case @txt
- when /^\((i+|iv|v|vi+|ix|x|xi+)\)/
- @txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>')
- when /^\(?(\d|[a-z])+\)/
- @txt.gsub(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>')
- when /^\s*\d{1,3}\.\s/
- @txt.gsub(/^\s*(\d+\.)/,'<b>\1</b>')
- when /^\s*[A-Z]\.\s/
- @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>')
- else @txt
- end
- end
- def bold_para
- %{#{@vz.margin_txt_0}
- <p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- &nbsp;&nbsp;&nbsp;
-#{@vz.table_close}}
- end
- def bold_heading
- @txt=@txt.gsub(/[1-9]~(\S+)/,'<a name="\1"></a>').
- gsub(/[1-9]~/,'')
- %{<p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- &nbsp;&nbsp;&nbsp;
-#{@vz.table_close}}
- end
- def toc_head_copy_at
- %{<p class="center">#{@txt}</p>\n}
- end
- def center
- %{<p class="center">#{@txt}</p>\n}
- end
- def bold
- %{<p class="bold">#{@txt}</p>\n}
- end
- def center_bold
- %{<p class="centerbold">#{@txt}</p>\n}
- end
- end
- class FormatScroll < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- @vz=SiSU_Viz::Defaults.new
- end
- end
- class FormatSeg < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- end
- def navigation_toc_lev1_advert
- %{#{@banner.home_button}\n
-<center>
-#{@txt}
-#{@two}
-</a></center><p />}
- end
- def navigation_toc_lev1
- %{#{@banner.nav_toc}}
- end
- def navigation_toc_lev2 #change bold use css
- %{<p />
-<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
- %{<p />
-<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}#{fn}#{@md.lang_code_insert}#{Sfx[:html]}#{@endnote_part_b}
- </p>
-}
- end
- def clean(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)
- txt=if @txt \
- and @txt =~/<\/?i>|<a\s+name="\S+?">/mi
- @txt.gsub(/<\/?i>|<a\s+name="\S+?">/mi,'') #removes name markers from subtoc, go directly to substantive text
- else @txt
- end
- 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=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+">&nbsp;<sup>\d+<\/sup>&nbsp;/m,'')
- end
- %{<#{tag} class="#{attrib}">
- <a href="##{@ocn}"><i>#{txt}</i></a> #{note}
- </#{tag}>}
- end
- def subtoc_lev5
- subtoc_lev('h5','subtoc') if @txt
- end
- def subtoc_lev6
- subtoc_lev('h6','subtoc') if @txt
- end
- def heading_sub(tag,attrib)
- @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}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name} #{@headnamed}
- #{@txt}
- </#{tag}>
-</div>
-}
- end
- def heading5
- heading_sub('p','bold')
- end
- def heading6
- heading_sub('p','bold')
- end
- def heading4
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <h1 class="norm" #{@p_num.id}>#{@p_num.name}
- #{@t_o[:format]}
- #{@txt}
- </h1>
-</div>
-}
- end
- def navigation_heading4
- %{<table summary="navigation segment heading 4" width=100% bgcolor="#08163f" border="0">
-<tr><td align="center">
-<p class="bold">
- #{@txt}
-</p>
-#{@vz.table_close}}
- end
- def navigation_heading5
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_heading6
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_center
- "<center>#{@txt}</center>"
- end
- end
- class FormatToc < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- end
- def links_guide
- %{ <li class="doc">
- <a href="#{@lnk_url}" target="_top">
- #{@lnk_txt}
- </a>
- </li>
-}
- end
- def lev(tag,attrib)
- if @txt
- %{<#{tag} class="#{attrib}">
- #{@txt}
- </#{tag}>
-}
- else ''
- end
- end
- def lev1
- lev('h1','toc')
- end
- def lev2
- lev('h2','toc')
- end
- def lev3
- lev('h3','toc')
- end
- def lev4
- lev('h4','toc')
- end
- def lev5
- lev('h5','toc')
- end
- def lev6
- lev('h6','toc')
- end
- def lev0 #docinfo
- lev('h0','toc')
- end
- def strip_endnotes(txt)
- 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
- @txt=strip_endnotes(@txt)
- lev('h1','minitoc')
- end
- def mini_lev2
- @txt=strip_endnotes(@txt)
- lev('h2','minitoc')
- end
- def mini_lev3
- @txt=strip_endnotes(@txt)
- lev('h3','minitoc')
- end
- def mini_lev4
- @txt=strip_endnotes(@txt)
- lev('h4','minitoc')
- end
- def mini_lev5
- @txt=strip_endnotes(@txt)
- lev('h5','minitoc')
- end
- def mini_lev6
- @txt=strip_endnotes(@txt)
- 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
- class FormatStr
- def initialize(md,str)
- @str=str
- end
- def center
- %{<p class="center">#{@str}</p>\n}
- end
- def bold
- %{<p class="bold">#{@str}</p>\n}
- end
- def center_bold
- %{<p class="centerbold">#{@str}</p>\n}
- end
- def endnote_body
- %{
-<p class="endnote">
- #{@str}
-</p>
-}
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/html_minitoc.rb b/lib/sisu/v4/html_minitoc.rb
deleted file mode 100644
index 2733affb..00000000
--- a/lib/sisu/v4/html_minitoc.rb
+++ /dev/null
@@ -1,218 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
- minitoc
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_minitoc.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
- module SiSU_HTML_MiniToc
- require_relative 'html_tune' # html_tune.rb
- include SiSU_HTML_Tune
- 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.opt.cmd) if @md
- end
- def songsheet
- 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 \
- || 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+">&nbsp;<sup>\d+<\/sup>&nbsp;<\/a>/,'').
- gsub(@pat_strip_heading_name,'\1')
- #gsub(/(.*?)<a name="(\d+)"><\/a>(.*)/,'\1') #2002w42 altered gsub - problematic? - suspect
- toc=case txt.ln
- 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
- end
- end
- @toc
- end
- protected
- def level_concordance
- 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::HeadToc.new(@md)
- @@seg_mini << format_head_toc.mini_seg_metadata
- end
- def level_word_index
- 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 \
- || 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="#{link}#{@md.lang_code_insert}#{Sfx[:html]}">#{txt.obj}</a></b>}
- end
- 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
- end
- toc_mini
- end
- def level_2
- txt=@data
- 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::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::FormatToc.new(@md,txt_obj)
- toc_mini=format_toc.mini_lev3
- toc_mini
- end
- def level_4
- txt=@data
- unless txt =~/~metadata/
- if txt.ln ==4
- fnh={
- fn: txt.name,
- }
- f=@md.file.base_filename.html_seg(fnh)
- seg_link=%{ <a href="#{f}" target="_top">
- #{txt.obj}
- </a> }
- @@seg_url=txt.name
- elsif txt.obj =~/\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+/
- fn,hd=/^(\d+.\d+.\d+.\d+|\d+.\d+.\d+|\d+.\d+|\d+)(.*)/.match(dob.obj)[1,2]
- fnh={
- fn: fn,
- }
- f=@md.file.base_filename.html_seg(fnh)
- seg_link=%{<a href="#{f}" target="_top">#{fn} #{hd}</a> }
- end
- 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 \
- || txt.is ==:heading_insert) \
- && txt.ocn !=0
- txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
- end
- fnh={
- fn: @@seg_url,
- }
- f=@md.file.base_filename.html_seg(fnh)
- lnk_n_txt=%{ <a href="#{f}##{txt.ocn}">
- #{txt.obj}
- </a>}
- 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 \
- || txt.is ==:heading_insert) \
- && txt.ocn !=0
- txt.obj=txt.obj.gsub(@pat_strip_heading_name,'\1')
- end
- fnh={
- fn: @@seg_url,
- }
- f=@md.file.base_filename.html_seg(fnh)
- lnk_n_txt=%{ <a href="#{f}##{txt.ocn}">
- #{txt.obj}
- </a>}
- 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
- end
- end
-__END__
diff --git a/lib/sisu/v4/html_promo.rb b/lib/sisu/v4/html_promo.rb
deleted file mode 100644
index 981bd7dc..00000000
--- a/lib/sisu/v4/html_promo.rb
+++ /dev/null
@@ -1,445 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_promo.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: html advertising component, build here, mockup
-
-=end
-module SiSU_HTML_Promo
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Ad
- def initialize(md)
- @md=md
- @env=SiSU_Env::InfoEnv.new(@md.fns,@md)
- @rc=SiSU_Env::GetInit.new.sisu_yaml.rc
- @ad=SiSU_Env::GetInit.new.ads
- @vz=SiSU_Viz::Defaults.new
- @flag=@env.widget.promo?
- @make=SiSU_Env::ProcessingSettings.new(@md)
- end
- def div
- def major
- (@make.build.html_right_pane? \
- && @flag[:ad]) \
- ? '<div id="pane_major">'
- : ''
- end
- def minor
- (@make.build.html_right_pane? \
- && @flag[:ad]) \
- ? '<div id="pane_minor">'
- : ''
- end
- def close
- (@make.build.html_right_pane? \
- && @flag[:ad]) \
- ? '</div>'
- : ''
- end
- self
- end
- def display
- ads_array,promo_array=[],[]
- 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
- promo_array=@vz.widget_promo
- elsif @flag[:rc] #promo set in rc file
- promo_array=if @rc['html']['promo'].is_a?(String)
- @rc['html']['promo'].split(/[,;]\s*/)
- else @rc['html']['promo']
- end
- else advert_extract_all
- end
- ads=if promo_array.length > 0
- promo_array.each do |x|
- ads_array << advert_extract_subject(x)
- end
- ads_array
- end
- adverts(ads.join)
- end
- end
- def cell(prod,id)
- @prod,@id=prod,id
- def title
- @prod['title'] ? %{<b>#{@prod['title']}</b>} : ''
- end
- def subtitle
- @prod['subtitle'] ? %{ - #{@prod['subtitle']}} : ''
- end
- def author
- @prod['author'] ? %{<p class="pane">#{@prod['author']}</p>} : ''
- end
- def editor
- @prod['editor'] ? %{<p class="pane">#{@prod['editor']}</p>} : ''
- end
- def year
- @prod['year'] ? %{<p class="pane">#{@prod['year']}</p>} : ''
- end
- def date
- @prod['date'] ? %{<p class="pane">On: #{@prod['date']}</p>} : ''
- end
- def location
- @prod['at'] ? %{<p class="pane">At: #{@prod['at']}</p>} : ''
- end
- def pages
- @prod['pages'] ? %{<p class="pane">Pages: #{@prod['pages']} pages</p>} : ''
- end
- def form
- @prod['form'] ? %{<p class="pane">#{@prod['form']}</p>} : ''
- end
- def nick
- @prod['nick'] ? %{(#{@prod['nick']})<br />} : ''
- end
- def update
- @prod['update'] ? %{<p class="pane">Updated: #{@prod['update']}</p>} : ''
- end
- def issn
- @prod['issn'] ? %{<p class="pane">issn: #{@prod['issn']}</p>} : ''
- end
- def blurb
- @prod['blurb'] ? %{<p class="pane_blurb">#{@prod['blurb']}</p>} : ''
- end
- def search_form_sisu(table=true)
- db=if @prod['db']=~/\S+/
- (@prod['db']=~/^#{Db[:name_prefix]}\S+/) ? @prod['db'] : "#{Db[:name_prefix]}#{@prod['db']}"
- elsif defined? @rc['search']['sisu']['db'] \
- and @rc['search']['sisu']['db'] =~/\S+/
- (@rc['search']['sisu']['db']=~/^#{Db[:name_prefix]}\S+/) \
- ? @prod['search']['sisu']['db']
- : "#{Db[:name_prefix]}#{@prod['db']}"
- else nil
- end
- action=if @prod['action']=~/^https?:\/\//
- @prod['action']
- elsif defined? @rc['search']['sisu']['action'] \
- and @rc['search']['sisu']['action'] =~/^https?:\/\//
- @rc['search']['sisu']['action']
- else nil
- end
- if action \
- and db
- @env.widget.search_form('sisusearch',action,db,table)
- else ''
- end
- end
- def search_form_hyperestraier(table=true)
- action=if defined? @rc['search']['hyperestraier']['action'] \
- and @rc['search']['hyperestraier']['action'] =~/^https?:\/\//
- @rc['search']['hyperestraier']['action']
- else nil
- end
- form=if action
- '<br />' + @env.widget.search_form('hyperestraier',action,'',table)
- else ''
- end
- form
- end
- def links
- if @prod['links'] #and @prod['links']==Array
- links_a=[]
- @prod['links'].each do |x|
- if x \
- and x['url'] \
- and x['title']
- subtitle=x['subtitle'] ? %{ - #{x['subtitle']}} : ''
- url_=(x['url'] =~/https?:/) ? x['url'] : "../#{x['url']}"
- links_a << %{<p class="pane_link"><a href="#{url_}">#{x['title']}#{subtitle}</a></p>\n}
- end
- end
- links_a.join
- else ''
- end
- end
- def image
- @prod['image'] ? %{<img border="0" src="../_sisu/image/#{@prod['image']}" /><br />} : ''
- end
- def url_link
- @url_=if @prod['url'] =~/https?:/
- "#{@prod['url']}"
- else "../#{@prod['url']}" # "#{@env.url.root}/#{@prod['url']}"
- end
- def show
- @prod['url'] ? %{<p class="pane_link"><a href="#{@url_}">#{@url_}</a></p>} : ''
- end
- def url
- @prod['url'] ? %{<a href="#{@url_}">} : ''
- end
- def url_relative
- @prod['url'] ? %{<a href="../#{@prod['url']}/toc.html">} : ''
- end
- self
- end
- def flyer
- if @prod['flyer']
- %{<p class="pane"><a href="../man/pdf/#{@id}.pdf"><img border="0" height="18" width="15" src="../_sisu/image/b_pdf.png">&nbsp;PDF&nbsp;flyer</a></p>}
- else ''
- end
- end
- def price
- def gbp
- if defined? @prod['price']['gbp'] \
- and @prod['price']['gbp']
- " &nbsp;&pound;&nbsp;#{@prod['price']['gbp']}&nbsp;(GBP)&nbsp;"
- else ''
- end
- end
- def euro
- if defined? @prod['price']['euro'] \
- and @prod['price']['euro']
- " &nbsp;&euro;&nbsp;#{@prod['price']['euro']}&nbsp;(Euro)&nbsp;"
- else ''
- end
- end
- def usd
- if defined? @prod['price']['usd'] \
- and @prod['price']['usd']
- " &nbsp;$&nbsp;#{@prod['price']['usd']}&nbsp;(USD)&nbsp;"
- else ''
- end
- end
- %{<p class="pane">Price:#{gbp}#{euro}#{usd}</p>}
- end
- def adsense #draw content from a configuration file
- def column_right
- if defined? @ad[:promo]['ad']['adsense']['column_right']
- @ad[:promo]['ad']['adsense']['column_right'].join("\n")
- else ''
- end
- end
- def line_single
- if defined? @ad[:promo]['ad']['adsense']['line_single']
- @ad[:promo]['ad']['adsense']['line_single'].join("\n")
- else ''
- end
- end
- self
- end
- def site_link #Work area
- if url_link.url
- <<-WOK
-<p class="pane">
-#{url_link.url}
-#{image}
-#{title}
-#{subtitle}
-</a>#{nick}</p>
- WOK
- else
- <<-WOK
-<p class="pane">
-#{image}
-#{title}
-#{subtitle}
-</p>
- WOK
- end
- end
- self
- end
- def output_form_sponsor(type,id)
- cell=cell(@ad[:promo][type][id],prod_id)
- <<-WOK
-<br />
-#{cell.site_link}
-#{cell.blurb}
-#{cell.links}
- WOK
- end
- def output_form_link(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
- <<WOK
-<br />
-#{cell.site_link}
-#{cell.author}
-#{cell.year}
-#{cell.blurb}
-#{cell.links}
-WOK
- end
- def output_form_search_sisu(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
- cell.search_form_sisu(false)
- end
- def output_form_search_hyperestraier(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
- cell.search_form_hyperestraier(false)
- end
- def output_form_book(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
- prod_type=((id=~/id_(?:[0-9x]){10,13}/i) ? 'isbn' : 'id')
- id_detail=%{<p class="pane">#{prod_type}: #{prod_id}</p>}
- <<WOK
-<br />
-#{cell.site_link}
-#{cell.author}
-#{cell.year}
-#{id_detail}
-#{cell.pages}#{cell.form}
-#{cell.price}
-#{cell.flyer}
-#{cell.blurb}
-#{cell.links}
-WOK
- end
- def output_form_journal(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
- <<WOK
-<br />
-#{cell.site_link}
-#{cell.editor}
-#{cell.issn}
-#{cell.update}
-#{cell.form}
-#{cell.price.gsub(/Price:/,'Subscription:')}
-#{cell.flyer}
-#{cell.blurb}
-#{cell.links}
-WOK
- end
- def output_form_conference(type,id)
- prod_id=id.gsub(/id_/,'')
- cell=cell(@ad[:promo][type][id],prod_id)
-#translate date (dd month yyyy) from 2007-03-04 and ruby conversion
- <<WOK
-<br />
-#{cell.site_link}
-#{cell.date}
-#{cell.location}
-#{cell.price}
-#{cell.flyer}
-#{cell.blurb}
-#{cell.links}
-WOK
- end
- def output_form_select(type,id)
- case type
- when /site/
- output_form_link(type,id)
- when /sponsor/
- output_form_sponsor(type,id)
- when /search/
- if id=~/hyperestraier/
- output_form_search_hyperestraier(type,id)
- else output_form_search_sisu(type,id)
- end
- when /book/
- output_form_book(type,id)
- when /journal/
- output_form_journal(type,id)
- when /conference/
- output_form_conference(type,id)
- end
- end
- def advert_extract_subject(category) #extracts products from category/subject list
- adverts=[]
- if defined? @ad[:promo_list][category] \
- and @ad[:promo_list][category]
- @ad[:promo_list][category].keys.each do |type|
- @ad[:promo_list][category][type].each do |i|
- if i
- id=((i.inspect =~/^\d/) ? "id_#{i.to_s.strip}" : i.to_s.strip) #watch remove .to_s ?
- if defined? @ad[:promo][type][id] \
- and not @ad[:promo][type][id].nil?
- adverts << output_form_select(type,id)
- else
- if defined? @ad[:promo][category][type][id] \
- 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
- end
- end
- end
- end
- else
- SiSU_Screen::Ansi.new(@md.opt.cmd,"*WARN* category not found: #{category}").warn unless @md.opt.cmd =~/q/
- end
- adverts.join
- end
- def advert_extract_all #extracts all products from list (which is broken down into categories)
- adverts=[]
- @ad[:promo_list].keys.each do |category|
- adverts << advert_extract_subject(category)
- end
- adverts.flatten
- end
- def adverts(ads)
- <<WOK
-#{div.minor}
-#{ads}
-#{div.close}
-WOK
- end
- def no_adverts
- <<WOK
-#{div.minor}
-#{div.close}
-WOK
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/html_scroll.rb b/lib/sisu/v4/html_scroll.rb
deleted file mode 100644
index 367e7d70..00000000
--- a/lib/sisu/v4/html_scroll.rb
+++ /dev/null
@@ -1,224 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_scroll.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: html scroll generation, processing
-
-=end
-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_Viz::Defaults.new
- end
- def songsheet
- begin
- scr=SiSU_HTML_Scroll::Scroll.new(@md,@data,@endnotes).markup
- scr[:tails]=SiSU_HTML_Scroll::Scroll.new(@md).tails
- scr
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- protected
- def markup
- data=@data
- @rcdc=false
- @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=dob.obj.gsub(/(Document Information(?: \(metadata\))?)/,
- '\1<a name="docinfo"></a>')
- end
- if dob.obj =~/^Metadata$/ \
- and dob.lv =='B'
- dob.obj=dob.obj.gsub(/Metadata/,'')
- end
- if defined? dob.name \
- and dob.name =~/^metadata/ \
- and dob.lv =='1' \
- and dob.obj =~/SiSU Metadata, document information/
- @rcdc=true
- end
- dob.obj=dob.obj.gsub(/href="[a-z0-9._-]+(#\S+?")/m,'href="\1'). # internal document links
- gsub(/href="#{Xx[:segment]}/m,'href="')
- if dob.obj !~/(^#{Rx[:meta]}|#{Mx[:br_eof]})/
- 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::ParagraphNumber.new(@md,dob.ocn)
- end
- 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
- sto.heading_body2
- elsif dob.ln==3
- sto.heading_body3
- elsif dob.ln==4
- sto.heading_body4
- elsif dob.ln==5
- sto.heading_body5
- elsif dob.ln==6
- sto.heading_body6
- end
- elsif dob.is==:break \
- and dob.from==:markup
- '<br /><hr width=90% /><br />'
- elsif dob.is==:heading_insert
- x=if dob.ln==1
- unless dob.obj.empty?
- sto.heading_body1
- end
- elsif dob.ln==2
- unless dob.obj.empty?
- sto.heading_body2
- end
- elsif dob.ln==3
- unless dob.obj.empty?
- sto.heading_body3
- end
- elsif dob.ln==4 \
- and dob.obj !~/^(?:Endnotes|Index|Metadata|Manifest)$/
- unless dob.obj.empty?
- sto.heading_body4
- end
- elsif dob.ln==4 \
- and dob.obj=='Endnotes'
- sto.heading_body4
- @endnotes.join("\n")
- elsif dob.ln==4 \
- and dob.obj=='Index'
- sto.heading_body4
- book_idx=SiSU_Particulars::CombinedSingleton.instance.get_idx_html(@md.opt).html_idx
- book_idx.each do |y| #takes book index prepared for segments & strips segment identifying info
- y.gsub!(/<a href="\S+?\.html#(\d+)">(\1(?:-\d+)?)<\/a>/,
- '<a href="#\1">\2</a>')
- end
- book_idx.join("\n")
- elsif dob.ln==5
- unless dob.obj.empty?
- sto.heading_body5
- end
- elsif dob.ln==6
- unless dob.obj.empty?
- sto.heading_body6
- end
- end
- elsif dob.is==:para
- if dob.indent \
- and dob.hang \
- and dob.indent =~/[0-9]/ \
- and dob.hang =~/[0-9]/
- if dob.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
- elsif dob.is==:block
- sto.block
- elsif dob.is==:group
- sto.group
- elsif dob.is==:alt
- sto.alt
- elsif dob.is==:verse
- sto.verse
- elsif dob.is==:code
- sto.code
- elsif dob.is==:table
- sto.table
- 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/
- end
- end
- end
- @scr
- end
- def tails
- scr_tail=[]
- 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
- end
-end
-__END__
diff --git a/lib/sisu/v4/html_segments.rb b/lib/sisu/v4/html_segments.rb
deleted file mode 100644
index 73386381..00000000
--- a/lib/sisu/v4/html_segments.rb
+++ /dev/null
@@ -1,634 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_segments.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: html segment generation, processing
-
-=end
-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::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=[]
- 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::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::FormatSeg.new(@md,txt_obj)
- @seg[:headings] << format_seg.title_heading1
- 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::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::FormatSeg.new(@md,txt_obj)
- @seg[:headings] << format_seg.title_heading1
- filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="#{@cl}">\n} << @seg[:idx] << '</div>' # << '</div>'
- elsif @type=='metadata'
- metadata=SiSU_Metadata::Summary.new(@md).xhtml_display.metadata
- @seg[:headings]=[]
- 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::FormatSeg.new(@md,txt_obj)
- @seg[:headings] << format_seg.title_heading1
- filename_seg << @seg[:heading_idx] << @minitoc << @seg[:headings] << %{\n<div class="#{@cl}">\n} << metadata << '</div>' # << '</div>'
- else
- 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 <<=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=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
- @output_seg_file.close
- end
- end
- end
- class Seg
- @@seg,@@seg_subtoc,@@seg_endnotes,@@seg_ad={},{},{},{}
- @@seg_name,@@seg_name_html=[],[]
- @@seg_url=@@fn=@@get_hash_to=@@get_hash_fn=''
- @@loop_count=@@seg_total=@@tracker=0
- @@is4=@@is3=@@is2=@@is1=0
- @@heading1=@@heading2=@@heading3=@@heading4=0
- @@seg[:tocband_banner],@@seg[:tocband_bannerless],@@seg[:title],@@seg[:headings],@@seg[:main],@@seg[:idx],@@seg[:tail],@@seg[:credits],@@seg_subtoc_array,@@seg_endnotes_array,@@seg[:endnote_all]=Array.new(11){[]}
- @@seg[:heading_endnotes]=''
- @@tablehead,@@number_of_cols=0,0
- @@dp,@@segtocband=nil,nil
- @@fns_previous=''
- attr_reader :seg_name_html,:seg_name_html_tracker
- def initialize(md=nil,data='')
- @md,@data=md,data
- @vz=SiSU_Viz::Defaults.new
- @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::CreateSite.new(@md.opt.cmd).html_seg_title_banner?
- end
- end
- def songsheet
- begin
- @minitoc=SiSU_HTML::Source::Toc.new(@md,@data).minitoc
- data=get_subtoc_endnotes(@data)
- data=articles(data)
- SiSU_HTML_Seg::Seg.new.cleanup # (((( added ))))
- #### (((( END )))) ####
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- @@seg_name=[]
- end
- end
- protected
- def articles(data)
- tracking,newfile=0,0
- @@is4=@@is3=@@is2=@@is1=0
- printed_endnote_seg='n'
- idx_html=nil
- if @md.book_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 \
- || dob.is == :heading_insert) \
- && dob.ln == 4
- @@seg_name << dob.name
- dob.name
- end
- end
- @@seg_name_html=@@seg_name
- @@seg_total=@@seg_name.length
- testforartnum=@@seg_name_html
- 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+?"/
- while dob.obj =~/href="#{Xx[:segment]}#+(\S+?)"/
- m=$1
- if map_nametags[m] \
- and map_nametags[m][:segname]
- inf=SiSU_Env::FileOp.new(@md) if @md
- lng=(inf.output_dir_structure.by_language_code?) \
- ? ''
- : '.' + @md.opt.lng
- dob.obj.sub!(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#{map_nametags[m][:segname]}#{lng}#{Sfx[:html]}#\\1"})
- else
- p "NOT FOUND name_tags: #{m}"
- dob.obj.sub!(/href="#{Xx[:segment]}#+(\S+?)"/,%{href="#\\1"}) # not satisfactory
- end
- end
- end
- 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 \
- || dob.is==:heading_insert) \
- && dob.ln==3
- @@heading3=dob.obj
- @@is4,@@is3=0,1
- end
- 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 \
- || 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 \
- || dob.is==:heading_insert) \
- && dob.ln==1
- $_ #; check
- end
- end
- if @@is4==1
- if newfile==1 \
- or dob.obj =~/^#{Mx[:br_endnotes]}|^#{Mx[:br_eof]}/
- newfile=0
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- && dob.ln==4
- if tracking != 0
- @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
- fnh={
- fn: @@seg_name_html[tracking-1],
- }
- fn=@md.file.base_filename.html_seg(fnh)
- segfilename="#{@file.output_path.html_seg.dir}/#{fn}"
- output_seg_file=File.new(segfilename,'w') if @@seg_name_html[tracking-1]
- 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'
- SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'endnotes').output
- elsif @@seg_name_html[tracking-1]=='book_index'
- SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'idx').output
- @@seg[:idx]=[]
- elsif @@seg_name_html[tracking-1]=='metadata'
- SiSU_HTML_Seg::Output.new(@md,output_seg_file,@@seg,minitoc,'metadata').output
- else puts "#{__FILE__}::#{__LINE__}"
- end
- else puts "#{__FILE__}::#{__LINE__}"
- end
- 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
- fnh={
- fn: @@seg_name_html[tracking],
- }
- fn=@md.file.base_filename.html_seg(fnh)
- segfilename="#{@file.output_path.html_seg.dir}/#{fn}"
- 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)
- head(dob)
- end
- end
- tracking=tracking+1
- end
- 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.is_a?(Array)
- dob.obj.each do |pg|
- markup(pg)
- end
- end
- if testforartnum[tracking-1] =~/endnote/
- if printed_endnote_seg=='n'
- printed_endnote_seg='y'
- end
- end
- end
- end
- data
- end
- def heading_art(dob)
- 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_seg << ads.div.major
- end
- def head(dob)
- clean=/<!.*?!>|<:.*?>/
- 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=''
- end
- @p_num ||= ''
- if @@is1==1
- @author=%{<b>#{@md.author}</b>\n} if @md.author.to_s =~/\S/
- @@seg[:tocband_banner] << format_head_seg.navigation_band(@@segtocband,@@seg[:dot_nav])
- conditional_div_close=if @@get_hash_fn =~/metadata/ #watch
- '</div>'
- else ''
- end
- @@seg[:tocband_bannerless] << '<br />' << conditional_div_close << format_head_seg.navigation_band_bottom(@@segtocband,@@seg[:dot_nav])
- if @title_banner_
- @@seg[:headings] << format_head_seg.title_banner(@md.title.main,@md.title.sub,@author).gsub(clean,'')
- end
- 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=@@heading1.gsub(/&nbsp;<a name="-[\d*+]+" href="#_[\d*+]+">&nbsp;<sup>[\d*+]+<\/sup>&nbsp;<\/a>/,'')
- end
- if @@is2==1
- heading2=@@heading2
- 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=@@heading2.gsub(/&nbsp;<a name="-[\d*+]+" href="#_[\d*+]+">&nbsp;<sup>[\d*+]+<\/sup>&nbsp;<\/a>/,'')
- end
- if @@is3==1
- heading3=@@heading3
- 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=@@heading3.gsub(/&nbsp;<a name="-[\d*+]+" href="#_[\d*+]+">&nbsp;<sup>[\d*+]+<\/sup>&nbsp;<\/a>/,'')
- end
- if @@is4==1
- heading4=@@heading4
- 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=[]
- 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::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
- if dob.ln==4
- sto.seg_heading4
- elsif dob.ln==5
- sto.seg_heading5
- elsif dob.ln==6
- sto.seg_heading6
- end
- elsif dob.is==:para
- if dob.indent \
- and dob.hang \
- and dob.indent =~/[0-9]/ \
- and dob.hang =~/[0-9]/
- if dob.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==:block
- sto.block
- elsif dob.is==:group
- sto.group
- elsif dob.is==:alt
- sto.alt
- elsif dob.is==:verse
- sto.verse
- elsif dob.is==:code
- sto.code
- elsif dob.is==:table
- sto.table
- elsif dob.is==:break \
- and dob.from==:markup
- '<br /><hr width=90% /><br />'
- end
- if @md.flag_separate_endnotes
- 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 \
- || 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=dob.obj.gsub(/\s*(-\{{2}~\d+|<:e[:_]\d+>).*/,'') #potentially dagerous - removes all paragraphs with <!e_!> #?? workpoint
- if dob.obj =~/<a name="_\d+" href="#-\d+">&nbsp;<sup>/ #endnote- note-
- format_seg=SiSU_HTML_Format::FormatSeg.new(@md,dob)
- dob=format_seg.no_paranum
- end
- end
- if (dob.is==:heading \
- || dob.is==:heading_insert) \
- && dob.ln==4
- @@seg[:main] << %{\n<div class="#{@cl}">\n}
- @@seg[:main] << dob_html
- 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::HeadSeg.new(@md)
- if @md.flag_auto_endnotes and @@seg_endnotes[@@get_hash_fn]
- @@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|
- end
- @@seg[:tail] << '</div>'
- @@seg[:tail] << '</div>' #this div closes div class content
- end
- 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
- @@seg[:title],@@seg[:dot_nav],@@seg[:tocband_banner],@@seg[:tocband_bannerless],@@seg[:headings],@@seg[:main],@@seg[:tail],@@seg[:credits]=Array.new(8){[]}
- @@segtocband=nil
- end
- def cleanup
- reinitialise
- @@seg_total,@@tracker=0,0
- @@seg_endnotes,@@seg_subtoc={},{}
- @@seg_endnotes_array,@@seg_subtoc_array=[],[]
- @@seg[:endnote_all]=[]
- end
- def get_subtoc_endnotes(data) #get endnotes & sub-table of contents subtoc
- data.each do |dob|
- dob.obj=dob.obj.gsub(/<a name=\"h\d.*?\">(.+?)<\/a>/mi,'\1')
- if @md.flag_auto_endnotes
- 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 \
- || 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 \
- and dob.obj
- @@fn=dob.name
- else
- if dob.name =~/\S+/
- @@fn=dob.name
- else @@fn=''
- end
- end
- end
- end
- 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::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::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*+]+"/) \
- && 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)
- end
- 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
- 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=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::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
- end
- @@seg_endnotes_array << note_match
- end
- try.join('<br \/>')
- #% creation of separate end segment/page of all endnotes referenced back to reference segment
- 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::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=dob.obj.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/html_table.rb b/lib/sisu/v4/html_table.rb
deleted file mode 100644
index 6d61d45b..00000000
--- a/lib/sisu/v4/html_table.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_table.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: shared html parts
-
-=end
-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
deleted file mode 100644
index 1876380a..00000000
--- a/lib/sisu/v4/html_tune.rb
+++ /dev/null
@@ -1,297 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/html_tune.rb;hb=HEAD>
-
- * 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">
-&nbsp\;</td>
-<td width="94%" valign="top" align="justify">'
- @@table_align_close='</td>
-<td width="4%" align="right" valign="top">
-<font size="1" color="#777777">
-&nbsp;&nbsp;&nbsp;</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;')
- end
- end
- class Tune
- def initialize(data,md)
- @data,@md=data,md
- @vz=SiSU_Viz::Defaults.new
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @sys=SiSU_Env::SystemCall.new
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @brace_url=SiSU_Viz::Defaults.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
- SiSU_HTML_Tune::Output.new(@data,@md).hard_output
- SiSU_HTML_Tune::Output.new(@data,@md).marshal
- end
- SiSU_HTML_Tune::Tune.new(@data,@md).output
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def songsheet_array(data)
- data_tuned=[]
- #@tuned_file=[]
- data.each do |dob|
- dob=amp_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>&copy;</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/,%{&nbsp;<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&nbsp;{&nbsp;\1&nbsp;}</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,'&lt;').gsub(/>/m,'&gt;')
- end
- dob
- end
- def amp_angle_brackets(dob)
- dob.obj=dob.obj.
- gsub(/&/u,'&amp;').
- gsub(/<([a-z:\/]+)>/,"#{Dx[:lt_xml]}\\1#{Dx[:gt_xml]}").
- gsub(/</u,'&lt;').gsub(/>/u,'&gt;')
- 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]})/,
- '&nbsp;<a name="-\2" href="#_\2">&nbsp;<sup>\2</sup>&nbsp;</a> ' + #note- endnote-
- '\1\2 <a name="_\2" href="#-\2">&nbsp;<sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched)
- gsub(/(#{Mx[:en_b_o]})([*+]\d+)\s+(.+?)(#{Mx[:en_b_c]})/,
- '&nbsp;<a name="-\2" href="#_\2">&nbsp;<sup>\2</sup>&nbsp;</a> ' + #note- endnote-
- '\1\2 <a name="_\2" href="#-\2">&nbsp;<sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched)
- gsub(/(#{Mx[:en_a_o]})([*+]+)\s+(.+?)(#{Mx[:en_a_c]})/,
- '&nbsp;<a name="-\2" href="#_\2">&nbsp;<sup>\2</sup>&nbsp;</a> ' + #note- endnote-
- '\1\2 <a name="_\2" href="#-\2">&nbsp;<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,'●&nbsp;&nbsp;').
- gsub(/#{Mx[:nbsp]}/,'&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
deleted file mode 100644
index 5965994f..00000000
--- a/lib/sisu/v4/hub.rb
+++ /dev/null
@@ -1,741 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/hub.rb;hb=HEAD>
-
- * 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 'utils' # utils.rb
- require 'uri'
- class HubMaster
- def initialize(argv)
- pwd_the=Dir.pwd
- begin #% select what to do (set options & start processing (files selected if any))
- opt=SiSU_Commandline::Options.new(argv) # command line selection of what to do, files & operations set
- SiSU::Processing.new(opt).actions # do it
- 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
- attr_reader :opt
- 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
- number_of_files={}
- @opt.files.each_with_index do |fns,i|
- fn=fns.gsub(/(?:~(?:#{@r}))?\.ss[tm]$/,'')
- (number_of_files[fn].is_a?(Array)) \
- ? (number_of_files[fn] << i)
- : (number_of_files.store(fn,[i]))
- 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
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:cyan) 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
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:cyan) 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
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:cyan) 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
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:cyan) 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.fuchsia}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.fuchsia}#{fns}#{@cX.off}" << #{type} >> #{@cX.fuchsia}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.fuchsia}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.fuchsia}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=@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
- if @opt.act[:zap][:set]==:on #% --zap, -Z
- do_loop_files_on_given_option_pre
- end
- 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
- else
- if @opt.act[:html_seg][:set]==:on #% --html-seg
- require_relative 'html' # -h -H html.rb
- SiSU_HTML::Source.new(@opt).read
- end
- if @opt.act[:html_scroll][:set]==:on #% --html-scroll
- require_relative 'html' # -h -H html.rb
- SiSU_HTML::Source.new(@opt).read
- end
- 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 \
- or @opt.act[:pdf_p][:set]==:on \
- or @opt.act[:pdf_l][:set]==:on #% --pdf-l --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_discrete][:set]==:on #% --sqlite, -d DB sqlite
- require_relative 'dbi_discrete' # -d dbi_discrete.rb
- SiSU_DBI_Discrete::SQL.new(@opt).build
- end
- if @opt.act[:manifest][:set]==:on #% --manifest, -y
- require_relative 'manifest' # -y manifest.rb
- ((@opt.act[:sisupod][:set]==:on \
- || @opt.act[:share_source][:set]==:on) \
- && @opt.files.length < 2 ) \
- ? nil
- : SiSU_Manifest::Source.new(@opt).read
- end
- end
- end
- def do_loop_files_on_given_option_pre
- begin
- 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
- ensure
- 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
- 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
- if (@opt.act[:sisupod][:set]==:on \
- || @opt.act[:share_source][:set]==:on) \
- and @opt.act[:manifest][:set]==:on #% --manifest, -y
- require_relative 'manifest' # -y manifest.rb
- begin
- ensure
- OptionLoopFiles.new(@opt).loop_files_on_given_option_bundle do
- SiSU_Manifest::Source.new(@opt).read
- 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])
- 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
- @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.act[:psql][:set]==:on #% --pg, -D DB postgresql
- require_relative 'dbi'
- OptionLoopFiles.new(@opt).loop_files_on_given_option do
- 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'
- OptionLoopFiles.new(@opt).loop_files_on_given_option do
- SiSU_DBI::SQL.new(@opt).connect # -D -d dbi.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
- SiSU_Env::InfoProcessingFlag.new
- if @opt.act[:version_info][:set]==:on #% version information
- SiSU_Env::InfoAbout.new(@opt).sisu_version
- if @opt.cmd =~/[vVM]/
- SiSU_Screen::Ansi.new(@opt.cmd,' ' + File.dirname(__FILE__)).grey
- end
- 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[:dal][:set]==:on
- @retry_count= -1
- begin
- @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::Rescued.new($!,$@,@opt,@fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- @retry_count +=1
- retry unless @retry_count > 1
- ensure
- end
- end
- end
- def actions
- if @opt.act[:profile][:set]==:on
- require 'profile'
- end
- action_on_file_ =if @opt.act[:rsync][:set]==:on \
- && @opt.act[:site_init][:set]==:on
- :false
- elsif @opt.act[:rsync][:set]==:on \
- && @opt.act[:site_init][:set] !=:on
- :true
- elsif ((@opt.act[:psql][:set]==:on \
- or @opt.act[:sqlite][:set]==:on) \
- and @opt.mod.join(';') =~/--(?:createdb|init(?:ialize)?|create(?:all)?|createtables|recreate|drop(?:all))/)
- :false
- else
- (@opt.act[:dal][:set]==:on \
- || @opt.act[:manpage][:set]==:on \
- || @opt.act[:texinfo][:set]==:on \
- || @opt.act[:txt][:set]==:on \
- || @opt.act[:html][:set]==:on \
- || @opt.act[:html_scroll][:set]==:on \
- || @opt.act[:html_seg][:set]==:on \
- || @opt.act[:concordance][:set]==:on \
- || @opt.act[:xhtml][:set]==:on \
- || @opt.act[:epub][:set]==:on \
- || @opt.act[:odt][:set]==:on \
- || @opt.act[:xml_sax][:set]==:on \
- || @opt.act[:xml_dom][:set]==:on \
- || @opt.act[:pdf][:set]==:on \
- || @opt.act[:pdf_p][:set]==:on \
- || @opt.act[:pdf_l][:set]==:on \
- || @opt.act[:psql][:set]==:on \
- || @opt.act[:sqlite][:set]==:on \
- || @opt.act[:sqlite_discrete][:set]==:on \
- || @opt.act[:share_source][:set]==:on \
- || @opt.act[:sisupod][:set]==:on \
- || @opt.act[:qrcode][:set]==:on \
- || @opt.act[:hash_digests][:set]==:on \
- || @opt.act[:manifest][:set]==:on \
- || @opt.act[:scp][:set]==:on \
- || @opt.act[:webrick][:set]==:on \
- || @opt.act[:zap][:set]==:on) \
- ? (:true)
- : (:false)
- 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 action_on_file_ == :false \
- and (@opt.act[:psql][:set]==:on \
- or @opt.act[:sqlite][:set]==:on)
- if @opt.act[:psql][:set]==:on
- require_relative 'dbi'
- SiSU_DBI::SQL.new(@opt).connect
- end
- if @opt.act[:sqlite][:set]==:on
- require_relative 'dbi'
- SiSU_DBI::SQL.new(@opt).connect
- end
- elsif action_on_file_ == :true \
- or (
- @opt.cmd =~/^-/ \
- and @opt.cmd =~/([abCcDdeFGgHhIjikLMmNnoPpQqRrSsTtUuVvWwXxYyZ_0-9])/ \
- and @opt.mod.inspect !~/--(?:sitemaps|query|identify)/ \
- or @opt.mod.inspect =~/--(?:(?:sq)?lite|pg(?:sql)?)/
- )
- do_initialization
- if action_on_file_ == :true \
- and @opt.files.length > 0
- do_loops
- @msg,@msgs="\tsisu -W [to start ruby web-server on output directory]\n",nil if @opt.cmd =~/[vVM]/
- @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 action_on_file_ == :true \
- and @opt.files.length == 0
- STDERR.puts %{requested action requires valid sisu markup file [filename (.sst .ssm)] or wildcard (that includes a valid filename)}
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:fuchsia) if @opt.cmd =~/[MV]/
- 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
- SiSU_Markup::MarkupIdentify.new(@opt).markup_version?
- 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 #% sisu help refer to man pages
- SiSU_Env::InfoAbout.new(@opt).sisu_version
- SiSU_Env::InfoAbout.new(@opt).sisu_about
- 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
deleted file mode 100644
index 5028c245..00000000
--- a/lib/sisu/v4/i18n.rb
+++ /dev/null
@@ -1,707 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/i18n.rb;hb=HEAD>
-
- * 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' },
- ja: { c: 'ja', n: 'Japanese', t: '日本語 (Nihongo)', xlp: 'japanese' },
- ko: { c: 'ko', n: 'Korean', t: 'Korean', xlp: 'korean' },
- 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' },
- zh: { c: 'zh', n: 'Chinese', t: '中文', xlp: 'chinese' },
- 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],
- 'ja' => table[:ja],
- 'ko' => table[:ko],
- '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],
- 'zh' => table[:zh],
- '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] see constants.rb
-* 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
deleted file mode 100644
index db409f46..00000000
--- a/lib/sisu/v4/manifest.rb
+++ /dev/null
@@ -1,930 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/manifest.rb;hb=HEAD>
-
- * 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
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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=(@o_str.dump_or_redirect?) \
- ? './image'
- : %{#{@f.path_rel_links.html_scroll_2}_sisu/image_sys}
- @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::Defaults.new.url_decoration
- @stylesheet=SiSU_Style::CSS_HeadInfo.new(md).stylesheet
- @fn_lng=(@f.output_dir_structure.by_language_code?) \
- ? ''
- : ('.' + md.opt.lng)
- 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==:src #check
- %{<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> &nbsp;&nbsp;#{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|
- lngc=SiSU_Env::FilenameLanguageCodeInsert.new(@md.opt,lc).language_code_insert
- fnh={
- fn: @md.fnb,
- lng: lngc,
- }
- mn=@f.base_filename.manifest(fnh)
- if @o_str.dump_or_redirect? #does not work for --redirect or --dump
- mp="#{@f.output_path.base.dir}"
- 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"
- 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"
- mt="#{mp}/#{mn}"
- mr=mn
- mu="#{url}/manifest/#{mn}"
- else
- mp="#{@f.output_path.base.dir}/#{@md.fnb}"
- 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
- @m=@m.uniq
- end
- def languages(id,file)
- @manifest[:html] << %{<tr><th class="left"><div id="horizontal_links"><ul id="horizontal">\n}
- published_manifests?.each do |l|
- 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>&nbsp;&nbsp;&nbsp;</li>}
- end
- @manifest[:html] << %{</ul></div></th></tr>\n}
- end
- def published_languages(id)
- published_manifests?.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">&nbsp;</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">&nbsp;&nbsp;#{@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_discrete.dir)==true
- id,file='SQLite3 file',@f.base_filename.sqlite_discrete
- pth=@f.output_path.sqlite_discrete.dir
- rel=@f.output_path.sqlite_discrete.rel_sm
- url=@f.output_path.sqlite_discrete.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='Markup (SiSU source)'
- published_languages(id)
- end
- end
- def qrc_image
- fn=(@f.output_dir_structure.by_filename?) \
- ? 'sisu_manifest'
- : @md.fnb
- pth=((@o_str.dump_or_redirect?) \
- || (@f.output_dir_structure.by_filename?)) \
- ? '.'
- : 'qrcode'
- img_md="#{pth}/#{fn}#{@fn_lng}.md.png"
- img_title="#{pth}/#{fn}#{@fn_lng}.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.rel_sm
- 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 #%
- if defined? @md.title.full \
- and @md.title.full=~/\S+/
- id,info=@translate.full_title,@md.title.full
- metadata(id,info)
- end
- end
- if defined? @md.creator #%
- 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.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
- end
- if defined? @md.rights
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/ #dc
- id,info=@translate.rights,@md.rights.all
- metadata(id,info)
- end
- end
- if defined? @md.date #%
- 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.publisher \
- and @md.publisher=~/\S+/ #dc
- id,info=@translate.publisher,@md.publisher
- metadata(id,info)
- end
- if defined? @md.notes #%
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/
- id,info=@translate.description,@md.notes.description
- metadata(id,info)
- end
- if defined? @md.notes.abstract \
- and @md.notes.abstract=~/\S+/
- id,info=@translate.abstract,@md.notes.abstract
- metadata(id,info)
- end
- if defined? @md.notes.comment \
- and @md.notes.comment=~/\S+/
- id,info=@translate.comments,@md.notes.comment
- metadata(id,info)
- end
- if defined? @md.notes.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
- end
- if defined? @md.title #%
- 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
- end
- if defined? @md.classify #%
- 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|
- @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 defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/
- id,info=@translate.subject,@md.classify.subject
- metadata(id,info)
- end
- if defined? @md.classify.keywords \
- and @md.classify.keywords=~/\S+/
- id,info=@translate.keywords,@md.classify.keywords
- metadata(id,info)
- end
- if defined? @md.classify.loc \
- and @md.classify.loc=~/\S+/
- id,info=@translate.cls_loc,@md.classify.loc
- metadata(id,info)
- end
- if defined? @md.classify.dewey \
- and @md.classify.dewey=~/\S+/
- id,info=@translate.cls_dewey,@md.classify.dewey
- metadata(id,info)
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/
- id,info=@translate.coverage,@md.notes.coverage
- metadata(id,info)
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/
- id,info=@translate.relation,@md.notes.relation
- metadata(id,info)
- end
- if defined? @md.notes.type \
- and @md.notes.type=~/\S+/ #dc
- id,info=@translate.type,@md.notes.type
- metadata(id,info)
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/
- id,info=@transate.format,@md.notes.format
- metadata(id,info)
- end
- end
- if defined? @md.identifier #%
- if defined? @md.identifier.oclc \
- and @md.identifier.oclc=~/\S+/
- id,info=@translate.cls_oclc,@md.identifier.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.identifier.pg \
- and @md.identifier.pg=~/\S+/
- id,info=@translate.cls_gutenberg,@md.identifier.pg
- metadata(id,info)
- end
- if defined? @md.identifier.isbn \
- and @md.identifier.isbn=~/\S+/
- id,info=@translate.cls_isbn,@md.identifier.isbn
- metadata(id,info)
- end
- end
- if defined? @md.original.source \
- and @md.original.source=~/\S+/
- id,info=@translate.source,@md.original.source
- metadata(id,info)
- 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]})#{@md.sisu_version[:install_method]}"
- 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
- make=SiSU_Env::ProcessingSettings.new(@md)
- minitoc=SiSU_HTML_MiniToc::TocMini.new(@md,data).songsheet.join("\n")
- vz=SiSU_Viz::Defaults.new
- format_head_toc=SiSU_HTML_Format::HeadToc.new(@md)
- @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">
-#{format_head_toc.seg_head_navigation_band(:manifest)}
-WOK
- if make.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
- if @o_str.dump_or_redirect?
- elsif @f.output_dir_structure.by_language_code? \
- or @f.output_dir_structure.by_filetype?
- pth_local=@f.output_path.manifest.dir
- pth_rel='.'
- else
- pth_local=@f.output_path.base.dir
- pth_rel='..'
- end
- pth_rel_home=if @env.output_dir_structure.by? == :language
- '../..'
- elsif @env.output_dir_structure.by? == :filetype
- '..'
- elsif @env.output_dir_structure.by? == :filename
- '..'
- else '..'
- end
- output_organised_by="(output organised by #{@env.output_dir_structure.by?})"
- harvest=(FileTest.file?("#{pth_local}/authors#{@fn_lng}.html") \
- && FileTest.file?("#{pth_local}/topics#{@fn_lng}.html")) \
- ? %{<p class="small"><a href="#{pth_rel_home}/index.html">.:</a> other document manifests: [<a href="#{pth_rel}/authors#{@fn_lng}.html">authors</a>] [<a href="#{pth_rel}/topics#{@fn_lng}.html">topics</a>] #{output_organised_by}</p>}
- : %{<p class="small"><a href="#{pth_rel_home}/index.html">#{output_organised_by}</p>}
- manifest_title=%{<p class="bold">#{@translate.manifest_description}</p>#{harvest}}
- @manifest[:html] <<<<WOK
-<div id="horizontal_links">
-#{manifest_title}
-</div>
-<h1 class="small">#{@md.title.full}</h1>
-<p class="bold">#{@md.author}</p>
-<div id="horizontal_links"><p class="bold">
-<p class="small">
-&nbsp;&nbsp;<a href="#output">Document, Available Filetypes</a>
-</p>
-<p class="small">
-&nbsp;&nbsp;<a href="#metadata">Document Metadata</a>
-</p>
-<p class="tiny">
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="#links">metadata suggested links (if any)</a>
-</p>
-</div>
-<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">&nbsp;</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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location 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
deleted file mode 100644
index fd4e365d..00000000
--- a/lib/sisu/v4/manpage.rb
+++ /dev/null
@@ -1,423 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/manpage.rb;hb=HEAD>
-
- * 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
- @@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$/
- @@notes=:end
- 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)
- 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
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Defaults.new.url_decoration
- @vz=SiSU_Viz::Defaults.new
- @tab="\t"
- @br="\n"
- @@notes=:end
- @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(dob='')
- para=dob.obj.gsub(/#{Mx[:br_line]}/,"\n")
- notes=para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+(?:\s|\n)+.+?)(?:#{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]}|#{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,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(/(^|&nbsp;|#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*'). #man page requires
- gsub(/\s(.[BI])\s/,' ').
- 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
- @manpage[:tail] <<<<WOK
-#{@br}
-.TP
-.SH SEE ALSO
- sisu(1),
- sisu-epub(1),
- sisu-harvest(1),
- sisu-html(1),
- sisu-odf(1),
- sisu-pdf(1),
- sisu-pg(1),
- sisu-sqlite(1),
- sisu-txt(1).
- sisu_vim(7)
-.TP
-.SH HOMEPAGE
- More information about SiSU can be found at <http://www.sisudoc.org/> or <http://www.jus.uio.no/sisu/>
-.TP
-.SH SOURCE
- <http://sources.sisudoc.org/>
-.TP
-.SH AUTHOR
- SiSU is written by Ralph Amissah <ralph@amissah.com>
-WOK
- end
- def manpage_structure(dob='',hname='') #% Used to extract the structure of a document
- if dob.is==:heading
- lv=dob.ln
- 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 << @br
- end
- else
- @manpage[:body] << if wrapped =~/^\.BI\s/ # main text, contents, body KEEP
- '.TP' << @br << wrapped.gsub(/(^\.B)I\s/,'\1 ') # sleight ... simpler output (check gsub!)
- else
- @br + '.BR' + @br << wrapped
- end
- end
- if @@endnotes[:para] \
- and @@notes==:foot #edit out to switch off endnotes following paragraph to which they belong
- @@endnotes[:para].each { |e| @manpage[:body] << e << @br }
- elsif @@endnotes[:para] \
- and @@notes==:end
- end
- @@endnotes[:para]=[]
- end
- def markup(data) # Used for major markup instructions
- 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 # stop call
- table_message='[table omitted, see other document formats]'
- #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,
- "\n.BI \\1\\2#{Mx[:br_line]}").
- gsub(/\s*#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}([,.:!?](?: |$))?/m,
- "#{Mx[:br_line]}.B \\1\\2#{Mx[:br_line]}").
- gsub(/\s*#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}([,.:!?](?: |$))?/,
- "\n.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)
- 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") # watch
- end
- dob.obj=dob.obj.gsub(/(^|&nbsp;|#{Mx[:nbsp]}|\s|\*)\\\*/,'\1\\\\\*'). #man page requires
- gsub(/┆/,'|').
- gsub(/^(\.\S{3,})/m,' \1') # ^\. used by interpreter, disable when use not intended
- dob.obj=dob.obj.gsub(/&#126;/,'~') if dob.obj #manpages use this
- if dob.is ==:code
- dob.obj=dob.obj.gsub(/(^|[^}])_([<>])/m,'\1\2'). # _> _<
- gsub(/(^|[^}])_([<>])/m,'\1\2'). # _<_<
- gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+(\s*)/m,"\n\\1"). # watch
- gsub(/\A(.+?)\s*\Z/m,".nf\n\\1\n.fi")
- end
- dob.obj=dob.obj.gsub(/(?:#{Mx[:br_line]}|#{Mx[:br_nl]})+\s*/m,"\n\n") # watch
- dob.obj=dob.obj.gsub(/#{Mx[:gl_o]}:name#\S+?#{Mx[:gl_c]}/mi,''). #added
- gsub(/#{Mx[:br_page]}\s*|#{Mx[:br_page_new]}|#{Mx[:br_page_line]}/,''). # remove page breaks, you may wish to have a line across the page break instead
- 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(/&nbsp;|#{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"]')
- 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(/(?:#{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)
- 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
- 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 @@notes==:end
- 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=[]
- 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(/[ \t]+$/m,'').
- gsub(/^\A[ ]*\Z/m,'')
- (line=~/^\A\Z/) \
- ? (emptyline+=1)
- : emptyline=0
- if emptyline < 2 #remove additional empty lines
- filename_manpage.puts line #unix manpage
- end
- end
- end
- else filename_manpage.puts para #unix manpage # /^([*=-]|\.){5}/
- end
- end
- filename_manpage.close
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/manpage_format.rb b/lib/sisu/v4/manpage_format.rb
deleted file mode 100644
index e361825a..00000000
--- a/lib/sisu/v4/manpage_format.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/manpage_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: manpage formatting template
-
-=end
-module SiSU_ManpageFormat
- require_relative 'param' # param.rb
- include SiSU_Param
- include SiSU_Viz
- class ParagraphNumber
- def initialize(paranum)
- @paranum=/(\d+)/m.match(paranum)[1]
- end
- def display
- @paranum.gsub(/(\d+)/,'<font size="1" color="#777777">&nbsp;&nbsp;\1</font>')
- end
- def name
- @paranum.gsub(/(\d+)/,'<a name="\1"></a>')
- end
- def goto
- @paranum.gsub(/(\d+)/,'<a href="#\1">')
- end
- end
- class FormatTextObject
- def initialize(md,dob)
- @md,@dob=md,dob
- rgx=/#{Mx[:en_a_o]}[\d*+]+\s+(.+?)#{Mx[:en_a_c]}/
- @dob.obj.gsub!(rgx,'\1') if @dob.obj =~rgx
- @vz=SiSU_Viz::Defaults.new
- end
- def scr_endnote_body
- "<endnote>#{@dob.obj}</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 XML
- end
-end
-__END__
diff --git a/lib/sisu/v4/odf.rb b/lib/sisu/v4/odf.rb
deleted file mode 100644
index adaaea87..00000000
--- a/lib/sisu/v4/odf.rb
+++ /dev/null
@@ -1,807 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/odf.rb;hb=HEAD>
-
- * 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
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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_Viz::Defaults.new
- @tab="\t"
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- @br=(@md.opt.cmd =~/M/) ? '' : ''
- #@br=(@md.opt.cmd =~/M/) ? "\n" : ''
- end
- def songsheet
- begin
- pre
- @data=markup(@dal_array)
- 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
- 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 /> &lt;<text:a xlink:type="simple" xlink:href="#{manifest}">#{manifest}</text:a>&gt;</text:p>}
- @@odf[:tail] << %{\n<text:p text:style-name="P_normal">SiSU: &lt;<text:a xlink:type="simple" xlink:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>&gt; and &lt;<text:a xlink:type="simple" xlink:href="http://www.sisudoc.org">www.sisudoc.org</text:a>&gt;</text:p>}
- @@odf[:tail] << "\n</office:text></office:body></office:document-content>"
- end
- def set_bookmark_tag(dob)
- SiSU_ODF_Format::Tags.new.set_bookmark_tag(dob)
- end
- def heading(dob,p_num)
- dob=footnote(dob)
- 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 || @md.pagebreak) \
- and (@md.pagenew =~m or @md.pagebreak =~m)
- '<text:p text:style-name="P_normal_page_new"> </text:p>'
- elsif @md.pageline \
- and @md.pageline =~m #fix
- 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)
- 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)
- 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=img[1]
- 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)
- 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)
- 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=footnote(dob)
- 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(/&amp;nbsp;|&nbsp;|#{Mx[:nbsp]}/,'&#160;').
- gsub(/</,'&lt;').gsub(/>/,'&gt;').
- gsub(/&lt;(text:span text:style-name="Span_\S+?"|\/text:span)&gt;/,'<\1>'). #works, not ideal
- gsub(/#{Mx[:br_line]}/,'<br />').
- gsub(/&lt;br(?:\s+\/)?&gt;/,'<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)
- 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 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(/&lt;text:a xlink:type="simple" xlink:href="(.+?)"&gt;/m,'<text:a xlink:type="simple" xlink:href="\1">').
- gsub(/&lt;(\/text:a)&gt;/,'<\1>').
- gsub(/&lt;(text:note text:id=.+?)&gt;/,'<\1>').
- gsub(/&lt;(text:p text:style-name="Footnote")&gt;/,'<\1>').
- gsub(/&lt;(\/?text:(?:note-citation|note-body|note|p))&gt;/,'<\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(/&lt;text:a xlink:type="simple" xlink:href="(.+?)"&gt;/m,'<text:a xlink:type="simple" xlink:href="\1">').
- gsub(/&lt;(\/text:a)&gt;/,'<\1>').
- gsub(/&lt;(text:note text:id=.+?)&gt;/,'<\1>').
- gsub(/&lt;(text:p text:style-name="Footnote")&gt;/,'<\1>').
- gsub(/&lt;(\/?text:(?:note-citation|note-body|note|p))&gt;/,'<\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/,'&#160;&#160;')
- 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
- dob=footnote(dob) #check
- 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_page_line]
- dob=br.br_page_line
- 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
- 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)
- 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(/</,'&lt;').gsub(/>/,'&gt;')
- 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(/&nbsp;/,'&#160;')
- if w !~/(?:&\S{2,7}?;)+/
- w=w.gsub(/&/,'&amp;')
- end
- if w !~/&\S{1,7}?;(?:&\S{1,7}?;)+/ #imperfect
- w=w.gsub(/(&\S{1,7};)+&/,'\1&amp;')
- 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(/(^|[^}])_(?:<|&lt;)/m,'\1&lt;').gsub(/(^|[^}])_(?:>|&gt;)/m,'\1&gt;').
- gsub(/(^|[^}])_(?:<|&lt;)/m,'\1&lt;').gsub(/(^|[^}])_(?:>|&gt;)/m,'\1&gt;')
- 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(/&#169;/,'©'). #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,'&#060;').
- gsub(/\\copy(?:right)?\b/,'&#169;').
- gsub(/\\trademark\b|\\tm\b/,'&#174;').
- gsub(/\44/,'&#36;'). #$ 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
- 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="&apos;Nimbus Sans L&apos;" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, &apos;Lucida Sans&apos;, &apos;Arial Unicode MS&apos;" style:font-pitch="variable"/><style:font-face style:name="Nimbus Roman No9 L" svg:font-family="&apos;Nimbus Roman No9 L&apos;" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Bitstream Vera Sans" svg:font-family="&apos;Bitstream Vera Sans&apos;" 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 publish
- content=[]
- br_pg='<text:p text:style-name="P_normal_page_new"> </text:p>'
- 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
deleted file mode 100644
index 79f68478..00000000
--- a/lib/sisu/v4/odf_format.rb
+++ /dev/null
@@ -1,667 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/odf_format.rb;hb=HEAD>
-
- * 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">#{Dx[:ocn_o]}\\1#{Dx[:ocn_c]}</text:span>})
- { 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">#{Dx[:ocn_o]}\\1#{Dx[:ocn_c]}</text:span>})
- { 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,"&amp;")
- 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_Viz::Defaults.new
- 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_Viz::Defaults.new
- 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 br_page_line
- sep='_'
- @t_o.obj=%{<text:p text:style-name="P_normal">#{sep*60}</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
deleted file mode 100644
index 4f5087dc..00000000
--- a/lib/sisu/v4/options.rb
+++ /dev/null
@@ -1,1077 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/options.rb;hb=HEAD>
-
- * 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
- require_relative 'param_make' # param_make.rb
- @@sisu_call_origin_path=nil
- class HeaderCommon
- def sisu_document_make_instructions
- @pagenew=@pagebreak=@pageline=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@num_top=@i18n=@man_section=@emphasis_set_to=@bold_match_list=@italics_match_list=@substitution_match_list=@footer_links=@home_button_links=@links=nil
- make_instruct_array=SiSU_Env::GetInit.new.sisu_document_make.makefile_read
- @makeset=false
- if make_instruct_array
- make_instruct_array.each do |para| #% scan document
- if para =~/^(?:@make:|@links:)[+-]?\s/
- case para
- when /^@make:(.+)/m #% header processing - make
- @env=SiSU_Env::InfoEnv.new
- @make=SiSU_Param_Make::MdMake.new($1.strip,@opt,@env).make
- makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct
- @makeset=true
- @pagenew=makes[:pagenew]
- @pagebreak=makes[:pagenew]
- @pageline=makes[:pageline]
- @toc=makes[:toc]
- @lv1=makes[:lv1]
- @lv2=makes[:lv2]
- @lv3=makes[:lv3]
- @lv4=makes[:lv4]
- @lv5=makes[:lv5]
- @lv6=makes[:lv6]
- @num_top=makes[:num_top]
- @i18n=makes[:i18n]
- @man_section=makes[:man_section]
- @emphasis_set_to=makes[:emphasis_set_to]
- @bold_match_list=makes[:bold_match_list]
- @italics_match_list=makes[:italics_match_list]
- @substitution_match_list=makes[:substitution_match_list]
- @footer_links=makes[:footer_links]
- @home_button_links=makes[:home_button_links]
- @home_button_image=makes[:home_button_image]
- @cover_image=makes[:cover_image]
- when /^@links:(.+)/m #% header processing - make
- make_links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links
- @links,@links_append=make_links.links,make_links.append?
- end
- end
- end #% here endeth the common header loop
- end
- { makeset: @makeset,
- pagenew: @pagenew,
- pagebreak: @pagebreak,
- pageline: @pageline,
- toc: @toc,
- lv1: @lv1,
- lv2: @lv2,
- lv3: @lv3,
- lv4: @lv4,
- lv5: @lv5,
- lv6: @lv6,
- num_top: @num_top,
- i18n: @i18n,
- man_section: @man_section,
- emphasis_set_to: @emphasis_set_to,
- bold_match_list: @bold_match_list,
- italics_match_list: @italics_match_list,
- substitution_match_list: @substitution_match_list,
- footer_links: @footer_links,
- home_button_links: @home_button_links,
- home_button_image: @home_button_image,
- cover_image: @cover_image,
- links: @links,
- links_append: @links_append
- }
- end
- end
- class Options
- attr_accessor :cmd,:mod,:act,:dir_structure_by,:lingual,: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,:make_instructions,:make_instructions_pod
- @@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?
- @lingual=SiSU_Env::EnvCall.new.mono_multi_lingual?
- @@sisu_call_origin_path ||=Dir.pwd
- @base_path=@@sisu_call_origin_path
- r=Px[:lng_lst_rgx]
- u=/.+?\/([^\/]+)(?:\/(?:#{r})$|$)/
- @base_stub=@base_path.gsub(u,'\1')
- @a=sisu_glob_rules(a)
- @a.freeze
- @make_instructions=HeaderCommon.new.sisu_document_make_instructions
- @make_instructions_pod=nil
- init
- end
- def find_all(find_flag,opt)
- if find_flag
- 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
- 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})}
- 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 --v4 -0 [filename(s)] configured as flag default
- shortcut=SiSU_Env::InfoProcessingFlag.new
- @mod=['--v4']
- @cmd=shortcut.cf_0 + 'm'
- end
- if @cmd =~/[vVM]/ \
- && @cmd !~/-[ku]*v[ku]*$/
- SiSU_Screen::Ansi.new(@cmd,"\tsisu " + @cmd + ' ' + @mod.join(' ') + ' ' + @files.join(' ') + "\n").print_brown
- end
- end
- @@act ? @act=@@act : @@act=@act=opt_act
- self
- end
- def sisu_document_make_pod
- def makefile_name
- SiSU_Env::GetInit.new.sisu_document_make.makefile_name
- end
- def makefile(pod_make_path)
- "#{pod_make_path}/#{makefile_name}"
- end
- def makefile_read(pod_make_path)
- if FileTest.file?(makefile(pod_make_path))
- sisu_doc_makefile=IO.read(makefile(pod_make_path), mode: 'r:utf-8')
- sisu_doc_makefile.split(/\s*\n\s*\n/m)
- else nil
- end
- end
- self
- end
- def set_files_and_paths_and_general_extract(s)
- c,w='',''
- m,f,pth,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)
- pod_make_path=fullname + '/sisupod/doc/_sisu'
- make_instruct_array=sisu_document_make_pod.makefile_read(pod_make_path)
- @make_instructions_pod=HeaderCommon.new(make_instruct_array).sisu_document_make_instructions
- Dir.chdir(pt.realpath)
- 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
- if not m.empty? \
- and m.inspect =~/"--pdf-/
- mod << '--pdf'
- m.each do |s|
- if s =~ /^--pdf-(?:(?:l|landscape)(?:-(?:a4|letter|a5|b5|legal))?|(?:a4|letter|a5|b5|legal)-(?:l|landscape))$/
- mod << '--landscape'
- end
- if s =~ /^--pdf-(?:(?:p|portrait)(?:-(?:a4|letter|a5|b5|legal))?|(?:a4|letter|a5|b5|legal)-(?:p|portrait))$/
- mod << '--portrait'
- end
- if s =~ /^--pdf(?:-(?:a4|letter|a5|b5|legal)(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))(?:-(?:a4|letter|a5|b5|legal)))$/
- if s =~ /^--pdf(?:-a4(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))-a4)$/
- mod << '--papersize-a4'
- end
- if s =~ /^--pdf(?:-a5(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))-a5)$/
- mod << '--papersize-a5'
- end
- if s =~ /^--pdf(?:-b5(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))-b5)$/
- mod << '--papersize-b5'
- end
- if s =~ /^--pdf(?:-letter(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))-letter)$/
- mod << '--papersize-letter'
- end
- if s =~ /^--pdf(?:-legal(?:-(?:[lp]|landscape|portrait))?|(?:-(?:[lp]|landscape|portrait))-legal)$/
- mod << '--papersize-legal'
- end
- end
- end
- mod=mod.uniq
- end
- unless m.empty?
- m.each do |s|
- case s
- when /^--(?:color-toggle)$/; c=c+'c'
- when /^--(?:color-off)$/; c=c+'k'
- when /^--(?:conf|config|configure|init|initialize|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 /^--(?:html-scroll|html-seg)$/; c=c+'H'
- mod << s
- when /^--(?:epub)$/; c=c+'e'
- when /^--(?:od[ft])$/; c=c+'o'
- when /^--(?:pdf)$/; c=c+'p'
- when /^--pdf-(?:a4|a5|b5|legal|letter)$/; c=c+'p'
- when /^--pdf-(?:p|l|portrait|landscape)$/; c=c+'L'
- when /^--pdf-(?:p(?:ortrait)?|l(?:andscape)?)-(?:a4|letter|a5|b5|legal)$/; c=c+'L'
- when /^--pdf-(?:a4|letter|a5|b5|legal)-(?:p(?:ortrait)?|l(?:andscape)?)$/; c=c+'L'
- 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 /^--(?:version)$/; c=c+'v'
- when /^--(?:verbose[=-]0|quiet|silent)$/; c=c+'q'
- else mod << s #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 =~/[abegHhIiLNOoPpQTtwXxyz]/ \
- 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 =~/[abeHhIiNopQSstwXxz]/ \
- 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]=(mod.inspect =~/"--license/) \
- ? { bool: true, set: :on }
- : { bool: false, set: :na }
- act[:site_init]=(cmd =~/C/ \
- || mod.inspect =~/"--init"|"--initialize"|"--init-site"|"--conf"|"--config"|"--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 (cmd =~/k/ \
- || 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[:default_language]=if mod.inspect =~/"--(?:default-)?language[-=](\S{2})"/
- { set: :on, code: $1 }
- elsif lng_base
- { set: :on, code: lng_base }
- else { set: :na, code: 'en' }
- end
- act[:i18n]=if mod.inspect =~/"(?:--monolingual|--i18n-mono(?:lingual)?)"/ #if monolingual possible outputs output_by :filename & :filetype only, without language code in default language name; give warning of conflict settings if monolingual & :language selected
- @lingual=:mono
- { set: :mono }
- elsif mod.inspect =~/"(?:--multilingual|--i18n-multi(?:lingual)?)"/
- @lingual=:multi
- { set: :multi }
- else { set: :na }
- end
- act[:output_by]=if mod.inspect =~/"--(?:output-)?by-language"/
- @dir_structure_by=:language
- { set: :language }
- elsif mod.inspect =~/"--(?:output-)?by-filename"/
- @dir_structure_by=:filename
- { set: :filename }
- elsif mod.inspect =~/"--(?:output-)?by-filetype"/
- @dir_structure_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)-manifest"/ \
- || act[:switch][:off].inspect =~/"manifest"/ #place lower
- { bool: false, set: :off }
- 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]=if (cmd =~/h/ \
- || mod.inspect =~/"--html"/)
- act[:html_scroll]={ bool: true, set: :on }
- act[:html_seg]={ bool: true, set: :on }
- { bool: true, set: :on }
- else
- act[:html_scroll]=(mod.inspect =~/"--html-scroll"/) \
- ? { bool: true, set: :on }
- : { bool: false, set: :na }
- act[:html_seg]=(mod.inspect =~/"--html-seg"/) \
- ? { bool: true, set: :on }
- : { bool: false, set: :na }
- { bool: false, set: :na }
- end
- 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 }
- if (cmd =~/p/ \
- || mod.inspect =~/"--pdf"/)
- if mod.inspect =~/"--portrait"/
- act[:pdf]= { bool: false, set: :na }
- act[:pdf_l]={ bool: false, set: :na }
- act[:pdf_p]={ bool: true, set: :on }
- elsif mod.inspect =~/"--landscape"/
- act[:pdf]= { bool: false, set: :na }
- act[:pdf_l]={ bool: true, set: :on }
- act[:pdf_p]={ bool: false, set: :na }
- else
- act[:pdf]= { bool: true, set: :on }
- act[:pdf_l]={ bool: true, set: :on }
- act[:pdf_p]={ bool: true, set: :on }
- end
- else
- act[:pdf]= { bool: false, set: :na }
- act[:pdf_p]= { bool: false, set: :na }
- act[:pdf_l]= { bool: false, set: :na }
- act[:pdf_a4]= { bool: false, set: :na }
- act[:pdf_a5]= { bool: false, set: :na }
- act[:pdf_b5]= { bool: false, set: :na }
- act[:pdf_letter]={ bool: false, set: :na }
- act[:pdf_legal]= { bool: false, set: :na }
- end
- if act[:pdf][:set]==:on \
- or act[:pdf_p][:set]==:on \
- or act[:pdf_l][:set]==:on
- act[:pdf_a4]=if mod.inspect =~/"--a4"|--papersize-a4"/ \
- or mod.inspect =~/"--papersize=\S*a4\b\S*"/ #--papersize=a4,a5
- { bool: true, set: :on }
- else
- { bool: false, set: :na }
- end
- act[:pdf_a5]=if mod.inspect =~/"--a5"|"--papersize-a5"/ \
- or mod.inspect =~/"--papersize=\S*a5\b\S*"/ #--papersize=a4,a5
- { bool: true, set: :on }
- else
- { bool: false, set: :na }
- end
- act[:pdf_b5]=if mod.inspect =~/"--b5"|"--papersize-b5"/ \
- or mod.inspect =~/"--papersize=\S*b5\b\S*"/
- { bool: true, set: :on }
- else
- { bool: false, set: :na }
- end
- act[:pdf_letter]=if mod.inspect =~/"--letter"|"--papersize-letter"/ \
- or mod.inspect =~/"--papersize=\S*letter\b\S*"/
- { bool: true, set: :on }
- else
- { bool: false, set: :na }
- end
- act[:pdf_legal]=if mod.inspect =~/"--legal"|"--papersize-legal"/ \
- or mod.inspect =~/"--papersize=\S*legal\b\S*"/
- { bool: true, set: :on }
- else
- { bool: false, set: :na }
- end
- end
- 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_discrete]=(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[: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[:zap]=(cmd =~/Z/ \
- || mod.inspect =~/"--zap"|"--delete"/) \
- ? { 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
- 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=(fns.nil? || fns.empty?) \
- ? '' \
- : (fns[/(.+?(?:sst|ssm))(?:\.sst)?/,1])
- end
- def fng
- @fng=(fno.nil? || fno.empty?) \
- ? '' \
- : (fno.gsub(/(?:~(?:#{Px[:lng_lst_rgx]}))?(\.ss[tm])$/,'\1'))
- end
- def fns
- @fns
- end
- def fnl
- @fns.gsub(/(\S+?)((?:\.ssm)?\.sst)/,"\\1.#{lng}\\2")
- end
- def what
- @what
- end
- def fnb
- (fns.nil? || fns.empty?) \
- ? '' \
- : (fns[/(.+?)\.(?:(?:-|ssm\.)?sst|ssm)$/,1])
- end
- def fnc
- @fnc=(@fns =~/\.(?:ssm\.sst|ssm)$/) \
- ? fnb + '.ssm.sst'
- : @fns
- end
- def fncb
- @fncb=(@fns =~/(?:\~\S{2,3})?\.(?:ssm\.sst|ssm)$/) \
- ? fnb + '.ssm.sst'
- : @fns.gsub(/(?:\~\S{2,3})?(\.sst)$/,'\1')
- end
- end
-end
-__END__
-note usually named @opt is carried in Param (usually as @md.opt), @opt is a
-subset of @md where @md is passed, contents of @opt are available as @md.opt
-passing @opt as well is duplication check for fns & fnb
diff --git a/lib/sisu/v4/param.rb b/lib/sisu/v4/param.rb
deleted file mode 100644
index 86dd6a01..00000000
--- a/lib/sisu/v4/param.rb
+++ /dev/null
@@ -1,1435 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/param.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: parameters extracted from input file(s) for program use
-
-=end
-module SiSU_Param
- require 'uri'
- require 'pstore'
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'param_make' # param_make.rb
- require_relative 'param_identify_markup' # param_identify_markup.rb
- @@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: {} }
- @@yaml=@@yamladdr=nil
- @@trigger=nil
- @@lv,@@flag={},{}
- @@tex_backslash="\\\\"
- class Parameters
- @@publisher='SiSU scribe'
- @@md=@@fns=@@pth=nil
- def initialize(opt)
- @opt=opt
- @cX||=SiSU_Screen::Ansi.new(opt.cmd)
- @cmd,@mod=opt.cmd,opt.mod
- @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
- 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 @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)
- store.transaction do
- @md=store['md']
- end
- @md
- else
- param_msg='Parameters extracted'
- fns_array=@env.read_source_file(@opt.fns)
- @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(@opt.cmd,param_msg,@md.title.main).txt_grey if @opt.cmd =~/[MVv]/
- end
- @@md=@md
- else @@md
- end
- @@md.opt=@opt
- @@md
- end
- class MdDefault
- def rights(author,date)
- @author,@date=author,date
- def all
- s=nil
- if @author
- s ||=((@date =~/((?:1[4-9]|2[01])\d{2})/ ) \
- ? ("Copyright (C) #{$1} #{@author}")
- : ('Copyright (C)' + @author)) #matches years 1400 through 21\d\d
- end
- s
- end
- def text
- all
- end
- def copyright
- def all
- s=nil
- if @author
- s ||=((@date =~/((?:1[4-9]|2[01])\d{2})/ ) \
- ? ("Copyright (C) #{$1} #{@author}")
- : ('Copyright (C)' + @author)) #matches years 1400 through 21\d\d
- end
- s
- end
- def text
- all
- end
- self
- end
- self
- end
- end
- class MdMake < SiSU_Param_Make::MdMake
- end
- class Md
- def initialize(str,opt,env)
- @s,@opt,@env=str,opt,env
- end
- def validate_length(s,l,n)
- #s=(s.length <= l) ? s : nil
- s=if s.is_a?(String) \
- and s.length <= l
- s
- elsif s.is_a?(NilClass)
- nil
- elsif s.class !=String
- STDERR.puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}"
- s
- else
- 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=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 }
- else
- x=b[0].scan(/[^,]+/)
- if x.length==1
- @name_a_h << { the: x[0].strip }
- elsif x.length==2
- @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'
- end
- end
- l=@name_a_h.length
- name_str=''
- @name_a_h.each_with_index do |a,i|
- name_str += if a[:others]
- z=(((l - i) > 1) ? ', ' : '')
- "#{a[:others].strip} #{a[:the].strip}" + z
- else
- z=(((l - i) > 2) ? ', ' : '')
- "#{a[:the].strip}" + z
- end
- end
- { name_a_h: @name_a_h, name_str: name_str }
- else nil
- end
- end
- def build_hash(arr)
- @h={}
- arr.each_with_index do |x,i|
- a,b=nil,nil
- if x =~/^%\s/ #ignore comment
- elsif x =~/:(\S+?):\s+(.+)/
- a,b=/:(\S+?):\s+(.+)\Z/m.match(x)[1,2]
- b=b.gsub(/\s*<br(?: \/)?>\s*/,' \\\\\\ ')
- 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
- else
- end
- @h[a]=b
- end
- @h
- end
- def title
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def main
- s=@h['main']
- l,n=Db[:col_title_part],'title.main'
- validate_length(s,l,n)
- end
- def sub
- s=@h['subtitle']
- l,n=Db[:col_title_part],'title.subtitle'
- validate_length(s,l,n)
- end
- def edition
- s=@h['edition']
- l,n=Db[:col_title_edition],'title.edition'
- validate_length(s,l,n)
- end
- def note
- s=@h['note']
- l,n=Db[:col_info_note],'title.note'
- validate_length(s,l,n)
- end
- def short
- 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']
- l,n=Db[:col_title],'title.full'
- validate_length(s,l,n)
- end
- def language
- s=@h['language']
- l,n=Db[:col_language],'title.language'
- validate_length(s,l,n)
- end
- 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)
- end
- self
- end
- def creator #there are sub categories that need to be catered for and sometimes more than one author etc.; implement array.to_s.length validation test later, current test on string approximate as string is not used
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def author
- @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']
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.author'
- validate_length(s,l,n)
- else nil
- end
- end
- def contributor_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.illustrator'
- validate_length(s,l,n)
- else nil
- end
- end
- def illustrator_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.photographer'
- validate_length(s,l,n)
- else nil
- end
- end
- def photographer_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.translator'
- validate_length(s,l,n)
- else nil
- end
- end
- def translator_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.audio'
- validate_length(s,l,n)
- else nil
- end
- end
- def audio_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.digitized_by'
- validate_length(s,l,n)
- else nil
- end
- end
- def digitized_by_detail
- 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.is_a?(Hash)) \
- ? names[:name_str]
- : nil
- s=if s
- l,n=Db[:col_name],'creator.prepared_by'
- validate_length(s,l,n)
- else nil
- end
- end
- def prepared_by_detail
- names=@h['prepared_by'] \
- ? name_format(@h['prepared_by'])
- : nil
- names=name_format(@h['prepared_by'])
- (names.is_a?(Hash)) \
- ? names[:name_a_h]
- : nil
- end
- self
- end
- def rights
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def copyright
- def text #you may wish to expand to take from all
- s=if @h['copyright']
- @h['copyright']
- elsif @h['text']
- @h['text']
- elsif @h['main']
- @h['main']
- else
- 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
- l,n=Db[:col_info_note],'rights.copyright.translation'
- validate_length(s,l,n)
- end
- def illustrations
- 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
- l,n=Db[:col_info_note],'rights.copyright.photographs'
- validate_length(s,l,n)
- end
- def digitization
- 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
- 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
- l,n=Db[:col_info_note],'rights.license'
- validate_length(s,l,n)
- end
- def sep(str)
- (str =~/https?:\/\/\S+$/) ? ' ;' : ';'
- end
- def all
- s=if @h['all'] then @h['all']
- else
- s=''
- if defined? copyright.text \
- and copyright.text \
- and not copyright.text.empty?
- v=sep(copyright.text)
- s +=copyright.text + v
- end
- if defined? copyright.translation \
- and copyright.translation \
- and not copyright.translation.empty?
- v=sep(copyright.translation)
- s +='\\\\ translation ' + copyright.translation + v
- end
- if defined? copyright.illustrations \
- and copyright.illustrations \
- and not copyright.illustrations.empty?
- v=sep(copyright.illustrations)
- s +='\\\\ illustrations ' + copyright.illustrations + v
- end
- if defined? copyright.photographs \
- and copyright.photographs \
- and not copyright.photographs.empty?
- v=sep(copyright.photographs)
- s +='\\\\ photographs ' + copyright.photographs + v
- end
- if defined? copyright.digitization \
- and copyright.digitization \
- and not copyright.digitization.empty?
- v=sep(copyright.digitization)
- s +='\\\\ digitization ' + copyright.digitization + v
- end
- if defined? copyright.audio \
- and copyright.audio \
- and not copyright.audio.empty?
- v=sep(copyright.audio)
- s +='\\\\ audio ' + copyright.audio + v
- end
- if defined? copyright.license \
- and copyright.license \
- and not copyright.license.empty?
- s +='\\\\ License: ' + copyright.license
- end
- if s.empty?
- 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)
- end
- s
- end
- s
- end
- self
- end
- def identifier
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def oclc
- s=@h['oclc']
- l,n=Db[:col_library],'identifier.oclc'
- validate_length(s,l,n)
- end
- def isbn
- s=@h['isbn']
- l,n=Db[:col_small],'identifier.isbn'
- validate_length(s,l,n)
- end
- def pg
- s=@h['pg']
- l,n=Db[:col_small],'identifier.pg'
- validate_length(s,l,n)
- end
- self
- end
- def classify
- a=@s.split(/(\n%\s.+?$|[ ]*)(?:\n[ ]*(?=:)|\Z)/m)
- @h=build_hash(a)
- def topic_register
- s=@h['topic_register']
- l,n=Db[:col_info_note],'classify.topic_register'
- validate_length(s,l,n)
- end
- def subject
- s=@h['subject']
- l,n=Db[:col_txt_long],'classify.subject'
- validate_length(s,l,n)
- end
- def keywords
- s=@h['keywords']
- l,n=Db[:col_txt_long],'classify.keywords'
- validate_length(s,l,n)
- end
- def loc
- s=@h['loc']
- l,n=Db[:col_library],'classify.loc'
- validate_length(s,l,n)
- end
- def dewey
- s=@h['dewey']
- l,n=Db[:col_library],'classify.dewey'
- validate_length(s,l,n)
- end
- self
- end
- def publisher
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- s=@h['main']
- l,n=Db[:col_name],'publisher'
- validate_length(s,l,n)
- end
- def date
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def added_to_site
- s=@h['added_to_site']
- l,n=Db[:col_date_text],'date.added_to_site'
- validate_length(s,l,n)
- end
- def available
- s=@h['available']
- l,n=Db[:col_date_text],'date.available'
- validate_length(s,l,n)
- end
- def created
- s=@h['created']
- l,n=Db[:col_date_text],'date.created'
- validate_length(s,l,n)
- end
- def issued
- s=@h['issued']
- l,n=Db[:col_date_text],'date.issued'
- validate_length(s,l,n)
- end
- def modified
- s=@h['modified']
- l,n=Db[:col_date_text],'date.modified'
- validate_length(s,l,n)
- end
- def published
- s=@h['published']=(@h['published'] ? @h['published'] : @h['main'])
- l,n=Db[:col_date_text],'date.published'
- validate_length(s,l,n)
- end
- def valid
- s=@h['valid']
- l,n=Db[:col_date_text],'date.valid'
- 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 current_publisher
- @s
- end
- def original
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def publisher
- s=@h['publisher']
- l,n=Db[:col_name],'original.publisher'
- validate_length(s,l,n)
- end
- def language
- s=@h['language']
- l,n=Db[:col_language],'original.language'
- validate_length(s,l,n)
- end
- def language_char
- s=@h['language_char']
- l,n=Db[:col_language_char],'original.language_char'
- validate_length(s,l,n)
- end
- def source
- s=@h['source']
- l,n=Db[:col_name],'original.source'
- validate_length(s,l,n)
- end
- def institution
- s=@h['institution']
- l,n=Db[:col_name],'original.institution'
- validate_length(s,l,n)
- end
- def nationality
- s=@h['nationality']
- l,n=Db[:col_language],'original.nationality'
- validate_length(s,l,n)
- end
- self
- end
- def notes
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def description
- s=@h['description']
- l,n=Db[:col_info_note],'notes.description'
- validate_length(s,l,n)
- end
- def abstract
- s=@h['abstract']
- l,n=Db[:col_info_note],'notes.abstract'
- validate_length(s,l,n)
- end
- def comment
- s=@h['comment']
- l,n=Db[:col_info_note],'notes.comment'
- validate_length(s,l,n)
- end
- def coverage
- s=@h['coverage']
- l,n=Db[:col_info_note],'notes.coverage'
- validate_length(s,l,n)
- end
- def relation
- s=@h['relation']
- l,n=Db[:col_info_note],'notes.relation'
- validate_length(s,l,n)
- end
- def source
- s=@h['source']
- l,n=Db[:col_txt_long],'notes.source'
- validate_length(s,l,n)
- end
- def history
- s=@h['history']
- l,n=Db[:col_txt_long],'notes.history'
- validate_length(s,l,n)
- end
- def type
- s=@h['type']
- l,n=Db[:col_txt_long],'notes.relation'
- validate_length(s,l,n)
- end
- def format
- s=@h['format']
- l,n=Db[:col_txt_short],'notes.format'
- validate_length(s,l,n)
- end
- def prefix
- @h['prefix']
- end
- self
- end
- end
- class Instructions
- @doc={ lv: [] }
- @doc[:fns],@doc[:fnb],@doc[:scr_suffix]='','',''
- @@publisher='SiSU scribe'
- 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,: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,:pageline,:num_top,:bold_match_list,:italics_match_list,:substitution_match_list,:emphasis_set_to,:toc_lev_limit,:flag_endnotes,:flag_auto_endnotes,:flag_separate_endnotes,:flag_separate_endnotes_make,:markup,:markup_instruction,:flag_tables,:vocabulary,: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,: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,:home_button_image,:home_button_links,:footer_links,:cover_image,:man_section
- def initialize(fns_array,opt)
- @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=@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=@pageline=@num_top=@bold_match_list=@italics_match_list=@substitution_match_list=@emphasis_set_to=@toc_lev_limit=@flag_tables=@vocabulary=@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=@generated=@heading_seg_first=@base_program=@topic_register=@original=@writing_focus=@audio=@home_button_image=@home_button_links=@cover_image=@man_section=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
- @authorship,@markup_instruction,@image='','','','' #check which other values should be set to empty rather than nil
- @markup=@markup_instruction #use @markup_instruction
- @doc,@fn,@make_italic,@tag_hash,@ec={},{},{},{},{},{}
- @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]
- @emphasis_set_to='bold'
- @lang_code_insert=SiSU_Env::FilenameLanguageCodeInsert.new(@opt).language_code_insert
- @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } }
- @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::Rescued.new($!,$@,@opt.cmd,@fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- @header_make_links_append=:no
- common_makes=(defined? @opt.make_instructions_pod) \
- && @opt.make_instructions_pod !=nil \
- && @opt.make_instructions_pod[:makeset]==true \
- ? @opt.make_instructions_pod
- : @opt.make_instructions
- if common_makes[:makeset]
- @pagenew=common_makes[:pagenew]
- @pagebreak=common_makes[:pagebreak]
- @pageline=common_makes[:pageline]
- @toc=common_makes[:toc]
- @lv1=common_makes[:lv1]
- @lv2=common_makes[:lv2]
- @lv3=common_makes[:lv3]
- @lv4=common_makes[:lv4]
- @lv5=common_makes[:lv5]
- @lv6=common_makes[:lv6]
- @num_top=common_makes[:num_top]
- @i18n=common_makes[:i18n]
- @man_section=common_makes[:man_section]
- @emphasis_set_to=common_makes[:emphasis_set_to]
- @bold_match_list=common_makes[:bold_match_list]
- @italics_match_list=common_makes[:italics_match_list]
- @substitution_match_list=common_makes[:substitution_match_list]
- @footer_links=common_makes[:footer_links]
- @home_button_links=common_makes[:home_button_links]
- @home_button_image=common_makes[:home_button_image]
- @cover_image=common_makes[:cover_image]
- @lnk=@links=common_makes[:links]
- @header_make_links_append=common_makes[:links_append]
- end
- end
- #protected
- 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::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
- wc=%x{wc #{fns}}
- wca=wc.scan(/\d+/)
- @wc_lines,@wc_words,@wc_bytes=wca[0].to_i,wca[1].to_i,wca[2].to_i
- else
- fns_a=@data.dup
- tmp=fns_a.join
- fns_a=tmp.scan(/\S+/)
- @wc_words=fns_a.length
- fns_a=tmp=nil
- end
- @concord_make=(@wc_words > @env.concord_max) ? false : true
- @locale=@sys.locale
- @file_encoding=@sys.file_encoding(fns,@opt.cmd)
- # programs set here for things that affect output appearance only
- @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.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$/ \
- and not @opt.cmd =~/P/ #watch
- @env_out_root=@env.path.output
- @dir_out="#{@env.path.output}/#{@fnb}"
- @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
- @stmp=%{#{@fns}}[/^(.+?)\..*/m,1]
- @fnstex=@fns.gsub(/_/,'\_\-').gsub(/\./,'.\-')
- @flag_endnotes,@flag_auto_endnotes,@flag_separate_endnotes=false,false,false
- @flag_separate_endnotes_make=true
- 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
- @code_flag=false
- 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"
- end
- @code_flag=case para
- when /^code\{\s*$/; true
- when /^\}code\s*$/; false
- else @code_flag
- end
- regx_header=/^@\S+?:[+-]?\s/
- if para =~regx_header \
- and not @code_flag #or para=~/^(?:1|:?A)~/
- case para
- 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 /^@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 /^@rights:(.+)/m #% * header metadata - rights
- @rights=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).rights
- when /^@classify:(.+)/m #% * header metadata - classify
- @classify=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).classify
- when /^@identifier:(.+)/m #% * header metadata - identifier
- @identifier=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).identifier
- when /^@original:(.+)/m #% * header metadata - original (document)
- @original=SiSU_Param::Parameters::Md.new($1.strip,@opt,@env).original
- @source=@original.source
- 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
- links=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make_links.links
- @lnk=@links=if @header_make_links_append == :yes
- (links) \
- ? (links + @links)
- : @links
- else
- (links) \
- ? (links)
- : @links
- end
- when /^@make:(.+)/m #% * header processing - make
- @make=SiSU_Param::Parameters::MdMake.new($1.strip,@opt,@env).make
- makes=SiSU_Param_Make::MakeHead.new(@make).make_instruct
- @pagenew=(makes[:pagenew]) \
- ? (makes[:pagenew]) \
- : @pagenew
- @pagebreak=(makes[:pagebreak]) \
- ? (makes[:pagebreak]) \
- : @pagebreak
- @pageline=(makes[:pageline]) \
- ? (makes[:pageline]) \
- : @pageline
- @toc=(makes[:toc]) ? (makes[:toc]) : @toc
- @lv1=(makes[:lv1]) ? (makes[:lv1]) : @lv1
- @lv2=(makes[:lv2]) ? (makes[:lv2]) : @lv2
- @lv3=(makes[:lv3]) ? (makes[:lv3]) : @lv3
- @lv4=(makes[:lv4]) ? (makes[:lv4]) : @lv4
- @lv5=(makes[:lv5]) ? (makes[:lv5]) : @lv5
- @lv6=(makes[:lv6]) ? (makes[:lv6]) : @lv6
- @num_top=(makes[:num_top]) \
- ? (makes[:num_top]) \
- : @num_top
- @substitution_match_list=(makes[:substitution_match_list]) \
- ? (makes[:substitution_match_list]) \
- : @substitution_match_list
- @bold_match_list=(makes[:bold_match_list]) \
- ? (makes[:bold_match_list]) \
- : @bold_match_list
- @italics_match_list=(makes[:italics_match_list]) \
- ? (makes[:italics_match_list]) \
- : @italics_match_list
- @emphasis_set_to=(makes[:emphasis_set_to]) \
- ? (makes[:emphasis_set_to]) \
- : @emphasis_set_to
- @i18n=(makes[:i18n]) \
- ? (makes[:i18n]) \
- : @i18n
- @man_section=(makes[:man_section]) \
- ? (makes[:man_section]) \
- : @man_section
- @footer_links=(makes[:footer_links]) \
- ? (makes[:footer_links]) \
- : @footer_links
- @home_button_links=(makes[:home_button_links]) \
- ? (makes[:home_button_links]) \
- : @home_button_links
- @home_button_image=(makes[:home_button_image]) \
- ? (makes[:home_button_image]) \
- : @home_button_image
- @cover_image=(makes[:cover_image]) \
- ? (makes[:cover_image]) \
- : @cover_image
- end
- @lv1 ||=/^1~/
- @lv2 ||=/^2~/
- @lv3 ||=/^3~/
- @lv4 ||=/^4~/
- @lv5 ||=/^5~/
- @lv6 ||=/^6~/
- 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~#{l_0}/
- @lvs[1]=1
- when /^:?B~#{l_1}/
- @lvs[2]=1
- when /^:?C~#{l_2}/
- @lvs[3]=1
- when /^1~#{l_3}/
- @lvs[4]=1
- when /^2~#{l_4}/
- @lvs[5]=1
- when /^3~#{l_5}/
- @lvs[6]=1
- end
- if para =~ /^:A~/ #% processing
- if not defined? @title.full.nil?
- tf=para[/^:A~\S*(.+)$/m,1]
- tf="@title: #{tf}"
- @title=SiSU_Param::Parameters::Md.new(tf.strip,@opt,@env).title
- end
- creator=(@creator.is_a?(SiSU_Param::Parameters::Md) \
- && defined? @creator.author \
- && @creator.author.is_a?(String)) \
- ? " #{@creator.author}"
- : ''
- title=%{"#{@title.full.gsub(/(<p>|<p \/>|<br>|<br \/>)/,'')}",}
- SiSU_Screen::Ansi.new(@opt.cmd,'Parameters',%{#{title}#{creator}}).txt_grey if @opt.cmd =~/v/
- end
- if not @book_idx \
- and para =~/^=\{(.+?)\}\s*$/
- @book_idx=true
- end
- unless @code_flag
- case para
- when /~\{\s+.+?\}~/m #% processing
- en=para.scan(/~\{.+?\}~/m)
- en.each { |e| @en[:sum] +=1 }
- 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 =~/~\{|\^~ |~\^|\{.+?\[[1-6]\]\}\S+?\.ss[tm]/m
- @flag_auto_endnotes,@flag_endnotes=true,true
- end
- if para =~/^(?:table\{|\{table)/i
- @flag_tables=true
- end
- end
- if para =~/^:?A~/
- @set_heading_top=true
- end
- if para =~/^1~/
- m=nil
- if para =~/^1~(\S+)\s+(.+)$/
- m,t=$1,$2
- elsif para =~/^1~\s+(.+)$/
- t=$1
- end
- unless @heading_seg_first_flag # extract first segment name
- @heading_seg_first=t
- @heading_seg_first_flag=true
- end
- if m # list all segment names
- @seg_names << m
- @set_heading_seg=true
- if m=~/^\d{1,3}/ \
- and m !~/^0/
- @seg_autoname_safe=false
- 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
- end
- @ec[:audio] << para.scan(@rgx_audio).uniq if para =~@rgx_audio #embedded content
- @ec[:multimedia] << para.scan(@rgx_mm).uniq if para =~@rgx_mm #embedded content
- unless @sem_tag
- @sem_tag=true if para=~/[:;]\{.+?\}[:;][a-z+]/ #refix later
- end
- 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::MdMake.new('@make: ',@opt,@env).make
- end
- if @cover_image \
- and @cover_image.is_a?(Hash) \
- and (@cover_image[:cover] =~@rgx_image \
- or @cover_image[:cover] =~/\S+?.(?:jpg|png|gif)/)
- @ec[:image] << @cover_image[:cover]
- end
- if @home_button_image \
- and @home_button_image.is_a?(Hash) \
- and (@home_button_image =~@rgx_image \
- or @home_button_image =~/\S+?\.(?:jpg|png|gif)/)
- @ec[:image] << @home_button_image
- end
- if @ec[:image].length > 0
- @ec[:image]=@ec[:image].flatten.uniq
- @ec[:image].delete_if {|x| x =~/https?:\/\// }
- @ec[:image]=@ec[:image].sort
- end
- @ec[:audio]=@ec[:audio].uniq.flatten.sort
- @ec[:multimedia]=@ec[:multimedia].uniq.flatten.sort
- unless @rights
- if defined? @creator.author \
- and @creator.author.is_a?(String) \
- and defined? @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.is_a?(String)
- @rights=SiSU_Param::Parameters::MdDefault.new.rights("[#{@creator.author}]",'')
- end
- end
- if defined? @classify.topic_register \
- and @classify.topic_register.is_a?(String) \
- and @classify.topic_register.length >3
- topic_register=@classify.topic_register
- u=topic_register.scan(/[^;]+/m).sort
- v=[]
- u.each do |l|
- v << l.scan(/[^:]+/m)
- end
- v.each do |s|
- s[-1]=s[-1].scan(/[^|]+/m) if s[-1] =~/[|]/m
- @topic_register_array << s
- end
- @topic_register_array
- end
- if @i18n
- @i18n=@i18n.uniq
- @i18n << 'en' unless @i18n.find_index("en")
- else
- @i18n=[ 'en' ]
- end
- translated=[]
- translate_list=[@pagenew,@pagebreak,@pageline,@num_top,@toc_lev_limit]
- translate_list.each do |t|
- translate=t.to_s if t
- translated << if translate
- translate.gsub!(/3/,'6')
- translate.gsub!(/2/,'5')
- translate.gsub!(/1/,'4')
- translate.gsub!(/:?C/,'3')
- translate.gsub!(/:?B/,'2')
- translate.gsub!(/:?A/,'1')
- # 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,@pageline,@num_top,@toc_lev_limit=translated
- @markup=@markup.gsub(/page_new\s*=\s*([\dA-C])/,"page_new=#{@pagenew}").
- gsub(/page_break\s*=\s*([\dA-C])/,"page_break=#{@pagebreak}").
- gsub(/page_line\s*=\s*([\dA-C])/,"page_line=#{@pageline}").
- 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}")
- papersize_array_rc=@papersize.downcase.scan(/(?:a4|letter|legal|book|a5|b5)/)
- papersize_array_opt=[
- ((@opt.act[:pdf_a4][:set]==:on) ? 'a4' : ''),
- ((@opt.act[:pdf_a5][:set]==:on) ? 'a5' : ''),
- ((@opt.act[:pdf_b5][:set]==:on) ? 'b5' : ''),
- ((@opt.act[:pdf_letter][:set]==:on) ? 'letter' : ''),
- ((@opt.act[:pdf_legal][:set]==:on) ? 'legal' : ''),
- ] - [""]
- @papersize_array=(papersize_array_opt.length > 0) \
- ? papersize_array_opt
- : papersize_array_rc
- 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 \
- and FileTest.file?(@env.source_file_with_path)
- @dgst=[]
- if @env.digest.type =~/sha256/
- dgst=@sys.sha256(@env.source_file_with_path)
- @dgst=dgst[1].length==64 ? dgst : nil
- puts 'check document (sha256) digest' if not @dgst
- else
- dgst=@sys.md5(@env.source_file_with_path)
- @dgst=dgst[1].length==32 ? dgst : nil
- puts 'check document (md5) digest' if not @dgst
- end
- elsif not FileTest.file?(@env.source_file_with_path)
- #puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).set(:fuchsia)
- end
- @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
- @language[:code] ||= lang.code
- @language[:name] ||= lang.title
- 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[:n]
- end
- @fnl=@env.i18n.lang_filename(fn_set_lang[:c])
- @lang=@lang.uniq
- @fn=SiSU_Env::EnvCall.new(@fns).lang(fn_set_lang[:c])
- if @en[:note] > 0 \
- and @en[:sum] > 0
- if @en[:sum] > 0
- 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(@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 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]/
- 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)
- if @lv1.nil?
- fns_array.each do |para|
- if para =~/^(Part|Chapter|Section|Article)\b/i
- case para
- when /^(Part|PART)\b/
- @struct[:part]=doc_struct[:part]
- doc_struct[:part]=doc_struct[:part] + 1
- when /^(Chapter|CHAPTER)\b/
- @struct[:chapter]=doc_struct[:chapter]
- doc_struct[:chapter]=doc_struct[:chapter] + 1
- when /^(Section|SECTION)\b/
- @struct[:section]=doc_struct[:section]
- doc_struct[:section]=doc_struct[:section] + 1
- when /^(Article|ARTICLE)\b/
- @struct[:article]=doc_struct[:article]
- doc_struct[:article]=doc_struct[:article] + 1
- when /^(Clause|CLAUSE)\b/
- @struct[:clause]=doc_struct[:clause]
- doc_struct[:clause]=doc_struct[:clause] + 1
- when /^\d\..*[^\.]$/
- @struct[:number]=doc_struct[:number]
- doc_struct[:number]=doc_struct[:number] + 1
- end
- end
- end
- if doc_struct[:article] > 2 #%~level 4
- @lv4=/^(?:Article|ARTICLE)\b/
- elsif doc_struct[:chapter] > 2 \
- and doc_struct[:article] \
- and doc_struct[:article] < 3
- @lv4=/^(?:Chapter|CHAPTER)\b/
- elsif doc_struct[:clause] > 2
- @lv4=/^(?:Clause|CLAUSE)\b/
- elsif doc_struct[:number] > 2
- @lv4="^\d\..*[^\.]$"
- end
- if doc_struct[:section] > 2 #%~level 3
- @lv3=/^(?:Section|SECTION)\b/
- end
- if doc_struct[:chapter] > 2 \
- and doc_struct[:article] \
- and doc_struct[:article] > 2
- @lv2=/^(?:Chapter|CHAPTER)\b/
- end
- if doc_struct[:part] > 2 \
- and @lv[2].nil?
- @lv2=/^(?:Part|PART)\b/
- end
- if doc_struct[:part] > 2 \
- and @lv[2].inspect !~/Part/ \
- and @lv[1].nil?
- @lv1=/^(Part|PART)\b/
- end
- end
- @lnk=@lnk.compact if @lnk
- @lv1 ||=/^1~/
- @lv2 ||=/^2~/
- @lv3 ||=/^3~/
- @lv4 ||=/^4~/
- @lv5 ||=/^5~/
- @lv6 ||=/^6~/
- @data=nil #else whole file's contents are stored in md pstore & is not required to be... big waste actually
- @file=SiSU_Env::FileOp.new(self) #watch
- Store.new(self,@env).store #% pstore
- self
- end
- private
- class Store
- def initialize(md,env)
- @md,@env=md,env
- end
- def store
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- end
- end
- class Instantiate
- def param_instantiate
- @@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: {}
- }
- @@yaml=@@yamladdr=nil
- @@flag={}
- @@publisher='SiSU scribe'
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/param_identify_markup.rb b/lib/sisu/v4/param_identify_markup.rb
deleted file mode 100644
index 66252af2..00000000
--- a/lib/sisu/v4/param_identify_markup.rb
+++ /dev/null
@@ -1,166 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/param_identify_markup.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** 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
-
-=end
-module SiSU_MarkupType
- class MarkupIdentify
- @@version={}
- @@fns,@@version[:determined],@@version[:declared],@@declared_doc_type='','','','[text?]'
- attr_accessor :version,:declared_doc_type
- def initialize(content,opt)
- @cont,@opt=content,opt
- end
- def identify
- @version,@declared_doc_type=@@version,@@declared_doc_type
- if @opt.fns != @@fns
- if @cont[0] =~ /^(?:%\s+)?SiSU\s+(text|master|insert)\s+([0-9](?:\.[0-9]+){1,2})/ \
- or @cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @declared_doc_type,@version[:declared]=$1,$2
- elsif @cont[0] =~ /^(?:%\s+)?SiSU\s+([0-9](?:\.[0-9]+){1,2})/ \
- or @cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @version[:declared]=$1
- end
- @flag_2_0,@flag_66,@flag_57,@flag_38=false,false,false,false
- @cont.each_with_index do |y,i|
- if y =~/^@make:|^@classify|^\s\s?:\S+?:\s+\S/
- version=2.0.to_f
- @version[:determined]=version
- @flag_2_0=true
- break
- end
- unless @flag_38
- if y =~/^:?A~/
- version=0.38.to_f
- @version[:determined]=version
- @flag_38=true
- end
- end
- if @flag_38
- if @flag_69 \
- or y =~/^=\{.+?\}\s*$/
- version=0.69.to_f
- @flag_69=true
- @version[:determined]=version
- break
- end
- if @flag_66 \
- or y =~/[:;]\{.+?\}[:;][a-z+]/
- version=0.66.to_f
- @flag_66=true
- @version[:determined]=version
- break
- end
- end
- end
- @flag_57,@flag_38=false,false
- unless @flag_2_0 \
- or @flag_66 \
- or @flag_69
- @cont.each_with_index do |y,i|
- if @flag_57 \
- or y =~/^:?A~\?? @title/
- @version[:determined]=0.57.to_f
- @flag_57=true
- break
- end
- if @flag_38 \
- or y =~/^:?A~/
- @version[:determined]=0.38.to_f
- @flag_38=true
- break if i >= 200
- if y =~ /(?:~{\*+|~\[\*|~\[\+)\s/
- @version[:determined]=0.42 #0.38 can safely be treated as 0.42
- break
- end
- end
- if y =~/^0~/ \
- and not @flag_38
- @version[:determined]=0.16.to_f
- break
- end
- end
- end
- @@fns=@opt.fns
- @@version,@@declared_doc_type=@version,@declared_doc_type
- end
- self
- end
- def markup_version?
- def determined
- identify.version[:determined].to_f
- end
- def series
- s=case identify.version[:determined].to_s
- when /^[01]\./; '1.0'
- when /^[2]\./; '2.0'
- else '2.0'
- end
- "series #{s}"
- end
- def declared
- identify.version[:declared].to_f
- end
- self
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/param_make.rb b/lib/sisu/v4/param_make.rb
deleted file mode 100644
index 32576fb8..00000000
--- a/lib/sisu/v4/param_make.rb
+++ /dev/null
@@ -1,668 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 Lic/home/ralph/live-manual/build/manual/manifest/live-manual.ca.htmlense 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/param_make.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: make parameters extracted for program use
-
-=end
-
-module SiSU_Param_Make
- class MdMake
- def initialize(str,opt,env)
- @s,@opt,@env=str,opt,env
- end
- def validate_length(s,l,n)
- #s=(s.length <= l) ? s : nil
- s=if s.is_a?(String) \
- and s.length <= l
- s
- elsif s.is_a?(NilClass)
- nil
- elsif s.class !=String
- STDERR.puts "#{n} is #{s.class}: programming error, String expected #{__FILE__}:#{__LINE__}"
- s
- else
- 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=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 }
- else
- x=b[0].scan(/[^,]+/)
- if x.length==1
- @name_a_h << { the: x[0].strip }
- elsif x.length==2
- @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'
- end
- end
- l=@name_a_h.length
- name_str=''
- @name_a_h.each_with_index do |a,i|
- name_str += if a[:others]
- z=(((l - i) > 1) ? ', ' : '')
- "#{a[:others].strip} #{a[:the].strip}" + z
- else
- z=(((l - i) > 2) ? ', ' : '')
- "#{a[:the].strip}" + z
- end
- end
- { name_a_h: @name_a_h, name_str: name_str }
- else nil
- end
- end
- def build_hash(arr)
- @h={}
- arr.each_with_index do |x,i|
- a,b=nil,nil
- if x =~/^%[:\s]/ #ignore comment
- elsif x =~/:(\S+?):\s+(.+)/
- a,b=/:(\S+?):\s+(.+)\Z/m.match(x)[1,2]
- elsif i == 0
- a='main'
- b=x
- else
- end
- @h[a]=b
- end
- @h
- end
- def make
- a=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- @h=build_hash(a)
- def headings
- lv=[]
- x=@h['headings']
- x=((x =~/;/) ? (x.split(/;\s*/)) : [ x ])
- lv[0]=x
- lv1=x[0] ||='1~ ' #some arbitrary changes made
- lv[1]=/^#{lv1}/
- lv2=x[1] ||='2~ '
- lv[2]=/^#{lv2}/
- lv3=x[2] ||='3~ '
- lv[3]=/^#{lv3}/
- lv4=x[3] ||='4~ '
- lv[4]=/^#{lv4}/
- lv5=x[4] ||='5~ '
- lv[5]=/^#{lv5}/
- lv6=x[5] ||='6~ '
- lv[6]=/^#{lv6}/
- lv
- end
- def num_top
- @h['num_top']
- end
- def breaks
- pagebreaks=((@h['breaks'] =~/;/) \
- ? (@h['breaks'].split(/;\s*/))
- : [ @h['breaks'] ])
- page_new,page_break,page_line=nil,nil,nil
- pagebreaks.each do |x|
- page_new=x[/(:?[\dA-C],?)+/] if x=~/new|clear/
- page_break=x[/(:?[\dA-C],?)+/] if x =~/break/
- page_line=x[/(:?[\dA-C],?)+/] if x =~/line/
- end
- { page_new: page_new, page_break: page_break, page_line: page_line }
- end
- def language
- if @h['language'] && (@h['language']=~/\S{2,}/)
- ((@h['language'] =~/,/) \
- ? (@h['language'].split(/,\s*/))
- : [ @h['language'] ])
- else [ 'en' ]
- end
- end
- def bold
- m=@h['bold']
- i=(m=~/\/i$/)? 'i' : ''
- if m
- 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
- end
- def italics
- m=@h['italics']
- i=((m=~/\/i$/) ? 'i' : '')
- if m
- 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
- end
- def emphasis
- 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']
- 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
- def plaintext_wrap
- if @h['plaintext_wrap'].to_s =~/\d\d+/ \
- and @h['plaintext_wrap'].to_i > 19 \
- and @h['plaintext_wrap'].to_i < 201
- @h['plaintext_wrap'].to_i
- 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 cover_image?
- (omit.list.inspect =~/"cover_image"/) \
- ? :off
- : :na
- end
- def home_button_image?
- (omit.list.inspect =~/"home_button_image"/) \
- ? :off
- : :na
- end
- def texpdf_font
- 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
- def cjk
- @h['texpdf_font_cjk'] \
- && (@h['texpdf_font_cjk']=~/\S{3,}/) \
- ? @h['texpdf_font_cjk']
- : @env.font.texpdf.cjk
- end
- def cjk_zh
- @h['texpdf_font_cjk_zh'] \
- && (@h['texpdf_font_cjk_zh']=~/\S{3,}/) \
- ? @h['texpdf_font_cjk_zh']
- : @env.font.texpdf.cjk_zh
- end
- def cjk_ja
- @h['texpdf_font_cjk_ja'] \
- && (@h['texpdf_font_cjk_ja']=~/\S{3,}/) \
- ? @h['texpdf_font_cjk_ja']
- : @env.font.texpdf.cjk_ja
- end
- def cjk_ko
- @h['texpdf_font_cjk_ko'] \
- && (@h['texpdf_font_cjk_ko']=~/\S{3,}/) \
- ? @h['texpdf_font_cjk_ko']
- : @env.font.texpdf.cjk_ko
- end
- self
- end
- def promo
- @h['promo']
- end
- def ad
- @h['ad']
- end
- def manpage
- manpage={}
- if @h['manpage']
- if @h['manpage'] =~/;/m
- man=@h['manpage'].split(/;/m)
- man.each do |x|
- m=(x=~/=/m) ? x.split(/=/m) : nil
- if m
- manpage[m[0].strip] = m[1].split(/ \. /)
- end
- end
- end
- end
- if manpage['name']
- 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").
- gsub(/(-)/m,"\\\\\\1").
- gsub(/\A/,"\n.br\n.SH SYNOPSIS\n.br\n")
- else
- manpage['synopsis']=''
- end
- unless manpage['section']
- manpage['section']=1
- end
- manpage
- end
- def get_image_dimensions(img)
- imgk=SiSU_Env::SystemCall.new.imagemagick
- gmgk=SiSU_Env::SystemCall.new.graphicksmagick
- img_pth={
- sst: @env.path.image_source_include,
- pod: File.expand_path("../../../sisupod/image" )
- }
- path_img=if FileTest.file?("#{img_pth[:pod]}/#{img}")
- "#{img_pth[:pod]}/#{img}"
- elsif FileTest.file?("#{img_pth[:sst]}/#{img}")
- "#{img_pth[:sst]}/#{img}"
- else nil
- end
- if path_img
- if imgk or gmgk
- if imgk
- imgsys=`identify #{path_img}`.strip #system call
- elsif gmgk
- imgsys=`gm identify #{path_img}`.strip #system call
- end
- w,h=/(\d+)x(\d+)/m.match(imgsys)[1,2]
- else
- w,h='600','800'
- end
- else
- w,h=nil,nil
- end
- {w: w, h: h}
- end
- def home_button_text
- if @h['home_button_text']
- @h['home_button_text'].split(/\s*;\s*/)
- else nil
- end
- end
- def home_button_image
- s=nil
- s=if @h['home_button_image']
- s=@h['home_button_image'].split(/\s*;\s*/)
- s0=s[0] #if
- image={}
- s=if s0 =~/{(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?\s*}(?:(http:\/\/\S+)|image)/
- image[:home_button]=$1
- if $2
- image[:dimensions]=$2
- image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimensions])[1,2]
- else
- d=get_image_dimensions(image[:home_button])
- image[:w],image[:h]=d[:w],d[:h]
- image[:dimensions]="#{d[:w]}x#{d[:h]}"
- end
- image[:link]=$3
- image
- end
- else nil
- end
- end
- def cover_image
- s=nil
- if @h['cover_image']
- s=@h['cover_image'].split(/\s*;\s*/)
- s=s[0] #if
- image={}
- if s =~/{\s*(\S+\.(?:jpg|png|gif))(?:\s+(\d+x\d+))?(?:\s+"(.+?)")?\s*}image/
- image[:cover]=$1
- if $2
- image[:dimensions]=$2
- image[:w],image[:h]=/(\d+)x(\d+)/m.match(image[:dimensions])[1,2]
- else
- d=get_image_dimensions(image[:cover])
- image[:w],image[:h]=d[:w],d[:h]
- image[:dimensions]="#{d[:w]}x#{d[:h]}"
- end
- image[:note]=$3
- elsif s =~/(\S+\.(?:jpg|png|gif))/
- image[:cover]=$1
- d=get_image_dimensions(image[:cover])
- image[:w],image[:h]=d[:w],d[:h]
- image[:dimensions]="#{d[:w]}x#{d[:h]}"
- image[:note]=nil
- end
- image
- else nil
- end
- end
- def footer
- if @h['footer']
- @h['footer'].split(/\s*;\s*/)
- else nil
- end
- end
- self
- end
- def make_links
- @doc_links=@s.split(/\n%\s.+?$|[ ]*\n[ ]*/m)
- def links
- lnks,a_idx=[],0
- @doc_links.each do |doc_link|
- if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/
- say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2]
- lnks[a_idx]={ say: say, url: url }
- a_idx +=1
- end
- end
- lnks
- end
- def append?
- (@doc_links[0]=='+') \
- ? :yes
- : :no
- end
- self
- end
- end
- class MakeHead
- attr_accessor :pagenew,:pagebreak,:pageline,:toc,:lv1,:lv2,:lv3,:lv4,:lv5,:lv6,:num_top,:i18n,:man_section,:substitution_match_list,:bold_match_list,:italics_match_list,:emphasis_set_to,:footer_links,:home_button_links,:home_button_image,:cover_image
- def initialize(make)
- @make=make
- end
- def clear
- @pagenew=@pagebreak=@pageline=@toc=@lv1=@lv2=@lv3=@lv4=@lv5=@lv6=@num_top=@i18n=@man_section=@footer_links=@substitution_match_list=@bold_match_list=@italics_match_list=@emphasis_set_to=@home_button_links=@home_button_image=@cover_image=nil
- end
- def make_instruct
- clear
- if defined? @make.breaks \
- and @make.breaks[:page_new] #clearpage
- @pagenew=@make.breaks[:page_new]
- end
- if defined? @make.breaks \
- and @make.breaks[:page_break] #newpage
- @pagebreak=@make.breaks[:page_break]
- end
- if defined? @make.breaks \
- and @make.breaks[:page_line] #page line across
- @pagebreak=@make.breaks[:page_line]
- end
- if defined? @make.headings \
- and @make.headings
- @toc=@make.headings[0]
- @lv1=@make.headings[1]
- @lv2=@make.headings[2]
- @lv3=@make.headings[3]
- @lv4=@make.headings[4]
- @lv5=@make.headings[5]
- @lv6=@make.headings[6]
- end
- if defined? @make.num_top \
- and @make.num_top
- @num_top=@make.num_top # remove @num_top
- end
- if defined? @make.language \
- and @make.language[0]
- @i18n=@make.language
- end
- if defined? @make.manpage \
- and @make.manpage
- @man_section=(defined? @make.manpage.section) \
- ? @make.manpage.section
- : 1
- end
- if defined? @make.substitute \
- and @make.substitute
- @substitution_match_list=@make.substitute
- end
- if defined? @make.bold \
- and @make.bold
- @bold_match_list=@make.bold
- end
- if defined? @make.italics \
- and @make.italics
- @italics_match_list=@make.italics
- end
- if defined? @make.emphasis \
- and @make.emphasis
- @emphasis_set_to=@make.emphasis
- end
- if defined? @make.footer \
- and @make.footer.is_a?(Array)
- @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } } #already set
- @footer_links[:left]=if @make.footer[0]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/
- say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[0])[1,2]
- { say: say, url: url }
- else
- { say: '', url: '' }
- end
- @footer_links[:center]=if @make.footer[1]=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/
- say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(@make.footer[1])[1,2]
- { say: say, url: url }
- else
- { say: '', url: '' }
- end
- @footer_links
- else #already set
- @footer_links= { left: { say: '', url: '' }, center: { say: '', url: '' } }
- end
- if defined? @make.home_button_text \
- and @make.home_button_text.is_a?(Array)
- a_idx=0
- @home_button_links=[]
- @make.home_button_text.each do |doc_link|
- if doc_link=~/\{.+?\}(?:(?:https?|file|ftp):\/|\.\.)\/\S+(?:\s|$)/
- say,url=/\{\s*(.+?)\s*\}((?:(?:https?|file|ftp):\/|\.\.)\/\S+)/im.match(doc_link)[1,2]
- @home_button_links[a_idx]= { say: say, url: url }
- a_idx +=1
- end
- end
- @home_button_links
- end
- if defined? @make.home_button_image \
- and @make.home_button_image.is_a?(Hash)
- @home_button_image=@make.home_button_image
- end
- if defined? @make.cover_image \
- and @make.cover_image.is_a?(Hash)
- @cover_image=@make.cover_image
- end
- { pagenew: @pagenew,
- pagebreak: @pagebreak,
- pageline: @pageline,
- toc: @toc,
- lv1: @lv1,
- lv2: @lv2,
- lv3: @lv3,
- lv4: @lv4,
- lv5: @lv5,
- lv6: @lv6,
- num_top: @num_top,
- i18n: @i18n,
- emphasis_set_to: @emphasis_set_to,
- bold_match_list: @bold_match_list,
- italics_match_list: @italics_match_list,
- substitution_match_list: @substitution_match_list,
- man_section: @man_section,
- footer_links: @footer_links,
- home_button_links: @home_button_links,
- home_button_image: @home_button_image,
- cover_image: @cover_image,
- }
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/particulars.rb b/lib/sisu/v4/particulars.rb
deleted file mode 100644
index f7979197..00000000
--- a/lib/sisu/v4/particulars.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
- particulars, composite information about document being processed
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/particulars.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_Particulars
- require 'singleton'
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'param' # param.rb
- include SiSU_Param
- require_relative 'dal' # dal.rb
- class CombinedSingleton
- include Singleton
- def get_all(opt)
- set_env(opt)
- set_file(opt)
- set_md(opt)
- set_dal(opt) #needs @md
- end
- def get_env(opt)
- set_env(opt)
- end
- def get_file(opt)
- set_file(opt)
- end
- def get_md(opt)
- set_md(opt)
- end
- def get_dal_array(opt)
- set_dal(opt) #needs @md
- end
- def get_env_md(opt)
- set_env(opt)
- set_md(opt)
- end
- def get_idx_sst(opt)
- set_sst_idx(opt)
- end
- def get_idx_raw(opt)
- set_raw_idx(opt)
- end
- def get_idx_html(opt)
- set_html_idx(opt)
- end
- def get_idx_xhtml(opt)
- set_xhtml_idx(opt)
- end
- def get_name_tags(opt)
- set_name_tags(opt)
- end
- def get_maps(opt)
- set_nametags_map(opt)
- set_ocn_htmlseg_map(opt)
- end
- def get_map_nametags(opt)
- set_nametags_map(opt)
- end
- def get_map_ocn_htmlseg(opt)
- set_ocn_htmlseg_map(opt)
- end
- attr_accessor :opt,:md,:sst_idx,:raw_idx,:html_idx,:xhtml_idx
- def set_md(opt)
- begin
- @md=SiSU_Param::Parameters.new(opt).get
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- attr_accessor :opt,:env,:file
- def set_env(opt)
- begin
- @env=SiSU_Env::InfoEnv.new(opt.fns)
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def set_file(opt)
- begin
- set_md(opt) unless @md
- @file=SiSU_Env::FileOp.new(@md)
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- attr_accessor :opt,:dal_array
- def set_dal(opt)
- begin
- @dal_array=SiSU_DAL::Source.new(opt).get
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def set_sst_idx(opt)
- begin
- @sst_idx=SiSU_DAL::Source.new(opt).get_idx_sst
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def set_raw_idx(opt)
- begin
- @raw_idx=SiSU_DAL::Source.new(opt).get_idx_raw
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def set_html_idx(opt)
- begin
- @html_idx=SiSU_DAL::Source.new(opt).get_idx_html
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def set_xhtml_idx(opt)
- begin
- @xhtml_idx=SiSU_DAL::Source.new(opt).get_idx_xhtml
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- attr_accessor :nametags_map
- def set_nametags_map(opt)
- begin
- opt=@md ? @md : opt
- @nametags_map=SiSU_DAL::Source.new(opt).get_map_nametags
- self
- rescue
- if @md
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- else
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
- attr_accessor :ocn_htmlseg_map
- def set_ocn_htmlseg_map(opt)
- begin
- @ocn_htmlseg_map=SiSU_DAL::Source.new(@md).get_map_ocn_htmlseg
- self
- rescue
- SiSU_Errors::Rescued.new($!,$@,opt.cmd,opt.fnl).location do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- end
-end
-__END__
-consider running as separate objects
diff --git a/lib/sisu/v4/plaintext.rb b/lib/sisu/v4/plaintext.rb
deleted file mode 100644
index 13e93e9a..00000000
--- a/lib/sisu/v4/plaintext.rb
+++ /dev/null
@@ -1,427 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/plaintext.rb;hb=HEAD>
-
- * 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
- @@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/
- 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(md,dal_array,wrap_width).songsheet
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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,wrap_width)
- @md,@data,@wrap_width=md,data,wrap_width
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- @tab="\t"
- @@endnotes_=case md.opt.mod.inspect
- when /--footnote/; false
- when /--endnote/; true
- else true
- end
- @br="\n"
- @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
-# env=SiSU_Env::InfoEnv.new(@md.fns)
- vz=SiSU_Viz::Defaults.new
- 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 \
- || 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*2
- when 2; wrapped.upcase << @br << Px[:lv2]*times + p_num << @br*2
- when 3; wrapped.upcase << @br << Px[:lv3]*times + p_num << @br*2
- when 4; wrapped.upcase << @br << Px[:lv4]*times + p_num << @br*2
- when 5; wrapped.upcase << @br << Px[:lv5]*times + p_num << @br*2
- when 6; wrapped.upcase << @br << Px[:lv6]*times + p_num << @br*2
- end
- else
- @plaintext[:body] << wrapped + p_num << @br # main text, contents, body KEEP
- end
- if @@endnotes[:para] \
- and not @@endnotes_
- @@endnotes[:para].each {|e| @plaintext[:body] << e << @br}
- elsif @@endnotes[:para] \
- and @@endnotes_
- end
- @@endnotes[:para]=[]
- end
- def markup(data) # Used for major markup instructions
- 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]'
- 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]}/m,"* ").
- gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,@br)
- else dob.obj.gsub(/\n?#{Mx[:br_line]}\n?|\n?#{Mx[:br_nl]}\n?/m,@br*2)
- 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(/&nbsp;|#{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"]')
- 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] \
- or dob.obj==Mx[:br_page_line]
- "#{@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=line.gsub(/[ \t]+$/m,'').
- gsub(/^\A[ ]*\Z/m,'')
- (line=~/^\A\Z/) \
- ? (emptyline+=1)
- : emptyline=0
- if emptyline < 2 #remove additional empty lines
- file_plaintext.puts line
- end
- end
- end
- else file_plaintext.puts para #unix plaintext # /^([*=-]|\.){5}/
- end
- end
- file_plaintext.close
- end
- end
- end
-end
-__END__
-&#033;\|&#035;\|&&#042;\|&#045;\|&#047;\|&#095;\|&#123;\|&#125;\|&#126;\|&#
diff --git a/lib/sisu/v4/plaintext_format.rb b/lib/sisu/v4/plaintext_format.rb
deleted file mode 100644
index 34325264..00000000
--- a/lib/sisu/v4/plaintext_format.rb
+++ /dev/null
@@ -1,116 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/plaintext_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: plaintext formatting template
-
-=end
-module SiSU_PlaintextFormat
- 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 display
- @paranum.gsub(/(\d+)/,"\n[\\1]")
- end
- def name #unused
- @paranum.gsub(/(\d+)/,'\1')
- end
- def goto #unused
- @paranum.gsub(/(\d+)/,'"#\1"')
- 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
- @lnk_url =t_o[:lnk_url] || nil
- @lnk_txt =t_o[:lnk_txt] || nil
- else
- p t_o.class
- p caller
- end
- rgx=/^#{Rx[:lv]}/
- @txt=@txt.gsub(rgx,'') if @txt =~rgx
- rgx=/#{Mx[:en_a_o]}[\d*+]+\s+(.+?)#{Mx[:en_a_c]}/
- @txt=@txt.gsub(rgx,'\1') if @txt =~rgx
- @vz=SiSU_Viz::Defaults.new
- 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 XML
- end
-end
-__END__
diff --git a/lib/sisu/v4/po4a.rb b/lib/sisu/v4/po4a.rb
deleted file mode 100644
index 5a74a7d0..00000000
--- a/lib/sisu/v4/po4a.rb
+++ /dev/null
@@ -1,980 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/po4a.rb;hb=HEAD>
-
- * 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
- 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
- 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
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Defaults.new.url_decoration
- @vz=SiSU_Viz::Defaults.new
- @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.subject,
- meta_src.metadata_tags.classify.topic_register,
- meta_src.metadata_tags.classify.loc,
- meta_src.metadata_tags.classify.dewey,
- meta_src.metadata_tags.notes.relation,
- meta_src.metadata_tags.notes.type,
- meta_src.metadata_tags.identifier.oclc,
- meta_src.metadata_tags.identifier.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,
- '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.subject,
- meta_src.metadata_tags.classify.topic_register,
- meta_src.metadata_tags.classify.loc,
- meta_src.metadata_tags.classify.dewey,
- meta_src.metadata_tags.notes.relation,
- meta_src.metadata_tags.notes.type,
- meta_src.metadata_tags.identifier.oclc,
- meta_src.metadata_tags.identifier.isbn,
- 'msgstr ""',
- meta_trn.metadata_tags.classify.head,
- meta_trn.metadata_tags.classify.subject,
- meta_trn.metadata_tags.classify.topic_register,
- meta_trn.metadata_tags.classify.loc,
- meta_trn.metadata_tags.classify.dewey,
- meta_trn.metadata_tags.notes.relation,
- meta_trn.metadata_tags.notes.type,
- meta_trn.metadata_tags.identifier.oclc,
- meta_trn.metadata_tags.identifier.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,
- '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,
- ]
- 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
- SiSU_Env::InfoEnv.new(@md.fns)
- 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(/&nbsp;|#{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)
- 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__
-&#033;\|&#035;\|&&#042;\|&#045;\|&#047;\|&#095;\|&#123;\|&#125;\|&#126;\|&#
-
-tables are problematic, difficult to reconstitute instruction, check
-
-metadata, move to top? and work on
-
-footnotes, different types, asterisk, also do you want to have separate
-paragraphs, or breaks within one block?
-
-where no ocn appropriately use ~# or -# or indeed 1~name-
-
-comments in document, what to do about them, not sure they are currently
-retained in dal, could be quite valuable to keep
diff --git a/lib/sisu/v4/po4a_set.rb b/lib/sisu/v4/po4a_set.rb
deleted file mode 100644
index 306be0e9..00000000
--- a/lib/sisu/v4/po4a_set.rb
+++ /dev/null
@@ -1,300 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/po4a_set.rb;hb=HEAD>
-
- * 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)
- if dc_tag \
- and dc_content
- [dc_tag,dc_content,{dc_tag=>dc_content}]
- else nil
- end
- end
- def header(tag,tag_content,type='',attrib='') #this will break stuff and must be tested thoroughly 20060825
- @tag,@tag_content,@type,@attrib=tag,tag_content,type,attrib
- def label #element
- @tag
- end
- def type
- @type
- end
- def text
- @tag_content
- end
- def info #element text
- @tag_content
- end
- def attribute
- @attrib
- end
- def element
- @tag
- end
- def attrib
- @attrib
- end
- def el
- @tag
- end
- self
- end
- def start_is_match
- case @p
- when /^#{Mx[:meta_o]}(title)#{Mx[:meta_c]}\s*(.+?)$/; 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]}(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
- (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \
- ? start_is_match
- : nil
- end
- def meta
- (@p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/) \
- ? start_is_match
- : nil
- end
- end
- class ParagraphNumber
- def initialize(paranum)
- @paranum=/(\d+)/m.match(paranum)[1]
- end
- def display
- @paranum.gsub(/(\d+)/,'#\1')
- end
- end
- class PotNumber
- @@n=0
- def initialize
- @@n +=2
- end
- def num
- @@n
- end
- def reset
- @@n=0
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/prog_text_translation.rb b/lib/sisu/v4/prog_text_translation.rb
deleted file mode 100644
index 0ecb17e8..00000000
--- a/lib/sisu/v4/prog_text_translation.rb
+++ /dev/null
@@ -1,1707 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/prog_text_translation.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: internationalisation
-
-=end
-module SiSU_Translate
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env; include SiSU_Param
- class Source
- def initialize(md,doc_lang,trans_str='')
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- @lang_class=case @doc_lang
- when /American/i; English.new(md,doc_lang,trans_str) # tag depreciated, see iso 639-2
- when /English/i; English.new(md,doc_lang,trans_str)
- when /French/i; French.new(md,doc_lang,trans_str)
- 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 /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)
- when /Finnish/i; Finnish.new(md,doc_lang,trans_str)
- when /Norwegian/i; Norwegian.new(md,doc_lang,trans_str)
- when /Icelandic/i; Icelandic.new(md,doc_lang,trans_str)
- when /Dutch/i; Dutch.new(md,doc_lang,trans_str)
- when /Estonian/i; Estonian.new(md,doc_lang,trans_str)
- when /Hungarian/i; Hungarian.new(md,doc_lang,trans_str)
- when /Polish/i; Polish.new(md,doc_lang,trans_str)
- when /Romanian/i; Romanian.new(md,doc_lang,trans_str)
- when /Russian/i; Russian.new(md,doc_lang,trans_str)
- when /Greek/i; Greek.new(md,doc_lang,trans_str)
- when /Ukranian/i; Ukranian.new(md,doc_lang,trans_str)
- when /Turkish/i; Turkish.new(md,doc_lang,trans_str)
- when /Slovenian/i; Slovenian.new(md,doc_lang,trans_str)
- when /Croatian/i; Croatian.new(md,doc_lang,trans_str)
- when /Slovak(?:ian)?/i; Slovak.new(md,doc_lang,trans_str)
- when /Czech/i; Czech.new(md,doc_lang,trans_str)
- when /Bulgarian/i; Bulgarian.new(md,doc_lang,trans_str)
- else English.new(md,doc_lang,trans_str)
- end
- end
- def filename
- @lang_class.filename
- end
- def metadata
- @lang_class.metadata
- end
- def filetype_description
- @lang_class.filetype_description
- end
- def file_size
- @lang_class.file_size
- end
- def sourcefile
- @lang_class.sourcefile
- end
- def sourcefile_digest
- @lang_class.sourcefile_digest
- end
- def full_title #dc
- @lang_class.full_title
- end
- def title
- @lang_class.title
- end
- def subtitle
- @lang_class.subtitle
- end
- def author
- @lang_class.author
- end
- def contributor
- @lang_class.contributor
- end
- def translator
- @lang_class.translator
- end
- def illustrator
- @lang_class.illustrator
- end
- def publisher
- @lang_class.publisher
- end
- def prepared_by
- @lang_class.prepared_by
- end
- def digitized_by
- @lang_class.digitized_by
- end
- def contents
- @lang_class.contents
- end
- def subject
- @lang_class.subject
- end
- def description #dc (watch)
- @lang_class.description
- end
- def abstract
- @lang_class.abstract
- end
- def type
- @lang_class.type
- end
- def rights
- @lang_class.rights
- end
- def date
- @lang_class.date
- end
- def date_created
- @lang_class.date_created
- end
- def date_available
- @lang_class.date_available
- end
- def date_valid
- @lang_class.date_valid
- end
- def date_modified
- @lang_class.date_modified
- end
- def date_issued
- @lang_class.date_issued
- end
- def language
- @lang_class.language
- end
- def language_original
- @lang_class.language_original
- end
- def format
- @lang_class.format
- end
- def identifier
- @lang_class.identifier
- end
- def source
- @lang_class.source
- end
- def relation
- @lang_class.relation
- end
- def coverage
- @lang_class.coverage
- end
- def keywords
- @lang_class.keywords
- end
- def comments
- @lang_class.comments
- end
- def cls_loc
- @lang_class.cls_loc
- end
- def cls_dewey
- @lang_class.cls_dewey
- end
- def cls_oclc
- @lang_class.cls_oclc
- end
- def cls_gutenberg
- @lang_class.cls_gutenberg
- end
- def cls_isbn
- @lang_class.cls_isbn
- end
- def prefix_a
- @lang_class.prefix_a
- end
- def prefix_b
- @lang_class.prefix_b
- end
- def topic_register
- @lang_class.topic_register
- end
- def fns
- @lang_class.fns
- end
- def word_count
- @lang_class.word_count
- end
- def dgst
- @lang_class.dgst
- end
- def sc_number
- @lang_class.sc_number
- end
- def sc_date
- @lang_class.sc_date
- end
- def last_generated
- @lang_class.last_generated
- end
- def sisu_version
- @lang_class.sisu_version
- end
- def ruby_version
- @lang_class.ruby_version
- end
- def suggested_links
- @lang_class.suggested_links
- end
- def language_version_list
- @lang_class.language_version_list
- end
- def language
- @lang_class.language
- end
- def manifest_description
- @lang_class.manifest_description
- end
- def manifest_description_output
- @lang_class.manifest_description_output
- end
- def manifest_description_metadata
- @lang_class.manifest_description_metadata
- end
- def language_list_translated
- @lang_class.language_list
- end
- def language_list
- case @trans_str
- when /American/i; 'American English' # tag depreciated, see iso 639-2
- when /English/i; 'English'
- when /French/i; 'français'
- when /German/i; 'Deutsch'
- when /Italian/i; 'Italiano'
- when /Spanish/i; 'español'
- 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'
- when /Finnish/i; 'suomi'
- when /Norwegian/i; 'norsk'
- when /Icelandic/i; 'Icelandic'
- when /Dutch/i; 'Nederlands'
- when /Estonian/i; 'Estonian'
- when /Hungarian/i; 'Hungarian'
- when /Polish/i; 'polski'
- when /Romanian/i; 'română'
- when /Russian/i; 'Русский (Russkij)'
- when /Greek/i; 'Ελληνικά (Ellinika)'
- when /Ukranian/i; 'українська (ukrajins\'ka)'
- when /Turkish/i; 'Türkçe'
- when /Slovenian/i; 'Slovenian'
- when /Croatian/i; 'Croatian'
- when /Slovak(?:ian)?/i; 'slovensky' #slovensky ?
- when /Czech/i; 'česky'
- when /Bulgarian/i; 'Български (Bəlgarski)'
- when /Japanese/i; '日本語 (Nihongo)'
- when /Korean/i; '한국어 (Hangul)'
- #when /Catalan/i; 'català'
- else 'English'
- end
- #check on 中文 and عربي
- end
- end
- class English
- def initialize(md,doc_lang,trans_str)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'filename'
- end
- def filetype_description
- 'filetype description'
- end
- def metadata
- 'metadata'
- end
- def file_size
- 'file size'
- end
- def full_title #dc
- 'Title'
- end
- def title
- 'Title'
- end
- def subtitle
- 'Subtitle'
- end
- def author
- 'Author'
- end
- def author #dc
- 'Creator'
- end
- def contributor #dc
- 'Contributor'
- end
- def translator
- 'Translator'
- end
- def illustrator
- 'Illustrator'
- end
- def publisher #dc
- 'Publisher'
- end
- def prepared_by
- 'Prepared by'
- end
- def digitized_by
- 'Digitized by'
- end
- def contents
- 'Contents'
- end
- def subject #dc
- 'Subject'
- end
- def description #dc (watch)
- 'Description'
- end
- def abstract #dc
- 'Abstract'
- end
- def type #dc
- 'Type'
- end
- def rights #dc
- 'Rights'
- end
- def date #dc
- 'Date'
- end
- def date_created #dc
- 'Date created'
- end
- def date_issued #dc
- 'Date issued'
- end
- def date_available #dc
- 'Date available'
- end
- def date_modified #dc
- 'Date modified'
- end
- def date_valid #dc
- 'Date valid'
- end
- def language #dc
- 'Language'
- end
- def language_original
- 'Original Language'
- end
- def format #dc
- 'Format'
- end
- def identifier #dc
- 'Identifier'
- end
- def source #dc
- 'Source'
- end
- def relation #dc
- 'Relation'
- end
- def coverage #dc
- 'Coverage'
- end
- def keywords
- 'Keywords'
- end
- def comments
- 'Comments'
- end
- def cls_loc
- 'Classify Library of Congress'
- end
- def cls_dewey
- 'Classify Dewey'
- end
- def cls_oclc
- 'Classify OCLC number'
- end
- def cls_gutenberg
- 'Classify Project Gutenberg'
- end
- def cls_isbn
- 'Classify ISBN'
- end
- def prefix_a
- 'Prefix (a)'
- end
- def prefix_b
- 'Prefix (b)'
- end
- def topic_register
- 'Topics Registered'
- end
- def sourcefile
- 'Sourcefile'
- end
- def word_count
- 'Word Count approximate'
- end
- def sourcefile_digest
- 'Sourcefile Digest'
- end
- def digest_md5
- 'Sourcefile Digest (md5)'
- end
- def digest_sha256
- 'Sourcefile Digest (sha256)'
- end
- def sc_number
- 'Document (RCS/CVS) number'
- end
- def sc_date
- 'Document (RCS/CVS) number'
- end
- def last_generated
- 'Document (dal) last generated'
- end
- def sisu_version
- 'Generated by'
- end
- def ruby_version
- 'Ruby version'
- end
- def suggested_links
- 'metadata suggested links'
- end
- def language_version_list
- 'Document Language Versions, manifests'
- end
- def manifest_description
- 'SiSU manifest of document filetypes and metadata'
- end
- def manifest_description_output
- 'Available document filetypes'
- end
- def manifest_description_metadata
- 'Document Metadata'
- end
- def language_list_translated
- case @trans_str
- when /American/i; 'American English' # tag depreciated, see iso 639-2
- when /English/i; 'English'
- when /French/i; 'French'
- when /German/i; 'German'
- when /Italian/i; 'Italian'
- when /Spanish/i; 'Spanish'
- 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'
- when /Finnish/i; 'Finnish'
- when /Norwegian/i; 'Norwegian'
- when /Icelandic/i; 'Icelandic'
- when /Dutch/i; 'Dutch'
- when /Estonian/i; 'Estonian'
- when /Hungarian/i; 'Hungarian'
- when /Polish/i; 'Polish'
- when /Romanian/i; 'Romanian'
- when /Russian/i; 'Russian'
- when /Greek/i; 'Greek'
- when /Ukranian/i; 'Ukranian'
- when /Turkish/i; 'Turkish'
- when /Slovenian/i; 'Slovenian'
- when /Croatian/i; 'Croatian'
- when /Slovak(?:ian)?/i; 'Slovakian'
- when /Czech/i; 'Czech'
- when /Bulgarian/i; 'Bulgarian'
- else @trans_str
- end
- end
- end
- class French
- def initialize(md,doc_lang,trans_str)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'nom de fichier'
- end
- def filetype_description
- description
- end
- def metadata
- 'metadonnées'
- end
- def file_size
- 'taille'
- end
- def full_title #dc
- 'Titre'
- end
- def title
- 'Titre'
- end
- def subtitle
- 'Sous titre'
- end
- def author
- 'Auteur'
- end
- def author #dc
- 'Auteur'
- end
- def contributor #dc
- 'Contributeur'
- end
- def translator
- 'Traducteur'
- end
- def illustrator
- 'Illustrateur'
- end
- def publisher #dc
- 'Éditeur'
- end
- def prepared_by
- 'Préparé par'
- end
- def digitized_by
- 'Numérisé par'
- end
- def contents
- 'Contents' #translate
- end
- def subject #dc
- 'Sujet'
- end
- def description #dc (watch)
- 'Description'
- end
- def abstract #dc
- 'Résumé'
- end
- def type #dc
- 'Type'
- end
- def rights #dc
- 'Droits relatifs à la ressource'
- end
- def date #dc
- 'Date'
- end
- def date_created #dc
- 'Date de création'
- end
- def date_issued #dc
- 'Date de publication'
- end
- def date_available #dc
- 'Date de mise à disposition'
- end
- def date_modified #dc
- 'Date de modification'
- end
- def date_valid #dc
- 'Date de validité'
- end
- def language #dc
- 'Langue'
- end
- def language_original
- 'Langue originale'
- end
- def format #dc
- 'Format'
- end
- def identifier #dc
- 'Identifiant'
- end
- def source #dc
- 'Source'
- end
- def relation #dc
- 'Lien'
- end
- def coverage #dc
- 'Portée du document'
- end
- def keywords
- 'Mots clef'
- end
- def comments
- 'Commentaires'
- end
- def cls_loc
- 'Classification de la bibliothèque du congres'
- end
- def cls_dewey
- 'Classification Dewey'
- end
- def cls_oclc # fix
- 'Classify OCLC number'
- end
- def cls_gutenberg
- 'Classification du project Gutenberg'
- end
- def cls_isbn
- 'Classification ISBN'
- end
- def prefix_a
- 'Préfixe (a)'
- end
- def prefix_b
- 'Préfixe (b)'
- end
- def topic_register
- 'Topics Registered'
- end
- def sourcefile
- 'Fichier source'
- end
- def word_count
- 'Nombre approximatif de mots'
- end
- def sourcefile_digest
- 'Condensé du fichier source'
- end
- def digest_md5
- 'Condensé du fichier source (md5)'
- end
- def digest_sha256
- 'Condensé du fichier source (sha256)'
- end
- def sc_number
- 'Numéro (RCS/CVS) du document'
- end
- def sc_date
- 'Numéro (RCS/CVS) du document'
- end
- def last_generated
- 'Dernière production du document (metaverse)'
- end
- def sisu_version
- 'Généré par'
- end
- def ruby_version
- 'Version de Ruby'
- end
- def suggested_links
- 'Liens suggérés'
- end
- def language_version_list
- 'Versions des langues du document, manifestes'
- end
- def manifest_description
- 'SiSU manifest of document filetypes and metadata'
- end
- def manifest_description_output
- 'Manifeste SiSU du document généré'
- end
- def manifest_description_metadata
- 'Manifeste SiSU des métadonnées du document'
- end
- def language_list_translated
- case @trans_str
- when /American/i; 'Anglais americain' # tag depreciated, see iso 639-2
- when /English/i; 'Anglais'
- when /French/i; 'Français'
- when /German/i; 'Allemand'
- when /Italian/i; 'Italien'
- when /Spanish/i; 'Espagnol'
- 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'
- when /Finnish/i; 'Finnois'
- when /Norwegian/i; 'Norvégien'
- when /Icelandic/i; 'Islandais'
- when /Dutch/i; 'Néerlandais'
- when /Estonian/i; 'Estonien'
- when /Hungarian/i; 'Hongrois'
- when /Polish/i; 'Polonais'
- when /Romanian/i; 'Roumain'
- when /Russian/i; 'Russe'
- when /Greek/i; 'Grec'
- when /Ukranian/i; 'Ukrainien'
- when /Turkish/i; 'Turc'
- when /Slovenian/i; 'Slovène'
- when /Croatian/i; 'Croate'
- when /Slovak(?:ian)?/i; 'Slovaque'
- when /Czech/i; 'Tcheque'
- when /Bulgarian/i; 'Bulgare'
- else @trans_str
- end
- end
- end
- class German
- def initialize(md,doc_lang,trans_str)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'Dateiname'
- end
- def filetype_description
- description
- end
- def metadata
- 'Metadata'
- end
- def file_size
- 'Dateigrösse'
- end
- def full_title #dc
- 'Titel'
- end
- def title
- 'Titel'
- end
- def subtitle
- 'Untertitel'
- end
- def author
- 'Autor'
- end
- def contributor #dc
- 'Mitautor'
- end
- def translator
- 'Übersetzung'
- end
- def illustrator
- 'Illustrator'
- end
- def publisher
- 'Herausgeber'
- end
- def prepared_by
- 'gesetzt von'
- end
- def digitized_by
- 'digitalisiert von'
- end
- def contents
- 'Contents' #translate
- end
- def subject
- 'Titel'
- end
- def description #dc (watch)
- 'Beschreibung'
- end
- def abstract #dc
- 'Abstract'
- end
- def type
- 'Typ'
- end
- def rights
- 'Rechte'
- end
- def date
- 'Datum'
- end
- def date_created
- 'Erstellung'
- end
- def date_issued
- 'Herausgabe'
- end
- def date_available
- 'Veröffentlichung'
- end
- def date_modified
- 'Modifikation'
- end
- def date_valid
- 'Gültigkeit'
- end
- def language
- 'Sprache'
- end
- def language_original
- 'Ursprungssprache'
- end
- def format #dc
- 'Format'
- end
- def identifier #dc
- 'Bezeichnung'
- end
- def source #dc
- 'Quelle'
- end
- def relation #dc
- 'Beziehung'
- end
- def coverage #dc
- 'Eingrenzung'
- end
- def keywords
- 'Schlüsselwörter'
- end
- def comments
- 'Kommentare'
- end
- def cls_loc
- 'Klassifikation nach Library of Congress'
- end
- def cls_dewey
- 'Klassifikation nach Dewey'
- end
- def cls_oclc # fix
- 'Classify OCLC number'
- end
- def cls_gutenberg
- 'Klassifikation nach Projekt Gutenberg'
- end
- def cls_isbn
- 'Klassifikation nach ISBN'
- end
- def prefix_a
- 'Präfix (a)'
- end
- def prefix_b
- 'Präfix (b)'
- end
- def topic_register
- 'Topics Registered'
- end
- def sourcefile
- 'Quelldatei'
- end
- def word_count
- 'Anzahl Wörter'
- end
- def sourcefile_digest
- 'Quelldatei Digest'
- end
- def digest_md5
- 'Prüfsumme der Quelldatei (MD5)'
- end
- def digest_sha256
- 'Prüfsumme der Quelldatei (SHA256)'
- end
- def sc_number
- 'Dokumentversion (RCS/CVS)'
- end
- def sc_date
- 'Dokumentdatum (RCS/CVS)'
- end
- def last_generated
- 'Letzte Erstellung (metaverse)'
- end
- def sisu_version
- 'erstellt bei'
- end
- def ruby_version
- 'Ruby Version'
- end
- def suggested_links
- 'empfohlene Links'
- end
- def language_version_list
- 'verfügbare Sprachen'
- end
- def manifest_description
- 'SiSU manifest of document filetypes and metadata'
- end
- def manifest_description_output
- 'SiSU Zusammenfassung des Dokumentes'
- end
- def manifest_description_metadata
- 'SiSU Zusammenfassung der Metadaten'
- end
- def language_list_translated
- case @trans_str
- when /American/i; 'Amerikanisch-Englisch' # tag depreciated, see iso 639-2
- when /English/i; 'Englisch'
- when /French/i; 'Französisch'
- when /German/i; 'Deutsch'
- when /Italian/i; 'Italienisch'
- when /Spanish/i; 'Spanisch'
- 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'
- when /Finnish/i; 'Finnisch'
- when /Norwegian/i; 'Norwegisch'
- when /Icelandic/i; 'Isländisch'
- when /Dutch/i; 'Niederländisch'
- when /Estonian/i; 'Estnisch'
- when /Hungarian/i; 'Ungarisch'
- when /Polish/i; 'Polnisch'
- when /Romanian/i; 'Rumänisch'
- when /Russian/i; 'Russisch'
- when /Greek/i; 'Griechisch'
- when /Ukranian/i; 'Ukrainisch'
- when /Turkish/i; 'Türkisch'
- when /Slovenian/i; 'Slovenisch'
- when /Croatian/i; 'Kroatisch'
- when /Slovak(?:ian)?/i; 'Slovakisch'
- when /Czech/i; 'Tschechisch'
- when /Bulgarian/i; 'Bulgarisch'
- else @trans_str
- end
- end
- end
- class Spanish
- def initialize(md,doc_lang,trans_str)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'nombre del fichero'
- 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 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
- 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
- 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)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'nome del file'
- end
- def filetype_description
- description
- end
- def metadata
- 'metadati'
- end
- def file_size
- 'dimensione'
- end
- def full_title #dc
- 'Titolo'
- end
- def title
- 'Titolo'
- end
- def subtitle
- 'Sottotitolo'
- end
- def author #dc
- 'Autore'
- end
- def contributor #dc
- 'Contributore'
- end
- def translator
- 'Traduttore'
- end
- def illustrator
- 'Illustratore'
- end
- def publisher #dc
- 'Casa editrice'
- end
- def prepared_by
- 'Preparato da'
- end
- def digitized_by
- 'Convertito in digitale da'
- end
- def contents
- 'Contents' #translate
- end
- def subject #dc
- 'Oggetto'
- end
- def description #dc (watch)
- 'Descrizione'
- end
- def abstract #dc
- 'Abstract'
- end
- def type #dc
- 'Tipo'
- end
- def rights #dc
- 'Diritti del lettore'
- end
- def date #dc
- 'Data'
- end
- def date_created #dc
- 'Data di creazione'
- end
- def date_issued #dc
- 'Data di pubblicazione'
- end
- def date_available #dc
- 'Data di effettiva disponibilità'
- end
- def date_modified #dc
- 'Data di ultima modifica'
- end
- def date_valid #dc
- 'Data di inizo validità'
- end
- def language #dc
- 'Lingua'
- end
- def language_original
- 'Lingua originale'
- end
- def format #dc
- 'Formato'
- end
- def identifier #dc
- 'Indentificatore'
- end
- def source #dc
- 'Fonte'
- end
- def relation #dc
- 'Collegamento'
- end
- def coverage #dc
- 'Ambito'
- end
- def keywords
- 'Parole chiave'
- end
- def comments
- 'Commenti'
- end
- def cls_loc
- 'Classificazione della Library of Congress'
- end
- def cls_dewey
- 'Classificazione Dewey'
- end
- def cls_oclc # fix
- 'Classify OCLC number'
- end
- def cls_gutenberg
- 'Classificazione del Progetto Gutenberg'
- end
- def cls_isbn
- 'Numero ISBN'
- end
- def prefix_a
- 'Premessa (a)'
- end
- def prefix_b
- 'Premessa (b)'
- end
- def topic_register
- 'Topics Registered'
- end
- def sourcefile
- 'Sorgente'
- end
- def word_count
- 'Numero approssimativo di parole'
- end
- def sourcefile_digest
- 'Checksum file sorgente'
- end
- def digest_md5
- 'Checksum file sorgente (md5)'
- end
- def digest_sha256
- 'Checksum file sorgente (sha256)'
- end
- def sc_number
- 'Numero di revisione (RCS/CVS)'
- end
- def sc_date
- 'Numero di revisione (RCS/CVS)'
- end
- def last_generated
- 'Data di ultima generazione (dal metaverse)'
- end
- def sisu_version
- 'Generato da'
- end
- def ruby_version
- 'Ruby versione'
- end
- def suggested_links
- 'Link suggeriti'
- end
- def language_version_list
- 'Traduzioni disponibili'
- end
- def manifest_description
- 'SiSU manifest of document filetypes and metadata'
- end
- def manifest_description_output
- 'Inventario SiSU dell\'output generato'
- end
- def manifest_description_metadata
- 'Inventario SiSU dei metadati'
- end
- def language_list_translated
- case @trans_str
- when /American/i; 'Inglese USA' # tag depreciated, see iso 639-2
- when /English/i; 'Inglese'
- when /French/i; 'Francese'
- when /German/i; 'Tedesco'
- when /Italian/i; 'Italiano'
- when /Spanish/i; 'Spagnolo'
- 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'
- when /Finnish/i; 'Finlandese'
- when /Norwegian/i; 'Norvegese'
- when /Icelandic/i; 'Islandese'
- when /Dutch/i; 'Olandese'
- when /Estonian/i; 'Estone'
- when /Hungarian/i; 'Ungherese'
- when /Polish/i; 'Polacco'
- when /Romanian/i; 'Romeno'
- when /Russian/i; 'Russo'
- when /Greek/i; 'Greco'
- when /Ukranian/i; 'Ucraino'
- when /Turkish/i; 'Turco'
- when /Slovenian/i; 'Sloveno'
- when /Croatian/i; 'Croato'
- when /Slovak(?:ian)?/i; 'Slovacco'
- when /Czech/i; 'Ceco'
- when /Bulgarian/i; 'Bulgaro'
- else @trans_str
- end
- end
- end
- class Finnish
- def initialize(md,doc_lang,trans_str)
- @md,@doc_lang,@trans_str=md,doc_lang,trans_str
- end
- def filename
- 'tiedostonimi'
- end
- def filetype_description
- description
- end
- def metadata
- 'metadata'
- end
- def file_size
- 'tiedoston koko'
- end
- def full_title #dc
- 'otsikko'
- end
- def title
- 'Otsikko'
- end
- def subtitle
- 'Alaotsikko'
- end
- def author #dc
- 'tekijä'
- end
- def contributor #dc
- 'osallistuja'
- end
- def translator
- 'Kääntäjä'
- end
- def illustrator
- 'Kuvittaja'
- end
- def publisher #dc
- 'julkaisija'
- end
- def prepared_by
- 'Valmistaja'
- end
- def digitized_by
- 'Digitalisoinut'
- end
- def contents
- 'Contents' #translate
- end
- def subject #dc
- 'aihe'
- end
- def description #dc (watch)
- 'kuvaus'
- end
- def abstract #dc
- 'tiivistelmä'
- end
- def type #dc
- 'tyyppi'
- end
- def rights #dc
- 'oikeudet'
- end
- def date #dc
- 'päiväys'
- end
- def date_created #dc
- 'luontipäivä'
- end
- def date_issued #dc
- 'julkaisupäivä'
- end
- def date_available #dc
- 'saantipäivä'
- end
- def date_modified #dc
- 'muokkauspäivä'
- end
- def date_valid #dc
- 'kelpoisuuspäivä'
- end
- def language #dc
- 'kieli'
- end
- def language_original
- 'Alkuperäiskieli'
- end
- def format #dc
- 'muoto'
- end
- def identifier #dc
- 'tunnus'
- end
- def source #dc
- 'lähde'
- end
- def relation #dc
- 'suhde'
- end
- def coverage #dc
- 'kattavuus'
- end
- def keywords
- 'Avainsanat'
- end
- def comments
- 'Kommentit'
- end
- def cls_loc
- 'Classify Library of Congress'
- end
- def cls_dewey
- 'Classify Dewey'
- end
- def cls_oclc # fix
- 'Classify OCLC number'
- end
- def cls_gutenberg
- 'Classify Project Gutenberg'
- end
- def cls_isbn
- 'Classify ISBN'
- end
- def prefix_a
- 'Prefix (a)'
- end
- def prefix_b
- 'Prefix (b)'
- end
- def topic_register
- 'Topics Registered'
- end
- def sourcefile
- 'Lähdetiedosto'
- end
- def word_count
- 'Arvioitu sanamäärä'
- end
- def sourcefile_digest
- 'Lähdetiedoston tiiviste'
- end
- def digest_md5
- 'Lähdetiedoston tiiviste (md5)'
- end
- def digest_sha256
- 'Lähdetiedoston tiiviste (sha256)'
- end
- def sc_number
- 'Dokumentin RCS/CVS-numero'
- end
- def sc_date
- 'Dokumentin RCS/CVS-päiväys'
- end
- def last_generated
- 'Viimeksi tuotettu dokumentti (metaverse)'
- end
- def sisu_version
- 'Generoinut'
- end
- def ruby_version
- 'Ruby-versio'
- end
- def suggested_links
- 'metadatan ehdottamat linkit'
- end
- def language_version_list
- 'Dokumentin kieliversiot, manifestit'
- end
- def manifest_description
- 'SiSU manifest of document filetypes and metadata'
- end
- def manifest_description_output
- 'Tuotetun tuloksen SISU-manifesti'
- end
- def manifest_description_metadata
- 'Dokumenttimetadatan SISU-manifesti'
- end
- def language_list_translated
- case @trans_str
- when /American/i; 'Amerikanenglanti' # tag depreciated, see iso 639-2
- when /English/i; 'Englanti'
- when /French/i; 'Ranska'
- when /German/i; 'Saksa'
- when /Italian/i; 'Italia'
- when /Spanish/i; 'Espanja'
- 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'
- when /Finnish/i; 'Suomi'
- when /Norwegian/i; 'Norja'
- when /Icelandic/i; 'Islanti'
- when /Dutch/i; 'Hollanti'
- when /Estonian/i; 'Viro'
- when /Hungarian/i; 'Unkari'
- when /Polish/i; 'Puola'
- when /Romanian/i; 'Romania'
- when /Russian/i; 'Venäjä'
- when /Greek/i; 'Kreikka'
- when /Ukranian/i; 'Ukraina'
- when /Turkish/i; 'Turkki'
- when /Slovenian/i; 'Slovenia'
- when /Croatian/i; 'Kroatia'
- when /Slovak(?:ian)?/i; 'Slovakki'
- when /Czech/i; 'Tsekki'
- when /Bulgarian/i; 'Bulgaria'
- else @trans_str
- end
- end
- end
- class Portuguese < English
- end
- class Swedish < English
- def contents
- 'Innehåll'
- end
- end
- class Danish < English
- end
- class Norwegian < English
- end
- class Icelandic < English
- end
- class Dutch < English
- end
- class Estonian < English
- end
- class Hungarian < English
- end
- class Polish < English
- end
- class Romanian < English
- end
- class Russian < English
- end
- class Greek < English
- end
- class Ukranian < English
- end
- class Turkish < English
- end
- class Croatian < English
- end
- class Slovakian < English
- end
- class Czech < English
- end
- class Bulgarian < English
- end
-end
-__END__
-http://www.debian.org/international/l10n/po/
-http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
-http://www.loc.gov/standards/iso639-2/php/code_list.php
-albanian sq
-amharic am
-arabic ar
-armenian hy
-asturian
-bahasai
-bahasam
-basque eu
-bengali bn
-brazil[ian] pt_BR
-breton br
-bulgarian bg
-catalan ca
-coptic
-croatian hr
-czech cs
-danish da
-divehi
-dutch nl
-english en
-esperanto eo
-estonian et
-galician gl
-german de
-greek el
-hebrew he
-hindi hi
-icelandic is
-interlingua ia
-irish ga
-italian it
-farsi
-finnish fi
-french fr
-lao lo
-latin la
-latvian lv
-lithuanian lt
-lsorbian
-magyar
-malayalam ml
-marathi mr
-norsk no
-nynorsk nn
-occitan oc
-polish pl
-portuges pt
-romanian ro
-russian ru
-samin se (check sami?)
-sanskrit sa
-scottish # (gd (Gaelic (Scots)))
-serbian sr
-slovak sk
-slovenian sl
-spanish es
-swedish sv
-syriac # (ar_SY (Arabic, as spoken in Syrian Arab Republic))
-tamil ta
-telugu te
-thai th
-turkish tr
-turkmen tk
-ukrainian uk
-urdu ur
-usorbian
-vietnamese vi
-welsh cy
diff --git a/lib/sisu/v4/qrcode.rb b/lib/sisu/v4/qrcode.rb
deleted file mode 100644
index a36d8973..00000000
--- a/lib/sisu/v4/qrcode.rb
+++ /dev/null
@@ -1,726 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/qrcode.rb;hb=HEAD>
-
- * 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
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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::Defaults.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/
- 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/
- cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_md.dir,@md.opt.cmd)
- cmd.qrencode
- end
- def output_metadata_short
- mn=''
- @manifest[:txt_title].each do |x|
- mn += x
- end
- cmd=SiSU_Env::SystemCall.new(mn,@f.place_file.qrcode_title.dir,@md.opt.cmd)
- cmd.qrencode
- end
- def summarize(id,file,pth='',rel='',url='',img='● ')
- size=(File.size("#{pth}/#{file}")/1024.00).to_s
- kb=/([0-9]+\.[0-9]{0,1})/m.match(size)[1]
- @manifest[:txt] <<<<WOK
-#{id} #{kb}
- #{@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
- #manifests
- @m=@m.uniq
- @m
- end
- def languages(id,file)
- flv=published_manifests?
- flv.each do |l|
- SiSU_Translate::Source.new(@md,@language,l[:n]).language_list
- @manifest[:txt] << "#{l[:mu]} #{l[:l]}\n"
- end
- end
- def published_languages(id,file)
- flv=published_manifests?
- flv.each do |l|
- @manifest[:txt] << "#{l[:l]} #{@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
- if FileTest.file?(@f.place_file.src.dir)==true
- pth=@f.output_path.src.dir
- rel=@f.output_path.src.rel
- url=@f.output_path.src.url
- id,file='Markup Composite File (SiSU source)',@f.base_filename.src
- summarize_sources(id,file,pth,rel,url)
- end
- else
- if FileTest.file?(@f.place_file.src.dir)==true
- pth=@f.output_path.src.dir
- rel=@f.output_path.src.rel
- url=@f.output_path.src.url
- id,file='Markup (SiSU source)',@f.base_filename.src
- summarize_sources(id,file,pth,rel,url)
- end
- end
- if FileTest.file?(@f.place_file.sisupod.dir)==true
- pth=@f.output_path.sisupod.dir
- rel=@f.output_path.sisupod.rel
- url=@f.output_path.sisupod.url
- id,file='SiSU doc (zip)',@f.base_filename.sisupod
- summarize_sources(id,file,pth,rel,url)
- end
- if FileTest.file?(@f.place_file.pot.dir)==true
- pth=@f.output_path.pot.dir
- rel=@f.output_path.pot.rel_sm
- url=@f.output_path.pot.url
- id,file='SiSU pot',@f.base_filename.pot
- summarize_sources(id,file,pth,rel,url)
- end
- end
- def metadata_tests
- if defined? @md.title.full \
- and @md.title.full=~/\S+/
- id,info=@translate.full_title,@md.title.full
- #id,info=@translate.full_title,%{"#{@md.title.full}"}
- metadata(id,info)
- md_title_info(id,info)
- end
- if defined? @md.creator.author \
- and @md.creator.author=~/\S+/
- id,info=@translate.author,@md.creator.author
- metadata(id,info)
- md_title_info(id,info)
- end
- if defined? @md.creator.editor \
- and @md.creator.editor=~/\S+/
- id,info=@translate.editor,@md.creator.editor
- metadata(id,info)
- end
- if defined? @md.creator.contributor \
- and @md.creator.contributor=~/\S+/
- id,info=@translate.contributor,@md.creator.contributor
- metadata(id,info)
- end
- if defined? @md.creator.translator \
- and @md.creator.translator=~/\S+/
- id,info=@translate.translator,%{(#{@md.creator.translator})}
- metadata(id,info)
- md_title_info(id,info)
- end
- if defined? @md.creator.illustrator \
- and @md.creator.illustrator=~/\S+/
- id,info=@translate.illustrator,@md.creator.illustrator
- metadata(id,info)
- end
- if defined? @md.publisher \
- and @md.publisher=~/\S+/ #dc
- id,info=@translate.publisher,@md.publisher
- metadata(id,info)
- end
- if defined? @md.creator.prepared_by \
- and @md.creator.prepared_by=~/\S+/
- id,info=@translate.prepared_by,@md.creator.prepared_by
- metadata(id,info)
- end
- if defined? @md.creator.digitized_by \
- and @md.creator.digitized_by=~/\S+/
- id,info=@translate.digitized_by,@md.creator.digitized_by
- metadata(id,info)
- end
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/ #dc
- id,info=@translate.rights,@md.rights.all
- metadata(id,info)
- end
- if defined? @md.date.published
- if defined? @md.date.published \
- and @md.date.published=~/\S+/ #dc
- id,info=@translate.date,@md.date.published
- metadata(id,info)
- md_title_info(id,info)
- end
- if defined? @md.date.created \
- and @md.date.created=~/\S+/ #dc
- id,info=@translate.date_created,@md.date.created
- metadata(id,info)
- end
- if defined? @md.date.issued \
- and @md.date.issued=~/\S+/ #dc
- id,info=@translate.date_issued,@md.date.issued
- metadata(id,info)
- end
- if defined? @md.date.available \
- and @md.date.available=~/\S+/ #dc
- id,info=@translate.date_available,@md.date.available
- metadata(id,info)
- end
- if defined? @md.date.modified \
- and @md.date.modified=~/\S+/ #dc
- id,info=@translate.date_modified,@md.date.modified
- metadata(id,info)
- end
- if defined? @md.date.valid \
- and @md.date.valid=~/\S+/ #dc
- id,info=@translate.date_valid,@md.date.valid
- metadata(id,info)
- end
- end
- if defined? @md.title.language \
- and @md.title.language=~/\S+/
- id,info=@translate.language,@md.title.language
- metadata(id,info)
- end
- if defined? @md.original.language \
- and @md.original.language=~/\S+/
- id,info=@translate.language_original,@md.original.language
- metadata(id,info)
- end
- if defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/
- id,info=@translate.subject,@md.classify.subject
- metadata(id,info)
- end
- if defined? @md.classify.keywords \
- and @md.classify.keywords=~/\S+/
- id,info=@translate.keywords,@md.classify.keywords
- metadata(id,info)
- end
- if defined? @md.classify.loc \
- and @md.classify.loc=~/\S+/
- id,info=@translate.cls_loc,@md.classify.loc
- metadata(id,info)
- end
- if defined? @md.classify.dewey \
- and @md.classify.dewey=~/\S+/
- id,info=@translate.cls_dewey,@md.classify.dewey
- metadata(id,info)
- end
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/
- id,info=@translate.description,@md.notes.description
- metadata(id,info)
- end
- if defined? @md.notes.abstract \
- and @md.notes.abstract=~/\S+/
- id,info=@translate.abstract,@md.notes.abstract
- metadata(id,info)
- end
- if defined? @md.notes.comment \
- and @md.notes.comment=~/\S+/
- id,info=@translate.comments,@md.notes.comment
- metadata(id,info)
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/
- id,info=@translate.coverage,@md.notes.coverage
- metadata(id,info)
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/
- id,info=@translate.relation,@md.notes.relation
- metadata(id,info)
- end
- #if defined? @md.notes.source \
- #and @md.notes.source=~/\S+/
- # id,info=@translate.source,@md.notes.source
- # metadata(id,info)
- #end
- #if defined? @md.notes.history \
- #and @md.notes.history=~/\S+/
- # id,info=@translate.history,@md.notes.history
- # metadata(id,info)
- #end
- if defined? @md.notes.type \
- and @md.notes.type=~/\S+/ #dc
- id,info=@translate.type,@md.type
- metadata(id,info)
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/
- id,info=@transate.format,@md.notes.format
- metadata(id,info)
- end
- if defined? @md.notes.prefix_a \
- and @md.notes.prefix_a=~/\S+/
- id,info=@translate.prefix_a,@md.notes.prefix_a
- metadata(id,info)
- end
- if defined? @md.notes.prefix_b \
- and @md.notes.prefix_b=~/\S+/
- id,info=@translate.prefix_b,@md.notes.prefix_b
- metadata(id,info)
- end
- if defined? @md.original.source \
- and @md.original.source=~/\S+/
- id,info=@translate.source,@md.original.source
- metadata(id,info)
- end
- if defined? @md.identifier.oclc \
- and @md.identifier.oclc=~/\S+/
- id,info=@translate.cls_oclc,@md.identifier.oclc
- @manifest[:txt] << %{#{id}:\n}
- @manifest[:txt] << %{#{info}\n}
- end
- if defined? @md.identifier.isbn \
- and @md.identifier.isbn=~/\S+/
- id,info=@translate.cls_isbn,@md.identifier.isbn
- metadata(id,info)
- end
- if defined? @md.topic_register_array \
- and @md.topic_register_array.length > 0
- @manifest[:txt] << %{#{@translate.topic_register}:\n}
-@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
- @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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/relaxng.rb b/lib/sisu/v4/relaxng.rb
deleted file mode 100644
index 0ca42817..00000000
--- a/lib/sisu/v4/relaxng.rb
+++ /dev/null
@@ -1,1161 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/relaxng.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: relaxng flow/logic
-
-=end
-module SiSU_Relaxng
- require_relative 'sysenv' # sysenv.rb
- class RelaxNG
- def gpl3_or_later
- @gpl3_or_later =<<RELAXNG
-=begin
-
- * Name: SiSU generated relaxng
-
- * Description: generated relaxng for SiSU
- (SiSU is a framework for document structuring, publishing and search)
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997 - 2013 Ralph Amissah All Rights Reserved.
-
- * License: GPL 3 or later:
-
- SiSU, a framework for document structuring, publishing and search
-
- Copyright: (C) 1997 - 2013 Ralph Amissah
-
- This program is free software: you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the Free
- Software Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful, but WITHOUT
- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
- You should have received a copy of the GNU General Public License along with
- this program. If not, see <http://www.gnu.org/licenses/>.
-
- If you have Internet connection, the latest version of the GPL should be
- available at these locations:
- <http://www.fsf.org/licenses/gpl.html>
- <http://www.gnu.org/licenses/gpl.html>
- <http://www.jus.uio.no/sisu/gpl.fsf>
-
- * 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>
-
-=end
-RELAXNG
- end
- def rnc_name
- def output_sax
- 'sisu_sax.rnc'
- end
- def output_dom
- 'sisu_dom.rnc'
- end
- def output_xhtml
- 'sisu_xhtml.rnc'
- end
- def input_sax
- 'sisu_sax.rnc'
- end
- def input_dom
- 'sisu_dom.rnc'
- end
- def input_node
- 'sisu_node.rnc'
- end
- self
- end
- def rng_name
- def output_sax
- 'sisu_sax.rng'
- end
- def output_dom
- 'sisu_dom.rng'
- end
- def output_xhtml
- 'sisu_xhtml.rng'
- end
- def input_sax
- 'sisu_sax.rng'
- end
- def input_dom
- 'sisu_dom.rng'
- end
- def input_node
- 'sisu_node.rng'
- end
- self
- end
- def xsd_name
- def output_sax
- 'sisu_sax.xsd'
- end
- def output_dom
- 'sisu_dom.xsd'
- end
- def output_xhtml
- 'sisu_xhtml.xsd'
- end
- def input_sax
- 'sisu_sax.xsd'
- end
- def input_dom
- 'sisu_dom.xsd'
- end
- def input_node
- 'sisu_node.xsd'
- end
- self
- end
- def rnc_sisu_object_input
- @relaxng =<<RELAXNG
-#%% sisu object model: input
-#{gpl3_or_later}
-#%% definitions
-# dublin core:
-element-semantic =
- element semantic {
- # dublin core:
- element title { text }
- & element creator { text }?
- & element subject { text }?
- & element description { text }?
- & element publisher { text }?
- & element contributor { text }?
- & element date { text }?
- & element date.created { text }?
- & element date.issued { text }?
- & element date.available { text }?
- & element date.valid { text }?
- & element date.modified { text }?
- & element type { text }?
- & element format { text }?
- & element identifier { text }?
- & element source { text }?
- & element relation { text }?
- & element coverage { text }?
- & element rights { text }?
- & element keywords { text }?
- # extended semantic metadata:
- & attribute subtitle { text }?
- & attribute illustrator { text }?
- & attribute translator { text }?
- & attribute prepared_by { text }?
- & attribute digitized_by { text }?
- & attribute language { text }?
- & attribute language.original { text }?
- & attribute classify.pg { text }?
- & attribute classify.isbn { text }?
- & attribute classify.dewey { text }?
- & attribute classify.loc { text }?
- & attribute prefix.a { text }?
- & attribute prefix.b { text }?
- & attribute suffix { text }?
- & attribute comments { text }?
- & attribute abstract { text }?
- # & attribute information { text }?
- & attribute contact { text }?
- & attribute links { text }?
- }
-element-processing =
- element processing {
- attribute structure { text }?
- & attribute level { text }?
- & attribute markup { text }?
- & attribute bold { text }?
- & attribute italics { text }?
- & attribute papersize { text }?
- & attribute vocabulary { text }?
- & element date_scheme { text }?
- & element date.issued.scheme { text }?
- & element date.available.scheme { text }?
- & element date.valid.scheme { text }?
- & element date.modified.scheme { text }?
- }?
-element-head =
- element head {
- # processing instructions, and semantic data, distinguish?:
- element metadata {
- element title { text },
- element file { text },
- element generator { text },
- element-semantic,
- element-processing
- }+
- }
-# body text/contents
-# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
-element-txt =
- element txt {
- text*
- & element b { text }*
- & element i { text }*
- & element u { text }*
- & element ins { text }*
- & element del { text }*
- }
-element-endnote =
- element endnote {
- element number { text },
- element note { element-txt }+
- }+
-element-para =
- element para {
- # attribute paragraph_format { text },
- element-txt+
- & element-endnote?
- }
-element-external_space =
- element external_space {
- # ignored by sisu, provide program needs
- element program {
- # e.g. kdissert
- element name { text },
- element xpos { text },
- element ypos { text },
- element font { text },
- element outline_color { text },
- element text_color { text },
- element comment { text }
- }*
- }*,
-#%% structure
- element document {
- # document head:
- element-head,
- # document body:
- element body {
- # object, a unit of text, usually a paragraph with any associated endnotes
- element node {
- element structure {
- # structure document using either node:heading levels or node:heading relationships:
- # (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
- element level { text }?,
- # (ii) sisu alternatively could use node:heading relationship information to build document structure
- element node.id { text },
- element node.parent { text },
- element node.child { text }*
- },
- element node.objects {
- element object.heading {
- # nametag used only in headings, especially important for segmented html
- element nametag { text },
- element-para
- },
- element object.para {
- element-para
- }*
- }+,
- element-external_space
- }+
- }
- }
-RELAXNG
- end
- def rnc_sisu_object_dal
- @relaxng =<<RELAXNG
-#%% sisu object model: dal
-#{gpl3_or_later}
-#%% definitions
-# dublin core:
-element-semantic =
- element semantic {
- # dublin core:
- element title { text }
- & element creator { text }?
- & element subject { text }?
- & element description { text }?
- & element publisher { text }?
- & element contributor { text }?
- & element date { text }?
- & element date.created { text }?
- & element date.issued { text }?
- & element date.available { text }?
- & element date.valid { text }?
- & element date.modified { text }?
- & element type { text }?
- & element format { text }?
- & element identifier { text }?
- & element source { text }?
- & element relation { text }?
- & element coverage { text }?
- & element rights { text }?
- & element keywords { text }?
- # extended semantic metadata:
- & attribute subtitle { text }?
- & attribute illustrator { text }?
- & attribute translator { text }?
- & attribute prepared_by { text }?
- & attribute digitized_by { text }?
- & attribute language { text }?
- & attribute language.original { text }?
- & attribute classify.pg { text }?
- & attribute classify.isbn { text }?
- & attribute classify.dewey { text }?
- & attribute classify.loc { text }?
- & attribute prefix.a { text }?
- & attribute prefix.b { text }?
- & attribute suffix { text }?
- & attribute comments { text }?
- & attribute abstract { text }?
- # & attribute information { text }?
- & attribute contact { text }?
- & attribute links { text }?
- }
-element-processing =
- element processing {
- attribute structure { text }?
- & attribute level { text }?
- & attribute markup { text }?
- & attribute bold { text }?
- & attribute italics { text }?
- & attribute papersize { text }?
- & attribute vocabulary { text }?
- & element date_scheme { text }?
- & element date.issued.scheme { text }?
- & element date.available.scheme { text }?
- & element date.valid.scheme { text }?
- & element date.modified.scheme { text }?
- }?
-element-head =
- element head {
- # processing instructions, and semantic data, distinguish?:
- element metadata {
- element title { text },
- element file { text },
- element generator { text },
- element-semantic,
- element-processing
- }+
- }
-# body text/contents
-# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
-element-txt =
- element txt {
- text*
- & element b { text }*
- & element i { text }*
- & element u { text }*
- & element ins { text }*
- & element del { text }*
- }
-element-checksum.endnote = element checksum.clean { text }
-element-endnote =
- element endnote {
- element number { text },
- element note { element-txt }+,
- element-checksum.endnote
- }+
-element-checksum.para =
- element checksum.para {
- element checksum.clean { text },
- element checksum.marked { text }
- }
-element-para =
- element para {
- # attribute paragraph_format { text },
- element-txt+
- & element-endnote?
- }
-element-object =
- element object {
- element-para,
- element-checksum.para
- }
-# object citation number, unique sequential number for objects:
-element-ocn = element ocn { text }
-element-object_structure_summary =
- element-ocn,
- # type: heading level value 1 -6, or normal text
- element type { text },
- # type number: sequential number for designated type
- element type_number { text },
- # type category: sequential number for designated category, e.g. sequentially counting all headers
- element category_number { text }
-element-external_space =
- element external_space {
- # ignored by sisu, provide program needs
- element program {
- # e.g. kdissert
- element name { text },
- element xpos { text },
- element ypos { text },
- element font { text },
- element outline_color { text },
- element text_color { text },
- element comment { text }
- }*
- }*,
-#%% structure
- element document {
- # document head:
- element-head,
- # document body:
- element body {
- # object, a unit of text, usually a paragraph with any associated endnotes
- element node {
- element structure {
- # structure document using either node:heading levels or node:heading relationships:
- # (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
- element level { text }?,
- # (ii) sisu alternatively could use node:heading relationship information to build document structure
- element node.id { text },
- element node.parent { text },
- element node.child { text }*
- },
- element node.objects {
- element object.heading {
- element-object_structure_summary,
- # nametag used only in headings, especially important for segmented html
- element nametag { text },
- element-object
- },
- element object.para {
- element-object_structure_summary,
- element-object
- }*
- }+,
- element-external_space
- }+
- }
- }
-RELAXNG
- end
- def rnc_model_output_sax
- @relaxng =<<RELAXNG
-#% sax output model, part of SiSU and distributed under the same license
-default namespace = ""
-namespace xlink = "http://www.w3.org/1999/xlink"
-start =
- element document {
- element head {
- (br
- | meta
- | element creator {
- attribute class { xsd:NCName },
- (text
- | element link {
- attribute xlink:href { xsd:anyURI },
- attribute xlink:type { xsd:NCName },
- xsd:anyURI
- })+
- }
- | element date {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_available {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_created {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_issued {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_modified {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_valid {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element keywords {
- attribute class { xsd:NCName },
- text
- }
- | element language {
- attribute class { xsd:NCName },
- xsd:NCName
- }
- | element meta { xsd:NMTOKEN }
- | element rights {
- attribute class { xsd:NCName },
- (text | link)+
- }
- | element source {
- attribute class { xsd:NCName },
- text
- }
- | element structure {
- attribute class { xsd:NCName },
- text
- }
- | element subject {
- attribute class { xsd:NCName },
- text
- }
- | element title {
- attribute class { xsd:NCName },
- text
- }
- | element type {
- attribute class { xsd:NCName },
- text
- }
- | element source_control {
- (br
- | meta
- | element sc {
- attribute class { xsd:NCName },
- text
- })+
- })+
- },
- element body {
- element object {
- attribute id { text },
- element ocn {
- text
- },
- element text {
- attribute class { xsd:NCName },
- (text
- | b
- | br
- | del
- | en
- | i
- | link
- | sub
- | sup
- | u
- | element image {
- attribute alt { text }?,
- attribute height { xsd:integer }?,
- attribute width { xsd:integer }?,
- attribute xlink:actuate { xsd:NCName },
- attribute xlink:href { text },
- attribute xlink:show { xsd:NCName },
- attribute xlink:type { xsd:NCName }
- })+
- }?,
- element table {
- attribute align { xsd:NCName },
- attribute bgcolor { xsd:NCName },
- attribute border { xsd:integer },
- attribute cellpadding { xsd:integer },
- attribute summary { text },
- attribute width { text },
- element tr {
- element td {
- attribute valign { xsd:NCName },
- attribute width { text },
- (text | b | i)+
- }+
- }+
- }?,
- element endnote {
- attribute notenumber { xsd:integer }?,
- attribute symbol { text }?,
- (element number { xsd:integer }
- | element symbol { text }),
- element note {
- (text
- | b
- | br
- | del
- | i
- | link
- | sup
- | u
- | element em { xsd:NCName }
- | element sub { xsd:NCName })+
- }
- }*
- }+
- }
- }
-meta = element meta { text }
-br = element br { empty }
-b = element b { (text | en | i | link | sup)+ }
-i = element i { (text | b | br | sup)+ }
-en = element en { text }
-sub = element sub { xsd:NCName }
-sup = element sup { xsd:NCName }
-link =
- element link {
- attribute xlink:href { xsd:anyURI },
- attribute xlink:type { xsd:NCName },
- (xsd:anyURI | text | b | i | sup)+
- }
-u = element u { (text | b | i)+ }
-del = element del { (text | b | i | link)+ }
-RELAXNG
- end
- def rnc_model_output_dom
- @relaxng =<<RELAXNG
-#% dom output model, part of SiSU and distributed under the same license
-default namespace = ""
-namespace xlink = "http://www.w3.org/1999/xlink"
-start =
- element document {
- element head {
- element header {
- meta,
- (element creator { text }
- | element date { xsd:NMTOKEN }
- | element date_available { xsd:NMTOKEN }
- | element date_created { xsd:NMTOKEN }
- | element date_issued { xsd:NMTOKEN }
- | element date_modified { xsd:NMTOKEN }
- | element date_valid { xsd:NMTOKEN }
- | element keywords { text }
- | element language { xsd:NCName }
- | element rights { (text | link)+ }
- | element source { text }
- | element structure { text }
- | element subject { text }
- | element title { text }
- | element type { text }
- | element source_control {
- (br
- | meta
- | element sc {
- attribute class { xsd:NCName },
- text
- })+
- })
- }+
- },
- element body {
- element heading1 {
- heading,
- contents1*,
- element heading2 {
- heading,
- contents1*,
- element heading3 {
- heading,
- element contents1 {
- heading,
- content,
- element contents2 {
- heading,
- content,
- element contents3 { heading, content }*
- }*
- }+
- }*
- }*
- }+
- }
- }
-meta = element meta { text }
-br = element br { empty }
-heading = element heading { object }
-contents1 =
- element contents1 {
- heading,
- content,
- element contents2 {
- heading,
- content,
- element contents3 { heading, content }*
- }*
- }
-content = element content { object* }
-object =
- element object {
- attribute id { xsd:integer },
- element ocn { text },
- element nametag { text }?,
- (element table {
- attribute align { xsd:NCName },
- attribute bgcolor { xsd:NCName },
- attribute border { xsd:integer },
- attribute cellpadding { xsd:integer },
- attribute summary { text },
- attribute width { text },
- element tr {
- element td {
- attribute valign { xsd:NCName },
- attribute width { text },
- (text | b | i)+
- }+
- }+
- }
- | element text {
- attribute class { xsd:NCName }?,
- (text
- | b
- | del
- | endnote
- | i
- | link
- | element br { empty }
- | element endnote {
- element number { xsd:integer },
- element note { (text | i | link)+ }
- }
- | element image {
- attribute height { xsd:integer },
- attribute width { xsd:integer },
- attribute xlink:actuate { xsd:NCName },
- attribute xlink:href { text },
- attribute xlink:show { xsd:NCName },
- attribute xlink:type { xsd:NCName }
- }
- | element sub { text })+
- })
- }
-i = element i { text }
-b = element i { text }
-u = element u { (text | b | i)+ }
-sub = element sub { xsd:NCName }
-sup = element sup { xsd:NCName }
-del = element del { (text | b | i | link)+ }
-link =
- element link {
- attribute xlink:href { xsd:anyURI },
- attribute xlink:type { xsd:NCName },
- xsd:anyURI
- }
-endnote =
- element endnote {
- (element number { xsd:integer }
- | element symbol { text }),
- element note {
- (text
- | b
- | br
- | del
- | i
- | link
- | sub
- | sup
- | u
- | element em { xsd:NCName }
- | element sub { xsd:NCName })+
- }
- }
-RELAXNG
- end
- def rnc_model_output_xhtml #not done
- @relaxng =<<RELAXNG
-#% xhtml output model, part of SiSU and distributed under the same license
-default namespace = ""
-namespace xlink = "http://www.w3.org/1999/xlink"
-start =
- element document {
- element head {
- (br
- | element creator {
- attribute class { xsd:NCName },
- (text
- | element link {
- attribute xlink:href { xsd:anyURI },
- attribute xlink:type { xsd:NCName },
- xsd:anyURI
- })+
- }
- | element date {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_available {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_created {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_issued {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_modified {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element date_valid {
- attribute class { xsd:NCName },
- xsd:NMTOKEN
- }
- | element language {
- attribute class { xsd:NCName },
- xsd:NCName
- }
- | element keywords {
- attribute class { xsd:NCName },
- text
- }
- | element meta {
- attribute content { text }?,
- attribute http-equiv { xsd:NCName }?,
- text
- }
- | element rights {
- attribute class { xsd:NCName },
- (text | link)+
- }
- | element source {
- attribute class { xsd:NCName },
- text
- }
- | element structure {
- attribute class { xsd:NCName },
- text
- }
- | element subject {
- attribute class { xsd:NCName },
- text
- }
- | element title {
- attribute class { xsd:NCName },
- text
- }
- | element type {
- attribute class { xsd:NCName },
- xsd:NCName
- })+
- },
- element body {
- element object {
- attribute id { xsd:integer },
- (element endnote {
- attribute notenumber { xsd:integer }?,
- attribute symbol { text }?,
- (text
- | b
- | br
- | del
- | i
- | link
- | sup
- | u
- | element em { xsd:NCName }
- | element sub { xsd:NCName })+
- }
- | element ocn { text }
- | element text {
- attribute class { xsd:NCName },
- (text
- | b
- | br
- | del
- | en
- | i
- | link
- | sup
- | u
- | element image {
- attribute alt { text }?,
- attribute height { xsd:integer }?,
- attribute width { xsd:integer }?,
- attribute xlink:actuate { xsd:NCName },
- attribute xlink:href { text },
- attribute xlink:show { xsd:NCName },
- attribute xlink:type { xsd:NCName }
- }
- | element sub { text })+
- })+,
- element table {
- attribute align { xsd:NCName },
- attribute bgcolor { xsd:NCName },
- attribute border { xsd:integer },
- attribute cellpadding { xsd:integer },
- attribute summary { text },
- attribute width { text },
- element tr {
- element td {
- attribute valign { xsd:NCName },
- attribute width { text },
- (text | b | i)+
- }+
- }+
- }?
- }+
- }
- }
-br = element br { empty }
-en = element en { text }
-sup = element sup { xsd:NCName }
-i = element i { (text | b | br | sup)+ }
-link =
- element link {
- attribute xlink:href { xsd:anyURI },
- attribute xlink:type { xsd:NCName },
- (text | b | i | sup)+
- }
-b = element b { (text | en | i | link | sup)+ }
-u = element u { (text | b | i)+ }
-del = element del { (text | b | i | link)+ }
-RELAXNG
- end
- def rnc_model_input_sax
- @relaxng =<<RELAXNG
-#% sax input model, part of SiSU and distributed under the same license
-default namespace = ""
-start =
- element document {
- element head {
- element header {
- attribute class { xsd:NCName },
- (element creator { text }
- | element date { xsd:NMTOKEN }
- | element date.available { xsd:NMTOKEN }
- | element date.created { xsd:NMTOKEN }
- | element date.issued { xsd:NMTOKEN }
- | element date.modified { xsd:NMTOKEN }
- | element date.valid { xsd:NMTOKEN }
- | element italicize { text }
- | element language { xsd:NCName }
- | element links { text }
- | element markup { text }
- | element rights { text }
- | element subject { text }
- | element title { text }
- | element type { xsd:NCName }
- | element vocabulary { xsd:NCName })
- }+
- },
- element body {
- element object {
- element text {
- attribute class { xsd:NCName },
- (text
- | b
- | i
- | element endnote {
- attribute symbol { xsd:NCName },
- (text
- | i
- | element br { empty })+
- }
- | element u { i }
- | element image.path { text })+
- }?
- }+
- }
- }
-i = element i { text }
-b = element b { text }
-RELAXNG
- end
- def rnc_model_input_dom
- @relaxng =<<RELAXNG
-#% dom input model, part of SiSU and distributed under the same license
-default namespace = ""
-start =
- element document {
- element head {
- element header {
- attribute class { xsd:NCName },
- (element creator { text }
- | element date { xsd:NMTOKEN }
- | element date.available { xsd:NMTOKEN }
- | element date.created { xsd:NMTOKEN }
- | element date.issued { xsd:NMTOKEN }
- | element date.modified { xsd:NMTOKEN }
- | element date.valid { xsd:NMTOKEN }
- | element italicize { text }
- | element language { xsd:NCName }
- | element links { text }
- | element markup { text }
- | element rights { text }
- | element subject { text }
- | element title { text }
- | element type { xsd:NCName }
- | element vocabulary { xsd:NCName })
- }+
- },
- element body {
- element heading1 {
- heading,
- element heading2 {
- heading,
- contents1+,
- element heading3 { heading, contents1+ }+
- }
- }
- }
- }
-heading = element heading { object }
-contents1 =
- element contents1 {
- heading,
- content,
- element contents2 {
- heading,
- content,
- element contents3 { heading, content }*
- }*
- }
-object =
- element object {
- element text {
- (text
- | italic
- | element bold { xsd:NMTOKEN }
- | element endnote {
- element symbol { text }?,
- element note {
- (text
- | italic
- | element br { empty })+
- }
- }
- | element underscore { italic }
- | element image.path { text }
- | element italic { text })+
- }
- }
-italic = element italic { text }
-content = element content { object+ }
-RELAXNG
- end
- def rnc_model_input_node
- @relaxng =<<RELAXNG
-#% node input model, part of SiSU and distributed under the same license
-default namespace = ""
-start =
- element document {
- element head {
- element header {
- attribute class { xsd:NCName },
- (element creator { text }
- | element date { xsd:NMTOKEN }
- | element date.available { xsd:NMTOKEN }
- | element date.created { xsd:NMTOKEN }
- | element date.issued { xsd:NMTOKEN }
- | element date.modified { xsd:NMTOKEN }
- | element date.valid { xsd:NMTOKEN }
- | element italicize { (text | i)+ }
- | element language { xsd:NCName }
- | element links { text }
- | element markup { text }
- | element rights { text }
- | element subject { text }
- | element title { text }
- | element type { xsd:NCName }
- | element vocabulary { xsd:NCName })
- }+
- },
- element body {
- element object {
- (element text {
- attribute class { xsd:NCName },
- (text
- | b
- | i
- | element br { empty }
- | element endnote {
- attribute symbol { xsd:NCName },
- (text | i)+
- }
- | element image.path { text }
- | element sub { text })+
- }
- | (element ocn { empty },
- element table {
- attribute align { xsd:NCName },
- attribute bgcolor { xsd:NCName },
- attribute border { xsd:integer },
- attribute cellpadding { xsd:integer },
- attribute summary { text },
- attribute width { text },
- element tr {
- element td {
- attribute valign { xsd:NCName },
- attribute width { text },
- (text | b)+
- }+
- }+
- })),
- element node {
- element id { xsd:integer },
- element parent { xsd:integer },
- element offspring { text }?
- }
- }+
- }
- }
-b = element b { text }
-i = element i { text }
-RELAXNG
- end
- end
-end
-__END__
-needs updating
diff --git a/lib/sisu/v4/remote.rb b/lib/sisu/v4/remote.rb
deleted file mode 100644
index 2a158e4b..00000000
--- a/lib/sisu/v4/remote.rb
+++ /dev/null
@@ -1,205 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/remote.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: remote operations, get source from or copy output to remote server
-
-=end
-module SiSU_Remote
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Put
- def initialize(opt)
- @opt=opt
- @dir=SiSU_Env::InfoEnv.new(@opt.fns)
- @put=(@opt.fns =~/\.ssm\.sst$/) \
- ? opt.fns.gsub(/(.+)?\.ssm\.sst$/,'\1.ssm')
- : opt.fns
- @remote=SiSU_Env::InfoRemote.new(opt)
- end
- def rsync
- SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->',@put).dark_grey_title_hi unless @opt.cmd =~/q/
- @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.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.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/
- @remote.rsync_sitemaps
- end
- def rsync_harvest
- SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement metadata harvest ->','rsync_harvest').dark_grey_title_hi unless @opt.cmd =~/q/
- @remote.rsync.site_harvest
- end
- def scp
- SiSU_Screen::Ansi.new(@opt.cmd,'Remote placement ->',@put).dark_grey_title_hi unless @opt.cmd =~/q/
- @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.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.site_base_all
- end
- end
- class Get
- def initialize(opt,get_s)
- @opt,@get_s=opt,get_s
- @msg,@msgs='',nil
- @tell=lambda { SiSU_Screen::Ansi.new(@opt.cmd,@msg,"#{@msgs.inspect if @msgs}") }
- end
- def fns
- require 'open-uri'
- require 'pp'
- require_relative 'composite' # composite.rb
- @rgx_image=/(?:^|[^_\\])\{\s*(\S+?\.(?:png|jpg|gif))/
- threads=[]
- for requested_page in @get_s
- re_fnb=/((?:https?|file):\/\/[^\/ ]+?\/[^\/ ]+?)\/\S+?\/([^\/]+?)\.ss(t)/ #revisit and remove DO
- threads << Thread.new(requested_page) do |url|
- open(url) do |f|
- raise "#{url} not found" unless f
- base_uri,fnb=re_fnb.match(url)[1..2] if re_fnb
- imagedir=base_uri + '/_sisu/image' #check on
- downloaded_file=File.new("#{fnb}.-sst",'w+')
- image_download_url=SiSU_Assemble::RemoteImage.new.image(imagedir)
- images=[]
- f.collect.each do |r| # work area
- unless r =~/^%+\s/
- if r !~/^%+\s/ \
- and r =~@rgx_image
- images << r.scan(@rgx_image).uniq
- end
- end
- downloaded_file << r
- end
- if images \
- and images.length > 1
- images=images.flatten.uniq
- images.delete_if {|x| x =~/https?:\/\// }
- images=images.sort
- @msg,@msgs='downloading images:', [ images.join(',') ]
- @tell.call.warn unless @opt.cmd =~/q/
- 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
- downloaded_file.close
- end
- end
- end
- threads.each {|thr| thr.join} if threads #and threads.length > 0
- end
- def sisupod
- get_p=@get_s
- if get_p.length > 0 #% remote sisupod
- require 'net/http'
- for requested_pod in get_p
- pod_info=RemoteDownload.new(requested_pod)
- Net::HTTP.start(pod_info.pod.site) do |http|
- resp=http.get("#{pod_info.pod.path}/#{pod_info.pod.name_source}")
- open(pod_info.pod.name,'wb') do |file|
- file.write(resp.body)
- end
- end
- end
- end
- end
- end
- class RemoteDownload
- def initialize(requested_file)
- @requested_file=requested_file
- end
- def pod
- re_p_div=/https?:\/\/([^\/]+)(\/\S+)\/(sisupod\.(?:txz|zip)|\S+?(?:\.ss[mt]\.(?:txz|zip))?|[^\/]+?\.ssp)$/
- re_p=/(sisupod\.(?:txz|zip)|\S+?\.ss[mt]\.(?:txz|zip)?|[^\/]+?\.ssp)$/
- if @requested_file =~ re_p_div
- @site,@pth,@pod= re_p_div.match(@requested_file).captures
- elsif @requested_file =~ re_p
- @pod=re_p.match(@requested_file).captures.join
- end
- def site
- @site
- end
- def path
- @pth
- end
- def dir_stub
- re_p_stub=/.+?([^\/]+)$/
- re_p_stub.match(path).captures.join if path
- end
- def name_source
- @pod
- end
- def name
- name_source
- end
- self
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/response.rb b/lib/sisu/v4/response.rb
deleted file mode 100644
index 36aa94da..00000000
--- a/lib/sisu/v4/response.rb
+++ /dev/null
@@ -1,78 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/response.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: Request response
-
-=end
-module SiSU_Response
- class Response
- def response?(ask) #move to more appropriate directory later
- response='redo'
- print ask + " ['yes', 'no' or 'quit']: "
- response=File.new('/dev/tty').gets.strip
- 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
- ans
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/rexml.rb b/lib/sisu/v4/rexml.rb
deleted file mode 100644
index b89fada7..00000000
--- a/lib/sisu/v4/rexml.rb
+++ /dev/null
@@ -1,127 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/rexml.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: rexml testing of xml
-
-=end
-module SiSU_Rexml
- # load XML file for REXML parsing
- require 'rexml/document' if FileTest.directory?("#{Config::CONFIG['rubylibdir']}/rexml") #Config::CONFIG['sitedir']
- require_relative 'param' # param.rb
- include SiSU_Param
- 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::InfoEnv.new(@md.fns)
- @prog=SiSU_Env::InfoProgram.new #(md.fns) #if md
- if File.file?(@fno)
- @fnap=@fno #index.xml causes problems with index.html in server config
- end
- @e_head='/document/head'
- @e_title='/document/head/title'
- @e_object='/document/body/object'
- @e_ocn='/document/body/object/ocn'
- @e_text='/document/body/object/text'
- @e_endnote='/document/body/object/endnote'
- end
- def xml
- begin
- if FileTest.file?(@fnap)
- if @prog.rexml !=false \
- and FileTest.directory?('/usr/lib/ruby/1.8/rexml/') #note values can be other than true
- xmlfile=IO.readlines(@fnap,'').join
- begin
- @xmldoc=REXML::Document.new xmlfile
- SiSU_Screen::Ansi.new(@md.opt.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.opt.cmd,'brown',e).colorize unless @md.opt.cmd =~/q/
- end
- end
- rescue REXML::ParseException
- puts 'broken XML'
- end
- end
- else
- SiSU_Screen::Ansi.new(@md.opt.cmd,'fuchsia',"File Not Found #{xmlfile}",'requested XML processing skipped').colorize unless @md.opt.cmd =~/q/
- exit
- end
- rescue
- SiSU_Errors::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
-end
-__END__
- misc
-e.each do |element|
- element.each do |child|
- if child.is_a?(REXML::Text)
- puts "Text: #{child.to_s.inspect}"
- else
- puts "SubElement: #{child.name}"
- end
- end
-end
diff --git a/lib/sisu/v4/screen_text_color.rb b/lib/sisu/v4/screen_text_color.rb
deleted file mode 100644
index 304a677a..00000000
--- a/lib/sisu/v4/screen_text_color.rb
+++ /dev/null
@@ -1,487 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/screen_text_color.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, screen colors text
-
-=end
-module SiSU_Screen
- class Color
- attr_accessor :off,:marker,:bold,:underline,:invert,:darkgrey_hi,:grey_hi,:pink_hi,:fuchsia_hi,:red_hi,:orange_hi,:yellow_hi,:brown_hi,:lightgreen_hi,:green_hi,:cyan_hi,:blue_hi,:navy_hi,:white,:white_bold,:grey,:pink,:fuchsia,:ruby,:red,:orange,:yellow,:brown,:green,:darkgreen,:cyan,:blue,:navy,:black
- def initialize(&block)
- instance_eval &block
- end
- end
- class Ansi < Color
- attr_reader :cX
- def initialize(cmd,*txt)
- @cmd,@txt=cmd,txt
- @color_instruct=txt[0]
- flag=SiSU_Env::InfoProcessingFlag.new
- if cmd
- #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.white_bold=self.marker=self.bold=self.underline=self.invert=self.darkgrey_hi=self.grey_hi=self.pink_hi=self.fuchsia_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.fuchsia=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[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.fuchsia_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.fuchsia = "\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
- end
- end
- def colors
- 0.upto(109) {|i| print "\033[#{i}m 33[#{i}m \033[m"}
- puts ''
- end
- def color
- case @color_instruct
- when /invert/; @cX.invert
- when /darkgrey_hi/; @cX.darkgrey_hi
- when /grey_hi/; @cX.grey_hi
- when /pink_hi/; @cX.pink_hi
- when /fuchsia_hi/; @cX.fuchsia_hi
- when /red_hi/; @cX.red_hi
- when /orange_hi/; @cX.orange_hi
- when /yellow_hi/; @cX.yellow_hi
- when /brown_hi/; @cX.brown_hi
- when /lightgreen_hi/; @cX.lightgreen_hi
- when /green_hi/; @cX.green_hi
- when /cyan_hi/; @cX.cyan_hi
- when /blue_hi/; @cX.blue_hi
- when /navy_hi/; @cX.navy_hi
- when /white/; @cX.white
- when /grey/; @cX.grey
- when /pink/; @cX.pink
- when /fuchsia/; @cX.fuchsia
- when /ruby/; @cX.ruby
- when /red/; @cX.red
- when /orange/; @cX.orange
- when /yellow/; @cX.yellow
- when /brown/; @cX.brown
- when /green/; @cX.green
- when /darkgreen/; @cX.darkgreen
- when /cyan/; @cX.cyan
- when /blue/; @cX.blue
- when /navy/; @cX.navy
- when /close/; @cX.off
- when /off/; @cX.off
- end
- end
- def colorize
- case @color_instruct
- when /invert/; puts "#{@cX.invert}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /darkgrey_hi/; puts "#{@cX.darkgrey_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /grey_hi/; puts "#{@cX.grey_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /pink_hi/; puts "#{@cX.pink_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /fuchsia_hi/; puts "#{@cX.fuchsia_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /red_hi/; puts "#{@cX.red_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /orange_hi/; puts "#{@cX.orange_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /yellow_hi/; puts "#{@cX.yellow_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /brown_hi/; puts "#{@cX.brown_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /lightgreen_hi/; puts "#{@cX.lightgreen_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /green_hi/; puts "#{@cX.green_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /cyan_hi/; puts "#{@cX.cyan_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /blue_hi/; puts "#{@cX.blue_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /navy_hi/; puts "#{@cX.navy_hi}#{@txt[1]}#{@cX.off} #{@cX.blue}#{@txt[2]}#{@cX.off} #{@cX.grey}#{@txt[3]}#{@cX.off}"
- when /bold/; puts "#{@cX.bold}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /white/; puts "#{@cX.off}#{@txt[1]} #{@txt[2]}"
- when /grey/; puts "#{@cX.grey}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /pink/; puts "#{@cX.pink}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /fuchsia/; puts "#{@cX.fuchsia}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /ruby/; puts "#{@cX.ruby}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /red/; puts "#{@cX.red}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /orange/; puts "#{@cX.orange}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /yellow/; puts "#{@cX.yellow}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /brown/; puts "#{@cX.brown}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /green/; puts "#{@cX.green}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /darkgreen/; puts "#{@cX.darkgreen}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /cyan/; puts "#{@cX.cyan}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /blue/; puts "#{@cX.blue}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- when /navy/; puts "#{@cX.navy}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- end
- end
- def sourcename(sourcefilename)
- @sourcefilename=sourcefilename
- end
- def basename(sourcefilename)
- @basename=sourcefilename.sub(/\.(?:(?:-|ssm\.)?sst|ssm)$/,'')
- end
- def sisu
- end
- def rescue
- STDERR.puts %{\t #{@cX.orange}Rescued#{@cX.off} #{@cX.grey}#{yield if block_given?}\n\t An#{@cX.off} #{@cX.fuchsia}ERROR#{@cX.off} #{@cX.grey}occurred, message:#{@cX.off} #{@cX.fuchsia}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off} #{@cX.brown}#{@txt[2]}#{@cX.off}}
- end
- def warn
- STDERR.puts "\t #{@cX.brown}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}"
- end
- def error
- STDERR.puts "\t #{@cX.fuchsia}#{@txt[0]}#{@cX.off} #{@cX.brown}#{@txt[1]}#{@cX.off}"
- end
- def error2
- STDERR.puts "\t #{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.fuchsia}#{@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]}])#{@txt[4]} &#{@cX.off} #{@cX.ruby}Ruby#{@cX.off} #{@cX.grey}(#{@txt[5]})#{@cX.off}\n"
- end
- def html3numbers
- puts %{\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}files processed#{@cX.off}. } +
- %{#{@cX.grey}} +
- %{scroll only: #{@txt[1]}, seg only: #{@txt[2]},} +
- %{#{@cX.off} } +
- %{#{@cX.cyan}joint scroll & seg: #{@txt[3]},#{@cX.off}} +
- %{#{@cX.grey} } +
- %{nav only: #{@txt[4]}} +
- %{#{@cX.off}}
- end
- def html2numbers
- puts %{\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}files processed#{@cX.off}. } +
- %{#{@cX.grey}} +
- %{scroll only: #{@txt[1]},} +
- %{#{@cX.off} } +
- %{#{@cX.cyan}seg only: #{@txt[2]},#{@cX.off}} +
- %{#{@cX.grey} } +
- %{joint scroll & seg: #{@txt[3]}, nav only: #{@n_files_nav}} +
- %{#{@cX.off}}
- end
- def html1numbers
- puts %{\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}files processed#{@cX.off}. } +
- %{#{@cX.cyan}scroll only: #{@txt[1]},#{@cX.off}} +
- %{#{@cX.grey} } +
- %{seg only: #{@txt[2]}, } +
- %{joint scroll & seg: #{@txt[3]}, nav only: #{@n_files_nav}} +
- %{#{@cX.off}}
- end
- def html0_numbers
- puts %{\t#{@cX.ruby}#{@txt[0]} files processed#{@cX.off}. } +
- %{#{@cX.grey}} +
- %{scroll only: #{@txt[1]}, seg only: #{@txt[2]}, joint scroll & seg: #{@txt[3]},} +
- %{#{@cX.off} } +
- %{#{@cX.cyan}nav only: #{@txt[4]}#{@cX.off}.}
- end
- def grey
- puts "#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.cyan}#{@txt[1]}#{@cX.off}"
- end
- def txt_white
- puts "\t#{@cX.white}#{@txt[0]}#{@cX.off} #{@cX.white}#{@txt[1]}#{@cX.off}"
- end
- def txt_grey
- puts "\t#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.cyan}#{@txt[1]}#{@cX.off}"
- end
- def txt_cyan
- puts "\t#{@cX.cyan}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}"
- end
- def txt_blue
- puts "\t#{@cX.blue}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}"
- end
- def txt_red
- puts "\t#{@cX.red}#{@txt[0]}#{@cX.off} #{@cX.cyan}#{@txt[1]}#{@cX.off}"
- end
- def txt_green
- puts "\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}"
- end
- def url #clean
- blue
- end
- def result
- puts "\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.blue}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- end
- def maintenance
- puts "\t#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.brown}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off}"
- end
- def instruct
- puts %{\t #{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.cyan}#{@txt[1]}#{@cX.off} #{@cX.grey}#{@txt[2]}#{@cX.off} #{@cX.cyan}#{@txt[3]}#{@cX.off} #{@cX.grey}#{@txt[4]}#{@cX.off} "#{@cX.brown}#{@f}#{@cX.off}"}
- end
- def grey_open
- print @cX.grey
- end
- def p_off
- print @cX.off
- end
- def p_close
- print @cX.off
- end
- def flow
- puts %{\t#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.ruby}->#{@cX.off}\n\t #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def output
- puts %{\t#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.ruby}->#{@cX.off}\n\t #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def generic
- puts %{\t#{@cX.navy}#{@txt[0]} #{@txt[1]}#{@cX.off}. }
- end
- def files_processed
- puts %{\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}}
- end
- def print_blue
- print "#{@cX.blue}#{@txt[0]} #{@txt[1]}#{@cX.off}"
- end
- def puts_blue
- puts "#{@cX.blue}#{@txt[0]} #{@txt[1]}#{@cX.off}"
- end
- def print_brown
- print "#{@cX.brown}#{@txt[0]}#{@cX.off}"
- end
- def blue_tab
- print "\t#{@cX.blue}#{@txt[0]}#{@cX.off}\n"
- end
- def print_grey
- print "#{@cX.grey}#{@txt[0]} #{@txt[1]}#{@cX.off}"
- end
- def puts_grey
- puts "#{@cX.grey}#{@txt[0]} #{@txt[1]}#{@cX.off}"
- end
- def puts_brown
- puts "#{@cX.brown}#{@txt[0]} #{@txt[1]}#{@cX.off}"
- end
- def grey_tab
- print "\t#{@cX.grey}#{@txt[0]}#{@cX.off}\n"
- end
- def green_title
- puts %{#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}}
- end
- def green_title_hi
- puts %{#{@cX.green_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.grey}#{@txt[1]}#{@cX.off}}
- end
- def green_hi_blue
- puts %{#{@cX.green_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def blue_title_hi
- puts %{#{@cX.blue_hi}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- 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
- def cyan_title_hi
- puts %{#{@cX.cyan_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def cyan_hi_blue
- puts %{#{@cX.cyan_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def dbi_title
- puts %{#{@cX.blue_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.cyan}#{@cX.grey}#{@txt[1]}#{@cX.off*2} #{@cX.green}#{@txt[2]}#{@cX.off}}
- end
- def yellow_title_hi
- puts %{#{@cX.yellow_hi}#{@cX.black}#{@txt[0]}#{@cX.off*2} #{@cX.blue}#{@txt[1]}#{@cX.off}}
- end
- def term_sheet_title
- puts %{\t#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.red_hi}#{@cX.black}#{@txt[1]}.#{@cX.off*2} }
- end
- def generic_number
- puts "#{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.grey}#{@txt[1]}#{@cX.off}"
- end
- def tex_numbers
- puts %{ #{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}tex/pdf files processed#{@cX.off}.}
- end
- def tex_info_numbers
- puts %{ #{@cX.green}#{@txt[0]}#{@cX.off} #{@cX.cyan}texinfo files processed#{@cX.off}.}
- end
- def lout_numbers
- puts %{ #{@cX.green}#{@n_lout}#{@cX.off} #{@cX.cyan}lout/pdf files processed#{@cX.off}.}
- end
- def parameters
- end
- def reserved
- puts %{ #{@cX.grey_hi}#{@cX.black}reserved#{@cX.off*2}}
- end
- def meta_verse_title
- puts %{#{@cX.green_hi}#{@cX.black}MetaVerse#{@cX.off*2} }
- end
- def meta_verse_title_v
- b=sourcename(@txt[0])
- puts %{#{@cX.green_hi}#{@cX.black}MetaVerse#{@cX.off*2} } +
- %{#{@cX.grey}#{@txt[0]}#{@cX.off} #{@cX.ruby}->#{@cX.off}\n\t #{@cX.blue}~meta/#{b}.meta#{@cX.off}}
- end
- def meta_verse
- puts "\t#{@cX.grey}MetaVerse#{@cX.off}"
- end
- def meta_verse_skipped
- puts %{\t#{@cX.grey}MetaVerse: MarshalLoad (creation of metaVerse skipped)#{@cX.off}}
- end
- def meta_verse_load
- puts %{\t<<MetaVerse: MarshalLoad>>}
- end
- def html_title
- puts %{#{@cX.green_hi}#{@cX.black}HTML#{@cX.off*2}}
- end
- 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 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.fuchsia_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.fuchsia = "\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.fuchsia_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.fuchsia = "\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/v4/share_src.rb b/lib/sisu/v4/share_src.rb
deleted file mode 100644
index 34c1d713..00000000
--- a/lib/sisu/v4/share_src.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/share_src.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: share sisu source markup file, copy it to output directory!
-
-=end
-module SiSU_Markup
- 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
- def initialize(opt,build=nil,place=nil)
- super(opt,build,place)
- @opt=opt
- end
- def read
- unless @opt.cmd =~/q/
- @opt.cmd=~/[MVvz]/ \
- ? SiSU_Screen::Ansi.new(@opt.cmd,'Share document markup text source',@opt.fns).cyan_hi_blue
- : SiSU_Screen::Ansi.new(@opt.cmd,'Share document markup text source',@opt.fns).cyan_title_hi
- 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}
- chbk=`pwd`
- cd #{@file.output_path.sisupod.dir}
- for I in `find -type d` ; do chmod 755 $I ; done
- for I in `find -type f` ; do chmod 644 $I ; done
- cd ${chbk}
- })
- else
- SiSU_Screen::Ansi.new('',"#{@opt.fno} not available").blue_tab if @opt.cmd=~/[MVv]/
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/share_src_kdissert.rb b/lib/sisu/v4/share_src_kdissert.rb
deleted file mode 100644
index 5b3365ff..00000000
--- a/lib/sisu/v4/share_src_kdissert.rb
+++ /dev/null
@@ -1,90 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/share_src_kdissert.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: share sisu source markup file, copy it to output directory!
-
-=end
-module SiSU_KdiSource
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Source
- require 'fileutils'
- include FileUtils
- def initialize(opt)
- @opt=opt
- @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/
- 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)
- 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/
- exit
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/shared_html.rb b/lib/sisu/v4/shared_html.rb
deleted file mode 100644
index 372b5033..00000000
--- a/lib/sisu/v4/shared_html.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_html.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: shared html parts
-
-=end
-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/v4/shared_html_lite.rb b/lib/sisu/v4/shared_html_lite.rb
deleted file mode 100644
index def7a84d..00000000
--- a/lib/sisu/v4/shared_html_lite.rb
+++ /dev/null
@@ -1,325 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_html_lite.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by db and flatfile output generators, mostly
- xml/xhtml/html formatting
-
-=end
-module SiSU_FormatShared
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- class CSS_Format
- 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
- if @md.fns != @@fns
- @@fns,@@hname=@md.fns,''
- end
- @hname=if defined? @t_o.name \
- and not @t_o.name.to_s.empty?
- @@hname=@t_o.name
- else @@hname
- end
- @tab="\t"
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- @@tablehead,@@tablefoot=[],[]
- @vz=SiSU_Viz::Defaults.new
- @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::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]}/
- 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]}/
- 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
- word=case m
- when /\.png|\.jpg|\.gif|c=|\d+x\d+/
- w,h=/(\d+)x(\d+)/.match(m).captures if m =~/\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]
- ins=if u \
- and u.strip !~/^image$/
- %{<a href="#{u}">[#{png}]</a>#{caption}}
- else %{[#{png}] #{caption}}
- end
- 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=u.gsub(/^:/,'')
- "#{@env.url.root}/#{u}"
- when /^\.\.\// # can remove
- u=u.gsub(/^\.\.\//,'')
- "#{@env.url.root}/#{u}"
- else
- "#{@env.url.root}/#{@md.fnb}/#{map_nametags[u][:segname]}#{Sfx[:html]}##{u}"
- end
- link=m[/(.+)/m]
- png=m.scan(/\S+/)[0].strip
- link=link.strip
- 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)
- word
- end
- word
- else word
- end
- word
- end
- @words=@words.join(' ')
- end
- def markup_generic(s)
- 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
- 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=s.gsub(/.+/m,words)
- end
- 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,'&lt;').
- gsub(/>/m,'&gt;')
- end
- s
- end
- def markup_note(s)
- 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=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>\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"
- end
- def endnote(nr,en) #used only by db
- txt=markup_note(en)
- <<GSUB
-<p class="endnote" name="note_#{nr}" from="#{@t_o.ocn}">
-<a href="#{@base_url}#-#{nr}" name="_#{nr}">#{nr}.</a> <note>#{txt}</note>
-</p>
-GSUB
- end
- def tag_header(h)
- %{<p class="#{h[:class]}" type="#{h[:type]}" header="#{h[:header]}">#{h[:txt]}</a></p>\n} # << "\n"
- end
- def tag_para(h)
- %{<p class="#{h[:class]}" type="#{h[:type]}">#{h[:txt]}</a></p>\n} << "\n"
- end
- def lev_toc_hname
- %{<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' }
- tag_para(h)
- end
- def lev4_plus
- txt=markup_object(@t_o)
- 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 }
- tag_para(h)
- end
- def norm_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 }
- tag_para(h)
- end
- def code
- txt=markup_object(@t_o)
- 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 }
- 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
- %{<p class="norm" align="left"><font #{@vz.font_small} #{@vz.font_color} #{@vz.font_face}>}
- end
- def ocn
- %{<label class="ocn">#{@ocn}</label>} << "\n"
- end
- def html_table # get rid of use html_table
- @new_content=[]
- @txt.split(/\n/).each do |parablock|
- m=parablock[/<!f(.+?)!>/,1]
- @@tablefoot << m if m
- parablock=parablock.gsub(/<!f.+?!>/,'')
- @@tablehead=1 if parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u
- 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=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=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=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
- end
- @new_content.join
- end
- end
- 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
- @txt=txt
- @lv=lv.to_s
- @hname=hname.to_s
- @id=@ocn=id
- end
- def paragraph
- attrib=%{class="#{@attrib}" }
- if @ocn
- id=%{id="#{@ocn}" }
- type=%{type="substantive" }
- else
- id=%{id="none" }
- type=%{type="comment" }
- end
- header=%{header="#{@hname}" } if @hname
- %{<p #{attrib}#{type}#{header}>#{@txt}</p>\n} #<< "\n"
- end
- def para
- paragraph
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/shared_images.rb b/lib/sisu/v4/shared_images.rb
deleted file mode 100644
index 92f0c894..00000000
--- a/lib/sisu/v4/shared_images.rb
+++ /dev/null
@@ -1,141 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_images.rb;hb=HEAD>
-
- * 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
- 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_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="#{SiSU_is[:path_base_system_data]}/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
deleted file mode 100644
index 27d968ca..00000000
--- a/lib/sisu/v4/shared_markup_alt.rb
+++ /dev/null
@@ -1,321 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_markup_alt.rb;hb=HEAD>
-
- * 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,'&lt;').gsub(/>/m,'&gt;')
- 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
- 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=[]
- 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]
- 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
- 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
deleted file mode 100644
index f14ffb0a..00000000
--- a/lib/sisu/v4/shared_metadata.rb
+++ /dev/null
@@ -1,1257 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_metadata.rb;hb=HEAD>
-
- * 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=[]
- 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.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.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.classify.keywords \
- and @md.classify.keywords=~/\S+/
- @tag,@inf,@class=tr.keywords,@md.classify.keywords,'ext'
- 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.publisher \
- and @md.publisher=~/\S+/
- @tag,@inf,@class=tr.publisher,@md.publisher,'dc' #5
- 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.identifier.isbn \
- and @md.identifier.isbn=~/\S+/
- @tag,@inf,@class=tr.cls_isbn,@md.identifier.isbn,'id'
- meta << self.meta_para
- end
- if defined? @md.identifier.oclc \
- and @md.identifier.oclc=~/\S+/
- @tag,@inf,@class=tr.cls_oclc,@md.identifier.oclc,'id'
- 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.notes.abstract \
- and @md.notes.abstract=~/\S+/
- @tag,@inf,@class=tr.abstract,@md.notes.abstract,'ext'
- 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.coverage \
- and @md.notes.coverage=~/\S+/
- @tag,@inf,@class=tr.coverage,@md.notes.coverage,'dc' #14
- meta << self.meta_para
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/
- @tag,@inf,@class=tr.relation,@md.notes.relation,'dc' #13
- meta << self.meta_para
- end
- #if defined? @md.notes.source \
- #and @md.notes.source=~/\S+/
- # @tag,@inf,@class=tr.source,@md.notes.source,'dc' #11
- # meta << self.meta_para
- #end
- if defined? @md.notes.history \
- and @md.notes.history=~/\S+/
- @tag,@inf,@class=tr.type,@md.notes.history,'dc' #8
- meta << self.meta_para
- end
- if defined? @md.notes.type \
- and @md.notes.type=~/\S+/
- @tag,@inf,@class=tr.type,@md.notes.type,'dc' #8
- meta << self.meta_para
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/
- @tag,@inf,@class=tr.format,@md.notes.format,'dc' #9
- 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.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 @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 @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
- 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 amp
- if @s \
- and @s.is_a?(String)
- @s=@s.gsub(/&/u,'&amp;')
- end
- @s
- end
- def utf8
- if @s \
- and @s.is_a?(String)
- @s=@s.gsub(/<br(?: \/)?>/u,Mx[:br_paragraph]).
- gsub(/</um,'&lt;').gsub(/>/um,'&gt;').
- #gsub(/</um,'&#60;').gsub(/>/um,'&#62;').
- 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).amp
- inf_xml=char_enc(inf_xml).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::Defaults.new.url_decoration
- if @inf.is_a?(String)
- @inf=@inf.gsub(/</,'&lt;').gsub(/>/,'&gt;').
- gsub(/&lt;br(?: \/)?&gt;/,'<br />')
- if @inf =~/&/
- inf_array=[]
- word=@inf.scan(/\S+|\n/)
- word.each do |w| # _ - / # | : ! ^ ~
- w=w.gsub(/&nbsp;/,'&#160;')
- if w !~/&\S{2,7}?;/
- w=w.gsub(/&/,'&amp;')
- 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=[]
- 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
- 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.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/v4/shared_sem.rb b/lib/sisu/v4/shared_sem.rb
deleted file mode 100644
index 89dab948..00000000
--- a/lib/sisu/v4/shared_sem.rb
+++ /dev/null
@@ -1,162 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
- Sematic tags
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_sem.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, resource control and configuration details
-
-=end
-module SiSU_Sem
- require_relative 'param' # param.rb
- class Tags
- def initialize(para,md)
- @para,@md=para,md
- end
- def rgx
- def exclude
- /^(?:<:code>|%+ )/
- end
- def each_csc
- /(?:;|(?:[a-z]+(?:[_:.][a-z]+)+|[a-z]*):)\{|\}[:;][a-z]+(?:[_:.][a-z]+)*/m
- end
- def each_c
- /(?:[a-z]+(?:[_:.][a-z]+)+|[a-z]*):\{|\}:[a-z]+(?:[_:.][a-z]+)*/m
- end
- def each_sc
- /(?:[a-z]+(?:[_:.][a-z]+)+|[a-z]*);\{|\};[a-z]+(?:[_:.][a-z]+)*/m
- end
- def pair_csc
- /(([a-z]+(?:[_:.][a-z]+)+|[a-z]+)(?::\{(.+?)\}:\2)|([:;])\{(.+?)\}\4[a-z]+(?:[_:.][a-z]+)*)/m
- end
- def pair_c
- /(([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\2)|:\{(.+?)\}:[a-z]+(?:[_:.][a-z]+)*)/m
- end
- def pair_sc
- /(;\{.+?\};[a-z]+(?:[_:.][a-z]+)*)/m
- end
- def whole_csc_ae
- /(([a-z]+(?:[_.][a-z]+)+|[a-z]*)(?::\[(.+?)\]:\2)|;\{(.+?)\};(?:[a-z]+(?:[_:.][a-z]+)+|[a-z]+)\b)/m
- end
- def each_csc_ae
- /(?:;|(?:[a-z]+(?:[_:.][a-z]+)+)*:|[a-z]*:)\[|\][:;](?:[a-z]+(?:[_:.][a-z]+)+|[a-z]+)/m
- end
- self
- end
- def print
- def scan_pair_c
- if @para =~ rgx.pair_c
- matched=@para.scan(rgx.pair_c).flatten
- puts matched[0] unless matched[0].nil?
- end
- end
- def scan_pair_sc
- matched=@para.scan(rgx.pair_sc).flatten
- 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}"
- end
- end
- def if_pair_sc
- if @para=~/;\{\s*(.+?)\s*\};([a-z]+(?:[_:.][a-z]+)*)/
- puts ";{ #{$1} };#{$2}"
- end
- end
- def match_pair_c
- matched=[]
- matched=rgx.pair_c.match(@para)[1] if @para =~ rgx.pair_c
- puts matched unless matched.nil?
- end
- def match_pair_sc
- matched=[]
- matched=rgx.pair_sc.match(@para)[1] if @para =~ rgx.pair_sc
- puts matched unless matched.nil?
- end
- def matching
- scan_pair_c
- end
- self
- end
- def rm
- def sem_marker_parts
- unless @para =~ rgx.exclude
- @para.gsub!(rgx.each_csc,'')
- end
- @para
- end
- def sem_marker_added_extra_parts
- unless @para =~ rgx.exclude
- @para.gsub!(rgx.whole_csc_ae,'')
- if @para =~rgx.each_csc_ae
- STDERR.puts "WARNING semantic tagging error: #{@para}"
- end
- end
- @para
- end
- def all
- if @md.sem_tag
- sem_marker_parts
- sem_marker_added_extra_parts
- end
- @para
- end
- self
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/shared_sisupod_source.rb b/lib/sisu/v4/shared_sisupod_source.rb
deleted file mode 100644
index b53c9eb2..00000000
--- a/lib/sisu/v4/shared_sisupod_source.rb
+++ /dev/null
@@ -1,308 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_sisupod_source.rb;hb=HEAD>
-
- * 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
- @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],
- 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_v4(@opt)
- 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_doc_import=/^<<\s*(\S+?\.ss[ti])/
- file_array=IO.readlines(@opt.fno,'')
- images,doc_import=[],[]
- doc_import_dir=@opt.sub_location
- file_array.each do |f| #% work area
- if f !~/^%+\s/
- 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
- gi=SiSU_Env::GetInit.new
- unless FileTest.file?("#{@path_pod[:conf]}/#{gi.makefile_name}")
- if gi.makefile \
- && FileTest.file?(gi.makefile)
- FileUtils::mkdir_p(@path_pod[:conf]) unless FileTest.directory?(@path_pod[:conf])
- FileUtils::cp(gi.makefile,"#{@path_pod[:conf]}/#{gi.makefile_name}")
- end
- #get images from makefile, consider placing in param
- end
- 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}")
- 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/
- :yes
- elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \
- and @opt.f_pth[:lng_is] == 'en'
- :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/
- :yes
- elsif f[:f] !~ /^(?:#{Px[:lng_lst_rgx]})\/|~(?:#{Px[:lng_lst_rgx]})\.sst/ \
- and @opt.f_pth[:lng_is] == 'en'
- :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
-
- 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
- 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/
- image/ [all images for specific document gathered here]
-
-sisu
- _sisu
- sisurc.yml
- convert/
- standard_terms/
- image
- processing
- dal/
- tex/
- texinfo/
- tune/
- sisupod
-
-special case
-
-composite file (master), e.g.
-SiSU.ssm
diff --git a/lib/sisu/v4/shared_txt.rb b/lib/sisu/v4/shared_txt.rb
deleted file mode 100644
index 11c7a4ee..00000000
--- a/lib/sisu/v4/shared_txt.rb
+++ /dev/null
@@ -1,234 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_txt.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: modules shared by flatfile output generators
-
-=end
-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
- @n_char_max_extend = n_char_max
- @br="\n"
- @n_hang=n_hang ? n_hang : @n_indent
- end
- def line_wrap
- space=' '
- spaces_indent,spaces_hang="#{@br}#{space*@n_indent}",space*@n_hang
- line=0
- out=[]
- out[line]=''
- @para=@para.gsub(/<br>/,' \\ ').
- gsub(/#{Mx[:br_nl]}/,"\n\n")
- words=@para.scan(/\n\n|\s+\\\s+|<br>|\S+/m)
- while words != ''
- word=words.shift
- if not word
- out[line] unless out[line].empty? #check
- break
- elsif word =~/<br>/
- word=nil
- out[line]=out[line].gsub(/<br>/,'')
- line=line
- elsif word =~/\n\n/
- word="\n"
- @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
- 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
- spaces_hang + out.join(spaces_indent)
- 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 @para.is_a?(Array)
- @arr=[]
- @para.each do |line|
- @arr << SiSU_TextUtils::Wrap.new(line,@n_char_max,@n_indent,@n_hang).line_wrap
- end
- end
- @arr
- end
- end
- class HeaderScan
- def initialize(md,para)
- @md,@p=md,para
- end
- def extract(tag,tag_content,type,attrib)
- if dc_tag \
- and dc_content
- [dc_tag,dc_content,{dc_tag=>dc_content}]
- else nil
- end
- end
- def header(tag,tag_content,type='',attrib='') #this will break stuff and must be tested thoroughly 20060825
- @tag,@tag_content,@type,@attrib=tag,tag_content,type,attrib
- def label #element
- @tag
- end
- def type
- @type
- end
- def text
- @tag_content
- end
- def info #element text
- @tag_content
- end
- def attribute
- @attrib
- end
- def element
- @tag
- end
- def attrib
- @attrib
- end
- def el
- @tag
- end
- self
- end
- def start_is_match
- case @p
- when /^#{Mx[:meta_o]}(title)#{Mx[:meta_c]}\s*(.+?)$/; 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]}(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
- if @p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/
- start_is_match
- else nil
- end
- end
- def meta
- if @p =~/^#{Mx[:meta_o]}\S+?#{Mx[:meta_c]}/
- start_is_match
- else nil
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/shared_xhtml.rb b/lib/sisu/v4/shared_xhtml.rb
deleted file mode 100644
index 0ba15894..00000000
--- a/lib/sisu/v4/shared_xhtml.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_xhtml.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: shared html parts
-
-=end
-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
deleted file mode 100644
index 390689c7..00000000
--- a/lib/sisu/v4/shared_xml.rb
+++ /dev/null
@@ -1,721 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/shared_xml.rb;hb=HEAD>
-
- * 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::Defaults.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,'&#60;'). # '&lt;' # &#060;
- gsub(/>/um,'&#62;'). # '&gt;' # &#062;
- gsub(/¢/um,'&#162;'). # '&cent;' # &#162;
- gsub(/£/um,'&#163;'). # '&pound;' # &#163;
- gsub(/¥/um,'&#165;'). # '&yen;' # &#165;
- gsub(/§/um,'&#167;'). # '&sect;' # &#167;
- gsub(/©/um,'&#169;'). # '&copy;' # &#169;
- gsub(/ª/um,'&#170;'). # '&ordf;' # &#170;
- gsub(/«/um,'&#171;'). # '&laquo;' # &#171;
- gsub(/®/um,'&#174;'). # '&reg;' # &#174;
- gsub(/°/um,'&#176;'). # '&deg;' # &#176;
- gsub(/±/um,'&#177;'). # '&plusmn;' # &#177;
- gsub(/²/um,'&#178;'). # '&sup2;' # &#178;
- gsub(/³/um,'&#179;'). # '&sup3;' # &#179;
- gsub(/µ/um,'&#181;'). # '&micro;' # &#181;
- gsub(/¶/um,'&#182;'). # '&para;' # &#182;
- gsub(/¹/um,'&#185;'). # '&sup1;' # &#185;
- gsub(/º/um,'&#186;'). # '&ordm;' # &#186;
- gsub(/»/um,'&#187;'). # '&raquo;' # &#187;
- gsub(/¼/um,'&#188;'). # '&frac14;' # &#188;
- gsub(/½/um,'&#189;'). # '&frac12;' # &#189;
- gsub(/¾/um,'&#190;'). # '&frac34;' # &#190;
- gsub(/×/um,'&#215;'). # '&times;' # &#215;
- gsub(/÷/um,'&#247;'). # '&divide;' # &#247;
- gsub(/¿/um,'&#191;'). # '&iquest;' # &#191;
- gsub(/À/um,'&#192;'). # '&Agrave;' # &#192;
- gsub(/Á/um,'&#193;'). # '&Aacute;' # &#193;
- gsub(/Â/um,'&#194;'). # '&Acirc;' # &#194;
- gsub(/Ã/um,'&#195;'). # '&Atilde;' # &#195;
- gsub(/Ä/um,'&#196;'). # '&Auml;' # &#196;
- gsub(/Å/um,'&#197;'). # '&Aring;' # &#197;
- gsub(/Æ/um,'&#198;'). # '&AElig;' # &#198;
- gsub(/Ç/um,'&#199;'). # '&Ccedil;' # &#199;
- gsub(/È/um,'&#200;'). # '&Egrave;' # &#200;
- gsub(/É/um,'&#201;'). # '&Eacute;' # &#201;
- gsub(/Ê/um,'&#202;'). # '&Ecirc;' # &#202;
- gsub(/Ë/um,'&#203;'). # '&Euml;' # &#203;
- gsub(/Ì/um,'&#204;'). # '&Igrave;' # &#204;
- gsub(/Í/um,'&#205;'). # '&Iacute;' # &#205;
- gsub(/Î/um,'&#206;'). # '&Icirc;' # &#206;
- gsub(/Ï/um,'&#207;'). # '&Iuml;' # &#207;
- gsub(/Ð/um,'&#208;'). # '&ETH;' # &#208;
- gsub(/Ñ/um,'&#209;'). # '&Ntilde;' # &#209;
- gsub(/Ò/um,'&#210;'). # '&Ograve;' # &#210;
- gsub(/Ó/um,'&#211;'). # '&Oacute;' # &#211;
- gsub(/Ô/um,'&#212;'). # '&Ocirc;' # &#212;
- gsub(/Õ/um,'&#213;'). # '&Otilde;' # &#213;
- gsub(/Ö/um,'&#214;'). # '&Ouml;' # &#214;
- gsub(/Ø/um,'&#216;'). # '&Oslash;' # &#216;
- gsub(/Ù/um,'&#217;'). # '&Ugrave;' # &#217;
- gsub(/Ú/um,'&#218;'). # '&Uacute;' # &#218;
- gsub(/Û/um,'&#219;'). # '&Ucirc;' # &#219;
- gsub(/Ü/um,'&#220;'). # '&Uuml;' # &#220;
- gsub(/Ý/um,'&#221;'). # '&Yacute;' # &#221;
- gsub(/Þ/um,'&#222;'). # '&THORN;' # &#222;
- gsub(/ß/um,'&#223;'). # '&szlig;' # &#223;
- gsub(/à/um,'&#224;'). # '&agrave;' # &#224;
- gsub(/á/um,'&#225;'). # '&aacute;' # &#225;
- gsub(/â/um,'&#226;'). # '&acirc;' # &#226;
- gsub(/ã/um,'&#227;'). # '&atilde;' # &#227;
- gsub(/ä/um,'&#228;'). # '&auml;' # &#228;
- gsub(/å/um,'&#229;'). # '&aring;' # &#229;
- gsub(/æ/um,'&#230;'). # '&aelig;' # &#230;
- gsub(/ç/um,'&#231;'). # '&ccedil;' # &#231;
- gsub(/è/um,'&#232;'). # '&egrave;' # &#232;
- gsub(/é/um,'&#233;'). # '&acute;' # &#233;
- gsub(/ê/um,'&#234;'). # '&circ;' # &#234;
- gsub(/ë/um,'&#235;'). # '&euml;' # &#235;
- gsub(/ì/um,'&#236;'). # '&igrave;' # &#236;
- gsub(/í/um,'&#237;'). # '&acute;' # &#237;
- gsub(/î/um,'&#238;'). # '&icirc;' # &#238;
- gsub(/ï/um,'&#239;'). # '&iuml;' # &#239;
- gsub(/ð/um,'&#240;'). # '&eth;' # &#240;
- gsub(/ñ/um,'&#241;'). # '&ntilde;' # &#241;
- gsub(/ò/um,'&#242;'). # '&ograve;' # &#242;
- gsub(/ó/um,'&#243;'). # '&oacute;' # &#243;
- gsub(/ô/um,'&#244;'). # '&ocirc;' # &#244;
- gsub(/õ/um,'&#245;'). # '&otilde;' # &#245;
- gsub(/ö/um,'&#246;'). # '&ouml;' # &#246;
- gsub(/ø/um,'&#248;'). # '&oslash;' # &#248;
- gsub(/ù/um,'&#250;'). # '&ugrave;' # &#250;
- gsub(/ú/um,'&#251;'). # '&uacute;' # &#251;
- gsub(/û/um,'&#252;'). # '&ucirc;' # &#252;
- gsub(/ü/um,'&#253;'). # '&uuml;' # &#253;
- gsub(/þ/um,'&#254;'). # '&thorn;' # &#254;
- gsub(/ÿ/um,'&#255;'). # '&yuml;' # &#255;
- gsub(/‘/um,'&#8216;'). # '&lsquo;' # &#8216;
- gsub(/’/um,'&#8217;'). # '&rsquo;' # &#8217;
- gsub(/“/um,'&#8220;'). # &ldquo; # &#8220;
- gsub(/”/um,'&#8221;'). # &rdquo; # &#8221;
- gsub(/–/um,'&#8211;'). # &ndash; # &#8211;
- gsub(/—/um,'&#8212;'). # &mdash; # &#8212;
- gsub(/∝/um,'&#8733;'). # &prop; # &#8733;
- gsub(/∞/um,'&#8734;'). # &infin; # &#8734;
- gsub(/™/um,'&#8482;'). # &trade; # &#8482;
- gsub(/✠/um,'&#10016;'). # &cross; # &#10016;
- 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,'&cent;'). # &#162;
- gsub(/£/u,'&pound;'). # &#163;
- gsub(/¥/u,'&yen;'). # &#165;
- gsub(/§/u,'&sect;'). # &#167;
- gsub(/©/u,'&copy;'). # &#169;
- gsub(/ª/u,'&ordf;'). # &#170;
- gsub(/«/u,'&laquo;'). # &#171;
- gsub(/®/u,'&reg;'). # &#174;
- gsub(/°/u,'&deg;'). # &#176;
- gsub(/±/u,'&plusmn;'). # &#177;
- gsub(/²/u,'&sup2;'). # &#178;
- gsub(/³/u,'&sup3;'). # &#179;
- gsub(/µ/u,'&micro;'). # &#181;
- gsub(/¶/u,'&para;'). # &#182;
- gsub(/¹/u,'&sup1;'). # &#185;
- gsub(/º/u,'&ordm;'). # &#186;
- gsub(/»/u,'&raquo;'). # &#187;
- gsub(/¼/u,'&frac14;'). # &#188;
- gsub(/½/u,'&frac12;'). # &#189;
- gsub(/¾/u,'&frac34;'). # &#190;
- gsub(/×/u,'&times;'). # &#215;
- gsub(/÷/u,'&divide;'). # &#247;
- gsub(/¿/u,'&iquest;'). # &#191;
- gsub(/À/u,'&Agrave;'). # &#192;
- gsub(/Á/u,'&Aacute;'). # &#193;
- gsub(/Â/u,'&Acirc;'). # &#194;
- gsub(/Ã/u,'&Atilde;'). # &#195;
- gsub(/Ä/u,'&Auml;'). # &#196;
- gsub(/Å/u,'&Aring;'). # &#197;
- gsub(/Æ/u,'&AElig;'). # &#198;
- gsub(/Ç/u,'&Ccedil;'). # &#199;
- gsub(/È/u,'&Egrave;'). # &#200;
- gsub(/É/u,'&Eacute;'). # &#201;
- gsub(/Ê/u,'&Ecirc;'). # &#202;
- gsub(/Ë/u,'&Euml;'). # &#203;
- gsub(/Ì/u,'&Igrave;'). # &#204;
- gsub(/Í/u,'&Iacute;'). # &#205;
- gsub(/Î/u,'&Icirc;'). # &#206;
- gsub(/Ï/u,'&Iuml;'). # &#207;
- gsub(/Ð/u,'&ETH;'). # &#208;
- gsub(/Ñ/u,'&Ntilde;'). # &#209;
- gsub(/Ò/u,'&Ograve;'). # &#210;
- gsub(/Ó/u,'&Oacute;'). # &#211;
- gsub(/Ô/u,'&Ocirc;'). # &#212;
- gsub(/Õ/u,'&Otilde;'). # &#213;
- gsub(/Ö/u,'&Ouml;'). # &#214;
- gsub(/Ø/u,'&Oslash;'). # &#216;
- gsub(/Ù/u,'&Ugrave;'). # &#217;
- gsub(/Ú/u,'&Uacute;'). # &#218;
- gsub(/Û/u,'&Ucirc;'). # &#219;
- gsub(/Ü/u,'&Uuml;'). # &#220;
- gsub(/Ý/u,'&Yacute;'). # &#221;
- gsub(/Þ/u,'&THORN;'). # &#222;
- gsub(/ß/u,'&szlig;'). # &#223;
- gsub(/à/u,'&agrave;'). # &#224;
- gsub(/á/u,'&aacute;'). # &#225;
- gsub(/â/u,'&acirc;'). # &#226;
- gsub(/ã/u,'&atilde;'). # &#227;
- gsub(/ä/u,'&auml;'). # &#228;
- gsub(/å/u,'&aring;'). # &#229;
- gsub(/æ/u,'&aelig;'). # &#230;
- gsub(/ç/u,'&ccedil;'). # &#231;
- gsub(/è/u,'&egrave;'). # &#232;
- gsub(/é/u,'&acute;'). # &#233;
- gsub(/ê/u,'&circ;'). # &#234;
- gsub(/ë/u,'&euml;'). # &#235;
- gsub(/ì/u,'&igrave;'). # &#236;
- gsub(/í/u,'&acute;'). # &#237;
- gsub(/î/u,'&icirc;'). # &#238;
- gsub(/ï/u,'&iuml;'). # &#239;
- gsub(/ð/u,'&eth;'). # &#240;
- gsub(/ñ/u,'&ntilde;'). # &#241;
- gsub(/ò/u,'&ograve;'). # &#242;
- gsub(/ó/u,'&oacute;'). # &#243;
- gsub(/ô/u,'&ocirc;'). # &#244;
- gsub(/õ/u,'&otilde;'). # &#245;
- gsub(/ö/u,'&ouml;'). # &#246;
- gsub(/ø/u,'&oslash;'). # &#248;
- gsub(/ù/u,'&ugrave;'). # &#250;
- gsub(/ú/u,'&uacute;'). # &#251;
- gsub(/û/u,'&ucirc;'). # &#252;
- gsub(/ü/u,'&uuml;'). # &#253;
- gsub(/þ/u,'&thorn;'). # &#254;
- gsub(/ÿ/u,'&yuml;'). # &#255;
- gsub(/‘/u,'&#lsquo;'). # &lsquo; # &#8216;
- gsub(/’/u,'&#rsquo;'). # &rsquo; # &#8217;
- gsub(/“/u,'&ldquo;'). # &ldquo; # &#8220;
- gsub(/”/u,'&rdquo;'). # &rdquo; # &#8221;
- gsub(/–/u,'&ndash;'). # &ndash; # &#8211;
- gsub(/—/u,'&mdash;'). # &mdash; # &#8212;
- gsub(/∝/u,'&prop;'). # &prop; # &#8733;
- gsub(/∞/u,'&infin;'). # &infin; # &#8734;
- gsub(/™/u,'&trade;'). # &trade; # &#8482;
- gsub(/✠/u,'&#10016;'). # &#10016;
- #gsub(/✠/u '&dagger;'). # &dagger; # &#8224; 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(/&/,'&amp;') unless x =~/&\S+;/
- x=x.gsub(/&([A-Z])/,'&amp;\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&lt; ').gsub(/\s+>(\s+|$)/,' &gt;\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[:br_page_line]}\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,'&lt;').gsub(/>/m,'&gt;')
- 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(/&nbsp;|#{Mx[:nbsp]}/m,'&#160;')
- 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&amp; '). #sort
- gsub(/&([^;]{1,5})/,'&amp;\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(/&nbsp;|#{Mx[:nbsp]}/,'&#160;')
- 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&amp; '). #sort
- gsub(/&([^;]{1,5})/,'&amp;\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(/&nbsp;|#{Mx[:nbsp]}/,'&#160;')
- 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(/</,'&lt;').gsub(/>/,'&gt;').
- gsub(/&lt;:?br(?:\s+\/)?&gt;/,'<br />').
- gsub(/&lt;(link xmlns:xlink=".+?")&gt;/,'<\1>').
- gsub(/&lt;(\/link)&gt;/,'<\1>').
- gsub(/&lt;(\/?en)&gt;/,'<\1>')
- dob
- end
- def markup_block(dob='')
- dob.obj=dob.obj.gsub(/</,'&lt;').gsub(/>/,'&gt;').
- gsub(/&lt;:?br(?:\s+\/)?&gt;/,'<br />').
- gsub(/&lt;(link xmlns:xlink=".+?")&gt;/,'<\1>').
- gsub(/&lt;(\/link)&gt;/,'<\1>').
- gsub(/&lt;(\/?en)&gt;/,'<\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.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.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
- 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.notes.coverage \
- and @md.notes.coverage=~/\S+/ # DublinCore 14 - coverage
- @rdf_coverage=%{ dc.coverage="#{@md.notes.coverage}"\n}
- content=meta_content_clean(@md.notes.coverage)
- @coverage=%{ <meta name="dc.coverage" content="#{content}" />\n}
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/ # DublinCore 13 - relation
- @rdf_relation=%{ dc.relation="#{@md.notes.relation}"\n}
- content=meta_content_clean(@md.notes.relation)
- @relation=%{ <meta name="dc.relation" content="#{content}" />\n}
- end
- if defined? @md.notes.type \
- and @md.notes.type # DublinCore 8 - type (genre eg. report, convention etc)
- @rdf_type=%{ dc.type="#{@md.notes.type}"\n}
- content=meta_content_clean(@md.notes.type)
- @type=%{ <meta name="dc.type" content="#{content}" />\n}
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/ # DublinCore 9 - format (use your mime type)
- @rdf_format=%{ dc.format="#{@md.notes.format}"\n}
- content=meta_content_clean(@md.notes.format)
- @format=%{ <meta name="dc.format" content="#{content}" />\n}
- end
- #if defined? @md.identifier.sisupod \
- #and @md.identifier.sisupod=~/\S+/ # DublinCore 10 - identifier (your identifier, could use urn which is free)
- # @rdf_identifier=%{ dc.identifier="#{@md.identifier.sisupod}"\n}
- # content=meta_content_clean(@md.identifier.sisupod)
- # @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
- content=meta_content_clean(@md.keywords)
- @keywords=%{ <meta name="keywords" content="#{content}" />\n} if @md.keywords
- @vz=SiSU_Viz::Defaults.new
- end
- def meta_content_clean(content='')
- content=if not content.nil?
- content=content.tr('"',"'")
- content=SiSU_XML_Munge::Trans.new(@md).char_enc.utf8(content)
- else content
- end
- 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
deleted file mode 100644
index 57c12049..00000000
--- a/lib/sisu/v4/sisupod_make.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sisupod_make.rb;hb=HEAD>
-
- * 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')
- unless @opt.cmd =~/q/
- pthinfo="#{@file.output_path.sisupod.dir}/#{@zipfile}.txz"
- @opt.cmd=~/[MVv]/ \
- ? SiSU_Screen::Ansi.new(@opt.cmd,'Assemble source for sisu document',"#{@opt.fns} -> file://#{pthinfo}").cyan_hi_blue
- : SiSU_Screen::Ansi.new(@opt.cmd,'Assemble source for sisu document',pthinfo).cyan_title_hi
- 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
-
- 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
- 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/
- image/ [all images for specific document gathered here]
-
-sisu
- _sisu
- sisurc.yml
- convert/
- standard_terms/
- image
- processing
- dal/
- tex/
- texinfo/
- tune/
- sisupod
-
-special case
-
-composite file (master), e.g.
-SiSU.ssm
diff --git a/lib/sisu/v4/sitemaps.rb b/lib/sisu/v4/sitemaps.rb
deleted file mode 100644
index 194f1220..00000000
--- a/lib/sisu/v4/sitemaps.rb
+++ /dev/null
@@ -1,220 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sitemaps.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: sitemap created from parameters extracted from input file(s)
-
-=end
-module SiSU_Sitemaps
- require_relative 'param' # param.rb
- include SiSU_Param
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'shared_xml' # shared_xml.rb
- include SiSU_XML_Munge
- class Source
- def initialize(opt)
- @opt=opt
- end
- def read
- songsheet
- end
- def songsheet
- begin
- @sys=SiSU_Env::SystemCall.new
- fn_set_lang=SiSU_Env::StandardiseLanguage.new(@opt.lng).language
- @fn=SiSU_Env::EnvCall.new(@opt.fns).lang(fn_set_lang[:c])
- if @opt.cmd =~/Y/
- @md=SiSU_Param::Parameters.new(@opt).get
- @trans=SiSU_XML_Munge::Trans.new(@md) #check @md is required
- @env=SiSU_Env::InfoEnv.new(@md.fns)
-# @file=SiSU_Env::FileOp.new(@md)
- @rdf=SiSU_XML_Tags::RDF.new(@md)
- @fnb_utf8_xml=@md.fnb.dup
- @trans.char_enc.utf8(@fnb_utf8_xml) if @sys.locale =~/utf-?8/i #% utf8
- output_map(sitemap)
- elsif @opt.mod.inspect =~/--sitemaps/
- @sitemap_idx_fn='sitemapindex.xml'
- @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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- def make_file(path,filename)
- (File.writable?("#{path}/.")) \
- ? (File.new("#{path}/#{filename}",'w+'))
- : (SiSU_Screen::Ansi.new('',"is the file or directory writable?, could not create #{filename}").warn)
- end
- def output_map(sitemap)
- path=@md.file.output_path.sitemaps.dir
- filename=@fn[:sitemap]
- touch_path=@md.file.output_path.sitemaps.dir
- touch_filename=@fn[:sitemap_touch]
- SiSU_Env::FileOp.new(@md).make_path(path)
- file=SiSU_Env::FileOp.new(@md).make_file(path,filename)
- file << sitemap
- if FileTest.file?("#{touch_path}/#{touch_filename}")
- FileUtils::rm("#{touch_path}/#{touch_filename}")
- end
- end
- def output_idx(sitemap)
- path=@env.path.output
- filename=@sitemap_idx_fn
- make_path(path)
- file=make_file(path,filename)
- file << sitemap
- end
- def sitemap_index
- sitemap_files=Dir.glob("#{@env.path.sitemaps}/sitemap_*.xml")
- sitemap_idx=[]
- sitemap_idx << <<WOK
-<?xml version="1.0" encoding="UTF-8"?>
-<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemaps/0.9
- http://www.sitemaps.org/schemas/sitemaps/sitemap.xsd"
- xmlns="http://www.sitemaps.org/schemas/sitemapindex/0.9">
-WOK
- sitemap_files.each do |s|
- f=s.gsub(/.+?\/sitemap_([^\/]+?)\.xml$/,'\1')
- @trans.char_enc.utf8(f) if @sys.locale =~/utf-?8/i #% utf8
-sitemap_idx << <<WOK
- <sitemap>
- <loc>#{@env.path.url.remote}/#{f}/sitemap.xml</loc>
- </sitemap>
-WOK
- end
- sitemap_idx << <<WOK
-</sitemapindex>
-WOK
- sitemap_idx.join
- end
- def sitemap
- if defined? @md.date.modified \
- and @md.date.modified=~/\d{4}-\d{2}-\d{2}/
- sitemap_date_modified
- else sitemap_no_date
- end
- end
- def sitemap_date_modified
-<<WOK
-<?xml version='1.0' encoding='UTF-8'?>
-<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemaps/0.9
- http://www.sitemaps.org/schemas/sitemaps/sitemap.xsd"
- xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-#{@rdf.comment_xml}
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]}</loc>
- <lastmod>#{@md.date.modified}</lastmod>
- <changefreq>monthly</changefreq>
- <priority>0.7</priority>
- </url>
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]}</loc>
- <lastmod>#{@md.date.modified}</lastmod>
- <priority>0.5</priority>
- </url>
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]}</loc>
- <lastmod>#{@md.date.modified}</lastmod>
- <priority>0.5</priority>
- </url>
-</urlset>
-WOK
- end
- def sitemap_no_date
-<<WOK
-<?xml version="1.0" encoding="UTF-8"?>
-<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-#{@rdf.comment_xml}
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:toc]}</loc>
- <changefreq>monthly</changefreq>
- <priority>0.7</priority>
- </url>
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:doc]}</loc>
- <priority>0.5</priority>
- </url>
- <url>
- <loc>#{@env.path.url.remote}/#{@fnb_utf8_xml}/#{@fn[:manifest]}</loc>
- <priority>0.5</priority>
- </url>
-</urlset>
-WOK
- end
- end
-end
-__END__
-* sanitize xml, pass through filter to ensure is valid - done but needs testing
-* remote placement of sitemaps --sitemaps -R (probably makes more sense than doing against -Y [filename/wildcard]) - done but needs testing
-* gzip sitemaps - not before testing / after testing
-* issue with master documnts, naming and mapping, check multilingual
-
-<!-- Document processing information:
- * Generated by: SiSU 0.48.6 of 2006w45/6 (20061111)
- * Ruby version: ruby 1.8.5 (2006-08-25) [i486-linux]
- *
- * Last Generated on: Sat Nov 18 15:28:08 +0000 2006
- * SiSU http://www.jus.uio.no/sisu
--->
diff --git a/lib/sisu/v4/spell.rb b/lib/sisu/v4/spell.rb
deleted file mode 100644
index df0f837e..00000000
--- a/lib/sisu/v4/spell.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/spell.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: spellchecking
-
-=end
-module SiSU_SpellUtility
- class Spell
- def initialize(input,filesrc,flg)
- @flg=flg
- @filename, @filetype = /(.+?)(\.\w\w\w0$)/.match(filesrc)[1,2] #.gsub(/\.\w\w\w0$/, "")
- @input=input
- @allwords=[]
- puts @filename
- @speller='aspell' # 'ispell'
- @dictionary='british'
- @lang='en_GB'
- end
- def check
- @input.each do |data|
- data=data.gsub(/(https?|www|ftp|gopher|png|jpg|gif|html|htm)\S+/i,' ').
- gsub(/(&nbsp;|#{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=@allwords.uniq
- if @flg =~ /S/
- File.open('/home/ralph/spell_error','a+') do |file| #fix
- file.puts %{\n\n<<#{@filename}>>}
- end
- @allwords.each { |y| puts y.inspect; system(%{cat #{y} | /usr/bin/#{@speller} -l -d #{@dictionary} >> ~/spell_error })}
- else
- @allwords.each { |y| sp=%x{echo #{y}|#{@speller} -l }; puts sp unless sp.empty?}
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/sst_convert_markup.rb b/lib/sisu/v4/sst_convert_markup.rb
deleted file mode 100644
index 23016d69..00000000
--- a/lib/sisu/v4/sst_convert_markup.rb
+++ /dev/null
@@ -1,315 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sst_convert_markup.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** 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
-
-=end
-module SiSU_Modify
- 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'
- @response=SiSU_Response::Response.new
- @ask=SiSU_Response::Response.new
- @warn='WARNING, PROCEED AT YOUR OWN RISK, will make file changes.'
- end
- def current_match_and_replace
- convert_37_to_38
- end
- def message(text)
- response=''
- unless @opt.cmd=~/QQ/ \
- or @opt.cmd=~/q/
- response=@ask.response?(%{#{ text}\nProceed? })
- end
- end
- def help
- print <<WOK
-
-#{@description}
-
-sisu --convert --to38 [filename/wildcard]
- converts pre 0.37 sisu markup to 0.38 experimental
- [--37to38]
-
-sisu --convert --to37 [filename/wildcard]
- converts pre 0.37 sisu markup to 0.38 experimental
- [--38to37]
-
-sisu --convert --36to37 [filename/wildcard]
- converts pre 0.36 file-name, to 0.37 file-name
- [--36to37]
-
-sisu --identify [filename]
- attempts to identify markup version used in file
-
-sisu --query [version number]
- gives short summary of distinguishing characteristic
- of that version of markup
-
-WOK
- exit
- end
- #%% substitutions to be made
- def convert_37_to_38
- message("#{@warn}\nConvert sisu markup from 0.37 to 0.38")
- [
- [/^0~(\S+?)([+-])\s+/, '@\1:\2 ', //],
- [/^0~(\S+)\s+/, '@\1: ', //],
- [/^@toc:\s+/, '@structure: ', //],
- [/^1~/, ':A~', //],
- [/^2~/, ':B~', //],
- [/^3~/, ':C~', //],
- [/^4~/, '1~', //],
- [/^5~/, '2~', //],
- [/^6~/, '3~', //],
- [/^7~/, '4~', //],
- [/^8~/, '5~', //],
- [/^9~/, '6~', //],
- [/1/, ':A', /^@(?:level|markup):\s/],
- [/2/, ':B', /^@(?:level|markup):\s/],
- [/3/, ':C', /^@(?:level|markup):\s/],
- [/4/, '1', /^@(?:level|markup):\s/],
- [/5/, '2', /^@(?:level|markup):\s/],
- [/6/, '3', /^@(?:level|markup):\s/]
- ]
- end
- def convert_38_to_37
- message("#{@warn}\nConvert sisu markup from 0.38 to 0.37")
- [
- [/^@(\S+?):([+-])\s+/, '0~\1\2 ', //],
- [/^@(\S+?):\s+/, '0~\1 ', //],
- [/^0~structure\s+/, '0~toc ', //],
- [/^1~/, '4~', //],
- [/^2~/, '5~', //],
- [/^3~/, '6~', //],
- [/^4~/, '7~', //],
- [/^5~/, '8~', //],
- [/^6~/, '9~', //],
- [/^:?A~/, '1~', //],
- [/^:?B~/, '2~', //],
- [/^:?C~/, '3~', //],
- [/1/, '4', /^0~(?:level|markup)\s/],
- [/2/, '5', /^0~(?:level|markup)\s/],
- [/3/, '6', /^0~(?:level|markup)\s/],
- [/:?A/, '1', /^0~(?:level|markup)\s/],
- [/:?B/, '2', /^0~(?:level|markup)\s/],
- [/:?C/, '3', /^0~(?:level|markup)\s/]
- ]
- end
- def convert_filename_36_to_37
- @opt.files.each do |f|
- s=case f
- when /(\.s[1-3])$/; f.sub($1,'.sst')
- when /(\.r[1-3])$/; f.sub($1,'.ssm')
- when /(\.ri)$/; f.sub($1,'.ssi')
- else f
- end
- pwd=Dir.pwd
- unless f==s
- unless File.exist?("#{pwd}/#{s}")
- puts "./#{f} -> ./#{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_SimpleXML_ModelSax::Convert.new(@opt).read
- end
- def convert_to_simple_xml_model_dom
- SiSU_simple_xml_model_dom::Convert.new(@opt).read
- end
- def convert_to_simple_xml_model_node
- SiSU_simple_xml_model_node::Convert.new(@opt).read
- end
- def convert_kdi_to_sst
- SiSU_Kdissert::Convert.new(@opt).read
- end
- def convert_s_xml_to_sst
- SiSU_sstFromXML::Convert.new(@opt).read
- end
- def convert_footnotes
- require_relative 'sst_do_inline_footnotes'
- SiSU_ConvertFootnotes::Source.new(@opt).read
- end
- def conversion
- #%% do it -------------------------->
- if @opt.files \
- and @opt.files.length > 0
- mr=nil
- #%% changes to make m match, r replace -------------------------->
- 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'
- when /(?:convert|to)[=-](?:sxd|dom)/; '.sxd.xml'
- when /(?:convert|to)[=-](?:sxn|node)/; '.sxn.xml'
- end
- message("#{@opt.files.inspect}\n\nWARNING, PROCEED AT YOUR OWN RISK,\noverwriting any equivalent file with the extension #{ext}")
- mr=case @opt.mod.inspect
- when /(?:convert|to)[=-](?:sxs|sax|xml )/; convert_to_simple_xml_model_sax
- when /(?:convert|to)[=-](?:sxd|dom)/; convert_to_simple_xml_model_dom
- when /(?:convert|to)[=-](?:sxn|node)/; convert_to_simple_xml_model_node
- else help
- end
- else
- mr=case @opt.mod.inspect
- when /(?:(?:37)?to-?38|--(?:convert|to)[=-](?:current|0.38))/; convert_37_to_38
- when /(?:(?:38)?to-?37|--(?:convert|to)[=-](?:0.37))/; convert_38_to_37
- when /(?:36to37)/; convert_filename_36_to_37
- when /(?:convert|from)[=-]kdi/; convert_kdi_to_sst
- when /(?:(?:convert|from)[=-])?(?:xml_to_sst|xml2sst|sxml|sxs|sxd|sxd)/; convert_s_xml_to_sst
- when /(?:convert|to)[=-]footnotes/; convert_footnotes
- when /convert|default/; current_match_and_replace
- else help
- end
- end
- unless @opt.mod.inspect =~/kdi/
- match_and_replace=mr
- #start_processing =/not used in this example/i
- end_processing =/END\s+OF\s+FILE/
- i=@opt.fns
- 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::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}"
- file=File.open(i,'r')
- cont=file.readlines
- file.close
- cont.each do |y|
- match_and_replace.each do |m,r,w|
- if y =~m \
- and y =~w
- if @new
- @new=false
- File.unlink(o) if File.exist?(o)
- File.rename(i,o)
- File.unlink(i) if File.exist?(i)
- @file=File.new(i,'w')
- @matched=true
- break
- end
- end
- end
- end
- if @matched
- puts "conversion match in #{i}" unless @opt.cmd=~/q/
- @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,w|
- if y =~m \
- and y =~w
- puts m.inspect + ' -> ' + r unless @opt.cmd=~/q/
- puts "in: #{y}" if @opt.cmd=~/[vVM]/
- y.gsub!(m,r) if m and r
- puts "out: #{y}" if @opt.cmd=~/[vVM]/
- end
- end
- end
- @empty1=(y=~/^\s*$/) \
- ? true
- : false
- @file.puts y unless (@empty1==true and @empty2==true)
- @empty2=(y=~/^\s*$/) \
- ? true
- : false
- end
- @file.close
- else puts "NO conversion match in #{i}" unless @opt.cmd=~/q/
- end
- else puts "Requested conversion #{@opt.mod.inspect} markup #{markup_version} identified in #{i}" if @opt.cmd=~/[vVM]/
- end
- 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 ------------------------->
-require_relative 'options' # options.rb
-argv=$*
-@opt=SiSU_Commandline::Options.new(argv)
-case @opt.mod.inspect
-when /=kdi/
- 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::ConvertMarkup.new(@opt).conversion
-end
-else
- @opt.mod='--help'
- SiSU_Modify::ConvertMarkup.new(@opt).help
-end
-__END__
diff --git a/lib/sisu/v4/sst_do_inline_footnotes.rb b/lib/sisu/v4/sst_do_inline_footnotes.rb
deleted file mode 100644
index b65c99af..00000000
--- a/lib/sisu/v4/sst_do_inline_footnotes.rb
+++ /dev/null
@@ -1,476 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/set_do_inline_footnotes.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: preprocessing, convert bi-footnotemarker-footnote to inline
- footnotes, invoked using: sisu --to-footnotes filename.sst
-
-=end
-module SiSU_ConvertFootnotes
- 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_syntax' # dal_syntax.rb
- include SiSU_DAL_Syntax
- require_relative 'i18n' # i18n.rb
- class Instantiate < SiSU_Param::Parameters::Instructions
- @@flag={} #Beware!!
- def initialize
- @@flag['table_to']=false
- @@counter=@@column=@@columns=@@flag_vocab=0
- @@endnote={}
- @@endnote_array=@@word_mode=[]
- @@endnote_call_counter=1
- @@line_mode=''
- end
- end
- class Source <Instantiate
- @@dal_array=[]
- @@fns=nil
- def initialize(opt)
- @opt=opt
- @@fns||@opt.fns
- @my_make=SiSU_Env::CreateFile.new(@opt.fns)
- @fnm=SiSU_Env::InfoFile.new(@opt.fns).marshal.dal_content
- end
- def read #creates dal
- begin
- @@dal_array=[]
- @@fns=@opt.fns
- create_dal
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- 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_fnm
- : @@dal_array.dup #check
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- Instantiate.new
- end
- end
- protected
- def create_dal
- dal_array=[]
- 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/ 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.opt.mod.inspect =~/=footnotes-force/
- meta=nil
- 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.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=(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::CreateFile.new(@md.fns)
- SiSU_Env::InfoEnv.new(@md.fns)
- @hard="#{Dir.pwd}/#{@md.fns}.fn"
- end
- def hard_output
- filename_note=@my_make.file_note
- @data.each {|s| filename_note.puts s.strip + "\n\n" unless s.strip.empty?}
- end
- end
- class Make
- @@endnote={}
- @@endnote_array=@@word_mode=[]
- @@endnote_call_counter=1
- @@comment='%'
- @@flag={ ['table_to']=>false }
- def initialize(md,data)
- @md,@data=md,data
- @@word_mode=[]
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- l=SiSU_Env::StandardiseLanguage.new(@md.opt.lng).language
- @language=l[:n]
- @translate=SiSU_Translate::Source.new(@md,@language)
- end
- def reset
- @@counter=@@column=@@columns=@@flag_vocab=0
- @@endnote={}
- @@endnote_array=@@word_mode=[]
- @@endnote_call_counter=1
- @@line_mode=''
- end
- def song
- reset
- data=@data
- @metafile="#{@env.processing_path.dal}/#{@md.fns}.meta"
- SiSU_Env::CreateFile.new(@md.fns)
- data=data.join.split("\n\n")
- data_new=[]
- data.each do |x|
- data_new << (x =~ /\n\n/m) \
- ? (x.split(/\n\n+/))
- : x
- end
- data=data_new.flatten
- 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
- protected
- def vocabulary
- data=@data
- tuned_file,vocab_insert=[],[]
- data.each do |para|
- if para =~/^1~/ \
- and @@flag_vocab==0
- vocab_insert << '@vocabulary: lex' << "\n\n" << para
- tuned_file << vocab_insert unless para.nil?
- @@flag_vocab=1
- else tuned_file << para unless para.nil?
- end
- end
- tuned_file
- end
- def character_check
- reset
- data=@data
- @tuned_file=[]
- endnote_no=1
- data.each do |para|
- para.strip!
- para.gsub!(/^[{~}]\s*$/,'')
- para.gsub!(/^#{@@comment}.*/,'') #remove comment and divider #%
- para.gsub!(/<~#>|~#\s*/,'~#')
- para.gsub!(/-#\s*/,'-#')
- para.gsub!(/(~\{ )\s+/,'\1')
- para.gsub!(/ \/\//,'<br />') #added 2004w29
- para.gsub!(/<br>/,'<br />') #needed by xml, xhtml etc.
- para.gsub!(/`/,"'")
- para.gsub!(/\342\200\231/,"'") #if para =~/’/ #Avoid #&lsquo; &rsquo; #&ldquo; &rdquo;
- para.gsub!(/\t/,' ')
- para.gsub!(/�/,' ') #watch, replace with char code
- para.gsub!(/[“”]/,'""')
- para.gsub!(/[­–—]/,'-') #— – chk
- para.gsub!(/·/,'*')
- para.gsub!(/\\copy(?:right)?\b/,'&#169;')
- para.gsub!(/\\trademark\b|\\tm\b/,'&#174;')
- para.gsub!(/\44/,'&#36;') #$ watch
- para=para + "\n"
- case para
- when /\^~/ # endnotes
- #% Note must do this first (earlier loop) and then enter gathered data into ~^\d+
- sub_para=para.dup
- @@endnote_array << sub_para.gsub!(/\n/,'').gsub!(/\^~\s+(.+)\s*/,'~{ \1 }~').strip
- endnote_no+=1
- para=nil if para =~/\^~ .+/ #removes 'binary' endnote now in endnote array for later insertion
- end
- @tuned_file << para unless para.nil?
- end
- @tuned_file
- end
- def substitutions_and_insertions?
- data=@data
- tuned_file=[]
- data.each do |para|
- if @md.markup =~/0\.16|0\.37/ #parameters not extracted/available
- para.gsub!(/^0~\S+\s+/,'@\1: ')
- para.gsub!(/^1~/,':A~')
- para.gsub!(/^2~/,':B~')
- para.gsub!(/^3~/,':C~')
- para.gsub!(/^4~/,'1~')
- para.gsub!(/^5~/,'2~')
- para.gsub!(/^6~/,'3~')
- para.gsub!(/^7~/,'4~')
- para.gsub!(/^8~/,'5~')
- para.gsub!(/^9~/,'6~')
- end
- if para =~/<:insert\d+!?>/ \
- and para !~/^%\s+/
- ins=SiSU_Viz::Inserts.new
- case para
- when /^\s*<:insert1>\s*$/
- para=[]
- ins.insert1.split(/\n\n/).each {|x| para << x }
- when /^\s*<:insert2>\s*$/
- para=[]
- ins.insert2.split(/\n\n/).each {|x| para << x }
- when /^\s*<:insert3>\s*$/
- para=[]
- 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"}
- para=ins.insert4
- when /^\s*<:insert5>\s*$/
- para=[]
- 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"}
- when /^\s*<:insert7>\s*$/
- para=[]
- ins.insert7.split(/\n\n/).each {|x| para << x << "\n"}
- end
- para.each {|x| tuned_file << x }
- else tuned_file << para
- end
- tuned_file.compact!
- end
- tuned_file
- end
- def name_endnote_seg
- data=@data
- @tuned_file=[]
- data.each do |para|
- para.gsub!(/<:3>\s*<:ee>/,
- "#{@@endnote['special_align']} <p /><br />\r " +
- "#{@@endnote['seg_name_3']} <p /> " +
- "#{@@endnote['special_align_close']}")
- para.gsub!(/<:2>\s*<:ee>/,
- "#{@@endnote['special_align']} <p /><br />\r " +
- "#{@@endnote['seg_name_2']} <p />" +
- "#{@@endnote['special_align_close']}")
- para.gsub!(/<:1>\s*<:ee>/,
- "#{@@endnote['special_align']} <p /><br />\r " +
- "#{@@endnote['seg_name_1']} <p /> " +
- "#{@@endnote['special_align_close']}")
- @tuned_file << para
- end
- if @md.flag_auto_endnotes \
- and @md.flag_separate_endnotes_make
- @tuned_file << "\n1~endnotes Endnotes" #prob numbering, revisit
- end
- @tuned_file << "\n<ENDNOTES>"
- @tuned_file
- end
- def owner_details_seg
- data << '1~owner.details Owner Details'
- end
- def number_sub_heading(para,num,title_no)
- case para
- when /#{num}~- /; para.gsub!(/#{num}~- /,"#{title_no} ")
- when /^#{num}~#\s*/; para.gsub!(/^#{num}~#\s*/,"#{title_no} ")
- when /^#{num}~[a-z_\.]+ /
- para.gsub!(/^#{num}~([a-z_\.]+)\s+(.+)/i,%{#{num}~\\1 #{title_no} \\2 <:name##{title_no}>})
- else para.gsub!(/^#{num}~ /,"#{num}~#{title_no} #{title_no} ") #main
- end
- if @md.toc_lev_limit \
- and @md.toc_lev_limit < num
- para.gsub!(/^[2-6]~(?:~\S+)?\s*/,'!_ ')
- end
- para
- 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.opt.cmd =~/[MV]/
- data=@data
- @tuned_file=[]
- data.each do |para|
- unless @md.set_heading_top
- if para !~/^(?:@\S+:|0~\S+)\s/m \
- and para !~/\A\s*\Z/m
- @md.set_heading_top=true
- head=(@md.title.full) \
- ? (":A~ #{@md.title.full}")
- : (':A~ [no title provided]')
- @tuned_file << head
- end
- end
- @tuned_file << para
- end
- @tuned_file
- end
- 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.opt.cmd =~/[MV]/
- data=@data
- @tuned_file=[]
- data.each do |para|
- unless @md.set_heading_seg
- if para !~/^(?:@\S+:|0~\S+|:[ABC]~)/m \
- and para !~/\A\s*\Z/m \
- and para !~/<:p[bn]>/
- @md.set_heading_seg=true
- head=(@md.title.full) \
- ? ("1~seg [#{@md.title.full}]")
- : ('1~seg [segment]')
- @tuned_file << head
- end
- end
- @tuned_file << para
- end
- @tuned_file
- end
- 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.opt.cmd =~/[MV]/
- data=@data
- @tuned_file=[]
- data.each do |para|
- unless @md.set_header_title
- if para !~/^%{1,2}\s/m \
- and para !~/\A\s*\Z/m
- @tuned_file << "0~title #{@md.heading_seg_first}"
- @md.title.full=@md.heading_seg_first
- @md.set_header_title=true
- end
- end
- @tuned_file << para
- end
- @tuned_file
- end
- end
- def endnotes #% endnote work zone
- data=@data
- @tuned_file=[]
- endnote_ref=1
- data.each do |para|
- case para # manually numbered endnotes <!e(\d)!> <!e_(\d)!> -->
- when /~\{\s+.+?\}~/ # auto-numbered endnotes <!e!> <!e_!> -->
- para.gsub!(/\s*\}~/,' }~') # required 2003w31
- @word_mode=para.scan(/\S+/)
- 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_ConvertFootnotes::Make.new(@md,word_mode).endnote_call_number
- para=word_mode.join(' ')
- endnote_ref+=1
- end
- @tuned_file << para
- end
- @tuned_file
- end
- def endnote_call_number
- data=@data
- data.each do |word|
- case word
- when /~\{/
- unless word =~/~\{\*+/
- @@endnote_call_counter+=1
- end
- when /~\^|<:e>/
- word.gsub!(/~\^|<:e>/,"#{@@endnote_array[@@endnote_call_counter-1]}")
- @@endnote_call_counter+=1
- end
- end
- end
- def strip_clean_extra_spaces(s) # dal output tuned
- s=s.dup
- s=s.gsub(/[ ]+([,.;:?](?:$|\s))/,'\1')
- s=s.gsub(/ [ ]+/,' ')
- s=s.gsub(/^ [ ]+/,'')
- s=s.gsub(/ [ ]+$/,'')
- s=s.gsub(/(<\/[bi]>')[ ]+(s )/,'\1\2')
- end
- def strip_clean_of_markup(s) # used for digest, define rules, make same as in db clean
- s=s.dup
- s=s.gsub(/(?:<\/?[ib]>|^:[A-C]~\S+|^[1-6]~\S+|~\{\d+\s.+?\}~)/,'') # markup and endnotes removed
- #% same as db clean -->
- s=s.gsub(/<del>(.+?)<\/del>/,'DELETED(\1)') # deletions
- s=s.gsub(/<sup>(\d+)<\/sup>/,'[\1]')
- s=s.gsub(/(?:&nbsp\\;|#{Mx[:nbsp]})+/,' ') #checking source Mx not necessary
- s=s.gsub(/\{.+?\.(?:png|jpg|gif).+?\}(?:https?|file|ftp)\\\:\S+ /,' [image] ') # else image names found in search
- s=s.gsub(/#{Mx[:lnk_o]}.+?\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,' [image] ') # else image names found in search, re-check
- s=s.gsub(/\s\s+/,' ')
- s=s.strip
- end
- 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/v4/sst_from_xml.rb b/lib/sisu/v4/sst_from_xml.rb
deleted file mode 100644
index 0eacb048..00000000
--- a/lib/sisu/v4/sst_from_xml.rb
+++ /dev/null
@@ -1,175 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sst_from_xml.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: Conversion script from kdissert .kdi to sisu markup .ssm
- (master document)
-
-=end
-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::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
- end
- def read
- xml_to_sisu
- end
- def markup_head(text)
- text.strip!
- text.gsub!(/(?:\s*\n|\s\s+)/,' ')
- text.gsub!(/<header class=['"]\S+?['"]>(.+?)<\/header>/,'\1')
- text.gsub!(/<(\w+)>(.+?)<\/\w+>/,'@\1: \2')
- text.gsub!(/<header class=['"]\S+?['"]><(\w+)>(.+?)<\/\w+><\/header>/,'@\1: \2')
- text.gsub!(/\s +/,' ')
- text.strip!
- text + "\n\n"
- end
- def markup(text)
- text.strip!
- text.gsub!(/(?:\s*\n|\s\s+)/,' ')
- text.gsub!(/<text class='h1'>(.+?)<\/text>/,':A~ \1')
- text.gsub!(/<text class='h2'>(.+?)<\/text>/,':B~ \1')
- text.gsub!(/<text class='h3'>(.+?)<\/text>/,':C~ \1')
- text.gsub!(/<text class='h4'>(.+?)<\/text>/,'1~ \1')
- text.gsub!(/<text class='h5'>(.+?)<\/text>/,'2~ \1')
- text.gsub!(/<text class='h6'>(.+?)<\/text>/,'3~ \1')
- text.gsub!(/<text class='norm'>(.+?)<\/text>/,'\1')
- text.gsub!(/<endnote symbol='norm'>(.+?)<\/endnote>/,'~{ \1 }~')
- text.gsub!(/<br ?\/>/,'<br>')
- text.gsub!(/<i>(.+?)<\/i>/,'/{\1}/')
- text.gsub!(/<b>(.+?)<\/b>/,'*{\1}*')
- text.gsub!(/<u>(.+?)<\/u>/,'_{\1}_')
- text.gsub!(/<sem:([a-z_]+)\s+depth=['"]zero['"]>(\s*.+?\s*)<\/sem:\1>/,';{ \2 };\1')
- text.gsub!(/<sem:([a-z_]+)\s+depth=['"]one['"]>(\s*.+?\s*)<\/sem:\1>/,':{ \2 }:\1')
- text.gsub!(/<sem:([a-z_]+)\s+depth=['"]many['"]>(\s*.+?\s*)<\/sem:\1>/,'\1:{ \2 }:\1')
- text.gsub!(/<sem:([a-z_]+)>(\s*.+?\s*)<\/sem:\1>/,'\1:{ \2 }:\1')
- text.gsub!(/\s +/,' ')
- text.strip!
- text + "\n\n"
- end
- def sax
- out_file=File.new(@output_file_name,'w')
- head=@doc.root.get_elements('//head/header')
- body=@doc.root.get_elements('//object/text')
- out_file.puts "% SiSU text #{@ver[:version]} (generated from a SiSU XML markup representation)\n\n"
- head.each do |x|
- if x.name=='header'
- head=markup_head(x.to_s)
- out_file.puts head
- end
- end
- body.each do |x|
- if x.name=='text'
- body=markup(x.to_s)
- out_file.puts body
- end
- end
- end
- def node
- sax
- end
- def dom
- raise "#{__FILE__}::#{__LINE__} xml dom representation to sst not yet implemented (experimental simple xml representations sax and node to sst are in place)."
- end
- def xml_to_sisu
- unless @opt.files.empty?
- @opt.files.each do |xml|
- @sisu_base=[]
- if xml =~/\.sx[sdn]\.xml$/
- begin
- @doc_str=IO.readlines(xml,'').join("\n")
- @output=File.new("#{xml}.sst",'w')
- @doc=REXML::Document.new(@doc_str)
- @output_file_name="#{Dir.pwd}/#{xml}.sst"
- @el=[]
- rescue REXML::ParseException
- end
- end
- if xml =~/\.sxs\.xml$/
- unless @opt.cmd =~/q/
- tell(xml,'sax')
- end
- sax
- elsif xml =~/\.sxd\.xml$/
- unless @opt.cmd =~/q/
- tell(xml,'dom')
- end
- dom
- elsif xml =~/\.sxn\.xml$/
- unless @opt.cmd =~/q/
- tell(xml,'node')
- end
- node
- else puts "filename not recognised: << #{xml} >>"
- end
- @output << @sisu_base
- end
- else puts '.xml file for conversion to sisu expected'
- end
- puts @opt.files.inspect
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/sst_identify_markup.rb b/lib/sisu/v4/sst_identify_markup.rb
deleted file mode 100644
index dcd60e0d..00000000
--- a/lib/sisu/v4/sst_identify_markup.rb
+++ /dev/null
@@ -1,487 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sst_identify_markup.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** 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
-
-=end
-module SiSU_Markup
- 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
- end
- def version
- @version
- end
- def message
- @message
- end
- def declared_version
- @declared_markup
- end
- def declared_type
- @declared_type
- end
- def history
- MarkupHistory.new(@version).query
- end
- end
- 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)'
- end
- def help
- print <<WOK
-
-#{@description}
-
-WOK
- exit
- end
- def identify
- f=@opt.fns
- if f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])$/ \
- and File.exist?(f)
- file=File.open(f,'r')
- cont=file.readlines
- file.close
- links,oldlinks='',''
- markup=nil
- @declared_type,@declared_markup='[text?]',''
- if cont[0] =~ /^(?:%\s+)?SiSU\s+(text|master|insert)\s+([0-9](?:\.[0-9]+){1,2})/ \
- or cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @declared_type,@declared_markup=$1,$2
- elsif cont[0] =~ /^(?:%\s+)?SiSU\s+([0-9](?:\.[0-9]+){1,2})/ \
- or cont[0] =~ /^(?:%\s+)?sisu-([0-9](?:\.[0-9]+){1,2})/
- @declared_markup=$1
- end
- @flag_2_0,@flag_1_0,@flag_69,@flag_66,@flag_57,@flag_38=false,false,false,false,false,false
- cont.each_with_index do |y,i|
- if y =~/^(?:0\{?~links?|@links?:)\s/ \
- and f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])/
- links=unless y =~/\{.+?\}\S+/; oldlinks=' (pre 0.20.4 header links)'
- else ' (post 0.20.4 header links)'
- end
- end
- if @flag_2_0 \
- or y =~/^@make:|^@classify|^\s\s?:[a-z_-]+?:\s+\S/
- version=2.0.to_f
- 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=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type)
- @flag_38=true
- end
- end
- if @flag_38
- if @flag_1_0 \
- or y =~/^=\{.+?\}\s*$/
- version='0.69'
- 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=MarkupInform.new(version,'0.66' + oldlinks,@declared_markup,@declared_type)
- @flag_66=true
- break
- end
- end
- end
- unless @flag_2_0 \
- or @flag_1_0 \
- or @flag_66
- cont.each_with_index do |y,i|
- if y =~/^(?:0\{?~links?|@links?:)\s/ \
- and f =~/(?:\.sst|\.ssm|\.ssi|\.s[123])/
- links=unless y =~/\{.+?\}\S+/; oldlinks=' (pre 0.20.4 header links)'
- else ' (post 0.20.4 header links)'
- end
- end
- if @flag_57 \
- or (y =~/^:?A~\?? @title/ and f =~/(?:\.sst|\.ssm|\.ssi)/)
- version='0.57'
- 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=MarkupInform.new(version,'0.38' + oldlinks,@declared_markup,@declared_type)
- @flag_38=true
- break if i >= 200
- if y =~ /(?:~{\*+|~\[\*|~\[\+)\s/
- version='0.42'
- 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=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~/ \
- and f =~/\.([rs])([123])/ \
- and not @flag_38
- t,n=$1,$2
- version='0.16'
- instruct=if t =~/r/
- " (change file extension from .#{t}#{n} to .ssm)"
- else " (change file extension from .#{t}#{n} to .sst)"
- end
- 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=MarkupInform.new(version,'0.1 - 0.15',@declared_markup,@declared_type)
- break
- end
- if y =~/^0\{{3}/ \
- and not @flag_38
- markup=MarkupInform.new('circa. 1997','old, check date',@declared_markup,@declared_type)
- break
- end
- markup='Not a recognised file type '
- end
- end
- markup
- else MarkupHistory.new(@opt).help_query
- end
- end
- def determine_markup_version
- if @opt.fns.nil? \
- or @opt.fns.empty?
- MarkupHistory.new(@opt).help_identify
- end
- if File.exist?(@opt.fns)
- if @opt.fns =~/\.(?:sst|ssm|ssi|s[123i]|r[123])/
- markup=identify #(@opt.fns)
- if defined? markup.version
- unless @opt.cmd =~/q/
- message=unless markup.declared_version.empty?
- "#{@opt.fns}\n markup Type Declared as SiSU #{markup.declared_version} #{markup.declared_type}\n appears to be SiSU #{markup.version}"
- else
- "Markup Type Appears to be SiSU #{markup.version}\n in file #{@opt.fns}"
- end
- puts message
- puts %{"sisu --query-#{markup.version}" for a brief description of markup type}
- end
- end
- else puts 'file-type not recognised: ' + @opt.fns
- end
- else puts 'file not found: ' + @opt.fns
- end
- (defined? markup.version) \
- ? markup.version
- : 'markup type/version not determined'
- end
- def markup_version?
- if @opt.fns.empty?
- @opt.files.each do |fns|
- @opt.fns=fns
- determine_markup_version
- end
- else determine_markup_version
- end
- end
- end
- 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
- related headers now grouped, e.g.
-
- @title:
- :subtitle:
-
- @creator:
- :author:
- :translator:
- :illustrator:
-
- see document markup samples, and sisu --help headers
-
- the monospace tag takes the form of a has '#' \#{ this enclosed text would be monospaced }#
-
-WOK
- end
- def sisu_1_0
- <<WOK
- SiSU 1.0 same as 0.69
-
-WOK
- end
- def sisu_0_69
- <<WOK
- SiSU 0.69 (same as 1.0) as previous (0.57) with the addition of book index tags
- /^=\{.+?\}$/
- e.g. appended to a paragraph, on a new-line (without a blank line in between)
- logical structure produced assuming this is the first text "object"
- ={GNU/Linux community distribution:Debian+2|Fedora|Gentoo;Free Software Foundation+5}
-
- Free Software Foundation, 1-6
- GNU/Linux community distribution, 1
- Debian, 1-3
- Fedora, 1
- Gentoo,
-
-WOK
- end
- def sisu_0_66
- <<WOK
- SiSU 0.66 same as previous, adds semantic tags
- /[:;]\{.+?\}[:;][a-z+]/
- e.g. :{ Ralph last;{Amissah};last }:author
-
-WOK
- end
- def sisu_0_65
- <<WOK
- SiSU 0.65 same as previous, adds semantic tags
- /[a-z+][:;]\{.+?\}[:;][a-z+]/
- e.g. author:{ Ralph last;{Amissah};last }:author
-
-WOK
- end
- def sisu_0_57
- <<WOK
-
- SiSU 0.57 (a subset of 1.0) is the same as 0.42 with the introduction of some
- a shortcut to use the headers @title and @creator in the first heading
- [expanded using the contents of the headers @title: and @author:]
-
- :A~ @title by @author
-
-WOK
- end
- def sisu_0_42
- <<WOK
- SiSU 0.42 (a subset of 1.0) is the same as 0.38 with the introduction of some additional endnote types,
-
- Introduces some varations on endnotes, in particular the use of the asterisk
- ~{* for example for describing an author }~ and ~{** for describing a second author }~
-
- * for example for describing an author
-
- ** for describing a second author
-
- and ~[* my note ]~ or ~[+ another note ]~ which numerically increments an
- asterisk and plus respectively
-
- *1 my note
- +1 another note
-
-WOK
- end
- def sisu_0_38
- <<WOK
-
- SiSU 0.38 (a subset of 1.0) introduced alternative experimental header and heading/structure markers,
-
- @headername: and headers :A~ :B~ :C~ 1~ 2~ 3~
-
- as the equivalent of (the superceded)
-
- 0~headername and headers 1~ 2~ 3~ 4~ 5~ 6~
-
- The internal document markup of SiSU 0.16 remains valid and standard
- Though note that SiSU 0.37 introduced a new file naming convention
-
- SiSU has in effect two sets of levels to be considered, using 0.38 notation
- A-C headings/levels, pre-ordinary paragraphs /pre-substantive text, and
- 1-3 headings/levels, levels which are followed by ordinary text.
- This may be conceptualised as levels A,B,C, 1,2,3, and using such letter
- number notation, in effect:
- A must exist, optional B and C may follow in sequence (not strict)
- 1 must exist, optional 2 and 3 may follow in sequence
- i.e. there are two independent heading level sequences A,B,C and 1,2,3
- (using the 0.16 standard notation 1,2,3 and 4,5,6)
- on the positive side:
- * the 0.38 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)
- * the substantive text follows levels 1,2,3 and it is 'nice' to do
- most work in those levels
-WOK
- end
- def sisu_0_37
- <<WOK
-
- SiSU 0.37 introduced the file naming convention, that remains in use in SiSU
- v1 and v2, using the file extensions .sst .ssm and .ssi
- to replace .s1 .s2 .s3 .r1 .r2 .r3 and .si
-
- this is captured by the following file 'rename' instruction:
-
- rename 's/\.s[123]$/\.sst/' *.s{1,2,3}
- rename 's/\.r[123]$/\.ssm/' *.r{1,2,3}
- rename 's/\.si$/\.ssi/' *.si
-
- The internal document markup remains unchanged, from SiSU 0.16
-WOK
- end
- def sisu_0_16
- <<WOK
-
- SiSU 0.16 (0.15 development branch) introduced the use of
-
- the header 0~ and headings/structure 1~ 2~ 3~ 4~ 5~ 6~
-
- in place of the 0.1 header, heading/structure notation
-WOK
- end
- def sisu_0_1
- <<WOK
-
- SiSU 0.1 headers and headings structure represented by
- header 0{~ and headings/structure 1{ 2{ 3{ 4{~ 5{ 6{
-WOK
- end
- def help_query
- <<WOK
-
- sisu --query=[sisu version [0.38] or 'history]
- provides a short history of changes to SiSU markup
-
-WOK
- end
- def help_identify
- <<WOK
-
- sisu --identify [filename]
- attempts to identify the SiSU markup used in a file
-
-WOK
- end
- def query
- tell=if @opt.mod.inspect =~/--query/
- tell=case @opt.mod.inspect
- when /history/
- "#{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/
- "#{sisu_1_0}#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.69/
- "#{sisu_0_69}#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.66/
- "#{sisu_0_66}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.65/
- "#{sisu_0_65}#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.57/
- "#{sisu_0_57}#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.42/
- "#{sisu_0_42}#{sisu_0_38}#{sisu_0_16}"
- when /0.38/
- "#{sisu_0_38}#{sisu_0_16}"
- when /0.37/
- "#{sisu_0_37}\n#{sisu_0_16}"
- when /0.1[6-9]|0.2[0-9]|0.3[0-6]/
- "#{sisu_0_16}\n#{sisu_0_1}"
- when /0.[1-9]|0.1[1-4]/
- sisu_0_1
- else puts "NOT RECOGNISED: #{@opt.mod.inspect}"
- help_query
- end
- tell
- else help_query
- end
- end
- end
-end
-__END__
-#%% to use as independent program ------------------------->
-f=$*
-cf=f[0].to_s
-f.shift
-match_and_replace=[]
-unless f.length > 0; f=Dir.glob("[a-z]*.ss?") #restricted to sisu type files, it need not be
-end
-puts "SiSU files:"
-puts f
-f.each do |x|
- SiSU_Markup::MarkupIdentify.new(x).markup_version?
-end
diff --git a/lib/sisu/v4/sst_to_s_xml_sax.rb b/lib/sisu/v4/sst_to_s_xml_sax.rb
deleted file mode 100644
index bbf81c5a..00000000
--- a/lib/sisu/v4/sst_to_s_xml_sax.rb
+++ /dev/null
@@ -1,452 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sst_to_s_xml_sax.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: simple xml representation (sax style)
-
-=end
-module SiSU_SimpleXML_ModelSax
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'param' # param.rb
- include SiSU_Param
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- 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=''
- class Convert
- @@fns=nil
- def initialize(opt)
- @opt=opt
- @particulars=SiSU_Particulars::CombinedSingleton.instance.get_env_md(opt)
- end
- def read
- begin
- @md=@particulars.md #bug, relies on info persistence, assumes -m has previously been run
- @env=@particulars.env
- SiSU_Screen::Ansi.new(@opt.cmd,'invert','XML SAX',"#{@md.fns} -> #{@md.fn[:sxs]}").colorize unless @opt.cmd =~/q/
- SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{Dir.pwd}/#{@md.fn[:sxs]}").flow if @opt.cmd =~/[MV]/
- unless @@fns==@opt.fns
- @@fns=@opt.fns
- @@fns_array=[]
- end
- @fns_array=if @@fns_array.empty?; read_fnm
- else @@fns_array.dup #check
- end
- SiSU_SimpleXML_ModelSax::Convert::Songsheet.new(@fns_array,@particulars).songsheet
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure #file closed in songsheet
- end
- end
- def read_fnm
- dal=[]
- if FileTest.file?("#{Dir.pwd}/#{@opt.fns}")
- dal=IO.readlines("#{Dir.pwd}/#{@opt.fns}","\n\n")
- else STDERR.puts 'Error'
- end
- end
- private
- class Songsheet
- def initialize(data,particulars)
- @data,@particulars,@env,@md=data,particulars,particulars.env,particulars.md
- end
- def songsheet
- begin
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- class Scroll
- 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_Viz::Defaults.new
- @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)
- end
- @sys=SiSU_Env::SystemCall.new
- end
- def songsheet
- pre
- markup
- post
- publish
- end
- protected
- def embedded_endnotes(para='')
- para.gsub!(/~\{(.+?)\}~/,'<endnote symbol="norm">\1</endnote> ')
- para.gsub!(/~\[([*+])\s+(.+?)\]~/,'<endnote symbol="\1">\2</endnote> ')
- end
- def xml_head(meta)
- txt=meta.text
- txt.gsub!(/\/{(.+?)}\//,'<i>\1</i>')
- txt.gsub!(/[*!]{(.+?)}[*!]/,'<b>\1</b>')
- txt.gsub!(/_{(.+?)}_/,'<u>\1</u>')
- txt.gsub!(/-{(.+?)}-/,'<del>\1</del>')
- txt.gsub!(/<br(?: \/)?>/,'<br />')
- txt.gsub!(/ & /,' and ')
- @@xml[:head] <<<<WOK
-#{@tab}<header class="#{meta.attrib}">
-#{@tab*2}<#{meta.el}>
-#{@tab*3}#{txt}
-#{@tab*2}</#{meta.el}>
-#{@tab}</header>
-WOK
- end
- def xml_sc(md='')
- sc=if @md.sc_info
- <<WOK
- <source_control>
- <sc class="sourcefile">
- #{@md.sc_filename}
- </sc>
- <sc class="number">
- #{@md.sc_number}
- </sc>
- <sc class="date">
- #{@md.sc_date}
- </sc>
- </source_control>
-WOK
- else ''
- end
- @@xml[:sc]=sc
- end
- def xml_structure(para='',lv='',hname='') #extracted endnotes
- lv=lv.to_i
- lv=nil if lv==0
- embedded_endnotes(para)
- if para[@regx]
- paragraph="#{para[@regx,2]}"
- util=SiSU_TextUtils::Wrap.new(paragraph,70)
- wrapped=util.line_wrap
- end
- @@xml[:body] << "#{@tab*0}<object>" if para[@regx]
- @@xml[:body] << "#{@tab*1}" << "\n" if para[@regx]
- @@xml[:body] << if lv; %{#{@tab*1}<text class="h#{lv}">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n} << "\n"
- elsif wrapped =~/\A%%?\s+/; %{<!--\n#{@tab*1}<text class="comment">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n-->\n} # comments
- else %{#{@tab*1}<text class="norm">\n#{@tab*2}#{wrapped}\n#{@tab*1}</text>\n} # main text, contents, body KEEP
- end
- @@xml[:body] << "#{@endnotes}" if @endnotes # main text, endnotes KEEP
- @@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!
- @@xml[:body] << %{#{@tab*0}<object>}
- @@xml[:body] << %{#{@tab*1}<text class="group">#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*1}</text>\n}
- @@xml[:body] << "#{@tab*0}</object>"
- end
- def poem_structure(para='')
- para.gsub!(/<:verse(?:-end)?>/,'')
- para.strip!
- @@xml[:body] << %{#{@tab*0}<object>}
- @@xml[:body] << %{#{@tab*1}<text class="verse">#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*1}</text>\n}
- @@xml[:body] << "#{@tab*0}</object>" << "\n"
- end
- def code_structure(para='')
- para.gsub!(/<:code(?:-end)?>/,'')
- para.strip!
- @@xml[:body] << %{#{@tab*0}<object>}
- @@xml[:body] << %{#{@tab*1}<text class="code">#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*2}#{para}#{@tab*1}\n}
- @@xml[:body] << %{#{@tab*1}</text>\n}
- @@xml[:body] << "#{@tab*0}</object>" << "\n"
- end
- def table_structure(table='') #tables
- @@xml[:body] << %{#{@tab*0}<object>}
- @@xml[:body] << %{#{@tab*1}#{table}\n#{@tab*1}\n} # unless lv # main text, contents, body KEEP
- @@xml[:body] << "#{@tab*0}</object>" << "\n" #if para[@regx]
- @endnotes=[]
- end
- def tidywords(wordlist)
- wordlist.each do |x|
- x.gsub!(/&/,'&amp;') unless x =~/&\S+;/
- end
- end
- def xml_clean(para)
- para.gsub!(/#{Mx[:gl_o]}[1-9]:\S*?#{Mx[:gl_c]}/,'') #Danger, watch
- para
- end
- def markup
- data=[]
- 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_DAL_DocumentStructureExtract::Structure.new(@md,para).structure #takes on Mx marks
- end
- data.each do |para|
- if para !~/^\s*(?:%+ |<:code>)/
- if @md.sem_tag and para =~/[:;]\{|\}[:;]/
- para=@trans.xml_semantic_tags(para)
- end
- if para =~/[:;]\{|\}[:;]/
- 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_TextUtils::HeaderScan.new(@md,para).meta
- if d_meta; xml_head(d_meta)
- end
- end
- para='' if para=~/#{Mx[:lv_o]}@\S+?#{Mx[:lv_c]}/
- if @rcdc==false \
- and (para =~/~metadata/ or para =~/^1~meta\s+Document Information/)
- @rcdc=true
- end
- if para !~/(^@\S+?:|^\s*$|<ENDNOTES>|<EOF>)/
- @sto=SiSU_text_parts::SplitTextObject.new(@md,para).lev_segname_para
- unless @rcdc
- SiSU_XML_Format::FormatScroll.new(@md,@sto.text) if @sto.format =~/i[1-9]|ordinary/
- case @sto.format
- when /^(1):(\S*)/
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body1
- when /^(2):(\S*)/
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body2
- when /^(3):(\S*)/
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body3
- when /^(4):(\S*)/ # work on see SplitTextObject
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body4
- when /^(5):(\S*)/
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body5
- when /^(6):(\S*)/
- xml_clean(para)
- xml_structure(para,$1,$2)
- para=@sto.lev_para_ocn.heading_body6
- else
- if para =~ /<:verse>/
- para=poem_structure(para)
- elsif para =~ /<:group>/
- para=group_structure(para)
- elsif para =~ /<:code>/
- para.gsub!(/</,'&lt;')
- para.gsub!(/>/,'&gt;')
- para=code_structure(para)
- elsif para =~/<!Th?.+/ # tables come as single block #work area 2005w13
- table=SiSU_Tables::TableXML.new(para)
- para=table.table_split
- para=table_structure(para)
- else xml_structure(para,nil,nil)
- end
- end
- if para =~/<a name="n\d+">/ \
- and para =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
- para=''
- end
- if para =~/.*<:#>.*$/
- para=case para
- when /<:i1>/
- format_text=FormatTextObject.new(para,'')
- format_text.scr_inden_ocn_e_no_paranum
- when /<:i2>/
- 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=FormatTextObject.new(one,two)
- para=format_text.center
- end
- end
- para.gsub!(/<:\S+?>/,'')
- para.gsub!(/<!.+!>/,'') ## Clean Prepared Text #bugwatch reinstate
- para
- end
- para
- end
- 6.downto(4) do |x|
- y=x - 1; v=x - 3
- @@xml[:body] << "#{@tab*5}</content>\n#{@tab*y}</contents#{v}>\n" if @level[x]==true
- end
- 3.downto(1) do |x|
- y=x - 1
- @@xml[:body] << "#{@tab*y}</heading#{x}>\n" if @level[x]==true
- end
- end
- def pre
- 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
- 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}"?>
-#{rdf.comment_xml_sax}
-<document>
-WOK
- @@xml[:head] << "<head>\n"
- @@xml[:body] << "<body>\n"
- end
- def post
- @@xml[:head] << @@xml[:sc]
- @@xml[:head] << "</head>\n"
- @@xml[:body] << "</body>\n"
- @@xml[:close] = "</document>\n"
- end
- def publish
- content=[]
- content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
- content << @@xml[:owner_details] if @md.stmp =~/\w\w/
- content << @@xml[:tail] << @@xml[:close]
- Output.new(content.join,@md).xml
- @@xml={}
- end
- end
- class Output
- def initialize(data,md)
- @data,@md=data,md
- end
- def xml
- @sisu=[]
- @data.each do |para|
- para.gsub!(/<:\S+?>/,'')
- para.gsub!(/<!.+?!>/,'')
- para="#{para}\n" unless para.empty?
- @sisu << para
- end
- new_file_data=@sisu.join
- @sisu=new_file_data.scan(/.+/)
- 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?'
- end
- end
- end
- class Tidy
- def initialize(md,dir)
- @md,@env=md,dir
- @prog=SiSU_Env::InfoProgram.new
- end
- def xml
- if @prog.tidy !=false #note values can be other than true
- 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::SystemCall.new("#{Dir.pwd}/#{@md.fn[:sxs]}",tidyfile)
- tidy.well_formed?
- tell.p_off unless @md.opt.cmd =~/q/
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/sysenv.rb b/lib/sisu/v4/sysenv.rb
deleted file mode 100644
index eda1ad46..00000000
--- a/lib/sisu/v4/sysenv.rb
+++ /dev/null
@@ -1,6413 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/sysenv.rb;hb=HEAD>
-
- * 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_relative 'utils' # utils.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 InfoSystemGen
- require 'rbconfig'
- @@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_is[: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
- 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? \
- || 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
- @@pwd=@pwd=SiSU_Utils::Path.new.base_markup
- 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=\
- @@user,@@home,@@hostname,@@pwd,@@sisu_etc,@@host,@@arch,@@rbver,@@dir_arch,@@dir_sitearch,@@dir_bin,@@locale,@@default_dir
- #note rbver is duplicated in InfoVersion
- end
- end
- class InfoSystem < InfoSystemGen
- include Singleton
- def initialize
- super()
- end
- end
- class Load
- def initialize(prog,mandatory=false)
- @prog,@mandatory=prog,mandatory
- end
- def prog
- load_prog=false
- $:.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(@prog,"*WARN* module required: #{@prog}").warn)
- : '' #(SiSU_Screen::Ansi.new(@prog,"*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 < InfoSystemGen
- @@noyaml=false
- @@rc,@@sisu_doc_makefile,@@sisurc_path,@@tx=nil,nil,nil,nil
- @@ad={ promo: nil, promo_list: nil, flag_promo: false }
- @@sdmd=nil
- attr_accessor :yaml
- def initialize
- super()
- @markup_dir_changed_=if @@sdmd==$sisu_document_markup_directory
- false
- else
- @@sdmd=$sisu_document_markup_directory
- true
- end
- end
- def tex
- @@tx ||=SiSU_Viz::TeX.new
- end
- def rc_path_options
- [
- "#{$sisu_document_markup_directory_base_fixed_path}/.sisu/#{SiSU_is[:version_dir]}",
- "#{$sisu_document_markup_directory_base_fixed_path}/.sisu",
- "#{$sisu_document_markup_directory_base_fixed_path}/_sisu/#{SiSU_is[:version_dir]}",
- "#{$sisu_document_markup_directory_base_fixed_path}/_sisu",
- "#{@@home}/.sisu/#{SiSU_is[:version_dir]}",
- "#{@@home}/.sisu",
- "#{@@sisu_etc}/#{SiSU_is[:version_dir]}",
- "#{@@sisu_etc}",
- ]
- end
- def sisu_document_make
- def makefile_name
- S_CONF[:header_make]
- end
- def makefile
- rc_path_options.each do |v|
- if FileTest.exist?("#{v}/#{makefile_name}")
- @sisu_make_path=v
- break
- end
- end
- @sisu_make_file_path=@sisu_make_path \
- ? "#{@sisu_make_path}/#{makefile_name}"
- : nil
- end
- def makefile_read
- if makefile
- sisu_doc_makefile=IO.read(makefile, mode: 'r:utf-8')
- @sisu_doc_makefile=sisu_doc_makefile.split(/\s*\n\s*\n/m)
- end
- @sisu_doc_makefile
- end
- self
- end
- def sisu_yaml
- def rc
- if @markup_dir_changed_
- rc_path_options.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=S_CONF[:rc_yml]
- p_f="#{v}/#{f}"
- if FileTest.exist?(p_f)
- require 'yaml'
- @@sisurc_path=v
- @@rc=YAML::load(File::open(p_f))
- break
- end
- unless @@rc
- f='sisurc.yaml'
- p_f="#{v}/#{f}"
- if FileTest.exist?(p_f)
- require 'yaml'
- @@sisurc_path=v
- @@rc=YAML::load(File::open(p_f))
- 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:'
- if @markup_dir_changed_
- @ad_path=[
- "#{$sisu_document_markup_directory_base_fixed_path}/.sisu/#{SiSU_is[:version_dir]}/skin/yml",
- "#{$sisu_document_markup_directory_base_fixed_path}/.sisu/skin/yml",
- "#{$sisu_document_markup_directory_base_fixed_path}/_sisu/#{SiSU_is[:version_dir]}/skin/yml",
- "#{$sisu_document_markup_directory_base_fixed_path}/_sisu/skin/yml",
- "#{@@home}/.sisu/#{SiSU_is[:version_dir]}/skin/yml",
- "#{@@home}/.sisu/skin/yml",
- "#{@@sisu_etc}/#{SiSU_is[:version_dir]}/skin/yml",
- "#{@@sisu_etc}/skin/yml",
- ]
- @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
- 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='')
- @fns=fns
- @sys=InfoSystem.instance
- get_init=SiSU_Env::GetInit.new
- @rc=get_init.sisu_yaml.rc
- @ad=get_init.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 default_language?
- if @rc \
- && defined? @rc['language_default']
- if (@rc['language_default'].is_a?(String)) \
- && (@rc['language_default'] =~/#{Px[:lng_lst_rgx]}/)
- @rc['language_default']
- else 'en'
- end
- else 'en'
- end
- end
- def mono_multi_lingual?
- if @rc \
- && defined? @rc['lingual']
- if (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/mono(?:lingual)?/)
- :mono
- elsif (@rc['lingual'].is_a?(String)) \
- && (@rc['lingual'] =~/multi(?:lingual)?/)
- :multi
- else :multi
- end
- else :multi
- end
- end
- def output_dir_structure
- def by?
- output_structure=:filename #set default output structure
- if @rc \
- && 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 #set default
- :language
- end
- else #set default
- :language
- 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
- 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)
- @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)
- "#{name}#{suffix}"
- end
- def lang(code)
- {
- 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'),
- }
- end
- end
- class SystemCall
- @@locale_flag=false
- def initialize(input='',output='',opt_or_cmd='')
- @input,@output=input,output
- (opt_or_cmd.is_a?(SiSU_Commandline::Options)) \
- ? (@cmd,@opt=opt_or_cmd.cmd,opt_or_cmd)
- : (@cmd,@opt=opt_or_cmd,nil) #cmd.is_a?(String)
- @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
- progs=['xetex','xelatex','pdflatex','pdfetex','pdftex']
- @pdfetex_flag=false
- @cmd ||=''
- @texpdf=nil
- progs.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=progs.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'
- 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: #{@texpdf}"
- 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
- puts "scp -Cr #{@input} #{@output}" if @cmd =~/[vVM]/
- puts "scp disabled"
- end
- def rsync(action='',chdir=nil)
- program='rsync'
- if program_found?(program)
- vb=if @cmd =~/q/; 'q'
- elsif @cmd =~/v/; 'v'
- else ''
- end
- cX=SiSU_Screen::Ansi.new(@cmd).cX
- msg=(@cmd =~/q/) ? '' : %{ && echo " #{cX.grey}OK: #{@input} -> #{@output}#{cX.off}"}
- amp=(@opt \
- && @opt.files.length > 1) \
- ? ''
- : ((@cmd =~/[vVM]/) ? '' : '&')
- rsync_cmd="rsync -az#{vb} #{action} #{@input} #{@output}"
- puts rsync_cmd if @cmd =~/[vVM]/
- dir_change,dir_return='',''
- if not chdir.nil? \
- && chdir != Dir.pwd
- dir_change=Dir.chdir(chdir)
- dir_return=Dir.pwd
- end
- dir_change #check
- system("
- #{rsync_cmd} #{msg} #{amp}
- ")
- 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
- 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] see constants.rb
- # 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!
- @init=SiSU_Env::GetInit.new
- @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?
- ''
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark('set output type, by: language, filetype or 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_v4(opt)
- #processing_path.processing
- # sisupod
- # doc/
- # manifest.txt
- # en/content.sst [file content]
- # fr/content.sst
- # _sisu
- # sisu_document_make
- # 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"
- #<< "#{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_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?
- if defined? @rc['html']['minitoc'] \
- and @rc['html']['minitoc'].is_a?(String)
- @rc['html']['minitoc']
- else false
- end
- end
- def manifest_minitoc?
- 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?
- 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?
- if (defined? @rc['omit']['minitoc'] \
- and not @rc['omit']['minitoc'].nil?) \
- or (listed?('minitoc'))
- :off
- else
- :na
- end
- end
- def manifest_minitoc?
- 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?
- 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?
- 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?
- 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?
- if (defined? @rc['omit']['segsubtoc'] \
- and not @rc['omit']['segsubtoc'].nil?) \
- or listed?('segsubtoc')
- :off
- else
- :na
- end
- end
- def html_right_pane?
- 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?
- 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
- 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
- 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.new.sisu_yaml.rc
- @ad=SiSU_Env::GetInit.new.ads
- @vz=SiSU_Viz::Defaults.new
- @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.new.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.new.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
- if search?
- else ''
- end
- end
- self
- end
- def widget_static
- @rc=SiSU_Env::GetInit.new.sisu_yaml.rc
- @vz=SiSU_Viz::Defaults.new
- @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+/
- 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.new.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
- if search?
- else ''
- end
- end
- self
- end
- def source_file_path
- file=@fns.gsub(/\.ssm(?:\.sst)?/,'.ssm.sst')
- 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
- # you may wish to check selected font against available fonts:
- # fc-list :outline -f "%{family}\n"
- # fc-list :lang=ja
- 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
- def cjk
- (defined? @rc['default']['texpdf_font_cjk']) \
- && (@rc['default']['texpdf_font_cjk']=~/\S{3,}/) \
- ? @rc['default']['texpdf_font_cjk']
- : 'IPAGothic' # 'IPAGothic' # 'IPAMincho' # 'TakaoMincho' # 'VL Gothic'
- end
- def cjk_zh
- (defined? @rc['default']['texpdf_font_cjk_zh']) \
- && (@rc['default']['texpdf_font_cjk_zh']=~/\S{3,}/) \
- ? @rc['default']['texpdf_font_cjk_zh']
- : 'IPAGothic'
- end
- def cjk_ja
- (defined? @rc['default']['texpdf_font_cjk_ja']) \
- && (@rc['default']['texpdf_font_cjk_ja']=~/\S{3,}/) \
- ? @rc['default']['texpdf_font_cjk_ja']
- : 'IPAGothic'
- end
- def cjk_ko
- (defined? @rc['default']['texpdf_font_cjk_ko']) \
- && (@rc['default']['texpdf_font_cjk_ko']=~/\S{3,}/) \
- ? @rc['default']['texpdf_font_cjk_ko']
- : 'IPAGothic'
- 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_array(fns)
- (fns !~/\.ssm.sst$/) \
- ? (IO.readlines(fns, mode: 'r:utf-8', cr_newline: true))
- : (IO.readlines("#{processing_path.composite_file}/#{fns}", mode: 'r:utf-8', cr_newline: true))
- end
- def read_source_file(fns)
- read_source_file_array(fns)
- end
- def read_source_file_string(fns)
- (fns !~/\.ssm.sst$/) \
- ? (IO.read(fns, mode: 'r:utf-8', cr_newline: true))
- : (IO.read("#{processing_path.composite_file}/#{fns}", mode: 'r:utf-8', cr_newline: true))
- end
- def source_file_processing_array(fns)
- read_source_file_string(fns).split(/\s*\n\s*\n/m)
- end
- def path #dir
- def home
- @sys.home
- end
- def sisurc_path
- GetInit.new.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
- @init.rc_path
- end
- def yamlrc
- GetInit.new.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+/
- pwd=Dir.pwd
- Dir.chdir(SiSU_Utils::Path.new.base_markup)
- man_path=@@man_path=File.expand_path(@rc['webserv']['path'])
- Dir.chdir(pwd)
- man_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
- 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
- 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]}"
- elsif FileTest.directory?("#{SiSU_Utils::Path.new.base_markup}/#{defaults[:image_stub]}")==true
- "#{SiSU_Utils::Path.new.base_markup}/#{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
- 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
- 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)
- (@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")
- 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(opt=nil)
- 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(opt=nil) #web url for local webserv (localhost, or hostname)
- http=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(opt)
- "#{http}#{webserv_host_base}:#{port.webserv_port_cgi(opt)}/#{@stub_pwd}"
- else "#{http}#{webserv_host_base}/#{@stub_pwd}"
- end
- end
- http=http.strip
- end
- def webserv_base_cgi(opt=nil) #web url for local webserv (localhost, or hostname)
- http=if opt.mod.inspect =~/--webserv-(?:cgi|db|search)[=-]["']?(\S+)["']+/
- m=$1
- (m=~/http\/\/:/) ? m : %{http://#{m}}
- elsif 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(opt)
- "#{http}#{@rc['webserv_cgi']['host']}:#{port.webserv_port_cgi(opt)}"
- else "#{http}#{@rc['webserv_cgi']['host']}"
- end
- else
- http=((webserv_host_base=~/https?:\/\//) ? '' : 'http://')
- if port.webserv_port_cgi(opt)
- "#{http}#{webserv_host_base}:#{port.webserv_port_cgi(opt)}"
- else "#{http}#{webserv_host_base}"
- end
- end
- http=http.strip
- 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(opt=nil) #sort this out, messy
- if opt.mod.inspect =~/--webserv-output[=-]["']?(\S+)["']+/
- m=$1
- (m=~/(?:http|file\/)\/\/:/) ? m : %{http://#{m}}
- else
- show_output_on=if defined? @rc['webserv_cgi']['show_output_on']
- @rc['webserv_cgi']['show_output_on']
- elsif defined? @rc['webserv_cgi']['file_links']
- @rc['webserv_cgi']['file_links']
- else ''
- end
- m=case show_output_on
- when /webserv_cgi/; url.webserv_base_cgi(opt)
- 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(opt)
- end
- end
- end
- def cgi_sample_search_form_name(opt=nil)
- if opt.mod.inspect =~/--(?:cgi-)?search-form-name[=-]["']?(\S+?\.cgi)/
- $1
- elsif not opt.mod.inspect =~/--db[=-]["']?sqlite/ \
- and defined? @rc['search'] \
- and defined? @rc['search']['sisu'] \
- and defined? @rc['search']['sisu']['action'] \
- and @rc['search']['sisu']['action'] =~/https?:\/\/\S+?\.cgi/
- /(?:https?:\/\/\S+?)\/([^\/]+?\.cgi)$/.match(@rc['search']['sisu']['action'])[1]
- else
- (opt.mod.inspect =~/--db[=-]["']?sqlite/) \
- ? "#{Db[:name_prefix_db]}sqlite.cgi" \
- : "#{Db[:name_prefix_db]}pgsql.cgi"
- end
- end
- def sample_search_form_title(organised_by=:language)
- title=if defined? @rc['search']['sisu']['title'] \
- and @rc['search']['sisu']['title'] =~/\S+/
- @rc['search']['sisu']['title']
- else %{SiSU (generated sample) search form}
- end
- title=title + " (content organised by #{organised_by})"
- 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
- 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(opt=nil)
- port=if opt \
- and opt.cmd.inspect=~/-F/ \
- and opt.mod.inspect=~/port=(\d+)/
- $1
- else
- port=if defined? @rc['webserv_cgi']['port']
- if @rc['webserv_cgi']['port'].nil? \
- and (defined? opt.mod \
- and not opt.mod.nil? \
- and opt.mod.inspect=~/webrick/)
- defaults[:webserv_port_cgi]
- elsif not @rc['webserv_cgi']['port'].nil?
- @rc['webserv_cgi']['port']
- else nil
- end
- else
- if (defined? opt.mod \
- and not opt.mod.nil? \
- and opt.mod.inspect=~/webrick/)
- defaults[:webserv_port_cgi]
- else nil
- end
- 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_is[: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)
- (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)
- 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.new.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')))
- ft=[]
- if @opt.act[:dal][:set]==:on
- @md=SiSU_Param::Parameters.new(@opt).get
- 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
- if @opt.act[:rsync][:set]==:on
- end
- 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 =~ /h/i
- 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 deletion(fn)
- if FileTest.file?(fn)==true
- File.delete(fn)
- tell=SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns, 'remove: ' + fn)
- tell.warn unless @opt.cmd =~/q/
- end
- end
- def remove_output
- if @opt.act[:maintenance][:set] == :on
- m=InfoFile.new(@opt.fnc)
- tell=SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns, 'remove maintenance files from: ' + @env.processing_path.dal)
- tell.warn unless @opt.cmd =~/q/
- deletion(m.marshal.dal_content)
- deletion(m.marshal.dal_idx_sst_rel_html_seg)
- deletion(m.dal_idx_sst_rel)
- deletion(m.dal_idx_html)
- deletion(m.dal_idx_xhtml)
- deletion(m.dal_metadata)
- deletion(m.dal_map_nametags)
- deletion(m.dal_map_ocn_htmlseg)
- deletion(m.html_tune)
- end
- md=SiSU_Param::Parameters.new(@opt).get
- f=SiSU_Env::FileOp.new(md)
- deletion(f.place_file.html_segtoc.dir)
- deletion(f.place_file.html_scroll.dir)
- deletion(f.place_file.html_book_index.dir)
- deletion(f.place_file.html_concordance.dir)
- deletion(f.place_file.epub.dir)
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_letter}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_letter}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_a4}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_a4}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_a5}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_a5}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_b5}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_l_b5}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_legal}")
- deletion("#{f.output_path.pdf.dir}/#{f.base_filename.pdf_p_legal}")
- deletion(f.place_file.odt.dir)
- deletion(f.place_file.xhtml.dir)
- deletion(f.place_file.xml_sax.dir)
- deletion(f.place_file.xml_dom.dir)
- deletion(f.place_file.info.dir)
- deletion(f.place_file.manpage.dir)
- deletion(f.place_file.sqlite_discrete.dir)
- deletion(f.place_file.txt.dir)
- deletion(f.place_file.hash_digest.dir)
- deletion(f.place_file.manifest.dir)
- deletion(f.place_file.qrcode_md.dir)
- deletion(f.place_file.qrcode_title.dir)
- deletion(f.place_file.src.dir)
- deletion(f.place_file.sisupod.dir)
- end
- self
- end
- end
- class InfoRemoteHost
- def initialize
- @rc=GetInit.new.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.new.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 rsync
- def document
- f=(@opt.act[:dal][:set]==:on) \
- ? SiSU_Env::FileOp.new(@md)
- : nil
- if f
- 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
- @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 <<=(@opt.dir_structure_by == :filename) \
- ? (f.output_path.pdf.rel + '/*.pdf')
- : (f.output_path.pdf.rel + '/' + @opt.fnb + '*.pdf')
- end
- if (@opt.act[:sqlite_discrete][:set]==:on \
- || @opt.cmd =~/^-[mqvVM]*R[mqvVM]*$/) \
- && FileTest.file?(f.place_file.sqlite_discrete.dir)
- inp << f.place_file.sqlite_discrete.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_system='','',''
- 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'
- 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
- end
- def site_harvest
- self.remote_host_base.each do |remote_conn|
- local=@source_path_harvest
- l_rel="#{@env.path.webserv}/#{@env.path.stub_pwd}"
- lng='en'
- if @env.output_dir_structure.by? == :language
- ldest="#{lng}/manifest"
- files="#{ldest}/authors.html #{ldest}/topics.html"
- elsif @env.output_dir_structure.by? == :filetype
- ldest="manifest"
- files="#{ldest}/authors.#{lng}.html #{ldest}/topics.#{lng}.html"
- elsif @env.output_dir_structure.by? == :filename
- files="#{l_rel}/authors.#{lng}.html #{l_rel}/topics.#{lng}.html"
- end
- remote="#{remote_conn[:name]}/#{@opt.base_stub}"
- if @opt.act[:harvest][:set] \
- && @opt.act[:rsync][:set]
- (@env.output_dir_structure.by? == :filename) \
- ? (SiSU_Env::SystemCall.new(files,remote).rsync)
- : (SiSU_Env::SystemCall.new(ldest,remote).rsync('--relative',l_rel))
- elsif @opt.cmd =~/U/
- puts "#{__FILE__} #{__LINE__}" if @opt.cmd =~/M/
- puts "rsync_harvest: #{local} -> #{remote}"
- else puts "permission not granted #{__FILE__} #{__LINE__}" if @opt.cmd =~/M/
- end
- end
- end
- def site_base #base site
- ldest='_sisu/*'
- l_rel="#{@env.path.webserv}/#{@env.path.stub_pwd}"
- image_sys="#{@env.path.webserv}/_sisu/image_sys"
- self.remote_host_base.each do |remote_conn|
- remote="#{remote_conn[:name]}/#{@env.path.stub_pwd}"
- remote_conf="#{remote_conn[:name]}/_sisu"
- SiSU_Env::SystemCall.new(image_sys,remote_conf).rsync
- SiSU_Env::SystemCall.new(ldest,remote).rsync('--relative',l_rel)
- 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
- end
- class InfoVersion <InfoEnv
- include Singleton
- require 'rbconfig'
- require 'yaml'
- @@lib_path=nil
- def get_version
- @version={}
- @pwd=ENV['PWD']
- yst_ver=SiSU_is[:version_info_path] \
- ? SiSU_is[:version_info_path]
- : "#{defaults[:sisu_share]}/#{SiSU_is[: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[:install_method]=if SiSU_is[:run_from]==:gem_install
- spec = Gem::Specification.find_by_name("sisu")
- gem_root = spec.gem_dir
- (File.dirname(__FILE__.gsub(/\/lib\/sisu\/#{SiSU_is[:version_dir]}/,'')) == gem_root) \
- ? ' (ruby gem install)' : ''
- else ''
- end
- @version
- end
- def rbversion
- %x{ruby -v}.strip
- end
- end
- class InfoAbout
- def initialize(color='')
- @color=color
- end
- def sisu_version
- version=SiSU_Env::InfoVersion.instance.get_version
- rb_ver=SiSU_Env::InfoVersion.instance.rbversion
- if version[:version]
- opt_cmd=if defined? @color.cmd \
- and @color.cmd =~/[ck]/
- @color.cmd
- else '-v'
- end
- SiSU_Screen::Ansi.new(opt_cmd,version[:project],version[:version],version[:date_stamp],version[:date],version[:install_method],rb_ver).version
- else puts 'SiSU (version information not available)'
- end
- end
- def sisu_about
- puts <<-WOK
- sisu: documents; markup, structuring, publishing in multiple standard formats, & search
- most (not all) useful commands (are made in a directory containing a sisu markup file &) take the form:
- sisu [action(s)] [filename(s)]
- where filename refers to a valid sisu marked up file, e.g.:
- cd /usr/share/doc/sisu/markup-samples/sisu_manual
- sisu --html --verbose sisu_commands.sst
- sisu --txt --html --epub --odt --pdf --sqlite --manpage --texinfo --concordance --qrcode --verbose sisu.ssm
- cd -
- See output produced, or see man pages: man sisu
- <http://www.sisudoc.org/> <http://www.jus.uio.no/sisu/>
- WOK
- 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
- @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.new.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
- (defined? @md.make) \
- ? @md.make
- : nil
- 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 doc_rc.is_a?(Method) \
- and defined? doc_rc.ocn? \
- and doc_rc.toc? ==: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 doc_rc.is_a?(Method) \
- and defined? doc_rc.toc? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.manifest? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.links_to_manifest? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.metadata? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.minitoc? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.manifest_minitoc? \
- and (doc_rc.manifest_minitoc? ==:off \
- || doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_minitoc? \
- and (doc_rc.html_minitoc? ==:off \
- || doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_top_band? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_navigation? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_navigation_bar? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_search_form? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_search_form? \
- and (doc_rc.html_search_form? ==:off \
- || doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.html_right_pane? \
- and doc_rc.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 doc_rc.is_a?(Method) \
- and defined? doc_rc.segsubtoc? \
- and doc_rc.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=@pwd=SiSU_Utils::Path.new.base_markup
- @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.new.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(opt=nil)
- if opt \
- and opt.mod.inspect =~/--db-user[=-]["']?(\S+)["']+/
- $1
- elsif opt \
- and opt.mod =~/--webserv[=-]webrick/
- @env.user
- else
- ((defined? @rc['db']['postgresql']['user']) \
- && @rc['db']['postgresql']['user']=~/\S+/) \
- ? @rc['db']['postgresql']['user']
- : @env.user
- end
- 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_discrete(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_discrete
- def db
- "#{@md.file.output_path.sqlite_discrete.dir}/#{@md.file.base_filename.sqlite_discrete}"
- end
- def dbi
- "DBI:SQLite3:#{sqlite_discrete.db}"
- end
- def sqlite3
- sqlite_discrete.db
- end
- def conn_dbi
- DBI.connect(sqlite_discrete.dbi)
- end
- def conn_sqlite3
- SQLite3::Database.new(sqlite_discrete.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
- 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
- make_file(path,filename)
- end
- def mkfile_pwd
- path=Dir.pwd
- filename=@fno
- 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=((output_dir_structure.by_filename?) \
- || (output_dir_structure.dump?)) \
- ? "#{output_path.html.dir}"
- : "#{output_path.html.dir}/#{@md.fnb}"
- make_path(pth)
- p_fn=place_file.html_seg_index.dir
- @@filename_html_index=File.new(p_fn,'w+')
- end
- def html_segtoc
- pth=((output_dir_structure.by_filename?) \
- || (output_dir_structure.dump?) \
- || (output_dir_structure.redirect?)) \
- ? "#{output_path.html.dir}"
- : "#{output_path.html.dir}/#{@md.fnb}"
- 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
- make_file(path,fn)
- end
- def xml_sax
- path=output_path.xml.dir
- make_path(path)
- fn=base_filename.xml_sax
- make_file(path,fn)
- end
- def xml_dom
- path=output_path.xml.dir
- make_path(path)
- fn=base_filename.xml_dom
- make_file(path,fn)
- end
- def manpage
- path=output_path.manpage.dir
- make_path(path)
- fn=base_filename.manpage
- make_file(path,fn)
- end
- def texinfo
- path=output_path.texinfo.dir
- make_path(path)
- fn=base_filename.texinfo
- make_file(path,fn)
- end
- def info
- path=output_path.texinfo.dir
- make_path(path)
- fn=base_filename.info
- make_file(path,fn)
- end
- def hash_digest
- path=output_path.hash_digest.dir
- make_path(path)
- fn=base_filename.hash_digest
- 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_discrete
- def dir
- output_path.sqlite_discrete.dir + '/' + base_filename.sqlite_discrete
- end
- def rel
- output_path.sqlite_discrete.rel + '/' + base_filename.sqlite_discrete
- 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 i18n(f)
- f=default_hash.merge(f)
- f[:lng] ||=@md.lang_code_insert
- f[:fn] + f[:lng] + f[:ft]
- end
- def default_hash
- {
- fn: @md.fnb,
- lng: @md.lang_code_insert,
- }
- end
- def default_hash_build(fh,sfx)
- if fh.is_a?(Hash)
- fh[:fn] ||=@md.fnb
- fh[:lng] ||= @md.lang_code_insert
- fh[:ft]=sfx
- fh
- else
- {
- fn: @md.fnb,
- lng: @md.lang_code_insert,
- ft: sfx,
- }
- end
- end
- def lang_code?(lng)
- (output_dir_structure.by_language_code?) \
- ? ''
- : (lng ||=@md.lang_code_insert)
- end
- def txt(fh=nil)
- fh=default_hash_build(fh,Sfx[:txt])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'plain',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def html_scroll(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'scroll',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def html_seg_index(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: 'index',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def html_segtoc(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fnh=if output_dir_structure.dump_or_redirect?
- {
- fn: fh[:fn] + '.toc',
- ft: fh[:ft],
- }
- else
- {
- fn: 'toc',
- ft: fh[:ft],
- lng: lang_code?(fh[:lng]),
- }
- end
- i18n(fnh)
- end
- def html_seg(fh)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'scroll',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def html_book_index(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: 'book_index',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def html_concordance(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.dump_or_redirect?
- @md.fnb + '.concordance' + ft
- else
- {
- fn: 'concordance',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def xhtml(fh=nil)
- fh=default_hash_build(fh,Sfx[:xhtml])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'scroll',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def epub(fh=nil)
- fh=default_hash_build(fh,Sfx[:epub])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def odt(fh=nil)
- fh=default_hash_build(fh,Sfx[:odt])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'opendocument',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def xml_sax(fh=nil)
- fh=default_hash_build(fh,Sfx[:xml_sax])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'scroll',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def xml_dom(fh=nil)
- fh=default_hash_build(fh,Sfx[:xml_dom])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'scroll',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def pdf_p(fh=nil)
- fh=default_hash_build(fh,Sfx[:pdf])
- fh[:lng]=lang_code?(fh[:lng])
- if output_dir_structure.by_filename?
- 'portrait' + fh[:lng] + '.'
- else
- fh[:fn] + '.portrait' + fh[:lng] + '.'
- end
- end
- def pdf_l(fh=nil)
- fh=default_hash_build(fh,Sfx[:pdf])
- fh[:lng]=lang_code?(fh[:lng])
- if output_dir_structure.by_filename?
- 'landscape' + fh[:lng] + '.'
- else
- fh[:fn] + '.landscape' + fh[:lng] + '.'
- end
- end
- def pdf_p_a4(fh=nil)
- pdf_p(fh) + @md.fn[:pdf_p_a4]
- end
- def pdf_p_a5(fh=nil)
- pdf_p(fh) + @md.fn[:pdf_p_a5]
- end
- def pdf_p_b5(fh=nil)
- pdf_p(fh) + @md.fn[:pdf_p_b5]
- end
- def pdf_p_letter(fh=nil)
- pdf_p(fh) + @md.fn[:pdf_p_letter]
- end
- def pdf_p_legal(fh=nil)
- pdf_p(fh) + @md.fn[:pdf_p_legal]
- end
- def pdf_l_a4(fh=nil)
- pdf_l(fh) + @md.fn[:pdf_l_a4]
- end
- def pdf_l_a5(fh=nil)
- pdf_l(fh) + @md.fn[:pdf_l_a5]
- end
- def pdf_l_b5(fh=nil)
- pdf_l(fh) + @md.fn[:pdf_l_b5]
- end
- def pdf_l_letter(fh=nil)
- pdf_l(fh) + @md.fn[:pdf_l_letter]
- end
- def pdf_l_legal(fh=nil)
- pdf_l(fh) + @md.fn[:pdf_l_legal]
- end
- def manpage(fh=nil)
- fh=default_hash_build(fh,Sfx[:manpage])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def info(fh=nil)
- fh=default_hash_build(fh,Sfx[:info])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def texinfo(fh=nil)
- fh=default_hash_build(fh,Sfx[:texinfo])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def sqlite_discrete(fh=nil)
- fh=default_hash_build(fh,Sfx[:sql])
- fh[:lng]=lang_code?(fh[:lng])
- fnh={
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- i18n(fnh)
- end
- def hash_digest(fh=nil)
- fh=default_hash_build(fh,Sfx[:txt])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_language_code?
- {
- fn: fh[:fn] + '.hash_digest',
- ft: fh[:ft],
- }
- elsif output_dir_structure.by_filetype?
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: 'digest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def sitemap(fh=nil)
- fh=default_hash_build(fh,Sfx[:xml])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_language_code?
- {
- fn: fh[:fn] + '.sitemap',
- ft: fh[:ft],
- }
- elsif output_dir_structure.by_filetype?
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: 'sitemap',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def qrcode_title(fh=nil)
- fh=default_hash_build(fh,'.title.png')
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'sisu_manifest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def qrcode_md #check name below
- fh=default_hash_build(fh,'.md.png')
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'sisu_manifest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def manifest_txt(fh=nil)
- fh=default_hash_build(fh,Sfx[:txt])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.by_filename?
- {
- fn: 'sisu_manifest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- end
- def manifest(fh=nil)
- fh=default_hash_build(fh,Sfx[:html])
- fh[:lng]=lang_code?(fh[:lng])
- fnh=if output_dir_structure.dump_or_redirect?
- {
- fn: fh[:fn] + '.manifest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- elsif output_dir_structure.by_filename?
- {
- fn: 'sisu_manifest',
- ft: fh[:ft],
- lng: fh[:lng],
- }
- else
- {
- fn: fh[:fn],
- ft: fh[:ft],
- lng: fh[:lng],
- }
- end
- i18n(fnh)
- 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}"
- 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_discrete
- 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 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
- 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 FilenameLanguageCodeInsert
- def initialize(opt,lng=nil)
- @opt,@lng=opt,lng
- @opt=opt
- @lng=lng ||=@opt.lng
- end
- def language_code_insert
- if @opt.dir_structure_by ==:language \
- or ((@opt.dir_structure_by ==:filetype \
- || @opt.dir_structure_by ==:filename) \
- and (@opt.lingual ==:mono \
- && @lng == @opt.act[:default_language][:code]))
- ''
- elsif (@opt.dir_structure_by ==:filetype \
- || @opt.dir_structure_by ==:filename) \
- and not @opt.lingual ==:mono
- ".#{@lng}"
- else
- ".#{@lng}"
- end
- 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_cover_image
- filename_index="#{@pth}/#{Ep[:d_oebps]}/cover_image.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)
- 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 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- stylesheet="#{@file.path_rel_links.html_scroll_css}#{@env.path.style}/#{@css.html}"
- %{ <link rel="stylesheet" href="#{stylesheet}" type="text/css" />}
- end
- def html_seg
- stylesheet="#{@file.path_rel_links.html_seg_css}#{@env.path.style}/#{@css.html}"
- %{ <link rel="stylesheet" href="#{stylesheet}" type="text/css" />}
- end
- def html_tables
- stylesheet="#{@file.path_rel_links.html_seg_css}#{@env.path.style}/#{@css.html}"
- %{ <link rel="stylesheet" href="#{stylesheet}" 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
- stylesheet="#{@file.path_rel_links.xhtml_css}#{@env.path.style}/#{@css.xhtml}"
- %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>}
- end
- def xml_sax
- stylesheet="#{@file.path_rel_links.xml_css}#{@env.path.style}/#{@css.xml_sax}"
- %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>}
- end
- def xml_dom
- stylesheet="#{@file.path_rel_links.xml_css}#{@env.path.style}/#{@css.xml_dom}"
- %{<?xml-stylesheet type="text/css" href="#{stylesheet}"?>}
- end
- end
- class CreateSite < InfoEnv
- require_relative 'css' # css.rb
- include SiSU_Style
- def initialize(cmd)
- @cmd=cmd
- @env=SiSU_Env::InfoEnv.new
- @init=SiSU_Env::GetInit.new
- @home,@pwd=ENV['HOME'],ENV['PWD'] #@pwd=Dir.pwd
- @rc=GetInit.new.sisu_yaml.rc
- @vz=SiSU_Viz::Defaults.new
- @vz_home=SiSU_Viz::Home.new
- end
- def create_default_sisu_homepage(action=:none)
- if action==:none
- puts %{ place your homepages in directory:\n "#{@env.path.rc}/home/*.html"\n (no action taken)}
- else
- puts %{ place your homepages in directory:\n "#{@env.path.rc}/home/*.html"\n (in order to replace default sisu homepage)}
- filename_homepage="#{@env.path.webserv}/#{@env.path.stub_pwd}/index.html"
- filename_home_toc="#{@env.path.webserv}/#{@env.path.stub_pwd}/toc.html"
- file_homepage=File.new(filename_homepage,'w')
- file_home_toc=File.new(filename_home_toc,'w')
- file_homepage << @vz_home.homepage
- file_home_toc << @vz_home.homepage
- file_homepage.close
- file_home_toc.close
- end
- end
- def homepage
- home_pages_manually_created=Dir.glob("#{@env.path.rc}/home/*.html")
- 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.length > 0
- home_pages_manually_created.each do |homepage|
- FileUtils.cp(homepage,"#{@env.path.webserv}/#{@env.path.stub_pwd}")
- end
- else
- create_default_sisu_homepage(:none)
- #create_default_sisu_homepage(:default)
- 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=SiSU_is[:path_base_system_data] + '/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/v4/termsheet.rb b/lib/sisu/v4/termsheet.rb
deleted file mode 100644
index 83207018..00000000
--- a/lib/sisu/v4/termsheet.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/termsheet.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: SiSU information Structuring Universe, specialised pre-processing wrapper
- ** NOTE wrapper makes little sense without additional components, additional
- sample files must be provided - (saved till later as may confuse)
-
-=end
-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
-@c=0
-@cX=SiSU_Screen::Ansi.new('yes').cX
-@done << "\n#{@cX.blue_hi}#{@cX.black}Summary#{@cX.off*2}"
-def talent(termsheet,flag)
- @@info=nil
- @@info=termsheet.gsub(/(.+?)\.termsheet\.rb/,'../facility_data/\1.html')
- @env=SiSU_Env::InfoEnv.new
- @dir_fd="#{@env.path.output}/facility_data"
- FileUtils::mkdir_p(@dir_fd) unless FileTest.directory?(@dir_fd)==true
- html_output=[]
- case termsheet
- when /.+?\.(termsheet)\.rb$/
- @basename=termsheet[/(.+?)\.termsheet\.rb/, 1]
- @standard_form={}
- require termsheet
- include Termsheet
- @standard_form=Termsheet::StandardForms.new.standardforms
- puts %{\n#{@@cX.yellow_hi}#{@@cX.black}From#{@@cX.off*2}: #{@@cX.grey_hi}#{@@cX.black}#{@basename}.termsheet.rb#{@@cX.off*3}\n\n}
- @standard_form.each do |k,v|
- @c+=1
- require v
- puts %{\n#{@@cX.blue_hi}#{@@cX.black}Producing the following#{@@cX.off*2}: #{@@cX.green}#{@basename}.#{k}#{@@cX.off}\n\n}
- @done << %{\n\t#{@@cX.grey}Documents generated#{@@cX.off}: #{@@cX.cyan}#{@basename}.#{k}#{@@cX.off}\n}
- @used << %{\n\t#{@@cX.grey}Using#{@@cX.off}: #{@@cX.ruby}#{v}#{@@cX.off}\n}
- html_output=<<WOK
-<br /><a href="../#{@basename}.#{k}/landscape.pdf">
-<img border="0" width="18" height="15" src="../_sisu/image/b_pdf.png" alt="pdf landscape"></a>&nbsp;
-<a href="../#{@basename}.#{k}/portrait.pdf">
-<img border="0" width="15" height="18" src="../_sisu/image/b_pdf.png" alt="pdf portrait"></a>&nbsp;
-<a href="../#{@basename}.#{k}/sisu_manifest.html">#{@basename}.#{k}.sisu_manifest.html</a>
-WOK
- @html_output << html_output
- @txt_input << %{\n\tForm #{@c}: <url:#{Dir.pwd}/#{v}>\n\t |#{Dir.pwd}/#{v}|@|^|\n}
- @txt_output << %{\n\t#{k}: |../#{@basename}.#{k}/sisu_manifest.html|@|^|\n}
- @report_file_i=File.new("#{@dir_fd}/#{@basename}.txt",'w+')
- @report_file_o=File.new("#{@dir_fd}/#{@basename}.html",'w+')
- @filename_new=File.new("#{@basename}.#{k}.sst",'w+')
- @do << %{#{k}}
- @filename_new << @document
- # "require v" pulls in the composite @document
- # "termsheet" having all the variables required to complete the standard form @document
- @filename_new.close
- end
- @do.each do |x|
- system %{sisu -Nhwpo #{@basename}.#{x}.sst\n}
- end
- else print "not processed --> ", termsheet, "\n"
- end
- @done << %{\n\t#{@@cX.green}Summary:#{@@cX.off} #{@@cX.blue}#{@env.path.output}/facility_data/#{@basename}.html#{@@cX.off}\n}
- @done << %{\n\t#{@@cX.grey}From details provided in#{@@cX.off}: #{@@cX.green}#{termsheet}#{@@cX.off}\n}
- terms=%{\nTermsheet: <url:#{Dir.pwd}/#{termsheet}>\n |#{Dir.pwd}/#{termsheet}|@|^|\n}
- @report_file_i << "<url:all.txt>\n|all.txt|@|^|\n" << terms << "\nForms:\n" << @txt_input << "\nOutput Files\n" << @txt_output
- @report_file_o << %{<a href="toc.html">^</a><br />\n} << @html_output
- @@report << @done << @used << "\n"
- @done,@used=[],[]
-end
-require_relative 'param' # param.rb
-@argv=$*
-@proc="#{@argv[0].to_s}"
-if @proc =~ /^-?[wft]/
- @argv.shift
- @argv.each do |termsheet|
- talent(termsheet,@proc)
- end
-end
-@env=SiSU_Env::InfoEnv.new
-@dir_fd="#{@env.path.output}/facility_data"
-@url="#{@env.url.webserv}/facility_data"
-@@report << %{\n#{@@cX.grey}See#{@@cX.off}: #{@@cX.blue}#{@dir_fd}/all.txt\t#{@dir_fd}/toc.html\t#{@dir_fd}/#{@@cX.off}\n\n#{@@cX.grey}See#{@@cX.off}: #{@@cX.blue}#{@url}/all.txt\t#{@url}/toc.html\t#{@url}/#{@@cX.off}\n\n}
-puts @@report
-File.unlink("#{@dir_fd}/all.txt") if FileTest.file?("#{@dir_fd}/all.txt")
-File.unlink("#{@dir_fd}/toc.html") if FileTest.file?("#{@dir_fd}/toc.html")
-summary_file=File.new("#{@dir_fd}/all.txt",'w+')
-summary_html=File.new("#{@dir_fd}/toc.html",'w+')
-ls_txt=%x{ls #{@dir_fd}/*.txt}
-report_thlnk=[]
-ls_txt.scan(/.+/)
-ls_txt.each {|x| report_thlnk << x.gsub!(/#{@dir_fd}\/(.+)/,"<url:\\1>\n|\\1|@|^|")}
-report_thlnk.join("\n")
-ls_html=%x{ls #{@dir_fd}/*.html}
-report_html=[]
-ls_html.split(/.+/)
-ls_html.each {|x| report_html << x.gsub!(/#{@dir_fd}\/(.+)/,'<a href="\1">\1</a><br />')}
-report_html.join("\n")
-summary_file << "#{report_thlnk}"
-summary_html << "#{report_html}"
-__END__
-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/lib/sisu/v4/texinfo.rb b/lib/sisu/v4/texinfo.rb
deleted file mode 100644
index f48ecebe..00000000
--- a/lib/sisu/v4/texinfo.rb
+++ /dev/null
@@ -1,419 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/texinfo.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: texinfo processing
-
-=end
-module SiSU_TexInfo
- 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_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
- @@column_instruct,@@tex_line_mode,@@tex_word_mode,@@start_table,@@line_mode='','','','',''
- @@n,@@copyright,@@tableheader=nil,nil,nil
- @@tex_col_w=[]
- @@tex_pattern_margin_number="\\\\marginpar.+?\s+"
- class Source
- include SiSU_Param
- include SiSU_Viz
- include SiSU_TexInfo
- def initialize(opt)
- @opt=opt
- @md=SiSU_Param::Parameters.new(@opt).get
- @env=SiSU_Env::InfoEnv.new(@opt.fns)
- @vz=SiSU_Viz::Defaults.new
- end
- def directories
- begin
- case @opt.fns
- when /\.(?:-|ssm\.)?sst$/
- Dir.mkdir(@env.path.output) unless FileTest.directory?("#{@env.path.output}")
- 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
- ensure
- end
- end
- def read
- song
- end
- def song
- begin
- 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}"
- @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
- @md=SiSU_Param::Parameters.new(@opt).get
- directories
- @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 if @opt.cmd =~/[vVM]/
- else
- tex_array=IO.readlines(@opt.fns,'')
- SiSU_Metaverse.songsheet(tex_array)
- end
- tex_array=@@tuned_file
- TeXinfoMake.new(@md,tex_array).songsheet
- tex_array=''
- rescue; STDERR.puts SiSU_Screen::Ansi.new(@opt.cmd,$!,$@).rescue
- ensure
- end
- end
- end
- class TeXinfoMake
- include SiSU_Param
- 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::InfoEnv.new(@md.fns)
- @vz=SiSU_Viz::Defaults.new
- @f=SiSU_Env::FileOp.new(@md)
- end
- def songsheet
- begin
- 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 #%
- place_info
- rescue; STDERR.puts SiSU_Screen::Ansi.new(@md.opt.cmd,$!,$@).rescue
- ensure
- end
- end
- 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=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_new
- end
- def endnote(data)
- data_new=[]
- data.each do |dob|
- 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
- data_new << dob
- end
- data_new
- end
- def poem
- data,data_new=@data,[]
- @tex_file=[]
- @@counting=0
- data.each do |dob|
- if dob.is ==:code
- @@flag['code']=true
- @@counting=1
- end
- if dob.is ==:verse
- @@flag['poem']=1
- end
- if @@flag['code']
- if @@flag['code'] \
- && (dob.obj =~ /#{Mx[:gr_o]}code[-_](?:end|close)#{Mx[:gr_c]}/) #watch change not tested 200501 #fix
- @@flag['code']=false
- end
- if @@flag['code'] \
- && (dob.obj =~ /\S/)
- sub_array=dob.obj.dup
- @@line_mode=sub_array.scan(/.+/)
- Tune.code_lines(@@line_mode)
- dob.obj=@@line_mode.join
- end
- elsif @@flag['poem']==1
- if @@flag['poem']==1 \
- && (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 \
- && (dob.obj =~ /\S/)
- sub_array=dob.obj.dup
- @@line_mode=sub_array.scan(/.+/)
- Tune.code_lines(@@line_mode)
- dob.obj=@@line_mode.join
- end
- end
- @tex_file << dob.obj
- data_new << dob
- end
- data_new
- end
- def code_lines
- data,data_new=@data,[]
- data.each do |line|
- 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')
- end
- end
- data_new << line
- end
- end
- def tables
- 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_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_new=[]
- @tex_file=[]
- @row_break='\\\\\\'
- @break_page="#{@row_break}\n#{@row_break} \n"
- @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 \
- && (dob.ln.to_s =~ /^[1-3]$/)
- toc=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
- texinfo_menu << toc.menu
- 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
- n_menu+=1
- @submenu[n_menu]=[]
- when 5
- n_submenu+=1
- @subsubmenu[n_menu]=[]
- @submenu[n_menu] << toc.menu
- when 6
- n_submenu+=1
- @subsubmenu[n_submenu]=[]
- @subsubmenu[n_submenu] << toc.menu
- end
- else
- dob.obj=dob.obj.gsub(/\s*(?:<:?br>|<br \/>)\s*/,"\n\n")
- end
- data_new << dob
- end
- data=data_new
- texinfo_menu=texinfo_menu.compact
- texinfo_menu << "* Dublin Core::"
- @tex_file << texinfo_menu
- @tex_file << "* Index::\n" +
- "@end menu\n\n" +
- "@c %% 5\n\n"
- n_menu,n_submenu=0,0
- @@do_submenu,@@do_subsubmenu=1,1
- data_new=[]
- data.each do |dob|
- unless defined? dob.ln and dob.ln == (5..6)
- mono=SiSU_TexInfoFormat::Texinfo.new(@md,dob)
- end
- if dob.is==:heading
- case dob.ln
- when 1; dob=mono.level1
- when 2; dob=mono.level2
- when 3; dob=mono.level3
- when 4;
- @@n4_txt=dob.obj
- dob=mono.level4
- n_menu+=1
- @@do_submenu,@@do_subsubmenu=1,1
- when 5;
- n_submenu+=1
- @@do_subsubmenu=1
- @@n5_txt=dob.obj
- if @@do_submenu==1
- menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu])
- dob.obj="#{menu.submenu}#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n4_txt).level5.obj}"
- @@do_submenu=0
- else dob.obj="#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n4_txt).level5.obj}"
- end
- when 6;
- if @@do_submenu==1
- menu=SiSU_TexInfoFormat::TeXinfoTxt.new(@md,dob,@submenu[n_menu])
- dob.obj="#{menu.submenu}#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n5_txt).level6.obj}"
- dob.obj="#{menu.subsubmenu}#{mono.level6.obj}"
- @@do_subsubmenu=0
- else dob.obj="#{SiSU_TexInfoFormat::Texinfo.new(@md,dob,@@n5_txt).level6.obj}"
- end
- end
- else
- if dob.obj !~/\S/
- dob.obj=nil
- else
- if dob.is==:para \
- && (dob.obj !~/##{dob.ocn}/)
- dob.obj="#{dob.obj} ##{dob.ocn}\n\n"
- end
- end
- end
- #%case with endnotes
- dob.obj=dob.obj.gsub(/\s*[0-8]\\+(\S+)?\s+/,' ') if dob.obj
- data_new << dob
- end
- [data_new, @tex_file]
- end
- def number_titles
- data,data_new=@data,[]
- @tex_file=[]
- data.each do |dob|
- 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=dob.obj.gsub(/<!h-(.+?)-!>/,'\1 ')
- end
- end
- @tex_file << dob.obj
- end
- data_new << dob
- end
- 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)
- 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=/(.+?)\.((?:-|ssm\.)?sst)$/.match(@md.fns)
- fnb,sfx=m[1],m[2]
- pwd=Dir.pwd
- case sfx
- when /(?:-|ssm\.)?sst$/
- @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
-__END__
diff --git a/lib/sisu/v4/texinfo_format.rb b/lib/sisu/v4/texinfo_format.rb
deleted file mode 100644
index 7bfa4e39..00000000
--- a/lib/sisu/v4/texinfo_format.rb
+++ /dev/null
@@ -1,544 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/texinfo_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: texinfo formatting template
-
-=end
-module SiSU_TexInfoFormat
- @@table_pg_break_counter=1
- require_relative 'param' # param.rb
- include SiSU_Param
- include SiSU_Viz
- class Texinfo
- @@tex_1='\\\\~' #?? debug
- @@tabular="{tabular}"
- @@tex_pattern_margin_number="\\\\marginpar.+?\s+"
- def initialize(md,dob=nil,up='')
- @md,@dob,@up=md,dob,up
- if dob.is_a?(Hash)
- p dob.class
- p caller
- elsif dob.is_a?(String)
- p dob.class
- p caller
- end
- @vz=SiSU_Viz::Defaults.new
- end
- def head
- t=Time.now
- year=t.year
- title=spec_char(@md.title.full)
- 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} ").
- gsub(/\$/,"\\$").
- gsub(/[,]\s*/,' - ')
- subtitle="\n@subtitle #{subtitle}\n"
- end
- subtitle ||=''
- author=@md.author if @md.author
- author ||=''
- author=author.gsub(/[\*]/,'') #if author
- SiSU_Env::InfoVersion.instance.get_version
- head =<<WOK
-\\input texinfo @c -*-texinfo-*-
-@comment %**start of header
-@setfilename #{@md.fnb}.info
-@settitle #{title}
-@syncodeindex pg cp
-@comment %**end of header
-@c %% 2
-@copying
-SiSU texinfo of #{title}
-
-Copyright @copyright{} #{year} #{author}.
-
-@quotation
-Copyright #{author}, generated by ``SiSU''
-@end quotation
-@end copying
-
-@dircategory SiSU Texinfo
-@direntry
-* sisu: SiSU texinfo file.
-@end direntry
-WOK
- if @md.title.sub
- titlepage=<<WOK
-@c %% 3
-@titlepage
-@title #{title} #{subtitle}
-@author #{author}
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-@contents
-WOK
- else
- titlepage=<<WOK
-@c %% 3
-@titlepage
-@title #{title}
-@author #{author}
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-WOK
- end
- "#{head}#{titlepage}"
- end
- def topnode(txt)
- txt=spec_char(txt)
- 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" +
- "@top #{txt}\n\n" +
- "@insertcopying\n" +
- "@end ifnottex\n\n" +
- "@menu\n"
- end
- def dublincore
- if defined? @md.title.full \
- and @md.title.full=~/\S+/
- full_title=spec_char(@md.title.full)
- end
- if defined? @md.creator.author \
- and @md.creator.author=~/\S+/
- author=spec_char(@md.creator.author)
- end
- if defined? @md.publisher \
- and @md.publisher=~/\S+/
- publisher=spec_char(@md.publisher)
- end
- if defined? @md.creator.contributor \
- and @md.creator.contributor=~/\S+/
- contributor=spec_char(@md.contributor)
- end
- if defined? @md.date.published \
- and @md.date.published=~/\S+/
- date=spec_char(@md.date.published)
- end
- if defined? @md.date.created \
- and @md.date.created=~/\S+/
- date_created=spec_char(@md.date.created)
- end
- if defined? @md.date.issued \
- and @md.date.issued=~/\S+/
- date_issued=spec_char(@md.date.issued)
- end
- if defined? @md.date.available \
- and @md.date.available=~/\S+/
- date_available=spec_char(@md.date.available)
- end
- if defined? @md.date.valid \
- and @md.date.valid=~/\S+/
- date_valid=spec_char(@md.date.valid)
- end
- if defined? @md.date.modified \
- and @md.date.modified=~/\S+/
- date_modified=spec_char(@md.date.modified)
- end
- if defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/
- subject=spec_char(@md.classify.subject)
- end
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/
- description=spec_char(@md.description)
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/
- coverage=spec_char(@md.notes.coverage)
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/
- relation=spec_char(@md.notes.relation)
- end
- #type=spec_char(@md.type) if @md.type #dc
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/
- format=spec_char(@md.notes.format)
- end
- #if defined? @md.identifier.sisupod \
- #and @md.identifier.sisupod=~/\S+/
- # identifier=spec_char(@md.identifier.sisupod)
- #end
- if defined? @md.original.source \
- and @md.original.source=~/\S+/
- source=spec_char(@md.original.source)
- end
- if defined? @md.title.language \
- and @md.title.language=~/\S+/
- language=spec_char(@md.title.language)
- end
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/
- rights=spec_char(@md.rights.all)
- end
- rights=spec_char(@md.rights.all)
- full_title="Title: #{full_title}\n\n" if full_title #dc
- author="Author: #{author}\n\n" if author #dc
- subject="Subject: #{subject}\n\n" if subject #dc
- description="Description: #{description}\n\n" if description #dc
- publisher="Publisher: #{publisher}\n\n" if publisher #dc
- contributor="Contributor: #{contributor}\n\n" if contributor #dc
- date="Date: #{date}\n\n" if date #dc
- date_created="Date Created: #{date_created}\n\n" if date_created #dc
- date_issued="Date Issued: #{date_issued}\n\n" if date_issued #dc
- date_available="Date Available: #{date_available}\n\n" if date_available #dc
- date_valid="Date Valid: #{date_valid}\n\n" if date_valid #dc
- date_modified="Date Modified: #{date_modified}\n\n" if date_modified #dc
- format="Format: #{format}\n\n" if format #dc
- identifier="Identifier: #{identifier}\n\n" if identifier #watch #dc
- source="Source: #{source}\n\n" if source #dc
- language="Language: #{language}\n\n" if language #dc
- relation="Relation: #{relation}\n\n" if relation #dc
- coverage="Coverage: #{coverage}\n\n" if coverage #dc
- rights="Rights: #{rights}\n\n" if rights #dc
- <<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
- <<WOK
-@c %% 6
-@node Index
-@unnumbered Index
-@printindex cp
-
-@bye
-WOK
- end
- def clean(dob)
- if dob.is==:heading \
- and dob.obj !~/##{dob.ocn}/
- dob.obj="#{dob.obj} ##{dob.ocn}"
- end
- dob.obj=dob.obj.gsub(/\n/m,' ').
- gsub(/<:#>/,'').
- gsub(/,\s+/,' - ').
- strip
- dob
- end
- def menu
- dob=clean(@dob)
- m=dob.obj.gsub(/[:,]\s*/,' - ').
- gsub(/@footnote\{.+?\}\s+/,'')
- m="* #{m}::"
- end
- def level_common
- dob=clean(@dob)
- nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'').
- gsub(/: \s*/,' - ')
- dob.obj="@node #{nd}\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n\n"
- dob
- end
- def level_sub(up)
- dob=clean(@dob)
- nd=dob.obj.gsub(/@footnote\{.+?\}\s+/,'').
- gsub(/: \s*/,' - ')
- dob.obj="@node #{nd}, #{up}\n@comment node-name, up\n@unnumbered #{nd}\n@cindex chapter, #{nd}\n\n"
- dob
- end
- def level1
- level_common
- end
- def level2
- level_common
- end
- def level3
- level_common
- end
- def level4
- level_common
- end
- def level5
- level_sub(@up)
- end
- def level6
- level_sub(@up)
- end
- def spec_char(txt) # special characters
- 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(/(?:&nbsp;|#{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}"
- @row_break='\\\\\\'
- if @dob[/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c(\d+);(.+?)#{Mx[:gr_c]}/ui] #CHECK !> closure #fix
- no_of_cols,cols_width=$1,$2
- @@tableheader=1 if @dob =~ /#{Mx[:gr_o]}Th/i #fix
- @w=cols_width.split(/;\s+/)
- @@number_of_cols=no_of_cols
- @colW=[]
- @colW << '{'
- @w.each do |x|
- col_w=x.gsub(/.+/,'l\|') #unless x.nil?
- @colW << "#{col_w}" if col_w
- end
- @colW << '}'
- @colW=@colW.join
- @@start_table="\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
- "\\begin{longtable}[hb]#{@colW}\n"
- @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=@dob.obj.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/," #{@end_table}") #fix
- end
- @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=@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=@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
- end
- def scopedtable
- # some features related to headers have been incorporated in longtable
- # that are not included yet here, so until synced is broken on some
- # input files, work needs to be done if is to work as before
- @end_table="\\end{tabular}"
- @row_break='\\\\\\\\'
- @break_page="#{@row_break}\n#{@row_break} \n"
- if @dob[/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}\s+c(\d+);(.+?)#{Mx[:gr_c]}/ui] #fix
- cols_width=$2
- @w=cols_width.split(/;\s+/)
- @colW=[]
- @w.each do |x|
- col_w=((x.to_i*12)/100.00).to_s #unless x.nil?
- @colW << "p{#{col_w}cm}" if col_w
- end
- @@start_table="\\begin{tabular}{#{@colW}}\n"
- @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=@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
- if @@table_pg_break_counter==28 # taken from 34 ideal for portrait to 28 which suits landscape
- @dob =
- "\n\n#{@end_table} \n" +
- "#{@break_page}" +
- "#{@@start_table}\n"
- @@table_pg_break_counter=1
- else
- @dob.obj=@dob.obj.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}/u,'')
- @@table_pg_break_counter+=1
- @dob.obj=@dob.obj.gsub(/\<!f(.+?)!\>/,'')
- end
- end
- if @dob =~/#{Mx[:tc_p]}\d+?#{Mx[:tc_p]}(.+?)(?:#{Mx[:tc_p]}|!)/u
- @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::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::InfoEnv.new(@md.fns)
- width="100"
- width=@dob[/<:image.+?width=``(\d+)''.+?>/im,1]
- width=width.to_i*0.4
- @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=z.scan(/\S+/)[0] #image,w,x,y=z.scan(/\S+/)
- 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
- z=@dob[/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,1] # match operator for z \\ fragile !
- url=@dob[/((?:https?|file|ftp):\S+)/im,1]
- if @dob =~/\.(png|jpg|gif)/
- image=z.scan(/\S+/)[0] #image,w,x,y=z.scan(/\S+/)
- image=image.gsub(/\\/,'')
- width=200
- width=z[/w=(\d+)/im,1] if z =~/w=(\d+)/
- width=width.to_i*0.8
- width=400 if width > 400
- c=z[/``(.+?)''/im,1]
- caption="{\\\\\\\ \n\\begin{scriptsize}#{c}\\end{scriptsize}&}" if c
- end
- if image
- 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=@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 TeXinfoTxt
- def initialize(md,dob,txt)
- @md,@dob,@txt=md,dob,txt
- end
- def clean(dob,txt)
- if dob.is==:heading \
- and txt !~/##{dob.ocn}/
- txt="#{dob.obj} ##{dob.ocn}"
- end
- txt=txt.gsub(/<:#>/,'').strip
- end
- def submenu
- txt=@txt.join("\n")
- txt=clean(@dob,txt)
- txt="@menu\n#{txt}\n@end menu\n\n"
- txt=txt.gsub(/.+/m,"#{txt}")
- end
- def subsubmenu
- txt=@txt.join("\n")
- txt=clean(@dob,txt)
- txt="@menu\n#{txt}\n@end menu\n\n"
- txt=txt.gsub(/.+/m,"#{txt}")
- end
- end
-end
-__END__
-watch title, might need full_title
diff --git a/lib/sisu/v4/texpdf.rb b/lib/sisu/v4/texpdf.rb
deleted file mode 100644
index edefac31..00000000
--- a/lib/sisu/v4/texpdf.rb
+++ /dev/null
@@ -1,1064 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/texpdf.rb;hb=HEAD>
-
- * 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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]/
- @env.url.output_tell
- if @md.opt.act[:pdf_l][:set]==:on
- SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.program.pdf_viewer} #{@md.file.output_path.pdf.dir}/#{@md.file.base_filename.pdf_l}#{@md.papersize_array[0]}.pdf").flow
- end
- if @md.opt.act[:pdf_p][:set]==:on
- 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}#{@md.papersize_array[0]}.pdf").flow
- end
- 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 !!!
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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
- tex_fn_base=@texfilename.gsub(/\.tex$/,'')
- tell=SiSU_Screen::Ansi.new(@md.opt.cmd)
- if @md.opt.act[:pdf_p][:set]==:on
- SiSU_Screen::Ansi.new(@md.opt.cmd,"#{papersize} portrait ->").dark_grey_title_hi if @md.opt.cmd =~/[MVv]/
- cmd=SiSU_Env::SystemCall.new("#{tex_fn_base}.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 portrait
- end
- tell.p_off if @md.opt.cmd =~/[MVv]/
- end
- if @md.opt.act[:pdf_l][:set]==:on
- 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]/
- end
- pwd=Dir.pwd
- if @md.opt.act[:pdf_p][:set]==:on
- portrait_pdf="#{pwd}/#{tex_fn_base}.pdf"
- end
- if @md.opt.act[:pdf_l][:set]==:on
- landscape_pdf="#{pwd}/#{tex_fn_base}.landscape.pdf"
- end
- 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)
- cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX
- if @md.opt.act[:pdf_p][:set]==:on
- if FileTest.file?(portrait_pdf)
- FileUtils::cp(portrait_pdf,"#{@md.file.output_path.pdf.dir}/#{pdf_p}")
- FileUtils::rm(portrait_pdf)
- else
- STDERR.puts "#{cX.fuchsia}pdf file not generated#{cX.off} <#{cX.blue}#{portrait_pdf.gsub(/.+?([^\/]+?\.pdf)$/,'\1')}#{cX.off}> (check texlive dependencies)"
- STDERR.puts "#{__FILE__}:#{__LINE__} NOT FOUND: #{portrait_pdf}" if @md.opt.cmd.inspect =~/M/
- end
- end
- if @md.opt.act[:pdf_l][:set]==:on
- if FileTest.file?(landscape_pdf)
- FileUtils::cp(landscape_pdf,"#{@md.file.output_path.pdf.dir}/#{pdf_l}")
- FileUtils::rm(landscape_pdf)
- else
- STDERR.puts "#{cX.fuchsia}pdf file not generated#{cX.off} <#{cX.blue}#{landscape_pdf.gsub(/.+?([^\/]+?\.pdf)$/,'\1')}#{cX.off}> (check texlive dependencies)"
- STDERR.puts "#{__FILE__}:#{__LINE__} NOT FOUND: #{landscape_pdf}" if @md.opt.cmd.inspect =~/M/
- end
- 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
- 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 @md.opt.act[:pdf_p][:set]==:on \
- or @md.opt.act[:pdf_l][:set]==:on
- latex_do(texfile,ps)
- if @md.opt.act[:pdf_p][:set]==:on
- if File.exist?(texfile) \
- and File.size(texfile) > 0
- #@tex_f_no+=1
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark("\tzero file size #{@env.processing_path.tex}/#{texfile}")
- end
- end
- 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 @md.opt.act[:pdf_p][:set]==:on
- if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{pdf_p}")
- mklnk=((@md.file.output_dir_structure.by_language_code?) \
- || (@md.file.output_dir_structure.by_filetype?)) \
- ? "#{@md.fnb}.portrait.pdf"
- : 'portrait.pdf'
- 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
- end
- if @md.opt.act[:pdf_l][:set]==:on
- if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{pdf_l}")
- mklnk=((@md.file.output_dir_structure.by_language_code?) \
- || (@md.file.output_dir_structure.by_filetype?)) \
- ? "#{@md.fnb}.landscape.pdf"
- : 'landscape.pdf'
- 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
- 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location 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_Viz::Defaults.new
- @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern
- @brace_url=SiSU_Viz::Defaults.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
- txt_gen=if @md.opt.act[:pdf_l][:set]==:on \
- and @md.opt.act[:pdf_p][:set]==:on
- 'pdfTex portrait & landscape'
- elsif @md.opt.act[:pdf_l][:set]==:on
- 'pdfTex landscape'
- elsif @md.opt.act[:pdf_p][:set]==:on
- 'pdfTex portrait'
- else
- SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark('error: neither landscape nor portrait')
- end
- SiSU_Screen::Ansi.new(@md.opt.cmd,txt_gen).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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location 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_page_line]; dob.tmp=' \\ \hline \\ '
- 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)
- 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=[]
- 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|
- if @md.opt.act[:pdf_p][:set]==:on
- txt_obj={ txt: "#{home}: - #{title}", paper_size: ps, orientation: 'portrait' }
- orient_portrait=SiSU_TeX_Pdf::FormatHead.new(@md,txt_obj)
- @@tex_head[ps][:p]=orient_portrait.document_head_with_orientation(@codeblock_box)
- end
- if @md.opt.act[:pdf_l][:set]==:on
- txt_obj={ txt: "#{home}: - #{title}", paper_size: ps, orientation: 'landscape' }
- orient_landscape=SiSU_TeX_Pdf::FormatHead.new(@md,txt_obj)
- @@tex_head[ps][:l]=orient_landscape.document_head_with_orientation(@codeblock_box)
- end
- 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
- @copymark='' #check and remove as now is superflous
- x={}
- txt_obj={ title: @md.title.full }
- if @md.opt.act[:pdf_l][:set]==:on
- x[:l]=SiSU_TeX_Pdf::FormatTextObject.new(@md,txt_obj).title_landscape
- end
- if @md.opt.act[:pdf_p][:set]==:on
- x[:p]=SiSU_TeX_Pdf::FormatTextObject.new(@md,txt_obj).title_portrait
- end
- @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
- if defined? @md.make.cover_image \
- and not @md.make.cover_image.nil? \
- and @md.make.cover_image[:cover] =~/\S+/
- x={}
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- x[:l] =<<-WOK
-\\titlepic{\\includegraphics[width=0.3\\textwidth]{#{dir.path.image_source_include}/#{@md.make.cover_image[:cover]}}}
- WOK
- x[:p] =<<-WOK
-\\titlepic{\\includegraphics[width=0.6\\textwidth]{#{dir.path.image_source_include}/#{@md.make.cover_image[:cover]}}}
- WOK
- @tex_file << x
- x=nil
- end
- @tex_file << unless @md.fnb =~/^mail\s*$/ then @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
- if @md.opt.act[:pdf_l][:set]==:on
- x[:l] =<<-WOK
-#{@tex_ml.newpage('landscape')}
-\\pagestyle{fancy}
-#{toc}#{toc_pb[:l]}
-\\pagenumbering{arabic}
-#{@tex_ml.paraskip_normal}
-#{@tex_ml.newpage('landscape')}
- WOK
- end
- if @md.opt.act[:pdf_p][:set]==:on
- 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
- end
- @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)
- 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] or h[ps][:l])
- if @md.opt.act[:pdf_p][:set]==:on
- if h[ps][:p]
- h[ps][:p]=h[ps][:p].gsub(/[ ]+$/m,'').
- gsub(/\n\n\n+/m,"\n\n")
- end
- if h[ps][:p] !~/\A\s*\Z/
- fn[:portrait].puts h[ps][:p],"\n"
- end
- end
- if @md.opt.act[:pdf_l][:set]==:on
- if h[ps][:l]
- h[ps][:l]=h[ps][:l].gsub(/[ ]+$/m,'').
- gsub(/\n\n\n+/m,"\n\n")
- end
- if h[ps][:l] !~/\A\s*\Z/
- fn[:landscape].puts h[ps][:l],"\n"
- end
- end
- elsif (h[:p] or h[:l])
- if @md.opt.act[:pdf_p][:set]==:on
- if h[:p]
- h[:p]=h[:p].gsub(/[ ]+$/m,'').
- gsub(/\n\n\n+/m,"\n\n")
- end
- if h[:p] !~/\A\s*\Z/
- fn[:portrait].puts h[:p],"\n"
- end
- end
- if @md.opt.act[:pdf_l][:set]==:on
- if h[:l]
- h[:l]=h[:l].gsub(/[ ]+$/m,'').
- gsub(/\n\n\n+/m,"\n\n")
- end
- if h[:l] !~/\A\s*\Z/
- fn[:landscape].puts h[:l],"\n"
- end
- end
- else p "#{__FILE__}:#{__LINE__}" if @md.opt.cmd.inspect =~/M/
- end
- end
- def output(array)
- @array=array=array.flatten.compact
- fns=@md.fns.gsub(/~/,'-') #this is a sorry fix, but necessary as it appears latex programs like not ~
- @md.papersize_array.each do |ps|
- texfile_landscape=(@md.opt.act[:pdf_l][:set]==:on) \
- ? (File.new("#{@env.processing_path.tex}/#{fns}.#{ps}.landscape.tex",'w+'))
- : nil
- texfile_portrait=(@md.opt.act[:pdf_p][:set]==:on) \
- ? (File.new("#{@env.processing_path.tex}/#{fns}.#{ps}.tex",'w+'))
- : nil
- file={
- landscape: texfile_landscape,
- portrait: texfile_portrait
- }
- if @md.opt.act[:pdf_p][:set]==:on
- file[:portrait] << @@tex_head[ps][:p]
- end
- if @md.opt.act[:pdf_l][:set]==:on
- file[:landscape] << @@tex_head[ps][:l]
- end
- array.each do |morph|
- if morph.is_a?(String)
- #morph.gsub!(/^\s+/,'')
- if morph !~/\A\s*\Z/
- if @md.opt.act[:pdf_p][:set]==:on
- file[:portrait].puts morph,"\n"
- end
- if @md.opt.act[:pdf_l][:set]==:on
- file[:landscape].puts morph,"\n"
- end
- 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
- if @md.opt.act[:pdf_p][:set]==:on
- file[:portrait].puts morph.tmp,"\n"
- end
- if @md.opt.act[:pdf_l][:set]==:on
- file[:landscape].puts morph.tmp,"\n"
- end
- 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
- if @md.opt.act[:pdf_p][:set]==:on
- file[:portrait].close
- end
- if @md.opt.act[:pdf_l][:set]==:on
- file[:landscape].close
- end
- 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/v4/texpdf_format.rb b/lib/sisu/v4/texpdf_format.rb
deleted file mode 100644
index d87a457e..00000000
--- a/lib/sisu/v4/texpdf_format.rb
+++ /dev/null
@@ -1,1688 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/texpdf_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: LaTeX formatting template, unicode utf-8 version, used for pdf
-
-=end
-module SiSU_TeX_Pdf
- @@table_pg_break_counter=1
- include SiSU_Viz
- class BareUrls
- def initialize(md,dob=nil)
- @md,@dob=md,dob
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- end
- def bare_urls
- @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=@dob.tmp.gsub(/(^|[^\\])_/m,'\1\_'). #watch may not work
- gsub(/(https?:\/\/\S+?)([{]|[.,;)\]]?(?: |$))/m,
- '\begin{scriptsize}\url{\1}\end{scriptsize}\2')
- @dob
- end
- end
- class FormatTextObject
- require_relative 'defaults' # defaults.rb
- attr_accessor :string,:string1,:orientation,:url,:dir,:tex
- @@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 }
- }
- @@sys=SiSU_Env::SystemCall.new
- def initialize(md,dob=nil)
- @md,@dob=md,dob
- if defined? @md.image \
- and @md.image =~/center/
- @center_begin,@center_end='\begin{center}','\end{center}'
- else @center_begin,@center_end='',''
- end
- @start_table=''
- @tx=SiSU_Env::GetInit.new.tex
- @brace_rel=SiSU_Viz::Defaults.new.rel_decoration
- @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)
- 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=r.gsub(/#{Mx[:tc_p]}/mu,'&').
- gsub(/#{Mx[:tc_c]}/m,'\\\\\\').
- 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='\\\\\\'
- 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
- when /legal/i; @tx.legal.landscape.w #U.S. alternative
- when /book|b5/i; @tx.b5.landscape.w #book default - larger
- when /a5/i; @tx.a5.landscape.w
- else @tx.a4.landscape.w #default currently A4
- end
- textwidth=(tw.to_i/2) - 24
- colW=[]
- colW << '{'
- @dob.widths.each do |x|
- x=(x.to_i * textwidth)/100
- col_w=x.to_s # x.gsub(/.+/,'l\|') #unless x.nil?
- colW << "p{#{col_w}mm}" if col_w
- end
- colW << '}'
- colW=colW.join
- start_table="\n\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
- "\\begin{tiny}\n\\begin{longtable}#{colW}\n"
- rows=@dob.obj.split(/#{Mx[:br_nl]}/)
- if @dob.head_ #result imperfect, check on
- 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=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/
- if r=~/\<!f(.+?)!\>/ # not tested table footer if any
- tablefoot=$1
- 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_new.join #@dob[:dal].obj=rows.join
- ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}"
- else ''
- end
- end
- def longtable_portrait
- end_table='\end{longtable}'
- row_break='\\\\\\'
- 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
- when /legal/i; @tx.legal.portrait.w #U.S. alternative
- when /book|b5/i; @tx.b5.portrait.w #book default - larger
- when /a5/i; @tx.a5.portrait.w
- else @tx.a4.portrait.w #default currently A4
- end
- textwidth=tw.to_i - 20
- colW=[]
- colW << '{'
- @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
- end
- colW << '}'
- colW=colW.join
- start_table="\n\\setlength{\\LTleft}{0pt}\n\\setlength{\\LTright}{\\fill}\n" +
- "\\begin{tiny}\n\\begin{longtable}#{colW}\n"
- rows=@dob.obj.split(/#{Mx[:br_nl]}/)
- if @dob.head_
- 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=r.gsub(/$/," #{row_break}\n") unless r =~/#{row_break*2}$/
- if r=~/\<!f(.+?)!\>/ # not tested table footer if any
- tablefoot=$1
- 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_new.join #@dob[:dal].obj=rows.join
- ocn_display(@dob) + start_table + table + " #{end_table}\n\\end{tiny}"
- else ''
- end
- end
- def heading_major
- dob=@dob
- title=@md.title.full
- 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=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=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ').
- gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ')
- end
- dob.tmp=dob.tmp.gsub(/^(.*)\n?$/m,
- "#{clearp}\\part*{\\1}
-\\addcontentsline{toc}{section}{#{cont_ln}}
-\\markboth{#{title}}\n")
- dob
- end
- def level4
- dob=@dob
- 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=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=dob.tmp.gsub(/.+/m,'')
- end
- if dob.tmp =~/\\footnote/ #and dob =~/^[1-6]#{Tex[:tilde]}/ # removing footnotes from headings!
- cont_ln=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ').
- gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ')
- end
- dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m,"\\subsubsection*{\\1}
-\\addcontentsline{toc}{subsection}{#{cont_ln}}
-\\markright{#{title}}")
- dob
- end
- 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=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=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=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ').
- gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ')
- end
- dob.tmp=dob.tmp.gsub(/^(.*)?\n?$/m,
- "\\subsubsection*{\\1}
-\\addcontentsline{toc}{subsubsection}{#{cont_ln} \\\\
-}")
- dob
- end
- 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=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=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=cont_ln.gsub(/\s*\\footnote\[\d+\]\{%\n .+? \}\s*/,' ').
- gsub(/\s*\\Footnote[A]\{[*+]+\d*\}\{%\n .+? \}\s*/,' ')
- end
- 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'
- when /2/; '10mm'
- when /3/; '20mm'
- when /4/; '30mm'
- when /5/; '40mm'
- when /6/; '50mm'
- when /7/; '60mm'
- when /8/; '70mm'
- when /9/; '80mm'
- end
- "\\begin{ParagraphIndent}{#{indent}}#{@dob.tmp} \\end{ParagraphIndent}}"
- end
- def bullet
- blt=if @dob.indent
- indent=case @dob.indent
- when /1/; '0em'
- when /2/; '1.0em'
- when /3/; '2.0em'
- when /4/; '3.0em'
- when /5/; '4.0em'
- when /6/; '5.0em'
- when /7/; '6.0em'
- when /8/; '7.0em'
- when /9/; '8.0em'
- else '-1.0em'
- end
- "\\begin{Bullet}{#{indent}}$\\txtbullet$\\hspace{\\enspace}#{@dob.tmp}\\end{Bullet}"
- else
- "\\begin{Bullet}{-5mm}$\\txtbullet$\\hspace{\\enspace}#{@dob.tmp}\\end{Bullet}"
- end
- blt
- end
- def symbol_graphic
- 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_include}/#{image}")
- @txt.gsub!(/<:=\s*(\S+?)\s*>/,
- "\\includegraphics*[width=11pt]{#{dir.path.image_source_include}/c_\\1.png}")
- else
- 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 url_str_internal(str,idx=nil)
- map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags
- rgx_url_internal=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}#?\S+?#{Mx[:rel_c]}/m
- while 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
- link.gsub!(/&/,"#{Xx[:protect]}&")
- url="#{@env.url.root}/" + url
- str.sub!(/#{Mx[:lnk_o]}[^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+#{Mx[:lnk_c]}#{Mx[:rel_o]}:\S+?#{Mx[:rel_c]}/m,"#{@brace_rel.tex_open}\\href{#{url}}{#{link}}#{@brace_rel.tex_close}")
- end
- while 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
- link.gsub!(/&/,"#{Xx[:protect]}&")
- url.gsub!(/\\_/,'_')
- 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.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}
- str.sub!(rgx_url_internal,"#{link}")
- end
- #[keep] code that follows uses nametags directly, currently nametags converted to their ocn, related code: |texpdf.rb|@|hypertargets|
- #idx \
- #? (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=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
- while str =~rgx_url_generic
- if str=~rgx_url_generic
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
- z,url=regx_url.match(str).captures if str =~regx_url
- url=url.strip
- link=z.strip
- link.gsub!(/&/,"#{Xx[:protect]}&")
- str.sub!(rgx_url_generic,"#{@brace_rel.tex_open}\\href{#{url}}{#{link}}#{@brace_rel.tex_close}")
- str=str.gsub(/#{Xx[:protect]}/,'')
- str
- else str
- end
- str
- end
- str
- end
- def url_with_txt(dob)
- rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- while dob.tmp =~rgx_url_generic
- if dob.tmp=~rgx_url_generic
- if dob.tmp =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
- punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m.match(dob.tmp).captures.join
- else
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
- punctuate=''
- end
- z,url=regx_url.match(dob.tmp).captures if dob.tmp =~regx_url
- url=url.strip
- link=z.strip
- 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
- dob
- end
- dob
- end
- def urls_txt_and_images
- dob=@dob
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- @dm={
- 'a4'=> @tx.a4.landscape.img_px,
- 'letter'=> @tx.letter.landscape.img_px,
- 'legal'=> @tx.legal.landscape.img_px,
- 'b5'=> @tx.b5.landscape.img_px,
- 'a5'=> @tx.a5.landscape.img_px
- }
- images_hash={ }
- generic_rgx=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image\b)/m
- rgx_url_generic=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- #url_bare_rgx=/#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- url_image_rgx=/#{Mx[:lnk_o]}[a-zA-Z0-9_\\-]+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- image_rgx=/#{Mx[:lnk_o]}[a-zA-Z0-9_\\-]+\.(?:png|jpg|gif).+?#{Mx[:lnk_c]}image/m
- @md.papersize_array.each do |ps|
- images_hash[ps] = dob.tmp
- while images_hash[ps] =~generic_rgx
- if dob.tmp =~rgx_url_generic \
- and dob.tmp !~/\.(?:png|jpg|gif)|#{Mx[:lnk_c]}image\b/m
- dob=url_with_txt(dob)
- elsif images_hash[ps]=~generic_rgx
- if dob.tmp=~rgx_url_generic
- if images_hash[ps] =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
- punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/m.match(images_hash[ps]).captures.join
- else
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/m
- punctuate=''
- end
- z,url=regx_url.match(images_hash[ps]).captures if images_hash[ps] =~regx_url
- url=url.strip
- else
- if images_hash[ps] =~/#{Mx[:lnk_o]}(?:.+?)#{Mx[:lnk_c]}image\.[^'"\s]+?(?:[;.,]?(?:\s|$)|(?:\s|$))/m
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image\.[^'"\s]+?(?:[;.,]?(?:\s|$)|(?:\s|$))/m
- punctuate=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image\.[^'"\s]+?([;.,]?(?:\s|$))/m.match(images_hash[ps]).captures.join
- else
- regx_url=%r/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}image/m
- punctuate=''
- end
- z=regx_url.match(images_hash[ps])[1] if images_hash[ps] =~regx_url
- url=''
- end
- if images_hash[ps] =~/#{Mx[:lnk_o]}\s*\S+\.?(?:png|jpg|gif)/m \
- and images_hash[ps]=~/\s+\d+x\d+(\s+|\s*#{Mx[:lnk_c]})/m
- image=z.scan(/\S+/)[0] #image,x,y=z.scan(/\S+/)
- image.gsub!(/\\/,'')
- w=((z =~/\s(\d+)x\d*/) ? z[/\s(\d+)x\d*/,1] : 200)
- width={}
- width['a4'] = ((w.to_i > @dm['a4']) ? @dm['a4'] : w)
- width['letter'] = ((w.to_i > @dm['letter']) ? @dm['letter'] : w)
- width['legal'] = ((w.to_i > @dm['legal']) ? @dm['legal'] : w)
- width['a5'] = ((w.to_i > @dm['a5']) ? @dm['a5'] : w)
- width['b5'] = ((w.to_i > @dm['b5']) ? @dm['b5'] : w)
- c=z[/``(.+?)''/m,1]
- 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.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 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}}\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_include}/#{image}}#{caption}#{@center_end}")
- end
- images_hash[ps]
- 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}")
- 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_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_include_local}/#{image}}#{caption} #{@center_end}")
- end
- images_hash[ps]
- 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}}{\\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_include_remote}/#{image}}#{caption}#{@center_end}")
- end
- images_hash[ps]
- else
- 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]=''
- end
- images_hash[ps]
- end
- else
- link=z.strip #[/(.+?)\\/m,1]
- images_hash[ps]="\\href{#{url}}{#{link}}#{punctuate}" if images_hash[ps] =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/
- images_hash[ps]
- end
- else images_hash[ps]
- end
- images_hash[ps] #=ocn_display(dob) + images_hash[ps]
- end #while loop
- images_hash
- end
- use_images_hash={}
- images_hash.each do |k,t|
- use_images_hash[k]={ l: t, p: t}
- end
- dob.tmp=use_images_hash
- dob
- end
- def title
- title=SiSU_TeX_Pdf::SpecialCharacters.new(@md,@md.title.full).special_characters_safe
- "\n\\title{#{title}}"
- end
- def title_landscape
- title
- end
- def title_portrait
- title
- end
- end
- 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::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
- @ocn=t_o[:ocn] || nil
- @layout=t_o[:orientation] || nil
- else
- p t_o.class
- p caller
- end
- @tx=SiSU_Env::GetInit.new.tex
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- @tex2pdf=@@tex3pdf ||=SiSU_Env::SystemCall.new.tex2pdf_engine
- @ps=@txt if @txt=~/(?:a4|letter|legal|book|a5|b5)/i
- @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=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 }
- end
- def tex_head_encode
- 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
- texpdf_font_cjk=if @md.opt.lng =~/zh/ \
- and defined? @md.make.texpdf_font.cjk_zh \
- and not @md.make.texpdf_font.cjk_zh.nil? \
- and @md.make.texpdf_font.cjk_zh=~/\S{3,}/
- @md.make.texpdf_font.cjk_zh
- elsif @md.opt.lng =~/ja/ \
- and defined? @md.make.texpdf_font.cjk_ja \
- and not @md.make.texpdf_font.cjk_ja.nil? \
- and @md.make.texpdf_font.cjk_ja=~/\S{3,}/
- @md.make.texpdf_font.cjk_ja
- elsif @md.opt.lng =~/ko/ \
- and defined? @md.make.texpdf_font.cjk_ko \
- and not @md.make.texpdf_font.cjk_ko.nil? \
- and @md.make.texpdf_font.cjk_ko=~/\S{3,}/
- @md.make.texpdf_font.cjk_ko
- elsif @md.opt.lng =~/(?:zh|ja|ko)/ \
- and defined? @md.make.texpdf_font.cjk \
- and not @md.make.texpdf_font.cjk.nil? \
- and @md.make.texpdf_font.cjk=~/\S{3,}/
- @md.make.texpdf_font.cjk
- else
- case @md.opt.lng
- when /zh/; @env.font.texpdf.cjk_zh
- when /ja/; @env.font.texpdf.cjk_ja
- when /ko/; @env.font.texpdf.cjk_ko
- else @env.font.texpdf.cjk
- end
- end
- # you may wish to check selected font against available fonts:
- # fc-list :outline -f "%{family}\n"
- # fc-list :lang=ja
- case @tex2pdf
- when /xe/
- if @md.opt.lng =~/(?:zh|ja|ko)/
- <<-WOK
-\\usepackage{ucs, fontspec, xltxtra, xunicode, xeCJK}
-\\setmainCJKlanguage{#{tex_head_lang[:mainlang]}}
-\\setCJKmainfont{#{texpdf_font_cjk}}
-\\XeTeXlinebreaklocale "#{tex_head_lang[:mainlang]}"
-\\XeTeXlinebreakskip = 0pt plus 1pt
-\\setotherlanguage{#{tex_head_lang[:otherlang]}}
-\\setmainfont{#{texpdf_font}}
-\\setmonofont[Scale=0.85]{#{texpdf_font_mono}}
- WOK
- else
- <<-WOK
-\\usepackage{polyglossia, ucs, fontspec, xltxtra, xunicode}
-\\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
- end
- when /pdf/
- if @md.file_encoding =~ /iso-?8859/i #% iso8859
- <<-WOK
-% \\usepackage[latin1]{inputenc}
-\\usepackage{fontspec}
- WOK
- else #% utf-8 assumed
- <<-WOK
-\\usepackage{babel}
-\\usepackage{ucs}
-\\usepackage[utf8x]{inputenc}
- WOK
- end
- 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]
- lastdone="Last Generated on: #{Time.now}"
- rubyv="Ruby version: #{@md.ruby_version}"
- <<-WOK
-%% SiSU (Linux & Ruby - \"better ways\") LaTeX output
-%% #{generator}
-%% #{rubyv}
-%% LaTeX output
-%% #{lastdone}
-%% SiSU http://www.jus.uio.no/sisu
- WOK
- end
- def tex_head_paper_portrait(d)
- multicol=(@md.book_idx ? '\usepackage{multicol}' : '')
- <<-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{\\headsep}{#{d[:headsep]}}
-\\setlength{\\marginparsep}{#{d[:marginparsep]}}
-\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
-#{multicol}
- WOK
- end
- def tex_head_paper_landscape(d)
- <<-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{\\headsep}{#{d[:headsep]}}
-\\setlength{\\columnsep}{#{d[:columnsep]}}
-\\setlength{\\marginparsep}{#{d[:marginparsep]}}
-\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
- WOK
- end
- def tex_head_paper_portrait_dvi(d)
- <<-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{\\headsep}{#{d[:headsep]}}
-\\setlength{\\marginparsep}{#{d[:marginparsep]}}
-\\setlength{\\marginparwidth}{#{d[:marginparwidth]}}
- WOK
- end
- def tex_head_paper_dimensions
- d={}
- case @layout
- when /portrait/
- d[:papertype],d[:fontsize]='a4paper','11pt'
- d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='0mm','0mm','-12pt'
- d[:headheight],d[:headsep],d[:columnsep]='12pt','35pt',''
- d[:marginparsep],d[:marginparwidth]='4mm','8mm'
- case @ps #@md.papersize
- when /a4/i #European default, SiSU default
- d[:papertype],d[:fontsize]='a4paper','12pt'
- d[:textheight],d[:textwidth]=@tx.a4.portrait.h,@tx.a4.portrait.w
- when /letter/i #U.S. default
- d[:papertype],d[:fontsize]='letterpaper','12pt'
- d[:textheight],d[:textwidth]=@tx.letter.portrait.h,@tx.letter.portrait.w
- when /legal/i #U.S. alternative
- d[:papertype],d[:fontsize]='legalpaper','12pt'
- d[:textheight],d[:textwidth]=@tx.legal.portrait.h,@tx.legal.portrait.w
- when /book|b5/i #book default - larger
- d[:papertype],d[:fontsize]='b5paper','11pt'
- d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='-4mm','-4mm','-36pt'
- d[:headheight],d[:headsep],d[:columnsep]='12pt','20pt',''
- d[:textheight],d[:textwidth]=@tx.b5.portrait.h,@tx.b5.portrait.w
- when /a5/i
- d[:papertype],d[:fontsize]='a5paper','11pt'
- d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='-4mm','-4mm','-36pt'
- d[:headheight],d[:headsep],d[:columnsep]='11pt','12pt',''
- d[:marginparsep],d[:marginparwidth]='4mm','6mm'
- d[:textheight],d[:textwidth]=@tx.a5.portrait.h,@tx.a5.portrait.w
- else #default currently A4
- d[:papertype],d[:fontsize]='a4paper','12pt'
- d[:textheight],d[:textwidth]=@tx.a4.portrait.h,@tx.a4.portrait.w
- end
- when /landscape/
- d[:papertype],d[:fontsize]='a4paper','11pt'
- d[:oddsidemargin],d[:evensidemargin],d[:topmargin]='6mm','6mm','-12mm'
- d[:headheight],d[:headsep],d[:columnsep]='12pt','20pt','40pt'
- d[:marginparsep],d[:marginparwidth]='4mm','8mm'
- case @ps #@md.papersize
- when /a4/i #European default, SiSU default
- d[:papertype],d[:fontsize]='a4paper','11pt'
- d[:textheight],d[:textwidth]=@tx.a4.landscape.h,@tx.a4.landscape.w
- when /letter/i #U.S. default
- d[:papertype],d[:fontsize]='letterpaper','11pt'
- d[:textheight],d[:textwidth]=@tx.letter.landscape.h,@tx.letter.landscape.w
- when /legal/i #U.S. alternative
- d[:papertype],d[:fontsize],d[:columnsep]='legalpaper','11pt','48pt'
- d[:textheight],d[:textwidth]=@tx.legal.landscape.h,@tx.legal.landscape.w
- when /book|b5/i #book default - larger
- d[:papertype],d[:fontsize],d[:columnsep]='b5paper','11pt','35pt'
- d[:textheight],d[:textwidth]=@tx.b5.landscape.h,@tx.b5.landscape.w
- when /a5/i
- d[:papertype],d[:fontsize],d[:columnsep]='a5paper','10pt','32pt'
- d[:textheight],d[:textwidth]=@tx.a5.landscape.h,@tx.a5.landscape.w
- else #default currently A4
- d[:papertype],d[:fontsize]='a4paper','12pt'
- d[:textheight],d[:textwidth]=@tx.a4.landscape.h,@tx.a4.landscape.w
- end
- end
- d
- end
- def tex_head_paper
- case @layout
- when /portrait/
- tex_head_paper_portrait(tex_head_paper_dimensions)
- when /landscape/
- tex_head_paper_landscape(tex_head_paper_dimensions)
- end
- end
- def tex_head_pdftex_dvi
- color=case @layout
- when /portrait/
- <<-WOK
- colorlinks=true,
- urlcolor=myblack,
- filecolor=myblack,
- linkcolor=myblack,
- WOK
- when /landscape/
- <<-WOK
- colorlinks=true,
- urlcolor=myblue, % \\href{...}{...} external url
- filecolor=mygreen, % \\href{...} local file
- linkcolor=myred, % \\href{...} and \\pageref{...}
- WOK
- end
- if @layout =~/portrait|landscape/
- <<-WOK
-\\usepackage{alltt}
-\\usepackage{thumbpdf}
-\\usepackage[#{@tex2pdf},
- #{color.strip}
- pdftitle={#{@txt}},
- pdfauthor={#{@author}},
- pdfsubject={#{@subject}},
- pdfkeywords={#{@keywords}},
- pageanchor=true,
- plainpages=true,
- pdfpagelabels=true,
- pagebackref,
- bookmarks=true,
- bookmarksopen=true,
- pdfmenubar=true,
- pdfpagemode=UseOutline,
- pdffitwindow=true,
- pdfwindowui=true,
- plainpages=false,
-% pdfusetitle=true,
-% pdfpagelayout=SinglePage,
-% pdfpagelayout=TwoColumnRight,
-% pdfpagelayout=TwoColumnLeft,
-% pdfstartpage=3,
- pdfstartview=FitH
-]
-{hyperref}
-%% trace lost characters
-% \\tracinglostchars = 1
-% \\tracingonline = 1
-\\usepackage[usenames]{color}
-\\definecolor{myblack}{rgb}{0,0,0}
-\\definecolor{myred}{rgb}{0.75,0,0}
-\\definecolor{mygreen}{rgb}{0,0.5,0}
-\\definecolor{myblue}{rgb}{0,0,0.5}
-\\definecolor{mywhite}{rgb}{1,1,1}
-\\usepackage{url}
-%\\usepackage{breakurl}
- WOK
- elsif @txt =~/dvi/
- <<-WOK
-\\usepackage{alltt}
- #{color.strip}
- pageanchor=true,
- plainpages=true,
- pagebackref,
- bookmarks=true,
- bookmarksopen=true,
- plainpages=false,
-]
-{hyperref}
-\\usepackage[usenames]{color}
-\\definecolor{myblack}{rgb}{0,0,0}
-\\definecolor{myred}{rgb}{0.75,0,0}
-\\definecolor{mygreen}{rgb}{0,0.5,0}
-\\definecolor{myblue}{rgb}{0,0,0.5}
-\\definecolor{mywhite}{rgb}{1,1,1}
-\\usepackage{url}
-%\\usepackage{breakurl}
- 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}
-\\usepackage[parfill]{parskip}
-\\usepackage[normalem]{ulem}
-\\usepackage{soul}
-\\usepackage{longtable}
-\\usepackage[tc]{titlepic}
-\\usepackage{graphicx}
-\\makeatletter
-\\parindent0pt
-%\\usepackage{mathptmx}
-\\usepackage{amssymb}
-% amssymb used for backslash
- WOK
- end
- def document_head_with_orientation(codeblock_box_type)
- endnotes=("\\usepackage{endnotes}" if @txt =~/endnotes?/) || '' #not implemented see also def endnotes
- @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
-#{endnotes}
-\\usepackage[multiple,ragged]{footmisc}
-\\setlength\\footnotemargin{12pt}
-\\usepackage[para]{manyfoot}
-\\DeclareNewFootnote{A}
-%\\DeclareNewFootnote[para]{A}
-\\newenvironment{ParagraphIndent}[1]%
-{
-\\begin{list}{}{%
-\\setlength\\topsep{0pt}%
-\\addtolength{\\leftmargin}{#1}
-\\setlength\\parsep{0pt plus 1pt}%
-}
-\\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}{}{%
-\\setlength\\topsep{0pt}%
-\\addtolength{\\leftmargin}{#1}
-\\itemindent=-1em
-\\setlength\\parsep{0pt plus 1pt}%
-}
-\\item[]
-}
-{\\end{list}}
-\\usepackage{fancyhdr}
-\\lhead{}
-\\renewcommand{\\part}{\\\@startsection
- {part}{1}{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\bfseries\\large\\upshape\\raggedright}}
-\\renewcommand{\\section}{\\\@startsection
- {section}{2}{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\bfseries\\large\\upshape\\raggedright}}
-\\renewcommand{\\subsection}{\\\@startsection
- {subsection}{3}{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\bfseries\\large\\upshape\\raggedright}}
-\\renewcommand{\\subsubsection}{\\\@startsection
- {subsubsection}{4}{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\normalfont\\normalsize\\bfseries\\raggedright}}
-\\renewcommand{\\paragraph}{\\\@startsection
- {paragraph}{5}{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\normalfont\\normalsize\\itshape\\raggedright}}
-\\renewcommand{\\subparagraph}{\\\@startsection
- {subparagraph}%{6}%{-2mm}%
- {-\\baselineskip}{0.5\\baselineskip}%
- {\\normalfont\\normalsize\\itshape\\raggedright}}
-% \\makeatother
-\\selectlanguage{#{@lang.list[@md.i18n[0]][:xlp]}}
- WOK
- end
- def a4generic
- end
- end
- class SpecialCharacters
- def initialize(md,str,is=:default)
- @md,@txt,@is=md,str,is
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- @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=:default) # ~ ^ $ & % _ { } #LaTeX special characters - KEEP list
- word=str.scan(/\S+|\n/) #unless line =~/^(?:@\S|%+\s)/
- para_array=[]
- str=if word
- word.each do |w| # _ - / # | : ! ^ ~
- if w !~/https?:/ \
- and w=~/\/\S+?\// \
- and w.length > 6
- w=w.gsub(/([_.\/])/,'\1\-')
- end
- 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=w.gsub(/\#/,'<=hash>')
- end
- 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 ->
- 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 ^
- 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=str.gsub(/_/,'\_')
- end
- 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(/&nbsp;|#{Mx[:nbsp]}/,'~'). # ~ character for hardspace
- gsub(/&/,'<=amp>')
- end
- 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
- end
- 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=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=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=str.gsub(/(https?:\/\/\S+?)(?:<=tilde>(\S+))+/,'\1~\2')
- end
- 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=str.gsub(/(https?:\/\/\S+?)(?:<=amp>(\S+))+/,'\1&\2')
- end
- str=str.gsub(/<=amp>/,'{\\\&}'). #changed ... 2005
- gsub(/<=copymark>\s*(.+)/,
- '^\copyright \textnormal{\1} \2') # watch likely to be problematic
- str
- end
- 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=str.gsub(/<=tilde>/,'{$\tilde$}')
- str
- end
- def special_characters_unsafe_1(str) #depreciated, make obsolete
- # some substitutions are sequence sensitive, rearrange with care.
- 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.
- str,is=@txt,@is
- str=xetex_special_characters_1(str,is) unless str.nil?
- str=special_characters_unsafe_1(str) unless str.nil? #xetex_special_characters_unsafe_1(@txt)
- str=xetex_special_characters_2(str,is) unless str.nil? #issues with xetex
- str=xetex_special_characters_3(str) unless str.nil?
- @txt=str
- end
- def special_word_break_points
- str=@txt
- str=str.gsub(/([_,.;:\/|=])/,'\1\-').
- gsub(/(--)(\S{4,})/,'\1\-\2')
- @txt=str
- end
- def special_number_break_points
- str=@txt
- str=str.gsub(/([0-9a-f]{8})/i,'\1\-')
- @txt=str
- end
- def special_characters_safe #special characters - some substitutions are sequence sensitive, rearrange with care.
- 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=str.gsub(/ \\\\([ #{Mx[:br_nl]}]+|$)/,' \textbackslash\textbackslash\hardspace\1')
- str
- end
- end
- class UseTeX
- attr_accessor :url,:txt,:date
- def initialize(md)
- @md=md
- @vz=SiSU_Viz::Defaults.new
- @date=SiSU_Env::InfoDate.new # #{@date.year}
- @copymark='{\\begin{footnotesize}\\raisebox{1ex}{\\copyright}\\end{footnotesize}}'
- @brace_url=SiSU_Viz::Defaults.new.url_decoration
- end
- def skip
- "\n\\vspace*{\\smallskipamount} \n"
- end
- def paraskip_normal
- '\setlength{\parskip}{1ex plus0.5ex minus0.2ex}'
- end
- def paraskip_small
- '\setlength{\parskip}{0.5ex plus0.2ex minus0.1ex}'
- end
- def paraskip_tiny
- '\setlength{\parskip}{0.1ex plus0.1ex minus0.1ex}'
- end
- def skip_small
- "\\smallskip{}"
- end
- def skip_small_vspace
- "\n\\vspace*{\\smallskipamount} \n"
- end
- def skip_small_footnote
- end
- def skip_medium
- "\n\\medskip{}\n\n"
- end
- def skip_dummy
- "\n"
- end
- def header
- "\\lhead[ ]{ }\n" +
- "\\chead[ \\fancyplain{} \\bfseries \\footnotesize \\leftmark ]{ \\fancyplain{} \\bfseries \\footnotesize \\rightmark }\n" +
- "\\rhead[ ]{ }\n"
- end
- def footer
- "\\lfoot[\\textrm{\\thepage}]{\\tiny \\href{#{@md.footer_links[:left][:url]}}{#{@md.footer_links[:left][:say]}}}\n" +
- "\\cfoot{\\href{#{@md.footer_links[:center][:url]}}{#{@md.footer_links[:center][:say]}}}\n" +
- "\\rfoot[\\tiny \\href{}{}]{\\textrm{\\thepage}}\n"
- end
- def site
- if not @vz.url_home.empty? \
- and not @vz.url_txt.empty?
- "\n\\date{\\begin{tiny} \\end{tiny}}"
- else ''
- end
- end
- def sitename #owners site, eg freeculture, free.for.all, gutenberg etc.
- "\\href{#{@vz.url_home}}{#{@vz.txt_home}}"
- end
- def owner_chapter
- "Contact Details for Original Promulgating Authority"
- end
- #BOOK standard dimensions - 229x156
- def newpage(orientation)
- case orientation
- when /landscape/ # using longtable latex package
- <<-WOK
-\\clearpage
- WOK
- when /portrait/
- <<-WOK
-\\newpage
- WOK
- end
- end
- def sisu_rights
- 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"
- else ''
- end
- else ''
- end
- <<-WOK
-\\\\ ~
-{\\begin{footnotesize}#{base_prog_txt}
-\\\\ Generated by \\href{http://www.jus.uio.no/sisu}{SiSU} \\begin{tiny}[ #{v[:project]} #{v[:version]} of #{v[:date_stamp]} ]\\end{tiny} \\href{http://www.jus.uio.no/sisu}{www.jus.uio.no/sisu}
-\\\\ Copyright #{@copymark} 1997, current #{@date.year_static} Ralph Amissah, All Rights Reserved.
-\\\\ SiSU is software for document structuring, publishing and search (with object citation numbering), \\href{http://www.sisudoc.org}{www.sisudoc.org}
-\\\\ SiSU is released under \\href{http://www.fsf.org/licenses/gpl.html}{GPL 3 } or later, #{@brace_url.tex_open}\\href{http://www.fsf.org/licenses/gpl.html}{http://www.fsf.org/licenses/gpl.html}#{@brace_url.tex_close}.
-{\\end{footnotesize}
-\\\\
- WOK
- end
- def doc_sc_info_footnote_full
- <<-WOK
-\\footnote{%\nGenerated by \\href{http://www.jus.uio.no/sisu}{SiSU \\ www.jus.uio.no/sisu }\\ \\newline \\scriptsize{Document version information: \\emph{sourcefile} \\uline{#{@md.fnstex}}; \\emph{version} \\uline{#{@md.sc_number}}; \\emph{date} \\uline{#{@md.sc_date}}; \\emph{time} \\uline{#{@md.sc_time}}}}
- WOK
- end
- def doc_sc_info_footnote_brief
- " \\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::InfoVersion.instance.get_version
- <<-WOK
-\\\\
-{\\begin{footnotesize}
-Document version information: \\\\
-\\emph{sourcefile} \\uline{#{@md.fnstex}}; \\emph{version} \\uline{#{@md.sc_number}}; \\emph{date} \\uline{#{@md.sc_date}}; \\emph{time} \\uline{#{@md.sc_time}} \\\\
-Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu }\\- version information: \\\\
-\\uline{ #{v[:project]} #{v[:version]} of #{v[:date_stamp]}}
-\\end{footnotesize}}&
- WOK
- end
- def doc_no_sc_info
- v=SiSU_Env::InfoVersion.instance.get_version
- <<-WOK
-\\\\
-{\\begin{small}
-Document information: \\\\
-\\emph{sourcefile} \\uline{#{@md.fnstex}} \\\\
-Generated by \\href{http://www.jus.uio.no/sisu}{SiSU www.jus.uio.no/sisu } \\\\ version information: \\
-\\uline{ #{v[:project]} #{v[:version]} of #{v[:date_stamp]}}
-
-\\end{small}}&
- WOK
- end
- def endnotes #not used should be inserted before MetaData section which preceeds doc_tail, but is "part of document"
- <<-WOK
-\\subsection*{Endnotes}
-\\addcontentsline{toc}{section}{Endnotes}
-\\
-\\listofendnotes
- WOK
- end
- def doc_tail
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- 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.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')
- <<-WOK
-\\begin{english}[variant=british]
-\\subsection*{Information on this document copy and an unofficial List of Some web related information and sources}
-\\addcontentsline{toc}{section}{Information on this document copy and an unofficial List of Some web related information and sources}
-\\\\
-\"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.
-\\\\ 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: \\\\
-{\\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} \\\\
-\\\\\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}
-\\\\
-\\\\
-\\href{#{@vz.url_root_http}/#{url}/#{@md.fn[:manifest]}}{SiSU Manifest} of document output and metadata may be found at: \\\\
-#{@brace_url.tex_open}\\begin{scriptsize}\\url{#{@vz.url_root_http}/#{url}/#{@md.fn[:manifest]}}\\end{scriptsize}#{@brace_url.tex_close}
-\\\\
-\\\\
- #{sitename} found at: \\begin{scriptsize}#{site}\\end{scriptsize}\\subsubsection*{Links that may be of interest at #{@vz.txt_home} and elsewhere:}
-\\addcontentsline{toc}{subsection}{Links that may be of interest}
-\\end{english}
- WOK
- end
- def mail_tail #not retested, the old mail_tail is commented out and appended to this program
- dir=SiSU_Env::InfoEnv.new(@md.fns)
- <<-WOK
-\\subsection*{Mail sender details}
-\\addcontentsline{toc}{subsection}{Mail sender details}
-\\\\
-Mail from: ralph@amissah.com\\\\
-44 20 8789 3452\\\\
-44 77 9669 4448
-\\\\
- \"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_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
-end
-__END__
-#ack usepackage texpdf*
-#ack usepackage texpdf* |ack '\{.+?\}'
-#see sisu_texpdf_usepackage.rb
- alltt.sty
- amssymb.sty
- babel.sty
- boites.sty
- color.sty
- endnotes.sty
- fancyhdr.sty
- fontspec.sty
- footmisc.sty
- graphicx.sty
- inputenc.sty
- listings.sty
- longtable.sty
- manyfoot.sty
- multicol.sty
- parskip.sty
- polyglossia.sty
- soul.sty
- textcomp.sty
- thumbpdf.sty
- titlepic.sty
- ucs.sty
- ulem.sty
- url.sty
- xetex.sty
- xltxtra.sty
- xunicode.sty
----
-texlive-latex-base
-texlive-base
-texlive-latex-extra
-texlive-latex-recommended
-texlive-xetex
-texlive-generic-recommended
----
-texlive-latex-base:
- /usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty
- /usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty
- /usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty
- /usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
- /usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty
- /usr/share/texlive/texmf-dist/tex/latex/graphics/color.sty
- /usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty
- /usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty
- /usr/share/texlive/texmf-dist/tex/latex/tools/multicol.sty
----
-texlive-base:
- /usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty
----
-texlive-latex-extra:
- /usr/share/texlive/texmf-dist/tex/latex/boites/boites.sty
- /usr/share/texlive/texmf-dist/tex/latex/endnotes/endnotes.sty
- /usr/share/texlive/texmf-dist/tex/latex/footmisc/footmisc.sty
- /usr/share/texlive/texmf-dist/tex/latex/ncctools/manyfoot.sty
- /usr/share/texlive/texmf-dist/tex/latex/soul/soul.sty
- /usr/share/texlive/texmf-dist/tex/latex/titlepic/titlepic.sty
- /usr/share/texlive/texmf-dist/tex/latex/ucs/ucs.sty
----
-texlive-latex-recommended:
- /usr/share/texlive/texmf-dist/tex/generic/thumbpdf/thumbpdf.sty
- /usr/share/texlive/texmf-dist/tex/latex/fontspec/fontspec.sty
- /usr/share/texlive/texmf-dist/tex/latex/listings/listings.sty
- /usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty
- /usr/share/texlive/texmf-dist/tex/latex/url/url.sty
----
-texlive-xetex:
- /usr/share/texlive/texmf-dist/tex/latex/xltxtra/xltxtra.sty
- /usr/share/texlive/texmf-dist/tex/xelatex/polyglossia/polyglossia.sty
- /usr/share/texlive/texmf-dist/tex/xelatex/xunicode/xunicode.sty
----
-texlive-generic-recommended:
- /usr/share/texlive/texmf-dist/tex/generic/ulem/ulem.sty
diff --git a/lib/sisu/v4/update.rb b/lib/sisu/v4/update.rb
deleted file mode 100644
index 1d7e1cff..00000000
--- a/lib/sisu/v4/update.rb
+++ /dev/null
@@ -1,142 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/update.rb;hb=HEAD>
-
- * 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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class SetCF
- def initialize(md)
- @md=md
- @env=SiSU_Env::InfoEnv.new(@md.fns)
- out=@env.path.output
- @base_path="#{out}/#{@md.fnb}"
- @pdf_fn=SiSU_Env::FileOp.new(@md).base_filename
- end
- def set_flags #-mNhwpoabxXyv
- flag='-v'
- if FileTest.file?("#{@md.file.output_path.txt.dir}/#{@md.file.base_filename.txt}")==true
- flag=flag + 'a'
- end
- if FileTest.file?("#{@md.file.output_path.html_seg.dir}/#{@md.file.base_filename.html_seg}")==true \
- or FileTest.file?("#{@md.file.output_path.html_scroll.dir}/#{@md.file.base_filename.html_scroll}")==true
- flag=flag + 'h'
- end
- if FileTest.file?("#{@md.file.output_path.xhtml.dir}/#{@md.file.base_filename.xhtml}")==true
- flag=flag + 'b'
- end
- if FileTest.file?("#{@md.file.output_path.xml_sax.dir}/#{@md.file.base_filename.xml_sax}")==true
- flag=flag + 'x'
- end
- if FileTest.file?("#{@md.file.output_path.xml_dom.dir}/#{@md.file.base_filename.xml_dom}")==true
- flag=flag + 'X'
- end
- if FileTest.file?("#{@md.file.output_path.epub.dir}/#{@md.file.base_filename.epub}")==true
- flag=flag + 'e'
- end
- if FileTest.file?("#{@md.file.output_path.odt.dir}/#{@md.file.base_filename.odt}")==true
- flag=flag + 'o'
- end
- if FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_p_a4}")==true \
- or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_l_a4}")==true \
- or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_p_letter}")==true \
- or FileTest.file?("#{@md.file.output_path.pdf.dir}/#{@pdf_fn.pdf_l_letter}")==true
- flag=flag + 'p'
- end
- if FileTest.file?("#{@md.file.output_path.html_concordance.dir}/#{@md.file.base_filename.html_concordance}")==true
- flag=flag + 'w'
- end
- if FileTest.file?("#{@md.file.output_path.digest.dir}/#{@md.file.base_filename.digest}")==true
- flag=flag + 'N'
- end
- if FileTest.file?("#{@md.file.output_path.src.dir}/#{@md.file.base_filename.src}")==true
- flag=flag + 's'
- end
- if FileTest.file?("#{@md.file.output_path.sisupod.dir}/#{@md.file.base_filename.sisupod}")==true
- flag=flag + 'S'
- end
- puts flag
- flag
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/urls.rb b/lib/sisu/v4/urls.rb
deleted file mode 100644
index 2af3a5b6..00000000
--- a/lib/sisu/v4/urls.rb
+++ /dev/null
@@ -1,456 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/urls.rb;hb=HEAD>
-
- * 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::Rescued.new($!,$@,@opt.cmd).location 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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}#{@md.papersize_array[0]}.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}#{@md.papersize_array[0]}.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_discrete(x,y)
- SiSU_Screen::Ansi.new(@opt.cmd,"[#{@opt.f_pth[:lng_is]}] -#{x}","sqlite3 #{@md.file.output_path.sqlite_discrete.dir}/#{@md.file.base_filename.sqlite_discrete}").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]/
- 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/
- 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_discrete][:set]==:on
- show.db.sqlite_discrete(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 \
- or @opt.act[:html_scroll][:set]==:on \
- or @opt.act[:html_seg][:set]==:on)
- if x =~/scroll/
- if @opt.act[:html_scroll][:set]==:on
- show.html.scroll(x)
- end
- else
- if @opt.act[:html_seg][:set]==:on
- show.html.toc(x)
- end
- 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 \
- or @opt.act[:pdf_p][:set]==:on \
- or @opt.act[:pdf_l][:set]==:on)
- if x =~/portrait/
- if @opt.act[:pdf_p][:set]==:on
- show.pdf.portrait(x)
- end
- else
- if @opt.act[:pdf_l][:set]==:on
- show.pdf.landscape(x)
- end
- 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|
- 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/utils.rb b/lib/sisu/v4/utils.rb
deleted file mode 100644
index d18e2180..00000000
--- a/lib/sisu/v4/utils.rb
+++ /dev/null
@@ -1,169 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/utils.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: system environment, debug related
-
-=end
-module SiSU_Utils
- class CodeMarker
- def initialize(line,file,color=:red)
- @line,@file,@color=line.to_s,file,color
- end
- def ansi(color=nil)
- @color=color ? color : @color
- c={}
- c[:on]=case @color
- when :red; ANSI_C[:red]
- when :green; ANSI_C[:green]
- when :yellow; ANSI_C[:yellow]
- when :blue; ANSI_C[:blue]
- when :fuchsia; ANSI_C[:fuchsia]
- when :cyan; ANSI_C[:cyan]
- when :inv_red; ANSI_C[:inv_red]
- when :inv_green; ANSI_C[:inv_green]
- when :inv_yellow; ANSI_C[:inv_yellow]
- when :inv_blue; ANSI_C[:inv_blue]
- when :inv_fuchsia; ANSI_C[:inv_fuchsia]
- when :inv_cyan; ANSI_C[:inv_cyan]
- when :b_red; ANSI_C[:b_red]
- when :b_green; ANSI_C[:b_green]
- when :b_yellow; ANSI_C[:b_yellow]
- when :b_blue; ANSI_C[:b_blue]
- when :b_fuchsia; ANSI_C[:b_fuchsia]
- when :b_cyan; ANSI_C[:b_cyan]
- else ANSI_C[:red]
- end
- c[:off]= ANSI_C[:off]
- #ansi_color + @line.to_s + ansi_color_off + ' ' + @file.gsub(/([^\/]+$)/,"#{ansi_color}\\1#{ansi_color_off}")
- c
- end
- def var(v,x)
- h={ c: nil, m: '' }
- if v.class == Hash
- h[:c] = (defined? v[:c]) ? v[:c] : ''
- h[:m] = (defined? v[:m]) ? v[:m] : ''
- else
- if v.class == Symbol
- h[:c]=v
- elsif v.class == String
- h[:m]=v
- end
- if x.class == Symbol
- h[:c]=x
- elsif x.class == String
- h[:m]=x
- end
- h[:c] = (defined? h[:c]) ? h[:c] : ''
- h[:m] = (defined? h[:m]) ? h[:m] : ''
- end
- h[:c]=ansi(h[:c])
- h[:m]=message(h[:m])
- h
- end
- def message(msg='')
- @message=(msg.empty?) ? '' : " #{msg}"
- end
- def set(v=nil,x=nil)
- v=var(v,x)
- file,path=File.basename(@file),File.dirname(@file)
- v[:c][:on] + @line + v[:c][:off] + ' ' + path + '/' "#{v[:c][:on]}#{file}#{v[:c][:off]}" + v[:m]
- end
- def mark(v=nil,x=nil)
- puts set(v,x)
- end
- end
- class Path
- def initialize(dir=Dir.pwd)
- @dir=dir
- end
- def base_markup
- (/(\S+?)(?:\/(?:#{Px[:lng_lst_rgx]}))?$/).match(Dir.pwd)[1]
- end
- def bmd
- base_markup
- end
- end
-end
-__END__
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark({ m: %{
- code: #{@@flag[:code]}, <-- close "#{t_o}"
-}})
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark({ m: %{
- code: #{@@flag['code']}, <-- close "#{t_o}"
-}, c: :green})
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark({ m: %{
- code: #{@@flag['code']}, open --> "#{t_o}"
-}}) if t_o=~/^```/m
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark(%{ code: #{@@flag['code']}, open --> "#{t_o}" }) \
-if t_o=~/^```/m
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark("open -->")
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->",:green)
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:green,"open -->")
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->")
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:green)
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark("open -->")
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark('open -->',:green)
-SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:red).mark
-puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:red).set
-puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).set('',:green)
-puts SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).set('',:fuchsia)
-puts ANSI_C[:red] + __LINE__.to_s + ANSI_C[:off] + ' ' + __FILE__
-puts "#{ANSI_C[:red]} #{__LINE__.to_s} #{ANSI_C[:off]} #{__FILE__}"
-puts ANSI_C[:fuchsia] + __LINE__.to_s + ANSI_C[:off] + ' ' + __FILE__.gsub(/([^\/]+$)/,"#{ANSI_C[:fuchsia]}\\1#{ANSI_C[:off]}")
-puts ANSI_C[:red] + __LINE__.to_s + ANSI_C[:off] + ' ' + __FILE__.gsub(/([^\/]+$)/,"#{ANSI_C[:red]}\\1#{ANSI_C[:off]}")
diff --git a/lib/sisu/v4/webrick.rb b/lib/sisu/v4/webrick.rb
deleted file mode 100644
index 15e86d87..00000000
--- a/lib/sisu/v4/webrick.rb
+++ /dev/null
@@ -1,188 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/webrick.rb;hb=HEAD>
-
- * 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
- @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::Rescued.new($!,$@,'-W',nil).location 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::Rescued.new($!,$@,'-W',nil).location do #fix
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
-ensure
-end
-__END__
diff --git a/lib/sisu/v4/wikispeak.rb b/lib/sisu/v4/wikispeak.rb
deleted file mode 100644
index fa2d9ddb..00000000
--- a/lib/sisu/v4/wikispeak.rb
+++ /dev/null
@@ -1,369 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/wikispeak.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: wiki text generation, stripped wiki output (unix, linefeed)
-
-=end
-module SiSU_Wikispeak
- require_relative 'dal' # dal.rb
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- include SiSU_Param
- include SiSU_Viz
- require_relative 'plaintext_format' # plaintext_format.rb
- include Format
- require_relative 'shared_txt'
- @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0
- @@tablefoot=''
- class Source
- def initialize(opt)
- @opt=opt
- @@dostype='msdos footnotes'
- end
- def read
- begin
- @md=SiSU_Param::Parameters.new(@opt).get
- @env=SiSU_Env::InfoEnv.new(@opt.fns)
- path=@env.path.output_tell
- tool=(@opt.cmd =~/[MVv]/) \
- ? "#{@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]/
- @dal_array=SiSU_DAL::Source.new(@opt).get # dal file drawn here
- SiSU_Wikispeak::Source::Scroll.new(@dal_array,@md).songsheet
- rescue
- SiSU_Errors::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class SplitTextObject <Source
- require_relative 'plaintext_format' # plaintext_format.rb
- include Format
- include SiSU_Viz
- @@alt_id_count=0
- @@dp=nil
- attr_reader :format,:lev,:text,:ocn,:lev_para_ocn
- def initialize(para)
- @para=para
- @format,@ocn='ordinary','ordinary'
- @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern
- end
- def lev_segname_para_ocn
- @text=nil
- if @para =~/^(\d~|<:.+?>).+?#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
- if /^(([1-6])~(\S+))\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @format,@lev,segname,@text,@ocn=$1,$2,$3,$4,$5
- elsif /^(([1-6])~)\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @format,@lev,@text,@ocn=$1,$2,$3,$4
- elsif /<:(.+?)>\s*(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @format,@text,@ocn=$1,$2,$3
- elsif /^(([1-6])~(\S+))\s+(\S.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;[um]\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @@alt_id_count+=1
- @format,@lev,segname,@text,@ocn=$1,$2,$3,$4,"x#{@@alt_id_count}"
- elsif /^(([1-6])~)\s+(\S.+?)#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @@alt_id_count+=1
- @format,@lev,@text,@ocn=$1,$2,$3,"x#{@@alt_id_count}"
- end
- else
- if /(.+?)#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/m.match(@para)
- @text,@ocn=$1,$2
- end
- if @para !~/#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$|^$/ #added 2002w06
- @text=/(.+?)/m.match(@para)[1]
- end
- if /^((\d)~(?:~\S+)?)\s+(.+)/m.match(@para)
- @format,@lev,@text=$1,$2,$3
- end
- end
- format=@format.dup
- @lev_para_ocn=if @para =~/.+#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
- Format::FormatTextObject.new(format,@text,@ocn)
- else
- Format::FormatTextObject.new(format,@text,"#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}")
- end
- self
- end
- end
- class Scroll <Source
- require_relative 'shared_txt' # shared_txt.rb
- include SiSU_TextUtils
- @@endnotes_para=[]
- @@wiki={ body: [], open: [], close: [], head: [], metadata: [], tail: [], endnotes: [] }
- @@dp=nil
- def initialize(data,md)
- @data,@md=data,md
- @vz=SiSU_Viz::Defaults.new
- @dp=@@dp ||=SiSU_Env::InfoEnv.new.digest.pattern
- @regx=/^(?:(?:#{Mx[:br_line]}\s*|#{Mx[:br_nl]}\s*)?#{Mx[:lv_o]}\d:(\S*?)#{Mx[:lv_c]}\s*)?(.+)/ #fix Mx[:lv_o] #m # 2004w18 pb pn removal added
- @tab="\t"
- @@dostype='unix footnotes'
- @br="\n"
- end
- def songsheet
- markup
- publish
- end
- # Used for extraction of endnotes from paragraphs
- def extract_endnotes(para='') #check
- para.scan(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})([\d*+]+\s+.+?)\s*#{Mx[:id_o]}#{@dp}#{Mx[:id_c]}(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/)
- end
- def wiki_metadata(meta)
- util=SiSU_TextUtils::Wrap.new(meta.text,70,15,1)
- txt=util.line_wrap
- @@wiki[:metadata] <<= if meta.type=='meta'
- <<WOK
-
-#{@tab}#{meta.el}: #{txt}
-WOK
- else ''
- end
- end
- def wiki_tail
- vz=SiSU_Viz::Defaults.new
- 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
- @@wiki[:tail] <<<<WOK
-#{@br}
-Other versions of this document: #{@br}
-manifest:
- #{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:manifest]}#{@br}
-html:
- #{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:toc]}#{@br}
-pdf:
- #{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:pdf_p]}
- #{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:pdf_l]}#{@br}
-plaintext (plain text):
- #{vz.url_root_http}/#{@md.fnb}/#{@md.fn[:plain]}#{@br}
-at:
- #{vz.url_site}#{@br}
-
-#{sc}
-* #{generator}
-* #{rubyv}
-* #{lastdone}
-* SiSU #{vz.url_sisu}
-WOK
- end
- def wiki_structure(para='',lv='',ocn='',hname='') #% Used to extract the structure of a document
- lv=lv.to_i
- lv=nil if lv==0
- extract_endnotes(para)
- para.gsub!(/(?:#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(?:[\d*+]+)\s+(.+?)#{Mx[:id_o]}#{@dp}#{Mx[:id_c]}(?:#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/,'<ref>\1</ref>') # endnote marker marked up
- para.gsub!(/^#{Rx[:lv]}\S*\s+/,'') # endnote marker marked up
- para.gsub!(/<\S+?>#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}/,'') # endnote marker marked up
- if lv
- @@wiki[:body] << case lv
- when 1; '='*2 << para.strip << @br*2
- when 2..3; '='*2 << para.strip << @br*2
- when 4; '='*4 << para.strip << @br*2
- when 5..6; '='*4 << para.strip << @br*2
- end
- else @@wiki[:body] << para << @br*2 # main text, contents, body KEEP
- end
- end
- def markup # Used for major markup instructions
- data=@data
- SiSU_Env::InfoEnv.new(@md.fns)
- @data_mod,@endnotes,@level,@cont,@copen,@wiki_contents_close=Array.new(6){[]}
- (0..6).each { |x| @cont[x]=@level[x]=false }
- (4..6).each { |x| @wiki_contents_close[x]='' }
- wiki_tail
- table_message='[table omitted, see other document formats]'
- data.each do |para|
- para.gsub!(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+/um,"#{@br}#{table_message}") #fix
- para.gsub!(/.+?<-#>/,'') # remove dummy headings (used by html) #check
- para.gsub!(/_\*\s+/,'* ') # bullet markup, marked down
- para.gsub!(/&#169;/,'©') # bullet markup, marked down
- para.gsub!(/&amp;/,'&') # bullet markup, marked down
- para.gsub!(/<sup>(.+?)<\/sup>/,'^\1^')
- para.gsub!(/<sub>(.+?)<\/sub>/,'[\1]')
- para.gsub!(/<i>(.+?)<\/i>/,"''\\1''")
- para.gsub!(/<b>(.+?)<\/b>/,"'''\\1'''")
- para.gsub!(/<u>(.+?)<\/u>/,'_\1_')
- para.gsub!(/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'[\2 \1]')
- para.gsub!(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'[\1]')
- para.gsub!(/<:(?:block|group|verse|alt|code)(?:-end)?>(?:\s+#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]})?/,'')
- para.gsub!(/<:p[bn]>/,'') # remove page breaks
- para.gsub!(/^\s*#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/,'') # remove empty lines - check
- para.gsub!(/<a href=".+?">(.+?)<\/a>/m,'\1')
- para.gsub!(/<:name#\S+?>/,'') # remove name links
- para.gsub!(/&nbsp;|#{Mx[:nbsp]}/,' ') # decide on
- para.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif)) .+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,' [ \1 ]') #"[ #{dir.url.images_local}\/\\1 ]")
- para.gsub!(/(?:^|[^_\\])#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"\s*#{Mx[:lnk_c]}\S+/,'[image: "\1"]')
- if para =~/^@(\S+?):\s+(.+?)\Z/m # for headers
- d_meta=SiSU_TextUtils::HeaderScan.new(@md,para).meta
- if d_meta; wiki_metadata(d_meta)
- end
- end
- if para !~/(^@\S+?:|#{Mx[:br_endnotes]}|#{Mx[:br_eof]})/
- if para =~@regx #/.+?<~\d+;\w\d+;\w\d+>.*/ #watch change
- paranum=para[@regx,3]
- @p_num=Format::ParagraphNumber.new(paranum)
- end
- @sto=SplitTextObject.new(para).lev_segname_para_ocn
- ### problem in scroll, it appears tables are getting paragraph numbers
- m=/#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
- if para =~m \
- and para=~/\S+/
- para=case @sto.format
- when /^(1)~(?:(\S+))?/
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body1
- when /^(2)~(?:(\S+))?/
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body2
- when /^(3)~(?:(\S+))?/
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body3
- when /^(4)~(\S+)/ # work on see SiSU_text_parts::SplitTextObject
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body4
- when /^(5)~(?:(\S+))?/
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body5
- when /^(6)~(?:(\S+))?/
- wiki_structure(para,$1,@sto.ocn,$2)
- @sto.lev_para_ocn.heading_body6
- else
- wiki_structure(para,nil,nil,nil) #watch may be problematic
- para
- end
- elsif para =~/#{table_message}/
- @@wiki[:body] << para << @br
- elsif para =~/(Note|Endnotes?)/ \
- and para !~/#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
- elsif para =~/(MetaData)/ \
- and para =~/#{Mx[:id_o]}~(\d+);[um]\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/ #debug 2003w46 add rc info ####suspect visit
- elsif para.include? 'Owner Details' \
- and para !~/#{Mx[:id_o]}~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#{@dp}:#{@dp}#{Mx[:id_c]}$/
- elsif para =~/(#{Mx[:tc_p]}|#{Mx[:gr_o]}Th?)/u #tables ! #fix
- elsif para =~/(.*)<!#!>(.*)/
- one,two=$1,$2
- format_text=FormatTextObject.new(one,two)
- para=format_text.seg_no_paranum
- end
- if (para =~/<a name="n\d+">/ \
- and para =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/) # -endnote
- para=''
- end
- case para
- when /<:i1>/
- if para =~/.*<:#>.*$/
- format_text=FormatTextObject.new(para,'')
- para=format_text.scr_indent_one_no_paranum
- end
- when /<:i2>/
- if para =~/.*<:#>.*$/
- format_text=FormatTextObject.new(para,'')
- para=format_text.scr_indent_one_no_paranum
- end
- end
- if para !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
- # i don't get the condition for no paranum
- end
- if para =~/<:center>/
- one,two=/(.*)<:center>(.*)/.match(para)[1,2]
- format_text=FormatTextObject.new(one,two)
- para=format_text.center
- end
- para.gsub!(/<!.+!>/,' ') if para ## Clean Prepared Text
- para.gsub!(/<:\S+>/,' ') if para ## Clean Prepared Text
- end
- end
- end
- def publish
- content=[]
- content << @@wiki[:open]
- content << @@wiki[:head]
- content << @@wiki[:body]
- Output.new(content.join,@md).wiki
- @@wiki[:head],@@wiki[:body],@@wiki[:tail],@@wiki[:metadata]=[],[],[],[]
- end
- end
- class Output <Source
- include SiSU_Param
- include SiSU_Env
- def initialize(content,md)
- @content,@md=content,md
- end
- def wiki #%wiki output
- SiSU_Env::FileOp.new(@md).mkdir
- filename_wiki=SiSU_Env::FileOp.new(@md,@md.fn[:wiki]).mkfile
- @sisu=[]
- @content.each do |para| # this is a hack
- if para =~/^\S/
- if para !~/^([*=-]|\.){5}/; filename_wiki.puts para #unix wiki
- else filename_wiki.puts para #unix wiki
- end
- else filename_wiki.puts para # if para =~/^\s/
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xhtml.rb b/lib/sisu/v4/xhtml.rb
deleted file mode 100644
index c4c708ef..00000000
--- a/lib/sisu/v4/xhtml.rb
+++ /dev/null
@@ -1,438 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xhtml.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: xhtml output logic, flow
- ** Notes: tidy -xml scroll.xhtml >> index.tidy
-=end
-module SiSU_XHTML
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- 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_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::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=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,'XHTML',tool).green_hi_blue
- : SiSU_Screen::Ansi.new(@opt.cmd,'XHTML',tool).green_title_hi
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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,@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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- class Scroll
- 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_Viz::Defaults.new
- @tab="\t"
- @trans=SiSU_XML_Munge::Trans.new(@md)
- @sys=SiSU_Env::SystemCall.new
- end
- def songsheet
- pre
- @data=markup(@dal_array)
- post
- publish
- end
- protected
- def embedded_endnotes(dob='')
- 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_TextUtils::Wrap.new(s,70)
- wrap=util.line_wrap
- 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
-).
- gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK
-#{Ax[:tab]*1}<endnote symbol="\\1">
-#{Ax[:tab]*2}\\1 \\2
-#{Ax[:tab]*1}</endnote>
-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=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>
-#WOK
-#)
- @endnotes << wrap
- end
- end
- def xml_head
- metadata=SiSU_Metadata::Summary.new(@md).xhtml_scroll.metadata
- @@xml[:head] << metadata
- end
- def name_tags(dob)
- tags=''
- if defined? dob.tags \
- and dob.tags.length > 0 # insert tags "hypertargets"
- dob.tags.each do |t|
- tags=tags << %{<named id="#{t}" />}
- end
- end
- tags
- end
- def xml_structure(dob,type='norm')
- if dob.is ==:para \
- || dob.is ==:heading
- named=name_tags(dob)
- if dob.is==:heading
- lv=dob.ln
- dob.ln + 2
- else lv=nil
- end
- 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
- 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}">}
- else "#{Ax[:tab]*0}<object>"
- end
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="#{type}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} unless lv # main text, contents, body KEEP
- @@xml[:body] << %{#{Ax[:tab]*1}<text class="h#{lv}">#{named}\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} if lv # main text, contents, body KEEP
- @@xml[:body] << @endnotes.compact.join if @endnotes.length > 0 # main text, endnotes KEEP
- @@xml[:body] << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- @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=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}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- end
- def poem_structure(dob)
- named=name_tags(dob)
- dob=@trans.markup_group(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="verse">#{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 code_structure(dob)
- named=name_tags(dob)
- dob=@trans.markup_group(dob)
- dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').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}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- end
- def table_structure(dob)
- named=name_tags(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}}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- end
- def markup(data)
- @endnotes=[]
- @rcdc=false
- @level,@cont,@copen,@xml_contents_close=[],[],[],[]
- xml_head
- (0..6).each { |x| @cont[x]=@level[x]=false }
- (4..6).each { |x| @xml_contents_close[x]='' }
- data.each do |dob|
- dob=@trans.char_enc.utf8(dob) if @sys.locale =~/utf-?8/i #% utf8
- dob=@trans.markup(dob)
- if @rcdc==false \
- and (dob.obj =~/~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::ParagraphNumber.new(@md,ocn)
- end
- if not @rcdc
- 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
- 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
- else
- if dob.is ==:verse
- poem_structure(dob)
- elsif dob.is ==:group
- group_structure(dob)
- elsif dob.is ==:block
- block_structure(dob)
- elsif dob.is ==:code
- code_structure(dob)
- elsif dob.is ==:table
- table_structure(dob)
- 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]/ \
- 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=FormatTextObject.new(@md,txt_obj)
- format_text.scr_inden_ocn_e_no_paranum
- end
- end
- if dob.obj !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
- end
- else #
- end
- dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
- end
- end
- 6.downto(4) do |x|
- y=x - 1; v=x - 3
- @@xml[:body] << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" if @level[x]==true
- end
- 3.downto(1) do |x|
- y=x - 1
- @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
- end
- end
- def pre
- rdf=SiSU_XML_Tags::RDF.new(@md)
- @@xml[:head],@@xml[:body]=[],[]
- 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}
-#{stylesheet.css_head_xml}
-#{rdf.comment_xml}
-<document>
-WOK
- @@xml[:head] << %{<head>\n\t<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />}
- @@xml[:body] << '<body>'
- end
- def post
- @@xml[:head] << '</head>'
- @@xml[:body] << '</body>'
- @@xml[:close] = '</document>'
- end
- def publish
- content=[]
- content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
- content << @@xml[:owner_details] if @md.stmp =~/\w\w/
- content << @@xml[:tail] << @@xml[:close]
- content=content.flatten.compact
- Output.new(content,@md).xhtml
- @@xml={}
- end
- end
- class Output
- def initialize(data,md)
- @data,@md=data,md
- @file=SiSU_Env::FileOp.new(@md)
- end
- def xhtml
- SiSU_Env::FileOp.new(@md).mkdir
- filename_xml=@file.write_file.xhtml
- @data.each do |str|
- 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,file)
- @md,@file=md,file
- @prog=SiSU_Env::InfoProgram.new
- end
- def xml
- if @prog.tidy !=false
- 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::SystemCall.new(@file,tidyfile)
- tidy.well_formed?
- tell.p_off unless @md.opt.cmd =~/q/
- end
- end
- end
- end
- end
-end
-__END__
-<?xml version="1.0"?>
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
-<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?xml version="1.0" encoding="UTF-16" standalone="no"?>
diff --git a/lib/sisu/v4/xhtml_table.rb b/lib/sisu/v4/xhtml_table.rb
deleted file mode 100644
index 7c3925ae..00000000
--- a/lib/sisu/v4/xhtml_table.rb
+++ /dev/null
@@ -1,102 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xhtml_table.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: shared html parts
-
-=end
-module SiSU_XHTML_Table
- require_relative 'defaults' # defaults.rb
- class TableXHTML
- @@tablehead=0
- @@tablefoot=[] #watch
- def initialize(table)
- @table_obj,@vz=table,SiSU_Viz::Defaults.new
- end
- def table
- table_obj=@table_obj
- if table_obj.obj !~/^<table\s/m
- table_obj=table_rows_and_columns_array(table_obj)
- else p __LINE__; p caller
- end
- table_obj
- end
- def table_rows_and_columns_array(table_obj) # provides basic (x)html table
- table_rows,nr=[],0
- table_obj.obj.split(Mx[:tc_c]).each do |table_row|
- table_row_with_columns=table_row.split(Mx[:tc_p])
- trc,nc=[],0
- table_row_with_columns.each do |c|
- 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.is_a?(Array)) ? trc.flatten.join : trc
- trc=" <tr>#{trc}</tr>\n"
- nr+=1
- table_rows << trc
- end
- table_rows=table_rows.flatten.join
- table_obj.obj=%{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">\n#{table_rows} </table>}
- table_obj
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml.rb b/lib/sisu/v4/xml.rb
deleted file mode 100644
index 106b1ed3..00000000
--- a/lib/sisu/v4/xml.rb
+++ /dev/null
@@ -1,472 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: xml output (sax style) processing
-
-=end
-module SiSU_XML_SAX
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- 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_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::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=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,'XML SAX',tool).green_hi_blue
- : SiSU_Screen::Ansi.new(@opt.cmd,'XML SAX',tool).green_title_hi
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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,@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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- class Scroll
- 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_Viz::Defaults.new
- @trans=SiSU_XML_Munge::Trans.new(@md)
- @sys=SiSU_Env::SystemCall.new
- end
- def songsheet
- pre
- @data=markup(@dal_array)
- post
- publish
- end
- protected
- def embedded_endnotes(dob='')
- 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_TextUtils::Wrap.new(s,70)
- wrap=util.line_wrap
- 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>
-#{Ax[:tab]*3}\\2
-#{Ax[:tab]*2}</note>
-#{Ax[:tab]*1}</endnote>
-WOK
-).
- gsub(/^([*+]\d+)\s+(.+?)\s*\Z/m, <<WOK
-#{Ax[:tab]*1}<endnote symbol="\\1">
-#{Ax[:tab]*2}<symbol>\\1</symbol>
-#{Ax[:tab]*2}<note>
-#{Ax[:tab]*3}\\2
-#{Ax[:tab]*2}</note>
-#{Ax[:tab]*1}</endnote>
-WOK
-).
- gsub(/^([*+]+)\s+(.+?)\s*\Z/m, <<WOK
-#{Ax[:tab]*1}<endnote symbol="\\1.length">
-#{Ax[:tab]*2}<symbol>\\1</symbol>
-#{Ax[:tab]*2}<note>
-#{Ax[:tab]*3}\\2
-#{Ax[:tab]*2}</note>
-#{Ax[:tab]*1}</endnote>
-WOK
-)
- @endnotes << wrap
- end
- end
- def xml_head
- metadata=SiSU_Metadata::Summary.new(@md).xml_sax.metadata
- @@xml[:head] << metadata
- end
- def xml_sc(md='')
- sc=if @md.sc_info
- <<WOK
- <source_control>
- <meta>filename:</meta>
- <sc class="sourcefile">
- #{@md.sc_filename}
- </sc><br />
- <meta>version number:</meta>
- <sc class="number">
- #{@md.sc_number}
- </sc><br />
- <meta>version date:</meta>
- <sc class="date">
- #{@md.sc_date}
- </sc><br />
- </source_control>
-WOK
- else ''
- end
- @@xml[:sc]=sc
- end
- def xml_structure(dob,type='norm')
- if dob.is==:heading
- lv=dob.ln
- dob.ln + 2
- else lv=nil
- end
- 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
- #if defined? dob.obj
- #t_ograph="#{dob.obj}"
- 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}">}
- else "#{Ax[:tab]*0}<object>"
- end
- @@xml[:body] << "#{Ax[:tab]*1}<ocn>#{dob.ocn}</ocn>" if defined? dob.ocn
- @@xml[:body] << if lv; %{#{Ax[:tab]*1}<text class="h#{lv}">\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>}
- else %{#{Ax[:tab]*1}<text class="#{type}">\n#{Ax[:tab]*2}#{wrapped}\n#{Ax[:tab]*1}</text>} # main text, contents, body KEEP
- end
- @@xml[:body] << @endnotes if @endnotes
- ##@@xml[:body] << "#{Ax[:tab]*1}<text>#{dob[@regx,2]}</text>" if dob[@regx,2] # old unwrapped main text, contents, body KEEP
- @@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=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=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}}
- @@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 poem_structure(dob='')
- dob=@trans.markup_group(dob)
- #dob.obj.gsub(/\s\s/,'&#160;&#160;')
- 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}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- end
- def code_structure(dob='')
- dob=@trans.markup_group(dob)
- dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').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}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- end
- def table_structure(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}}
- @@xml[:body] << %{#{Ax[:tab]*2}#{table.table.obj}}
- @@xml[:body] << %{#{Ax[:tab]*1}</text>}
- #@@xml[:body] << %{#{tab*1}</text>}
- @@xml[:body] << "#{Ax[:tab]*0}</object>"
- #@@xml[:body] << %{#{Ax[:tab]*0}<object id="#{ocn}">}
- #@@xml[:body] << %{#{Ax[:tab]*1}#{table}\n#{Ax[:tab]*1}} # unless lv # main text, contents, body KEEP
- #@@xml[:body] << "#{Ax[:tab]*0}</object>"
- #@endnotes=[]
- end
- def markup(data)
- xml_sc(@md)
- @endnotes,@level,@cont,@copen,@xml_contents_close=[],[],[],[],[]
- @rcdc=false
- xml_head
- (0..6).each { |x| @cont[x]=@level[x]=false }
- (4..6).each { |x| @xml_contents_close[x]='' }
- data.each do |dob|
- @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.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::ParagraphNumber.new(@md,ocn)
- end
- if not @rcdc
- if defined? dob.ocn \
- and dob.ocn.to_s =~/\d+/
- 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
- 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
- else
- if dob.is==:verse
- poem_structure(dob)
- elsif dob.is==:group
- group_structure(dob)
- 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
- table_structure(dob)
- 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]/ \
- 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=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=FormatScroll.new(@md,txt_obj)
-# @@xml[:owner_details]=format_scroll.bold_para
- dob.obj=''
- end
- if dob.obj =~/<a name="n\d+">/ \
- and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
- dob.obj=''
- 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=FormatTextObject.new(@md,txt_obj)
- format_text.scr_inden_ocn_e_no_paranum
- end
- end
- else #
- end
- dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
- end
- end
- 6.downto(4) do |x|
- y=x - 1; v=x - 3
- @@xml[:body] << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>" if @level[x]==true
- end
- 3.downto(1) do |x|
- y=x - 1
- @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
- end
- #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)
- @@xml[:head],@@xml[:body]=[],[]
- 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}
-#{stylesheet.css_head_xml}
-#{rdf.comment_xml}
-<document>
-WOK
- @@xml[:head] << '<head>'
- @@xml[:body] << '<body>'
- end
- def post
- @@xml[:head] << @@xml[:sc]
- @@xml[:head] << '</head>'
- @@xml[:body] << '</body>'
- @@xml[:close] = '</document>'
- end
- def publish
- content=[]
- content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
- content << @@xml[:owner_details] if @md.stmp =~/\w\w/
- content << @@xml[:tail] << @@xml[:close]
- content=content.flatten.compact
- Output.new(content,@md).xml
- @@xml={}
- end
- end
- class Output
- def initialize(data,md)
- @data,@md=data,md
- @file=SiSU_Env::FileOp.new(@md)
- end
- def xml
- SiSU_Env::FileOp.new(@md).mkdir
- filename_xml=@file.write_file.xml_sax
- @data.each do |str|
- 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,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.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::SystemCall.new(@file,tidyfile)
- tidy.well_formed?
- tell.p_off unless @md.opt.cmd =~/q/
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml_dom.rb b/lib/sisu/v4/xml_dom.rb
deleted file mode 100644
index 057f8532..00000000
--- a/lib/sisu/v4/xml_dom.rb
+++ /dev/null
@@ -1,543 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_dom.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: xml (dom style) output processing
- ** Notes: tidy -xml dom.xml >> index.tidy
-=end
-module SiSU_XML_DOM
- require_relative 'defaults' # defaults.rb
- include SiSU_Viz
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- 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_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::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=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,'XML DOM',tool).green_hi_blue
- : SiSU_Screen::Ansi.new(@opt.cmd,'XML DOM',tool).green_title_hi
- 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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location 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,@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::Rescued.new($!,$@,@md.opt.cmd,@md.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- end
- class Scroll
- 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_Viz::Defaults.new
- @trans=SiSU_XML_Munge::Trans.new(@md)
- @sys=SiSU_Env::SystemCall.new
- end
- def songsheet
- pre
- @data=markup(@dal_array)
- post
- publish
- end
- protected
- def xml_markup(dob='')
- 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=SiSU_Metadata::Summary.new(@md).xml_dom.metadata
- @@xml[:head] << metadata
- end
- def xml_sc(md='')
- sc=if @md.sc_info
- <<WOK
- <source_control>
- <meta>filename:</meta>
- <sc class="sourcefile">
- #{@md.sc_filename}
- </sc><br />
- <meta>version number:</meta>
- <sc class="number">
- #{@md.sc_number}
- </sc><br />
- <meta>version date:</meta>
- <sc class="date">
- #{@md.sc_date}
- </sc><br />
- </source_control>
-WOK
- else ''
- end
- @@xml[:sc]=sc
- end
- def xml_element(dob,xml_el='',xml_content='',type='norm')
- n=n1=n2=n3=0
- if dob.is==:heading
- lv=dob.ln
- n=dob.ln - 1
- n1=dob.ln
- n2=dob.ln + 1
- n3=dob.ln + 2
- dob.ln - 3
- else lv=nil
- end
- tag=if defined? dob.name and dob.name=~/\S+/
- "\n#{Ax[:tab]*n3}<nametag>#{dob.name}</nametag>"
- else ''
- end
- xml_el ||=''
- @@xml[:body] <<<<WOK
-#{Ax[:tab]*n}#{xml_el}
-#{Ax[:tab]*n1}<heading>
-#{Ax[:tab]*n2}<object id="#{dob.ocn}">
-#{Ax[:tab]*n3}<ocn>#{dob.ocn}</ocn>#{tag}
-#{Ax[:tab]*n3}<text class="#{type}">#{dob.obj}</text>
-#{Ax[:tab]*n2}</object>
-#{Ax[:tab]*n1}</heading>#{xml_content}
-WOK
- if lv==4
- @copen[1]=true
- @copen[2]=@copen[3]=false
- elsif lv==5
- @copen[2]=true
- @copen[3]=false
- elsif lv==6
- @copen[3]=true
- end
- end
- def xml_structure(dob,type='norm')
- n=n1=n2=n3=0
- if dob.is==:heading
- lv=dob.ln
- n=dob.ln - 1
- n1=dob.ln
- n2=dob.ln + 1
- n3=dob.ln + 2
- dob.ln - 3
- else lv=nil
- end
- case lv
- when 1..3
- xml_el="<heading#{lv}>"
- 3.downto(lv) do |x|
- y=x - 1
- if @cont[1] \
- or @cont[2] \
- or @cont[3]
- @@xml[:body] << "#{Ax[:tab]*5}</content>"
- end
- @cont[1]=false if @cont[1]
- @cont[2]=false if @cont[2]
- @cont[3]=false if @cont[3]
- ####### attempt to close contents
- if @copen[3] # 6~
- [3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- @copen[1]=@copen[2]=@copen[3]=false
- elsif @copen[2] # 5~
- [2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- @copen[1]=@copen[2]=@copen[3]=false
- elsif @copen[1] # 4~
- [1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- @copen[1]=@copen[2]=@copen[3]=false
- end
- @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]
- @level[x]=false
- end
- when 4..6
- 6.downto(lv) do |x|
- if @level[x]==true
- @xml_contents_close[x]=''
- end
- end
- cv=lv - 3
- xml_el="<contents#{cv}>"
- xml_content="\n#{Ax[:tab]*5}<content>"
- case lv
- when 4
- @@xml[:body] << "#{Ax[:tab]*5}</content>" if @cont[1]
- if @copen[3]==true # 6~
- [3,2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- elsif @copen[2]==true # 5~
- [2,1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- elsif @copen[1]==true # 4~
- [1].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- end
- @cont[1]=true
- when 5
- if @cont[2] \
- or @cont[1]
- @@xml[:body] << "#{Ax[:tab]*5}</content>"
- end
- if @copen[3]==true #6~
- [3,2].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- elsif @copen[2]==true #5~
- [2].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- end
- @cont[2]=true
- when 6
- if @cont[3] \
- or @cont[2] \
- or @cont[1]
- @@xml[:body] << "#{Ax[:tab]*5}</content>"
- end
- if @copen[3] #6{
- [3].each { |v| @@xml[:body] << "#{Ax[:tab]*n}</contents#{v}>" }
- end
- @cont[3]=true
- end
- end
- xml_el ||=''
- xml_element(dob,xml_el,xml_content,type)
- if lv
- @level[lv]=true
- ((lv+1)..6).each { |x| @level[x]=false }
- end
- end
- def add_to_body(dob,type='norm')
- if defined? dob.obj # main text, contents, body KEEP
- if defined? dob.ocn \
- and dob.ocn
- @@xml[:body] << %{#{Ax[:tab]*6}<object id="#{dob.ocn}">}
- @@xml[:body] << %{#{Ax[:tab]*7}<ocn>#{dob.ocn}</ocn>} if defined? dob.ocn
- end
- #@@xml[:body] << %{#{Ax[:tab]*7}<text class="#{type}">#{dob.obj}</text>}
- #@@xml[:body] << %{#{Ax[:tab]*7}<text class="#{dob.is}">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*7}<text class="#{type}">#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*8}#{dob.obj}#{Ax[:tab]*1}}
- @@xml[:body] << %{#{Ax[:tab]*7}</text>}
- @@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=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=dob.obj.strip
- dob
- end
- def code_structure(dob)
- dob=@trans.markup_group(dob) #decide check & FIX
- dob.obj=dob.obj.gsub(/\s\s/,'&#160;&#160;').strip
- dob
- end
- def table_structure(dob) #tables
- SiSU_XHTML_Shared::TableXHTML.new(dob)
- end
- def markup(data)
- xml_sc(@md)
- @level,@cont,@copen,@xml_contents_close=[],[],[],[]
- @rcdc=false
- type='norm'
- (0..6).each { |x| @cont[x]=@level[x]=false }
- (4..6).each { |x| @xml_contents_close[x]='' }
- xml_head
- data.each do |dob|
- @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.obj =~/Document Information/)
- @rcdc=true
- end
- if dob !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/
- @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::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)
- xml_structure(dob,type)
- dob.obj=x.heading_body1
- elsif dob.ln==2
- type="heading_section_#{dob.ln.to_s}"
- xml_markup(dob)
- xml_structure(dob,type)
- dob.obj=x.heading_body2
- elsif dob.ln==3
- type="heading_section_#{dob.ln.to_s}"
- xml_markup(dob)
- xml_structure(dob,type)
- dob.obj=x.heading_body3
- elsif dob.ln==4
- type="heading_content_#{dob.lv}"
- xml_markup(dob)
- xml_structure(dob,type)
- dob.obj=x.heading_body4
- elsif dob.ln==5
- type="heading_content_#{dob.lv}"
- xml_markup(dob)
- xml_structure(dob,type)
- dob.obj=x.heading_body5
- elsif dob.ln==6
- type="heading_content_#{dob.lv}"
- xml_structure(dob,type)
- dob.obj=x.heading_body6
- end
- else
- dob.ocn
- if dob.is==:verse
- type='verse'
- poem_structure(dob) #redo
- elsif dob.is==:group
- type='group'
- group_structure(dob) #redo
- 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
- type='table'
- table_structure(dob)
- 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]/ \
- 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)
- end
- add_to_body(dob,type)
- 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=FormatScroll.new(@md,txt_obj)
- dob.obj=format_scroll.bold_para
- elsif dob.obj =~/(Owner Details)/
- dob.obj=''
- end
- if dob.obj =~/<a name="n\d+">/ \
- and dob.obj =~/^(-\{{2}~\d+|<!e[:_]\d+!>)/ # -endnote
- dob.obj=''
- 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=FormatTextObject.new(@md,txt_obj)
- format_text.scr_inden_ocn_e_no_paranum
- end
- end
- if dob.obj !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
- end
- else #
- end
- dob.obj=dob.obj.gsub(/#{Mx[:pa_o]}:\S+#{Mx[:pa_c]}/,'') if dob.obj
- end
- end
- @content_flag=true
- 6.downto(4) do |x|
- y=x - 1; v=x - 3
- if @level[x]==true #2004w36 bug fix? watch/test previous logic broke on free.for.all @coontent_flag introduced
- if @content_flag==true
- @@xml[:body] << "#{Ax[:tab]*5}</content>\n#{Ax[:tab]*y}</contents#{v}>"
- @content_flag=false
- else
- @@xml[:body] << "\n#{Ax[:tab]*y}</contents#{v}>"
- end
- end
- end
- 3.downto(1) do |x|
- y=x - 1
- @@xml[:body] << "#{Ax[:tab]*y}</heading#{x}>" if @level[x]==true
- end
- end
- def pre
- rdf=SiSU_XML_Tags::RDF.new(@md)
- 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}
-#{stylesheet.css_head_xml}
-#{rdf.comment_xml}
-<document>
-WOK
- @@xml[:head] << '<head>'
- @@xml[:body] << '<body>'
- end
- def post
- @@xml[:head] << @@xml[:sc]
- @@xml[:head] << '</head>'
- @@xml[:body] << '</body>'
- @@xml[:close] = '</document>'
- end
- def publish
- content=[]
- content << @@xml[:open] << @@xml[:head] << @@xml[:body] << @@xml[:metadata]
- content << @@xml[:owner_details] if @md.stmp =~/\w\w/
- content << @@xml[:tail] << @@xml[:close]
- content=content.flatten.compact
- Output.new(content,@md).xml
- @@xml[:head],@@xml[:body],@@xml[:tail]=[],[],[] # check whether should be nil
- end
- end
- class Output
- include SiSU_Param
- def initialize(data,md)
- @data,@md=data,md
- @file=SiSU_Env::FileOp.new(@md)
- end
- def xml
- SiSU_Env::FileOp.new(@md).mkdir
- filename_xml=@file.write_file.xml_dom
- @data.each do |str|
- 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,file)
- @md,@file=md,file
- @prog=SiSU_Env::InfoProgram.new
- end
- def xml
- if @prog.tidy !=false
- 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::SystemCall.new(@file,tidyfile)
- tidy.well_formed?
- tell.p_off unless @md.opt.cmd =~/q/
- end
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml_fictionbook.rb b/lib/sisu/v4/xml_fictionbook.rb
deleted file mode 100644
index 119f7d78..00000000
--- a/lib/sisu/v4/xml_fictionbook.rb
+++ /dev/null
@@ -1,305 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_fictionbook.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: extract and print an XML rendition of document structure to screen
-
-=end
-module SiSU_XML_Fictionbook
- require_relative 'dal' # dal.rb
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'shared_txt' # shared_txt.rb
- include SiSU_TextUtils
- require_relative 'shared_xml' # shared_xml.rb
- include SiSU_XML_Munge
- include SiSU_Param
- class Source
- def initialize(opt)
- @opt=opt
- @sp=' '
- end
- def read
- begin
- @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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class Scroll <Source
- def initialize(data='',md='')
- @data,@md=data,md
- @trans=SiSU_XML_Munge::Trans.new(@md)
- @file_fictionbook=SiSU_Env::FileOp.new(@md,'fictionbook.xml').mkfile
- end
- def songsheet
- @t='fictionbook'
- @s=['section', #@s=['body',
- 'section',
- 'section',
- 'section',
- 'section',
- 'section',
- 'section'
- ]
- head
- extract_endnotes
- structure
- tail
- end
- def head
- 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
- date_modified=if defined? @md.date.modified; "\n <p>#{@md.date.modified} Last Modified</p>"
- else ''
- end
- head=<<WOK
-<?xml version="1.0" encoding="UTF-8"?>
-<FictionBook xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
-<description>
- <title-info>
- <genre match="100">***</genre>
- <author>
- <first-name>***</first-name>
- <middle-name>***</middle-name>
- <last-name>***</last-name>
- </author>
- <book-title>#{@md.title.full}</book-title>
- <annotation>
- </annotation>
- <date value="#{@md.date}">yyyy</date>
- </title-info>
- <document-info>
- <author>
- <first-name/>
- <last-name/>
- <nickname/>
- </author>
- <program-used>#{version[:project]} #{version[:version]} and #{rb_ver}</program-used>
- <date value="#{version[:date]}">#{version[:date]}</date>
- <src-ocr/>
- <version>1.0</version>
- <history>#{date_available}#{date_modified}
- </history>
- </document-info>
-</description>
-<body>
-WOK
- put(head)
- end
- def extract_endnotes
- @endnotes=[]
- @data.each do |para|
- @endnotes << para.scan(/~\{(.+?)\}~/m)
- end
- @endnotes=@endnotes.flatten
- end
- def endnotes
- @endnotes.each do |endnote|
- endnote=endnote.strip
- endnote=@trans.markup_fictionbook(endnote)
- endnote="<p>#{endnote}</p>"
- util=SiSU_TextUtils::Wrap.new(endnote,80,10)
- endnote=util.line_wrap
- put(endnote)
- end
- end
- def tail
- tail=<<WOK
-</body>
-</FictionBook>
-WOK
- put(tail)
- end
- def markup(para,type='')
- para=para.strip
- para=@trans.markup_fictionbook(para)
- para=if type.empty?; "<p>#{para}</p>"
- else "<#{type}><p>#{para}</p></#{type}>"
- end
- util=SiSU_TextUtils::Wrap.new(para,80,10)
- util.line_wrap
- end
- def put(line)
- @file_fictionbook.puts line
- puts line if @md.opt.cmd =~/V/
- end
- def structure_build_tag_close(lev,h)
- @sp=' '
- case h[0]
- when 1
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- when 2
- put("#{@sp*2}</#{@s[2]}>") if (lev <= 2) and h[2]
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- when 3
- put("#{@sp*3}</#{@s[3]}>") if (lev <= 3) and h[3]
- put("#{@sp*2}</#{@s[2]}>") if (lev <= 2) and h[2]
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- when 4
- put("#{@sp*4}</#{@s[4]}>") if (lev <= 4)
- put("#{@sp*3}</#{@s[3]}>") if (lev <= 3) and h[3]
- put("#{@sp*2}</#{@s[2]}>") if (lev <= 2) and h[2]
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- when 5
- put("#{@sp*5}</#{@s[5]}>") if (lev <= 5)
- put("#{@sp*4}</#{@s[4]}>") if (lev <= 4)
- put("#{@sp*3}</#{@s[3]}>") if (lev <= 3) and h[3]
- put("#{@sp*2}</#{@s[2]}>") if (lev <= 2) and h[2]
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- when 6
- put("#{@sp*6}</#{@s[6]}>") if (lev <= 6)
- put("#{@sp*5}</#{@s[5]}>") if (lev <= 5)
- put("#{@sp*4}</#{@s[4]}>") if (lev <= 4)
- put("#{@sp*3}</#{@s[3]}>") if (lev <= 3) and h[3]
- put("#{@sp*2}</#{@s[2]}>") if (lev <= 2) and h[2]
- put("#{@sp*1}</#{@s[1]}>") if (lev <= 1) and h[1]
- put("</#{@s[0]}>") if (lev==0)
- end
- end
- def structure_build(ds)
- @h=[0,false,false,false]
- put("<#{@s[0]}>")
- ds.each_with_index do |x,i|
- @ef=false
- case x[:lev]
- when /^1/
- structure_build_tag_close(1,@h)
- y="#{@sp*1}<#{@s[1]}>\n#{x[:para]}"
- @h=[1,true,false,false]
- when /^2/
- structure_build_tag_close(2,@h)
- y="#{@sp*2}<#{@s[2]}>\n#{x[:para]}"
- @h=[2,true,true,false]
- when /^0:0/ #endnotes and metadata
- structure_build_tag_close(2,@h)
- y="#{@sp*2}<#{@s[2]}>\n#{x[:para]}"
- @h=[2,true,true,false]
- @ef=true if x[:hdr] =~/u0/
- when /^3/
- structure_build_tag_close(3,@h)
- y="#{@sp*3}<#{@s[3]}>\n#{x[:para]}"
- @h=[3,true,true,true]
- when /^4/
- structure_build_tag_close(4,@h)
- y="#{@sp*4}<#{@s[4]}>\n#{x[:para]}"
- @h[0]=4
- when /^m2/ #metadata
- structure_build_tag_close(4,@h)
- y="#{@sp*4}<#{@s[4]}>\n#{x[:para]}"
- @h[0]=4
- when /^5/
- structure_build_tag_close(5,@h)
- y="#{@sp*5}<#{@s[5]}>\n#{x[:para]}"
- @h[0]=5
- when /^6/
- structure_build_tag_close(6,@h)
- y="#{@sp*6}<#{@s[6]}>\n#{x[:para]}"
- @h[0]=6
- else
- y=if @md.opt.cmd =~/V/; "#{x[:para]}"
- else nil
- end
- end
- put(y) if y
- endnotes if @ef
- end
- structure_build_tag_close(0,@h)
- end
- def structure
- data=@data
- @ds=[]
- c=0
- data.each do |para|
- rgx_headers=/#{Mx[:id_o]}~(\d+);((?:\w|[0-6]:)\d+);(\w\d+)#{Mx[:id_c]}/ #fix
- if para =~rgx_headers
- x=(rgx_headers).match(para)
- if x[3] =~/^[hum]\d+/
- @ds[c]={}
- @ds[c][:ocn]=x[1]
- @ds[c][:lev]=x[2]
- @ds[c][:hdr]=x[3]
- @ds[c][:para]=markup(para,'title')
- else
- @ds[c]={}
- @ds[c][:para]=markup(para) if @md.opt.cmd =~/V/
- end
- c+=1
- end
- end
- structure_build(@ds)
- @ds
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml_format.rb b/lib/sisu/v4/xml_format.rb
deleted file mode 100644
index 316a4102..00000000
--- a/lib/sisu/v4/xml_format.rb
+++ /dev/null
@@ -1,1421 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_format.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: xml template
- ** Notes: tidy -xml index.xml >> index.tidy
-
-=end
-module SiSU_XML_Format
- require_relative 'param' # param.rb
- include SiSU_Param
- include SiSU_Viz
- class ParagraphNumber
- def initialize(md,paranum)
- @md=md
- @paranum=(paranum ? (/(\d+)/m.match(paranum)[1]) : nil)
- end
- def display
- p_num_display=if @paranum
- @paranum.gsub(/(\d+)/,
- '<font size="1" color="#777777">' +
- '&nbsp;&nbsp;\1</font>')
- else ''
- end
- p_num_display
- end
- def name
- p_num_name=@paranum.gsub(/(\d+)/,'<a name="\1"></a>')
- p_num_name
- end
- def goto
- p_num_goto=@paranum.gsub(/(\d+)/,'<a href="#\1">')
- p_num_goto
- end
- end
- 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
- # DublinCore 1 - title
- @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="#{seg_name}#{@md.title.full}" />\n}
- end
- if defined? @md.creator.author \
- and @md.creator.author # DublinCore 2 - creator/author (author)
- @rdf_author=%{ dc.author="#{@md.creator.author}"\n}
- @author=%{<meta name="dc.author" content="#{@md.creator.author}" />\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}
- @subject=%{<meta name="dc.subject" content="#{@md.classify.subject}" />\n}
- end
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/ # DublinCore 4 - description
- @rdf_description=%{ dc.description="#{@md.notes.description}"\n}
- @description=%{<meta name="dc.description" content="#{@md.notes.description}" />\n}
- end
- if defined? @md.publisher \
- and @md.publisher=~/\S+/ # DublinCore 5 - publisher (current copy published by)
- @rdf_publisher=%{ dc.publisher="#{@md.publisher}"\n}
- @publisher=%{<meta name="dc.publisher" content="#{@md.publisher}" />\n}
- end
- if defined? @md.creator.contributor \
- and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor
- @rdf_contributor=%{ dc.contributor="#{@md.creator.contributor}"\n}
- @contributor=%{<meta name="dc.contributor" content="#{@md.creator.contributor}" />\n}
- end
- if defined? @md.date.published \
- and @md.date.published # 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}
- end
- if defined? @md.date.created \
- and @md.date.created # 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_created_scheme} />\n}
- end
- if defined? @md.date.issued \
- and @md.date.issued # 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_issued_scheme} />\n}
- end
- if defined? @md.date.available \
- and @md.date.available # 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_available_scheme} />\n}
- end
- if defined? @md.date.valid \
- and @md.date.valid # 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_valid_scheme} />\n}
- end
- if defined? @md.date.modified \
- and @md.date.modified # 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_modified_scheme} />\n}
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/ # DublinCore 14 - coverage
- @rdf_coverage=%{ dc.coverage="#{@md.notes.coverage}"\n}
- @coverage=%{<meta name="dc.coverage" content="#{@md.notes.coverage}" />\n}
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/ # DublinCore 13 - relation
- @rdf_relation=%{ dc.relation="#{@md.notes.relation}"\n}
- @relation=%{<meta name="dc.relation" content="#{@md.notes.relation}" />\n}
- end
- if defined? @md.notes.type \
- and @md.notes.type # DublinCore 8 - type (genre eg. report, convention etc)
- @rdf_type=%{ dc.type="#{@md.notes.type}"\n}
- @type=%{<meta name="dc.type" content="#{@md.notes.type}" />\n}
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/ # DublinCore 9 - format (use your mime type)
- @rdf_format=%{ dc.format="#{@md.notes.format}"\n}
- @format=%{<meta name="dc.format" content="#{@md.notes.format}" />\n}
- end
- #if defined? @md.identifier.sisupod \
- #and @md.identifier.sisupod=~/\S+/ # DublinCore 10 - identifier (your identifier, could use urn which is free)
- # @rdf_identifier=%{ dc.identifier="#{@md.identifier.sisupod}"\n}
- # @identifier=%{<meta name="dc.identifier" content="#{@md.identifier.sisupod}" />\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}
- @source=%{<meta name="dc.source" content="#{@md.source}" />\n}
- end
- if defined? @md.original.language \
- and @md.original.language=~/\S+/ # DublinCore 12 - language (English)
- @rdf_language=%{ dc.language="#{@md.original.title}"\n}
- @language=%{<meta name="dc.language" content="#{@md.language[:name]}" />\n}
- end
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/ # DublinCore 15 - rights
- @rdf_rights=%{ dc.rights="#{@md.rights.all}"\n}
- @rights=%{<meta name="dc.rights" content="#{@md.rights.all}" />\n}
- end
- @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_Viz::Defaults.new #margin,paragraph,table,banner,url,png,txt,color,font,nav_txt,nav_png,credits,js,php
- @index='index'
- end
- def table_close
- '</font> </td></tr></table>'
- end
- def toc_head
- <<WOK
-<html>
-<head>
-<title>#{@md.html_title}</title>
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <rdf:Description
-#{@rdfurl}
-#{@rdf_title}
-#{@rdf_subtitle}
-#{@rdf_author}
-#{@rdf_subject}
-#{@rdf_description}
-#{@rdf_publisher}
-#{@rdf_contributor}
-#{@rdf_date}
-#{@rdf_date_created}
-#{@rdf_date_issued}
-#{@rdf_date_available}
-#{@rdf_date_valid}
-#{@rdf_date_modified}
-#{@rdf_type}
-#{@rdf_format}
-#{@rdf_identifier}
-#{@rdf_source}
-#{@rdf_language}
-#{@rdf_relation}
-#{@rdf_coverage}
-#{@rdf_rights}
- />
-</rdf:RDF>
-#{@full_title}
-#{@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}
-#{@png.ico}
-#{@txt.generator}
-#{@js.head}
-\n</head>
-#{@color.body}
-#{@font.css_table_file}
-<a name="top"></a>
-<a name="up"></a>
-<a name="start"></a>
-#{@js.top}
-WOK
- end
- end
- class FormatTextObject
- attr_accessor :md,:txt,:format,:paranum,:p_num,:para_id,:headname,:font
- def initialize(md,dob)
- @md,@dob=md,dob
- if @dob[:ocn]=~/\d+/
- @paranum=/(\d+)/m.match(@dob[:ocn])[1]
- @headname=''
- @headname=%{<a name="h#{dob.name}"></a>} if defined? dob.name
- @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_Viz::Defaults.new
- end
- def scr_endnote_body
- "<endnote>#{@txt}</endnote> "
- end
- end
- class FormatScroll < FormatTextObject
- def initialize(md,dob)
- super(md,dob)
- end
- def heading_body
- %{<p class="norm">#{@p_num.name}#{@headname}#{@dob.obj} </p>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body1
- %{<h1 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h1>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body2
- %{<h2 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h2>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body3
- %{<h3 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h3>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body4
- %{<h4 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h4>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body5
- %{<h5 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h5>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- def heading_body6
- %{<h6 class="norm">#{@p_num.name}#{@headname}#{@dob.obj}</h6>} +
- %{<p class="paranum"><font size="1" color="#777777">&nbsp;&nbsp;#{@dob.ocn}</font></p>\n}
- end
- end
- class ParagraphNumber
- def initialize(md,ocn)
- @md,@ocn=md,ocn.to_s
- @ocn ||=''
- end
- def ocn_display
- @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}">&nbsp;</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}">&nbsp;</label>})
- end
- end
- def name
- %{<a name="#{@ocn}"></a>}
- end
- def id #w3c? "tidy" complains about numbers as identifiers ! annoying
- %{id="o#{@ocn}"}
- end
- def goto
- %{<a href="##{@ocn}">}
- end
- end
- class HeadInformation
- include SiSU_Viz
- attr_reader :md,:sfx,:pdf,:rdf,:vz
- def initialize(md)
- @md=md
- @rdf=SiSU_XML_Tags::RDF.new(md)
- # DublinCore 1 - title
- @vz=SiSU_Viz::Defaults.new
- @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'
- @metalink='#metadata'
- @tocband_scroll,@tocband_segtoc=nil,nil
- end
- def doc_type
- %{<!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">\n}
- end
- def table_close
- %{ </font>
-#{@vz.table_close}}
- end
- def html_close #moved
- %{</body>
-</html>}
- end
- end
- class XML
- end
- class HeadToc < HeadInformation
- def initialize(md)
- super(md)
- @md=md
- @tocband_scroll,@tocband_segtoc=make_scroll,make_seg
- end
- def scroll_head_navigation_band
- pdf=if @md.programs[:pdf]
- <<WOK
-<td align="center" width="60%">
- #{make_seg_scroll_pdf}
-</td>
-WOK
- else ''
- end
- %{<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 width="20%">
- &nbsp;
-#{@vz.table_close}
-<p />}
- end
- def concordance_navigation_band(type='')
- if type=~/pdf/
- @tocband_concordance=make_concordance
- end
- %{<table summary="concordance navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}>
-<tr><td width="20%">
- #{@vz.banner_band}
-</td>
-<td width="60%" align="center">
- #{@tocband_concordance}
-</td>
-<td width="20%" align="right">
- &nbsp;<a href="index.html" target="_top" alt="-&gt;">
- #{@vz.png_nav_toc}
- </a>&nbsp;
-#{@vz.table_close}
-<p />}
- end
- def seg_head_navigation_band(type='')
- if type=~/pdf/
- @tocband_segtoc=make_scroll_seg_pdf
- end
- firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top" alt="-&gt;">
- #{@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%">
- #{@vz.banner_band}
-</td>
-<td width="60%" align="center">
- #{@tocband_segtoc}
-</td>
-<td width="20%" align="right">
- &nbsp;#{firstseg}&nbsp;
-#{@vz.table_close}
-<p />}
- end
- def seg_head_navigation_band_bottom(type='')
- if type=~/pdf/
- @tocband_segtoc=make_scroll_seg_pdf
- end
- firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top" alt="-&gt;">
- #{@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%">
- &nbsp;
-</td>
-<td width="60%" align="center">
- #{@tocband_segtoc}
-</td>
-<td width="20%" align="right">
- &nbsp;#{firstseg}&nbsp;
-#{@vz.table_close}
-<p />}
- end
- def make_seg_scroll_pdf
- wgt=Widget.new(@md)
- scroll=%{<td align="center" bgcolor=#{@vz.color_band2}>
- #{@vz.nav_txt_doc_link}
-</td>
-}
- %{<table summary="toc segment and scroll with pdf" border="0" cellpadding="3" cellspacing="0">
-<tr>
- #{scroll}
- #{wgt.seg(@vz.nav_txt_toc_link)}#{wgt.pdf}#{wgt.odf}
- #{wgt.concordance(@vz.nav_txt_concordance)}
- #{wgt.manifest}
- #{wgt.search}
- #{wgt.home}
-</tr></table>}
- end
- def make_scroll_seg_pdf
- seg=''
- wgt=Widget.new(@md)
- seg=%{<td align="center" bgcolor=#{@vz.color_band2}>
- #{@vz.nav_txt_toc_link}
-</td>
-}
- %{<table summary="toc scroll and segment with pdf" border="0" cellpadding="3" cellspacing="0">
-<tr>
- #{seg}
- #{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 make_concordance
- 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>
- <title>
- #{@md.html_title}
- </title>
-<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
-#{@rdf.rdftoc}
-#{@rdf.metatag_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>}
- end
- def links_guide_open(type='horizontal')
- if type=='vertical'; links_guide_vertical_open
- else links_guide_horizontal_open
- end
- end
- def links_guide_close #(type='horizontal')
- insert=''
- insert=if @md.sfx_src =~/s?/
- link='http://sisudoc.org' #get from defaults
- url='sisudoc.org'
- insert= %{
- <li class="ref">
- <a href="#{link}" target="_top">
- #{url}
- </a>
- </li>
- </ul>
-</div>
-}
- end
- %{ #{insert}
-<!- quick ref -!>}
- end
- def prefix_a
- end
- def rights
- rights=@md.rights.copyright.all.gsub(/^\s*Copyright\s+\(C\)/,'Copyright <sup>&copy;</sup>&nbsp;')
- %{<p class="small_left">Rights: #{rights}</p>
-<p />}
- end
- def prefix_b
- %{<p class="small_left">Prefix: #{@md.prefix_b}<p />}
- end
- def scroll_head_title_banner_open
- %{<center>
-#{@md.icon}
-</center>
-#{@vz.banner_instrument_cover_band_scr}}
- end
- def seg_head_title_banner_open
- %{<center>
- #{@md.icon}
-</center>
-#{@vz.banner_instrument_cover_band_seg}}
- end
- def make_scroll
- concord=concordance_link(@vz.nav_txt_concordance)
- %{<table summary="toc scroll" border="0" cellpadding="3" cellspacing="0">
-<tr><td align="center" bgcolor="white" border="0">
- #{@vz.nav_txt_doc_link}
-</td>
-<td align="center" bgcolor="white">
- #{concord}
-#{@vz.table_close}}
- end
- def make_seg
- concord=concordance_link(@vz.nav_txt_concordance)
- %{<table summary="toc segment" border="0" cellpadding="3" cellspacing="0">
-<tr><td align="center" bgcolor="white">
- #{@vz.nav_txt_toc_link}
-</td>
-<td align="center" bgcolor="white">
- <font size=2>
- #{concord}
-#{@vz.table_close}}
- end
- def manifest #check structure
- manifest=manifest_link(@vz.nav_txt_manifest)
- %{#{@vz.margin_txt_3}
- #{@vz.paragraph_font_small}
- #{manifest}
- </font>
-#{@vz.table_close}}
- end
- def concordance #check structure
- concord=concordance_link(@vz.nav_txt_concordance)
- %{#{@vz.margin_txt_3}
- #{@vz.paragraph_font_small}
- #{concord}
- </font>
-#{@vz.table_close}}
- end
- def metadata
- %{#{@vz.margin_css}
- <h4 class="toc">
- <a href="#{@metalink}">
- <i>MetaData</i>
- </a>
- </h4>
-#{@vz.table_close}}
- end
- def seg_tail
- %{
-<div class="main_column">
-<p>&nbsp;<p>
-<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>&nbsp;</p>
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-</div>
-</div>
-}
- end
- def scroll_tail #debug
- nav=scroll_head_navigation_band
- %{
-<div class="main_column">
-#{nav}
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-</div>
-</div>
-}
- end
- def seg_navigation_tail #this is a bug area, look up and "tidy"
- #nav=scroll_head_navigation_band
- %{
-<div class="main_column">
-<p>&nbsp;</p>
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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>
-</div>
-</div>
-</div>
-}
- end
- end
- class HeadSeg < HeadInformation
- def initialize(md) #(md='')
- super(md)
- end
- def head
- %{#{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.rdfseg}
-#{@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>}
- 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="#{@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="#{@index}#{@md.lang_code_insert}#{Sfx[:xhtml]}" target="_top">
- #{@vz.png_nav_dot_toc}
- </a>
-</td>
-<td align="right">
- <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}}
- end
- def toc_nav(f_pre=false,f_nxt=false,use=1)
- pre=nxt=''
- toc=%{<td align="center" bgcolor=#{@vz.color_band1}>
- <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="#{@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="#{@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
- %{<table summary="segment navigation pre/next" border="0" cellpadding="3" cellspacing="0">
-<tr>
-#{pre}
-#{toc}
-#{nxt}
-<td>
-#{@vz.table_close}}
- end
- def toc_next2
- toc_nav(false,true).dup
- end
- def toc_pre_next2
- toc_nav(true,true).dup
- end
- def toc_pre2
- toc_nav(true,false,2).dup
- end
- def doc_types #used in seg_nav_band ###
- wgt=Widget.new(@md)
- #dir=SiSU_Env::InfoEnv.new(@md.fns)
- 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 header_advert_local_1
- dir=SiSU_Env::InfoEnv.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[:xhtml]}" 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 header_advert_local_2
- dir=SiSU_Env::InfoEnv.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[:xhtml]}" 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 header_advert_external
- dir=SiSU_Env::InfoEnv.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[:xhtml]}" 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">
-#{@vz.credits_splash}
-#{@vz.credits_sisu}
-<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" id="credits"></a>
-</div></div>
-}
- end
- def navigation_band(segtocband,seg_table_top_control) #change name to navigaion_band_banner
- %{<table summary="segment navigation band with banner" bgcolor=#{@vz.color_band1} width="100%"><tr>
-<td width="20%" align="left">
-#{@vz.banner_band}
-</td>
-<td width="60%" align="center">
- #{doc_types}
-</td>
-<td width="20%" align="right">
- #{segtocband}
-</td></tr>
-</table>
-#{seg_table_top_control}}
- 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>
-}
- end
- def endnote_mark
-%{
-<p class="center" id="endnotes">
- <hr class="endnote" />
-</p>}
- end
- def endnote_section_open
-%{
-<div class="endnote">
-}
- end
- def endnote_section_close
-%{
-</div>
-} #revisit
- end
- def head
- %{#{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.rdfseg}
-#{@rdf.metatag_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>}
- end
- def title_banner(title,subtitle,creator)
- %{
-<div class="summary">
- <p class="tiny">
- #{title}
- </p>
- <p class="tiny">
- #{subtitle}
- </p>
- <p class="tiny">
- #{creator}
- </p>
- <p class="tiny">
- copy @
- <a href="#{@vz.url_home}">
- #{@vz.txt_home}
- </a>
- </p>
-</div>
-}
- end
- end
- class HeadScroll < HeadToc
- def initialize(md) #(md='')
- super(md)
- end
- def toc_owner_details
- %{#{@vz.margin_txt_3}
-#{@vz.paragraph_font_small}
- <a href="#owner.details">
- Owner Details
- <font size="1" color="#777777">
- &nbsp;&nbsp;&nbsp;
- </font>
- </a>
- </font>
-#{@vz.table_close}}
- end
- def table
- %{<table summary="scroll table" width=#{@vz.table_width_1} border="0" bgcolor="white" cellpadding="0">
-<tr><th width=#{@@indent['level_1']} align="right">
-</th>
-<td valign="top">
-#{@vz.paragraph_txt}}
- end
- def table1
- %{<table summary="scroll table1" width=#{@vz.table_width_1} border="0" cellpadding=#{@vz.table_cellpad_box} #{@vz.color_color_table1} align="justify">
-<tr><td valign="top">
-#{@vz.paragraph_txt}}
- end
- def table2
- %{<table summary="scroll table2" width=#{@vz.table_width_1} border="0" cellpadding=#{@vz.table_cellpad_box} #{@vz.color_color_table2} align="justify">
-<tr><td valign="top">
-#{@vz.paragraph_txt}}
- end
- end
- class FormatTextObject
- @vz=SiSU_Viz::Defaults.new
- 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.is_a?(Hash)
- @txt =t_o[:txt] || nil
- @ocn =t_o[:ocn] || nil
- @ocn_display =t_o[:ocn_display] || nil
- @headname =t_o[:headname] || nil
- @trailer =t_o[:trailer] || nil
- @endnote_part_a =t_o[:endnote_part_a] || nil
- @endnote_part_b =t_o[:endnote_part_b] || nil
- @lnk_url =t_o[:lnk_url] || nil
- @lnk_txt =t_o[:lnk_txt] || nil
- @format =t_o[:format] || nil
- @target =t_o[:target] || nil #occasionally passed but not used
- elsif t_o.class.inspect =~/Object/
- @txt=if defined? t_o.obj; t_o.obj
- else nil
- end
- @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
- else nil
- end
- else
- if @md.opt.cmd =~/M/
- p __FILE__ << ':' << __LINE__.to_s
- p t_o.class
- p caller
- end
- end
- if defined? @t_o.ocn
- ocn=((@t_o.ocn.to_s =~/\d+/) ? @t_o.ocn : nil)
- @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]}/
- headname=$1 #format[/\d~(\S+)/m,1]
- @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
- end
- end
- @dob=t_o if defined? t_o.is
- @vz=SiSU_Viz::Defaults.new
- end
- def endnote_body
- %{
-<p class="endnote">
- #{@txt}
-</p>
-}
- end
- def endnote_body_indent
- %{
- <p class="endnote_indent">
- #{@txt}
- </p>
-}
- end
- def no_paranum
- %{
-<div class="substance">
- <label class="ocn">&nbsp;</label>
- <p class="norm">
- #{@txt}
- </p>
-</div>
-}
- end
- def para_form_css(tag,attrib) # 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}>
- #{@txt}
- </#{tag}>#{ulc}
-</div>
-}
- end
- def para
- para_form_css('p','norm')
- end
- def code
- para_form_css('p','code')
- end
- def center
- para_form_css('p','center')
- end
- def bold
- para_form_css('p','bold')
- end
- def bullet
- para_form_css('li','bullet')
- end
- def format(tag,attrib)
- para_form_css(tag,attrib)
- end
- def heading_normal(tag,attrib)
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name}
- #{@headname}#{@txt}
- </#{tag}>
-</div>
-}
- end
- def heading_body
- heading_normal('p','norm')
- end
- def heading_body1
- heading_normal('h1','norm')
- end
- def heading_body2
- heading_normal('h2','norm')
- end
- def heading_body3
- heading_normal('h3','norm')
- end
- def heading_body4
- heading_normal('h4','norm')
- end
- def heading_body5
- heading_normal('h5','norm')
- end
- def heading_body6
- heading_normal('h6','norm')
- end
- def title_header(tag,attrib)
- %{
-<div class="content">
-<#{tag} class="#{attrib}">
- #{@txt}
- </#{tag}>
-</div>
-}
- end
- def title_header1
- title_header('h1','tiny')
- end
- def title_header2
- title_header('h2','tiny')
- end
- def title_header3
- title_header('h3','tiny')
- end
- def title_header4
- ''
- end
- def title_header4_old
- %{
-<div class="substance">
- <label class="ocn">&nbsp;</label>
- <h4 class="banner">
- #{@txt}
- </h4>
-</div>
-}
- end
- def dl #check :trailer
- "<dl><b>#{@txt}</b> #{@trailer}</dl>"
- end
- def table_css_end #<!TZ!>
- '</table>
- </p>
- </div>'
- end
- def gsub_body
-#fix
- @txt=case @txt
- when /^\s*\((i+|iv|v|vi+|ix|x|xi+)\)/
- @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>').
- 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>')
- when /^\s*[A-Z]\.\s/
- @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>')
- else @txt
- end
- end
- def bold_para
- %{#{@vz.margin_txt_0}
- <p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- &nbsp;&nbsp;&nbsp;
-#{@vz.table_close}}
- end
- def bold_header
- @txt=@txt.gsub(/[1-9]~(\S+)/,'<a name="\1"></a>').
- gsub(/[1-9]~/,'')
- %{<p class="bold">
- #{@txt}
- </p>
-#{@vz.margin_num_css}
- &nbsp;&nbsp;&nbsp;
-#{@vz.table_close}}
- end
- def toc_head_copy_at
- %{<p class="center">#{@txt}</p>\n}
- end
- def center
- %{<p class="center">#{@txt}</p>\n}
- end
- def bold
- %{<p class="bold">#{@txt}</p>\n}
- end
- def center_bold
- %{<p class="centerbold">#{@txt}</p>\n}
- end
- end
- class FormatScroll < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- @vz=SiSU_Viz::Defaults.new
- end
- end
- class FormatSeg < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- end
- def navigation_toc_lev1_advert
- %{#{@banner.home_button}\n
-<center>
-#{@txt}
-#{@two}
-</a></center><p />}
- end
- def navigation_toc_lev1
- %{#{@banner.nav_toc}}
- end
- def navigation_toc_lev2 #change bold use css
- %{<p />
-<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
- %{<p />
-<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.empty? #you may wish to reconsider, sends to 'doc' where no segment info # Sfx[:html] or Sfx[:xhtml] ?
- %{
- <p class="endnote">
- #{@endnote_part_a}#{fn}#{@md.lang_code_insert}#{Sfx[:html]}#{@endnote_part_b}
- </p>
-}
- end
- def subtoc_lev(tag,attrib)
- txt=if @txt \
- and @txt =~/<\/?i>|<a\s+name="\S+?">/mi
- @txt.gsub(/<\/?i>|<a\s+name="\S+?">/mi,'') #removes name markers from subtoc, go directly to substantive text
- else @txt
- end
- note=''
- if txt =~/(#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}\s*)/m
- note=$1
- 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+">&nbsp;<sup>\d+<\/sup>&nbsp;/m,'')
- end
- %{<#{tag} class="#{attrib}">
- <a href="##{@ocn}"><i>#{txt}</i></a> #{note}
- </#{tag}>}
- end
- def subtoc_lev5
- subtoc_lev('h5','subtoc') if @txt
- end
- def subtoc_lev6
- subtoc_lev('h6','subtoc') if @txt
- end
- #% para sisu
- def header_sub(tag,attrib)
- @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}
- <#{tag} class="#{attrib}" #{@p_num.id}>#{@p_num.name} #{@headname}
- #{@txt}
- </#{tag}>
-</div>
-}
- end
- def header5
- header_sub('p','bold')
- end
- def header6
- header_sub('p','bold')
- end
- def header4
- %{
-<div class="substance">
- #{@p_num.ocn_display}
- <h1 class="norm" #{@p_num.id}>#{@p_num.name}
- #{@t_o[:format]}
- #{@txt}
- </h1>
-</div>
-}
- end
- def navigation_header4
- %{<table summary="navigation segment header 4" width=100% bgcolor="#08163f" border="0">
-<tr><td align="center">
-<p class="bold">
- #{@txt}
-</p>
-#{@vz.table_close}}
- end
- def navigation_header5
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_header6
- %{<p class="bold">
- #{@txt}
-</p>}
- end
- def navigation_center
- "<center>#{@txt}</center>"
- end
- end
- class FormatToc < FormatTextObject
- def initialize(md,txt)
- super(md,txt)
- end
- def links_guide
- %{ <li class="doc">
- <a href="#{@lnk_url}" target="_top">
- #{@lnk_txt}
- </a>
- </li>
-}
- end
- def lev(tag,attrib)
- if @txt
- %{<#{tag} class="#{attrib}">
- #{@txt}
- </#{tag}>
-}
- else ''
- end
- end
- def lev1
- lev('h1','toc')
- end
- def lev2
- lev('h2','toc')
- end
- def lev3
- lev('h3','toc')
- end
- def lev4
- lev('h4','toc')
- end
- def lev5
- lev('h5','toc')
- end
- def lev6
- lev('h6','toc')
- end
- 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
- class XML
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml_md_oai_pmh_dc.rb b/lib/sisu/v4/xml_md_oai_pmh_dc.rb
deleted file mode 100644
index 1df57ccc..00000000
--- a/lib/sisu/v4/xml_md_oai_pmh_dc.rb
+++ /dev/null
@@ -1,234 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_md_oai_pmh_dc.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: summary of generated outputs and metadata
-
-=end
-module SiSU_XML_Metadata
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- require_relative 'param' # param.rb
- include SiSU_Param
- class OAI_PMH
- def initialize(opt)
- @md=SiSU_Param::Parameters.new(opt).get
- @oai_pmh=[]
- end
- def read
- output
- end
- def pre
-<<WOK
-<?xml version="1.0" encoding="UTF-8"?>
-<oai_dc:dc
- xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
- http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
-WOK
- end
- def body
- if defined? @md.title.full \
- and @md.title.full=~/\S+/ # DublinCore 1 - title
- @oai_pmh << %{ <dc:title xml:lang="en">#{@md.title.full}</dc:title>\n}
- end
- if defined? @md.creator.author \
- and @md.creator.author=~/\S+/ # DublinCore 2 - creator/author (author)
- txt=meta_content_clean(@md.creator.author)
- @oai_pmh << %{ <dc:author>#{txt}</dc:author>\n}
- end
- if defined? @md.classify.subject \
- and @md.classify.subject=~/\S+/ # DublinCore 3 - subject (us library of congress, eric or udc, or schema???)
- txt=meta_content_clean(@md.classify.subject)
- @oai_pmh << %{ <dc:subject>#{txt}</dc:subject>\n}
- end
- if defined? @md.classify.keywords \
- and @md.classify.keywords=~/\S+/
- txt=meta_content_clean(@md.classify.keywords)
- @oai_pmh << %{ <dc:keywords>#{txt}</dc:keywords>\n}
- end
- if @md.publisher # DublinCore 5 - publisher (current copy published by)
- txt=meta_content_clean(@md.publisher)
- @oai_pmh << %{ <dc:publisher>#{txt}</dc:publisher>\n}
- end
- if defined? @md.creator.contributor \
- and @md.creator.contributor=~/\S+/ # DublinCore 6 - contributor
- txt=meta_content_clean(@md.creator.contributor)
- @oai_pmh << %{ <dc:contributor>#{txt}</dc:contributor>\n}
- end
- if defined? @md.date.published \
- and @md.date.published=~/\S+/ # DublinCore 7 - date year-mm-dd
- @oai_pmh << %{ <dc:date>#{@md.date.published}</dc:date>\n}
- end
- if defined? @md.date.created \
- and @md.date.created=~/\S+/ # DublinCore 7 - date.created
- @oai_pmh << %{ <dc:date_created>#{@md.date.created}</dc:date_created>\n}
- end
- if defined? @md.date.issued \
- and @md.date.issued=~/\S+/ # DublinCore 7 - date.issued
- @oai_pmh << %{ <dc:date_issued>#{@md.date.issued}</dc:date_issued>\n}
- end
- if defined? @md.date.available \
- and @md.date.available=~/\S+/ # DublinCore 7 - date.available
- @oai_pmh << %{ <dc:date_available>#{@md.date.available}</dc:date_available>\n}
- end
- if defined? @md.date.valid \
- and @md.date.valid=~/\S+/ # DublinCore 7 - date.valid
- @oai_pmh << %{ <dc:date_valid>#{@md.date.valid}</dc:date_valid>\n}
- end
- if defined? @md.date.modified \
- and @md.date.modified=~/\S+/ # DublinCore 7 - date.modified
- @oai_pmh << %{ <dc:date_modified>#{@md.date.modified}</dc:date_modified>\n}
- end
- if defined? @md.notes.description \
- and @md.notes.description=~/\S+/ # DublinCore 4 - description
- txt=meta_content_clean(@md.notes.description)
- @oai_pmh << %{ <dc:description>#{txt}</dc:description>\n}
- end
- if defined? @md.notes.coverage \
- and @md.notes.coverage=~/\S+/ # DublinCore 14 - coverage
- txt=meta_content_clean(@md.notes.coverage)
- @oai_pmh << %{ <dc:coverage>#{txt}</dc:coverage>\n}
- end
- if defined? @md.notes.relation \
- and @md.notes.relation=~/\S+/ # DublinCore 13 - relation
- txt=meta_content_clean(@md.notes.relation)
- @oai_pmh << %{ <dc:relation>#{txt}</dc:relation>\n}
- end
- if defined? @md.notes.type \
- and @md.notes.type=~/\S+/ # DublinCore 8 - type
- txt=meta_content_clean(@md.notes.type)
- @oai_pmh << %{ <dc:type>#{txt}</dc:type>\n}
- end
- if defined? @md.notes.format \
- and @md.notes.format=~/\S+/ # DublinCore 9 - format
- txt=meta_content_clean(@md.notes.format)
- @oai_pmh << %{ <dc:format>#{txt}</dc:format>\n}
- end
- #if defined? @md.identifier.sisupod \
- #and @md.identifier.sisupod=~/\S+/ # DublinCore 10 - identifier
- # txt=meta_content_clean(@md.identifier.sisupod)
- # @oai_pmh << %{ <dc:identifier>#{txt}</dc:identifier>\n}
- #end
- if defined? @md.original.source \
- and @md.original.source=~/\S+/ # DublinCore 11 - source
- txt=meta_content_clean(@md.original.source)
- @oai_pmh << %{ <dc:source>#{txt}</dc:source>\n}
- end
- if defined? @md.title.language \
- and @md.title.language=~/\S+/ # DublinCore 12 - language (English)
- @oai_pmh << %{ <dc:language>#{@md.title.language}</dc:language>\n}
- end
- if defined? @md.original.language \
- and @md.original.language=~/\S+/
- @oai_pmh << %{ <dc:language>#{@md.original.language}</dc:language>\n}
- end
- if defined? @md.rights.all \
- and @md.rights.all=~/\S+/ # DublinCore 15 - rights
- txt=meta_content_clean(@md.rights.all)
- @oai_pmh << %{ <dc:rights>#{txt}</dc:rights>\n}
- end
- @oai_pmh
- end
- def meta_content_clean(content='')
- unless content.nil?
- content=content.tr('"',"'")
- end
- content
- end
- def post
- '</oai_dc:dc>'
- end
- def output
- 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
- end
- oai_pmh << post
- end
- end
-end
-__END__
-http://www.openarchives.org/pmh/
-http://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm#dublincore
-http://es.dublincore.org/documents/usageguide/elements.shtml
-http://dublincore.org/documents/dces/
-see also http://dublincore.org/documents/dcmes-xml/
-#http://www.openarchives.org/OAI/2.0/openarchivesprotocol.htm#dublincore
-#sample implementation, e.g. 2
-<?xml version="1.0" encoding="UTF-8"?>
-<oai_dc:dc
- xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
- http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
- <dc:title xml:lang="en">Grassmann's space analysis</dc:title>
- <dc:author>Hyde, E. W. (Edward Wyllys)</dc:author>
- <dc:subject>LCSH:Ausdehnungslehre; LCCN QA205.H99</dc:subject>
- <dc:publisher>J. Wiley &amp; Sons</dc:publisher>
- <dc:date>Created: 1906; Available: 1991</dc:date>
- <dc:type>text</dc:type>
- <dc:identifier>http://resolver.library.cornell.edu/math/1796949
- </dc:identifier>
- <dc:language>english</dc:language>
- <dc:rights xml:lang="en">Public Domain</dc:rights>
-</oai_dc:dc>
diff --git a/lib/sisu/v4/xml_scaffold.rb b/lib/sisu/v4/xml_scaffold.rb
deleted file mode 100644
index 0608a17f..00000000
--- a/lib/sisu/v4/xml_scaffold.rb
+++ /dev/null
@@ -1,204 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_scaffold.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: extract and print an XML rendition of document structure to screen
-
-=end
-module SiSU_XML_Scaffold
- require_relative 'particulars' # particulars.rb
- include SiSU_Particulars
- require_relative 'dal' # dal.rb
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Source
- def initialize(opt)
- @opt=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::Rescued.new($!,$@,@opt.cmd,@opt.fns).location do
- __LINE__.to_s + ':' + __FILE__
- end
- ensure
- end
- end
- private
- class Scroll <Source
- def initialize(data='',md='')
- @data,@md=data,md
- @sp=' '
- end
- def songsheet
- @t='sisu'
- @s=['0',
- 'A',
- 'B',
- 'C',
- '1',
- '2',
- '3'
- ]
- #@t='docbook' #@t='fictionbook'
- #@s=['book', #@s=['body',
- # 'part', # 'section',
- # 'subpart N/A', # 'section',
- # 'sub-subpart N/A', # 'section',
- # 'chapter', # 'section',
- # 'sect1', # 'section',
- # 'sect2' # 'section'
- #] #]
- data=@data
- 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 || 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 || o.is ==:heading_insert); puts "<#{@s[o.ln]}>#{o.ocn} #{o.ln} #{o.obj}</#{@s[o.ln]}>"
- end
- end
- end
- def structure_build(data)
- puts "\nXML [#{@t} type] structure outline --->\n\n"
- h=[0,false,false,false]
- puts "<#{@s[0]}>"
- data.each_with_index do |o,i|
- if (o.is ==:heading || o.is ==:heading_insert)
- case o.ln
- when 1
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*1}<#{@s[1]}>\n#{@sp*1} #{o.ocn} #{o.ln} #{o.node}"
- h=[1,true,false,false]
- when 2
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*2}<#{@s[2]}>\n#{@sp*2} #{o.ocn} #{o.ln} #{o.node}"
- h=[2,true,true,false]
- when 3
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*3}<#{@s[3]}>\n#{@sp*3} #{o.ocn} #{o.ln} #{o.node}"
- h=[3,true,true,true]
- when 4
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*4}<#{@s[4]}>\n#{@sp*4} #{o.ocn} #{o.ln} #{o.node}"
- h[0]=4
- when 5
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*5}<#{@s[5]}>\n#{@sp*5} #{o.ocn} #{o.ln} #{o.node}"
- h[0]=5
- when 6
- structure_build_tag_close(o.ln,h)
- puts "#{@sp*6}<#{@s[6]}>\n#{@sp*6} #{o.ocn} #{o.ln} #{o.node}"
- h[0]=6
- end
- end
- end
- structure_build_tag_close(0,h)
- end
- def structure_build_tag_close(lev,h)
- case h[0]
- when 1
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
- puts "</#{@s[0]}>" if (lev==0)
- when 2
- puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
- puts "</#{@s[0]}>" if (lev==0)
- when 3
- puts "#{@sp*3}</#{@s[3]}>" if (lev <= 3) and h[3]
- puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[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 h[3]
- puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[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 h[3]
- puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[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 h[3]
- puts "#{@sp*2}</#{@s[2]}>" if (lev <= 2) and h[2]
- puts "#{@sp*1}</#{@s[1]}>" if (lev <= 1) and h[1]
- puts "</#{@s[0]}>" if (lev==0)
- end
- end
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/xml_tables.rb b/lib/sisu/v4/xml_tables.rb
deleted file mode 100644
index 27845aac..00000000
--- a/lib/sisu/v4/xml_tables.rb
+++ /dev/null
@@ -1,202 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/xml_tables.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: common file for xml table generation
-
-=end
-module SiSU_Tables
- 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_Viz::Defaults.new
- end
- def table_split #% used but, no longer operational, revisit
- @new_content=[]
- @one.split(/\n/).each do |parablock|
- table=TableXML.new("#{parablock}\n")
- @new_content << table.table
- end
- @new_content.join
- end
- end
- class TableXML <Table
- @@tablehead=0
- @@tablefoot=[]
- def initialize(one,ocn='')
- @one,@parablock,@ocn,@vz=one,one,ocn,SiSU_Viz::Defaults.new
- end
- def table
- m=@parablock[/<!f(.+?)!>/,1]
- @@tablefoot << m if m
- @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=@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]}/
- tablefoot=[]
- @@tablefoot.each {|x| tablefoot << ''}
- @@tablefoot=[]
- end
- if @@tablehead==1
- if @parablock =~/#{Mx[:tc_p]}#{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"><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=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,
- %{<tr>
- <td width="\\1%" valign="top">}).
- gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,
- %{
- </td>
- <td width="\\1%" valign="top">}).
- gsub(/#{Mx[:tc_c]}/,"\n</td>\n</tr>\n")
- end
- @parablock
- end
- end
- class TableXMLexp <Table
- @@tablehead=0
- @@tablefoot=[]
- def initialize(one)
- @one,@parablock,@vz=one,one,SiSU_Viz::Defaults.new
- end
- def table_head(inf)
- %{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">
- <tr>
- <td valign="top" align="justify">
- <a name="#{inf}"></a>
- </td>
- <td>
-<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">}
- end
- def table_end(tablefoot='')
- %{</table>#{@vz.margin_numless}#{@vz.margin_numless}&nbsp;#{@vz.table_close}
-#{tablefoot}}
- end
- def table_row(inf,h=false)
- bold=h ? '<b>' : ''
- %{
-<tr>
- <td width="#{inf}%" valign="top">#{bold}}
- end
- def table_cell(inf,h=false)
- if h; %{</b></td><td width="#{inf}%" valign="top"><b>}
- else %{</td><td width="#{inf}%" valign="top">}
- end
- end
- def table_row_close(h=false)
- bold_close=h ? '<b>' : ''
- "#{bold_close}</td></tr>"
- end
- def table
- m=@parablock[/<!f(.+?)!>/,1]
- @@tablefoot << m if m
- @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
- if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/
- tablefoot=[]
- @@tablefoot.each {|x| tablefoot << ''}
- @@tablefoot=[]
- if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/; @parablock=table_end
- end
- end
- 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=@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=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1,true))
- end
- if @parablock =~/#{Mx[:tc_c]}/
- @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=@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=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1))
- end
- if @parablock =~/#{Mx[:tc_c]}/
- @parablock=@parablock.gsub(/#{Mx[:tc_c]}/,table_row_close)
- end
- @parablock
- end
- @parablock
- end
- end
-end
-__END__
diff --git a/lib/sisu/v4/zap.rb b/lib/sisu/v4/zap.rb
deleted file mode 100644
index 2890cfef..00000000
--- a/lib/sisu/v4/zap.rb
+++ /dev/null
@@ -1,88 +0,0 @@
-# encoding: utf-8
-=begin
-
- * Name: SiSU
-
- * Description: a framework for document structuring, publishing and search
-
- * Author: Ralph Amissah
-
- * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
- 2007, 2008, 2009, 2010, 2011, 2012, 2013 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>
-
- * Git
- <http://sources.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
- <http://sources.sisudoc.org/?p=code/sisu.git;a=blob;f=lib/sisu/v4/zap.rb;hb=HEAD>
-
- * Ralph Amissah
- <ralph@amissah.com>
- <ralph.amissah@gmail.com>
-
- ** Description: zap wipe clean previous output of the type specified
-
-=end
-module SiSU_Zap
- require_relative 'sysenv' # sysenv.rb
- include SiSU_Env
- class Source
- def initialize(opt)
- @opt=opt
- @env=SiSU_Env::InfoEnv.new(opt.fns)
- end
- def read
- zap_path="#{@env.path.output}/#{@env.fnb}"
- z=SiSU_Env::CleanOutput.new(@opt)
- if SiSU_Env::InfoSettings.new.permission?('zap')
- unless @opt.cmd =~/q/
- tell=SiSU_Screen::Ansi.new(@opt.cmd,"Clean files related to processing #{@opt.cmd} ->","#{@opt.fns} -> #{zap_path}")
- tell.warn
- end
- z.zap.remove_output
- else
- unless @opt.cmd =~/q/
- tell=SiSU_Screen::Ansi.new(@opt.cmd,'use of -Z (zap) has not enabled in sisurc.yml')
- tell.warn
- end
- end
- end
- end
-end
-__END__