aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/v3/epub_format.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/v3/epub_format.rb')
-rw-r--r--lib/sisu/v3/epub_format.rb314
1 files changed, 97 insertions, 217 deletions
diff --git a/lib/sisu/v3/epub_format.rb b/lib/sisu/v3/epub_format.rb
index 31bae51b..e11f5d3d 100644
--- a/lib/sisu/v3/epub_format.rb
+++ b/lib/sisu/v3/epub_format.rb
@@ -58,31 +58,27 @@
=end
module SiSU_EPUB_Format
include SiSU_Viz
- class Paragraph_number
+ class ParagraphNumber
def initialize(md,ocn)
@md,@ocn=md,ocn.to_s
@ocn ||=''
- vz=SiSU_Env::Get_init.instance.skin
- @skin_no_ocn=if defined? vz.ocn_display_off \
- and vz.ocn_display_off==true
- true
- else false
- end
+ vz=SiSU_Env::GetInit.instance.skin
end
def ocn_display
- if @md.markup.inspect =~/no_ocn/ \
- or @md.opt.mod.inspect =~/--no-ocn/ \
- or @skin_no_ocn
- ocn_class='ocn_off'
- @ocn.gsub(/^(\d+|)$/,
- %{<label class="#{ocn_class}">&nbsp;</label>})
- elsif @ocn.to_i==0
- @ocn.gsub(/^(\d+|)$/,
- %{<label class="#{ocn_class}">&nbsp;</label>})
- else
+ @make=SiSU_Env::ProcessingSettings.new(@md)
+ if @make.build.ocn?
ocn_class='ocn'
+ if @ocn.to_i==0
+ @ocn.gsub(/^(\d+|)$/,
+ %{<label class="#{ocn_class}">&nbsp;</label>})
+ else
+ @ocn.gsub(/^(\d+|)$/,
+ %{<label class="#{ocn_class}"><a href="#o\\1" class="lnk#{ocn_class}">\\1</a></label>})
+ end
+ else
+ ocn_class='ocn_off'
@ocn.gsub(/^(\d+|)$/,
- %{<label class="#{ocn_class}"><a href="#o\\1" class="lnk#{ocn_class}">\\1</a></label>})
+ %{<label class="#{ocn_class}">&nbsp;</label>})
end
end
def name
@@ -95,7 +91,7 @@ module SiSU_EPUB_Format
%{<a href="##{@ocn}">}
end
end
- class Css
+ class CSS
def css_epub_xhtml
<<WOK
/* SiSU epub css default stylesheet */
@@ -1198,36 +1194,6 @@ module SiSU_EPUB_Format
background-color: #f9f9aa;
}
- .minitoc {
- font-weight: normal;
- margin-top: 2px;
- margin-bottom: 2px;
- }
- h1.minitoc, h2.minitoc, h3.minitoc {
- margin-left: 0em;
- font-weight: bold;
- text-align: left;
- font-size: 90%;
- margin-top: 4px;
- margin-bottom: 4px;
- }
- h4.minitoc {
- margin-left: 0em;
- font-size: 90%;
- }
- h5.minitoc {
- margin-left: 1em;
- font-size: 85%;
- }
- h6.minitoc {
- margin-left: 2em;
- font-size: 85%;
- }
- h0.minitoc {
- margin-left: 0em;
- font-size: 90%;
- }
-
h1.c, h2.c, h3.c, h4.c, h5.c, h6.c, p.c {
text-align: center
}
@@ -1252,14 +1218,14 @@ module SiSU_EPUB_Format
WOK
end
end
- class Head_information
+ class HeadInformation
include SiSU_Viz
attr_reader :md,:rdf,:vz
def initialize(md)
@md=md
# DublinCore 1 - title
- @vz=SiSU_Env::Get_init.instance.skin
- @css=SiSU_Env::CSS_stylesheet.new(md)
+ @vz=SiSU_Env::GetInit.instance.skin
+ @css=SiSU_Env::CSS_Stylesheet.new(md)
@seg_name_xhtml=(SiSU_EPUB::Source::Seg.new.seg_name_xhtml || [])
@seg_name_xhtml_tracker=(SiSU_EPUB::Source::Seg.new.seg_name_xhtml_tracker || [])
@index='index'
@@ -1493,12 +1459,12 @@ WOK
m=(m.empty?) \
? (surname + other_names)
: (m + '; ' + surname + ', ' + other_names)
- m.gsub!(/</,'&lt;'); m.gsub!(/>/,'&gt;')
- m.gsub!(/&lt;br(?: \/)?&gt;/,';')
+ m=m.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,';')
end
x=@md.creator.author.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:creator opf:file-as="#{m}" opf:role="aut">#{x}</dc:creator>}
else ''
end
@@ -1515,12 +1481,12 @@ WOK
m=(m.empty?) \
? (surname + other_names)
: (m + '; ' + surname + ', ' + other_names)
- m.gsub!(/</,'&lt;'); m.gsub!(/>/,'&gt;')
- m.gsub!(/&lt;br(?: \/)?&gt;/,';')
+ m=m.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,';')
end
x=@md.creator.editor.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:creator opf:file-as="#{m}" opf:role="edt">#{x}</dc:creator>}
else ''
end
@@ -1537,12 +1503,12 @@ WOK
m=(m.empty?) \
? (surname + other_names)
: (m + '; ' + surname + ', ' + other_names)
- m.gsub!(/</,'&lt;'); m.gsub!(/>/,'&gt;')
- m.gsub!(/&lt;br(?: \/)?&gt;/,';')
+ m=m.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,';')
end
x=@md.creator.translator.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:creator opf:file-as="#{m}" opf:role="trl">#{x}</dc:creator>}
else ''
end
@@ -1559,28 +1525,28 @@ WOK
m=(m.empty?) \
? (surname + other_names)
: (m + '; ' + surname + ', ' + other_names)
- m.gsub!(/</,'&lt;'); m.gsub!(/>/,'&gt;')
- m.gsub!(/&lt;br(?: \/)?&gt;/,';')
+ m=m.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,';')
end
x=@md.creator.illustrator.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:creator opf:file-as="#{m}" opf:role="ill">#{x}</dc:creator>}
else ''
end
date_published=if defined? @md.date.published \
and @md.date.published =~/\S+/
x=@md.date.published.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:date opf:event="published">#{x}</dc:date>}
else ''
end
subject=if defined? @md.classify.subject \
and @md.classify.subject =~/\S+/
x=@md.classify.subject.dup
- x.gsub!(/</,'&lt;'); x.gsub!(/>/,'&gt;')
- x.gsub!(/&lt;br(?: \/)?&gt;/,'<br />')
+ x=x.gsub(/</,'&lt;').gsub(/>/,'&gt;').
+ gsub(/&lt;br(?: \/)?&gt;/,'<br />')
%{\n <dc:subject>#{x}</dc:subject>}
else ''
end
@@ -1596,7 +1562,7 @@ WOK
%{\n <dc:rights>#{rights}</dc:rights>}
else ''
end
- f=SiSU_Env::SiSU_file.new(@md)
+ f=SiSU_Env::FileOp.new(@md)
<<WOK
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:opf="http://www.idpf.org/2007/opf"
@@ -1718,7 +1684,7 @@ WOK
</html>}
end
end
- class Head_toc < Head_information
+ class HeadToc < HeadInformation
def initialize(md)
super(md)
@md=md
@@ -1743,7 +1709,7 @@ WOK
def manifest_link(text)
%{ <a href="#{@md.file.output_path.manifest.url}/#{@md.file.base_filename.manifest}" target="_top" #{@vz.js_manifest}>#{text}</a>}
end
- def concordance_link(text) #watch fix removed font size 2
+ def concordance_link(text)
if @md.concord_make
%{<a href="#{@md.file.base_filename.html_concordance}" target="_top" #{@vz.js_concordance}>
#{text}
@@ -1829,7 +1795,7 @@ WOK
#{@vz.table_close}}
end
end
- class Head_seg < Head_information
+ class HeadSeg < HeadInformation
def initialize(md)
super(md)
end
@@ -1850,10 +1816,8 @@ WOK
<hr class="endnote" />
}
end
- def title_banner(title,subtitle,creator)
- end
end
- class Head_scroll < Head_toc
+ class HeadScroll < HeadToc
def initialize(md)
super(md)
end
@@ -1870,8 +1834,8 @@ WOK
#{@vz.table_close}}
end
end
- class Format_text_object
- @vz=SiSU_Env::Get_init.instance.skin
+ class FormatTextObject
+ @vz=SiSU_Env::GetInit.instance.skin
attr_accessor :md,:t_o,:txt,:ocn,:format,:table,:link,:linkname,:paranum,:p_num,:headname,:banner,:url
def initialize(md,t_o)
@md,@t_o=md,t_o
@@ -1903,7 +1867,7 @@ WOK
@named=nametags_seg(@dob)
@txt=((defined? t_o.obj) ? t_o.obj : nil)
@ocn=((defined? t_o.ocn) ? t_o.ocn.to_s : nil)
- @headname=((t_o.is=='heading' and defined? t_o.name) ? t_o.name : nil)
+ @headname=((t_o.is==:heading and defined? t_o.name) ? t_o.name : nil)
else
if @md.opt.cmd =~/M/
p __FILE__ +':'+ __LINE__.to_s
@@ -1912,10 +1876,10 @@ WOK
end
end
if @txt and not @txt.empty?
- @txt.gsub!(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'')
+ @txt=@txt.gsub(/#{Mx[:mk_o]}[-~]##{Mx[:mk_c]}/,'')
end
- @p_num=Paragraph_number.new(@md,@ocn)
- @vz=SiSU_Env::Get_init.instance.skin
+ @p_num=ParagraphNumber.new(@md,@ocn)
+ @vz=SiSU_Env::GetInit.instance.skin
end
def nametags_seg(dob) #FIX
tags=''
@@ -1951,60 +1915,60 @@ WOK
</div>
}
end
- def para_form_css(tag,attrib) # regular paragraphs shaped here
+ def para_form_css(tag,attrib,txt) # regular paragraphs shaped here
ul=ulc=''
ul,ulc="<ul>\n ","\n </ul>" if @tag =~/li/
%{
<div class="substance">
#{@p_num.ocn_display}
#{ul}<#{tag} class="#{attrib}" #{@p_num.id}>
- #{@named}#{@txt}
+ #{@named}#{txt}
</#{tag}>#{ulc}
</div>
}
end
def para
- para_form_css('p','norm')
+ para_form_css('p','norm',@txt)
end
def group
- para_form_css('p','group')
+ para_form_css('p','group',@txt)
end
def block
- para_form_css('p','block')
+ para_form_css('p','block',@txt)
end
def alt
- para_form_css('p','alt')
+ para_form_css('p','alt',@txt)
end
def verse
- para_form_css('p','verse')
+ para_form_css('p','verse',@txt)
end
def code
- para_form_css('p','code')
+ para_form_css('p','code',@txt)
end
def center
- para_form_css('p','center')
+ para_form_css('p','center',@txt)
end
def bold
- para_form_css('p','bold')
+ para_form_css('p','bold',@txt)
end
def bullet
- para_form_css('li','bullet')
+ para_form_css('li','bullet',@txt)
end
def table
@txt=if @t_o.obj !~/^<table\s/
- table=SiSU_XHTML_shared::Table_xhtml.new(@t_o) #move, make happen earlier
- @txt=table.table.obj
+ table=SiSU_XHTML_Shared::TableXHTML.new(@t_o) #move, make happen earlier
+ table.table.obj
else @txt
end
- para_form_css('p','norm')
+ para_form_css('p','norm',@txt)
end
def break
- @txt.gsub!(/#{Mx[:br_page_new]}|#{Mx[:br_page]}/,'<hr /><br />')
- @txt.gsub!(/#{Mx[:br_obj]}/,'<hr style="width:30%" /><br />')
- para_form_css('p','norm')
+ @txt=@txt.gsub(/#{Mx[:br_page_new]}|#{Mx[:br_page]}/,'<hr /><br />').
+ gsub(/#{Mx[:br_obj]}/,'<hr style="width:30%" /><br />')
+ para_form_css('p','norm',@txt)
end
def format(tag,attrib)
- para_form_css(tag,attrib)
+ para_form_css(tag,attrib,@txt)
end
def title_heading(tag,attrib)
%{
@@ -2033,8 +1997,8 @@ WOK
def title_heading4
''
end
- def seg_heading_sub(tag,attrib)
- @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
+ def seg_heading_sub(tag,attrib,txt)
+ txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
%{
<div class="substance">
#{@p_num.ocn_display}
@@ -2055,10 +2019,10 @@ WOK
}
end
def seg_heading5
- seg_heading_sub('p','bold')
+ seg_heading_sub('p','bold',@txt)
end
def seg_heading6
- seg_heading_sub('p','bold')
+ seg_heading_sub('p','bold',@txt)
end
def dl #check :trailer
"<dl><b>#{@txt}</b> #{@trailer}</dl>"
@@ -2068,18 +2032,19 @@ WOK
</p>
</div>'
end
- def gsub_body
- case @txt
+ def gsub_body #unused
+ @txt=case @txt
when /^(?:#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}\s*)?\((i+|iv|v|vi+|ix|x|xi+)\)/
- @txt.gsub!(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>')
- @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>')
+ @txt.gsub(/^\((i+|iv|v|vi+|ix|x|xi+)\)/,'<b>(\1)</b>').
+ gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((i+|iv|v|vi+|ix|x|xi+)\)/,'\1<b>(\2)</b>')
when /^(?:#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]}\s*)?\(?(\d|[a-z])+\)/
- @txt.gsub!(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>')
- @txt.gsub!(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>')
+ @txt.gsub(/^\((\d+|[a-z])+\)/,'<b>(\1)</b>').
+ gsub(/^(#{Mx[:pa_o]}i[1-9]#{Mx[:pa_c]})\s*\((\d+|[a-z])+\)/,'\1<b>(\2)</b>')
when /^\s*\d{1,3}\.\s/
- @txt.gsub!(/^\s*(\d+\.)/,'<b>\1</b>')
+ @txt.gsub(/^\s*(\d+\.)/,'<b>\1</b>')
when /^\s*[A-Z]\.\s/
- @txt.gsub!(/^\s*([A-Z]\.)/,'<b>\1</b>')
+ @txt.gsub(/^\s*([A-Z]\.)/,'<b>\1</b>')
+ else @txt
end
end
def bold_para
@@ -2091,9 +2056,9 @@ WOK
&nbsp;&nbsp;&nbsp;
#{@vz.table_close}}
end
- def bold_heading
- @txt.gsub!(/[1-9]~\S+/,'')
- @txt.gsub!(/[1-9]~/,'')
+ def bold_heading #unused
+ @txt=@txt.gsub(/[1-9]~\S+/,'').
+ gsub(/[1-9]~/,'')
%{<p class="bold">
#{@txt}
</p>
@@ -2114,62 +2079,16 @@ WOK
%{<p class="centerbold">#{@txt}</p>\n}
end
end
- class Format_scroll < Format_text_object
+ class FormatScroll < FormatTextObject
def initialize(md,txt)
super(md,txt)
- @vz=SiSU_Env::Get_init.instance.skin
+ @vz=SiSU_Env::GetInit.instance.skin
end
end
- class Format_seg < Format_text_object
+ class FormatSeg < FormatTextObject
def initialize(md,txt)
super(md,txt)
end
- def navigation_toc_lev1_advert
- %{#{@banner.home_button}\n
-<p class="center">
-#{@txt}
-#{@two}
-</a></p>}
- end
- def navigation_toc_lev1
- %{#{@banner.nav_toc}}
- end
- def navigation_toc_lev2 #change bold use css
- %{<table summary="navigation segment level 2">
-<tr><td width ="20">
-</td>
-<td>
- <font size="3" #{@vz.font_face}>
- <b>#{@txt}</b>
- </font>
- </p>
-#{@vz.table_close}}
- end
- def navigation_toc_lev3 #change bold use css
- %{<table summary="navigation segment level 3">
-<tr><td width ="20">
-</td>
-<td>
- <font size="3" #{@vz.font_face}>
- <b>#{@txt}</b>
- </font>
- </p>
-#{@vz.table_close}}
- end
- def navigation_toc_lev4
- %{<table summary="navigation segment level 4">
-<tr><td width ="80">
-</td>
-<td>
-<p>
- #{@txt}
-</p>
-#{@vz.table_close}}
- end
- def navigation_toc_lev5
- end
- def navigation_toc_lev6
- end
def endnote_seg_body(fn='') #FIX #url construction keep within single line... BUG WATCH 200408
fn='doc' if fn.to_s.empty? #you may wish to reconsider, sends to 'doc' where no segment info
%{
@@ -2179,9 +2098,8 @@ WOK
}
end
def clean(txt)
- txt.gsub!(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,'')
- txt.gsub!(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'')
- txt
+ txt=txt.gsub(/#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}/,'').
+ gsub(/#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]}/,'')
end
def subtoc_lev(tag,attrib)
@txt=clean(@txt)
@@ -2193,10 +2111,10 @@ WOK
note=''
if txt =~/(#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})/m # had \s* at end
note=$1
- note.gsub!(/[\n\s]+/m,' ')
- txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
- txt.gsub!(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">&nbsp;<sup id="note\d+">\d+<\/sup>&nbsp;/m,'')
- txt.gsub!(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">#{Mx[:nbsp]}<sup id="note\d+">\d+<\/sup>#{Mx[:nbsp]}/m,'') #remove
+ note=note.gsub(/[\n\s]+/m,' ')
+ txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ').
+ gsub(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">&nbsp;<sup id="note\d+">\d+<\/sup>&nbsp;/m,'').
+ gsub(/<a[\n\s]+"[\n\s]+href="#note_ref\d+">#{Mx[:nbsp]}<sup id="note\d+">\d+<\/sup>#{Mx[:nbsp]}/m,'') #remove
end
%{<#{tag} class="#{attrib}">
<a href="#o#{@ocn}"><i>#{txt}</i></a> #{note}
@@ -2208,8 +2126,8 @@ WOK
def subtoc_lev6
subtoc_lev('h6','subtoc') if @txt
end
- def heading_sub(tag,attrib)
- @txt.gsub!(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
+ def heading_sub(tag,attrib,txt)
+ txt=txt.gsub(/(?:#{Mx[:en_a_o]}.+?#{Mx[:en_a_c]}|#{Mx[:en_b_o]}.+?#{Mx[:en_b_c]})\s*/m,' ')
%{
<div class="substance">
#{@p_num.ocn_display}
@@ -2231,10 +2149,10 @@ WOK
}
end
def heading5
- heading_sub('p','bold')
+ heading_sub('p','bold',@txt)
end
def heading6
- heading_sub('p','bold')
+ heading_sub('p','bold',@txt)
end
def navigation_heading4
%{<table summary="navigation segment heading 4" width=100% bgcolor="#08163f" border="0">
@@ -2258,7 +2176,7 @@ WOK
%{<p class="centerbold">#{@txt}</p>}
end
end
- class Format_toc < Format_text_object
+ class FormatToc < FormatTextObject
def initialize(md,txt)
super(md,txt)
end
@@ -2300,44 +2218,6 @@ WOK
def lev0 #docinfo
lev('h0','toc')
end
- def mini_lev1
- lev('h1','minitoc')
- end
- def mini_lev2
- lev('h2','minitoc')
- end
- def mini_lev3
- lev('h3','minitoc')
- end
- def mini_lev4
- lev('h4','minitoc')
- end
- def mini_lev5
- lev('h5','minitoc')
- end
- def mini_lev6
- lev('h6','minitoc')
- end
- def mini_lev0 #docinfo
- lev('h0','minitoc')
- end
- def mini_tail
- %{
- <h4 class="minitoc">
- <a href="sisu_manifest.html">Manifest (alternative outputs)</a>
- </h4>
-}
- end
- def mini_concord_tail
- %{
- <h4 class="minitoc">
- <a href="concordance.html">Concordance (wordlist)</a>
- </h4>
- <h4 class="minitoc">
- <a href="sisu_manifest.html">Manifest (alternative outputs)</a>
- </h4>
-}
- end
end
end
__END__