From 960c3088bc88f2db879154053280b06c160d4d70 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 21 Apr 2015 14:45:52 -0400 Subject: lib/sisu/*, single libs directory (c&d gone) (7) * removed lib/sisu/{current,develop} dir branches v7 (v5 & v6 retired) * simplify dir structure, offer single version per snapshot * have enjoyed carrying stable and development versions v5 & v6 in a single tarball, may return to this structure --- lib/sisu/html_lite_shared.rb | 324 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 lib/sisu/html_lite_shared.rb (limited to 'lib/sisu/html_lite_shared.rb') diff --git a/lib/sisu/html_lite_shared.rb b/lib/sisu/html_lite_shared.rb new file mode 100644 index 00000000..f7c6589b --- /dev/null +++ b/lib/sisu/html_lite_shared.rb @@ -0,0 +1,324 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** modules shared by db and flatfile output generators, mostly xml/xhtml/html + formatting + +** 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 + + + +=end +module SiSU_FormatShared + require_relative 'html_parts' # html_parts.rb + class CSS_Format + require_relative 'se_hub_particulars' # se_hub_particulars.rb + include SiSU_Parts_HTML + @@fns=nil + def initialize(md,t_o) + @md,@t_o=md,t_o + @txt=@t_o.obj + @id=@ocn=@t_o.ocn if defined? @t_o.ocn + @lv=@t_o.lv.to_s if @t_o.is==:heading + if @md.fns != @@fns + @@fns,@@hname=@md.fns,'' + end + @hname=if defined? @t_o.name \ + and not @t_o.name.to_s.empty? + @@hname=@t_o.name + else @@hname + end + @tab="\t" + @@tablehead,@@tablefoot=[],[] + @env=SiSU_Env::InfoEnv.new(@md.fns) + @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html" + end + def urls(data) + @words=[] + map_nametags=SiSU_Particulars::CombinedSingleton.instance.get_map_nametags(@md).nametags_map + data.each do |word| + @words << if word=~/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + if word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}#{Mx[:rel_o]}(\S+?)#{Mx[:rel_c]}/.match(word).captures + elsif word =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}image/ + m,u=/#{Mx[:lnk_o]}(.+?)#{Mx[:lnk_c]}(image)/.match(word).captures + end + word=case m + when /\.png|\.jpg|\.gif|c=|\d+x\d+/ + w,h=/(\d+)x(\d+)/.match(m).captures if m =~/\d+x\d+/ + w=%{width="#{w}"} if w + h=%{height="#{h}"} if h + c=m[/"(.+?)"/m,1] + caption=%{

#{c}

} if c + png=m.scan(/\S+/)[0] + ins=if u \ + and u.strip !~/^image$/ + %{[#{png}]#{caption}} + else %{[#{png}] #{caption}} + end + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|image)/,ins) + else + u=case u + when /^https?:\/\// + u + when /^:/ + u=u.gsub(/^:/,'') + "#{@env.url.root}/#{u}" + when /^\.\.\// # can remove + u=u.gsub(/^\.\.\//,'') + "#{@env.url.root}/#{u}" + else + if not map_nametags[u].nil? + @env.url.root + '/' \ + + @md.fnb + '/' \ + + map_nametags[u][:segname] \ + + Sfx[:html] \ + + '#' + u + else '' + end + end + link=m[/(.+)/m] + png=m.scan(/\S+/)[0].strip + link=link.strip + ins=%{#{link}} + word=word.gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:url_o]}\S+?#{Mx[:url_c]}/,ins). + gsub(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}/,ins) + word + end + word + else word + end + word + end + @words=@words.join(' ') + end + def markup_generic(s) + s=s.gsub(/#{Mx[:fa_bold_o]}(.+?)#{Mx[:fa_bold_c]}/,'\1'). + gsub(/#{Mx[:fa_italics_o]}(.+?)#{Mx[:fa_italics_c]}/,'\1'). + gsub(/#{Mx[:fa_underscore_o]}(.+?)#{Mx[:fa_underscore_c]}/,'\1'). + gsub(/#{Mx[:fa_cite_o]}(.+?)#{Mx[:fa_cite_c]}/,'"\1"'). + gsub(/#{Mx[:fa_insert_o]}(.+?)#{Mx[:fa_insert_c]}/,'+{\1}+'). + gsub(/#{Mx[:fa_strike_o]}(.+?)#{Mx[:fa_strke_c]}/,'-{\1}-'). + gsub(/#{Mx[:fa_superscript_o]}(.+?)#{Mx[:fa_superscript_c]}/,'\1'). + gsub(/#{Mx[:fa_subscript_o]}(.+?)#{Mx[:fa_subscript_c]}/,'\1'). + gsub(/#{Mx[:fa_monospace_o]}(.+?)#{Mx[:fa_monospace_c]}/,'\1'). # tt, kbd + gsub(/#{Mx[:gl_o]}#(?:126|152)#{Mx[:gl_c]}/i,'~') + end + def markup_object(t_o) + s=t_o.obj + s=if t_o.is !=:code + s=markup_generic(s) + if s =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + wm=s.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)|\S+/) + words=urls(wm) + s=s.gsub(/.+/m,words) + end + s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:url_o]}[_\\](\S+?)#{Mx[:url_c]}/,'\1'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1\2'). #special case \{ e.g. \}http://url + gsub(/(^|#{Mx[:gl_c]}|\s)#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{\\1#{the_url_decoration.xml_open}\\2#{the_url_decoration.xml_close}\\3}) #http ftp matches with decoration + else + s.gsub(//m,'>') + end + s + end + def markup_note(s) + s=markup_generic(s) + if s =~/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)/ + wm=s.scan(/#{Mx[:lnk_o]}.+?#{Mx[:lnk_c]}(?:#{Mx[:url_o]}\S+?#{Mx[:url_c]}|#{Mx[:rel_o]}\S+?#{Mx[:rel_c]}|image)|\S+/) + words=urls(wm) + s=s.gsub(/.+/m,words) + end + s=s.gsub(/#{Mx[:gl_o]}(#[0-9]{3})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:gl_o]}#([a-z]{2,4})#{Mx[:gl_c]}/u,'&\1;'). + gsub(/#{Mx[:url_o]}_(\S+?)#{Mx[:url_c]}/,'\1\2'). #http ftp matches escaped, no decoration + gsub(/(#{Mx[:lnk_c]})#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,'\1\2'). #special case \{ e.g. \}http://url + gsub(/#{Mx[:url_o]}(\S+?)#{Mx[:url_c]}/,%{#{the_url_decoration.xml_open}\\1#{the_url_decoration.xml_close}}) #http ftp matches with decoration + end + def paragraph + %{

#{@txt}

\n} # << "\n" + end + def endnote(nr,en) #used only by db + txt=markup_note(en) + < +#{nr}. #{txt} +

+GSUB + end + def tag_header(h) + %{

#{h[:txt]}

\n} # << "\n" + end + def tag_para(h) + %{

#{h[:txt]}

\n} << "\n" + end + def lev_toc_hname + %{

#{@txt}

\n} #<< "\n" + end + def lev_toc + h={ txt: txt, class: "toc#{@lv}", type: 'toc' } + tag_para(h) + end + def lev4_plus + txt=markup_object(@t_o) + h={ txt: txt, class: "h#{@lv}", type: 'substantive', id: @ocn, header: @hname } + tag_header(h) + end + def lev4_minus + txt=markup_object(@t_o) + h={ txt: txt, class: "h#{@t_o.ln}", type: 'substantive', id: @ocn } + tag_para(h) + end + def norm_comment + h={ txt: @t_o.obj, class: 'norm', type: 'comment' } + tag_para(h) + end + def norm + txt=markup_object(@t_o) + h={ txt: txt, class: 'norm', type: 'substantive', id: @ocn } + tag_para(h) + end + def code + txt=markup_object(@t_o) + h={ txt: "#{txt}", class: 'code', type: 'substantive', id: @ocn } + tag_para(h) + end + def indent(t) + txt=markup_object(@t_o) + h={ txt: txt, class: "indent#{t}", type: 'substantive', id: @ocn } + tag_para(h) + end + def hang_indent(f,t) + txt=markup_object(@t_o) + h={ txt: txt, class: "hang#{f}indent#{t}", type: 'substantive', id: @ocn } + #h={ txt: txt, class: "h#{f}i#{t}", type: 'substantive', id: @ocn } + tag_para(h) + end + def para_table + %{

} + end + def ocn + %{} << "\n" + end + def html_table # get rid of use html_table + @new_content=[] + @txt.split(/\n/).each do |parablock| + m=parablock[//,1] + @@tablefoot << m if m + parablock=parablock.gsub(//,'') + @@tablehead=1 if parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u + parablock=parablock.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+)#{Mx[:gr_c]}/, + %{}) + if parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ + tablefoot=[] + @@tablefoot.each {|x| tablefoot << %{

#{x}

\n}} + @@tablefoot=[] + parablock=parablock.gsub(/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/, + %{#{the_table_close}\n}) # + + 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, + %{\n} + + %{\n') + @@tablehead=0 + end + parablock + else + parablock=parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{\n} + + %{\n') + parablock + end + @new_content << parablock + end + @new_content.join + end + end + class CSS_FormatGeneric #does CSS_Format in one definition, needs to be told about attrib, despite brevity of generic, easier to see structure with CSS_Format + def initialize(attrib='',txt='',id=nil,ocnd=nil,ocns=nil,lv='',hname=nil) + @tab="\t" + @attrib=attrib + @txt=txt + @lv=lv.to_s + @hname=hname.to_s + @id=@ocn=id + end + def paragraph + attrib=%{class="#{@attrib}" } + if @ocn + id=%{id="#{Mx[:ocn_id_char]}#{@ocn}" } + type=%{type="substantive" } + else + id='' + type=%{type="comment" } + end + header=%{header="#{@hname}" } if @hname + %{

#{@txt}

\n} #<< "\n" + end + def para + paragraph + end + end +end +__END__ -- cgit v1.2.3
} + + %{#{para_table}}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{} + + %{#{para_table}}). + gsub(/#{Mx[:tc_c]}/, '
} + + %{#{para_table}}). + gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, + %{} + + %{#{para_table}}). + gsub(/#{Mx[:tc_c]}/, '