deplate 0.7.3 → 0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (160) hide show
  1. data/AUTHORS.TXT +3 -0
  2. data/CHANGES.TXT +248 -175
  3. data/LICENSE.TXT +0 -0
  4. data/NEWS.TXT +28 -24
  5. data/README.TXT +0 -0
  6. data/TODO.TXT +174 -88
  7. data/VERSION.TXT +1 -1
  8. data/bin/deplate +0 -0
  9. data/bin/deplate.bat +0 -0
  10. data/etc/deplate.ini +91 -3
  11. data/lib/action_view/helpers/deplate.rb +45 -0
  12. data/lib/deplate.rb +6 -1
  13. data/lib/deplate/abstract-class.rb +0 -0
  14. data/lib/deplate/bib.rb +576 -0
  15. data/lib/deplate/builtin.rb +0 -0
  16. data/lib/deplate/cache.rb +55 -5
  17. data/lib/deplate/commands.rb +346 -183
  18. data/lib/deplate/common.rb +209 -48
  19. data/lib/deplate/converter.rb +12 -6
  20. data/lib/deplate/core.rb +777 -378
  21. data/lib/deplate/counters.rb +254 -0
  22. data/lib/deplate/css/article.css +4 -3
  23. data/lib/deplate/css/deplate.css +121 -5
  24. data/lib/deplate/css/heading-navbar.css +0 -0
  25. data/lib/deplate/css/layout-deplate-print.css +0 -0
  26. data/lib/deplate/css/layout-deplate.css +0 -0
  27. data/lib/deplate/css/sans-serif.css +0 -0
  28. data/lib/deplate/css/serif-e.css +0 -0
  29. data/lib/deplate/css/serif-rel.css +0 -0
  30. data/lib/deplate/css/serif.css +9 -3
  31. data/lib/deplate/css/slides.css +0 -0
  32. data/lib/deplate/css/tabbar-left.css +0 -0
  33. data/lib/deplate/css/tabbar-right-ie.css +3 -9
  34. data/lib/deplate/css/tabbar-right.css +51 -18
  35. data/lib/deplate/css/tabbar-top.css +7 -1
  36. data/lib/deplate/css/tabbar.css +0 -0
  37. data/lib/deplate/css/text-sans-serif.css +0 -0
  38. data/lib/deplate/css/text-serif.css +0 -0
  39. data/lib/deplate/define.rb +183 -177
  40. data/lib/deplate/deplate-string.rb +82 -0
  41. data/lib/deplate/docbook.rb +236 -128
  42. data/lib/deplate/elements.rb +584 -417
  43. data/lib/deplate/etc.rb +163 -101
  44. data/lib/deplate/external.rb +42 -11
  45. data/lib/deplate/fmt/dbk-article-4.1.2.rb +0 -0
  46. data/lib/deplate/fmt/dbk-article.rb +0 -0
  47. data/lib/deplate/fmt/dbk-book.rb +0 -0
  48. data/lib/deplate/fmt/dbk-ref.rb +3 -3
  49. data/lib/deplate/fmt/dbk-slides.rb +0 -0
  50. data/lib/deplate/fmt/dbk-snippet.rb +0 -0
  51. data/lib/deplate/fmt/html-snippet.rb +0 -0
  52. data/lib/deplate/fmt/html.rb +783 -550
  53. data/lib/deplate/fmt/htmlsite.rb +192 -199
  54. data/lib/deplate/fmt/htmlslides.rb +0 -0
  55. data/lib/deplate/fmt/htmlwebsite.rb +3 -3
  56. data/lib/deplate/fmt/latex-snippet.rb +0 -0
  57. data/lib/deplate/fmt/latex.rb +242 -83
  58. data/lib/deplate/fmt/null.rb +32 -0
  59. data/lib/deplate/fmt/php.rb +4 -4
  60. data/lib/deplate/fmt/phpsite.rb +6 -5
  61. data/lib/deplate/fmt/plain.rb +160 -106
  62. data/lib/deplate/fmt/template.rb +0 -0
  63. data/lib/deplate/fmt/xhtml10t.rb +0 -0
  64. data/lib/deplate/formatter-snippet.rb +0 -0
  65. data/lib/deplate/formatter.rb +613 -301
  66. data/lib/deplate/input.rb +202 -142
  67. data/lib/deplate/input/deplate-headings.rb +4 -6
  68. data/lib/deplate/input/deplate-restricted.rb +15 -9
  69. data/lib/deplate/input/deplate.rb +2 -4
  70. data/lib/deplate/input/rdoc.rb +39 -38
  71. data/lib/deplate/input/template.rb +0 -0
  72. data/lib/deplate/lib/Makefile.config +29 -0
  73. data/lib/deplate/lib/latex/deplate.sty +54 -0
  74. data/lib/deplate/lib/latex/highlight-extra.sty +0 -0
  75. data/lib/deplate/lib/latex/highlight-typical.sty +0 -0
  76. data/lib/deplate/lib/php/page-comment.inc.php +216 -0
  77. data/lib/deplate/lib/tabmenu.js +0 -0
  78. data/lib/deplate/locale/de.latin1 +155 -17
  79. data/lib/deplate/locale/ru.koi8-r +0 -0
  80. data/lib/deplate/locale/zh_cn.gb2312 +0 -0
  81. data/lib/deplate/macros.rb +133 -82
  82. data/lib/deplate/messages.rb +6 -4
  83. data/lib/deplate/metadata.rb +0 -0
  84. data/lib/deplate/metadata/marshal.rb +0 -0
  85. data/lib/deplate/metadata/xml.rb +0 -0
  86. data/lib/deplate/metadata/yaml.rb +0 -0
  87. data/lib/deplate/mod/anyword.rb +3 -3
  88. data/lib/deplate/mod/babelfish.rb +4 -4
  89. data/lib/deplate/mod/code-gvim.rb +8 -4
  90. data/lib/deplate/mod/code-highlight.rb +3 -3
  91. data/lib/deplate/mod/colored-log.rb +0 -0
  92. data/lib/deplate/mod/de.rb +2 -2
  93. data/lib/deplate/mod/en.rb +0 -0
  94. data/lib/deplate/mod/endnotes.rb +0 -0
  95. data/lib/deplate/mod/fr.rb +0 -0
  96. data/lib/deplate/mod/html-asciimath.rb +0 -0
  97. data/lib/deplate/mod/html-deplate-button.rb +0 -0
  98. data/lib/deplate/mod/html-headings-navbar.rb +5 -13
  99. data/lib/deplate/mod/html-jsmath.rb +39 -0
  100. data/lib/deplate/mod/html-obfuscate-email.rb +3 -3
  101. data/lib/deplate/mod/html-sidebar.rb +0 -0
  102. data/lib/deplate/mod/htmlslides-navbar-fh.rb +3 -3
  103. data/lib/deplate/mod/iconv.rb +0 -0
  104. data/lib/deplate/mod/imgurl.rb +4 -4
  105. data/lib/deplate/mod/inlatex-compound.rb +7 -10
  106. data/lib/deplate/mod/koma.rb +0 -0
  107. data/lib/deplate/mod/latex-emph-table-head.rb +0 -0
  108. data/lib/deplate/mod/latex-styles.rb +7 -4
  109. data/lib/deplate/mod/latex-verbatim-small.rb +0 -0
  110. data/lib/deplate/mod/makefile.rb +23 -7
  111. data/lib/deplate/mod/mark-external-urls.rb +3 -3
  112. data/lib/deplate/mod/markup-1-warn.rb +10 -10
  113. data/lib/deplate/mod/markup-1.rb +0 -0
  114. data/lib/deplate/mod/navbar-png.rb +24 -8
  115. data/lib/deplate/mod/noindent.rb +0 -0
  116. data/lib/deplate/mod/numpara.rb +0 -0
  117. data/lib/deplate/mod/particle-math.rb +4 -4
  118. data/lib/deplate/mod/php-extra.rb +46 -6
  119. data/lib/deplate/mod/pstoedit.rb +0 -0
  120. data/lib/deplate/mod/recode.rb +0 -0
  121. data/lib/deplate/mod/ru_koi8-r.rb +0 -0
  122. data/lib/deplate/mod/smart-dash.rb +26 -0
  123. data/lib/deplate/mod/smiley.rb +69 -7
  124. data/lib/deplate/mod/soffice.rb +0 -0
  125. data/lib/deplate/mod/symbols-latin1.rb +14 -23
  126. data/lib/deplate/mod/symbols-od-utf-8.rb +5 -3
  127. data/lib/deplate/mod/symbols-plain.rb +5 -35
  128. data/lib/deplate/mod/symbols-sgml.rb +8 -9
  129. data/lib/deplate/mod/symbols-utf-8.rb +8 -9
  130. data/lib/deplate/mod/symbols-xml.rb +5 -9
  131. data/lib/deplate/mod/syntax-region-alt.rb +5 -5
  132. data/lib/deplate/mod/utf8.rb +0 -0
  133. data/lib/deplate/mod/validate-html.rb +0 -0
  134. data/lib/deplate/mod/xmlrpc.rb +0 -0
  135. data/lib/deplate/mod/zh-cn-autospace.rb +18 -20
  136. data/lib/deplate/mod/zh-cn.rb +4 -6
  137. data/lib/deplate/nukumi2.rb +71 -0
  138. data/lib/deplate/once-method.rb +0 -0
  139. data/lib/deplate/output.rb +19 -21
  140. data/lib/deplate/particles.rb +178 -116
  141. data/lib/deplate/regions.rb +99 -58
  142. data/lib/deplate/skeletons.rb +122 -0
  143. data/lib/deplate/structured.rb +164 -106
  144. data/lib/deplate/template.rb +67 -43
  145. data/lib/deplate/templates/html-doc.html +0 -0
  146. data/lib/deplate/templates/html-left-tabbar-js.html +0 -0
  147. data/lib/deplate/templates/html-left-tabbar.html +0 -0
  148. data/lib/deplate/templates/html-tabbar-right-pcomments.php +22 -0
  149. data/lib/deplate/templates/html-tabbar-right-step.html +24 -0
  150. data/lib/deplate/templates/html-tabbar-right-table.html +0 -0
  151. data/lib/deplate/templates/html-tabbar-right.html +2 -4
  152. data/lib/deplate/templates/html-tabbar-top.html +0 -9
  153. data/lib/deplate/templates/html-tabbar.html +0 -0
  154. data/lib/deplate/variables.rb +127 -0
  155. data/lib/deplate/wiki-markup.rb +99 -33
  156. data/lib/deplate/xml.rb +18 -18
  157. data/lib/deplate/zh-cn.rb +0 -0
  158. data/lib/ps2ppm.rb +0 -0
  159. data/man/man1/deplate.1 +564 -474
  160. metadata +201 -186
