=begin * Name: SiSU * Description: a framework for document structuring, publishing and search * Author: Ralph Amissah * Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ralph Amissah All Rights Reserved. * License: GPL 3 or later: SiSU, a framework for document structuring, publishing and search Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ralph Amissah This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . If you have Internet connection, the latest version of the GPL should be available at these locations: * SiSU uses: * Standard SiSU markup syntax, * Standard SiSU meta-markup syntax, and the * Standard SiSU object citation numbering and system * Hompages: * Download: * Ralph Amissah ** Description: document abstraction tables =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 =~/