# encoding: utf-8
=begin
* Name: SiSU
** Description: documents, structuring, processing, publishing, search
*** common file for xml table generation
** Author: Ralph Amissah
[ralph@amissah.com]
[ralph.amissah@gmail.com]
** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 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]
** 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]
** Git
[http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary]
[http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/xml_tables.rb;hb=HEAD]
=end
module SiSU_Tables
class Table #_xml
@@tablehead=0
@@tablefoot=[] #watch #bug??? #check was @@tablefoot
def initialize(one,ocn='')
@one,@parablock,@ocn=one,one,ocn
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
/,1]
@@tablefoot << m if m
@parablock=@parablock.gsub(//,'')
@@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}})
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,
%{
}).
gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,
%{ | }).
gsub(/#{Mx[:tc_c]}/,"\n | \n
")
@@tablehead=0
end
@parablock
else
@parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,
%{
}).
gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,
%{
|
}).
gsub(/#{Mx[:tc_c]}/,"\n | \n
\n")
end
@parablock
end
end
class TableXMLdocbook
@@tablehead=0
@@tablefoot=[] #watch
def initialize(table,id='')
@table_obj,@id=table,id
end
def spaces
Ax[:spaces]
end
def table
table_obj=@table_obj
if table_obj.obj !~/^/,'
')
trc <<= if table_obj.head_ and nr==0
%{#{spaces*6}#{c}\n}
else %{#{spaces*6}#{c}\n}
end
nc+=1
end
trc=(trc.is_a?(Array)) ? trc.flatten.join : trc
trc = if table_obj.head_ and nr==0
"#{spaces*4}\n#{spaces*5}\n#{trc}#{spaces*5}
\n#{spaces*4}\n#{spaces*4}\n"
else
"#{spaces*5}\n#{trc}#{spaces*5}
\n"
end
nr+=1
table_rows << trc
end
tbody_close=if table_obj.head_
"#{spaces*4}"
else ''
end
table_rows=table_rows.flatten.join
# include table_id
table_obj.obj=%{#{spaces*3}
#{spaces*4}
#{spaces*4}
#{table_rows}#{tbody_close}
#{spaces*4}
#{spaces*4}
#{spaces*3}}
table_obj
end
end
class TableXMLexp '
end
def margin_numless
''
end
def table_head(inf)
%{
|
}
end
def table_end(tablefoot='')
%{ #{the_margin_numless}#{the_margin_numless} #{the_table_close}
#{tablefoot}}
end
def table_row(inf,h=false)
bold=h ? '' : ''
%{
#{bold}}
end
def table_cell(inf,h=false)
if h; %{ | }
else %{ | }
end
end
def table_row_close(h=false)
bold_close=h ? '' : ''
"#{bold_close} | "
end
def table
m=@parablock[//,1]
@@tablefoot << m if m
@parablock=@parablock.gsub(//,'')
@@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__
| |