From 65477054fd798728bf186aa2938727ddddbe86a5 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 22 May 2007 02:06:46 +0100 Subject: Imported upstream version 0.52.7 --- lib/sisu/0.52/dal_doc_str_tables.rb | 180 ++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 lib/sisu/0.52/dal_doc_str_tables.rb (limited to 'lib/sisu/0.52/dal_doc_str_tables.rb') diff --git a/lib/sisu/0.52/dal_doc_str_tables.rb b/lib/sisu/0.52/dal_doc_str_tables.rb new file mode 100644 index 00000000..e70490e5 --- /dev/null +++ b/lib/sisu/0.52/dal_doc_str_tables.rb @@ -0,0 +1,180 @@ +=begin + * Name: SiSU information Structuring Universe - Structured information, Serialized Units + * Author: Ralph Amissah + * http://www.jus.uio.no/sisu + * http://www.jus.uio.no/sisu/SiSU/download.html + + * Description: xml output (sax style) processing + + * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ralph Amissah + + * License: GPL 2 or later + + Summary of GPL 2 + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + + If you have Internet connection, the latest version of the GPL should be + available at these locations: + http://www.fsf.org/licenses/gpl.html + http://www.gnu.org/copyleft/gpl.html + http://www.jus.uio.no/sisu/gpl2.fsf + + SiSU was first released to the public on January 4th 2005 + + SiSU uses: + + * Standard SiSU markup syntax, + * Standard SiSU meta-markup syntax, and the + * Standard SiSU object citation numbering and system + + © Ralph Amissah 1997, current 2007. + All Rights Reserved. + + * Ralph Amissah: ralph@amissah.com + ralph.amissah@gmail.com + + * Notes: tidy -xml sax.xml >> index.tidy +=end +module SiSU_document_structure_tables + class Instantiate < SiSU_Param::Parameters::Instructions + @@flag={} + def initialize + @@flag['table_to']=false + @@counter=@@column=@@columns=0 + @@line_mode='' + end + end + class Tables + @@flag={} + def initialize(md,data) + @md,@data=md,data + Instantiate.new + end + def table_visual(para) + count=0 + @row=[] + table=[] + @rows=para.split(/;;/) + @rows.compact! #(c\d+?;.+?) + @rows.each do |row| + count +=1 + @row[count]=row.split(/\|/) + end + @row.compact! + widths=if @row[0].to_s =~/^\{(?:t|table)(?:~h)?\s+\d+;/ + col_width=@row[0].to_s.scan(/\d+/) + rem=(100 - col_width[0].to_i) + col_w=rem/(@row[1].length - 1) + "#{col_width[0].to_s};" + ("#{col_w};" * (@row[1].length-1)) + else + col_w=100/@row[1].length + "#{col_w};" * @row[1].length + end + @row.delete_if {|r| r[0] =~/\{(?:table|t)(?:~h)?(?:\s+c\d+;)?[\d; ]*\}/} + w=widths.split(/;/) + tuned_file=[] + tuned_file << if para =~/\{(?:t|table)~h(?:\sc\d+;)?[\d; ]*\}/ + "" + elsif para =~/\{(?:t|table)(?:\sc\d+;)?[\d; ]*\}/ + "" + end + @row.each do |l| + l << '' if l.length == (@row[1].length - 1) + table=[] + if l.length == @row[1].length + table << '' + n= -1 + l.each do |c| + n +=1 #'' + c + '' + table << if c =~/\A(?:\n)?\s*\Z/ + "¡¡#{w[n]}¡" + ' ' + else + "¡¡#{w[n]}¡" + c.strip + end + end + table << '!>' #'' + tuned_file << table.join + end + end + tuned_file << '' #'' + tuned_file=tuned_file.compact.join("\n") + end + def tables + data=@data + count=0 + @row,@tuned_file,@tuned_table=[],[],[] + data.each do |para| + para.gsub!(/\n\s+\n/,"\n") + para.gsub!(/\s+\n/,"\n") + para.gsub!(/<:hi>/,'') # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200) + para.gsub!(/<:\/hi>/,%{}) + table=[] + if para =~/^\{(?:t|table)(?:~h)?(?:\sc\d+;)?[\d; ]*\}/ + @tuned_file << table_visual(para) + @tuned_file=@tuned_file.flatten + elsif @@flag['table_to'] or para[/table\{(?:~h)?/] + if para[/table\{(?:~h)?\s+c(\d+;.+)/] + instructions=$1 + @@column=instructions.split(/;\s*/) + @@columns=@@column[0] + para.gsub!(/table\{~h\s+(c\d+?;.+?)$/,'') + para.gsub!(/table\{\s+(c\d+?;.+?)$/,'') + @@flag['table_to']=true + end + if @@flag['table_to'] and para =~/\}table/ + para.gsub!(/^\}table\s*$/,"\n") + para.gsub!(/\n/,' ') #newlines taken out + para.strip! + @tuned_table << para + @tuned_table.delete('') + @tuned_file << @tuned_table.compact.join("\n") #@tuned_table.compact.join =~/\S+/ #would be preferable + para='' + @tuned_table=[] + @@flag['table_to']=false + end + if @@flag['table_to'] and para =~/\S/ + @@counter=1 + sub_array=para.dup + @@line_mode=sub_array.scan(/.+/) + Tables.new(@md,@@line_mode).tr_td + para=@@line_mode.join + para.gsub!(/(.*\S+.*)\Z/m,'') unless para =~// + para.strip! + @tuned_file << para + end + @tuned_file + end + @tuned_file + end + def tr_td + data=@data + data.each do |line| + if @@counter <= @@columns.to_i and line !~/(\}T\s*$|<:table[-_](close|end)>|)/ + line.gsub!(/(.+)/,"¡¡#{@@column[@@counter]}¡\\1") unless line =~/