deplate 0.8 → 0.8.1
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 +19 -16
- data/CHANGES.TXT +214 -248
- data/NEWS.TXT +47 -30
- data/README.TXT +0 -1
- data/TODO.TXT +93 -20
- data/VERSION.TXT +1 -1
- data/bin/deplate.exy +192 -0
- data/etc/deplate.ini +70 -9
- data/lib/action_view/helpers/deplate.rb +33 -33
- data/lib/deplate.rb +2 -2
- data/lib/deplate/bib.rb +72 -41
- data/lib/deplate/builtin.rb +1 -1
- data/lib/deplate/cache.rb +1 -1
- data/lib/deplate/commands.rb +161 -102
- data/lib/deplate/common.rb +93 -7
- data/lib/deplate/converter.rb +10 -4
- data/lib/deplate/core.rb +215 -108
- data/lib/deplate/counters.rb +23 -8
- data/lib/deplate/css/article.css +9 -5
- data/lib/deplate/css/deplate.css +37 -3
- data/lib/deplate/css/heading-navbar.css +1 -1
- data/lib/deplate/css/highstep.css +18 -0
- data/lib/deplate/css/htmldoc.css +43 -0
- data/lib/deplate/css/layout-deplate-print.css +1 -1
- data/lib/deplate/css/layout-deplate.css +1 -1
- data/lib/deplate/css/play.css +101 -0
- data/lib/deplate/css/sans-serif.css +1 -1
- data/lib/deplate/css/serif-e.css +1 -1
- data/lib/deplate/css/serif-rel.css +1 -1
- data/lib/deplate/css/serif.css +1 -1
- data/lib/deplate/css/slides.css +1 -1
- data/lib/deplate/css/styles.css +4 -0
- data/lib/deplate/css/tabbar-right.css +54 -8
- data/lib/deplate/css/tabbar-top.css +28 -9
- data/lib/deplate/css/text-sans-serif.css +1 -1
- data/lib/deplate/css/text-serif.css +1 -1
- data/lib/deplate/define.rb +71 -38
- data/lib/deplate/deplate-string.rb +3 -3
- data/lib/deplate/docbook.rb +9 -9
- data/lib/deplate/elements.rb +173 -84
- data/lib/deplate/etc.rb +6 -8
- data/lib/deplate/external.rb +9 -5
- data/lib/deplate/fmt/dbk-article-4.1.2.rb +4 -3
- data/lib/deplate/fmt/dbk-article.rb +9 -8
- data/lib/deplate/fmt/dbk-book.rb +4 -3
- data/lib/deplate/fmt/dbk-ref.rb +5 -4
- data/lib/deplate/fmt/dbk-slides.rb +4 -3
- data/lib/deplate/fmt/dbk-snippet.rb +4 -3
- data/lib/deplate/fmt/html-snippet.rb +1 -1
- data/lib/deplate/fmt/html.rb +186 -46
- data/lib/deplate/fmt/htmlsite.rb +19 -9
- data/lib/deplate/fmt/htmlslides.rb +1 -1
- data/lib/deplate/fmt/htmlwebsite.rb +1 -1
- data/lib/deplate/fmt/latex-dramatist.rb +175 -0
- data/lib/deplate/fmt/latex-snippet.rb +1 -1
- data/lib/deplate/fmt/latex.rb +132 -80
- data/lib/deplate/fmt/null.rb +1 -1
- data/lib/deplate/fmt/php.rb +1 -1
- data/lib/deplate/fmt/phpsite.rb +1 -1
- data/lib/deplate/fmt/plain.rb +16 -9
- data/lib/deplate/fmt/template.rb +1 -1
- data/lib/deplate/fmt/xhtml10t.rb +1 -1
- data/lib/deplate/formatter-snippet.rb +1 -1
- data/lib/deplate/formatter.rb +272 -81
- data/lib/deplate/guesslanguage.rb +57 -0
- data/lib/deplate/input.rb +205 -50
- data/lib/deplate/input/deplate-headings.rb +9 -11
- data/lib/deplate/input/deplate-restricted.rb +3 -23
- data/lib/deplate/input/deplate.rb +1 -1
- data/lib/deplate/input/play.rb +208 -0
- data/lib/deplate/input/rdoc.rb +37 -15
- data/lib/deplate/input/template.rb +6 -11
- data/lib/deplate/lib/Makefile.config +53 -4
- data/lib/deplate/lib/html/parbreak +3 -0
- data/lib/deplate/lib/javascript/StepwiseNextPage.js +8 -0
- data/lib/deplate/lib/javascript/StepwiseNextPage_confirm.js +8 -0
- data/lib/deplate/lib/latex/deplate.sty +36 -0
- data/lib/deplate/lib/latex/parbreak +6 -0
- data/lib/deplate/lib/php/page-comment.inc.php +5 -5
- data/lib/deplate/lib/plain/parbreak +6 -0
- data/lib/deplate/locale/de.latin1 +87 -15
- data/lib/deplate/locale/de.latin1_data +60 -0
- data/lib/deplate/locale/en.latin1_data +46 -0
- data/lib/deplate/locale/fr.latin1_data +74 -0
- data/lib/deplate/locale/ru.koi8-r_data +63 -0
- data/lib/deplate/locale/{zh_cn.gb2312 → zh_CN.GB2312} +0 -0
- data/lib/deplate/macros.rb +106 -32
- data/lib/deplate/messages.rb +22 -8
- data/lib/deplate/metadata.rb +1 -1
- data/lib/deplate/metadata/marshal.rb +1 -1
- data/lib/deplate/metadata/xml.rb +1 -1
- data/lib/deplate/metadata/yaml.rb +1 -1
- data/lib/deplate/mod/anyword.rb +4 -4
- data/lib/deplate/mod/babelfish.rb +1 -1
- data/lib/deplate/mod/code-gvim.rb +14 -8
- data/lib/deplate/mod/code-gvim71.rb +52 -0
- data/lib/deplate/mod/code-highlight.rb +35 -19
- data/lib/deplate/mod/colored-log.rb +1 -1
- data/lib/deplate/mod/endnotes.rb +1 -1
- data/lib/deplate/mod/guesslanguage.rb +75 -0
- data/lib/deplate/mod/html-asciimath.rb +1 -1
- data/lib/deplate/mod/html-deplate-button.rb +1 -1
- data/lib/deplate/mod/html-headings-navbar.rb +1 -1
- data/lib/deplate/mod/html-highstep.rb +43 -0
- data/lib/deplate/mod/html-jsmath.rb +1 -1
- data/lib/deplate/mod/html-obfuscate-email.rb +1 -1
- data/lib/deplate/mod/html-sidebar.rb +1 -1
- data/lib/deplate/mod/iconv.rb +1 -1
- data/lib/deplate/mod/imgurl.rb +1 -1
- data/lib/deplate/mod/inlatex-compound.rb +1 -1
- data/lib/deplate/mod/koma.rb +4 -4
- data/lib/deplate/mod/{de.rb → lang-de.rb} +1 -1
- data/lib/deplate/mod/{en.rb → lang-en.rb} +1 -1
- data/lib/deplate/mod/{ru_koi8-r.rb → lang-ru-koi8-r.rb} +1 -1
- data/lib/deplate/mod/lang-ru.rb +9 -0
- data/lib/deplate/mod/{zh-cn-autospace.rb → lang-zh_CN-autospace.rb} +3 -3
- data/lib/deplate/mod/{zh-cn.rb → lang-zh_CN.rb} +8 -8
- data/lib/deplate/mod/latex-emph-table-head.rb +1 -1
- data/lib/deplate/mod/latex-styles.rb +6 -6
- data/lib/deplate/mod/latex-verbatim-small.rb +1 -1
- data/lib/deplate/mod/linkmap.rb +128 -0
- data/lib/deplate/mod/makefile.rb +23 -22
- data/lib/deplate/mod/mark-external-urls.rb +13 -7
- data/lib/deplate/mod/markup-1-warn.rb +1 -1
- data/lib/deplate/mod/markup-1.rb +1 -1
- data/lib/deplate/mod/navbar-png.rb +5 -4
- data/lib/deplate/mod/noindent.rb +1 -1
- data/lib/deplate/mod/numpara.rb +1 -1
- data/lib/deplate/mod/particle-math.rb +1 -1
- data/lib/deplate/mod/php-extra.rb +1 -1
- data/lib/deplate/mod/pstoedit.rb +1 -1
- data/lib/deplate/mod/recode.rb +1 -1
- data/lib/deplate/mod/smart-dash.rb +1 -1
- data/lib/deplate/mod/smiley.rb +1 -1
- data/lib/deplate/mod/soffice.rb +1 -1
- data/lib/deplate/mod/symbols-latin1.rb +1 -1
- data/lib/deplate/mod/symbols-od-utf-8.rb +1 -1
- data/lib/deplate/mod/symbols-plain.rb +1 -1
- data/lib/deplate/mod/symbols-sgml.rb +1 -1
- data/lib/deplate/mod/symbols-utf-8.rb +1 -1
- data/lib/deplate/mod/symbols-xml.rb +1 -1
- data/lib/deplate/mod/syntax-region-alt.rb +1 -1
- data/lib/deplate/mod/utf8.rb +1 -1
- data/lib/deplate/mod/validate-html.rb +1 -1
- data/lib/deplate/mod/xmlrpc.rb +37 -36
- data/lib/deplate/nukumi2.rb +4 -4
- data/lib/deplate/once-method.rb +1 -1
- data/lib/deplate/output.rb +12 -4
- data/lib/deplate/particles.rb +52 -22
- data/lib/deplate/regions.rb +160 -90
- data/lib/deplate/skeletons.rb +4 -3
- data/lib/deplate/structured.rb +19 -13
- data/lib/deplate/template.rb +17 -9
- data/lib/deplate/templates/html-doc.html +8 -11
- data/lib/deplate/templates/html-tabbar-right.html +1 -1
- data/lib/deplate/templates/html-tabbar-top.html +3 -3
- data/lib/deplate/variables.rb +25 -9
- data/lib/deplate/wiki-markup.rb +14 -3
- data/lib/deplate/xml.rb +3 -4
- data/lib/deplate/{zh-cn.rb → zh_CN.rb} +16 -16
- data/man/man1/deplate.1 +80 -65
- metadata +72 -48
- data/lib/deplate/mod/fr.rb +0 -46
data/lib/deplate/fmt/htmlsite.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# htmlsite.rb
|
|
2
|
-
# @Author: Thomas Link (
|
|
2
|
+
# @Author: Thomas Link (micathom AT gmail com)
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
5
|
# @Created: 17-M�r-2004.
|
|
6
|
-
# @Last Change:
|
|
7
|
-
# @Revision: 0.
|
|
6
|
+
# @Last Change: 2007-09-28.
|
|
7
|
+
# @Revision: 0.1026
|
|
8
8
|
|
|
9
9
|
require "deplate/fmt/html"
|
|
10
10
|
|
|
@@ -79,8 +79,12 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
|
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
def format_heading(invoker)
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
if invoker.is_top_heading?
|
|
83
|
+
output_at(:body, :inner_body_end, %{</div>\n})
|
|
84
|
+
[super, %{<div class="pagebody">\n}].join
|
|
85
|
+
else
|
|
86
|
+
super
|
|
87
|
+
end
|
|
84
88
|
end
|
|
85
89
|
|
|
86
90
|
|
|
@@ -197,7 +201,7 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
|
|
|
197
201
|
urlp, prv = navbar_button_prev(nil, nil, idx, type, idx > @deplate.home_index)
|
|
198
202
|
url, home = navbar_button_home(nil, nil, idx, type, idx > @deplate.home_index)
|
|
199
203
|
urln, nxt = navbar_button_next(nil, nil, idx, type, idx < @deplate.top_heading_idx)
|
|
200
|
-
|
|
204
|
+
|
|
201
205
|
tabbar = []
|
|
202
206
|
tabbar << invoke_service('navigation_keys', {'next' => urln}) if args['nextKey']
|
|
203
207
|
# tabbar << %{<#{tagsl0} width="#{width}" class="#{style}" summary="Navigation bar">} if tagsl0
|
|
@@ -210,7 +214,7 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
|
|
|
210
214
|
c = htmlsite_tabbar_accum_tags(tagsl2, s, false)
|
|
211
215
|
if @variables['tabBarButtons']
|
|
212
216
|
buttons = []
|
|
213
|
-
for b in @variables['tabBarButtons']
|
|
217
|
+
for b in Deplate::Core.split_list(@variables['tabBarButtons'], ',', '; ')
|
|
214
218
|
case b
|
|
215
219
|
when 'home', 'h'
|
|
216
220
|
buttons << home
|
|
@@ -276,14 +280,20 @@ class Deplate::Formatter::HTML_Site < Deplate::Formatter::HTML
|
|
|
276
280
|
i = invoke_service('progressPercent')
|
|
277
281
|
tabbar << [o, spacer, pb, i, c].compact.join
|
|
278
282
|
end
|
|
279
|
-
|
|
283
|
+
|
|
284
|
+
if (about = (args['about'] || @variables['tabBarAbout']))
|
|
285
|
+
title = @deplate.msg('About this page')
|
|
286
|
+
html = %{<a class="tabBarAbout tabBarEntry" href="#{about}">#{title}</a>}
|
|
287
|
+
tabbar << tabbar_entry(html, tagsl2, "#{style}Inactive #{style}About", tabsize)
|
|
288
|
+
end
|
|
289
|
+
|
|
280
290
|
tabbar << htmlsite_tabbar_accum_tags(tagsl1, style, false)
|
|
281
291
|
tabbar << %{</#{tagsl0}>} if tagsl0
|
|
282
292
|
return tabbar.compact.join("\n")
|
|
283
293
|
end
|
|
284
294
|
|
|
285
295
|
def htmlsite_progress_bar(args, horizontal)
|
|
286
|
-
idx = @deplate.output_index
|
|
296
|
+
idx = @deplate.output_index || 0
|
|
287
297
|
percent = 100 * idx / @deplate.top_heading_idx
|
|
288
298
|
anti = 100 - percent
|
|
289
299
|
all = percent + anti
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# latex-dramatist.rb
|
|
2
|
+
# @Last Change: 2007-09-30.
|
|
3
|
+
# Author:: Thomas Link (micathom AT gmail com)
|
|
4
|
+
# License:: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
|
+
# Created:: 2007-08-09.
|
|
6
|
+
#
|
|
7
|
+
# = Description
|
|
8
|
+
# = Usage
|
|
9
|
+
# = TODO
|
|
10
|
+
# = CHANGES
|
|
11
|
+
|
|
12
|
+
require 'deplate/fmt/latex.rb'
|
|
13
|
+
|
|
14
|
+
class Deplate::Formatter::LaTeX_Dramatist < Deplate::Formatter::LaTeX
|
|
15
|
+
self.myname = 'latex-dramatist'
|
|
16
|
+
self.rx = /(la)?tex(-dramatist)?/i
|
|
17
|
+
self.related = ['latex']
|
|
18
|
+
|
|
19
|
+
self.latexDocClass = 'book'
|
|
20
|
+
# self.latexVariables = ['11pt', 'a4paper']
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def formatter_initialize_dramatist
|
|
24
|
+
@ignored_styles << /^play/
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def prepare_headings
|
|
28
|
+
@headings = ['Scene']
|
|
29
|
+
@headings0 = ['scene']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def prepare_dramatist
|
|
33
|
+
add_package('dramatist')
|
|
34
|
+
# output_at(:pre, :body_beg, %{\\pagestyle{myheadings}})
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# +++
|
|
38
|
+
def format_heading(invoker, level=nil, elt=nil, args=nil)
|
|
39
|
+
# elt ||= invoker.elt
|
|
40
|
+
# if elt.empty?
|
|
41
|
+
args ||= invoker.args
|
|
42
|
+
level ||= invoker.level
|
|
43
|
+
hd = @headings0[level - 1]
|
|
44
|
+
mod = heading_mod(args)
|
|
45
|
+
cap = heading_caption(invoker)
|
|
46
|
+
labels = invoker && format_label(invoker, :string)
|
|
47
|
+
join_blocks(["\n\\#{hd}#{mod}#{cap}{}", labels])
|
|
48
|
+
# else
|
|
49
|
+
# super
|
|
50
|
+
# end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
# Open stage directions.
|
|
55
|
+
# \StageDir{...}
|
|
56
|
+
def format_paragraph(invoker)
|
|
57
|
+
if invoker.args['plain']
|
|
58
|
+
super
|
|
59
|
+
else
|
|
60
|
+
join_blocks([wrap_text("\\StageDir{%s}" % invoker.elt), ""])
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def format_CAST(invoker)
|
|
66
|
+
return '\\DramPer{}'
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def format_ACT(invoker)
|
|
71
|
+
elt = invoker.elt
|
|
72
|
+
if elt.empty?
|
|
73
|
+
return '\\act{}'
|
|
74
|
+
else
|
|
75
|
+
return '\\Act{%s}' % elt
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# * Unordered -> stage directions or cast group
|
|
80
|
+
# * Descriptions -> dialog or cast
|
|
81
|
+
#
|
|
82
|
+
# Cast list:
|
|
83
|
+
# \Character[NAME]{Name}{name}
|
|
84
|
+
# \begin{CharacterGroup}{NAME}
|
|
85
|
+
# \GCharacter[NAME]{Name}{name}
|
|
86
|
+
# ...
|
|
87
|
+
# \end{CharacterGroup}
|
|
88
|
+
# \DramPer
|
|
89
|
+
#
|
|
90
|
+
# Dialog:
|
|
91
|
+
# \namespeaks \direct{...} ...
|
|
92
|
+
def format_list_item(invoker, type, level, item, args={})
|
|
93
|
+
indent = format_indent(level, true)
|
|
94
|
+
ctag = list_wide? ? '' : :empty
|
|
95
|
+
explv = list_item_explicit_value(item)
|
|
96
|
+
if explv
|
|
97
|
+
explv = %{[#{explv}]}
|
|
98
|
+
end
|
|
99
|
+
case type
|
|
100
|
+
when 'Itemize'
|
|
101
|
+
if is_cast?(invoker)
|
|
102
|
+
return wrap_text("#{indent}\\begin{CharacterGroup}{#{item.body}}", :indent => " "), "#{indent}\\end{CharacterGroup}"
|
|
103
|
+
else
|
|
104
|
+
return wrap_text("#{indent}\\StageDir{#{item.body}}", :indent => " "), ctag
|
|
105
|
+
end
|
|
106
|
+
when 'Description'
|
|
107
|
+
if is_cast?(invoker)
|
|
108
|
+
full_name = [item.item.upcase, item.body].compact.join(', ')
|
|
109
|
+
display_name = item.item
|
|
110
|
+
tex_name = speaker(item.item)
|
|
111
|
+
if level > 1
|
|
112
|
+
char = '%s\\GCharacter{%s}{%s}{%s}'
|
|
113
|
+
full_name << ','
|
|
114
|
+
else
|
|
115
|
+
char = '%s\\Character[%s]{%s}{%s}'
|
|
116
|
+
full_name << '.'
|
|
117
|
+
end
|
|
118
|
+
return wrap_text(char % [indent, full_name, display_name, tex_name], :indent => " "), ctag
|
|
119
|
+
else
|
|
120
|
+
speaker = item.item.sub(/^(\S+)/) {|t| speaker($1) + 'speaks'}
|
|
121
|
+
return wrap_text("#{indent}\\#{speaker} #{item.body}", :indent => " "), ctag
|
|
122
|
+
end
|
|
123
|
+
else
|
|
124
|
+
super
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def is_cast?(invoker)
|
|
130
|
+
return invoker.args['cast'] || invoker.tagged_as?('cast')
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def speaker(name)
|
|
135
|
+
name.downcase
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def format_list_env(invoker, type, level, what, subtype=nil)
|
|
140
|
+
indent = format_indent(level)
|
|
141
|
+
if is_cast?(invoker)
|
|
142
|
+
return ''
|
|
143
|
+
else
|
|
144
|
+
case what
|
|
145
|
+
when :open
|
|
146
|
+
w = "begin"
|
|
147
|
+
if list_wide?
|
|
148
|
+
pre = "\n#{indent}"
|
|
149
|
+
post = "\n"
|
|
150
|
+
else
|
|
151
|
+
pre = indent
|
|
152
|
+
post = ""
|
|
153
|
+
end
|
|
154
|
+
when :close
|
|
155
|
+
w = "end"
|
|
156
|
+
pre = indent
|
|
157
|
+
post = ""
|
|
158
|
+
end
|
|
159
|
+
if level == 0 and type == 'Description' and !invoker.args['plain']
|
|
160
|
+
"#{pre}\\#{w}{drama}#{post}"
|
|
161
|
+
else
|
|
162
|
+
''
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
# Stage direction
|
|
169
|
+
# \direct{...}
|
|
170
|
+
def format_direct(invoker, text=nil)
|
|
171
|
+
"\\direct{%s}" % (text || invoker.elt || invoker.text)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
end
|
|
175
|
+
|
data/lib/deplate/fmt/latex.rb
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# fmt-latex.rb
|
|
2
|
-
# @Author: Thomas Link (
|
|
2
|
+
# @Author: Thomas Link (micathom AT gmail com)
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
|
5
5
|
# @Created: 17-M�r-2004.
|
|
6
|
-
# @Last Change:
|
|
7
|
-
# @Revision: 0.
|
|
6
|
+
# @Last Change: 2007-09-30.
|
|
7
|
+
# @Revision: 0.2110
|
|
8
8
|
|
|
9
9
|
require "deplate/formatter"
|
|
10
10
|
|
|
@@ -31,8 +31,8 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
31
31
|
:format_anchor,
|
|
32
32
|
]
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
class_attribute :latexDocClass, 'article'
|
|
35
|
+
class_attribute :latexVariables, ['11pt', 'a4paper']
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
################################################ Setup {{{1
|
|
@@ -59,26 +59,36 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
59
59
|
escaped ? "~" : " "
|
|
60
60
|
end,
|
|
61
61
|
}
|
|
62
|
+
@encodings = {
|
|
63
|
+
'utf-8' => 'utf8',
|
|
64
|
+
}
|
|
62
65
|
@packages = {}
|
|
63
66
|
@consumed_preludes = []
|
|
64
67
|
build_plain_text_rx
|
|
68
|
+
ignore_styles
|
|
65
69
|
end
|
|
66
70
|
|
|
67
71
|
def prepare
|
|
68
|
-
@document_class = @deplate.variables['class'] ||
|
|
72
|
+
@document_class = @deplate.variables['class'] || self.class.latexDocClass
|
|
73
|
+
ignore_styles
|
|
69
74
|
|
|
70
75
|
lco = @deplate.variables['classOptions']
|
|
71
|
-
lco = lco ? lco.strip
|
|
76
|
+
lco = lco ? Deplate::Core.split_list(lco.strip, ',', '; ') : self.class.latexVariables
|
|
72
77
|
lang = @deplate.options.messages.prop('lang', self)
|
|
78
|
+
# p "DBG", lang
|
|
73
79
|
if lang
|
|
74
80
|
lco << lang
|
|
75
81
|
end
|
|
76
82
|
|
|
77
|
-
div = @deplate.variables['DIV']
|
|
83
|
+
div = @deplate.variables['DIV'] || @deplate.variables['typeareaDIV']
|
|
78
84
|
if div
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
add_package("typearea", "DIV#{div}")
|
|
86
|
+
else
|
|
87
|
+
div = @deplate.variables['DIV_'] || @deplate.variables['typeareaDIV_']
|
|
88
|
+
if div
|
|
89
|
+
add_package('typearea')
|
|
90
|
+
lco.unshift("DIV#{div}")
|
|
91
|
+
end
|
|
82
92
|
end
|
|
83
93
|
|
|
84
94
|
lco = lco.uniq.join(',')
|
|
@@ -103,10 +113,21 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
103
113
|
|
|
104
114
|
output_at(:post, :body_end, "\\end{document}")
|
|
105
115
|
end
|
|
106
|
-
|
|
116
|
+
|
|
117
|
+
def ignore_styles
|
|
118
|
+
@ignored_styles ||= []
|
|
119
|
+
@ignored_styles += Deplate::Core.split_list(@deplate.variables['ignoredStyles']).map {|s| Regexp.new(s)}
|
|
120
|
+
end
|
|
121
|
+
|
|
107
122
|
def prepare_headings
|
|
108
|
-
case @document_class
|
|
109
|
-
|
|
123
|
+
as_book = case @document_class
|
|
124
|
+
when 'book', 'memoir', 'scrbook', 'report', 'scrreprt'
|
|
125
|
+
true
|
|
126
|
+
else
|
|
127
|
+
bc = @deplate.variables['bookClass']
|
|
128
|
+
bc == true || Deplate::Core.split_list(bc).include?(@document_class)
|
|
129
|
+
end
|
|
130
|
+
if as_book
|
|
110
131
|
@headings = ['chapter', 'section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
|
|
111
132
|
else
|
|
112
133
|
@headings = ['section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
|
|
@@ -119,15 +140,16 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
119
140
|
# add_package('ulem')
|
|
120
141
|
add_package('deplate')
|
|
121
142
|
pkg = 'deplate.sty'
|
|
122
|
-
fn = @deplate.find_in_lib(pkg, :pwd => true)
|
|
123
143
|
dir = File.dirname(output_destination)
|
|
124
144
|
dest = File.join(dir, pkg)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
145
|
+
unless File.exist?(dest)
|
|
146
|
+
fn = @deplate.find_in_lib(pkg, :pwd => true)
|
|
147
|
+
if fn
|
|
148
|
+
Deplate::Template.copy(@deplate, fn, dest)
|
|
149
|
+
else
|
|
150
|
+
log(['Library file not found', pkg], :error)
|
|
151
|
+
end
|
|
152
|
+
end
|
|
131
153
|
@deplate.variables[:deplate_sty] = true
|
|
132
154
|
end
|
|
133
155
|
end
|
|
@@ -140,8 +162,8 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
140
162
|
value = wrap_inject(value, s,
|
|
141
163
|
:spre => '\\%sSpan{',
|
|
142
164
|
:post => '}') do |s, pre, post|
|
|
143
|
-
|
|
144
|
-
|
|
165
|
+
ltx = '%s}' % pre.strip
|
|
166
|
+
@deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
|
|
145
167
|
end
|
|
146
168
|
# else
|
|
147
169
|
# value = wrap_accumulate(value, args[:styles]) do |s, ltx|
|
|
@@ -174,33 +196,42 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
174
196
|
value
|
|
175
197
|
end
|
|
176
198
|
|
|
177
|
-
def preferred_style_markup(invoker, what, style)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
end
|
|
181
|
-
private :preferred_style_markup
|
|
199
|
+
# def preferred_style_markup(invoker, what, style)
|
|
200
|
+
# what = "#{what}Style"
|
|
201
|
+
# (invoker.args[what] || @deplate.variables[what]) == style
|
|
202
|
+
# end
|
|
203
|
+
# private :preferred_style_markup
|
|
182
204
|
|
|
183
205
|
def wrap_inject(text, styles, args={})
|
|
184
206
|
styles.inject(text) do |v, s|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
207
|
+
if @ignored_styles.any? {|i| s =~ i}
|
|
208
|
+
v
|
|
209
|
+
else
|
|
210
|
+
s = clean_style_name(s)
|
|
211
|
+
pfx = args[:pre]
|
|
212
|
+
unless pfx
|
|
213
|
+
pfx = args[:spre] % s
|
|
214
|
+
end
|
|
215
|
+
sfx = args[:post]
|
|
216
|
+
unless sfx
|
|
217
|
+
sfx = args[:spost] % s
|
|
218
|
+
end
|
|
219
|
+
if block_given?
|
|
220
|
+
yield(s, pfx, sfx)
|
|
221
|
+
end
|
|
222
|
+
[pfx, v, sfx].join
|
|
195
223
|
end
|
|
196
|
-
[pfx, v, sfx].join
|
|
197
224
|
end
|
|
198
225
|
end
|
|
199
226
|
private :wrap_inject
|
|
200
227
|
|
|
228
|
+
def clean_style_name(style)
|
|
229
|
+
style.gsub(/\W(.)/) {|t| $1.capitalize}
|
|
230
|
+
end
|
|
231
|
+
|
|
201
232
|
def wrap_accumulate(text, styles, template='\\%sStyle{}')
|
|
202
233
|
styles = styles.collect do |s|
|
|
203
|
-
l = template % s
|
|
234
|
+
l = template % clean_style_name(s)
|
|
204
235
|
if block_given?
|
|
205
236
|
yield(s, l)
|
|
206
237
|
end
|
|
@@ -244,7 +275,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
244
275
|
if m
|
|
245
276
|
pkg = m[4]
|
|
246
277
|
if m[3]
|
|
247
|
-
add_package(pkg, m[3].split(
|
|
278
|
+
add_package(pkg, m[3].split(/,/))
|
|
248
279
|
else
|
|
249
280
|
add_package(pkg)
|
|
250
281
|
end
|
|
@@ -278,7 +309,12 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
278
309
|
cat = item.opts[:category]
|
|
279
310
|
due = item.opts[:due]
|
|
280
311
|
due = " (#{due})" if due
|
|
281
|
-
|
|
312
|
+
if cat
|
|
313
|
+
task = plain_text([cat, pri, due].join)
|
|
314
|
+
lab = "\\task#{cat}{#{task}}"
|
|
315
|
+
else
|
|
316
|
+
lab = plain_text([pri, due].join)
|
|
317
|
+
end
|
|
282
318
|
body = item.body
|
|
283
319
|
if item.opts[:done]
|
|
284
320
|
lab = "\\taskdone{#{lab}}"
|
|
@@ -413,7 +449,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
413
449
|
def include_image(invoker, file, args, inline=false)
|
|
414
450
|
file = args['file'] if args['file']
|
|
415
451
|
if file =~ Deplate::HyperLink::Url.rx
|
|
416
|
-
Deplate::Core.log([%{
|
|
452
|
+
Deplate::Core.log([%{Cannot include remote images in current document}, file], :error)
|
|
417
453
|
file = File.basename(file)
|
|
418
454
|
end
|
|
419
455
|
ff = use_image_filename(file, args)
|
|
@@ -510,34 +546,38 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
510
546
|
end
|
|
511
547
|
end
|
|
512
548
|
|
|
549
|
+
def include_package?(pkg)
|
|
550
|
+
@packages.include?(pkg)
|
|
551
|
+
end
|
|
552
|
+
|
|
513
553
|
|
|
514
554
|
################################################ Elements {{{1
|
|
515
555
|
def format_note(invoker)
|
|
516
556
|
elt = invoker.elt
|
|
517
557
|
marker = invoker.marker
|
|
518
558
|
case marker
|
|
519
|
-
when
|
|
520
|
-
note =
|
|
521
|
-
when
|
|
522
|
-
note =
|
|
523
|
-
when
|
|
524
|
-
note =
|
|
525
|
-
when
|
|
526
|
-
note =
|
|
559
|
+
when '#'
|
|
560
|
+
note = 'Note'
|
|
561
|
+
when '+'
|
|
562
|
+
note = 'Elaborate'
|
|
563
|
+
when '?'
|
|
564
|
+
note = 'Discussion'
|
|
565
|
+
when '!'
|
|
566
|
+
note = 'Important'
|
|
527
567
|
else
|
|
528
|
-
invoker.log([
|
|
529
|
-
note =
|
|
568
|
+
invoker.log(['Unknown marker', marker], :error)
|
|
569
|
+
note = 'Note'
|
|
530
570
|
end
|
|
531
|
-
note =
|
|
532
|
-
size = @deplate.variables[
|
|
533
|
-
|
|
571
|
+
note = '%s: ' % @deplate.msg(note)
|
|
572
|
+
size = @deplate.variables['noteSize'] || 'footnotesize'
|
|
573
|
+
wrap_text('\\protect\\marginpar{\\%s{}%s%s}' % [size, note, elt])
|
|
534
574
|
end
|
|
535
575
|
|
|
536
576
|
def format_table(invoker)
|
|
537
577
|
args = invoker.args
|
|
538
578
|
elt = invoker.elt
|
|
539
579
|
caption = invoker.caption
|
|
540
|
-
capAbove = caption && (caption.args && caption.args.include?(
|
|
580
|
+
capAbove = caption && (caption.args && caption.args.include?('above') || @deplate.variables['floatCaptionAbove'])
|
|
541
581
|
indent = format_indent(1)
|
|
542
582
|
dblindent = format_indent(2)
|
|
543
583
|
mode = :normal
|
|
@@ -591,31 +631,34 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
591
631
|
level ||= invoker.level
|
|
592
632
|
elt ||= invoker.elt
|
|
593
633
|
if invoker
|
|
594
|
-
caption = invoker.caption
|
|
595
634
|
invoker.label << args[:id]
|
|
596
635
|
labels = format_label(invoker, :string)
|
|
597
636
|
else
|
|
598
|
-
caption = nil
|
|
599
637
|
labels = nil
|
|
600
638
|
end
|
|
601
|
-
if caption
|
|
602
|
-
cap = "[#{caption.elt}]"
|
|
603
|
-
else
|
|
604
|
-
cap = ""
|
|
605
|
-
end
|
|
606
639
|
hd = @headings[level - 1]
|
|
607
|
-
if args["noList"]
|
|
608
|
-
mod = "*"
|
|
609
|
-
else
|
|
610
|
-
mode = ""
|
|
611
|
-
end
|
|
612
640
|
if hd
|
|
641
|
+
cap = heading_caption(invoker)
|
|
642
|
+
mod = heading_mod(args)
|
|
613
643
|
join_blocks(["\n\\#{hd}#{mod}#{cap}{#{elt}}", labels])
|
|
614
644
|
else
|
|
615
645
|
"\n#{elt}#{labels}: "
|
|
616
646
|
end
|
|
617
647
|
end
|
|
618
648
|
|
|
649
|
+
def heading_mod(args)
|
|
650
|
+
args["noList"] || args["plain"] ? "*" : ""
|
|
651
|
+
end
|
|
652
|
+
|
|
653
|
+
def heading_caption(invoker)
|
|
654
|
+
caption = invoker && invoker.caption
|
|
655
|
+
if caption
|
|
656
|
+
return "[#{caption.elt}]"
|
|
657
|
+
else
|
|
658
|
+
return ""
|
|
659
|
+
end
|
|
660
|
+
end
|
|
661
|
+
|
|
619
662
|
def format_list(invoker)
|
|
620
663
|
add_package("hyperref")
|
|
621
664
|
acc = list_wide? ? [""] : []
|
|
@@ -782,7 +825,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
782
825
|
# dest = "file://" + File.expand_path(dest)
|
|
783
826
|
# end
|
|
784
827
|
dest = Deplate::HyperLink.url_anchor(dest, anchor)
|
|
785
|
-
dest.gsub!(/([
|
|
828
|
+
dest.gsub!(/([&%#])/, "\\\\\\1")
|
|
786
829
|
"\\href{%s}{%s}" % [dest, name]
|
|
787
830
|
end
|
|
788
831
|
|
|
@@ -898,7 +941,11 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
898
941
|
end
|
|
899
942
|
|
|
900
943
|
def format_linebreak(invoker)
|
|
901
|
-
|
|
944
|
+
if invoker.args['inline']
|
|
945
|
+
return '\\\\'
|
|
946
|
+
else
|
|
947
|
+
return '\\newline{}'
|
|
948
|
+
end
|
|
902
949
|
end
|
|
903
950
|
|
|
904
951
|
# Currently assumes the use of natbib
|
|
@@ -906,12 +953,15 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
906
953
|
args = invoker.args
|
|
907
954
|
elt = invoker.elt
|
|
908
955
|
add_package('natbib', 'round')
|
|
909
|
-
n
|
|
910
|
-
p
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
956
|
+
n = args['n']
|
|
957
|
+
p = args['p']
|
|
958
|
+
ip = args['ip']
|
|
959
|
+
np = ip || args['np']
|
|
960
|
+
y = args['y']
|
|
961
|
+
sep = args['sep'] || (np ? '' : '\ ')
|
|
962
|
+
sep = @deplate.parse_and_format(invoker.container, sep) unless sep.empty?
|
|
963
|
+
c = elt
|
|
964
|
+
o = []
|
|
915
965
|
o << "[#{n}]" if n
|
|
916
966
|
if p
|
|
917
967
|
p = @deplate.parse_and_format(invoker.container, "#{@deplate.msg('p.\\ ')}#{p}")
|
|
@@ -921,11 +971,13 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
|
|
|
921
971
|
end
|
|
922
972
|
o = o.join unless o.empty?
|
|
923
973
|
if np
|
|
924
|
-
cmd = if y then
|
|
974
|
+
cmd = if y then 'citeyear' else 'citealp' end
|
|
975
|
+
elsif ip
|
|
976
|
+
cmd = if y then 'citeyear' else 'citet' end
|
|
925
977
|
else
|
|
926
|
-
cmd = if y then
|
|
978
|
+
cmd = if y then 'citeyearpar' else 'citep' end
|
|
927
979
|
end
|
|
928
|
-
return "
|
|
980
|
+
return "#{sep}\\#{cmd}#{o}{#{c.join(",")}}"
|
|
929
981
|
end
|
|
930
982
|
|
|
931
983
|
def format_subscript(invoker)
|