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.
Files changed (145) hide show
  1. data/AUTHORS.TXT +26 -0
  2. data/CHANGES.TXT +177 -0
  3. data/LICENSE.TXT +340 -0
  4. data/NEWS.TXT +29 -0
  5. data/README.TXT +86 -0
  6. data/TODO.TXT +202 -0
  7. data/VERSION.TXT +1 -0
  8. data/bin/deplate +3 -0
  9. data/bin/deplate.bat +2 -0
  10. data/etc/deplate.ini +361 -0
  11. data/lib/deplate.rb +31 -0
  12. data/lib/deplate/abstract-class.rb +30 -0
  13. data/lib/deplate/builtin.rb +11 -0
  14. data/lib/deplate/cache.rb +59 -0
  15. data/lib/deplate/commands.rb +693 -0
  16. data/lib/deplate/common.rb +335 -0
  17. data/lib/deplate/converter.rb +99 -0
  18. data/lib/deplate/core.rb +2705 -0
  19. data/lib/deplate/css/article.css +545 -0
  20. data/lib/deplate/css/deplate.css +699 -0
  21. data/lib/deplate/css/heading-navbar.css +29 -0
  22. data/lib/deplate/css/layout-deplate-print.css +540 -0
  23. data/lib/deplate/css/layout-deplate.css +764 -0
  24. data/lib/deplate/css/sans-serif.css +160 -0
  25. data/lib/deplate/css/serif-e.css +170 -0
  26. data/lib/deplate/css/serif-rel.css +121 -0
  27. data/lib/deplate/css/serif.css +190 -0
  28. data/lib/deplate/css/slides.css +11 -0
  29. data/lib/deplate/css/tabbar-left.css +91 -0
  30. data/lib/deplate/css/tabbar-right-ie.css +14 -0
  31. data/lib/deplate/css/tabbar-right.css +118 -0
  32. data/lib/deplate/css/tabbar-top.css +64 -0
  33. data/lib/deplate/css/tabbar.css +81 -0
  34. data/lib/deplate/css/text-sans-serif.css +154 -0
  35. data/lib/deplate/css/text-serif.css +175 -0
  36. data/lib/deplate/define.rb +439 -0
  37. data/lib/deplate/docbook.rb +738 -0
  38. data/lib/deplate/elements.rb +1355 -0
  39. data/lib/deplate/etc.rb +199 -0
  40. data/lib/deplate/external.rb +135 -0
  41. data/lib/deplate/fmt/dbk-article-4.1.2.rb +21 -0
  42. data/lib/deplate/fmt/dbk-article.rb +46 -0
  43. data/lib/deplate/fmt/dbk-book.rb +46 -0
  44. data/lib/deplate/fmt/dbk-ref.rb +105 -0
  45. data/lib/deplate/fmt/dbk-slides.rb +47 -0
  46. data/lib/deplate/fmt/dbk-snippet.rb +21 -0
  47. data/lib/deplate/fmt/html-snippet.rb +21 -0
  48. data/lib/deplate/fmt/html.rb +1696 -0
  49. data/lib/deplate/fmt/htmlsite.rb +419 -0
  50. data/lib/deplate/fmt/htmlslides.rb +21 -0
  51. data/lib/deplate/fmt/htmlwebsite.rb +70 -0
  52. data/lib/deplate/fmt/latex-snippet.rb +22 -0
  53. data/lib/deplate/fmt/latex.rb +1242 -0
  54. data/lib/deplate/fmt/php.rb +19 -0
  55. data/lib/deplate/fmt/phpsite.rb +19 -0
  56. data/lib/deplate/fmt/plain.rb +598 -0
  57. data/lib/deplate/fmt/template.rb +34 -0
  58. data/lib/deplate/fmt/xhtml10t.rb +41 -0
  59. data/lib/deplate/formatter-snippet.rb +17 -0
  60. data/lib/deplate/formatter.rb +1210 -0
  61. data/lib/deplate/input.rb +492 -0
  62. data/lib/deplate/input/deplate-headings.rb +48 -0
  63. data/lib/deplate/input/deplate-restricted.rb +70 -0
  64. data/lib/deplate/input/deplate.rb +28 -0
  65. data/lib/deplate/input/rdoc.rb +277 -0
  66. data/lib/deplate/input/template.rb +29 -0
  67. data/lib/deplate/lib/latex/highlight-extra.sty +15 -0
  68. data/lib/deplate/lib/latex/highlight-typical.sty +15 -0
  69. data/lib/deplate/lib/tabmenu.js +146 -0
  70. data/lib/deplate/locale/de.latin1 +708 -0
  71. data/lib/deplate/locale/ru.koi8-r +48 -0
  72. data/lib/deplate/locale/zh_cn.gb2312 +35 -0
  73. data/lib/deplate/macros.rb +639 -0
  74. data/lib/deplate/messages.rb +120 -0
  75. data/lib/deplate/metadata.rb +77 -0
  76. data/lib/deplate/metadata/marshal.rb +24 -0
  77. data/lib/deplate/metadata/xml.rb +42 -0
  78. data/lib/deplate/metadata/yaml.rb +26 -0
  79. data/lib/deplate/mod/anyword.rb +56 -0
  80. data/lib/deplate/mod/babelfish.rb +27 -0
  81. data/lib/deplate/mod/code-gvim.rb +52 -0
  82. data/lib/deplate/mod/code-highlight.rb +91 -0
  83. data/lib/deplate/mod/colored-log.rb +17 -0
  84. data/lib/deplate/mod/de.rb +19 -0
  85. data/lib/deplate/mod/en.rb +17 -0
  86. data/lib/deplate/mod/endnotes.rb +60 -0
  87. data/lib/deplate/mod/fr.rb +46 -0
  88. data/lib/deplate/mod/html-asciimath.rb +40 -0
  89. data/lib/deplate/mod/html-deplate-button.rb +15 -0
  90. data/lib/deplate/mod/html-headings-navbar.rb +39 -0
  91. data/lib/deplate/mod/html-obfuscate-email.rb +47 -0
  92. data/lib/deplate/mod/html-sidebar.rb +232 -0
  93. data/lib/deplate/mod/htmlslides-navbar-fh.rb +32 -0
  94. data/lib/deplate/mod/iconv.rb +35 -0
  95. data/lib/deplate/mod/imgurl.rb +30 -0
  96. data/lib/deplate/mod/inlatex-compound.rb +69 -0
  97. data/lib/deplate/mod/koma.rb +109 -0
  98. data/lib/deplate/mod/latex-emph-table-head.rb +38 -0
  99. data/lib/deplate/mod/latex-styles.rb +461 -0
  100. data/lib/deplate/mod/latex-verbatim-small.rb +29 -0
  101. data/lib/deplate/mod/makefile.rb +194 -0
  102. data/lib/deplate/mod/mark-external-urls.rb +38 -0
  103. data/lib/deplate/mod/markup-1-warn.rb +37 -0
  104. data/lib/deplate/mod/markup-1.rb +41 -0
  105. data/lib/deplate/mod/navbar-png.rb +33 -0
  106. data/lib/deplate/mod/noindent.rb +32 -0
  107. data/lib/deplate/mod/numpara.rb +40 -0
  108. data/lib/deplate/mod/particle-math.rb +34 -0
  109. data/lib/deplate/mod/php-extra.rb +44 -0
  110. data/lib/deplate/mod/pstoedit.rb +71 -0
  111. data/lib/deplate/mod/recode.rb +57 -0
  112. data/lib/deplate/mod/ru_koi8-r.rb +20 -0
  113. data/lib/deplate/mod/smiley.rb +50 -0
  114. data/lib/deplate/mod/soffice.rb +23 -0
  115. data/lib/deplate/mod/symbols-latin1.rb +58 -0
  116. data/lib/deplate/mod/symbols-od-utf-8.rb +16 -0
  117. data/lib/deplate/mod/symbols-plain.rb +58 -0
  118. data/lib/deplate/mod/symbols-sgml.rb +97 -0
  119. data/lib/deplate/mod/symbols-utf-8.rb +81 -0
  120. data/lib/deplate/mod/symbols-xml.rb +34 -0
  121. data/lib/deplate/mod/syntax-region-alt.rb +37 -0
  122. data/lib/deplate/mod/utf8.rb +49 -0
  123. data/lib/deplate/mod/validate-html.rb +35 -0
  124. data/lib/deplate/mod/xmlrpc.rb +233 -0
  125. data/lib/deplate/mod/zh-cn-autospace.rb +108 -0
  126. data/lib/deplate/mod/zh-cn.rb +59 -0
  127. data/lib/deplate/once-method.rb +44 -0
  128. data/lib/deplate/output.rb +249 -0
  129. data/lib/deplate/particles.rb +815 -0
  130. data/lib/deplate/regions.rb +1076 -0
  131. data/lib/deplate/structured.rb +763 -0
  132. data/lib/deplate/template.rb +430 -0
  133. data/lib/deplate/templates/html-doc.html +28 -0
  134. data/lib/deplate/templates/html-left-tabbar-js.html +37 -0
  135. data/lib/deplate/templates/html-left-tabbar.html +31 -0
  136. data/lib/deplate/templates/html-tabbar-right-table.html +43 -0
  137. data/lib/deplate/templates/html-tabbar-right.html +23 -0
  138. data/lib/deplate/templates/html-tabbar-top.html +43 -0
  139. data/lib/deplate/templates/html-tabbar.html +31 -0
  140. data/lib/deplate/wiki-markup.rb +117 -0
  141. data/lib/deplate/xml.rb +109 -0
  142. data/lib/deplate/zh-cn.rb +59 -0
  143. data/lib/ps2ppm.rb +239 -0
  144. data/man/man1/deplate.1 +692 -0
  145. metadata +210 -0
