# encoding: 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, 2010, 2011, 2012, 2013, 2014, 2015 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:
* Git
* Ralph Amissah
** Description: opendocument formatting, default opendocument template
=end
module SiSU_XML_ODF_ODT_Format
require_relative 'dp' # dp.rb
include SiSU_Param
class ParagraphNumber
def initialize(make,paranum)
@make=make
@paranum=/(\d+)/m.match(paranum.to_s)[1]
end
def set_ref_and_display
set_ref=@paranum.gsub(/(\d+)/,
' ')
disp=@paranum.gsub(/(\d+)/,
(@make.build.odt_ocn?) \
? %{ #{Dx[:ocn_o]}\\1#{Dx[:ocn_c]}}
: '')
{ display: disp, set_ref: set_ref }
end
def set_bookmark_and_display
set_ref=@paranum.gsub(/(\d+)/,
' ')
disp=@paranum.gsub(/(\d+)/,
(@make.build.odt_ocn?) \
? %{ #{Dx[:ocn_o]}\\1#{Dx[:ocn_c]}}
: '')
{ display: disp, set_ref: set_ref }
end
def name
@paranum.gsub(/(\d+)/,'')
end
def goto
@paranum.gsub(/(\d+)/,'')
end
end
class FormatBookIndex
def initialize(idx_str)
@idx_str=idx_str
end
def book_idx_bookmark
map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map #p map_nametags
rgx_bookmark=/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}#?\S+?#{Mx[:rel_c]}/m
while @idx_str =~/#{Mx[:lnk_o]}([^#{Mx[:lnk_o]}#{Mx[:lnk_c]}]+)#{Mx[:lnk_c]}#{Mx[:rel_o]}#?(\S+?)#{Mx[:rel_c]}/m
link,url=$1,$2
link,url=link.strip,url.strip
@idx_str=@idx_str.gsub(/&/m,"&")
ocn_lnk=if map_nametags[url] \
and map_nametags[url][:ocn]
map_nametags[url][:ocn]
else nil
end
ocn_lnk=(url=~/^\d+$/ ? url : ocn_lnk)
if ocn_lnk and not ocn_lnk.empty?
@idx_str=@idx_str.sub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,
'\1').
sub(rgx_bookmark,
%{#{link.strip}})
else
puts %{name tag: "#{url}" not found}
@idx_str.sub!(rgx_bookmark,"#{link}")
end
end
@idx_str=@idx_str.gsub(/#{Xx[:protect]}/m,'').
sub(/,\s*$/m,'').
gsub(/\n/,'')
@idx_str='' + @idx_str + ''
end
end
class Tags
def set_bookmark_tag(dob)
tags=''
if dob.tags.length > 0
dob.tags.each do |tag|
tags +=%{ }
end
end
tags
end
end
class FormatTextObject
def initialize(md,t_o)
@md,@t_o=md,t_o
if t_o.is_a?(Hash)
@txt =t_o[:txt] || nil
else
p t_o.class
p caller
end
rgx=/#{Mx[:en_a_o]}\d+\s+(.+?)#{Mx[:en_a_c]}/
@txt=@txt.gsub(rgx,'\1') if @txt =~rgx
end
def scr_endnote_body
"#{@txt} "
end
def heading_body1
end
def heading_body2
end
def heading_body3
end
def heading_body4
end
def heading_body5
end
def heading_body6
end
def heading_body7
end
end
class Table
@@tablehead,@@table_counter=0,0 #reinitialise on new file
@@tablefoot=[] #watch
@@fns=''
def initialize(md,dob,p_num)
@md,@dob,@p_num=md,dob,p_num
@txt=dob.obj
if @md.fns != @@fns
@@table_counter=0
@@fns=@md.fns
end
end
def break_line
(@md.opt.act[:maintenance][:set]==:on) \
? "\n" : ''
end
def table_head_open(count)
type=(@dob.head_) \
? 1
: 2
alpha=case @dob.cols
when 1 then 'A'
when 2 then 'B'
when 3 then 'C'
when 4 then 'D'
when 5 then 'E'
when 6 then 'F'
when 7 then 'G'
when 8 then 'H'
when 9 then 'I'
when 10 then 'J'
when 11 then 'K'
when 12 then 'L'
when 13 then 'M'
when 14 then 'N'
else 'D'
end
tag=SiSU_XML_ODF_ODT_Format::Tags.new.set_bookmark_tag(@dob)
%{#{@p_num[:set_ref]}#{tag}#{break_line}} +
%{#{break_line}}
end
def table_close(tablefoot='')
'' \
+ %{#{@p_num[:display]}}
end
def table_tag_cell(str,i)
txt_name_cell=if i==0 \
and @dob.head_
'Table_Heading'
else 'P_table_cell'
end
str=str.gsub(/^~$/,'') # tilde / empty cell
%{#{break_line}} +
%{#{break_line}} +
%{#{str}} +
%{#{break_line}} +
%{#{break_line}}
end
def table_tag_row(str,i)
%{#{break_line}} +
%{#{str}} +
%{#{break_line}}
end
def table_tag_row_dump(str,i)
txt_name_row=if i==0 \
and @dob.head_
'Table_Heading'
else 'P_table_cell'
end
%{#{break_line}} +
%{#{break_line}} +
%{#{break_line}} +
%{#{str}} +
%{#{break_line}} +
%{#{break_line}} +
%{#{break_line}}
end
def table_row(row,i)
row='' if row =~/^/,1]
@@tablefoot << m if m
row=row.gsub(//,'')
@cells=[]
row.split(/\s*#{Mx[:tc_p]}/).each do |cell|
@cells << table_tag_cell(cell,i)
end
row=@cells.join
row=table_tag_row(row,i)
row
end
def table
@@table_counter+=1
table_head_open(@@table_counter)
@table=[]
@dob.obj.split(/\s*#{Mx[:tc_c]}/).each_with_index do |r,i|
@table << table_row(r,i)
end
@dob.obj= table_head_open(@@table_counter) + @table.join + table_close
@dob
end
end
class ODT_Head_1_2
def initialize(md)
@md=md
@generator="#{@md.sisu_version[:project]} #{@md.sisu_version[:version]} #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})"
end
def manifest_rdf
x=<
WOK
x=x.strip
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
x
end
def meta_inf_manifest_xml(md)
images=[' ']
if md.ec[:image].length > 0
md.ec[:image].each do |i|
images<<<
WOK
end
end
images=images.join('')
x=<
#{images}
WOK
x=x.strip
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
x
end
def meta_xml
x=<
#{@generator}
#{@md.generated}
#{@md.generated}
en-US
WOK
x=x.strip
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
x
end
def settings_xml
x=<
0
0
0
0
true
false
view2
0
0
0
0
0
0
0
2
true
100
false
true
false
false
true
true
false
true
false
false
false
false
false
true
true
0
false
false
false
false
true
false
false
false
false
true
true
false
false
true
false
true
false
high-resolution
1
0
true
false
true
false
true
false
true
false
true
false
true
true
false
true
true
true
false
false
false
0
false
false
true
true
WOK
x=x.strip
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
x
end
def styles_xml
x=<
WOK
x=x.strip
x=x.gsub(/\n+/m,'') unless @md.opt.act[:maintenance][:set]==:on
x
end
def mimetype
x=< '
@t_o
end
def br_page_line
sep='_'
@t_o.obj=%{#{sep*60}}
@t_o
end
def obj_sep #center later
sep='--- '
@t_o.obj=%{#{sep*20}}
@t_o
end
end
class XML
end
end
__END__