diff options
Diffstat (limited to 'lib/sisu/v0/html_scroll.rb')
| -rw-r--r-- | lib/sisu/v0/html_scroll.rb | 232 | 
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__ | 