@@ -0,0 +1,738 @@
1
+ # docbook.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: 17-M�r-2004.
6
+ # @Last Change: 01-Nov-2005.
7
+ # @Revision: 0.2651
8
+
9
+ require "deplate/xml"
10
+
11
+ # An abstract docbook formatter
12
+
13
+ class Deplate::Formatter::Docbook < Deplate::Formatter::XML
14
+ def initialize(deplate, args)
15
+ @consumed_ids = []
16
+ @sgml = false
17
+ super
18
+ end
19
+
20
+ def get_open(tag, opts=nil, args=nil, other_args={})
21
+ single = other_args[:single] || false
22
+ no_id = other_args[:no_id] || false
23
+ opts ||= {}
24
+ args ||= {}
25
+ unless no_id
26
+ id = use_id(args, opts)
27
+ oid = opts["id"]
28
+ if oid and oid != id
29
+ log(["ID mismatch", id, oid, opts, args], :error)
30
+ end
31
+ opts["id"] = encode_id(id) if id
32
+ # args = args.dup
33
+ args.delete("id")
34
+ end
35
+ id = opts["id"]
36
+ if id
37
+ if @consumed_ids.include?(id)
38
+ opts = opts.dup
39
+ opts.delete("id")
40
+ else
41
+ @consumed_ids << id
42
+ end
43
+ opts["xreflabel"] ||= args[:level_as_string]
44
+ end
45
+ opts = opts.collect do |k, v|
46
+ case k
47
+ when "linkend"
48
+ v = encode_id(v)
49
+ end
50
+ if v
51
+ %{%s="%s"} % [k, v]
52
+ end
53
+ end
54
+ if single
55
+ if @sgml
56
+ opts << "></%s" % tag
57
+ else
58
+ opts << "/"
59
+ end
60
+ end
61
+ %{<%s>} % [tag, *opts].compact.join(" ")
62
+ end
63
+
64
+ def get_close(tag, args=nil)
65
+ %{</%s>} % tag
66
+ end
67
+
68
+ def get_emphasize(args, text)
69
+ formatted_inline('emphasis', text)
70
+ end
71
+
72
+ def get_code(args, text)
73
+ formatted_inline('literal', text)
74
+ end
75
+
76
+ def get_url(args, name, dest, anchor, literal=false)
77
+ formatted_inline('ulink', name, {'url' => dest.gsub(/&/, '&amp;')})
78
+ end
79
+
80
+ def get_wiki(args, name, dest, anchor)
81
+ formatted_inline('ulink', name, {'url' => dest})
82
+ end
83
+
84
+ def docbook_authors(authors)
85
+ accAuthors = []
86
+ for au in authors
87
+ acc = []
88
+ author = []
89
+ if au[:firstname] and au[:surname]
90
+ firstname = @deplate.parse_and_format(nil, au[:firstname], false)
91
+ author << formatted_inline("firstname", firstname)
92
+ surname = @deplate.parse_and_format(nil, au[:surname], false)
93
+ author << formatted_inline("surname", surname)
94
+ else
95
+ surname = @deplate.parse_and_format(nil, au[:name], false)
96
+ author << formatted_inline("surname", surname)
97
+ end
98
+ acc << author.join
99
+ if au[:note]
100
+ authorblurb = @deplate.parse_and_format(nil, au[:note], false)
101
+ acc << formatted_block("authorblurb", formatted_inline("para", authorblurb))
102
+ end
103
+ accAuthors << formatted_block("author", join_blocks(acc))
104
+ end
105
+ return accAuthors
106
+ end
107
+
108
+ def get_doc_head(args)
109
+ accum = []
110
+
111
+ authors = @deplate.options.author || []
112
+ accAuthors = docbook_authors(authors)
113
+ if authors.size > 1
114
+ accum << formatted_block("authorgroup", join_blocks(accAuthors))
115
+ else
116
+ accum += accAuthors
117
+ end
118
+
119
+ date = @deplate.get_clip("date")
120
+ date = date ? date.elt : Deplate::Element.get_date("today", nil)
121
+ accum << formatted_inline("pubdate", date)
122
+
123
+ title = @deplate.get_clip("title")
124
+ accum << formatted_inline("title", title.elt) if title
125
+
126
+ kw = keywords
127
+ if kw
128
+ kws = join_blocks(kw.collect {|kw| formatted_inline("keyword", kw)})
129
+ accum << formatted_block("keywordset", kws)
130
+ end
131
+
132
+ desc = @deplate.variables["description"]
133
+ if desc
134
+ para = formatted_inline("para", plain_text(desc))
135
+ accum << formatted_block("abstract", para)
136
+ end
137
+
138
+ return join_blocks(accum)
139
+ end
140
+
141
+ def get_doc_def(args)
142
+ version = @deplate.variables['dbkVersion'] || '4.2'
143
+ type = @deplate.variables['dbkClass'] || 'article'
144
+ dbkid = @deplate.variables['dbkId'] || "-//OASIS//DTD DocBook XML V#{version}//EN"
145
+ dtd = @deplate.variables['dbkDtd'] || "http://www.oasis-open.org/docbook/xml/#{version}/docbookx.dtd"
146
+ docbook_doc_def(args, type, dbkid, dtd)
147
+ end
148
+
149
+ def docbook_doc_def(args, type, pub, dtd, xmlVersion="1.0")
150
+ encoding = @encoding ? %{ encoding="%s"} % @encoding : ""
151
+
152
+ doc = [%{<?xml version='#{xmlVersion}'#{encoding}?>},
153
+ %{<!DOCTYPE #{type} PUBLIC "#{pub}"},
154
+ %{ "#{dtd}"}
155
+ ]
156
+ ent = get_entities(args)
157
+ if ent
158
+ doc.last << " ["
159
+ doc << ent << "]"
160
+ end
161
+ doc.last << ">"
162
+ return join_blocks(doc.flatten.compact)
163
+ end
164
+
165
+ def get_entities(args)
166
+ entities = args[:deplate].variables["dbkEntities"]
167
+ return join_blocks(entities) if entities
168
+ end
169
+
170
+ def get_entity(id, pub)
171
+ %{<!ENTITY %% %s PUBLIC "%s">\n%%%s;} % [id, pub, id]
172
+ end
173
+
174
+ # get_doc_body_open(args)
175
+ noop self, "get_doc_body_open"
176
+
177
+ # get_doc_body_close(args)
178
+ noop self, "get_doc_body_close"
179
+
180
+ # Bibliography
181
+ def get_bib(args, title, bib)
182
+ acc = [close_headings(1)]
183
+ title = formatted_inline("title", title) if title and !args["plain"]
184
+ acc << formatted_block("bibliography", join_blocks([title, bib].compact), nil, args)
185
+ join_blocks(acc)
186
+ end
187
+
188
+ def get_bib_entry(args, key, entry)
189
+ body = join_blocks([formatted_inline("abbrev", key), entry])
190
+ return formatted_block("biblioentry", body, {"id" => encode_id(key)}, args)
191
+ end
192
+
193
+ def docbook_format_authors(type, args, text)
194
+ if text
195
+ acc = []
196
+ for au in authors_split(text)
197
+ author = Deplate::Names.name_match_sf(au) || Deplate::Names.name_match_fs(au)
198
+ if author
199
+ surname = formatted_inline("surname", author[:surname])
200
+ firstname = formatted_inline("firstname", author[:firstname])
201
+ acc << formatted_inline(type, surname + firstname)
202
+ else
203
+ # is this ok???
204
+ acc << formatted_inline(type, formatted_inline("surname", au))
205
+ end
206
+ end
207
+ if acc.size > 1
208
+ return formatted_block("authorgroup", join_blocks(acc), nil, args)
209
+ else
210
+ return join_blocks(acc)
211
+ end
212
+ end
213
+ end
214
+
215
+ def get_bib_author(args, text)
216
+ docbook_format_authors("author", args, text)
217
+ end
218
+
219
+ def get_bib_year(args, text)
220
+ formatted_inline("pubdate", text)
221
+ end
222
+
223
+ def get_bib_booktitle(args, text)
224
+ formatted_inline("title", text)
225
+ end
226
+
227
+ def get_bib_editor(args, text)
228
+ docbook_format_authors("editor", args, text)
229
+ end
230
+
231
+ def get_bib_journal(args, text)
232
+ formatted_inline("title", text)
233
+ end
234
+
235
+ def get_bib_pages(args, text)
236
+ formatted_inline("pagenums", text)
237
+ end
238
+
239
+ def get_bib_publisher(args, text)
240
+ formatted_block("publisher", formatted_inline("publishername", text), nil, args)
241
+ end
242
+
243
+ def get_bib_title(args, text)
244
+ formatted_inline("title", text)
245
+ end
246
+
247
+ def get_bib_volume(args, text)
248
+ formatted_inline("volumenum", text)
249
+ end
250
+
251
+ def get_bib_number(args, text)
252
+ formatted_inline("issuenum", text)
253
+ end
254
+
255
+ def docbook_bib_sorted_values(entry)
256
+ keys = ["author", "title", "editor", "booktitle", "publisher", "journal", "volume", "number", "pages", "year"]
257
+ entry = entry.sort {|a, b| keys.index(a[0]) <=> keys.index(b[0])}
258
+ entry.collect {|a| a[1..-1]}.flatten
259
+ end
260
+
261
+ def docbook_bib_relation(args, typeEntry, entry, typeContainer, container)
262
+ e = join_blocks(docbook_bib_sorted_values(entry))
263
+ e = formatted_block("biblioset", e, {"relation" => typeEntry}, args)
264
+ c = join_blocks(docbook_bib_sorted_values(container))
265
+ c = formatted_block("biblioset", c, {"relation" => typeContainer}, args)
266
+ return join_blocks([e, c])
267
+ end
268
+
269
+ def get_bib_relation(args, type, entry, container)
270
+ if type
271
+ case type.downcase
272
+ when "article"
273
+ return docbook_bib_relation(args, "article", entry, "journal", container)
274
+ when "incollection"
275
+ # is this ok???
276
+ return docbook_bib_relation(args, "article", entry, "book", container)
277
+ end
278
+ else
279
+ args[:self].log(["No bib entry type given", entry], :error)
280
+ end
281
+ join_blocks(docbook_bib_sorted_values(entry.update(container)))
282
+ end
283
+
284
+
285
+ # Text
286
+ def get_block_abstract(args, text)
287
+ return formatted_block("abstract", text, nil, args)
288
+ end
289
+
290
+ def get_block_longquote(args, text)
291
+ return formatted_block("blockquote", text, nil, args)
292
+ end
293
+
294
+ def get_block_quote(args, text)
295
+ return formatted_block("blockquote", text, nil, args)
296
+ end
297
+
298
+ def get_note(args, marker, text)
299
+ case marker
300
+ when '#'
301
+ tag = 'note'
302
+ when '+'
303
+ tag = 'warning'
304
+ when '?'
305
+ tag = 'caution'
306
+ when '!'
307
+ tag = 'important'
308
+ else
309
+ log(['Unknown marker', marker], :error)
310
+ tag = 'note'
311
+ end
312
+ return formatted_block(tag, formatted_inline('para', text), nil, args)
313
+ end
314
+
315
+ def get_pre_format(args, text)
316
+ return formatted_block('screen', %{<![CDATA[#{text}]]>}, nil, args, false, true)
317
+ end
318
+
319
+ # Lists, Contents
320
+ # get_contents_open(args, prefix)
321
+ noop self, 'get_contents_open'
322
+ # get_contents_close(args, prefix)
323
+ noop self, 'get_contents_close'
324
+ # get_contents_list(args, prefix, list)
325
+ noop self, 'get_contents_list'
326
+
327
+ # get_list_of_tables(args, data)
328
+ noop self, 'get_list_of_tables'
329
+ # get_list_of_figures(args, data)
330
+ noop self, 'get_list_of_figures'
331
+
332
+ def get_item_paragraph(args, item, text)
333
+ formatted_inline('para', text)
334
+ end
335
+
336
+ def get_list_description_open(args)
337
+ get_open('variablelist', nil, args)
338
+ end
339
+
340
+ def get_list_description_close(args)
341
+ get_close('variablelist', args)
342
+ end
343
+
344
+ def get_item_description_open(args, item, text)
345
+ text = indent_text(formatted_inline('para', text))
346
+ list = get_open('varlistentry', nil, args, :no_id => true)
347
+ term = formatted_inline('term', item, nil, args, true)
348
+ item = get_open('listitem', nil, args, :no_id => true)
349
+ idt = format_indent(1)
350
+ join_blocks([list, idt + term, idt + item, text])
351
+ end
352
+
353
+ def get_item_description_close(args)
354
+ idt = format_indent(1)
355
+ join_blocks([idt + get_close('listitem'), get_close('varlistentry')])
356
+ end
357
+
358
+ # itemize
359
+ def get_list_itemize_open(args)
360
+ get_open('itemizedlist', nil, args)
361
+ end
362
+
363
+ def get_list_itemize_close(args)
364
+ get_close('itemizedlist')
365
+ end
366
+
367
+ def get_item_itemize_open(args, item, text)
368
+ item = get_open('listitem', nil, args, :no_id => true)
369
+ join_blocks([item, indent_text(formatted_inline('para', text))])
370
+ end
371
+
372
+ def get_item_itemize_close(args)
373
+ get_close('listitem')
374
+ end
375
+
376
+ # numbered
377
+ def get_list_numbered_open(args, subtype)
378
+ opts = {}
379
+ case subtype
380
+ when 'a'
381
+ opts['numeration'] = 'loweralpha'
382
+ when 'A'
383
+ opts['numeration'] = 'upperalpha'
384
+ # when '1'
385
+ # num = 'arabic'
386
+ # else
387
+ # num = 'arabic'
388
+ end
389
+ get_open('orderedlist', opts, args)
390
+ end
391
+
392
+ def get_list_numbered_close(args)
393
+ get_close('orderedlist')
394
+ end
395
+
396
+ ### +++ explicitely numbered lists +++
397
+ def get_item_numbered_open(args, item, text)
398
+ item = get_open('listitem', nil, args, :no_id => true)
399
+ join_blocks([item, indent_text(formatted_inline('para', text))])
400
+ end
401
+
402
+ def get_item_numbered_close(args)
403
+ get_close('listitem')
404
+ end
405
+
406
+
407
+ # Textstyles
408
+ def get_subscript(args, text)
409
+ formatted_inline('subscript', text)
410
+ end
411
+
412
+ def get_superscript(args, text)
413
+ formatted_inline('superscript', text)
414
+ end
415
+
416
+ # def get_stacked(args, above, below)
417
+ # +++
418
+ # end
419
+
420
+
421
+ # Figures
422
+ def get_figure_caption(args, title, text, capAbove)
423
+ formatted_inline('title', text)
424
+ end
425
+
426
+ def get_figure(args, cap, img)
427
+ if cap
428
+ formatted_block('figure', join_blocks([cap, img]), nil, args)
429
+ else
430
+ formatted_block('informalfigure', img, nil, args)
431
+ end
432
+ end
433
+
434
+ def get_image(args, file, fnroot, inline=false)
435
+ o = {}
436
+ w = args['w'] || args['width']
437
+ # h = args['h'] || args['heigth']
438
+ unless w
439
+ desc = Deplate::External.image_dimension(File.join(@deplate.options.dir, file))
440
+ w, h, bx, by = desc[:bw]
441
+ end
442
+ o['width'] = w if w
443
+ # o << %{height='#{h}'} if h
444
+ o['fileref'] = file
445
+ img = formatted_block('imageobject', formatted_single('imagedata', o))
446
+ acc = [img]
447
+ alt = args['alt']
448
+ if alt
449
+ acc << formatted_inline('textobject', formatted_inline('phrase', alt))
450
+ end
451
+ img = join_blocks(acc)
452
+ if inline
453
+ formatted_block('inlinemediaobject', img, nil, args)
454
+ else
455
+ formatted_block('mediaobject', img, nil, args)
456
+ end
457
+ end
458
+
459
+ def image_suffixes
460
+ ['.png', '.jpeg', '.jpg', '.gif', '.bmp']
461
+ end
462
+
463
+
464
+ # Header, Footer
465
+ # get_footer(args, text)
466
+ noop self, 'get_footer'
467
+ # get_header(args, text)
468
+ noop self, 'get_header'
469
+
470
+ # Footnote
471
+ def get_footnote(args, label, text)
472
+ formatted_block('footnote', formatted_inline('para', text), {'id'=>label}, args)
473
+ end
474
+
475
+ def get_footnote_ref(args, label, text)
476
+ formatted_single('footnoteref', {'linkend' => label})
477
+ end
478
+
479
+
480
+ # Sections, Headings
481
+ def get_heading_open(args, level, numbering, text, label)
482
+ hd = @headings[level - 1]
483
+ id = encode_id(args[:id])
484
+ if hd
485
+ plain = @deplate.variables['headings'] == 'plain' || args['plain']
486
+ id = encode_id(args['shortcaption'] || text) if id.empty? or plain
487
+ ho = {}
488
+ ho['id'] = id unless id.empty?
489
+ if plain
490
+ xreflabel = id
491
+ ho['xreflabel'] = xreflabel
492
+ else
493
+ ho['label'] = args[:level_as_string].split(/\./).last
494
+ # ho['label'] = args[:level_as_string]
495
+ xreflabel = encode_id(args[:level_as_string])
496
+ ho['xreflabel'] = xreflabel
497
+ end
498
+ hd = get_open(hd, ho, args)
499
+ unless id.empty?
500
+ to = {'id' => "#{id}_title"}
501
+ to['xreflabel'] = xreflabel
502
+ end
503
+ ti = formatted_inline('title', text, to, args)
504
+ return join_blocks([hd, ti, label])
505
+ else
506
+ label << id unless id.empty?
507
+ get_paragraph(args, text, label)
508
+ end
509
+ end
510
+
511
+ def get_heading_close(args, level)
512
+ hd = @headings[level - 1]
513
+ if hd
514
+ get_close(hd)
515
+ end
516
+ end
517
+
518
+
519
+ # Index
520
+ def get_index(args, id, text)
521
+ prim = formatted_inline("primary", text)
522
+ formatted_inline("indexterm", prim, {"id" => encode_id(id)}, args)
523
+ end
524
+
525
+ def get_list_of_index(args, data)
526
+ join_blocks([close_headings(1), formatted_single("index", nil, args)])
527
+ end
528
+
529
+ # get_index_open(args)
530
+ noop self, :get_index_open
531
+
532
+ # get_index_close(args)
533
+ noop self, :get_index_close
534
+
535
+ # get_index_group_open(args)
536
+ noop self, :get_index_group_open
537
+
538
+ # get_index_group_close(args)
539
+ noop self, :get_index_group_close
540
+
541
+ # get_index_item(args, labels, text, references)
542
+ noop self, :get_index_item
543
+
544
+ # get_index_toc_open(args)
545
+ noop self, :get_index_toc_open
546
+
547
+ # get_index_toc_close(args)
548
+ noop self, :get_index_toc_close
549
+
550
+ # get_index_toc_entry(args, char, label)
551
+ noop self, :get_index_toc_entry
552
+
553
+
554
+ # Labels, References
555
+ def get_label(args, label, mode, text="")
556
+ case mode
557
+ when :after, :closeOpen
558
+ text
559
+ else
560
+ join_inline([formatted_single("anchor", {"id" => encode_id(label)}), text])
561
+ end
562
+ end
563
+
564
+ def get_ref(args, file, label, heading=nil)
565
+ if label
566
+ if file.empty? and heading
567
+ if @sgml
568
+ o = @deplate.label_aliases[label]
569
+ text = o.args[:level_as_string]
570
+ formatted_inline("link", text, {"linkend" => label}, args)
571
+ else
572
+ opts = {"linkend" => encode_id(label), 'endterm' => "#{heading}_title"}
573
+ return formatted_single("xref", opts, args)
574
+ end
575
+ else
576
+ url = [file, label].join("#")
577
+ return formatted_inline("ulink", text, {"url" => "file://%s" % url}, args)
578
+ end
579
+ else
580
+ args[:self].log("No label", :error)
581
+ return ""
582
+ end
583
+ end
584
+
585
+
586
+ # Paragraphs, Linebreaks, Pagebreaks
587
+ def get_linebreak(args, container)
588
+ case container.class
589
+ when Deplate::Element::Paragraph
590
+ # well
591
+ %{</para><para>}
592
+ else
593
+ log(["Don't know how to insert linebreaks", container.class], :error)
594
+ ""
595
+ end
596
+ end
597
+
598
+ def get_pagebreak(args)
599
+ formatted_single("beginpage", nil, args)
600
+ end
601
+
602
+ def get_paragraph(args, text, labels=[])
603
+ acc = []
604
+ for l in use_labels(args, labels)
605
+ acc << get_label(args, l, :string)
606
+ end
607
+ acc << text
608
+ text = join_blocks(acc)
609
+ return formatted_inline("para", text, nil, args)
610
+ end
611
+
612
+
613
+ # Table
614
+ def get_table(args, title, table)
615
+ opts = {}
616
+ frame = args["frame"] || @deplate.variables["tableFrame"] || "topbot"
617
+ if frame
618
+ opts["frame"] = frame
619
+ end
620
+ if title
621
+ formatted_block("table", join_blocks([title, table]), opts, args)
622
+ else
623
+ formatted_block("informaltable", table, opts, args)
624
+ end
625
+ end
626
+
627
+ def get_table_order
628
+ ["head", "foot", "body"]
629
+ end
630
+
631
+ def get_table_caption(args, title, text, capAbove)
632
+ formatted_inline("title", text)
633
+ end
634
+
635
+ def get_table_group_open(args, n)
636
+ acc = [get_open("tgroup", {"cols" => n}, args, :no_id => true)]
637
+
638
+ colwidths = Deplate::Core.props(args["cols"], "w")
639
+ coljusts = Deplate::Core.props(args["cols"], "j")
640
+ names = []
641
+ for i in 0 .. n - 1
642
+ col = {}
643
+
644
+ name = "c#{i}"
645
+ col["colname"] = name
646
+ names << name
647
+
648
+ w = colwidths[i]
649
+ if w and !w.empty?
650
+ col["colwidth"] = w
651
+ end
652
+
653
+ j = coljusts[i]
654
+ if j and !j.empty?
655
+ col["align"] = j
656
+ end
657
+ acc << formatted_single("colspec", col, args, true)
658
+ end
659
+ args[:colnames] = names
660
+ join_blocks(acc)
661
+ end
662
+
663
+ def get_table_group_close(args)
664
+ get_close("tgroup")
665
+ end
666
+
667
+ def get_table_head_open(args)
668
+ get_open("thead", nil, args, :no_id => true)
669
+ end
670
+
671
+ def get_table_head_close(args)
672
+ get_close("thead")
673
+ end
674
+
675
+ def get_table_foot_open(args)
676
+ get_open("tfoot", nil, args, :no_id => true)
677
+ end
678
+
679
+ def get_table_foot_close(args)
680
+ get_close("tfoot")
681
+ end
682
+
683
+ def get_table_body_open(args)
684
+ get_open("tbody", nil, args, :no_id => true)
685
+ end
686
+
687
+ def get_table_body_close(args)
688
+ get_close("tbody")
689
+ end
690
+
691
+ def get_table_head_cell(args, text, rown, coln, span_x=1, span_y=1)
692
+ entry_args = {}
693
+ if span_y > 1
694
+ entry_args["morerows"] = span_y - 1
695
+ end
696
+ formatted_block("entry", formatted_inline("para", text), entry_args)
697
+ end
698
+
699
+ def get_table_cell(args, text, rown, coln, span_x=1, span_y=1)
700
+ entry_args = {}
701
+ if span_y > 1
702
+ entry_args["morerows"] = span_y - 1
703
+ end
704
+ if span_x > 1
705
+ start = args[:colnames][coln]
706
+ entry_args["namest"] = start
707
+ entry_args["nameend"] = args[:colnames][coln + span_x - 1]
708
+ end
709
+ formatted_block("entry", formatted_inline("para", text), entry_args)
710
+ end
711
+
712
+ def get_table_note(args, note)
713
+ formatted_inline("para", note)
714
+ end
715
+
716
+ def get_table_row_open(args)
717
+ get_open("row", nil, args, :no_id => true)
718
+ end
719
+
720
+ def get_table_row_close(args)
721
+ get_close("row")
722
+ end
723
+
724
+
725
+ # Title
726
+ noop self, "format_title"
727
+ # get_title(args, data, pagebreak)
728
+ noop self, "get_title"
729
+ # get_title_author(args, text)
730
+ noop self, "get_title_author"
731
+ # get_title_authornote(args, text)
732
+ noop self, "get_title_authornote"
733
+ # get_title_date(args, text)
734
+ noop self, "get_title_date"
735
+ # get_title_title(args, text)
736
+ noop self, "get_title_title"
737
+ end
738
+