=begin
* Name: SiSU
* Description: a framework for document structuring, publishing and search
* Author: Ralph Amissah
* Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007 Ralph Amissah All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007 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: document abstraction
=end
module SiSU_document_structure_code
class Instantiate < SiSU_Param::Parameters::Instructions
@@flag={} #Beware!!
def initialize
@@flag['table_to']=false
@@counter=@@column=@@columns=0
@@line_mode=''
end
end
class Code
@@flag={} #Beware!!
def initialize(md,data)
@md,@data=md,data
Instantiate.new
end
def code
data=@data
tuned_file=[]
@tuned_group=[]
@@counter=0
@verse_count=0
data.each do |para|
para.gsub!(/(<:(?:code|verse|alt|group)>)\s/,'\1') #double check
para.gsub!(/(?:\n\s*\n)+/m,"\n")
if para =~/^code\{/
@@flag['code']=true
@@counter=1
para.gsub!(/^code\{.*/,'<:code>')
elsif para =~/^(?:poem)\{/
@@flag['poem']=true
para.gsub!(/^(poem)\{.*/,'<:verse>')
elsif para =~/^(?:alt|group)\{/ #group not tested, stub 2005
@@flag['group']=true
para.gsub!(/^(alt|group)\{.*/,'<:\1>')
end
if @@flag['code']
if @@flag['code'] and para =~/^\}code/
para.gsub!(/^\}code.*/,'<:code-end>')
@@flag['code']=false
end
if @@flag['code'] #or para =~/<:code-end>/ #and para =~/\S/
sub_array=para.dup
@line_mode=sub_array.scan(/.+/)
SiSU_document_structure_code::Code.new(@md,@line_mode).code_lines('code')
para=@line_mode.join
end
elsif @@flag['poem'] or @@flag['group']
if @@flag['poem'] and para =~/^\}(?:poem)/
para.gsub!(/^\}(poem).*/,"\n<:verse-end>")
@@flag['poem']=false
elsif @@flag['group'] and para =~/^\}(?:alt|group)/
para.gsub!(/^\}(alt|group).*/,'<:\1-end>')
@@flag['group']=false
end
if @@flag['poem'] or @@flag['group'] and para =~/\S/ \
and para !~/<:(verse|code|alt|group)(-end)?>/
sub_array=para.dup
@line_mode=sub_array.scan(/.+/)
type=if @@flag['poem']; 'poem'
else 'group'
end
SiSU_document_structure_code::Code.new(@md,@line_mode).code_lines(type)
div=if @@flag['poem'] and @verse_count > 0
"\n" + '<:verse-end>' + "\n\n" + '<:verse>'
else ''
end
@verse_count+=1 if @@flag['poem']
para = div + @line_mode.join
else para
end
end
if @@flag['code'] or @@flag['poem'] or @@flag['group']
@tuned_group << para if para =~/\S+/
elsif para =~/<:(?:code|alt|group|verse)-end>/
@verse_count=0
@tuned_group << para
if para =~/<:group-end>/
tuned_file << @tuned_group.join("\n")
else
tuned_file << @tuned_group.join
end
@tuned_group=[]
else tuned_file << para
end
end
tuned_file
end
def code_lines(type='')
data=@data
data.each do |line|
if line =~/\S/ and line !~/^(?:alt|code|group|poem)\{|^\}(?:alt|code|group|poem)|<:(?:code|verse|alt|group).+/
line.gsub!(/\s\s/,' ')
line.gsub!(/^/,'<:codeline>') if type=='code' # try sort for texpdf special case
if line =~/https?:\/\/\S+$/
line.gsub!(/$/,' <:br>')
else
line.gsub!(/$/,'<:br>') #unless type=='code'
end
if @@flag['code']; @@counter+=1
else
end
end
end
end
end
end
__END__