deplate 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS.TXT +26 -0
- data/CHANGES.TXT +177 -0
- data/LICENSE.TXT +340 -0
- data/NEWS.TXT +29 -0
- data/README.TXT +86 -0
- data/TODO.TXT +202 -0
- data/VERSION.TXT +1 -0
- data/bin/deplate +3 -0
- data/bin/deplate.bat +2 -0
- data/etc/deplate.ini +361 -0
- data/lib/deplate.rb +31 -0
- data/lib/deplate/abstract-class.rb +30 -0
- data/lib/deplate/builtin.rb +11 -0
- data/lib/deplate/cache.rb +59 -0
- data/lib/deplate/commands.rb +693 -0
- data/lib/deplate/common.rb +335 -0
- data/lib/deplate/converter.rb +99 -0
- data/lib/deplate/core.rb +2705 -0
- data/lib/deplate/css/article.css +545 -0
- data/lib/deplate/css/deplate.css +699 -0
- data/lib/deplate/css/heading-navbar.css +29 -0
- data/lib/deplate/css/layout-deplate-print.css +540 -0
- data/lib/deplate/css/layout-deplate.css +764 -0
- data/lib/deplate/css/sans-serif.css +160 -0
- data/lib/deplate/css/serif-e.css +170 -0
- data/lib/deplate/css/serif-rel.css +121 -0
- data/lib/deplate/css/serif.css +190 -0
- data/lib/deplate/css/slides.css +11 -0
- data/lib/deplate/css/tabbar-left.css +91 -0
- data/lib/deplate/css/tabbar-right-ie.css +14 -0
- data/lib/deplate/css/tabbar-right.css +118 -0
- data/lib/deplate/css/tabbar-top.css +64 -0
- data/lib/deplate/css/tabbar.css +81 -0
- data/lib/deplate/css/text-sans-serif.css +154 -0
- data/lib/deplate/css/text-serif.css +175 -0
- data/lib/deplate/define.rb +439 -0
- data/lib/deplate/docbook.rb +738 -0
- data/lib/deplate/elements.rb +1355 -0
- data/lib/deplate/etc.rb +199 -0
- data/lib/deplate/external.rb +135 -0
- data/lib/deplate/fmt/dbk-article-4.1.2.rb +21 -0
- data/lib/deplate/fmt/dbk-article.rb +46 -0
- data/lib/deplate/fmt/dbk-book.rb +46 -0
- data/lib/deplate/fmt/dbk-ref.rb +105 -0
- data/lib/deplate/fmt/dbk-slides.rb +47 -0
- data/lib/deplate/fmt/dbk-snippet.rb +21 -0
- data/lib/deplate/fmt/html-snippet.rb +21 -0
- data/lib/deplate/fmt/html.rb +1696 -0
- data/lib/deplate/fmt/htmlsite.rb +419 -0
- data/lib/deplate/fmt/htmlslides.rb +21 -0
- data/lib/deplate/fmt/htmlwebsite.rb +70 -0
- data/lib/deplate/fmt/latex-snippet.rb +22 -0
- data/lib/deplate/fmt/latex.rb +1242 -0
- data/lib/deplate/fmt/php.rb +19 -0
- data/lib/deplate/fmt/phpsite.rb +19 -0
- data/lib/deplate/fmt/plain.rb +598 -0
- data/lib/deplate/fmt/template.rb +34 -0
- data/lib/deplate/fmt/xhtml10t.rb +41 -0
- data/lib/deplate/formatter-snippet.rb +17 -0
- data/lib/deplate/formatter.rb +1210 -0
- data/lib/deplate/input.rb +492 -0
- data/lib/deplate/input/deplate-headings.rb +48 -0
- data/lib/deplate/input/deplate-restricted.rb +70 -0
- data/lib/deplate/input/deplate.rb +28 -0
- data/lib/deplate/input/rdoc.rb +277 -0
- data/lib/deplate/input/template.rb +29 -0
- data/lib/deplate/lib/latex/highlight-extra.sty +15 -0
- data/lib/deplate/lib/latex/highlight-typical.sty +15 -0
- data/lib/deplate/lib/tabmenu.js +146 -0
- data/lib/deplate/locale/de.latin1 +708 -0
- data/lib/deplate/locale/ru.koi8-r +48 -0
- data/lib/deplate/locale/zh_cn.gb2312 +35 -0
- data/lib/deplate/macros.rb +639 -0
- data/lib/deplate/messages.rb +120 -0
- data/lib/deplate/metadata.rb +77 -0
- data/lib/deplate/metadata/marshal.rb +24 -0
- data/lib/deplate/metadata/xml.rb +42 -0
- data/lib/deplate/metadata/yaml.rb +26 -0
- data/lib/deplate/mod/anyword.rb +56 -0
- data/lib/deplate/mod/babelfish.rb +27 -0
- data/lib/deplate/mod/code-gvim.rb +52 -0
- data/lib/deplate/mod/code-highlight.rb +91 -0
- data/lib/deplate/mod/colored-log.rb +17 -0
- data/lib/deplate/mod/de.rb +19 -0
- data/lib/deplate/mod/en.rb +17 -0
- data/lib/deplate/mod/endnotes.rb +60 -0
- data/lib/deplate/mod/fr.rb +46 -0
- data/lib/deplate/mod/html-asciimath.rb +40 -0
- data/lib/deplate/mod/html-deplate-button.rb +15 -0
- data/lib/deplate/mod/html-headings-navbar.rb +39 -0
- data/lib/deplate/mod/html-obfuscate-email.rb +47 -0
- data/lib/deplate/mod/html-sidebar.rb +232 -0
- data/lib/deplate/mod/htmlslides-navbar-fh.rb +32 -0
- data/lib/deplate/mod/iconv.rb +35 -0
- data/lib/deplate/mod/imgurl.rb +30 -0
- data/lib/deplate/mod/inlatex-compound.rb +69 -0
- data/lib/deplate/mod/koma.rb +109 -0
- data/lib/deplate/mod/latex-emph-table-head.rb +38 -0
- data/lib/deplate/mod/latex-styles.rb +461 -0
- data/lib/deplate/mod/latex-verbatim-small.rb +29 -0
- data/lib/deplate/mod/makefile.rb +194 -0
- data/lib/deplate/mod/mark-external-urls.rb +38 -0
- data/lib/deplate/mod/markup-1-warn.rb +37 -0
- data/lib/deplate/mod/markup-1.rb +41 -0
- data/lib/deplate/mod/navbar-png.rb +33 -0
- data/lib/deplate/mod/noindent.rb +32 -0
- data/lib/deplate/mod/numpara.rb +40 -0
- data/lib/deplate/mod/particle-math.rb +34 -0
- data/lib/deplate/mod/php-extra.rb +44 -0
- data/lib/deplate/mod/pstoedit.rb +71 -0
- data/lib/deplate/mod/recode.rb +57 -0
- data/lib/deplate/mod/ru_koi8-r.rb +20 -0
- data/lib/deplate/mod/smiley.rb +50 -0
- data/lib/deplate/mod/soffice.rb +23 -0
- data/lib/deplate/mod/symbols-latin1.rb +58 -0
- data/lib/deplate/mod/symbols-od-utf-8.rb +16 -0
- data/lib/deplate/mod/symbols-plain.rb +58 -0
- data/lib/deplate/mod/symbols-sgml.rb +97 -0
- data/lib/deplate/mod/symbols-utf-8.rb +81 -0
- data/lib/deplate/mod/symbols-xml.rb +34 -0
- data/lib/deplate/mod/syntax-region-alt.rb +37 -0
- data/lib/deplate/mod/utf8.rb +49 -0
- data/lib/deplate/mod/validate-html.rb +35 -0
- data/lib/deplate/mod/xmlrpc.rb +233 -0
- data/lib/deplate/mod/zh-cn-autospace.rb +108 -0
- data/lib/deplate/mod/zh-cn.rb +59 -0
- data/lib/deplate/once-method.rb +44 -0
- data/lib/deplate/output.rb +249 -0
- data/lib/deplate/particles.rb +815 -0
- data/lib/deplate/regions.rb +1076 -0
- data/lib/deplate/structured.rb +763 -0
- data/lib/deplate/template.rb +430 -0
- data/lib/deplate/templates/html-doc.html +28 -0
- data/lib/deplate/templates/html-left-tabbar-js.html +37 -0
- data/lib/deplate/templates/html-left-tabbar.html +31 -0
- data/lib/deplate/templates/html-tabbar-right-table.html +43 -0
- data/lib/deplate/templates/html-tabbar-right.html +23 -0
- data/lib/deplate/templates/html-tabbar-top.html +43 -0
- data/lib/deplate/templates/html-tabbar.html +31 -0
- data/lib/deplate/wiki-markup.rb +117 -0
- data/lib/deplate/xml.rb +109 -0
- data/lib/deplate/zh-cn.rb +59 -0
- data/lib/ps2ppm.rb +239 -0
- data/man/man1/deplate.1 +692 -0
- metadata +210 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# htmlslides-navbar-fh.rb
|
|
2
|
+
# @Author: Thomas Link, Fritz Heinrichmeyer
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 17-M�r-2004.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.435
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Deplate::Formatter::HTML_Site
|
|
11
|
+
def format_navigation_bar(invoker, type, slot, bartype, first=false, last=false)
|
|
12
|
+
idx, _, _ = navbar_output_index(invoker, first, last)
|
|
13
|
+
navmenu = []
|
|
14
|
+
doctitle = @deplate.get_clip("title")
|
|
15
|
+
doctitle = if doctitle then doctitle.elt.to_s else "" end
|
|
16
|
+
@deplate.each_heading(1) do |section, title|
|
|
17
|
+
unless section.args["noList"]
|
|
18
|
+
f = section.output_file_name
|
|
19
|
+
v = section.description.gsub(/<\/?[^>]*>/, "")
|
|
20
|
+
end
|
|
21
|
+
if @deplate.top_heading_idx(section.top_heading) != idx
|
|
22
|
+
navmenu << %{<a class="navbar" href="#{f}">#{v}</a>}
|
|
23
|
+
else
|
|
24
|
+
set_at(:pre, :head_title, %{<title>#{doctitle} #{v}</title>})
|
|
25
|
+
navmenu << %{<span class="navbartds">#{v}</span>}
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
@deplate.options.navmenu = navmenu.join("\n")
|
|
29
|
+
output_at(:body, slot, @deplate.options.navmenu.to_s)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# iconv.rb
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 11-Apr-2005.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.84
|
|
8
|
+
#
|
|
9
|
+
# = Description
|
|
10
|
+
# Recode text on-the-fly using +iconv+. The source encoding is
|
|
11
|
+
# taken from the +encoding+ variable (default: latin1), the target
|
|
12
|
+
# encoding is defined in the +recodeEncoding+ (default: utf-8) variable.
|
|
13
|
+
|
|
14
|
+
require 'iconv'
|
|
15
|
+
|
|
16
|
+
class Deplate::Formatter
|
|
17
|
+
def hook_pre_go_iconv
|
|
18
|
+
@iconv_encodings = {}
|
|
19
|
+
unless defined?(@iconv_enc_source)
|
|
20
|
+
source = @deplate.variables['encoding'] || "latin1"
|
|
21
|
+
@iconv_enc_source = canonic_enc_name(source, @iconv_encodings)
|
|
22
|
+
target = @deplate.variables['recodeEncoding'] || "utf-8"
|
|
23
|
+
@iconv_enc_target = canonic_enc_name(target, @iconv_encodings)
|
|
24
|
+
@deplate.variables['encoding'] = target
|
|
25
|
+
end
|
|
26
|
+
unless defined?(@iconv_converter) and @iconv_converter
|
|
27
|
+
@iconv_converter = Iconv.new(@iconv_enc_target, @iconv_enc_source)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def plain_text_recode(text)
|
|
32
|
+
@iconv_converter.iconv(text)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# imgurl.rb
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 05-Mai-2005.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.26
|
|
8
|
+
#
|
|
9
|
+
# = Description
|
|
10
|
+
# Insert URLs to images as image
|
|
11
|
+
|
|
12
|
+
require 'deplate/wiki-markup'
|
|
13
|
+
|
|
14
|
+
# Insert URLs to images as image
|
|
15
|
+
class Deplate::HyperLink::ImgUrl < Deplate::Input::Wiki::AbstractImgUrl
|
|
16
|
+
insert_particle_before(Deplate::HyperLink::Url)
|
|
17
|
+
@rx = /^((file|https?|mailto|ftps?|www):(\S+?)\.(png|jpg|jpeg|gif|bmp))/
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Deplate::HyperLink::Extended
|
|
21
|
+
alias :process_re_imgurl :process
|
|
22
|
+
def process
|
|
23
|
+
if @dest =~ /\.(png|jpg|jpeg|gif|bmp)$/
|
|
24
|
+
@elt = @deplate.formatter.include_image(encode_path(@dest), @args, true)
|
|
25
|
+
else
|
|
26
|
+
process_re_imgurl
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# inlatex-compound.rb
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 07-Apr-2005.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.39
|
|
8
|
+
#
|
|
9
|
+
# = Description
|
|
10
|
+
# This doesn't work yet.
|
|
11
|
+
#
|
|
12
|
+
# This module changes the way deplate processes inline latex fragments.
|
|
13
|
+
# By default, deplate converts each fragment for its own. When using
|
|
14
|
+
# this module, the latex fragments are collected in one file, are
|
|
15
|
+
# translated to dvi and ps, and then separated to bitmap files.
|
|
16
|
+
|
|
17
|
+
class Deplate::Formatter
|
|
18
|
+
alias :inlatex_compound :inlatex
|
|
19
|
+
|
|
20
|
+
# Process inline latex
|
|
21
|
+
def inlatex(invoker)
|
|
22
|
+
unless defined?(@inlatex_body)
|
|
23
|
+
@inlatex_body = []
|
|
24
|
+
@inlatex_container = []
|
|
25
|
+
@inlatex_suffix = nil
|
|
26
|
+
end
|
|
27
|
+
@inlatex_body << invoker.accum
|
|
28
|
+
@inlatex_body << %{\\newpage{}}
|
|
29
|
+
# @inlatex_body << %{\\clearpage{}}
|
|
30
|
+
rv = @inlatex_container.size
|
|
31
|
+
@inlatex_container << invoker
|
|
32
|
+
@inlatex_suffix ||= invoker.args['sfx']
|
|
33
|
+
rv
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def hook_pre_process_inlatex
|
|
37
|
+
pseudo = Deplate::PseudoContainer.new(@deplate,
|
|
38
|
+
:accum => @inlatex_body,
|
|
39
|
+
:args => {'sfx' => @inlatex_suffix}
|
|
40
|
+
)
|
|
41
|
+
inlatex_compound(pseudo)
|
|
42
|
+
fnames = pseudo.elt
|
|
43
|
+
if fnames.size != @inlatex_container.size
|
|
44
|
+
log("Conversion if compound Inline LaTeX failed", :error)
|
|
45
|
+
else
|
|
46
|
+
@inlatex_container.each_with_index do |o, i|
|
|
47
|
+
e = fnames[i]
|
|
48
|
+
o.elt = [e]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def inlatex_process_latex(invoker, ftex, faux, flog)
|
|
54
|
+
latex2dvi(invoker, ftex, faux, flog)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def inlatex_process_dvi(invoker, fdvi, fps)
|
|
58
|
+
dvi2ps(invoker, fdvi, fps, '-i -S 1')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def inlatex_process_ps(invoker, device, fps, fout, args)
|
|
62
|
+
fin = File.basename(fps, '.*')
|
|
63
|
+
for fps in Dir["#{fin}.[0-9][0-9][0-9]"]
|
|
64
|
+
File.rename(fps, "#{fps}.ps")
|
|
65
|
+
ps2img(invoker, device, fps, fout, args)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# mod-koma.rb -- Module: use Koma-Script and friends as LaTeX class
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 07-Mai-2004.
|
|
6
|
+
# @Last Change: 31-Okt-2005.
|
|
7
|
+
# @Revision: 0.106
|
|
8
|
+
#
|
|
9
|
+
# Description:
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
#
|
|
13
|
+
# TODO:
|
|
14
|
+
#
|
|
15
|
+
# CHANGES:
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
class Deplate::Formatter::LaTeX
|
|
19
|
+
@@latexDocClass = "scrartcl"
|
|
20
|
+
|
|
21
|
+
# def hook_pre_prepare_koma
|
|
22
|
+
# push_class_option('tablecaptionabove')
|
|
23
|
+
# end
|
|
24
|
+
|
|
25
|
+
def format_header_or_footer(invoker, left, center, right, linesep=nil)
|
|
26
|
+
args = invoker.args
|
|
27
|
+
elt = invoker.elt
|
|
28
|
+
if elt.size > 1
|
|
29
|
+
format_header_or_footer_error(elt)
|
|
30
|
+
end
|
|
31
|
+
catch :error do
|
|
32
|
+
e = elt[0]
|
|
33
|
+
if e.kind_of?(Deplate::Element::Paragraph)
|
|
34
|
+
l = c = r = nil
|
|
35
|
+
ee = wrap_text(e.elt)
|
|
36
|
+
if args["center"]
|
|
37
|
+
c = ee
|
|
38
|
+
elsif args["right"]
|
|
39
|
+
r = ee
|
|
40
|
+
else
|
|
41
|
+
l = ee
|
|
42
|
+
end
|
|
43
|
+
elsif e.kind_of?(Deplate::Element::Table)
|
|
44
|
+
log("Only the header's first row will be used", :error) if e.elt.size > 1
|
|
45
|
+
l, c, r = e.elt[0].cols.collect {|c| c.cell}
|
|
46
|
+
else
|
|
47
|
+
format_header_or_footer_error(elt)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
output(invoker, "\\%s{%s}" % [left, l]) if l and !l.empty?
|
|
51
|
+
output(invoker, "\\%s{%s}" % [center, c]) if c and !c.empty?
|
|
52
|
+
output(invoker, "\\%s{%s}" % [right, r]) if r and !r.empty?
|
|
53
|
+
ls = args["linesep"] || args["sep"]
|
|
54
|
+
if ls
|
|
55
|
+
if ls == true
|
|
56
|
+
ls = "0.4pt"
|
|
57
|
+
elsif ls =~ /^[0-9.]+$/
|
|
58
|
+
ls = "%dpt" % ls
|
|
59
|
+
end
|
|
60
|
+
output(invoker, "\\%s{%s}" % [linesep, ls])
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def format_header_or_footer_error(elt)
|
|
66
|
+
elts = "%s %s" % [elt.size, elt.collect {|e| e.class}.join(", ")]
|
|
67
|
+
log(["Header must contain only 1 element (a paragraph or a table)", elts], :error)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def format_header(invoker)
|
|
71
|
+
type = invoker.doc_type(:pre)
|
|
72
|
+
slot = invoker.doc_slot(:body_pre)
|
|
73
|
+
unless @deplate.variables['__pagestyle_initialized']
|
|
74
|
+
add_package("scrpage2")
|
|
75
|
+
type, cslot, slot = format_header_or_footer_slots(type, slot)
|
|
76
|
+
output_at(type, cslot, "", %{\\clearscrheadfoot{}})
|
|
77
|
+
output_at(type, slot, %{\\pagestyle{scrheadings}}, "")
|
|
78
|
+
@deplate.variables['__pagestyle_initialized'] = true
|
|
79
|
+
end
|
|
80
|
+
format_header_or_footer(invoker, "ihead", "chead", "ohead", "setheadsepline")
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def format_footer(invoker)
|
|
84
|
+
type = invoker.doc_type(:pre)
|
|
85
|
+
slot = invoker.doc_slot(:body_pre)
|
|
86
|
+
unless @deplate.variables['__pagestyle_initialized']
|
|
87
|
+
add_package("scrpage2")
|
|
88
|
+
type, cslot, slot = format_header_or_footer_slots(type, slot)
|
|
89
|
+
output_at(type, cslot, "", %{\\clearscrheadfoot{}})
|
|
90
|
+
output_at(type, slot, %{\\pagestyle{scrheadings}}, "")
|
|
91
|
+
@deplate.variables['__pagestyle_initialized'] = true
|
|
92
|
+
end
|
|
93
|
+
format_header_or_footer(invoker, "ifoot", "cfoot", "ofoot", "setfootsepline")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def format_header_or_footer_slots(type, slot)
|
|
97
|
+
if slot == :body_pre and type == :pre
|
|
98
|
+
return [type, :prematter_end, slot]
|
|
99
|
+
else
|
|
100
|
+
return [type, slot, slot]
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def format_pagenumber(invoker)
|
|
105
|
+
return "\\pagemark{}"
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# vim: ff=unix
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# latex-emph-table-head.rb
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 26-Nov-2004.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.39
|
|
8
|
+
#
|
|
9
|
+
# Description:
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
#
|
|
13
|
+
# TODO:
|
|
14
|
+
#
|
|
15
|
+
# CHANGES:
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
class Deplate::Formatter::LaTeX
|
|
19
|
+
def formatter_initialize_latex_emph_table_head
|
|
20
|
+
def_advice("latex-emph-table-head", :table_end_head,
|
|
21
|
+
:wrap => Proc.new do |agent, rv, invoker, nth|
|
|
22
|
+
"#{rv}\n #{table_horizontal_ruler_from_to(invoker)}"
|
|
23
|
+
end
|
|
24
|
+
)
|
|
25
|
+
def_advice("latex-emph-table-head", :table_cell,
|
|
26
|
+
:wrap => Proc.new do |agent, rv, invoker, cell, *args|
|
|
27
|
+
hirow = args[0]
|
|
28
|
+
hd = (hirow || cell.head || cell.foot || cell.high)
|
|
29
|
+
if hd
|
|
30
|
+
format_particle(:format_emphasize, invoker, rv)
|
|
31
|
+
else
|
|
32
|
+
rv
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
# latex-emph-table-head.rb
|
|
2
|
+
# @Author: Thomas Link (samul AT web.de)
|
|
3
|
+
# @Website: http://deplate.sf.net/
|
|
4
|
+
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# @Created: 26-Nov-2004.
|
|
6
|
+
# @Last Change: 23-Okt-2005.
|
|
7
|
+
# @Revision: 0.345
|
|
8
|
+
#
|
|
9
|
+
# Description:
|
|
10
|
+
#
|
|
11
|
+
# Usage:
|
|
12
|
+
#
|
|
13
|
+
# TODO:
|
|
14
|
+
#
|
|
15
|
+
# CHANGES:
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# The dummy base style
|
|
20
|
+
class Deplate::Formatter::LaTeX::Styles
|
|
21
|
+
|
|
22
|
+
def initialize(deplate)
|
|
23
|
+
@deplate = deplate
|
|
24
|
+
@formatter = deplate.formatter
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def format_table(rv, invoker, *args)
|
|
28
|
+
rv
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def table_args(rv, invoker)
|
|
32
|
+
rv
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def table_bottom(rv, invoker, *args)
|
|
36
|
+
rv
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def table_caption(rv, invoker, *args)
|
|
40
|
+
rv
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def table_caption_text(rv, invoker, *args)
|
|
44
|
+
rv
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def table_cell(rv, invoker, *args)
|
|
48
|
+
rv
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def table_cols(rv, invoker, *args)
|
|
52
|
+
rv
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def table_begin_head(rv, invoker, rown)
|
|
56
|
+
rv
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def table_end_head(rv, invoker, rown)
|
|
60
|
+
rv
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def table_begin_body(rv, invoker, rown)
|
|
64
|
+
rv
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def table_end_body(rv, invoker, rown)
|
|
68
|
+
rv
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def table_begin_foot(rv, invoker, rown)
|
|
72
|
+
rv
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def table_end_foot(rv, invoker, rown)
|
|
76
|
+
rv
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def table_head_row(rv, invoker, *args)
|
|
80
|
+
rv
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def table_horizontal_ruler(rv, invoker, *args)
|
|
84
|
+
rv
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def table_horizontal_ruler_from_to(rv, invoker, *args)
|
|
88
|
+
rv
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def table_longtable_bottom(rv, invoker, *args)
|
|
92
|
+
rv
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def table_longtable_top(rv, invoker, *args)
|
|
96
|
+
rv
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def table_normal_row(rv, invoker, *args)
|
|
100
|
+
rv
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def table_head_row(rv, invoker, *args)
|
|
104
|
+
rv
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def table_foot_row(rv, invoker, *args)
|
|
108
|
+
rv
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def table_high_row(rv, invoker, *args)
|
|
112
|
+
rv
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def table_table_bottom(rv, invoker, *args)
|
|
116
|
+
rv
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def table_table_top(rv, invoker, *args)
|
|
120
|
+
rv
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def table_top(rv, invoker, *args)
|
|
124
|
+
rv
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def tabular_col_widths(rv, invoker, args)
|
|
128
|
+
rv
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def tabular_col_justifications(rv, invoker, args)
|
|
132
|
+
rv
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def tabular_vertical_rulers(rv, invoker, args)
|
|
136
|
+
rv
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def table_indented_row(rv, invoker, row, indent, t)
|
|
140
|
+
rv
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
protected
|
|
144
|
+
def with_agent(agent, *args)
|
|
145
|
+
@formatter.send(agent, *args)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def horizontal_ruler(invoker, rv, args={})
|
|
149
|
+
m = /^\s+/.match(rv)
|
|
150
|
+
indent = m ? m[0] : ""
|
|
151
|
+
indent + with_agent(:table_horizontal_ruler_from_to, invoker, args)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def first_row?(invoker, rowidx)
|
|
155
|
+
rowidx == 0
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def last_row?(invoker, rowidx)
|
|
159
|
+
invoker.elt.size - 1 == rowidx
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def cell_in_first_row?(invoker, cell)
|
|
163
|
+
cell.y == 1
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def cell_in_last_row?(invoker, cell)
|
|
167
|
+
cell.from_bottom - cell.span_y == 0
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def cell_in_first_column?(invoker, cell)
|
|
171
|
+
cell.x == 1
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def cell_in_last_column?(invoker, cell)
|
|
175
|
+
cell.from_right - cell.span_x == 0
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
# Smaller font sizes
|
|
181
|
+
# class Deplate::Formatter::LaTeX::Styles::TableSmall < Deplate::Formatter::LaTeX::Styles
|
|
182
|
+
# def table_cell(rv, invoker, *args)
|
|
183
|
+
# %{\\small{#{rv}}}
|
|
184
|
+
# end
|
|
185
|
+
# end
|
|
186
|
+
# class Deplate::Formatter::LaTeX::Styles::TableFootnotesize < Deplate::Formatter::LaTeX::Styles
|
|
187
|
+
# def table_cell(rv, invoker, *args)
|
|
188
|
+
# %{\\footnotesize{#{rv}}}
|
|
189
|
+
# end
|
|
190
|
+
# end
|
|
191
|
+
# class Deplate::Formatter::LaTeX::Styles::TableScriptsize < Deplate::Formatter::LaTeX::Styles
|
|
192
|
+
# def table_cell(rv, invoker, *args)
|
|
193
|
+
# %{\\scriptsize{#{rv}}}
|
|
194
|
+
# end
|
|
195
|
+
# end
|
|
196
|
+
class Deplate::Formatter::LaTeX::Styles::TableSmall < Deplate::Formatter::LaTeX::Styles
|
|
197
|
+
def table_top(rv, invoker, capAbove, rown)
|
|
198
|
+
"\\small{}\n#{rv}"
|
|
199
|
+
end
|
|
200
|
+
def table_bottom(rv, invoker, capAbove, rown)
|
|
201
|
+
"#{rv}\\normalsize{}\n"
|
|
202
|
+
end
|
|
203
|
+
def table_caption_text(rv, invoker, *args)
|
|
204
|
+
"\\normalsize{#{rv}}"
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
class Deplate::Formatter::LaTeX::Styles::TableFootnotesize < Deplate::Formatter::LaTeX::Styles
|
|
208
|
+
def table_top(rv, invoker, capAbove, rown)
|
|
209
|
+
"\\footnotesize{}\n#{rv}"
|
|
210
|
+
end
|
|
211
|
+
def table_bottom(rv, invoker, capAbove, rown)
|
|
212
|
+
"#{rv}\\normalsize{}\n"
|
|
213
|
+
end
|
|
214
|
+
def table_caption_text(rv, invoker, *args)
|
|
215
|
+
"\\normalsize{#{rv}}"
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
class Deplate::Formatter::LaTeX::Styles::TableScriptsize < Deplate::Formatter::LaTeX::Styles
|
|
219
|
+
def table_top(rv, invoker, capAbove, rown)
|
|
220
|
+
"\\scriptsize{}\n#{rv}"
|
|
221
|
+
end
|
|
222
|
+
def table_bottom(rv, invoker, capAbove, rown)
|
|
223
|
+
"#{rv}\\normalsize{}\n"
|
|
224
|
+
end
|
|
225
|
+
def table_caption_text(rv, invoker, *args)
|
|
226
|
+
"\\normalsize{#{rv}}"
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
# Denser tables
|
|
232
|
+
class Deplate::Formatter::LaTeX::Styles::TableDense08 < Deplate::Formatter::LaTeX::Styles
|
|
233
|
+
@@dense08baselinestretch = false
|
|
234
|
+
def initialize(deplate)
|
|
235
|
+
super
|
|
236
|
+
# unless @@dense08baselinestretch
|
|
237
|
+
# @formatter.output_at(:pre, :body_beg, "\\newcommand{\\origBaseLineStretch}{}")
|
|
238
|
+
# @@dense08baselinestretch = true
|
|
239
|
+
# end
|
|
240
|
+
end
|
|
241
|
+
def table_top(rv, invoker, capAbove, rown)
|
|
242
|
+
"\\renewcommand{\\arraystretch}{0.8}\n\\setlength{\\tabcolsep}{0.8\\tabcolsep}\n#{rv}"
|
|
243
|
+
end
|
|
244
|
+
def table_bottom(rv, invoker, capAbove, rown)
|
|
245
|
+
"#{rv}\\setlength{\\tabcolsep}{1.25\\tabcolsep}\n\\renewcommand{\\arraystretch}{1.0}\n"
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
# Displays tables as a box
|
|
251
|
+
class Deplate::Formatter::LaTeX::Styles::TableLandscape < Deplate::Formatter::LaTeX::Styles
|
|
252
|
+
def initialize(deplate)
|
|
253
|
+
super
|
|
254
|
+
@formatter.add_package("lscape")
|
|
255
|
+
end
|
|
256
|
+
def table_top(rv, invoker, capAbove, rown)
|
|
257
|
+
"\\begin{landscape}\n#{rv}"
|
|
258
|
+
end
|
|
259
|
+
def table_bottom(rv, invoker, capAbove, rown)
|
|
260
|
+
"#{rv}\\end{landscape}\n"
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
# Displays tables as a grid
|
|
266
|
+
class Deplate::Formatter::LaTeX::Styles::TableGrid < Deplate::Formatter::LaTeX::Styles
|
|
267
|
+
def table_bottom(rv, invoker, *args)
|
|
268
|
+
[horizontal_ruler(invoker, rv, :bottom => true), rv].join("\n")
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def table_top(rv, invoker, *args)
|
|
272
|
+
[rv, horizontal_ruler(invoker, rv, :top => true)].join("\n")
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
def table_indented_row(rv, invoker, row, indent, t)
|
|
276
|
+
if row.from_bottom == 0
|
|
277
|
+
rv
|
|
278
|
+
else
|
|
279
|
+
[rv, horizontal_ruler(invoker, rv)].join("\n")
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def tabular_vertical_rulers(rv, invoker, *args)
|
|
284
|
+
[1] * (@formatter.table_row_size(invoker.elt) + 1)
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
# Displays tables as found in scientific textbooks
|
|
290
|
+
# <+TBD+> We should also use booktabs.sty here
|
|
291
|
+
class Deplate::Formatter::LaTeX::Styles::TableFormal < Deplate::Formatter::LaTeX::Styles
|
|
292
|
+
def table_args(rv, *args)
|
|
293
|
+
rv + %{ rules="groups"}
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def table_bottom(rv, invoker, *args)
|
|
297
|
+
[horizontal_ruler(invoker, rv, :bottom => true), rv].compact.join("\n")
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def table_top(rv, invoker, *args)
|
|
301
|
+
[rv, horizontal_ruler(invoker, rv, :top => true)].compact.join("\n")
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def table_end_head(rv, invoker, *args)
|
|
305
|
+
[rv, horizontal_ruler(invoker, rv)].compact.join("\n")
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
def table_begin_foot(rv, invoker, *args)
|
|
309
|
+
[horizontal_ruler(invoker, rv), rv].compact.join("\n")
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
# List
|
|
314
|
+
class Deplate::Formatter::LaTeX::Styles::TableList < Deplate::Formatter::LaTeX::Styles
|
|
315
|
+
def table_bottom(rv, invoker, *args)
|
|
316
|
+
[horizontal_ruler(invoker, rv, :bottom => true), rv].compact.join("\n")
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def table_top(rv, invoker, *args)
|
|
320
|
+
[rv, horizontal_ruler(invoker, rv, :top => true)].compact.join("\n")
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def table_indented_row(rv, invoker, row, indent, t)
|
|
324
|
+
if row.from_bottom == 0
|
|
325
|
+
rv
|
|
326
|
+
else
|
|
327
|
+
[rv, horizontal_ruler(invoker, rv)].join("\n")
|
|
328
|
+
end
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
# Displays tables as a box
|
|
333
|
+
class Deplate::Formatter::LaTeX::Styles::TableBox < Deplate::Formatter::LaTeX::Styles::TableFormal
|
|
334
|
+
def tabular_vertical_rulers(rv, invoker, *args)
|
|
335
|
+
rv[0] = 1
|
|
336
|
+
rv[@formatter.table_row_size(invoker.elt)] = 1
|
|
337
|
+
prototype = invoker.elt[0]
|
|
338
|
+
prototype.cols.each_with_index do |c, i|
|
|
339
|
+
if c.high
|
|
340
|
+
rv[i + 1] = rv[i] = 1
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
rv
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
# Try some coloring
|
|
349
|
+
class Deplate::Formatter::LaTeX::Styles::TableOverlay < Deplate::Formatter::LaTeX::Styles::TableBox
|
|
350
|
+
def initialize(deplate)
|
|
351
|
+
super
|
|
352
|
+
options = []
|
|
353
|
+
options << "pdftex" if deplate.options.pdftex
|
|
354
|
+
@formatter.add_package("colortbl", *options)
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
def table_head_row(rv, invoker, row, nth)
|
|
358
|
+
rv[0] = styled_head_row_color(rv[0])
|
|
359
|
+
rv
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def table_foot_row(rv, invoker, row, nth)
|
|
363
|
+
rv[0] = styled_foot_row_color(rv[0])
|
|
364
|
+
rv
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
def table_cell(rv, invoker, cell, row)
|
|
368
|
+
if cell.high and !row.head and !row.foot
|
|
369
|
+
styled_high_cell_color(rv)
|
|
370
|
+
else
|
|
371
|
+
rv
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
def styled_head_row_color(rv)
|
|
376
|
+
%{\\rowcolor[gray]{.8}#{rv}}
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def styled_foot_row_color(rv)
|
|
380
|
+
%{\\rowcolor[gray]{.9}#{rv}}
|
|
381
|
+
end
|
|
382
|
+
|
|
383
|
+
def styled_high_cell_color(rv)
|
|
384
|
+
%{\\cellcolor[gray]{.9}#{rv}}
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
class Deplate::Formatter::LaTeX
|
|
391
|
+
@style_classes = {
|
|
392
|
+
"grid" => Deplate::Formatter::LaTeX::Styles::TableGrid,
|
|
393
|
+
"formal" => Deplate::Formatter::LaTeX::Styles::TableFormal,
|
|
394
|
+
"box" => Deplate::Formatter::LaTeX::Styles::TableBox,
|
|
395
|
+
"overlay" => Deplate::Formatter::LaTeX::Styles::TableOverlay,
|
|
396
|
+
"list" => Deplate::Formatter::LaTeX::Styles::TableList,
|
|
397
|
+
"small" => Deplate::Formatter::LaTeX::Styles::TableSmall,
|
|
398
|
+
"footnotesize" => Deplate::Formatter::LaTeX::Styles::TableFootnotesize,
|
|
399
|
+
"scriptsize" => Deplate::Formatter::LaTeX::Styles::TableScriptsize,
|
|
400
|
+
"dense08" => Deplate::Formatter::LaTeX::Styles::TableDense08,
|
|
401
|
+
"landscape" => Deplate::Formatter::LaTeX::Styles::TableLandscape,
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
class << self
|
|
405
|
+
attr_accessor :style_classes
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
def formatter_initialize_latex_styles
|
|
409
|
+
@style_engines = {
|
|
410
|
+
:default => Deplate::Formatter::LaTeX::Styles.new(@deplate),
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
table_agents = [
|
|
414
|
+
:format_table, :table_args,
|
|
415
|
+
:table_bottom, :table_caption, :table_caption_text, :table_cell, :table_cols,
|
|
416
|
+
:table_begin_head, :table_end_head, :table_head_row,
|
|
417
|
+
:table_begin_foot, :table_end_foot, :table_foot_row,
|
|
418
|
+
:table_begin_body, :table_end_body, :table_high_row, :table_normal_row,
|
|
419
|
+
:table_horizontal_ruler, :table_horizontal_ruler_from_to,
|
|
420
|
+
:table_longtable_top, :table_longtable_bottom,
|
|
421
|
+
:table_table_bottom, :table_table_top, :table_top,
|
|
422
|
+
:tabular_col_widths, :tabular_col_justifications, :tabular_vertical_rulers,
|
|
423
|
+
:table_indented_row,
|
|
424
|
+
]
|
|
425
|
+
for agent in table_agents
|
|
426
|
+
advice = Proc.new do |agent, rv, invoker, *args|
|
|
427
|
+
styles = []
|
|
428
|
+
stylex_arg = invoker.args["stylex"]
|
|
429
|
+
if stylex_arg
|
|
430
|
+
styles += stylex_arg.split(/\s*,\s*/)
|
|
431
|
+
else
|
|
432
|
+
style_arg = invoker.args["style"]
|
|
433
|
+
styles += style_arg.split(/\s*,\s*/) if style_arg
|
|
434
|
+
style_var = @deplate.variables["tableStyle"]
|
|
435
|
+
styles += style_var.split(/\s*,\s*/) if style_var
|
|
436
|
+
end
|
|
437
|
+
styles.compact!
|
|
438
|
+
for style in styles
|
|
439
|
+
styler = @style_engines[style] || setup_styler(style)
|
|
440
|
+
rv = styler.send(agent, rv, invoker, *args)
|
|
441
|
+
end
|
|
442
|
+
rv
|
|
443
|
+
end
|
|
444
|
+
def_advice("latex-styles", agent, :wrap => advice)
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
def setup_styler(style)
|
|
449
|
+
# <+TBD+> load module or style definition on-demand
|
|
450
|
+
c = self.class.style_classes[style]
|
|
451
|
+
if c
|
|
452
|
+
@style_engines[style] = styler = c.new(@deplate)
|
|
453
|
+
return styler
|
|
454
|
+
else
|
|
455
|
+
log(["Unknown style", style], :error)
|
|
456
|
+
@style_engines[:default]
|
|
457
|
+
end
|
|
458
|
+
end
|
|
459
|
+
|
|
460
|
+
end
|
|
461
|
+
|