From 7372f56054259457f77c64cbdb34e736531cfc0e Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 4 Jul 2009 11:57:29 -0400 Subject: move lib to version 1 directory, (lib/sisu/v1) and make related changes --- lib/sisu/v0/odf.rb | 738 ----------------------------------------------------- 1 file changed, 738 deletions(-) delete mode 100644 lib/sisu/v0/odf.rb (limited to 'lib/sisu/v0/odf.rb') diff --git a/lib/sisu/v0/odf.rb b/lib/sisu/v0/odf.rb deleted file mode 100644 index e4873a10..00000000 --- a/lib/sisu/v0/odf.rb +++ /dev/null @@ -1,738 +0,0 @@ -# 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 . - - 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 text generation - -=end -module SiSU_ODF - require "#{SiSU_lib}/particulars" - include SiSU_Particulars - require "#{SiSU_lib}/dal" - require "#{SiSU_lib}/sysenv" - include SiSU_Env - include SiSU_Viz - require "#{SiSU_lib}/odf_format" - include SiSU_ODF_format - require "#{SiSU_lib}/shared_txt" - require "#{SiSU_lib}/shared_structure" - @@alt_id_count,@@alt_id_count,@@tablehead,@@number_of_cols=0,0,0,0 - class Source - require 'zlib' - require 'find' - require 'fileutils' - include FileUtils - def initialize(opt) - @opt=opt - @particulars=SiSU_Particulars::Combined_singleton.instance.get_all(opt) - @@endnotes_para=[] - end - def read - begin - @env,@md,@dal_array=@particulars.env,@particulars.md,@particulars.dal_array - @env.odf_structure - opendoc=@md.fn[:odf] - path=@env.path.output_tell - tool=if @opt.cmd =~/[MVv]/; "#{@env.program.odf_viewer} #{path}/#{@md.fnb}/#{opendoc}" - else '' - end - tell=SiSU_Screen::Ansi.new(@opt.cmd,'Opendocument (ODF:ODT)',tool) - tell.green_hi_blue unless @opt.cmd =~/q/ - tell=SiSU_Screen::Ansi.new(@opt.cmd,@opt.fns,"#{@env.path.output_tell}/#{@md.fnb}/#{opendoc}") - tell.flow if @opt.cmd =~/[MV]/ - my_make=SiSU_Env::Create_file.new(@opt.cmd,@opt.fns) - SiSU_ODF::Source::Scroll.new(@particulars).songsheet - SiSU_Env::Info_skin.new(@md).select - rescue; SiSU_Errors::Info_error.new($!,$@,@opt.cmd,@opt.fns).error - ensure - end - end - private - class Scroll [],:open=>[],:close=>[],:head=>[],:metadata=>[],:tail=>[],:endnotes=>[] } - @@docstart=true - @@fns,@@dp=nil,nil - def initialize(particulars) - @env,@md,@dal_array=particulars.env,particulars.md,particulars.dal_array - @vz=SiSU_Env::Get_init.instance.skin - @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern - @regx=/^(?:(?:#{Mx[:br_page]}\s*|#{Mx[:br_page_new]}\s*)?#{Mx[:lv_o]}\d:(\S*?)#{Mx[:lv_c]})?\s*(.+?)\s*#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}$/ - @serial=/\s*#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}\s*/ - @tab="\t" - @url_brace=SiSU_Viz::Skin.new.url_decoration - @br=if @md.cmd =~/M/; "\n" - else '' - end - end - def songsheet - pre - @data=markup(@dal_array) - post - publish - end - # Used for extraction of endnotes from paragraphs - def extract_endnotes(para='') - notes=para.scan(/#{Mx[:en_a_o]}(\d+\s+.+?)\s*#{Mx[:id_o]}#@dp#{Mx[:id_c]}#{Mx[:en_a_c]}/)[1] - @n=[] - notes.each do |n| #high cost to deal with
appropriately within odf, consider - n=n.dup.to_s - if n =~/#{Mx[:br_line]}/ - fix=n.split(/#{Mx[:br_line]}/) #watch #added - fix.each do |x| - if x =~/\S+/; @n << x - end - end - else @n << n - end - end - end - def odf_metadata(meta) - #meta.el,meta.txt,meta.type,meta.attrib - end - def odf_tail - generator="Generated by: #{@md.sisu_version[:project]} #{@md.sisu_version[:version]} of #{@md.sisu_version[:date_stamp]} (#{@md.sisu_version[:date]})" if @md.sisu_version[:version] - lastdone="Last Generated on: #{Time.now}" - rubyv="Ruby version: #{@md.ruby_version}" - sc=if @md.sc_info - "Source file: #{@md.sc_filename}\nVersion number: #{@md.sc_number}\nVersion date: #{@md.sc_date}\n" - else '' - end - url=@md.fnb - fn=@md.fn[:manifest] - manifest="#{@vz.url_root_http}/#{url}/#{fn}" - @@odf[:tail] << %{Available document outputs:
<#{manifest}>
} - @@odf[:tail] << %{\nSiSU: <www.jus.uio.no/sisu> and <www.sisudoc.org>} - @@odf[:tail] << "\n" - end - def heading(para,no) - para.gsub!(@serial,'') - para.gsub!(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,'') - para.gsub!(/^#{Mx[:lv_o]}(\d):\S*?#{Mx[:lv_c]}\s*/,'') - m=/#{$1}/ - breakpage='' - if @md.fns \ - and @md.fns != '' \ - and @md.fns !=@@fns - @@docstart=true - @@fns=@md.fns - end - unless @@docstart - breakpage=if (@md.pagenew or @md.pagebreak) \ - and (@md.pagenew =~ m or @md.pagebreak =~m) - ' ' - else '' - end - end - @@docstart=false - %{#{breakpage}#{para}} - end - def image_src(i) - image_source=if @md.fns =~/\.ss[tm]$/ \ - and FileTest.file?("#{@env.path.image_source_local_tex}/#{i}") #review - @env.path.image_source_local_tex - elsif @md.fns =~/\.-ss[tm]$/ \ - and FileTest.file?("#{@env.path.image_source_remote_tex}/#{i}") - @env.path.image_source_remote_tex - elsif FileTest.file?("#{@env.path.image_source_tex}/#{i}") - @env.path.image_source_tex - else - tell=SiSU_Screen::Ansi.new(@md.cmd,"ERROR - image:",%{"#{i}" missing},"search locations: #{@env.path.image_source_local_tex},#{@env.path.image_source_remote_tex} and #{@env.path.image_source_tex}") - tell.error2 unless @md.cmd =~/q/ - nil - end - end - def image_odf(img) - # copy image to od image directory (unless exists) - # divide pixel dimension by 37.79485 and retain 3 decimal places - # x=str.scan(/(aa[^a]+)/) - m,u=img[1],img[2] - i=/^(\S+?\.(?:png|jpg|gif))/.match(m).captures.join if m =~/^(\S+?\.(?:png|jpg|gif))/ - c=/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/.match(m).captures.join if m =~/^\S+?\.(?:png|jpg|gif)\s+.+?"(.*?)"/ - w,h=/(\d+)x(\d+)/.match(m).captures if m =~/\d+x\d+/ - w=(w.to_i/37.79485).to_s - h=(h.to_i/37.79485).to_s - h=/([0-9]+\.\d{0,3})/.match(h).captures.join - w=/([0-9]+\.\d{0,3})/.match(w).captures.join - image_source=image_src(i) - pwd=Dir.pwd - cp("#{image_source}/#{i}","#{@env.path.odf}/Pictures/#{i}") if image_source - img=if i.to_s =~/jpg|png|gif/ \ - and h.to_s =~/\d/ \ - and w.to_s =~/\d/ - @@img_count +=1 - %{#{c}} #anchor-type: as-char or paragraph or char or ... - else %{[image omitted]} - end - end - def image(para) - para.gsub!(@serial,'') - m=para.scan(/(#{Mx[:lnk_o]}\s*(.+?)\s*#{Mx[:lnk_c]}((?:https?|file|ftp)\S+|image))/) - if m; m.each do |i| - cont,url=i[1],i[2] - cont.gsub!(/([)(\]\[])/,"\\\\\\1") - cont.gsub!(/([+?])/,"\\\\\\1") # incorrect handling of + - url.gsub!(/([+?])/,"\\\\\\1") - para.sub!(/#{Mx[:lnk_o]}\s*#{cont}\s*#{Mx[:lnk_c]}#{url}/m,image_odf(i)) #watch - para.gsub!(/\\([)(\]\[?])/,'\1') #clumsy fix - end - m=nil - end - para - end - def text_link_odf(txt,url,trail) - txt.gsub!(/(\\\+)/,'+') #this is convoluted, and risky :-( - url.gsub!(/(\\\+)/,'+') #this is convoluted, and risky :-( - %{#{txt.strip}#{trail}} - end - def text_link(para) - para.gsub!(@serial,'') - m=para.scan(/(#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}((?:https?|file|ftp)\S+?))([;.,]?(?=\s|$))/) #sort - if m - m.each do |i| - txt,url,trail=i[1],i[2] - txt.gsub!(/([)(\]\[])/,"\\\\\\1") - txt.gsub!(/([+?*])/,"\\\\\\1") # problems with + - url.gsub!(/([+?])/,"\\\\\\1") # problems with + - para.gsub!(/#{Mx[:lnk_o]}\s*#{txt}#{Mx[:lnk_c]}#{url}/m,text_link_odf(txt,url,trail)) #make sure trailing ']' are not caught in url - para.gsub!(/\\([)(\]\[?])/,'\1') #clumsy fix - end - m=nil - end - para - end - def normal(para) #P1 - P3 - para.gsub!(@serial,'') - para.gsub!(/\b[_\\]((?:https?|file|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?:\s|$))/, - '\1\2') #http ftp matches escaped, no decoration - para.gsub!(/((?:^|\s)#{Mx[:lnk_c]})((?:https?|file|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?=\s|$))/, - '\1\2\3') #special case \{ e.g. \}http://url - para.gsub!(/(^|#{Mx[:gl_c]}|\s)((?:https?|file|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?=\s|$))/, - %{\\1#{@url_brace.xml_open}\\2#{@url_brace.xml_close}\\3}) #http ftp matches with decoration - #para.gsub!(/\b((?:https?|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?:\s|$))/, also works - #%{#{@url_brace.xml_open}\\1#{@url_brace.xml_close}\\2}) #http ftp matches with decoration - para.gsub!(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+)/, - %{#{@url_brace.xml_open}\\1#{@url_brace.xml_close}}) if para !~/http:\/\// # improve upon, document crash where url contains '@' symbol - para=case para - when /^#{Mx[:pa_o]}:i([1-9])#{Mx[:pa_c]}/m - m=$1 - para.gsub!(/^#{Mx[:pa_o]}:i#{m}#{Mx[:pa_c]}/m,'') - %{#{para}} - else %{#{para}} - end - para - end - def fontface(para) - #para=para.gsub(/(.+?)<\/b>/,%{\\1}) - #para=para.gsub(/(.+?)<\/i>/,%{\\1}) - end - def footnote(para) - @astx||=10000 - para.gsub!(/#{Mx[:id_o]}#@dp#{Mx[:id_c]}(#{Mx[:en_a_c]}|#{Mx[:en_b_c]})/,'\1') - #para.gsub!(/
<:i[1-9]>/,'
') - if para =~/#{Mx[:en_a_o]}\d+\s+/ - para=para.gsub(/#{Mx[:en_a_o]}(\d+)\s+(.+?)#{Mx[:en_a_c]}/,'\1 \2') - end - if para=~/#{Mx[:en_a_o]}[*+]+\s/ - asterisk=para.scan(/#{Mx[:en_a_o]}([*+]+)\s+(.+?)#{Mx[:en_a_c]}/) - asterisk.each do |x| - a=x[0].gsub(/([*+])/,"\\\\\\1") - para=para.gsub(/#{Mx[:en_a_o]}(#{a})\s+(.+?)#{Mx[:en_a_c]}/,%{\\1 \\2}) - @astx+=1 - end - end - if para=~/#{Mx[:en_b_o]}[*+]\d+\s/ - asterisk=para.scan(/#{Mx[:en_b_o]}([*+]\d+)\s+(.+?)#{Mx[:en_b_c]}/) - asterisk.each do |x| - a=x[0].gsub(/([*+])/,"\\\\\\1") - para=para.gsub(/#{Mx[:en_b_o]}(#{a})\s+(.+?)#{Mx[:en_b_c]}/,%{\\1 \\2}) - @astx+=1 - end - end - para - end - def group_clean(para) - para.gsub!(/&nbsp;| |#{Mx[:nbsp]}/,' ') - para.gsub!(//,'>') - para.gsub!(/<(text:span text:style-name="T[1-5]"|\/text:span)>/,'<\1>') #works, not ideal - para.gsub!(/#{Mx[:br_line]}/,'
') - para.gsub!(/<br(?:\s+\/)?>/,'
') - #para.gsub!(/\s\s/,'  ') - para - end - def poem(para) #P4 #same as group - para.gsub!(@serial,'') - para.gsub!(/#{Mx[:gr_o]}verse(?:-end)?#{Mx[:gr_c]}\s*/m,'') - parray=[] - para.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parray << %{#{parablock}} if parablock =~/\S+/ - end - para=parray.join + '' - end - def group(para) #P4 #same as verse - para.gsub!(@serial,'') - para.gsub!(/#{Mx[:gr_o]}group(?:-end)?#{Mx[:gr_c]}\s*/m,'') - parray=[] - para.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parablock.gsub!(/<text:a xlink:type="simple" xlink:href="(.+?)">/m,'') - parablock.gsub!(/<(\/text:a)>/,'<\1>') - parablock.gsub!(/<(text:note text:id=.+?)>/,'<\1>') - parablock.gsub!(/<(text:p text:style-name="Footnote")>/,'<\1>') - parablock.gsub!(/<(\/?text:(?:note-citation|note-body|note|p))>/,'<\1>') - parablock=footnote(parablock) - parray << %{#{parablock}} if parablock =~/\S+/ - end - para=parray.join + '' - end - def code(para) #P5 - para.gsub!(@serial,'') - para.gsub!(/#{Mx[:gr_o]}code(?:-end)?#{Mx[:gr_c]}\s*/m,'') - para.gsub!(/\s\s/,'  ') - parray=[] - para.split(/#{Mx[:br_line]}|#{Mx[:br_nl]}/).each do |parablock| - parablock=group_clean(parablock) - parablock.gsub!(/^\s*$/,'
') - parablock.gsub!(/\b[_\\]((?:https?|file|ftp):\/\/\S+?\.[^'"><\s]+?)([;.,]?(?:\s|$))/, - '\1\2') #http ftp matches escaped, no decoration - parray << %{#{parablock}} if parablock =~/\S+/ - end - para=parray.join + '' - para - end - def table(para) # - if para =~/#{Mx[:gr_o]}Th?.+/ # tables come as single block - txt_obj={:table =>para} - table=SiSU_ODF_format::Table.new(@md,txt_obj) - para=table.table_split - end - end - def odf_structure(md,t_o) - @md,@t_o=md,t_o - if t_o.class == Hash - para =t_o[:txt] || nil - lv =t_o[:lv] || nil - ocn =t_o[:ocn] || nil - hname =t_o[:h_name] || nil - #@h_name =t_o[:h_name] || 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 - lv=lv.to_i - n=lv - 1 - n3=lv + 2 - lv=nil if lv == 0 - para=unless para=~/^#{Mx[:gr_o]}code#{Mx[:gr_c]}/ - para=if para =~/#{Mx[:lnk_o]}\s*\S+?\.(?:png|jpg|gif)\s.+?#{Mx[:lnk_c]}(?:(?:https?|file|ftp):\S+|image)/; image(para) - elsif para =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:(?:https?|file|ftp):\S+|image)/; text_link(para) - else para - end - else para - end - para=footnote(para) - if lv - @@odf[:body] << case lv - when 1; heading(para,'1') << @br*2 - when 2; heading(para,'2') << @br*2 - when 3; heading(para,'3') << @br*2 - when 4; heading(para,'4') << @br*2 - when 5; heading(para,'5') << @br*2 - when 6; heading(para,'6') << @br*2 - end - elsif para =~ /#{Mx[:gr_o]}verse(?:-end)?#{Mx[:gr_c]}/ - @@odf[:body] << poem(para) - @@odf[:body] << @br*2 - elsif para =~ /#{Mx[:gr_o]}group(?:-end)?#{Mx[:gr_c]}/ - @@odf[:body] << group(para) - @@odf[:body] << @br*2 - elsif para =~ /#{Mx[:gr_o]}code(?:-end)?#{Mx[:gr_c]}/ - @@odf[:body] << code(para) - @@odf[:body] << @br*2 - elsif para =~ /#{Mx[:gr_o]}Th?/ #elsif para =~ /<\-_&!@%~#\]\[*=$| \n+`#{Mx[:tc_p]}]/u - dir=SiSU_Env::Info_env.new(@md.fns) - @data_mod,@endnotes,@level,@cont,@copen,@odf_contents_close=Array.new(6){[]} - @rcdc=false - (0..6).each { |x| @cont[x]=@level[x]=false } - (4..6).each { |x| @odf_contents_close[x]='' } - odf_tail #($1,$2) - fix=[] - bullet=image_src('bullet_09.png') - cp("#{bullet}/bullet_09.png","#{@env.path.odf}/Pictures/.") #if image_src('bullet_09.png') - data.each do |para| - para.gsub!(/#{Mx[:id_o]}~0;0:0;x\d+#{Mx[:id_c]}/,'') # if book index? remove - #p para if para =~safe_characters and @md.cmd =~/V/ #KEEP - #para.gsub!(/<(~\d+;(?:\w|[0-6]:)\d+;\w\d+)><(#@dp:#@dp)>/,'<\1><\2>') - para='' if para =~/#{Mx[:lv_o]}\d+:.*?#{Mx[:lv_c]}.+?#{Mx[:pa_non_object_dummy_heading]}/ - para_array=[] - para.gsub!(//,'>') - word=para.scan(/\S+|\n/) - if word - word.each do |w| # _ - / # | : ! ^ ~ - unless para =~/^(?:#{Rx[:meta]}|%+ )/m - w.gsub!(/&#(?:126|152);/,'~') #126 usual - if w !~/&\S{1,7};/ \ - or w =~/ / - w.gsub!(/&/,'&') #watch   - end - end - para_array << w - end - para=para_array.join(' ') - para=para.strip - end - if para =~/#{Mx[:gr_o]}code#{Mx[:gr_c]}/ #code-block: angle brackets special characters - para.gsub!(/(^|[^}])_/m,'\1>') - para.gsub!(/(^|[^}])_/m,'\1>') - end - para.gsub!(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strike_c]}/,'\1') - para.gsub!(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'\1') - para.gsub!(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'\1') - para.gsub!(/#{Mx[:mk_o]}:name#\S+?#{Mx[:mk_c]}/,'') - para.gsub!(/#{Mx[:mk_o]}#([a-zA-Z]+)#{Mx[:mk_c]}/,'&\1;') - para.gsub!(/#{Mx[:mk_o]}(#[0-9]+)#{Mx[:mk_c]}/,'&\1;') - para.gsub!(/#{Mx[:mk_o]}[~-]##{Mx[:mk_c]}/,'') - para.gsub!(/^(#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]}\s*)?#{Mx[:gl_bullet]}/,'\1 ') # bullet_09.png - #para.gsub!(/^(<:i[1-9]>\s+)?_\*\s+/,'\1 ') #bullet - #para.gsub!(/^(<:i[1-9]>\s+)?_\*\s+/,'\1● ') # bullet utf8, make smaller if used - #para.gsub!(/^_\*\s+/,' ') #bullet - para.gsub!(/^(#{Mx[:pa_o]}:i[1-9]#{Mx[:pa_c]})\s*#{Mx[:gl_bullet]}/,'\1 · ') #bullet - para.gsub!(/^#{Mx[:gl_bullet]}/,'· ') #bullet - para.gsub!(/#{Mx[:br_line]}/,'
') - para.gsub!(/#{Mx[:br_page]}|#{Mx[:br_page_new]}/,' ') - para.gsub!(/©/,'©') #too arbitrary - para.gsub!(/.+?<-#>/,'') # remove dummy headings (used by html) #check - para.gsub!(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\1') - para.gsub!(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\1') - para.gsub!(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\1') - para.gsub!(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'\1') - para.gsub!(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'\1') - para.gsub!(/­/u,'-') - para.gsub!(/ /u, ' ') # space identify - para.gsub!(/ /u, ' ') # space identify - para.gsub!(/·/u,'*') - para.gsub!(/[­–—]/u,'-') #— – chk - para.gsub!(/ < /i,'<') - para.gsub!(/\\copy(?:right)?\b/,'©') - para.gsub!(/\\trademark\b|\\tm\b/,'®') - #para.gsub!(/\43/,'#') ## watch - #para.gsub!(/$/,'$') #$ watch - para.gsub!(/\44/,'$') #$ watch - #para.gsub!(/^·/,'_*') #$ watch - #para.gsub!(/·/,'*') #$ watch - para.gsub!(/#{Mx[:br_page]}|#{Mx[:br_page_new]}/,'') # remove page breaks - para.gsub!(/^\s*#{Mx[:id_o]}~\d+;(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}/,'') # remove empty lines - para.gsub!(/(.+?)<\/a>/,'\1') - para.gsub!(/#{Mx[:mk_o]}name#\S+?#{Mx[:mk_c]}/,'') # remove name links - #para.gsub!(/(.+?)<\/a>/im,'\1') - #para.gsub!(/ /,' ') # decide on - #para.gsub!(/\{(\S+?\.(?:png|jpg)) .+?\}(?:http:\/\/\S+|image)/," [ \\1 ]") #"[ #{@env.url.images_local}\/\\1 ]") - #para.gsub!(/"); - #p para if para =~safe_characters and @md.cmd =~/M/ #KEEP - #para.gsub!(/^(\{\S+?\.(?:png|jpg)\s+.+?"(.*?)"\s*\}\S+)/,"\\1 \n [image: \"\\2\"]") - wordlist=para.scan(/\S+/) - para=tidywords(wordlist).join(' ').strip - if para =~/^#{Rx[:meta]}(\S+)\s+(.+?)\Z/m # for headers - d_meta=SiSU_text_utils::Header_scan.new(@md,para).meta - if d_meta; odf_metadata(d_meta) - end - end - @rcdc=true if @rcdc==false \ - and (para =~/~metadata/ or para =~/#{Mx[:lv_o]}1:meta#{Mx[:lv_x]}\s*Document Information/) - if para !~/(^#{Rx[:meta]}|#{Mx[:br_eof]}|#{Mx[:br_endnotes]})/ - if para =~@regx #/.+?<~\d+;\w\d+;\w\d+>.*/ #watch change - paranum=para[@regx,3] - @p_num=SiSU_ODF_format::Paragraph_number.new(paranum) - end - @sto=SiSU_Structure::Split_text_object.new(@md,para).odt - #yyyy-mm-ddT00:00:00#{ocn} #followed immediately by paragraph closure - ### problem in scroll, it appears tables are getting paragraph numbers - unless @rcdc - m=/#{Mx[:id_o]}~(\d+);(?:\w|[0-6]:)\d+;\w\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}$/ - if para =~m \ - and para=~/\S+/ - para=case @sto.format - when /^(1):(\S*)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - when /^(2):(\S*)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - when /^(3):(\S*)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - when /^(4):(\S+)/ # work on see Split_text_object - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - # work on see SiSU_text_parts::Split_text_object - para - when /^(5):(\S*)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - when /^(6):(\S*)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - else - txt_obj={:txt =>para} - odf_structure(@md,txt_obj) #watch may be problematic - para - end - end - if para =~// \ - and para =~/^(-\{{2}~\d+|)/ # -endnote - para='' - end - if (para !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/) - # i don't get the condition for no paranum - end - else - if para =~ /^(4)~(\S+)/ - txt_obj={:txt =>para,:lv =>$1,:ocn =>@sto.ocn,:h_name=>$2} - odf_structure(@md,txt_obj) - para - elsif para =~/#{Mx[:id_o]}~(\d+);m\d+;[mdv]\d+#{Mx[:id_c]}#{Mx[:id_o]}#@dp:#@dp#{Mx[:id_c]}$/ - txt_obj={:txt =>para} - odf_structure(@md,txt_obj) #watch may be problematic - para - end - end - para.gsub!(//,' ') if para ## Clean Prepared Text - para.gsub!(/#{Mx[:gr_o]}.+?#{Mx[:gr_c]}/,' ') if para ## CHECK Clean Prepared Text - para.gsub!(/#{Mx[:tc_o]}.+?#{Mx[:tc_c]}/,' ') if para ## CHECK Clean Prepared Text - para.gsub!(/<:\S+>/,' ') if para ## Clean Prepared Text - end - end - end - def pre - table=if @md.flag_tables - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} - else '' - end - breakpage=if @md.pagenew \ - or @md.pagebreak - ' fo:break-before="page"' - else '' - end - @@odf[:head]<<%{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#{table}#@br} + - %{#@br} + - %{#@br} + # P1 - %{#@br} + # P1 - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + # P1 - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{#@br} + - %{} - end - def post - end - def publish - divider='=' - content=[] - data=@data - content << @@odf[:open] - content << @@odf[:head] - content << @@odf[:body] - content << @@odf[:metadata] - #content << @@odf[:owner_details] if @md.stmp =~/\w+/ #not used? - content << @@odf[:tail] - Output.new(content,@md,@env).odf - @@odf[:head],@@odf[:body],@@odf[:tail],@@odf[:metadata]=[],[],[],[] - end - end - class Output