File without changes
@@ -3,8 +3,8 @@
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: 23-Okt-2005.
7
- # @Revision: 0.441
6
+ # @Last Change: 02-Apr-2006.
7
+ # @Revision: 0.442
8
8
 
9
9
  require "deplate/fmt/htmlslides"
10
10
 
@@ -47,7 +47,7 @@ EOF
47
47
  idx, _, _ = navbar_output_index(invoker, first, last)
48
48
  navextra = @deplate.get_clip("navextra")
49
49
  navmenu = [%{<span class="navmenuhead">#{navextra.elt if navextra}</span>} ]
50
- @deplate.each_heading(1) do |section, title|
50
+ @deplate.each_heading(:top) do |section, title|
51
51
  unless section.args["noList"]
52
52
  f = section.output_file_name(:basename => true)
53
53
  v = section.description.gsub(/<\/?[^>]*>/, "")
File without changes
@@ -3,8 +3,8 @@
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: 02-Nov-2005.
7
- # @Revision: 0.1817
6
+ # @Last Change: 05-Jun-2006.
7
+ # @Revision: 0.2042
8
8
 
9
9
  require "deplate/formatter"
10
10
 
@@ -65,26 +65,29 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
65
65
  end
66
66
 
67
67
  def prepare
68
- @document_class = @deplate.variables["class"] || @@latexDocClass
68
+ @document_class = @deplate.variables['class'] || @@latexDocClass
69
69
 
70
- lco = @deplate.variables["classOptions"]
70
+ lco = @deplate.variables['classOptions']
71
71
  lco = lco ? lco.strip.split(/[, ]/) : @@latexVariables
72
72
  lang = @deplate.options.messages.prop('lang', self)
73
73
  if lang
74
74
  lco << lang
75
75
  end
76
- lco = lco.uniq.join(",")
77
76
 
77
+ div = @deplate.variables['DIV']
78
+ if div
79
+ # add_package("typearea", "DIV#{div}")
80
+ add_package('typearea')
81
+ lco.unshift("DIV#{div}")
82
+ end
83
+
84
+ lco = lco.uniq.join(',')
78
85
  output_at(:pre, :doc_def, "\\documentclass[#{lco}]{#{@document_class}}")
79
86
 
80
87
  set_document_encoding
81
88
 
82
- @booktabs = @deplate.variables["useBooktabs"]
83
- add_package("booktabs") if @booktabs
84
-
85
-
86
- div = @deplate.variables["DIV"]
87
- add_package("typearea", "DIV#{div}") if div
89
+ @booktabs = @deplate.variables['useBooktabs']
90
+ add_package('booktabs') if @booktabs
88
91
 
89
92
  lang_cmd = @deplate.options.messages.prop('lang_cmd', self)
90
93
  if lang_cmd
@@ -103,13 +106,112 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
103
106
 
104
107
  def prepare_headings
105
108
  case @document_class
106
- when "book"
107
- @headings = ["chapter", "section", "subsection", "subsubsection", "paragraph", "subparagraph"]
109
+ when 'book'
110
+ @headings = ['chapter', 'section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
108
111
  else
109
- @headings = ["section", "subsection", "subsubsection", "paragraph", "subparagraph"]
112
+ @headings = ['section', 'subsection', 'subsubsection', 'paragraph', 'subparagraph']
113
+ end
114
+ end
115
+
116
+ def initialize_deplate_sty
117
+ unless @deplate.variables[:deplate_sty]
118
+ add_package('color')
119
+ # add_package('ulem')
120
+ add_package('deplate')
121
+ pkg = 'deplate.sty'
122
+ fn = @deplate.find_in_lib(pkg, :pwd => true)
123
+ dir = File.dirname(output_destination)
124
+ dest = File.join(dir, pkg)
125
+ # @deplate.copy_file(fn, dest)
126
+ Deplate::Template.copy(@deplate, fn, dest)
127
+ # if fn
128
+ # lines = File.read(fn) {|io| io.readlines}
129
+ # output_at(:pre, :styles, lines)
130
+ # end
131
+ @deplate.variables[:deplate_sty] = true
132
+ end
133
+ end
134
+
135
+ def wrap_formatted_particle_styles(invoker, value, args)
136
+ s = args[:styles]
137
+ unless s.empty?
138
+ initialize_deplate_sty
139
+ # if preferred_style_markup(invoker, 'particle', 'span')
140
+ value = wrap_inject(value, s,
141
+ :spre => '\\%sSpan{',
142
+ :post => '}') do |s, pre, post|
143
+ ltx = '%s}' % pre.strip
144
+ @deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
145
+ end
146
+ # else
147
+ # value = wrap_accumulate(value, args[:styles]) do |s, ltx|
148
+ # ltx = ltx.strip
149
+ # @deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
150
+ # end
151
+ # end
152
+ end
153
+ value
154
+ end
155
+
156
+ def wrap_formatted_element_styles(invoker, value, args)
157
+ s = args[:styles]
158
+ unless s.empty?
159
+ initialize_deplate_sty
160
+ # if preferred_style_markup(invoker, 'element', 'block')
161
+ value = wrap_inject(value, s,
162
+ :spre => "\\begin{%sBlock}\n",
163
+ :spost => "\\end{%sBlock}\n") do |s, pre, post|
164
+ ltx = '%sBlock' % s.strip
165
+ @deplate.endmessage(ltx, %{You might need to define the #{ltx} environment in deplate.sty.})
166
+ end
167
+ # else
168
+ # value = wrap_accumulate(value, args[:styles]) do |s, ltx|
169
+ # ltx = ltx.strip
170
+ # @deplate.endmessage(ltx, %{You might need to define #{ltx} in deplate.sty.})
171
+ # end
172
+ # end
173
+ end
174
+ value
175
+ end
176
+
177
+ def preferred_style_markup(invoker, what, style)
178
+ what = "#{what}Style"
179
+ (invoker.args[what] || @deplate.variables[what]) == style
180
+ end
181
+ private :preferred_style_markup
182
+
183
+ def wrap_inject(text, styles, args={})
184
+ styles.inject(text) do |v, s|
185
+ pfx = args[:pre]
186
+ unless pfx
187
+ pfx = args[:spre] % s
188
+ end
189
+ sfx = args[:post]
190
+ unless sfx
191
+ sfx = args[:spost] % s
192
+ end
193
+ if block_given?
194
+ yield(s, pfx, sfx)
195
+ end
196
+ [pfx, v, sfx].join
110
197
  end
111
198
  end
199
+ private :wrap_inject
112
200
 
201
+ def wrap_accumulate(text, styles, template='\\%sStyle{}')
202
+ styles = styles.collect do |s|
203
+ l = template % s
204
+ if block_given?
205
+ yield(s, l)
206
+ end
207
+ l
208
+ end
209
+ text.sub(/\A(\s*)(.*?)(\s*)\Z/m) do |m|
210
+ %{#$1{#{styles}#$2}#$3}
211
+ end
212
+ end
213
+ private :wrap_accumulate
214
+
113
215
  def wrap_text(text, args={})
114
216
  args[:check] ||= lambda do |line|
115
217
  mt = /\\verb(.)/.match(line)
@@ -154,7 +256,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
154
256
 
155
257
 
156
258
  ################################################ Lists {{{1
157
- def format_list_item(invoker, type, level, item)
259
+ def format_list_item(invoker, type, level, item, args={})
158
260
  indent = format_indent(level, true)
159
261
  ctag = list_wide? ? '' : :empty
160
262
  explv = list_item_explicit_value(item)
@@ -162,17 +264,36 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
162
264
  explv = %{[#{explv}]}
163
265
  end
164
266
  case type
165
- when "Numbered"
267
+ when "Ordered"
166
268
  return wrap_text("#{indent}\\item#{explv} #{item.body}", :indent => " "), ctag
167
269
  when "Itemize"
168
270
  return wrap_text("#{indent}\\item #{item.body}", :indent => " "), ctag
169
271
  when "Description"
170
272
  return wrap_text("#{indent}\\item[#{item.item}] #{item.body}", :indent => " "), ctag
273
+ when 'Custom'
274
+ t = item.opts[:custom]
275
+ return wrap_text("#{indent}\\#{t}Item{#{item.item}}{#{item.body}}", :indent => " "), ctag
276
+ when 'Task'
277
+ pri = item.opts[:priority]
278
+ cat = item.opts[:category]
279
+ due = item.opts[:due]
280
+ due = " (#{due})" if due
281
+ lab = cat ? "\\task#{cat}{#{cat}#{pri}#{due}}" : "#{cat}#{pri}"
282
+ body = item.body
283
+ if item.opts[:done]
284
+ lab = "\\taskdone{#{lab}}"
285
+ body = "\\taskdone{#{body}}"
286
+ end
287
+ it = "#{indent}\\task{#{lab}}{#{body}}"
288
+ return wrap_text(it, :indent => " "), nil
171
289
  when "Paragraph"
172
290
  fs = list_wide? ? "\n%s\n" : "\n%s"
173
291
  return fs % wrap_text("#{indent}#{item.body}", :indent => " "), nil
292
+ when 'Container'
293
+ fs = list_wide? ? "\n%s\n" : "\n%s"
294
+ return fs % item.body, nil
174
295
  else
175
- raise "Unknown list type: #{item.inspect}"
296
+ invoker.log(['Unknown list type', type], :error)
176
297
  end
177
298
  end
178
299
 
@@ -194,7 +315,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
194
315
  post = ""
195
316
  end
196
317
  case type
197
- when "Numbered"
318
+ when "Ordered"
198
319
  case subtype
199
320
  when "a", "A"
200
321
  return format_list_enumerate_alpha(invoker, what, subtype, w, pre, post)
@@ -203,10 +324,16 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
203
324
  end
204
325
  when "Itemize"
205
326
  return "#{pre}\\#{w}{itemize}#{post}"
327
+ when 'Task'
328
+ initialize_deplate_sty
329
+ return "#{pre}\\#{w}{tasklist}#{post}"
330
+ when 'Custom'
331
+ initialize_deplate_sty
332
+ return "#{pre}\\#{w}{#{subtype}List}#{post}"
206
333
  when "Description"
207
334
  return "#{pre}\\#{w}{description}#{post}"
208
335
  else
209
- raise "Unknown list type: #{self.inspect}"
336
+ invoker.log(['Unknown list type', type], :error)
210
337
  end
211
338
  end
212
339
 
@@ -241,17 +368,17 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
241
368
  caption = invoker.caption
242
369
  acc = []
243
370
  if inline
244
- acc << include_image(elt, args, true)
371
+ acc << include_image(invoker, elt, args, true)
245
372
  else
246
373
  floatPos, alignCmd = float_options(invoker)
247
374
  in_env = !(args["inline"] || @deplate.variables["imgInline"])
248
375
  in_env &&= floatPos || alignCmd || caption
249
376
  if in_env
250
377
  acc << figure_top(invoker)
251
- acc << include_image(elt, args)
378
+ acc << include_image(invoker, elt, args)
252
379
  acc << figure_bottom(invoker)
253
380
  else
254
- acc << include_image(elt, args)
381
+ acc << include_image(invoker, elt, args)
255
382
  acc << format_label(invoker, :once)
256
383
  end
257
384
  end
@@ -283,25 +410,18 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
283
410
  join_blocks(acc)
284
411
  end
285
412
 
286
- def include_image(file, options, inline=false)
287
- ff = ""
288
- o = []
413
+ def include_image(invoker, file, args, inline=false)
414
+ file = args['file'] if args['file']
415
+ if file =~ Deplate::HyperLink::Url.rx
416
+ Deplate::Core.log([%{Can't include remote images in current document}, file], :error)
417
+ file = File.basename(file)
418
+ end
419
+ ff = use_image_filename(file, args)
420
+ o = []
289
421
  bw, bh, bx, by, desc = nil
290
422
  @deplate.in_working_dir do
291
- f = file[0..-(File.extname(file).size + 1)]
292
- ls = Dir[File.join("%s.*" % f)]
293
- suffixes = image_suffixes
294
- catch(:found) do
295
- for sfx in suffixes
296
- ff = f + sfx
297
- if ls.include?(ff)
298
- throw :found
299
- end
300
- end
301
- ff = file
302
- end
303
- bw = options["bw"]
304
- bh = options["bh"]
423
+ bw = args['bw']
424
+ bh = args['bh']
305
425
  desc = Deplate::External.image_dimension(ff)
306
426
  unless (bw and bh) or @deplate.options.pdftex
307
427
  bw, bh, bx, by = desc[:bw]
@@ -310,7 +430,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
310
430
  unless @deplate.options.pdftex
311
431
  o << "bb=0 0 #{bw || "100"} #{bh || "100"}"
312
432
  end
313
- width = options["w"] || options["width"]
433
+ width = args['w'] || args['width']
314
434
  if width
315
435
  if width =~ /^\d+%$/
316
436
  width = width.to_f / 100
@@ -331,7 +451,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
331
451
  end
332
452
  end
333
453
  end
334
- height = options["h"]
454
+ height = args['h']
335
455
  if height
336
456
  if height =~ /^\d+%$/
337
457
  height = height.to_f / 100
@@ -342,13 +462,13 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
342
462
  o << "height=#{height}pt"
343
463
  end
344
464
  end
345
- o = o.join(",")
465
+ o = o.join(',')
346
466
  if !o.empty?
347
- o = "[" + o + "]"
467
+ o = "[#{o}]"
348
468
  end
349
- add_package("graphicx")
469
+ add_package('graphicx')
350
470
  rv = "\\includegraphics#{o}{#{ff}}"
351
- rot = options["rotate"] || @deplate.variables["imgRotate"]
471
+ rot = args['rotate'] || @deplate.variables['imgRotate']
352
472
  if rot
353
473
  rv = %{\\rotatebox{#{rot}}{#{rv}}}
354
474
  end
@@ -357,9 +477,9 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
357
477
 
358
478
  def image_suffixes
359
479
  if @deplate.options.pdftex
360
- [".pdf", ".jpeg", ".jpg", ".png", ".gif", ".bmp"]
480
+ ['.pdf', '.jpeg', '.jpg', '.png', '.gif', '.bmp']
361
481
  else
362
- [".eps", ".ps", ".jpeg", ".jpg", ".png", ".gif", ".bmp"]
482
+ ['.eps', '.ps', '.jpeg', '.jpg', '.png', '.gif', '.bmp']
363
483
  end
364
484
  end
365
485
 
@@ -367,20 +487,20 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
367
487
  pkg_previous = @packages[pkg]
368
488
  if pkg_previous
369
489
  if options != pkg_previous
370
- log(["Already required package with different options", pkg, pkg_previous, options], :error)
490
+ log(['Already required package with different options', pkg, pkg_previous, options], :error)
371
491
  end
372
492
  return
373
493
  else
374
494
  @packages[pkg] = options.dup
375
495
  case pkg
376
- when "hyperref", "graphicx"
496
+ when 'hyperref', 'graphicx'
377
497
  if @deplate.options.pdftex
378
- options << "pdftex"
498
+ options << 'pdftex'
379
499
  end
380
500
  end
381
501
 
382
502
  unless options.empty?
383
- options = "[" + options.join(",") + "]"
503
+ options = "[#{options.join(',')}]"
384
504
  end
385
505
  if pkg =~ /\.\w+$/
386
506
  output_at(:pre, :user_packages, "\\input{#{pkg}}")
@@ -405,7 +525,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
405
525
  when "!"
406
526
  note = "Important"
407
527
  else
408
- Deplate::Core.log(["Unknown marker", marker], :error)
528
+ invoker.log(["Unknown marker", marker], :error)
409
529
  note = "Note"
410
530
  end
411
531
  note = "%s: " % @deplate.msg(note)
@@ -466,11 +586,18 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
466
586
  join_blocks(acc)
467
587
  end
468
588
 
469
- def format_heading(invoker)
470
- args = invoker.args
471
- elt = invoker.elt
472
- caption = invoker.caption
473
- level = invoker.level
589
+ def format_heading(invoker, level=nil, elt=nil, args=nil)
590
+ args ||= invoker.args
591
+ level ||= invoker.level
592
+ elt ||= invoker.elt
593
+ if invoker
594
+ caption = invoker.caption
595
+ invoker.label << args[:id]
596
+ labels = format_label(invoker, :string)
597
+ else
598
+ caption = nil
599
+ labels = nil
600
+ end
474
601
  if caption
475
602
  cap = "[#{caption.elt}]"
476
603
  else
@@ -482,8 +609,6 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
482
609
  else
483
610
  mode = ""
484
611
  end
485
- invoker.label << args[:id]
486
- labels = format_label(invoker, :string)
487
612
  if hd
488
613
  join_blocks(["\n\\#{hd}#{mod}#{cap}{#{elt}}", labels])
489
614
  else
@@ -542,7 +667,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
542
667
  header = e.format_current
543
668
  elsif e.kind_of?(Deplate::Element::Table)
544
669
  if e.elt.size > 1
545
- log("Only the header's first row will be used", :error)
670
+ invoker.log("Only the header's first row will be used", :error)
546
671
  end
547
672
  header = e.elt[0].cols.collect{|c| c.cell}
548
673
  while header.last.empty?
@@ -558,7 +683,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
558
683
  end
559
684
  end
560
685
  elts = "%s %s" % [elt.size, elt.collect {|e| e.class}.join(", ")]
561
- log(["Header must contain only 1 element (a paragraph or a table)", elts], :error)
686
+ invoker.log(["Header must contain only 1 element (a paragraph or a table)", elts], :error)
562
687
  end
563
688
 
564
689
  def format_footer(invoker)
@@ -609,7 +734,8 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
609
734
  acc << c % elt
610
735
  end
611
736
  end
612
- acc << "\\maketitle\n" if elts.include?("title") and elts.include?("author")
737
+ acc << "\\maketitle\n" if elts.include?("title")
738
+ # and elts.include?("author")
613
739
  kw = keywords
614
740
  acc << %{#{@deplate.msg("Keywords:")} #{kw.join(", ")}} << "" if kw
615
741
  # end
@@ -622,7 +748,10 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
622
748
 
623
749
  def format_MAKEBIB(invoker)
624
750
  style = invoker.elt
625
- bib = @deplate.options.bib.collect{|f| File.basename(f, ".bib")}.join(",")
751
+ if style.empty?
752
+ style = @deplate.variables['bibStyle']
753
+ end
754
+ bib = @deplate.options.bib.collect{|f| File.basename(f, ".bib")}.join(",")
626
755
  "\\bibliographystyle{#{style}}\n\\bibliography{#{bib}}\n"
627
756
  end
628
757
  alias :format_bibliography :format_MAKEBIB
@@ -637,11 +766,13 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
637
766
 
638
767
 
639
768
  ################################################ Particles {{{1
640
- def format_emphasize(invoker, text)
769
+ def format_emphasize(invoker, text=nil)
770
+ text ||= invoker.elt || invoker.text
641
771
  "\\emph{%s}" % text
642
772
  end
643
773
 
644
- def format_code(invoker, text)
774
+ def format_code(invoker, text=nil)
775
+ text ||= invoker.elt || invoker.text
645
776
  "\\texttt{%s}" % plain_text(text, true)
646
777
  end
647
778
 
@@ -658,7 +789,7 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
658
789
  def format_wiki(invoker, name, dest, anchor)
659
790
  add_package("hyperref")
660
791
  if dest and !dest.empty?
661
- log(["Wiki name as url", dest], :debug)
792
+ invoker.log(["Wiki name as url", dest], :debug)
662
793
  format_url(invoker, name, dest, anchor)
663
794
  else
664
795
  # "%s~($\\Rightarrow{}$\\pageref{%s})" % [plain_text(name), anchor]
@@ -745,22 +876,24 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
745
876
  def format_footnote(invoker)
746
877
  elt = invoker.elt
747
878
  if elt
748
- fn = elt.elt
749
- return "\\footnote{#{fn.body}}"
750
- else
751
- return ""
879
+ body = elt.format_current
880
+ if body
881
+ return "\\footnote{#{body.rstrip}}"
882
+ end
752
883
  end
884
+ return ''
753
885
  end
754
886
 
755
887
  def format_ref(invoker)
756
- add_package("hyperref")
888
+ add_package('hyperref')
757
889
  args = invoker.args
758
890
  text = invoker.text
759
- p = args["p"]
891
+ p = args['p']
892
+ prefix = invoker.args['prefix'] || '~'
760
893
  if p
761
- return "~\\pageref{#{text}}"
894
+ return "#{prefix}\\pageref{#{text}}"
762
895
  else
763
- return "~\\ref{#{text}}"
896
+ return "#{prefix}\\ref{#{text}}"
764
897
  end
765
898
  end
766
899
 
@@ -772,11 +905,11 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
772
905
  def format_cite(invoker)
773
906
  args = invoker.args
774
907
  elt = invoker.elt
775
- add_package("natbib", "round")
776
- n = args["n"]
777
- p = args["p"]
778
- np = args["np"]
779
- y = args["y"]
908
+ add_package('natbib', 'round')
909
+ n = args['n']
910
+ p = args['p']
911
+ np = args['np']
912
+ y = args['y']
780
913
  c = elt
781
914
  o = []
782
915
  o << "[#{n}]" if n
@@ -867,16 +1000,15 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
867
1000
 
868
1001
 
869
1002
  ################################################ List of ... {{{1
870
- def format_list_of_contents(invoker)
1003
+ def format_list_of_toc(invoker)
871
1004
  "\\tableofcontents{}"
872
1005
  end
873
- alias format_list_of_toc format_list_of_contents
874
1006
 
875
- def format_list_of_tables(invoker)
1007
+ def format_list_of_lot(invoker)
876
1008
  "\\listoftables{}"
877
1009
  end
878
1010
 
879
- def format_list_of_figures(invoker)
1011
+ def format_list_of_lof(invoker)
880
1012
  "\\listoffigures{}"
881
1013
  end
882
1014
 
@@ -886,6 +1018,33 @@ class Deplate::Formatter::LaTeX < Deplate::Formatter
886
1018
  "\\printindex{}"
887
1019
  end
888
1020
 
1021
+ def listing_prematter(invoker, args, id)
1022
+ type = args[:prefix]
1023
+ @deplate.endmessage("listing_#{type}", %{You might need to edit deplate.sty and define the environment #{type}List and the command \\#{type}Item.}
1024
+ )
1025
+ nil
1026
+ end
1027
+
1028
+ def listing_postmatter(invoker, args)
1029
+ ''
1030
+ end
1031
+
1032
+ def listing_title(invoker, args, name)
1033
+ if name
1034
+ format_heading(nil, 1, @deplate.msg(name), {'noList' => true})
1035
+ end
1036
+ end
1037
+
1038
+ def listing_item(invoker, args, prefix, title, heading, level, other_args)
1039
+ b = title
1040
+ # <+TBD+> Hyperlinks
1041
+ # use latex contents infrastructure?
1042
+ i = heading.plain_caption? ? nil : heading.level_as_string
1043
+ s = Deplate::ListItem.new(i, b, "Custom", "Custom", level, 0, true)
1044
+ s.opts = {:subtype => prefix, :custom => prefix}
1045
+ s
1046
+ end
1047
+
889
1048
 
890
1049
  ################################################ Table {{{1
891
1050
  def table_indented_row(invoker, row, indent, cells)