diff options
| author | Ralph Amissah <ralph@amissah.com> | 2014-11-26 09:12:11 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2014-12-08 00:18:15 -0500 | 
| commit | 4db4dcc886b85bf9db43d66025452fb33c94a9dd (patch) | |
| tree | 71aab89128b7b7fd35c886e84808c1881a3bf191 /lib/sisu/current/xml_tables.rb | |
| parent | v5 v6: code headers reformatted for viewing as org-mode files (diff) | |
c&d: project dir structure, libs moved under new branch names
* libs & version files under new branch names: current & develop
* previously under branch version numbers (v5|v6)
* version .yml files moved
* associated adjustments made as required, notably to:
  bin/sisu se* qi* (file headers); breakage potential, testing
  required
* [on dir names, want release to (alphabetically) precede
  next/development, considered (cur|dev)
  (current|(dev|development|progress|next)) (stable|unstable),
  alpha sorting fail (release|(next|develop))]
Diffstat (limited to 'lib/sisu/current/xml_tables.rb')
| -rw-r--r-- | lib/sisu/current/xml_tables.rb | 261 | 
1 files changed, 261 insertions, 0 deletions
| diff --git a/lib/sisu/current/xml_tables.rb b/lib/sisu/current/xml_tables.rb new file mode 100644 index 00000000..55b0be41 --- /dev/null +++ b/lib/sisu/current/xml_tables.rb @@ -0,0 +1,261 @@ +# encoding: utf-8 +=begin + +* Name: SiSU + +** Description: documents, structuring, processing, publishing, search +*** common file for xml table generation + +** Author: Ralph Amissah +  <ralph@amissah.com> +  <ralph.amissah@gmail.com> + +** 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 <http://www.gnu.org/licenses/>. + +  If you have Internet connection, the latest version of the GPL should be +  available at these locations: +  <http://www.fsf.org/licensing/licenses/gpl.html> +  <http://www.gnu.org/licenses/gpl.html> + +  <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html> + +** SiSU uses: +  * Standard SiSU markup syntax, +  * Standard SiSU meta-markup syntax, and the +  * Standard SiSU object citation numbering and system + +** Hompages: +  <http://www.jus.uio.no/sisu> +  <http://www.sisudoc.org> + +** Git +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary> +  <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/current/xml_tables.rb;hb=HEAD> + +=end +module SiSU_Tables +  class Table #_xml +    @@tablehead=0 +    @@tablefoot=[] #watch #bug??? #check was @@tablefoot +    def initialize(one,ocn='') +      @one,@parablock,@ocn=one,one,ocn +    end +    def table_split                                                            #% used but, no longer operational, revisit +      @new_content=[] +      @one.split(/\n/).each do |parablock| +        table=TableXML.new("#{parablock}\n") +        @new_content << table.table +      end +      @new_content.join +    end +  end +  class TableXML <Table +    @@tablehead=0 +    @@tablefoot=[] +    def initialize(one,ocn='') +      @one,@parablock,@ocn=one,one,ocn +    end +    def table +      m=@parablock[/<!f(.+?)!>/,1] +      @@tablefoot << m if m +      @parablock=@parablock.gsub(/<!f.+?!>/,'') +      @@tablehead=1 if @parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u +      if @parablock =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}/u +        @parablock=@parablock.gsub(/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+);\w\d+;\w\d+#{Mx[:gr_c]}/u, +          %{\n<ocn>#{@ocn}</ocn><table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">}) +      end +      if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ +        tablefoot=[] +        @@tablefoot.each {|x| tablefoot << ''} +        @@tablefoot=[] +      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, +            %{<tr> +  <td width="\\1%" valign="top"><b>}). +            gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, +              %{</b></td><td width="\\1%" valign="top"><b>}). +            gsub(/#{Mx[:tc_c]}/,"</b>\n</td>\n</tr>") +          @@tablehead=0 +        end +        @parablock +      else +        @parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, +          %{<tr> +  <td width="\\1%" valign="top">}). +          gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u, +            %{ +  </td> +  <td width="\\1%" valign="top">}). +          gsub(/#{Mx[:tc_c]}/,"\n</td>\n</tr>\n") +      end +      @parablock +    end +  end +  class TableXMLdocbook +    @@tablehead=0 +    @@tablefoot=[] #watch +    def initialize(table,id='') +      @table_obj,@id=table,id +    end +    def spaces +      Ax[:spaces] +    end +    def table +      table_obj=@table_obj +      if table_obj.obj !~/^<table\s/m +        table_obj=table_rows_and_columns_array(table_obj) +      else p __LINE__; p caller +      end +      table_obj +    end +    def table_rows_and_columns_array(table_obj) # provides basic (x)html table +      table_rows,nr=[],0 +      table_obj.obj.split(Mx[:tc_c]).each do |table_row| +        table_row_with_columns=table_row.split(Mx[:tc_p]) +        trc,nc=[],0 +        table_row_with_columns.each do |c| +          c=c.gsub(/^(?:~| )$/,''). # tilde / empty cell +            gsub(/ /,' '). +            gsub(/<:br>/,'<br />') +          trc <<= if table_obj.head_ and nr==0 +            %{#{spaces*6}<entry>#{c}</entry>\n} +          else %{#{spaces*6}<entry>#{c}</entry>\n} +          end +          nc+=1 +        end +        trc=(trc.is_a?(Array)) ? trc.flatten.join : trc +        trc = if table_obj.head_ and nr==0 +          "#{spaces*4}<thead>\n#{spaces*5}<row>\n#{trc}#{spaces*5}</row>\n#{spaces*4}</thead>\n#{spaces*4}<tbody>\n" +        else +          "#{spaces*5}<row>\n#{trc}#{spaces*5}</row>\n" +        end +        nr+=1 +        table_rows << trc +      end +      tbody_close=if table_obj.head_ +        "#{spaces*4}</tbody>" +      else '' +      end +      table_rows=table_rows.flatten.join +      # include table_id <table id=''> +      table_obj.obj=%{#{spaces*3}<para #{@id}> +#{spaces*4}<table> +#{spaces*4}<tgroup cols="#{table_obj.cols}" align="char"> +#{table_rows}#{tbody_close} +#{spaces*4}</tgroup> +#{spaces*4}</table> +#{spaces*3}</para>} +      table_obj +    end +  end +  class TableXMLexp <Table +    @@tablehead=0 +    @@tablefoot=[] +    def initialize(one) +      @one,@parablock=one,one +    end +    def table_close +      '</td></tr> +</table>' +    end +    def margin_numless +      '</td><td width="4%" align="right" valign="top">' +    end +    def table_head(inf) +      %{<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center"> +  <tr> +    <td valign="top" align="justify"> +      <a name="#{inf}"></a> +    </td> +    <td> +<table summary="normal text css" width="100%" border="0" bgcolor="white" cellpadding="2" align="center">} +    end +    def table_end(tablefoot='') +      %{</table>#{the_margin_numless}#{the_margin_numless} #{the_table_close} +#{tablefoot}} +    end +    def table_row(inf,h=false) +      bold=h ? '<b>' : '' +      %{ +<tr> +  <td width="#{inf}%" valign="top">#{bold}} +    end +    def table_cell(inf,h=false) +      if h; %{</b></td><td width="#{inf}%" valign="top"><b>} +      else  %{</td><td width="#{inf}%" valign="top">} +      end +    end +    def table_row_close(h=false) +      bold_close=h ? '<b>' : '' +      "#{bold_close}</td></tr>" +    end +    def table +      m=@parablock[/<!f(.+?)!>/,1] +      @@tablefoot << m if m +      @parablock=@parablock.gsub(/<!f.+?!>/,'') +      @@tablehead=1 if @parablock =~/#{Mx[:gr_o]}Th#{Mx[:tc_p]}/u +      if @parablock =~/#{Mx[:gr_o]}Th?#{Mx[:tc_p]}.+?#{Mx[:tc_p]}~(\d+);\w\d+;\w\d+#{Mx[:gr_c]}/u +        @parablock=table_head($1) +      end +      if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ +        tablefoot=[] +        @@tablefoot.each {|x| tablefoot << ''} +        @@tablefoot=[] +        if @parablock =~/#{Mx[:gr_o]}TZ#{Mx[:gr_c]}/ +          @parablock=table_end +        end +      end +      if @@tablehead==1 +        if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}/u +          if @parablock =~/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u +            @parablock=@parablock.gsub(/#{Mx[:tc_o]}#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1,true)) +          end +          if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u +            @parablock=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1,true)) +          end +          if @parablock =~/#{Mx[:tc_c]}/ +            @parablock=@parablock.gsub(/#{Mx[:tc_c]}/,table_row_close(true)) +          end +          @@tablehead=0 +        end +        @parablock +      else +        if @parablock =~/^#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u +          @parablock=@parablock.gsub(/^#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_row($1)) +        end +        if @parablock =~/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u +          @parablock=@parablock.gsub(/#{Mx[:tc_p]}#{Mx[:tc_p]}(\d+?)#{Mx[:tc_p]}/u,table_cell($1)) +        end +        if @parablock =~/#{Mx[:tc_c]}/ +          @parablock=@parablock.gsub(/#{Mx[:tc_c]}/,table_row_close) +        end +        @parablock +      end +      @parablock +    end +  end +end +__END__ | 
