diff options
author | Ralph Amissah <ralph@amissah.com> | 2009-07-04 11:57:29 -0400 |
---|---|---|
committer | Ralph Amissah <ralph@amissah.com> | 2009-07-04 11:57:29 -0400 |
commit | 7372f56054259457f77c64cbdb34e736531cfc0e (patch) | |
tree | e46b3ff01bd379cfb476dc8333b397765aef9681 /lib/sisu/v1/dal_doc_str_tables.rb | |
parent | changelog, update (diff) |
move lib to version 1 directory, (lib/sisu/v1) and make related changes
Diffstat (limited to 'lib/sisu/v1/dal_doc_str_tables.rb')
-rw-r--r-- | lib/sisu/v1/dal_doc_str_tables.rb | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/lib/sisu/v1/dal_doc_str_tables.rb b/lib/sisu/v1/dal_doc_str_tables.rb new file mode 100644 index 00000000..ff29706b --- /dev/null +++ b/lib/sisu/v1/dal_doc_str_tables.rb @@ -0,0 +1,198 @@ +# coding: utf-8 +=begin + + * Name: SiSU + + * Description: a framework for document structuring, publishing and search + + * Author: Ralph Amissah + + * Copyright: (C) 1997 - 2009 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.jus.uio.no/sisu/gpl.fsf/toc.html> + <http://www.jus.uio.no/sisu/gpl.fsf/doc.html> + <http://www.jus.uio.no/sisu/gpl.fsf/plain.txt> + + * 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> + + ** 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].join =~/^\{(?:t|table)(?:~h)?\s+\d+;/ + col_width=@row[0].join.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; ]*\}/ + "#{Mx[:gr_o]}Th#{Mx[:tc_p]} c#{@row[2].length}; #{widths}#{Mx[:gr_c]}" + elsif para =~/\{(?:t|table)(?:\sc\d+;)?[\d; ]*\}/ + "#{Mx[:gr_o]}T#{Mx[:tc_p]} c#{@row[2].length}; #{widths}#{Mx[:gr_c]}" + end + @row.each do |l| + l << '' if l.length == (@row[1].length - 1) + table=[] + if l.length == @row[1].length + table << Mx[:tc_o] #'<tr>' + n= -1 + l.each do |c| + n +=1 #'<td>' + c + '</td>' + table << if c =~/\A(?:\n)?\s*\Z/ + "#{Mx[:tc_p]}#{Mx[:tc_p]}#{w[n]}#{Mx[:tc_p]}" + ' ' + else + "#{Mx[:tc_p]}#{Mx[:tc_p]}#{w[n]}#{Mx[:tc_p]}" + c.strip + end + end + table << Mx[:tc_c] + tuned_file << table.join + end + end + tuned_file << "#{Mx[:gr_o]}TZ#{Mx[:gr_c]}" #'</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+?;.+?)$/,"#{Mx[:gr_o]}Th#{Mx[:tc_p]} \\1#{Mx[:gr_c]}") + para.gsub!(/^table\{\s+(c\d+?;.+?)$/,"#{Mx[:gr_o]}T#{Mx[:tc_p]} \\1#{Mx[:gr_c]}") + @@flag['table_to']=true + end + if @@flag['table_to'] \ + and para =~/\}table/ + para.gsub!(/^\}table\s*$/,"#{Mx[:gr_o]}TZ#{Mx[:gr_c]}\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(/.+/u) + Tables.new(@md,@@line_mode).tr_td + para=@@line_mode.join + para.gsub!(/(.*\S+.*)\Z/m,"#{Mx[:tc_o]}\\1#{Mx[:tc_c]}") unless para =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}/u + end + para.gsub!(/\n/,' ') + para.strip! + @tuned_table << para + else + para.gsub!(/\n/,' ') unless para =~/#{Mx[:gr_o]}(?:code|verse|alt|group)#{Mx[:gr_c]}/ + 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*$|#{Mx[:gr_o]}:table[-_](close|end)#{Mx[:gr_c]}|#{Mx[:gr_o]}TZ#{Mx[:gr_c]})/ + #if line.encoding.inspect =~/Encoding:ASCII-8BIT/ + # line=line.force_encoding('utf-8') + #end + line.gsub!(/(.+)/,"#{Mx[:tc_p]}#{Mx[:tc_p]}#{@@column[@@counter]}#{Mx[:tc_p]}\\1") unless line =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}/u + @@counter+=1 + end + end + data + end + end +end +__END__ +#p line.encoding +@data.each {|x| p x.encoding } +p para if para.encoding.inspect =~/Encoding:ASCII-8BIT/ |