# coding: utf-8
=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, 2008, 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 .
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: opendocument formatting, default opendocument template
=end
module SiSU_ODF_format
require "#{SiSU_lib}/param"
include SiSU_Param
include SiSU_Viz
class Paragraph_number
def initialize(paranum)
@paranum=/(\d+)/m.match(paranum)[1]
end
def display
@paranum.gsub(/(\d+)/,' \1')
end
def name
@paranum.gsub(/(\d+)/,'')
end
def goto
@paranum.gsub(/(\d+)/,'')
end
end
class Format_text_object
@@dp=nil
def initialize(md,t_o)
@md,@t_o=md,t_o
if t_o.class == Hash
@txt =t_o[:txt] || nil
#elsif t_o.class == Array
# @txt =txt[0]
#elsif t_o.class == String
# @txt =txt
else
#@one,@two,@three=one,two,three
p t_o.class
p caller
end
rgx=/^#{Mx[:lv_o]}[1-6-]:/
@txt.gsub!(rgx,'') if @txt =~rgx
@dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern
rgx=/#{Mx[:en_a_o]}\d+\s+(.+?)#{Mx[:id_o]}#@dp#{Mx[:id_c]}#{Mx[:en_a_c]}/
@txt.gsub!(rgx,'\1') if @txt =~rgx
@vz=SiSU_Env::Get_init.instance.skin
end
def scr_endnote_body
"#@txt "
end
def heading_body1
#%{#@two}
end
def heading_body2
#%{#@two}
end
def heading_body3
#%{#@two}
end
def heading_body4
#%{#@two}
end
def heading_body5
#%{#@two}
end
def heading_body6
#%{#@two}
end
end
class Table
@@tablehead,@@table_counter=0,0 #reinitialise on new file
@@tablefoot=[] #watch
@@fns=''
@@dp=nil
def initialize(md,t_o)
@md,@t_o,@vz=md,t_o,SiSU_Env::Get_init.instance.skin
if t_o.class == Hash
@txt =t_o[:txt] || nil
@table =t_o[:table] || nil
#elsif t_o.class == Array
# @txt =txt[0]
#elsif t_o.class == String
# @txt =txt
else
if @md.cmd =~/M/
p t_o.class
p caller
end
end
if @md.fns != @@fns
@@table_counter=0
@@fns=@md.fns
@dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern
end
end
def table_head(count,col,h=false)
type=if h; 1
else 2
end
alpha=case col.to_i
when 1; 'A'
when 2; 'B'
when 3; 'C'
when 4; 'D'
when 5; 'E'
when 6; 'F'
when 7; 'G'
when 8; 'H'
when 9; 'I'
when 10; 'J'
when 11; 'K'
when 12; 'L'
when 13; 'M'
when 14; 'N'
else 'D'
end
%{#@br} +
%{#@br}
end
def table_end(tablefoot='')
''
end
def table_row(inf,h=false)
if h; %{#@br} +
%{#@br} +
%{#@br}
else %{#@br} +
%{#@br} +
%{#@br}
end
end
def table_cell(inf,h=false)
if h; %{#@br} +
%{#@br} +
%{#@br} +
%{#@br}
else %{#@br} +
%{#@br} +
%{#@br} +
%{#@br}
end
end
def table_row_close(h=false)
%{#@br} +
%{#@br} +
%{#@br}
end
def table
@txt='' if @txt =~/^/,1]
@@tablefoot << m if m
@txt.gsub!(//,'')
@@tablehead=1 if @txt =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u
@@table_counter+=1 if @txt =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}/u
if @txt =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}\s+c(\d+).+?#{Mx[:tc_p]}~\d+;\w\d+;\w\d+#{Mx[:gr_c]}/u; @txt=table_head(@@table_counter,$1,true)
elsif @txt =~/#{Mx[:gr_o]}T#{Mx[:tc_p]}\s+c(\d+).+?#{Mx[:tc_p]}~\d+;\w\d+;\w\d+#{Mx[:gr_c]}/u; @txt=table_head(@@table_counter,$1)
end
if @txt =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/
tablefoot=[]
@@tablefoot.each {|x| tablefoot << ''}
@@tablefoot=[]
if @txt =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/; @txt=table_end
end
end
if @@tablehead == 1
if @txt =~/#{Mx[:tc_p]}#{Mx[:tc_p]}/u
if @txt =~/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u
@txt.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1,true))
end
if @txt =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u
@txt.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1,true))
end
if @txt =~/#{Mx[:tc_c]}/
@txt.gsub!(/#{Mx[:tc_c]}/,table_row_close(true))
end
@@tablehead=0
end
@txt
else
if @txt =~/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u
@txt.gsub!(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1))
end
if @txt =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u
@txt.gsub!(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1))
end
if @txt =~/#{Mx[:tc_c]}/
@txt.gsub!(/#{Mx[:tc_c]}/,table_row_close)
end
@txt
end
@txt
end
def table_split
@new_content=[]
@table.split(/\s*#{Mx[:tc_o]}/).each do |parablock|
table=if parablock =~/#{Mx[:gr_o]}/
txt_obj={:txt =>parablock}
Table.new(@md,txt_obj)
else
txt_obj={:txt =>"#{Mx[:tc_o]}#{parablock}"}
Table.new(@md,txt_obj)
end
@new_content << table.table
end
@new_content.join
end
end
class XML
end
end
__END__