aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v0/html_scroll.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v0/html_scroll.rb')
-rw-r--r--lib/sisu/v0/html_scroll.rb232
1 files changed, 232 insertions, 0 deletions
diff --git a/lib/sisu/v0/html_scroll.rb b/lib/sisu/v0/html_scroll.rb
new file mode 100644
index 00000000..bc03fc7d
--- /dev/null
+++ b/lib/sisu/v0/html_scroll.rb
@@ -0,0 +1,232 @@
+=begin
+ * Name: SiSU information Structuring Universe - Structured information, Serialized Units
+ * Author: Ralph Amissah
+ * http://www.jus.uio.no/sisu
+ * http://www.jus.uio.no/sisu/SiSU/download.html
+
+ * Description: html scroll generation, processing
+
+ * Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Ralph Amissah
+
+ * License: GPL 2 or later
+
+ Summary of GPL 2
+
+ 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 2 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, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ http://www.fsf.org/licenses/gpl.html
+ http://www.gnu.org/copyleft/gpl.html
+ http://www.jus.uio.no/sisu/gpl2.fsf
+
+ SiSU was first released to the public on January 4th 2005
+
+ SiSU uses:
+
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+ © Ralph Amissah 1997, current 2007.
+ All Rights Reserved.
+
+ * Ralph Amissah: ralph@amissah.com
+ ralph.amissah@gmail.com
+=end
+module SiSU_HTML_scroll
+ require "#{SiSU_lib}/shared_html"
+ require "#{SiSU_lib}/html"
+ require "#{SiSU_lib}/html_promo"
+ class Scroll
+ @@dp=nil
+ def initialize(data='',md='')
+ @data,@md=data,md
+ @vz=SiSU_Env::Get_init.instance.skin
+ @dp=@@dp ||=SiSU_Env::Info_env.new.digest.pattern
+ end
+ def songsheet
+ begin
+ scr=Scroll.new(@data,@md).markup
+ scr[:tails]=Scroll.new('',@md).tails
+ scr
+ rescue; SiSU_Errors::Info_error.new($!,$@,@md.cmd,@md.fns).error
+ ensure
+ end
+ end
+ protected
+ def markup
+ data=@data
+ @rcdc=false
+ @scr={ :body=>[],:metadata=>[],:owner_details=>[] }
+ data.each do |para|
+ if para =~/Document Information/
+ para.gsub!(/(Document Information)/,'\1<a name="docinfo"></a>')
+ end
+ if para =~/MetaData/
+ para.gsub!(/(MetaData)/,'\1<a name="metadata"></a>')
+ end
+ @rcdc=true if @rcdc==false and (para =~/^\d~metadata/ or para =~/^1~\s+Document Information/)
+ if para !~/(^0~|<ENDNOTES>|<EOF>)/
+ para.gsub!(/~[{\[].+?[}\]]~\s+/m,' ')
+ if para =~/.+?<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ paranum=para[/.+?<~(\d+);(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/,1]
+ @p_num=SiSU_HTML_Format_type::Paragraph_number.new(@md,paranum)
+ end
+ @sto=SiSU_HTML::Source::Split_text_object.new(@md,para).lev_segname_para_ocn
+ unless @rcdc
+ m=/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ if para =~m
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,@sto.text) if @sto.format =~/[12]|_1?\*|<!i[12]!>\s*_\*|null/
+ case @sto.format
+ when /^1~\S*/; para=@sto.scroll_lev_para_ocn.heading_body1
+ when /^2~\S*/; para=@sto.scroll_lev_para_ocn.heading_body2
+ when /^3~\S*/; para=@sto.scroll_lev_para_ocn.heading_body3
+ when /^4~\S+/; para=@sto.scroll_lev_para_ocn.heading_body4 # work on see Split_text_object4
+ when /^5~\S*/; para=@sto.scroll_lev_para_ocn.heading_body5
+ when /^6~\S*/; para=@sto.scroll_lev_para_ocn.heading_body6
+ when /^_\*$/; para=@sto.scroll_lev_para_ocn.bullet
+ when /^_1\*$/
+ format_txt_obj.gsub_body
+ para=@sto.scroll_lev_para_ocn.bullet_indent1
+ when /^_2\*$/
+ format_txt_obj.gsub_body
+ para=@sto.scroll_lev_para_ocn.bullet_indent2
+ when /^i1$/
+ format_txt_obj.gsub_body
+ para=@sto.scroll_lev_para_ocn.indent1
+ when /^i2$/
+ format_txt_obj.gsub_body
+ para=@sto.scroll_lev_para_ocn.indent2
+ when /^center$/; para=@sto.scroll_lev_para_ocn.center
+ when /^(?:b|bold)$/; para=@sto.scroll_lev_para_ocn.bold
+ when /^(?:verse|group|alt)$/; para=@sto.scroll_lev_para_ocn.para
+ when /^code$/; para=@sto.scroll_lev_para_ocn.code
+ when /null/ # see whether u can improve
+ if para !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
+ format_txt_obj.gsub_body
+ para=@sto.scroll_lev_para_ocn.para
+ if para =~/<!Th?.+/ # tables come as single block
+ table=SiSU_HTML_shared::Table.new(para)
+ para=table.table_split
+ end
+ end
+ end
+ elsif para =~/Endnotes?/ and para !~/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,'<br /><a name="notes">Note</a>')
+ para=format_txt_obj.bold_para
+ elsif para =~/Owner Details/ and para !~/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,'<br /><a name="owner.details">Owner Details</a>')
+ @scr[:owner_details]=format_txt_obj.bold_para
+ para=''
+ elsif para =~/(.*)<~0;(?:\w|[0-6]:)\d+;\w\d+><#@dp:#@dp>(.*)/ #watch
+ one,two=$1,$2
+ format_seg=SiSU_HTML_Format_type::Format_seg.new(@md,one,two)
+ para=format_seg.no_paranum
+ end
+ #para=para.gsub(/ [2-6]~\S+ /,'') #and @md.cmd =~/[VM]/ #arbitrary, watch problematic as too general
+ para='' if (para =~/<a name="n\d+">/ and para =~/^(?:\^~\d+\s|<!e[:_]\d+!>)/) # hmmm re-adjusted 200507, for alt endnote which should again be matched ^~ ... not in response to problem though
+ if para =~/<:center>/ #rules changed now a <p class="center" problems may arise 2005w11 !
+ one,two=/(.*)<:center>(.*)/.match(para).captures
+ format_scroll=SiSU_HTML_Format_type::Format_scroll.new(@md,one,two)
+ end
+ else # this is crazy rethink and redo later with some form of inject
+ m=/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ if para =~m
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,@sto.text) if @sto.format =~/[12]|null/
+ meta=case @sto.format
+ when /^1~/; @sto.scroll_lev_para_ocn.heading_body1
+ when /^2~/; @sto.scroll_lev_para_ocn.heading_body2
+ when /^3~/; @sto.scroll_lev_para_ocn.heading_body3
+ when /^4~\S+/; @sto.scroll_lev_para_ocn.heading_body4 # work on see Split_text_object
+ when /^5~/; @sto.scroll_lev_para_ocn.heading_body5
+ when /^6~/; @sto.scroll_lev_para_ocn.heading_body6
+ when /^i1$/
+ format_txt_obj.gsub_body
+ @sto.scroll_lev_para_ocn.indent1
+ when /^i2$/
+ format_txt_obj.gsub_body
+ @sto.scroll_lev_para_ocn.indent2
+ when /^center$/; @sto.scroll_lev_para_ocn.center
+ when /^(b|bold)$/; @sto.scroll_lev_para_ocn.bold
+ when /null/ # see whether u can improve
+ if para !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
+ format_txt_obj.gsub_body
+ @sto.scroll_lev_para_ocn.para
+ if para =~/<!Th?.+/ # tables come as single block
+ table=Table.new(para)
+ para=table.table_split
+ end
+ end
+ end
+ elsif para =~/(Endnotes?)/ and para !~/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,'<br /><a name="notes">Note</a>')
+ meta=format_txt_obj.bold_para
+ elsif para =~/MetaData/ and para =~/<~0;(?:\w|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/ #debug 2003w46 add rc info
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,'<br /><a name="metadata">MetaData</a>')
+ meta=format_txt_obj.bold_para
+ elsif para =~/Owner Details/ and para !~/<~\d+;(?:[oh]|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ format_txt_obj=SiSU_HTML_Format_type::Format_text_object.new(@md,'<br /><a name="owner.details">Owner Details</a>')
+ @scr[:owner_details]=format_txt_obj.bold_para
+ meta=''
+ elsif para =~/(¡|<!Th?)/
+ table=Table.new(para)
+ para=table.table
+ elsif para =~/(.*)<~0;(?:\w|[0-6]:)\d+;\w\d+><#@dp:#@dp>(.*)/ #ok - bug in equiv for seg 2004w46
+ one,two=$1,$2
+ format_scroll=SiSU_HTML_Format_type::Format_scroll.new(@md,one,two) #watch #fix
+ meta=format_scroll.no_paranum
+ end
+ meta='' if para =~/<a name="n\d+">/ and para =~/^(\^~\d+ |<!e[:_]\d+!>)/ # -endnote
+ if para =~/<~0;(?:\w|[0-6]:)\d+;\w\d+><#@dp:#@dp>$/
+ case para
+ when /<:i1>/
+ gsub(/<:i1>/,'')
+ format_scroll=SiSU_HTML_Format_type::Format_scroll.new(@md,para)
+ meta=format_scroll.indent_one_no_paranum
+ when /<:i2>/
+ gsub(/<:i2>/,'')
+ format_scroll=SiSU_HTML_Format_type::Format_scroll.new(@md,para)
+ meta=format_scroll.indent_one_no_paranum
+ end
+ end
+ if para !~/#{@vz.margin_txt_0}|#{@vz.margin_txt_1}|#{@vz.margin_txt_2}/
+ end
+ if para =~/<:center>/
+ one,two=/(.*)<:center>(.*)/.match(para).captures
+ format_scroll=SiSU_HTML_Format_type::Format_scroll.new(@md,one,two)
+ end
+ end
+ para.gsub!(/<!.+!>/,' ')
+ para.gsub!(/^<:\S?>/,'')
+ para.gsub!(/<:\S?>/,' ')
+ para.strip!
+ unless meta; @scr[:body] << para unless para =~/\A\s*\Z/
+ else @scr[:metadata] << meta
+ end
+ end
+ end
+ @scr
+ end
+ def tails
+ scr_tail=[]
+ format_head_scroll=SiSU_HTML_Format_type::Head_toc.new(@md)
+ ads=SiSU_HTML_promo::Ad.new(@md)
+ scr_tail << format_head_scroll.scroll_tail << ads.div.close << ads.display << format_head_scroll.html_close
+ scr_tail
+ end
+ end
+end
+__END__