diff options
author | Ralph Amissah <ralph@amissah.com> | 2014-01-26 02:22:02 -0500 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2014-01-26 02:31:54 -0500 |
commit | 506e32633838b4daf9ab566c9da083329212f219 (patch) | |
tree | ef48a6985ce663aa3d4d62037f232b2286422979 /lib/sisu/v4 | |
parent | v5 v6: version & changelog (& rakefile), make true on next commit (diff) |
v5 v6: made true, branches: v6 development; v5 stable; v4 closedsisu_5.3.0
Diffstat (limited to 'lib/sisu/v4')
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 + '<d=' + sql_match_limit.to_s + '&off=' + sql_offset.to_s - end - def next - @@canned_search_url.to_s + '<d=' + sql_match_limit.to_s + '&off=' + @offset_next.to_s - end - def previous - @offset_previous >= 0 \ - ? (@@canned_search_url.to_s + '<d=' + sql_match_limit.to_s + '&off=' + @offset_previous.to_s) - : '' - end - def start - @@canned_search_url.to_s + '<d=' + 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=" >>" /> - </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="<< " /> - </a> - pg. #{page.to_s} - <a href="#{can.next}"> - <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt=" >>" /> - </a> - </center>} - else - %{<br /><center> - <a href="#{can.start}"> - <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="|< " /> - </a> - <a href="#{can.previous}"> - <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="<< " /> - </a> - pg. #{page.to_s} - <a href="#{can.next}"> - <img border="0" width="22" height="22" src="#{img}/arrow_next_red.png" alt=" >>" /> - </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="<< " /> - </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="|< " /> - </a> - <a href="#{can.previous}"> - <img border="0" width="22" height="22" src="#{img}/arrow_prev_red.png" alt="<< " /> - </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>©</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>©</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 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> } - : %{<a href="#{@canned_base_url}&fns=#{c['src_filename']}&lang=#{c['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } - title=%{<span style="background-color: #{@color_heading}"><a href="#{path_toc(location,c['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> [#{c['language_document_char']}] by #{c['creator_author']} <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> } - : %{<a href="#{@canned_base_url}&fns=#{e['src_filename']}&lang=#{e['language_document_char']}&view=index"><img border="0" width="24" height="16" src="#{@image_src}/b_search.png" alt="search"></a> } - title=%{<br /><hr><span style="background-color: #{@color_heading}"><a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"> #{ti}</a></span> [#{e['language_document_char']}] by #{e['creator_author']} #{can_txt_srch}<a href="#{path_toc(location,e['language_document_char'])}"><img border="0" width="15" height="18" src="#{@image_src}/b_toc.png" alt="toc html"></a> <a href="#{path_manifest(location,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> [§ <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 -->"></a>} - @doc_details =<<WOK -<table summary="links to text related to this rudimentary index" width="96%" border="0" bgcolor="white" cellpadding="0" align="center"><tr><td width="2%" align="right"> </td><td width="94%" valign="top" align="justify"><h1 class="small"><a href="#{@md.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=" SiSU created"> - <meta name="keywords" content="word index for #{@md.title.full}"> - <meta name="generator" content="SiSU (Linux & Ruby!)"> - <link rel="generator" href="http://www.jus.uio.no/sisu" /> - <link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> - #{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 # [ http://[web host]/#{@fnb}/concordance.html#your_word ] - </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+| |#{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>, }} - @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: '<', url_c_xml: '>', - rel_o: '‹', rel_c: '›', - lt_xml: '<', gt_xml: '>', -} -Tex={ - backslash: "\\\\", - backslash: "\\\\", - tilde: '\\\\\\~', -} -Px={ - bold_o: '*', bold_c: '*', - italics_o: '/', italics_c: '/', - underscore_o: '_', underscore_c: '_', - #emphasis_o: '*', emphasis_c: '*', - #bold_o: '!', bold_c: '!', - cite_o: '"', cite_c: '"', - insert_o: '+', insert_c: '+', - strike_o: '-', strike_c: '-', - superscript_o: '^', superscript_c: '^', - subscript_o: '[', subscript_c: ']', - hilite_o: '*', hilite_c: '*', - monospace_o: '', monospace_c: '', - po_bold_o: '!{', po_bold_c: '}!', - po_italics_o: '/{', po_italics_c: '}/', - po_underscore_o: '_{', po_underscore_c: '}_', - po_cite_o: '"{', po_cite_c: '}"', - po_insert_o: '+{', po_insert_c: '}+', - po_strike_o: '-{', po_strike_c: '}-', - po_superscript_o: '^{', po_superscript_c: '}^', - po_subscript_o: ',{', po_subscript_c: '},', - po_hilite_o: '*{', po_hilite_c: '}*', - po_monospace_o: '#{', po_monospace_c: '}#', - lng_lst: 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: ' ', - } -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 #‘ ’ #“ ” - gsub(/\\copy(?:right)?\b/,'©'). - gsub(/\\trademark\b|\\tm\b/,'®') - 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 # 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(/&/,'&') - 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(/ /,"#{Mx[:nbsp]}"). #escaped special character - gsub(/\\~/,"#{Mx[:gl_o]}#126#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\{/,"#{Mx[:gl_o]}#123#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\}/,"#{Mx[:gl_o]}#125#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\<</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}#{Mx[:gl_o]}#lt#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\>>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}#{Mx[:gl_o]}#gt#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\</,"#{Mx[:gl_o]}#lt#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\>/,"#{Mx[:gl_o]}#gt#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\_/,"#{Mx[:gl_o]}#095#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\-/,"#{Mx[:gl_o]}#045#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\+/,"#{Mx[:gl_o]}#043#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\//,"#{Mx[:gl_o]}#047#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\#/,"#{Mx[:gl_o]}#035#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\&/,"#{Mx[:gl_o]}#038#{Mx[:gl_c]}"). #& #escaped special character - gsub(/\\\|/,"#{Mx[:gl_o]}#124#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility - gsub(/\\\:/,"#{Mx[:gl_o]}#058#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility - gsub(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility - gsub(/\\\^/,"#{Mx[:gl_o]}#094#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility - gsub(/\\\,/,"#{Mx[:gl_o]}#044#{Mx[:gl_c]}"). #not really a sisu special character but made available as possibility - gsub(/\\\\/,"#{Mx[:gl_o]}#092#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\*/,"#{Mx[:gl_o]}#042#{Mx[:gl_c]}"). #escaped special character - gsub(/\\\!/,"#{Mx[:gl_o]}#033#{Mx[:gl_c]}") #escaped special character - if dob.obj=~/(?:https?:|ftp:|\{([^{}]+?)\}(?:#|:|[.]{1,2}\/))\S+/m - if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m - dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ ([^}]+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)\s*#{Mx[:en_a_o]}(.+?)#{Mx[:en_a_c]}/m, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3 #{Mx[:en_a_o]}\\3 \\4#{Mx[:en_a_c]}") # watch - end - if dob.obj=~/(?:^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (?:.+?)\s*\}(?:(?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m - dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:nbsp]} ])\{~\^ (.+?)\s*\}((?:https?:|ftp:|:|[.]{1,2}\/)\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4 #{Mx[:en_a_o]}\\3#{Mx[:en_a_c]} ") - end - dob.obj=dob.obj.gsub(/(^|[^#])\{\s*([^{}]+?)\s*\}((?:https?:|:|[.]{2}\/|#)\S+?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3"). #linked (text or image, however text cannot include modified face, e.g. bold, ital, underline) - gsub(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])((?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}). - gsub(/#{Mx[:lnk_c]}#(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}\\1#{Mx[:rel_c]}\\2}). - gsub(/#{Mx[:lnk_c]}:(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}). - gsub(/#{Mx[:lnk_c]}[.]{2}\/(\S+?[^>< ]+?)([()\[\]]*[,.;:!?'"]{0,2})(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{#{Mx[:lnk_c]}#{Mx[:rel_o]}:\\1#{Mx[:rel_c]}\\2}) - end - if dob.obj=~/_(?:https?|ftp):\S+/m # _http://url #CHECK - dob.obj=dob.obj.gsub(/(^|[#{Mx[:gl_c]}#{Mx[:lnk_c]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}(\s])(_(?:https?|ftp):\/\/\S+?\.[^>< ]+?)([,.;'"]?)(?=[\s#{Mx[:en_a_c]}#{Mx[:en_b_c]}#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}]|$)/m, - %{\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3}) - end - dob=fontface(dob) - dob.obj=dob.obj.gsub(/<[:e]\s+(.+?)!?>/, - "#{Mx[:en_a_o]}\\1#{Mx[:en_a_c]}"). #not tested - gsub(/(^|#{Mx[:br_nl]})\s*_\*\s*/, - "\\1#{Mx[:gl_bullet]}"). #bullets, shortcut - gsub(/=\{(.+?)\}/, - "#{Mx[:idx_o]}\\1#{Mx[:idx_c]}"). - gsub(/^\s*_([1-9])\*\s*/, - "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:gl_bullet]}"). #bullets, shortcut - gsub(/^\s*_([1-9])\s+/, - "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}"). #indent - gsub(/^\s*_([1-9])!\s+(.+?)\s*$/, - "#{Mx[:pa_o]}:i\\1:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} "). #indent bold - gsub(/^\s*__([1-9])\s+/, - "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}"). #hang - gsub(/^\s*__([1-9])!\s+(.+?)\s*$/, - "#{Mx[:pa_o]}:i0:\\1#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]} "). #hangdef - gsub(/^\s*_([0-9])_([0-9])\s+/, - "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}"). #hang - gsub(/^\s*_([0-9])_([0-9])!\s+(.+?)\s*$/, - "#{Mx[:pa_o]}:i\\1:\\2#{Mx[:pa_c]}#{Mx[:fa_bold_o]}\\3#{Mx[:fa_bold_c]} "). #hangdef - gsub(/<:hi>/,"#{Mx[:fa_hilite_o]}"). #'<span style="background-color: rgb(255,240,196)">'). # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200) - gsub(/<:\/hi>/,"#{Mx[:fa_hilite_c]}"). #'</span>'). - gsub(/(#{Mx[:gr_o]}verse#{Mx[:gr_c]}.+)/m,"\\1\n"). - gsub(/[ ]+($)/,'\1'). - gsub(/\{\s*(.+?)\s*\}(https?:\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:url_o]}\\2#{Mx[:url_c]}\\3"). #any remaining linked text or image - gsub(/\{\s*(.+?)\s*\}(#{Mx[:url_o]}\S+?#{Mx[:url_c]})/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2"). #any remaining linked text or image - gsub(/(^|\s)([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)/,"\\1#{Mx[:url_o]}\\2#{Mx[:url_c]}"). - gsub(/(^|[ ])\{\s*(.+?)\s*\}(\S+?)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "\\1#{Mx[:lnk_o]}\\2#{Mx[:lnk_c]}\\3\\4"). #any remaining linked text or image - gsub(/\{\s*(.+?)\s*\}#([a-zA-Z0-9][a-zA-Z0-9_-]*)([;,.]?)(?=\s|[#{Mx[:br_line]}#{Mx[:br_paragraph]}#{Mx[:br_nl]}#{Mx[:en_a_o]}#{Mx[:en_b_o]}]|$)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}#{Mx[:rel_o]}\\2#{Mx[:rel_c]}\\3"). #any remaining linked text or image, check need - gsub(/\{\s*(.+?)\s*\}(#{Mx[:rel_o]}\S+?#{Mx[:rel_c]})/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2"). #any remaining linked text or image, check need - gsub(/\{\s*(.+?)\s*\}(image)/, - "#{Mx[:lnk_o]}\\1#{Mx[:lnk_c]}\\2") #linked image - elsif dob.is==:table - dob=fontface(dob) - elsif dob.is ==:code - dob.obj=dob.obj.gsub(/#{Mx[:meta_o]}(\S+?)#{Mx[:meta_c]}\s*/,'@\1: '). - gsub(/(^|#{Mx[:gl_c]}|\s)<(br(?: \/)?)>([\s,.]|$)/,'\1<\2>\3') #convert <br> <br /> back, clumsy - if dob.number_ - codeline=[] - ln=1 - dob.obj.split(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}|<br(?: \/)?>|\n/).each_with_index do |cl,i| - unless i == 0 - cl=cl.gsub(Mx[:br_nl],'') - w=3-ln.to_s.length - cl = "#{ln}#{Mx[:nbsp]*w}#{Mx[:vline]}#{cl}#{Mx[:br_nl]}" - ln +=1 - end - codeline << cl - end - codeline= codeline.join("") - dob.obj=codeline - else - dob.obj=dob.obj.gsub(/#{Mx[:gr_o]}codeline#{Mx[:gr_c]}/,"\n") - end - dob - else # @\S+?: - end - dob - end - def tech #script markup planned to be more strict for technical documents - # *{emphasis}* e{emphasis}e <strong>emphasis</strong> - # !{bold text}! b{bold}b <b>bold text</b> - # _{underline}_ u{underline}u <u>underline</u> - # /{italics}/ i{italics}i <i>italics</i> - # "{citation}" c{citation}c <cite>citation</cite> - # ^{superscript}^ <sup>superscript</sup> - # ,{subscript}, <sub>subscript</sub> - # +{inserted text}+ <ins>inserted text</ins> - # -{deleted text}- <del>deleted text</del> - # #{monospace text}# - # {url address}:url - # {image.png}imageurl - # {image.png}png - # ~{endnote}~ <!e endnote !> - # +1 <!i1!> - # +2 <!i2!> - puts 'tech' - @data.each do |line| - line=line.gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)e\{(.+?)\}e/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)b\{(.+?)\}b/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)u\{(.+?)\}u/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)c\{(.+?)\}c/, - "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}"). #cite - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)i\{(.+?)\}i/, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)!\{(.+?)\}!/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)\*\{(.+?)\}\*/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasis - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\>)_\{(.+?)\}_/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|[\(\[]|\(|\>)\/\{(.+?)\}\//, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}"). #italics - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\"\{(.+?)\}\"/, - "\\1#{Mx[:fa_cite_o]}\\2#{Mx[:fa_c_o]}cite#{Mx[:fa_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^\{(.+?)\}\^/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)9\{(.+?)\}9/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>),\{(.+?)\},/, - "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)6\{(.+?)\}6/, - "\\1#{Mx[:fa_subscript_o]}\\2#{Mx[:fa_subscript_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\+\{(.+?)\}\+/, - "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)v\{(.+?)\}v/, - "\\1#{Mx[:fa_insert_o]}\\2#{Mx[:fa_insert_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)-\{(.+?)\}-/, - "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)x\{(.+?)\}x/, - "\\1#{Mx[:fa_strike_o]}\\2#{Mx[:fa_strike_c]}"). - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\*(\S+?)\*/, - "\\1#{@emph[:o]}\\2#{@emph[:c]}"). #emphasise single word, watch - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\!(\S+?)\!/, - "\\1#{Mx[:fa_bold_o]}\\2#{Mx[:fa_bold_c]}"). #bold single word, watch - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\/([\(\)a-zA-Z0-9']+?)\/([ ,.;:'"~$]|[^a-zA-Z0-9])/, - "\\1#{Mx[:fa_italics_o]}\\2#{Mx[:fa_italics_c]}\\3"). #italics single word, watch - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)_(\S+?)_/, - "\\1#{Mx[:fa_underscore_o]}\\2#{Mx[:fa_underscore_c]}"). #underscore single word, watch - gsub(/(^|\s+|['"]|#{Mx[:fa_o_c]}|#{Mx[:fa_c]}|\(|\>)\^(\S+?)\^/, - "\\1#{Mx[:fa_superscript_o]}\\2#{Mx[:fa_superscript_c]}"). #check #superscript single word, watch digit added - gsub(/^\s*_\([1-9]\)\(\*\+\)\s*/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}#{Mx[:fa_o]}\\2#{Mx[:fa_c_o]}"). #bullets, shortcut - gsub(/^\s*_\([1-9]\)\s+/, - "#{Mx[:pa_o]}:i\\1#{Mx[:pa_c]}"). #watch - gsub(/^\s*__\([1-9]\)\s+/, - "#{Mx[:pa_o]}:h\\1#{Mx[:pa_c]}"). #watch - #line.gsub(/^\s*__\([1-9]\)!\s+/, - # "#{Mx[:pa_o]}:hd\\1#{Mx[:pa_c]}"). #watch - gsub(/#{Mx[:br_line]}\s*_[12]\s+/, - "#{Mx[:br_line]} ") #indent used in endnotes, not implemented, replace when ready with: line.gsub(/(?:<br>|<br \/>)\s*_([12])\s+/,'<br><:i\1> ') - end - @data - end - end -end -__END__ diff --git a/lib/sisu/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(/(?: \\;|#{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 # • - '• ' # [• flagged] - end - #% html - def html_hardspace - ' ' - 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 - ' 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 #'<' - Dx[:url_o] - end - def xml_close #'>' - 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 #'<' - Dx[:rel_o] - end - def xml_close #'>' - 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"> </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"> </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} -->" />} - #%{<img border="0" src="#{dir.url.images_local}/#{icon_home_button}" alt="#{txt_home} -->" />} - end - def png_home_button - rel=@dir.path_rel_links.html_scroll_2 - %{<img border="0" src="#{rel}/#{icon_home_button}" alt="#{txt_home} -->" />} - end - #% png_nav #not currently used - #% nav_txt - def nav_txt_homepage - %{ <font face="#{font_fonts}" size="2"> - home - </font> } - end - def nav_txt_toc_link - %{ <font face="#{font_fonts}" size="2"> - toc - </font> } - end - def nav_txt_doc_link - %{ <font face="#{font_fonts}" size="2"> - scroll - </font> } - end - def nav_txt_manifest - #{png_manifest} document manifest - %{ <font face="#{font_fonts}" size="2"> - [ document manifest ] - </font> } - end - def nav_txt_concordance - %{ <font face="#{font_fonts}" size="2"> - A-Z - </font> } - end - def nav_txt_pdf_portrait - %{ <font face="#{font_fonts}" size="2"> - pdf - </font> } - end - def nav_txt_pdf_landscape - %{ <font face="#{font_fonts}" size="2"> - pdf - </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>©</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>©</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 & total cost of ownership" - [not to mention flexibility & 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 - - <a href="http://www.sisudoc.org" target="_top"> - <www.sisudoc.org> - </a> - or - <a href="http://www.jus.uio.no/sisu/" target="_top"> - <www.jus.uio.no/sisu/> - </a> -software for electronic texts, document collections, books, digital libraries & search, with "atomic search" & 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"> -<sisu@lists.sisudoc.org> -</a> -<a href="http://lists.sisudoc.org/listinfo/sisu"> -<http://lists.sisudoc.org/listinfo/sisu> -</a> -</p> -<p class="small"> -<a href="mailto:ralph@amissah.com"> -<ralph@amissah.com> -</a> -<a href="mailto:ralph.amissah@gmail.com"> -<ralph.amissah@gmail.com> -</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+| |#{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(/ /,' ') if Ep[:alt]==:on - x.gsub(/&/,'&'). - gsub(/</,"<").gsub(/>/,">"). - gsub(/#{Dx[:url_o]}/,Dx[:url_o_xml]).gsub(/#{Dx[:url_c]}/,Dx[:url_c_xml]). - #gsub(/</,'<').gsub(/>/,'>'). - gsub(/\\\\/,'<br />'). - gsub(/<br(?: \/)?>/,'<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+"> <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='*','+' - 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"> - \;</td> -<td width="94%" valign="top" align="justify">' - @@table_align_close='</td> -<td width="4%" align="right" valign="top"> -<font size="1" color="#777777"> - </font> </td></tr></table>' - @@counter,@@column,@columns=0,0,0 - class Output - def initialize(data,md) - @data,@md=data,md - @file=SiSU_Env::FileOp.new(@md) - @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX - end - def hard_output - @filename_tune=@file.write_file_processing.html_tune - data=[] - @data.each {|x| x.obj.strip; data << x if not x.obj.empty?} #1.9 array? - data.each do |dob| - @filename_tune.puts dob, "\n" #check - end - end - def marshal - File.open(@file.marshal.html_tune,'w') {|f| Marshal.dump(@data.to_a,f)} - end - end - class CleanXHTML - def initialize(html='') - @html=html - end - def clean - html=@html - str=if html.is_a?(String) - html - else html.obj - end - str=str.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). - gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). - gsub(/<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>©</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,'<').gsub(/>/m,'>') - end - @tuned_file << dob - end - end - def amp_angle_brackets - data,data_new=@data,[] - data.each do |dob| - dob.obj=dob.obj. - gsub(/&/u,'&'). - gsub(/</u,'<').gsub(/>/u,'>') - data_new << dob - end - data_new - end - def endnotes_html - data=@data - @tuned_file=[] - a,s='_a','_s' - ast,pls='*','+' - data.each do |dob| - unless dob.is ==:code - dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note\\2">#{Mx[:nbsp]}<sup id="note_ref\\2">\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1\\2 <a href="#note_ref\\2">#{Mx[:nbsp]}<sup id="note\\2">\\2.</sup></a> \\3 \\4}). #endnote- note- (careful may have switched) - gsub(/(#{Mx[:en_b_o]})[*](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note_astx\\2">#{Mx[:nbsp]}<sup id="note_ref_astx\\2">#{ast}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{ast}\\2 <a href="#note_ref_astx\\2">#{Mx[:nbsp]}<sup id="note_astx\\2">#{ast}\\2.</sup></a> \\3 \\4}). #endnote- note- (careful may have switched) - gsub(/(#{Mx[:en_b_o]})[+](\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - %{#{Mx[:nbsp]}<a href="#note_plus\\2">#{Mx[:nbsp]}<sup id="note_ref_plus\\2">#{pls}\\2</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{pls}\\2 <a href="#note_ref_plus\\2">#{Mx[:nbsp]}<sup id="note_plus\\2">#{pls}\\2.</sup></a> \\3 \\4}) #endnote- note- (careful may have switched) # double-check there may here be a bug - if dob.obj =~/#{Mx[:en_a_o]}([*+]+)\s+.+?#{Mx[:en_a_c]}/ - m=$1.length.to_i - dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]})[*]+\s+(.+?)(#{Mx[:en_a_c]})/, - %{#{Mx[:nbsp]}<a href="#note#{a*m}">#{Mx[:nbsp]}<sup id="note_ref#{a*m}">#{ast*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{ast*m} <a href="#note_ref#{a*m}">#{Mx[:nbsp]}<sup id="note#{a*m}">#{ast*m}</sup></a> \\2 \\3}). #endnote- note- (careful may have switched) - gsub(/(#{Mx[:en_a_o]})([+]+)\s+(.+?)(#{Mx[:en_a_c]})/, - %{#{Mx[:nbsp]}<a href="#note#{s*m}">#{Mx[:nbsp]}<sup id="note_ref#{s*m}">#{pls*m}</sup>#{Mx[:nbsp]}</a> } + #note- endnote- - %{\\1#{pls*m} <a href="#note_ref#{s*m}">#{Mx[:nbsp]}<sup id="note#{s*m}">#{pls*m}</sup></a> \\2 \\3}) #endnote- note- (careful may have switched) - end - end - @tuned_file << dob - end - end - def output - data=@data - @tuned_file=[] - data.each do |dob| - dob.obj=dob.obj.strip.chomp - @tuned_file << dob - end - @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove - @tuned_file - end - end -end -__END__ diff --git a/lib/sisu/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> } - end - sv=SiSU_Env::InfoVersion.instance.get_version - if @env.output_dir_structure.by? == :language - home_pth='../..' - output_structure_by='(output organised by language & 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"> HOME </a>] also see <a href="#{topics}">SiSU Metadata Harvest - Topics</a></p> -<p>#{@env.widget_static.search_form}</p> -<hr /> -<p class="tiny">#{harvest_languages}</p> -<hr /> -WOK - end - def html_head - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/ - @output[lng][:html] << html_head_adjust(lng) - end - end - def html_alph - a=[] - a << '<p>' - @alph.each do |x| - a << ((x =~/[0-9]/) \ - ? '' - : %{<a href="##{x}">#{x}</a>, }) - end - a=a.join - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/ - @output[lng][:html] << a - end - end - def html_tail - a =<<WOK -<hr /> -<a name="bottom" id="bottom"></a> -<a name="down" id="down"></a> -<a name="end" id="end"></a> -<a name="finish" id="finish"></a> -<a name="stop" id="stop"></a> -<a name="credits"></a> -#{@vz.credits_sisu} -</body> -</html> -WOK - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << a if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html] << a - end - end - def do_html(lng,html) - @output[lng][:html_mnt] << html if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html] << html - end - def do_string_name(lng,attrib,string) - f=/^(\S)/.match(string[0])[1] - if @lng != lng - @alph=@alphabet_list.dup - @letter=@alph.shift - @lng = lng - end - if @letter < f - while @letter < f - if @alph.length > 0 - @letter=@alph.shift - if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}"></p>#{@letter}</a><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - end - @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - else break - end - end - end - end - def html_body - the_idx=@the_idx - the_idx.each_pair do |lng,lng_array| - lng_array.sort.each do |a| - do_string_name(lng,'',a) - name=a[0].sub(/(.+?)(?:,.+|$)/,'\1').gsub(/\s+/,'_') - x = %{<p class="author"><a name="#{name}">#{a[0]}</a></p>} - if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html_mnt] << x - end - @output[lng][:html] << x - 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>] #{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> } - end - sv=SiSU_Env::InfoVersion.instance.get_version - if @env.output_dir_structure.by? == :language - home_pth='../..' - output_structure_by='(output organised by language & 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"> HOME </a>] also see <a href="#{authors}">SiSU Metadata Harvest - Authors</a></p> -<p>#{@env.widget_static.search_form}</p> -<hr /> -<p class="tiny">#{harvest_languages}</p> -<hr /> -WOK - end - def html_head - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << html_head_adjust(lng,'maintenance') if @opt.cmd.inspect =~/M/ - @output[lng][:html] << html_head_adjust(lng) - end - end - def html_alph - a=[] - a << '<p>' - @alph.each do |x| - a << ((x =~/[0-9]/) \ - ? '' - : %{<a href="##{x}">#{x}</a>, }) - end - a=a.join - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << a if @opt.cmd.inspect =~/M/ - @output[lng][:html] << a - end - end - def html_tail - a =<<WOK -<hr /> -<a name="bottom" id="bottom"></a> -<a name="down" id="down"></a> -<a name="end" id="end"></a> -<a name="finish" id="finish"></a> -<a name="stop" id="stop"></a> -<a name="credits"></a> -#{@vz.credits_sisu} -</body> -</html> -WOK - @the_idx.keys.each do |lng| - @output[lng][:html_mnt] << a if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html] << a - end - end - def do_html(lng,html) - @output[lng][:html] << html - end - def do_html_maintenance(lng,html) - @output[lng][:html_mnt] << html if @output[lng][:html_mnt].is_a?(File) - end - def do_string(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(lng,html) - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_string_default(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html(lng,html) - end - def do_string_maintenance(lng,attrib,string) - html=%{<p class="#{attrib}">#{string}</p>} - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_string_name(lng,attrib,string) - f=/^(\S)/.match(string)[1] - if @lng != lng - @alph=@alphabet_list.dup - @letter=@alph.shift - @lng = lng - end - if @letter < f - while @letter < f - if @alph.length > 0 - @letter=@alph.shift - if @output[lng][:html_mnt].is_a?(File) - @output[lng][:html_mnt] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - end - @output[lng][:html] << %{\n<p class="letter"><a name="#{@letter}">#{@letter}</a></p><p class="book_index_lev1"><a name="#{@letter.downcase}"></a></p>} - else break - end - end - end - name=string.strip.gsub(/\s+/,'_') - html=%{<p class="#{attrib}"><a name="#{name}">#{string}</a></p>} - do_html(lng,html) - do_html_maintenance(lng,html) if @output[lng][:html_mnt].is_a?(File) - end - def do_array(lng,lv,array) - lv+=1 - array.each do |b| - do_case(lng,lv,b) - end - end - def do_hash_md(lng,attrib,hash) - 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>] <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> 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> 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> 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} - \\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} - \\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(/(\*+)/, - %{ <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"> </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"> </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="<< previous" />} - end - def nxt - %{<img border="0" width="22" height="22" src="#{url_path_image_sys}/#{icon.next}" alt="next >>" />} - end - def dot_toc - %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="^" />} - end - def dot_pre - %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt="<" />} - end - def dot_nxt - %{<img border="0" width="100%" height="20" src="#{url_path_image_sys}/#{icon.dot}" alt=">" />} - end - self - end - def doc_types(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 -->" /></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%"> - -#{@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"> - <a href="toc.html" target="_top" alt="->"> - #{png_nav.toc} - </a> -#{@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="->"> - #{png_nav.nxt}</a>} - elsif @md.firstseg =~/\S+/ - firstseg=%{<a href="#{@md.firstseg}#{@md.lang_code_insert}#{Sfx[:html]}" target="_top" alt="->"> - #{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"> - #{firstseg} -#{@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>©</sup> ') - %{<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> <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> </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> </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"> - - </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"> </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} - -#{@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} - -#{@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+"> <sup>\d+<\/sup> /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+"> <sup>\d+<\/sup> <\/a>/,''). - gsub(@pat_strip_heading_name,'\1') - #gsub(/(.*?)<a name="(\d+)"><\/a>(.*)/,'\1') #2002w42 altered gsub - problematic? - suspect - toc=case txt.ln - when 1; 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"> PDF flyer</a></p>} - else '' - end - end - def price - def gbp - if defined? @prod['price']['gbp'] \ - and @prod['price']['gbp'] - " £ #{@prod['price']['gbp']} (GBP) " - else '' - end - end - def euro - if defined? @prod['price']['euro'] \ - and @prod['price']['euro'] - " € #{@prod['price']['euro']} (Euro) " - else '' - end - end - def usd - if defined? @prod['price']['usd'] \ - and @prod['price']['usd'] - " $ #{@prod['price']['usd']} (USD) " - 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(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/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(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/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(/ <a name="-[\d*+]+" href="#_[\d*+]+"> <sup>[\d*+]+<\/sup> <\/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+"> <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"> - \;</td> -<td width="94%" valign="top" align="justify">' - @@table_align_close='</td> -<td width="4%" align="right" valign="top"> -<font size="1" color="#777777"> - </font> </td></tr></table>' - @@counter,@@column,@columns=0,0,0 - class Output - def initialize(data,md) - @data,@md=data,md - @file=SiSU_Env::InfoFile.new(@md.fns) - @cX=SiSU_Screen::Ansi.new(@md.opt.cmd).cX - end - def hard_output - @filename_tune=@file.write_file_processing.html_tune - data=[] - @data.each do |x| - unless x.obj.empty? - x.obj=x.obj.strip - data << x - end - end - data.each do |dob| - @filename_tune.puts dob, "\n" - end - end - def marshal - File.open(@file.marshal.html_tune,'w') {|f| Marshal.dump(@data.to_a,f)} - end - end - class CleanHTML - def initialize(html='') - @html=html - end - def clean - html=@html - str=if html.is_a?(String) - html - else html.obj - end - str=str.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). - gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;') - 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>©</sup>}) - if (dob.obj !~/\<:ad\s+\.\.\//) - dob.obj=dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*!\>/, - %{\n<center><a href="http:\/\/\\1" target="external"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) - else - dob.obj=dob.obj.gsub(/\<:ad\s+(\S+)?\s+(\S+\.png)\s+(.+)?\;\s+(.+)?\;\s*\>/, - %{\n<center><a href="\\1" target="_top"><img src="#{@env.url.images_local}/\\2" alt="\\3"></a></center>\n}) - end - dob.obj=dob.obj.gsub(/!pick/,%{<img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_choice}" alt="stellar">}). - gsub(/!new/,%{ <img border="0" height="15" width="15" src="#{@env.url.images}/#{@vz.icon_new}" alt="new">}). - gsub(/<:h(.{1,7}?)>/,'<a href="#h\1">\1</a>'). - gsub(/<:to(\d{1,7}?)>/,'<a href="#to\1">to { \1 }</a> '). - gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'<a href="\1" target="_top">\1</a>'). #http ftp matches escaped, no decoration - gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="mailto:\\1">\\1</a>#{@brace_url.xml_close}}). - gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{@brace_url.xml_open}<a href="\\1" target="_top">\\1</a>#{@brace_url.xml_close}}) #http ftp matches with decoration - if dob.obj =~/#{Xx[:html_relative2]}\/\S+/ \ - and dob.obj !~/(\"#{Xx[:html_relative2]}\/\S+?\"|>\s*#{Xx[:html_relative2]}\/\S+<)/ - dob.obj=dob.obj.gsub(/(#{Xx[:html_relative2]}\/\S+)/,'<a href="\1">\1</a>') - end - if dob.obj =~/..\/\S+/ \ - and dob.obj !~/(\"..\/\S+?\"|>\s*..\/\S+<)/ - dob.obj=dob.obj.gsub(/\.\.(\/\S+)/,%{<a href="#{Xx[:html_relative2]}\1">\1</a>}) - end - dob.obj=dob.obj.gsub(/<a href=":/,%{<a href="#{@vz.url_site}/}). - gsub(/<a href="\.\.\//,%{<a href="#{@vz.url_site}/}). - gsub(/<a href="#{Xx[:html_relative2]}\//,%{<a href="#{@vz.url_site}/}) - else - dob.obj=dob.obj.gsub(/</m,'<').gsub(/>/m,'>') - end - dob - end - def amp_angle_brackets(dob) - dob.obj=dob.obj. - gsub(/&/u,'&'). - gsub(/<([a-z:\/]+)>/,"#{Dx[:lt_xml]}\\1#{Dx[:gt_xml]}"). - gsub(/</u,'<').gsub(/>/u,'>') - dob - end - def endnotes_html(dob) - unless dob.is ==:code - dob.obj=dob.obj.gsub(/(#{Mx[:en_a_o]}|#{Mx[:en_b_o]})(\d+)\s+(.+?)(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched) - gsub(/(#{Mx[:en_b_o]})([*+]\d+)\s+(.+?)(#{Mx[:en_b_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2.</sup></a> \3 \4'). #endnote- note- (careful may have switched) - gsub(/(#{Mx[:en_a_o]})([*+]+)\s+(.+?)(#{Mx[:en_a_c]})/, - ' <a name="-\2" href="#_\2"> <sup>\2</sup> </a> ' + #note- endnote- - '\1\2 <a name="_\2" href="#-\2"> <sup>\2</sup></a> \3 \4') #endnote- note- (careful may have switched) - end - dob - end - def markup(dob) - dob.obj=dob.obj.gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). - gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - dob.obj=dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is==:table - dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). - gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). - gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). - gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). - gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). - gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). - gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). - gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). - gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). # tt, kbd - gsub(/#{Mx[:mk_o]}:name#(\S+?)#{Mx[:mk_c]}/,'<a name="\1"></a>'). - gsub(/#{Mx[:gl_bullet]}/m,'● '). - gsub(/#{Mx[:nbsp]}/,' '). - gsub(/<(p|br)>/,'<\1 />') - dob=SiSU_HTML_Tune::CleanHTML.new(dob).clean - dob - end - def output - data=@data - @tuned_file=[] - data.each do |dob| - dob.obj=dob.obj.strip.chomp - @tuned_file << dob - end - @tuned_file << "\n<EOF>" if (@md.fns =~/\.sst0/) #remove - @tuned_file - end - end -end -__END__ diff --git a/lib/sisu/v4/hub.rb b/lib/sisu/v4/hub.rb 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> #{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> </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"> </p></td></tr>\n} - end - end - def metadata(id,info) - info=info.to_s.gsub(/(?:#{Mx[:br_line]}|\\)+/,'<br />') - @manifest[:html] << %{<tr><th class="left"><p class="bold_left">#{id}:</p></th><td><p class="left">#{info}</p></td></tr>\n} - end - def links(url,lnk,target) - static=if url =~/^\.\// then url.gsub(/^\.(\.)?/,@base_url) - elsif url =~/^\.\.\// then url.gsub(/^\.(\.)?/,@env.url.root) - else url - end - @manifest[:html] << %{<tr><th class="right" width=5%><p class="norm">●</p></th><td class="left"><p class="norm"><a href="#{url}">#{lnk}</a></p><p class="tiny"> #{@brace_url.xml_open}<a href="#{static}">#{static}</a>#{@brace_url.xml_close}</p></td></tr>\n} - end - def output_tests - if FileTest.file?(@f.place_file.html_segtoc.dir)==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_toc.png" alt="TOC linked" /> } - pth=@f.output_path.html_seg.dir - rel=@f.output_path.html_seg.rel_sm - url=@f.output_path.html_seg.url - id,file='HTML, table of contents (for segmented text)',@f.base_filename.html_segtoc - summarize_html_seg(id,file,pth,rel,url,img) - end - if FileTest.file?(@f.place_file.html_scroll.dir)==true - img=%{<img border="0" height="15" width="15" src="#{@image_path}/b_doc.png" alt="Full Text" /> } - pth=@f.output_path.html_scroll.dir - rel=@f.output_path.html_scroll.rel_sm - url=@f.output_path.html_scroll.url - id,file='HTML, full length document',@f.base_filename.html_scroll - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?(@f.place_file.html_book_index.dir)==true - pth=@f.output_path.html_seg.dir - rel=@f.output_path.html_seg.rel_sm - url=@f.output_path.html_seg.url - id,file='HTML, (book type) index',@f.base_filename.html_book_index - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.html_concordance.dir)==true - pth=@f.output_path.html_seg.dir - rel=@f.output_path.html_seg.rel_sm - url=@f.output_path.html_seg.url - id,file='HTML, concordance file',@f.base_filename.html_concordance - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.epub.dir)==true - img=%{<img border="0" height="18" width="18" src="#{@image_path}/b_epub.png" alt="EPUB" /> } - id,file='EPUB (Electronic Publication, e-book standard)',@f.base_filename.epub - pth=@f.output_path.epub.dir - rel=@f.output_path.epub.rel_sm - url=@f.output_path.epub.url - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_letter}")==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, U.S. letter size, portrait/vertical document (recommended for printing)","#{@f.base_filename.pdf_p_letter}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_letter}")==true - img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, U.S. letter size, landscape/horizontal document (recommended for screen viewing)","#{@f.base_filename.pdf_l_letter}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a4}")==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, A4 size, portrait/vertical document (recommended for printing)","#{@f.base_filename.pdf_p_a4}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a4}")==true - img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, A4 size, landscape/horizontal document (recommended for screen viewing)","#{@f.base_filename.pdf_l_a4}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_a5}")==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, A5 (book) size, portrait/vertical document (recommended for printing)","#{@f.base_filename.pdf_p_a5}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_a5}")==true - img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, A5 (book) size, landscape/horizontal document (recommended for screen viewing)","#{@f.base_filename.pdf_l_a5}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_b5}")==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, B5 (book) size, portrait/vertical document (recommended for printing)","#{@f.base_filename.pdf_p_b5}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_b5}")==true - img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, B5 (book) size, landscape/horizontal document (recommended for screen viewing)","#{@f.base_filename.pdf_l_b5}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_p_legal}")==true - img=%{<img border="0" height="18" width="15" src="#{@image_path}/b_pdf.png" alt="PDF portrait" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, U.S. legal size, portrait/vertical document (recommended for printing)","#{@f.base_filename.pdf_p_legal}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?("#{@f.output_path.pdf.dir}/#{@f.base_filename.pdf_l_legal}")==true - img=%{<img border="0" height="15" width="18" src="#{@image_path}/b_pdf.png" alt="PDF landscape" /> } - pth=@f.output_path.pdf.dir - rel=@f.output_path.pdf.rel_sm - url=@f.output_path.pdf.url - id,file="PDF, U.S. legal size, landscape/horizontal document (recommended for screen viewing)","#{@f.base_filename.pdf_l_legal}" - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?(@f.place_file.odt.dir)==true - img=%{<img border="0" height="18" width="18" src="#{@image_path}/b_odf.png" alt="ODF/ODT" /> } - pth=@f.output_path.odt.dir - rel=@f.output_path.odt.rel_sm - url=@f.output_path.odt.url - id,file='ODF:ODT (Open Document Format)',@f.base_filename.odt - summarize(id,file,pth,rel,url,img) - end - if FileTest.file?(@f.place_file.xhtml.dir)==true - pth=@f.output_path.xhtml.dir - rel=@f.output_path.xhtml.rel_sm - url=@f.output_path.xhtml.url - id,file='ODF:ODT (Open Document Format)',@f.base_filename.odt - id,file='XHTML',@f.base_filename.xhtml - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.xml_sax.dir)==true - pth=@f.output_path.xml_sax.dir - rel=@f.output_path.xml_sax.rel_sm - url=@f.output_path.xml_sax.url - id,file='XML SAX',@f.base_filename.xml_sax - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.xml_dom.dir)==true - pth=@f.output_path.xml_dom.dir - rel=@f.output_path.xml_dom.rel_sm - url=@f.output_path.xml_dom.url - id,file='XML DOM',@f.base_filename.xml_dom - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.info.dir)==true - pth=@f.output_path.texinfo.dir - rel=@f.output_path.texinfo.rel_sm - url=@f.output_path.texinfo.url - id,file='Info file',@f.base_filename.info - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.manpage.dir)==true - pth=@f.output_path.manpage.dir - rel=@f.output_path.manpage.rel_sm - url=@f.output_path.manpage.url - id,file='Manpage',@f.base_filename.manpage - summarize(id,file,pth,rel,url) - end - if FileTest.file?(@f.place_file.sqlite_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"> - <a href="#output">Document, Available Filetypes</a> -</p> -<p class="small"> - <a href="#metadata">Document Metadata</a> -</p> -<p class="tiny"> - <a href="#links">metadata suggested links (if any)</a> -</p> -</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"> </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(/(^| |#{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(/(^| |#{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(/~/,'~') 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(/ |#{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"> \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 /> <<text:a xlink:type="simple" xlink:href="#{manifest}">#{manifest}</text:a>></text:p>} - @@odf[:tail] << %{\n<text:p text:style-name="P_normal">SiSU: <<text:a xlink:type="simple" xlink:href="http://www.jus.uio.no/lm">www.jus.uio.no/sisu</text:a>> and <<text:a xlink:type="simple" xlink:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>} - @@odf[:tail] << "\n</office:text></office:body></office:document-content>" - end - def set_bookmark_tag(dob) - 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(/&nbsp;| |#{Mx[:nbsp]}/,' '). - gsub(/</,'<').gsub(/>/,'>'). - gsub(/<(text:span text:style-name="Span_\S+?"|\/text:span)>/,'<\1>'). #works, not ideal - gsub(/#{Mx[:br_line]}/,'<br />'). - gsub(/<br(?:\s+\/)?>/,'<br />') - end - def poem(dob,p_num) #P4 #same as group - parray=[] - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| - set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' - parablock=group_clean(parablock) - 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(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'<text:a xlink:type="simple" xlink:href="\1">'). - gsub(/<(\/text:a)>/,'<\1>'). - gsub(/<(text:note text:id=.+?)>/,'<\1>'). - gsub(/<(text:p text:style-name="Footnote")>/,'<\1>'). - gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') - parablock=footnote(parablock) - parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join \ - + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ - + '<text:p text:style-name="Standard"/>' - dob - end - def block(dob,p_num) #P4 #same as verse - parray=[] - dob.obj=dob.obj.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration - gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{@brace_url.xml_close}}). - gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{@brace_url.xml_close}}) #http ftp matches with decoration - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| - set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' - parablock=group_clean(parablock) - parablock=parablock.gsub(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'<text:a xlink:type="simple" xlink:href="\1">'). - gsub(/<(\/text:a)>/,'<\1>'). - gsub(/<(text:note text:id=.+?)>/,'<\1>'). - gsub(/<(text:p text:style-name="Footnote")>/,'<\1>'). - gsub(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') - parablock=footnote(parablock) - parray << %{<text:p text:style-name="P_group">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join \ - + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ - + '<text:p text:style-name="Standard"/>' - dob - end - def code(dob,p_num) #P5 - if dob.is==:code - dob.obj=dob.obj.gsub(/\s\s/,'  ') - parray=[] - dob.obj.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each_with_index do |parablock,i| - set_ref=(i==0) ? "#{p_num[:set_ref]}#{set_bookmark_tag(dob)}" : '' - parablock=group_clean(parablock) - parablock=parablock.gsub(/^\s*$/,'<br />'). - gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>') #http ftp matches escaped, no decoration - parray << %{<text:p text:style-name="P_code">#{set_ref}#{parablock}</text:p>} if parablock =~/\S+/ - end - dob.obj=parray.join \ - + %{<text:p text:style-name="P_group">#{p_num[:display]}</text:p>} \ - + '<text:p text:style-name="Standard"/>' - end - dob - end - def table(dob,p_num) # - if dob.is ==:table - 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(/</,'<').gsub(/>/,'>') - word=dob.obj.scan(/\S+|\n/) - if word - word.each do |w| # _ - / # | : ! ^ ~ - unless dob =~/^(?:#{Rx[:meta]}|%+ )/m - w=w.gsub(/&#(?:126|152);/,'~'). #126 usual - gsub(/ /,' ') - if w !~/(?:&\S{2,7}?;)+/ - w=w.gsub(/&/,'&') - end - if w !~/&\S{1,7}?;(?:&\S{1,7}?;)+/ #imperfect - w=w.gsub(/(&\S{1,7};)+&/,'\1&') - end - end - para_array << w - end - dob.obj=para_array.join(' ') - dob.obj=dob.obj.strip - end - if dob.is==:code #{Mx[:gr_o]}code#{Mx[:gr_c]}/ #fix #code-block: angle brackets special characters #fix - dob.obj=dob.obj.gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>'). - gsub(/(^|[^}])_(?:<|<)/m,'\1<').gsub(/(^|[^}])_(?:>|>)/m,'\1>') - end - if dob.of==:block - dob.obj=dob.obj.gsub(/#{Mx[:gl_bullet]}/,'● ') - end - dob.obj=dob.obj.gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). - gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). - gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). - gsub(/#{Mx[:tag_o]}\S+?#{Mx[:tag_c]}/,'<text:bookmark-start text:name="\1"/><text:bookmark-end text:name="\1"/>'). #check - gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). - gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;'). - gsub(/#{Mx[:mk_o]}[~-]##{Mx[:mk_c]}/,'') - if dob.is==:para \ - and dob.bullet_ - dob.obj='<draw:frame draw:style-name="gr1" text:anchor-type="as-char" svg:width="0.22cm" svg:height="0.22cm" draw:z-index="2"><draw:image xlink:href="Pictures/bullet_09.png" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame> ' + - dob.obj - end - dob.obj=dob.obj.gsub(/#{Mx[:br_line]}/,'<br />'). - gsub(/©/,'©'). #too arbitrary - gsub(/.+?<-#>/,''). # remove dummy headings (used by html) #check - gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/, - '<text:span text:style-name="Span_bold">\1</text:span>'). - gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/, - '<text:span text:style-name="Span_italic">\1</text:span>'). - gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/, - '<text:span text:style-name="Span_underscore">\1</text:span>'). - gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/, - '<text:span text:style-name="Span_superscript">\1</text:span>'). - gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/, - '<text:span text:style-name="Span_subscript">\1</text:span>'). - gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/, - '<text:span text:style-name="Span_monospace">\1</text:span>'). - gsub(//u,'-'). - gsub(/ /u, ' '). # space identify - gsub(/ /u, ' '). # space identify - gsub(/·/u,'*'). - gsub(/[–—]/u,'-'). #— – chk - gsub(/ < /i,'<'). - gsub(/\\copy(?:right)?\b/,'©'). - gsub(/\\trademark\b|\\tm\b/,'®'). - gsub(/\44/,'$'). #$ watch - gsub(/<a href=".+?">(.+?)<\/a>/,'\1'). - gsub(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links - wordlist=dob.obj.scan(/\S+/) - dob.obj=tidywords(wordlist).join(' ').strip - @rcdc=true if @rcdc==false \ - and (dob.obj =~/~metadata/ or dob =~/#{Mx[:lv_o]}1:meta#{Mx[:lv_x]}\s*Document Information/) #fix Mx[:lv_o] - if dob.is !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ #check - if defined? dob.ocn and dob.ocn =~/\d+/ - @p_num=SiSU_ODF_Format::ParagraphNumber.new(dob.ocn) - end - if dob.is ==:heading \ - || dob.is ==:para \ - || dob.is ==:group \ - || dob.is ==:verse \ - || dob.is ==:code \ - || dob.is ==:table \ - || dob.is ==:break - odf_structure(@md,dob) - end - if dob.obj ## Clean Prepared Text - dob.obj=dob.obj.gsub(/<!.+!>/,' '). - gsub(/#{Mx[:tc_o]}.+?#{Mx[:tc_c]}/,' '). - gsub(/<:\S+>/,' ') - end - end - end - end - def pre - table=if @md.flag_tables - x=<<WOK - <style:style style:name="Table1" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> - <style:style style:name="Table1.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> - <style:style style:name="Table1.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> - <style:style style:name="Table1.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> - <style:style style:name="Table1.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> - <style:style style:name="Table1.E" style:family="table-column"><style:table-column-properties style:column-width="3.399cm" style:rel-column-width="13107*"/></style:style> - <style:style style:name="Table1.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> - <style:style style:name="Table1.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> - <style:style style:name="Table1.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> - <style:style style:name="Table2" style:family="table"><style:table-properties style:width="16.999cm" table:align="margins"/></style:style> - <style:style style:name="Table2.A" style:family="table-column"><style:table-column-properties style:column-width="16.999cm" style:rel-column-width="65535*"/></style:style> - <style:style style:name="Table2.B" style:family="table-column"><style:table-column-properties style:column-width="8.499cm" style:rel-column-width="32767*"/></style:style> - <style:style style:name="Table2.C" style:family="table-column"><style:table-column-properties style:column-width="5.666cm" style:rel-column-width="21845*"/></style:style> - <style:style style:name="Table2.D" style:family="table-column"><style:table-column-properties style:column-width="4.349cm" style:rel-column-width="16383*"/></style:style> - <style:style style:name="Table2.E" style:family="table-column"><style:table-column-properties style:column-width="3.999cm" style:rel-column-width="13107*"/></style:style> - <style:style style:name="Table2.F" style:family="table-column"><style:table-column-properties style:column-width="2.833cm" style:rel-column-width="10922*"/></style:style> - <style:style style:name="Table2.G" style:family="table-column"><style:table-column-properties style:column-width="2.428cm" style:rel-column-width="9362*"/></style:style> - <style:style style:name="Table2.H" style:family="table-column"><style:table-column-properties style:column-width="2.124cm" style:rel-column-width="8191*"/></style:style> - <style:style style:name="Table2.I" style:family="table-column"><style:table-column-properties style:column-width="1.8887cm" style:rel-column-width="7281*"/></style:style> - <style:style style:name="Table2.J" style:family="table-column"><style:table-column-properties style:column-width="1.6999cm" style:rel-column-width="6553*"/></style:style> - <style:style style:name="Table2.K" style:family="table-column"><style:table-column-properties style:column-width="1.5453cm" style:rel-column-width="5957*"/></style:style> - <style:style style:name="Table2.L" style:family="table-column"><style:table-column-properties style:column-width="1.416cm" style:rel-column-width="5461*"/></style:style> - <style:style style:name="Table2.M" style:family="table-column"><style:table-column-properties style:column-width="1.307" style:rel-column-width="5041*"/></style:style> - <style:style style:name="Table2.N" style:family="table-column"><style:table-column-properties style:column-width="1.214cm" style:rel-column-width="4681*"/></style:style> -WOK - x=x.strip - x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ - x - else '' - end - x=<<WOK -<?xml version="1.0" encoding="UTF-8"?> -<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"><office:scripts/> -<office:font-face-decls><style:font-face style:name="DejaVu Sans Mono" svg:font-family="'DejaVu Sans Mono'" style:font-adornments="Book" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="Inconsolata" svg:font-family="Inconsolata" style:font-adornments="Regular" style:font-pitch="fixed"/><style:font-face style:name="Liberation Mono" svg:font-family="'Liberation Mono'" style:font-adornments="Regular" style:font-family-generic="modern" style:font-pitch="fixed"/><style:font-face style:name="DejaVu Sans" svg:font-family="'DejaVu Sans'" style:font-adornments="ExtraLight" style:font-family-generic="swiss" style:font-pitch="variable"/><style:font-face style:name="Nimbus Sans L" svg:font-family="'Nimbus Sans L'" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma, Lucidasans, 'Lucida Sans', 'Arial Unicode MS'" style:font-pitch="variable"/><style:font-face style:name="Nimbus Roman No9 L" svg:font-family="'Nimbus Roman No9 L'" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/></office:font-face-decls> -<office:automatic-styles> -#{table} - <style:style style:name="P_table_cell" style:family="paragraph" style:parent-style-name="Table_Contents"><style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/></style:style> -</office:automatic-styles> -<office:body> - <office:text text:use-soft-page-breaks="true"> - <office:forms form:automatic-focus="false" form:apply-design-mode="false"/> - <text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/></text:sequence-decls> -WOK - x=x.strip - x=x.gsub(/\n+/m,'') unless @md.opt.cmd=~/M/ - @@odf[:head] << x - end - def 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,"&") - 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(/ |#{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__ -!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# 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(/ |#{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__ -!\|#\|&*\|-\|/\|_\|{\|}\|~\|&# - -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,'<'). - gsub(/>/m,'>') - 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,'<').gsub(/>/m,'>') - end - if @t_o.is==:paragraph - if @t_o.bullet_ - @s=@s - end - if @t_o.indent > 0 - @s=@s - end - end - if @t_o.is==:heading - @s=@s - end - else - p __FILE__ << ':' << __LINE__.to_s - end - @s - end - end - class ModifiedTextPlusHashDigest - def initialize(md,x) - @md=md - if x.is_a?(String) - @t_o,@s=nil,x - else - @t_o,@s=x,x.obj.dup - end - @env ||=SiSU_Env::InfoEnv.new(@md.fns) - @sha_ =((@env.digest.type =='sha256') ? true : false) - @sha_ ? (require 'digest/sha2') : (require 'digest/md5') - end - def digest(txt) - d=nil - if @sha_ - for hash_class in [ Digest::SHA256 ] - d=hash_class.hexdigest(txt) - end - else - for hash_class in [ Digest::MD5 ] - d=hash_class.hexdigest(txt) - end - end - d - end - def strip_clean_of_markup - def txt - SiSU_TextRepresentation::Alter.new(@s).strip_clean_of_markup - end - def dgst - 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,'&') - end - @s - end - def utf8 - if @s \ - and @s.is_a?(String) - @s=@s.gsub(/<br(?: \/)?>/u,Mx[:br_paragraph]). - gsub(/</um,'<').gsub(/>/um,'>'). - #gsub(/</um,'<').gsub(/>/um,'>'). - gsub(/ /um,' '). # 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(/</,'<').gsub(/>/,'>'). - gsub(/<br(?: \/)?>/,'<br />') - if @inf =~/&/ - inf_array=[] - word=@inf.scan(/\S+|\n/) - word.each do |w| # _ - / # | : ! ^ ~ - w=w.gsub(/ /,' ') - if w !~/&\S{2,7}?;/ - w=w.gsub(/&/,'&') - end - inf_array << w - end - @inf=inf_array.join(' ') - end - @inf=@inf.gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/, - '<text:a xlink:type="simple" xlink:href="\1">\1</text:a>'). #http ftp matches escaped, no decoration - gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - '\1<text:a xlink:type="simple" xlink:href="\2">\2</text:a>') #special case \{ e.g. \}http://url - @inf=if @inf =~/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/ - @inf.gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration - else - @inf.gsub(/(https?:\/\/[^<>()'"\s]+)/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="\\1">\\1</text:a>#{url_brace.xml_close}}) #http ftp matches with decoration - end - @inf=@inf.gsub(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/, - %{#{url_brace.xml_open}<text:a xlink:type="simple" xlink:href="mailto:\\1">\\1</text:a>#{url_brace.xml_close}}) if @inf !~/http:\/\// # improve upon, document crash where url contains '@' symbol - end - <<WOK -<text:p text:style-name="P1">#{@tag.capitalize}: #{@inf}</text:p> -WOK - end - def metadata - SiSU_Metadata::Summary.new(@md).metadata_base - end - self - end - def plaintext - def meta_para - <<WOK - -#{@tag.capitalize}: #{@inf} -WOK - end - def metadata - SiSU_Metadata::Summary.new(@md).metadata_base - end - self - end - def manpage - def meta_para - <<WOK - -.TP -#{@tag.capitalize}: -.I #{@inf} -WOK - end - def metadata - SiSU_Metadata::Summary.new(@md).metadata_base - end - self - end - end - class TeX_Metadata - def initialize(md) - @md=md - @br="\\\\\n" - end - def meta_para(tag,inf,sc=true) - inf=((inf.is_a?(String) && sc) ? spec_char(inf) : inf) - %{\\begin\{bfseries\}#{tag}:\\end\{bfseries\} #{inf} -} - end - def spec_char(inf) - SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_characters - end - def word_break_points(inf) - SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_word_break_points - end - def number_break_points(inf) - SiSU_TeX_Pdf::SpecialCharacters.new(@md,inf).special_number_break_points - end - def metadata_tex - meta=[] - 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,'<'). # '<' # < - gsub(/>/um,'>'). # '>' # > - gsub(/¢/um,'¢'). # '¢' # ¢ - gsub(/£/um,'£'). # '£' # £ - gsub(/¥/um,'¥'). # '¥' # ¥ - gsub(/§/um,'§'). # '§' # § - gsub(/©/um,'©'). # '©' # © - gsub(/ª/um,'ª'). # 'ª' # ª - gsub(/«/um,'«'). # '«' # « - gsub(/®/um,'®'). # '®' # ® - gsub(/°/um,'°'). # '°' # ° - gsub(/±/um,'±'). # '±' # ± - gsub(/²/um,'²'). # '²' # ² - gsub(/³/um,'³'). # '³' # ³ - gsub(/µ/um,'µ'). # 'µ' # µ - gsub(/¶/um,'¶'). # '¶' # ¶ - gsub(/¹/um,'¹'). # '¹' # ¹ - gsub(/º/um,'º'). # 'º' # º - gsub(/»/um,'»'). # '»' # » - gsub(/¼/um,'¼'). # '¼' # ¼ - gsub(/½/um,'½'). # '½' # ½ - gsub(/¾/um,'¾'). # '¾' # ¾ - gsub(/×/um,'×'). # '×' # × - gsub(/÷/um,'÷'). # '÷' # ÷ - gsub(/¿/um,'¿'). # '¿' # ¿ - gsub(/À/um,'À'). # 'À' # À - gsub(/Á/um,'Á'). # 'Á' # Á - gsub(/Â/um,'Â'). # 'Â' #  - gsub(/Ã/um,'Ã'). # 'Ã' # à - gsub(/Ä/um,'Ä'). # 'Ä' # Ä - gsub(/Å/um,'Å'). # 'Å' # Å - gsub(/Æ/um,'Æ'). # 'Æ' # Æ - gsub(/Ç/um,'Ç'). # 'Ç' # Ç - gsub(/È/um,'È'). # 'È' # È - gsub(/É/um,'É'). # 'É' # É - gsub(/Ê/um,'Ê'). # 'Ê' # Ê - gsub(/Ë/um,'Ë'). # 'Ë' # Ë - gsub(/Ì/um,'Ì'). # 'Ì' # Ì - gsub(/Í/um,'Í'). # 'Í' # Í - gsub(/Î/um,'Î'). # 'Î' # Î - gsub(/Ï/um,'Ï'). # 'Ï' # Ï - gsub(/Ð/um,'Ð'). # 'Ð' # Ð - gsub(/Ñ/um,'Ñ'). # 'Ñ' # Ñ - gsub(/Ò/um,'Ò'). # 'Ò' # Ò - gsub(/Ó/um,'Ó'). # 'Ó' # Ó - gsub(/Ô/um,'Ô'). # 'Ô' # Ô - gsub(/Õ/um,'Õ'). # 'Õ' # Õ - gsub(/Ö/um,'Ö'). # 'Ö' # Ö - gsub(/Ø/um,'Ø'). # 'Ø' # Ø - gsub(/Ù/um,'Ù'). # 'Ù' # Ù - gsub(/Ú/um,'Ú'). # 'Ú' # Ú - gsub(/Û/um,'Û'). # 'Û' # Û - gsub(/Ü/um,'Ü'). # 'Ü' # Ü - gsub(/Ý/um,'Ý'). # 'Ý' # Ý - gsub(/Þ/um,'Þ'). # 'Þ' # Þ - gsub(/ß/um,'ß'). # 'ß' # ß - gsub(/à/um,'à'). # 'à' # à - gsub(/á/um,'á'). # 'á' # á - gsub(/â/um,'â'). # 'â' # â - gsub(/ã/um,'ã'). # 'ã' # ã - gsub(/ä/um,'ä'). # 'ä' # ä - gsub(/å/um,'å'). # 'å' # å - gsub(/æ/um,'æ'). # 'æ' # æ - gsub(/ç/um,'ç'). # 'ç' # ç - gsub(/è/um,'è'). # 'è' # è - gsub(/é/um,'é'). # '´' # é - gsub(/ê/um,'ê'). # 'ˆ' # ê - gsub(/ë/um,'ë'). # 'ë' # ë - gsub(/ì/um,'ì'). # 'ì' # ì - gsub(/í/um,'í'). # '´' # í - gsub(/î/um,'î'). # 'î' # î - gsub(/ï/um,'ï'). # 'ï' # ï - gsub(/ð/um,'ð'). # 'ð' # ð - gsub(/ñ/um,'ñ'). # 'ñ' # ñ - gsub(/ò/um,'ò'). # 'ò' # ò - gsub(/ó/um,'ó'). # 'ó' # ó - gsub(/ô/um,'ô'). # 'ô' # ô - gsub(/õ/um,'õ'). # 'õ' # õ - gsub(/ö/um,'ö'). # 'ö' # ö - gsub(/ø/um,'ø'). # 'ø' # ø - gsub(/ù/um,'ú'). # 'ù' # ú - gsub(/ú/um,'û'). # 'ú' # û - gsub(/û/um,'ü'). # 'û' # ü - gsub(/ü/um,'ý'). # 'ü' # ý - gsub(/þ/um,'þ'). # 'þ' # þ - gsub(/ÿ/um,'ÿ'). # 'ÿ' # ÿ - gsub(/‘/um,'‘'). # '‘' # ‘ - gsub(/’/um,'’'). # '’' # ’ - gsub(/“/um,'“'). # “ # “ - gsub(/”/um,'”'). # ” # ” - gsub(/–/um,'–'). # – # – - gsub(/—/um,'—'). # — # — - gsub(/∝/um,'∝'). # ∝ # ∝ - gsub(/∞/um,'∞'). # ∞ # ∞ - gsub(/™/um,'™'). # ™ # ™ - gsub(/✠/um,'✠'). # ✗ # ✠ - gsub(/ /um,' '). # space identify - gsub(/ /um,' ') # space identify - end - dob=if defined? dob.obj - dob.obj=str - dob - elsif dob.is_a?(String) - str - end - dob - end - end - def html(dob='') - if @sys.locale =~/utf-?8/i # instead ucs for utf8 # String#encode Iñtërnâtiônàlizætiøn - dob.obj=dob.obj.gsub(/ /u,' '). # space identify - gsub(/ /u,' ') # space identify - else - dob.obj=dob.obj.gsub(/¢/u,'¢'). # ¢ - gsub(/£/u,'£'). # £ - gsub(/¥/u,'¥'). # ¥ - gsub(/§/u,'§'). # § - gsub(/©/u,'©'). # © - gsub(/ª/u,'ª'). # ª - gsub(/«/u,'«'). # « - gsub(/®/u,'®'). # ® - gsub(/°/u,'°'). # ° - gsub(/±/u,'±'). # ± - gsub(/²/u,'²'). # ² - gsub(/³/u,'³'). # ³ - gsub(/µ/u,'µ'). # µ - gsub(/¶/u,'¶'). # ¶ - gsub(/¹/u,'¹'). # ¹ - gsub(/º/u,'º'). # º - gsub(/»/u,'»'). # » - gsub(/¼/u,'¼'). # ¼ - gsub(/½/u,'½'). # ½ - gsub(/¾/u,'¾'). # ¾ - gsub(/×/u,'×'). # × - gsub(/÷/u,'÷'). # ÷ - gsub(/¿/u,'¿'). # ¿ - gsub(/À/u,'À'). # À - gsub(/Á/u,'Á'). # Á - gsub(/Â/u,'Â'). #  - gsub(/Ã/u,'Ã'). # à - gsub(/Ä/u,'Ä'). # Ä - gsub(/Å/u,'Å'). # Å - gsub(/Æ/u,'Æ'). # Æ - gsub(/Ç/u,'Ç'). # Ç - gsub(/È/u,'È'). # È - gsub(/É/u,'É'). # É - gsub(/Ê/u,'Ê'). # Ê - gsub(/Ë/u,'Ë'). # Ë - gsub(/Ì/u,'Ì'). # Ì - gsub(/Í/u,'Í'). # Í - gsub(/Î/u,'Î'). # Î - gsub(/Ï/u,'Ï'). # Ï - gsub(/Ð/u,'Ð'). # Ð - gsub(/Ñ/u,'Ñ'). # Ñ - gsub(/Ò/u,'Ò'). # Ò - gsub(/Ó/u,'Ó'). # Ó - gsub(/Ô/u,'Ô'). # Ô - gsub(/Õ/u,'Õ'). # Õ - gsub(/Ö/u,'Ö'). # Ö - gsub(/Ø/u,'Ø'). # Ø - gsub(/Ù/u,'Ù'). # Ù - gsub(/Ú/u,'Ú'). # Ú - gsub(/Û/u,'Û'). # Û - gsub(/Ü/u,'Ü'). # Ü - gsub(/Ý/u,'Ý'). # Ý - gsub(/Þ/u,'Þ'). # Þ - gsub(/ß/u,'ß'). # ß - gsub(/à/u,'à'). # à - gsub(/á/u,'á'). # á - gsub(/â/u,'â'). # â - gsub(/ã/u,'ã'). # ã - gsub(/ä/u,'ä'). # ä - gsub(/å/u,'å'). # å - gsub(/æ/u,'æ'). # æ - gsub(/ç/u,'ç'). # ç - gsub(/è/u,'è'). # è - gsub(/é/u,'´'). # é - gsub(/ê/u,'ˆ'). # ê - gsub(/ë/u,'ë'). # ë - gsub(/ì/u,'ì'). # ì - gsub(/í/u,'´'). # í - gsub(/î/u,'î'). # î - gsub(/ï/u,'ï'). # ï - gsub(/ð/u,'ð'). # ð - gsub(/ñ/u,'ñ'). # ñ - gsub(/ò/u,'ò'). # ò - gsub(/ó/u,'ó'). # ó - gsub(/ô/u,'ô'). # ô - gsub(/õ/u,'õ'). # õ - gsub(/ö/u,'ö'). # ö - gsub(/ø/u,'ø'). # ø - gsub(/ù/u,'ù'). # ú - gsub(/ú/u,'ú'). # û - gsub(/û/u,'û'). # ü - gsub(/ü/u,'ü'). # ý - gsub(/þ/u,'þ'). # þ - gsub(/ÿ/u,'ÿ'). # ÿ - gsub(/‘/u,'&#lsquo;'). # ‘ # ‘ - gsub(/’/u,'&#rsquo;'). # ’ # ’ - gsub(/“/u,'“'). # “ # “ - gsub(/”/u,'”'). # ” # ” - gsub(/–/u,'–'). # – # – - gsub(/—/u,'—'). # — # — - gsub(/∝/u,'∝'). # ∝ # ∝ - gsub(/∞/u,'∞'). # ∞ # ∞ - gsub(/™/u,'™'). # ™ # ™ - gsub(/✠/u,'✠'). # ✠ - #gsub(/✠/u '†'). # † # † incorrect replacement † - gsub(/ /u,' '). # space identify - gsub(/ /u,' ') # space identify - end - end - self - end - def tidywords(wordlist) - wordlist_new=[] - wordlist.each do |x| - #imperfect solution will not catch all possible cases - x=x.gsub(/&/,'&') unless x =~/&\S+;/ - x=x.gsub(/&([A-Z])/,'&\1') - wordlist_new << x - end - wordlist_new - end - def markup(dob='') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - unless dob.is==:table - dob.obj=dob.obj.gsub(/#{Mx[:br_line]}/u,'<br />'). - gsub(/#{Mx[:br_paragraph]}/u,'<br />'). - gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') - end - dob.obj=dob.obj.gsub(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,''). - gsub(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;'). - gsub(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;'). - gsub(/(^|#{Mx[:gl_c]}|\s+)<\s+/,'\1< ').gsub(/\s+>(\s+|$)/,' >\1'). - #gsub(/#{Mx[:fa_emphasis_o]}(.+?)#{Mx[:fa_emphasis_c]}/,'<em>\1</em>'). #reinstate - gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/m,'<b>\1</b>'). - gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/m,'<i>\1</i>'). - gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). - gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'<sup>\1</sup>'). - gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'<sub>\1</sub>'). - gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'<ins>\1</ins>'). - gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'<cite>\1</cite>'). - gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>'). - gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'<tt>\1</tt>'). - gsub(/<:pb>\s*/,''). #Fix - gsub(/<+[-~]#>+/,'') - if dob.is !=:code - #embeds a red-bullet image --> - dob.obj=dob.obj.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'<b>\1</b>'). - gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'<i>\1</i>'). - gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'<u>\1</u>'). - gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'<del>\1</del>') - dob.obj=dob.obj.gsub(/#{Mx[:br_line]}|#{Mx[:br_nl]}/,'<br />') unless dob.is==:table - dob.obj=dob.obj.gsub(/#{Mx[:br_page]}\s*/,''). - gsub(/#{Mx[:br_page_new]}\s*/,''). - gsub(/#{Mx[: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,'<').gsub(/>/m,'>') - end - if dob.of==:block - dob.obj=dob.obj.gsub(/#{Mx[:gl_bullet]}/,'● ') - end - dob.obj=dob.obj.gsub(/#{Mx[:url_o]}([a-zA-Z0-9._-]+\@\S+?\.[a-zA-Z0-9._-]+)#{Mx[:url_c]}/, - %{#{@brace_url.xml_open}\\1#{@brace_url.xml_close}}). - gsub(/#{Dx[:url_o]}/,"#{Dx[:url_o_xml]}"). - gsub(/#{Dx[:url_c]}/,"#{Dx[:url_c_xml]}"). - gsub(/ |#{Mx[:nbsp]}/m,' ') - dob - end - def markup_light(dob='') - dob.obj=dob.obj.gsub(/\/\{(.+?)\}\//,'<i>\1</i>'). - gsub(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>'). - gsub(/_\{(.+?)\}_/,'<u>\1</u>'). - gsub(/-\{(.+?)\}-/,'<del>\1</del>'). - gsub(/<br(\s*\/)?>/,'<br />'). - gsub(/<:pb>\s*/,''). - gsub(/<[-~]#>/,''). - gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& '). #sort - gsub(/&([^;]{1,5})/,'&\1'). #sort, rough estimate, revisit #WATCH found in node not sax - gsub(/(?:^|[^_\\])#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, - "<image.path>#{@md.file.output_path.xml.rel_image}\/\\1</image.path>"). - gsub(/ |#{Mx[:nbsp]}/,' ') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - dob - end - def markup_fictionbook(dob='') - dob.obj.gsub(/~\{([\d*+]+).+?\}~/,'[\1]'). - gsub(/\/\{(.+?)\}\//,'<i>\1</i>'). - gsub(/[*!]\{(.+?)\}[*!]/,'<b>\1</b>'). - gsub(/_\{(.+?)\}_/,'<u>\1</u>'). - gsub(/-\{(.+?)\}-/,'<del>\1</del>'). - gsub(/<br(?:\s*\/)?>/,'<br />'). - gsub(/<:pb>\s*/,''). - gsub(/<[-~]#>/,''). - #temporary --> - gsub(/<:\S+?>/,''). - #<-- temporary - gsub(/<[-~]#>/,''). - gsub(/(^|#{Mx[:gl_c]}|\s)&\s+/,'\1& '). #sort - gsub(/&([^;]{1,5})/,'&\1') #sort, rough estimate, revisit #WATCH found in node not sax - gsub(/(#{Mx[:lnk_o]}(\S+?\.(?:png|jpg|gif))[ ]+.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/, - "<image.path>#{@md.file.output_path.xml.rel_image}\/\\1</image.path>"). - gsub(/ |#{Mx[:nbsp]}/,' ') - wordlist=dob.obj.scan(/&[#0-9a-z]+;|\S+|\n/) #\n needed for tables, check though added 2005w17 - dob.obj=tidywords(wordlist).join(' ').strip - dob - end - def markup_group(dob='') - dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>'). - gsub(/<:?br(?:\s+\/)?>/,'<br />'). - gsub(/<(link xmlns:xlink=".+?")>/,'<\1>'). - gsub(/<(\/link)>/,'<\1>'). - gsub(/<(\/?en)>/,'<\1>') - dob - end - def markup_block(dob='') - dob.obj=dob.obj.gsub(/</,'<').gsub(/>/,'>'). - gsub(/<:?br(?:\s+\/)?>/,'<br />'). - gsub(/<(link xmlns:xlink=".+?")>/,'<\1>'). - gsub(/<(\/link)>/,'<\1>'). - gsub(/<(\/?en)>/,'<\1>') - dob - end - def xml_sem_block_paired(matched) # colon depth: many, recurs - matched=matched.gsub(/\b(au):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:au]} depth="many">\\2</sem:#{@ab[:au]}>}). - gsub(/\b(vol):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:vol]} depth="many">\\2</sem:#{@ab[:vol]}>}). - gsub(/\b(pub):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:pub]} depth="many">\\2</sem:#{@ab[:pub]}>}). - gsub(/\b(ref):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ref]} depth="many">\\2</sem:#{@ab[:ref]}>}). - gsub(/\b(desc):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:desc]} depth="many">\\2</sem:#{@ab[:desc]}>}). - gsub(/\b(conv):\{(.+?)\}:\1\b/m,%{<sem:#{@ab[:conv]} depth="many">\\2</sem:#{@ab[:conv]}>}). - gsub(/\b(ct):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:ct]} depth="many">\\2</sem:#{@ab[:ct]}>}). - gsub(/\b(cty):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:cty]} depth="many">\\2</sem:#{@ab[:cty]}>}). - gsub(/\b(org):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:org]} depth="many">\\2</sem:#{@ab[:org]}>}). - gsub(/\b(dt):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:dt]} depth="many">\\2</sem:#{@ab[:dt]}>}). - gsub(/\b(n):\{(.+?)\}:\1\b/m, %{<sem:#{@ab[:n]} depth="many">\\2</sem:#{@ab[:n]}>}). - gsub(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m,'<sem:\1 depth="many">\2</sem:\1>') - end - def xml_semantic_tags(dob) - if @md.sem_tag - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj.gsub!(/([a-z]+(?:[_:.][a-z]+)*)(?::\{(.+?)\}:\1)/m) {|c| xml_sem_block_paired(c) } - dob.obj=dob.obj.gsub(/:\{(.+?)\}:au\b/m, %{<sem:#{@ab[:au]} depth="one">\\1</sem:#{@ab[:au]}>}). - gsub(/:\{(.+?)\}:n\b/m, %{<sem:#{@ab[:n]} depth="one">\\1</sem:#{@ab[:n]}>}). - gsub(/:\{(.+?)\}:ti\b/m, %{<sem:#{@ab[:ti]} depth="one">\\1</sem:#{@ab[:ti]}>}). - gsub(/:\{(.+?)\}:ref\b/m, %{<sem:#{@ab[:ref]} depth="one">\\1</sem:#{@ab[:ref]}>}). - gsub(/:\{(.+?)\}:desc\b/m, %{<sem:#{@ab[:desc]} depth="one">\\1</sem:#{@ab[:desc]}>}). - gsub(/:\{(.+?)\}:cty\b/m, %{<sem:#{@ab[:cty]} depth="one">\\1</sem:#{@ab[:cty]}>}). - gsub(/:\{(.+?)\}:org\b/m, %{<sem:#{@ab[:org]} depth="one">\\1</sem:#{@ab[:org]}>}). - gsub(/:\{(.+?)\}:([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="one">\1</sem:\2>'). - gsub(/;\{([^}]+(?![;]))\};ti\b/m, %{<sem:#{@ab[:ti]} depth="zero">\\1</sem:#{@ab[:ti]}>}). - gsub(/;\{([^}]+(?![;]))\};qt\b/m, %{<sem:#{@ab[:qt]} depth="zero">\\1</sem:#{@ab[:qt]}>}). - gsub(/;\{([^}]+(?![;]))\};ref\b/m, %{<sem:#{@ab[:ref]} depth="zero">\\1</sem:#{@ab[:ref]}>}). - gsub(/;\{([^}]+(?![;]))\};ed\b/m, %{<sem:#{@ab[:ed]} depth="zero">\\1</sem:#{@ab[:ed]}>}). - gsub(/;\{([^}]+(?![;]))\};v\b/m, %{<sem:#{@ab[:v]} depth="zero">\\1</sem:#{@ab[:v]}>}). - gsub(/;\{([^}]+(?![;]))\};desc\b/m, %{<sem:#{@ab[:desc]} depth="zero">\\1</sem:#{@ab[:desc]}>}). - gsub(/;\{([^}]+(?![;]))\};def\b/m, %{<sem:#{@ab[:def]} depth="zero">\\1</sem:#{@ab[:def]}>}). - gsub(/;\{([^}]+(?![;]))\};trans\b/m, %{<sem:#{@ab[:trans]} depth="zero">\\1</sem:#{@ab[:trans]}>}). - gsub(/;\{([^}]+(?![;]))\};y\b/m, %{<sem:#{@ab[:y]} depth="zero">\\1</sem:#{@ab[:y]}>}). - gsub(/;\{([^}]+(?![;]))\};ab\b/m, %{<sem:#{@ab[:ab]} depth="zero">\\1</sem:#{@ab[:ab]}>}). - gsub(/;\{([^}]+(?![;]))\};pg\b/m, %{<sem:#{@ab[:pg]} depth="zero">\\1</sem:#{@ab[:pg]}>}). - gsub(/;\{([^}]+(?![;]))\};fn?\b/m, %{<sem:#{@ab[:fn]} depth="zero">\\1</sem:#{@ab[:fn]}>}). - gsub(/;\{([^}]+(?![;]))\};mn?\b/m, %{<sem:#{@ab[:mn]} depth="zero">\\1</sem:#{@ab[:mn]}>}). - gsub(/;\{([^}]+(?![;]))\};ln?\b/m, %{<sem:#{@ab[:ln]} depth="zero">\\1</sem:#{@ab[:ln]}>}). - gsub(/;\{([^}]+(?![;]))\};in\b/m, %{<sem:#{@ab[:in]} depth="zero">\\1</sem:#{@ab[:in]}>}). - gsub(/;\{([^}]+(?![;]))\};uni\b/m, %{<sem:#{@ab[:uni]} depth="zero">\\1</sem:#{@ab[:uni]}>}). - gsub(/;\{([^}]+(?![;]))\};fac\b/m, %{<sem:#{@ab[:fac]} depth="zero">\\1</sem:#{@ab[:fac]}>}). - gsub(/;\{([^}]+(?![;]))\};inst\b/m, %{<sem:#{@ab[:inst]} depth="zero">\\1</sem:#{@ab[:inst]}>}). - gsub(/;\{([^}]+(?![;]))\};dept\b/m, %{<sem:#{@ab[:dpt]} depth="zero">\\1</sem:#{@ab[:dept]}>}). - gsub(/;\{([^}]+(?![;]))\};org\b/m, %{<sem:#{@ab[:org]} depth="zero">\\1</sem:#{@ab[:org]}>}). - gsub(/;\{([^}]+(?![;]))\};com?\b/m, %{<sem:#{@ab[:com]} depth="zero">\\1</sem:#{@ab[:com]}>}). - gsub(/;\{([^}]+(?![;]))\};cty\b/m, %{<sem:#{@ab[:cty]} depth="zero">\\1</sem:#{@ab[:cty]}>}). - gsub(/;\{([^}]+(?![;]))\};([a-z]+(?:[_:.][a-z]+)*)/m,'<sem:\2 depth="zero">\1</sem:\2>') - end - dob - end - end -end -module SiSU_XML_Tags #Format - require_relative 'param' # param.rb - include SiSU_Param - include SiSU_Viz - class RDF - def initialize(md='',seg_name=[],tracker=0) - @full_title=@subtitle=@author=@subject=@description=@publisher=@contributor=@date=@date_created=@date_issued=@date_available=@date_valid=@date_modified=@type=@format=@identifier=@source=@language=@relation=@coverage=@rights=@copyright=@owner=@keywords='' - @md=md - @rdfurl=%{ rdf:about="http://www.jus.uio.no/lm/toc"\n} - if defined? @md.title.full \ - and @md.title.full # DublinCore 1 - title - @rdf_title=%{ dc.title="#{seg_name}#{@md.title.full}"\n} - @full_title=%{ <meta name="dc.title" content="#{@md.title.full}" />\n} - end - if defined? @md.creator.author \ - and @md.creator.author=~/\S+/ # DublinCore 2 - creator/author (author) - @rdf_author=%{ dc.author="#{@md.creator.author}"\n} - content=meta_content_clean(@md.creator.author) - @author=%{ <meta name="dc.author" content="#{content}" />\n} - end - if defined? @md.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(/( |#{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 #‘ ’ #“ ” - para.gsub!(/\t/,' ') - para.gsub!(/�/,' ') #watch, replace with char code - para.gsub!(/[“”]/,'""') - para.gsub!(/[–—]/,'-') #— – chk - para.gsub!(/·/,'*') - para.gsub!(/\\copy(?:right)?\b/,'©') - para.gsub!(/\\trademark\b|\\tm\b/,'®') - para.gsub!(/\44/,'$') #$ 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(/(?: \\;|#{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!(/&/,'&') 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!(/</,'<') - para.gsub!(/>/,'>') - 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> -<a href="../#{@basename}.#{k}/portrait.pdf"> -<img border="0" width="15" height="18" src="../_sisu/image/b_pdf.png" alt="pdf portrait"></a> -<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(/(?: |#{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(/ |#{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!(/©/,'©') # bullet markup, marked down - para.gsub!(/&/,'&') # 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!(/ |#{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/,'  ').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/,'  ') - 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/,'  ').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/,'  ').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">' + - ' \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"> #{@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"> #{@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"> #{@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"> #{@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"> #{@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"> #{@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"> #{@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}"> </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}"> </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%"> - -#{@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"> - <a href="index.html" target="_top" alt="->"> - #{@vz.png_nav_toc} - </a> -#{@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="->"> - #{@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"> - #{firstseg} -#{@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="->"> - #{@vz.png_nav_nxt} - </a>} if @md.firstseg =~/\S+/ - %{<table summary="table of contents segment navigation band" id="toc" width="100%" bgcolor=#{@vz.color_band1}> -<tr><td width="20%"> - -</td> -<td width="60%" align="center"> - #{@tocband_segtoc} -</td> -<td width="20%" align="right"> - #{firstseg} -#{@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>©</sup> ') - %{<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> <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> </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> </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"> - - </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"> </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"> </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} - -#{@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} - -#{@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+"> <sup>\d+<\/sup> /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 & 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} #{@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__ |