aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/0.52/dal_doc_str_tables.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/0.52/dal_doc_str_tables.rb')
-rw-r--r--lib/sisu/0.52/dal_doc_str_tables.rb180
1 files changed, 180 insertions, 0 deletions
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; ]*\}/
+ "<!Th¡ c#{@row[2].length}; #{widths}!>"
+ elsif para =~/\{(?:t|table)(?:\sc\d+;)?[\d; ]*\}/
+ "<!T¡ c#{@row[2].length}; #{widths}!>"
+ end
+ @row.each do |l|
+ l << '' if l.length == (@row[1].length - 1)
+ table=[]
+ if l.length == @row[1].length
+ table << '<!' #'<tr>'
+ n= -1
+ l.each do |c|
+ n +=1 #'<td>' + c + '</td>'
+ table << if c =~/\A(?:\n)?\s*\Z/
+ "¡¡#{w[n]}¡" + ' '
+ else
+ "¡¡#{w[n]}¡" + c.strip
+ end
+ end
+ table << '!>' #'</tr>'
+ tuned_file << table.join
+ end
+ end
+ tuned_file << '<!TZ!>' #'</table>'
+ 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>/,'<span style="background-color: rgb(255,240,196)">') # bright yellow rgb(255,255,0) pale yellow rgb(255,255,200)
+ para.gsub!(/<:\/hi>/,%{</span>})
+ 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+?;.+?)$/,'<!Th¡ \1!>')
+ para.gsub!(/table\{\s+(c\d+?;.+?)$/,'<!T¡ \1!>')
+ @@flag['table_to']=true
+ end
+ if @@flag['table_to'] and para =~/\}table/
+ para.gsub!(/^\}table\s*$/,"<!TZ!>\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,'<!\1!>') unless para =~/<!Th?¡/
+ end
+ para.gsub!(/\n/,' ')
+ para.strip!
+ @tuned_table << para
+ else
+ para.gsub!(/\n/,' ') unless para =~/<:(?:code|verse|alt|group)>/
+ 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)>|<!TZ!>)/
+ line.gsub!(/(.+)/,"¡¡#{@@column[@@counter]}¡\\1") unless line =~/<!Th?¡/
+ @@counter+=1
+ end
+ end
+ data
+ end
+ end
+end
+__END__