=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") unless @@flag['code']
if para =~/^code\{/
@@flag['code']=true
@@counter=1
para.gsub!(/^code\{.*/,'<:code>')
elsif para =~/^(?:poem)\{/ \
and not @@flag['code']
@@flag['poem']=true
para.gsub!(/^(poem)\{.*/,'<:verse>')
elsif para =~/^(?:alt|group)\{/ \
and not @@flag['code'] #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=if para !~/<:code(?:-end)?>/; para.dup + '<:br>'
else para.dup
end
@line_mode=sub_array.scan(/.+/)
#@line_mode=[]
#sub_array.scan(/.+/) {|w| @line_mode << w + '<:br>' if w =~/[\Ss]+/}
SiSU_document_structure_code::Code.new(@md,@line_mode).code_lines('code')
para=@line_mode.join
end
elsif ( @@flag['poem'] \
or @@flag['group'] ) \
and not @@flag['code']
if @@flag['poem'] \
and para =~/^\}(?:poem)/
para.gsub!(/^\}(poem).*/,"\n<:verse-end>")
@@flag['poem']=false
elsif ( @@flag['group'] \
and para =~/^\}(?:alt|group)/ ) \
and not @@flag['code']
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)?>/ \
and not @@flag['code']
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
tuned_file <<= if para =~/<:group-end>/
@tuned_group.join("\n")
else @tuned_group=@tuned_group.join
@tuned_group.gsub!(/<:br><:br>(<:code-end>)/,'\1')
@tuned_group
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 !~/^code\{|^\}code|<:code.+/
line.gsub!(/\s\s/,' ')
line.gsub!(/^/,'<:codeline>') if type=='code' # try sort for texpdf special case
if line =~/(?:https?|file|ftp):\/\/\S+$/
line.gsub!(/$/,' <:br>')
else line.gsub!(/$/,'<:br>') #unless type=='code'
end
if @@flag['code']; @@counter+=1
else
end
elsif line =~/^\s*$/
line.gsub!(/$/,' <:br>')
end
end
end
end
end
__END__