deplate 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
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
data/lib/deplate.rb ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ # deplate.rb -- Convert wiki-like plain text pseudo markup to something else
3
+ # @Author: Thomas Link (samul AT web.de)
4
+ # @Website: http://deplate.sf.net/
5
+ # @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
6
+ # @Created: 24-Feb-2004.
7
+ # @Last Change: 16-Okt-2005.
8
+
9
+ require 'profile' if ARGV[0] == '--profile'
10
+
11
+ require 'deplate/core'
12
+ require 'deplate/input'
13
+ require 'deplate/output'
14
+ require 'deplate/cache'
15
+ require 'deplate/common'
16
+ require 'deplate/etc'
17
+ require 'deplate/elements'
18
+ require 'deplate/regions'
19
+ require 'deplate/commands'
20
+ require 'deplate/macros'
21
+ require 'deplate/particles'
22
+ require 'deplate/define'
23
+ require 'deplate/template'
24
+ require 'deplate/external'
25
+ require 'deplate/metadata'
26
+
27
+ if __FILE__ == $0
28
+ require 'deplate/builtin'
29
+ Deplate::Core.deplate
30
+ end
31
+
@@ -0,0 +1,30 @@
1
+ # DefAbstract.rb
2
+ # @Created: 18-M�r-2004.
3
+ # @Last Change: 23-Okt-2005.
4
+ # @Revision: 0.10
5
+ #
6
+ # Description:
7
+ # From: http://groups.google.at/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&newwindow=1&selm=20030821221909.53f3274a.rpav%40mephle.com&rnum=38
8
+ # Von:Ryan Pavlik (rpav@mephle.com)
9
+ # Betrifft:Re: Class variables - a surprising result
10
+ # Newsgroups:comp.lang.ruby
11
+ # Datum:2003-08-21 22:20:26 PST
12
+
13
+ class SubclassResponsibility < Exception; end
14
+
15
+ class Module
16
+ def def_abstract(*args)
17
+ for sym in args
18
+ module_eval <<-CODE
19
+ def #{sym}(*args)
20
+ raise SubclassResponsibility
21
+ end
22
+ CODE
23
+ end
24
+ end #m:def_abstract
25
+ end #c:Module
26
+
27
+ # class B
28
+ # def_abstract :foo, :bar
29
+ # end
30
+
@@ -0,0 +1,11 @@
1
+ # builtin.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-Jun-2004.
6
+ # @Last Change: 23-Okt-2005.
7
+ # @Revision: 0.4
8
+ #
9
+ # Description:
10
+ # Dummy file
11
+
@@ -0,0 +1,59 @@
1
+ # cache.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: 21-Aug-2005.
6
+ # @Last Change: 23-Okt-2005.
7
+ # @Revision: 0.25
8
+
9
+ # = Description
10
+ # This class provides a cache for dynamically generated classes.
11
+ class Deplate::Cache
12
+ @@custom_particles = {}
13
+
14
+ attr_reader :cls
15
+
16
+ class << self
17
+ def particle(deplate, body, args)
18
+ register = args[:register]
19
+ new(@@custom_particles, Deplate::Particle, deplate, body, args) do |cls|
20
+ if register
21
+ args[:id] = body
22
+ deplate.register_particle(cls, args)
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def initialize(cache, super_class, deplate, body, args={})
29
+ @deplate = deplate
30
+ @cache = cache
31
+ specific = args[:specific]
32
+ retrieve_particle(body, specific)
33
+ unless @cls
34
+ @cls = Class.new(super_class)
35
+ @cls.class_eval(body)
36
+ store_particle(body, specific)
37
+ end
38
+ if @cls and block_given?
39
+ yield(@cls)
40
+ end
41
+ end
42
+
43
+ def retrieve_particle(body, specific=false)
44
+ fmt = get_formatter_name(specific)
45
+ particles = @cache[fmt] ||= {}
46
+ @cls = particles[body]
47
+ end
48
+
49
+ def store_particle(body, specific=false)
50
+ fmt = get_formatter_name(specific)
51
+ particles = @cache[fmt] ||= {}
52
+ particles[body] = @cls
53
+ end
54
+
55
+ def get_formatter_name(specific)
56
+ return specific ? @deplate.formatter.formatter_name : :general
57
+ end
58
+ end
59
+
@@ -0,0 +1,693 @@
1
+ # commands.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: 08-Mai-2004.
6
+ # @Last Change: 02-Nov-2005.
7
+ # @Revision: 0.932
8
+
9
+ # Description:
10
+ #
11
+ # Usage:
12
+ #
13
+ # TODO:
14
+ #
15
+ # CHANGES:
16
+ #
17
+
18
+ module Deplate::Names
19
+ def name_match_sf(text)
20
+ m = /^\s*(.+?),\s*(.+?)\s*$/.match(text)
21
+ return m ? {:firstname => m[2], :surname => m[1]} : nil
22
+ end
23
+ module_function :name_match_sf
24
+
25
+ def name_match_fs(text)
26
+ m = /^\s*(\S+(\s+\S+)*?)\s+(\S+)\s*$/.match(text)
27
+ return m ? {:firstname => m[1], :surname => m[3]} : nil
28
+ end
29
+ module_function :name_match_fs
30
+ end
31
+
32
+ class Deplate::Command < Deplate::Element
33
+ include Deplate::Names
34
+
35
+ @@commands = {}
36
+
37
+ class << self
38
+ # attr_reader :commands
39
+ def commands
40
+ @@commands
41
+ end
42
+
43
+ def update_variables(hash, opts, args)
44
+ if args
45
+ d = args["date"]
46
+ args["date"] = get_date(d, args) if d
47
+ if opts["add"]
48
+ if opts["add"].kind_of?(String)
49
+ sep = opts["add"]
50
+ else
51
+ sep = " "
52
+ end
53
+ args.each_pair do |k,v|
54
+ if hash[k]
55
+ v = hash[k] + sep + v
56
+ end
57
+ hash[k] = v
58
+ end
59
+ else
60
+ hash.update(args)
61
+ end
62
+ else
63
+ Deplate::Core.log(["No arguments", opts], :error, src)
64
+ end
65
+ end
66
+ end
67
+
68
+ def setup(args, cmd)
69
+ @multiliner = false
70
+ @collapse = false
71
+ @name = cmd
72
+ @accum = [@text]
73
+ @can_be_labelled = false
74
+ @args.update(args)
75
+ setup_command
76
+ update_args
77
+ end
78
+
79
+ def setup_command
80
+ end
81
+
82
+ def finish
83
+ @elt = [ @accum.join(" ") ]
84
+ return self
85
+ end
86
+
87
+ def process
88
+ process_etc
89
+ @elt = @elt.join("\n")
90
+ return self
91
+ end
92
+
93
+ def format_special
94
+ format_unknown(self)
95
+ end
96
+ end
97
+
98
+
99
+ class Deplate::Command::CAP < Deplate::Command
100
+ @@commands["CAP"] = self
101
+ @@commands["CAPTION"] = self
102
+
103
+ class << self
104
+ def accumulate(src, array, deplate, text, match, args, cmd)
105
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
106
+ elt = deplate.parse_with_source(src, text, false)
107
+ last = array.last
108
+ if last.caption
109
+ Deplate::Core.log('Element already has a caption', :error, src)
110
+ else
111
+ last.level_as_string = deplate.get_current_heading
112
+ last.caption = Deplate::CaptionDef.new(elt, args)
113
+ last.register_caption
114
+ end
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ class Deplate::Command::LANG < Deplate::Command
121
+ @@commands["LANG"] = self
122
+ @@commands["LANGUAGE"] = self
123
+
124
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
125
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
126
+ deplate.set_lang(text)
127
+ end
128
+ end
129
+
130
+
131
+ class Deplate::Command::INC < Deplate::Command
132
+ @@commands["INC"] = self
133
+ @@commands["INCLUDE"] = self
134
+
135
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
136
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
137
+ formatter_name = deplate.formatter.formatter_name
138
+ doc = args['doc'] || args['var'] || args['val']
139
+ if args.has_key?('file')
140
+ if text
141
+ Deplate::Core.log(['Conflicting arguments', 'file > @anonymous'], :error, src)
142
+ end
143
+ text = args['file']
144
+ end
145
+
146
+ embeddedTextRx = args['embeddedTextRx']
147
+ embeddedTextRx_orig = deplate.variables['embeddedTextRx']
148
+ deplate.variables['embeddedTextRx'] = embeddedTextRx if embeddedTextRx
149
+
150
+ embeddedVerbatim = args['embeddedVerbatim']
151
+ embeddedVerbatim_orig = deplate.variables['embeddedVerbatim']
152
+ deplate.variables['embeddedVerbatim'] = embeddedVerbatim if embeddedVerbatim
153
+
154
+ syntax = args['codeSyntax'] || args['syntax']
155
+ syntax_orig = deplate.variables['codeSyntax']
156
+ deplate.variables['codeSyntax'] = syntax if syntax
157
+
158
+ input_format = args['inputFormat']
159
+ pif = deplate.push_input_format(input_format)
160
+
161
+ begin
162
+ if doc
163
+ strings = deplate.variables[doc]
164
+ if strings
165
+ deplate.include_stringarray(strings, array, nil, src.file)
166
+ else
167
+ Deplate::Core.log(["Unknown doc variable", doc], :error, src)
168
+ end
169
+ elsif !text or text == ''
170
+ Deplate::Core.log(["Malformed command", cmd, text], :error, src)
171
+ else
172
+ pwd = File.dirname(deplate.current_source || "")
173
+ dirs = [
174
+ File.join(pwd, "deplate.rc", formatter_name, text),
175
+ File.join(pwd, "deplate.rc", text),
176
+ File.join(pwd, text),
177
+ ]
178
+ dirs += Deplate::Core.library_directories("lib", formatter_name, text)
179
+ dirs += Deplate::Core.library_directories("lib", text)
180
+ dirs += Deplate::Core.library_directories(text)
181
+ # dirs = [
182
+ # File.join(pwd, "deplate.rc", formatter_name, text),
183
+ # File.join(pwd, "deplate.rc", text),
184
+ # File.join(pwd, text),
185
+ # File.join(Deplate::Core::CfgDir, "lib", formatter_name, text),
186
+ # File.join(Deplate::Core::CfgDir, "lib", text),
187
+ # File.join(Deplate::Core::CfgDir, text),
188
+ # File.join(Deplate::Core::LibDir, "lib", formatter_name, text),
189
+ # File.join(Deplate::Core::LibDir, "lib", text),
190
+ # File.join(Deplate::Core::DataDir, "lib", formatter_name, text),
191
+ # File.join(Deplate::Core::DataDir, "lib", text),
192
+ # ]
193
+ for fn in dirs
194
+ if !File.directory?(fn) and File.exists?(fn)
195
+ deplate.include_file(array, fn)
196
+ return
197
+ end
198
+ end
199
+ Deplate::Core.log(["File not found", text], :error, src)
200
+ end
201
+ ensure
202
+ deplate.variables['embeddedTextRx'] = embeddedTextRx_orig if embeddedTextRx
203
+ deplate.variables['embeddedVerbatim'] = embeddedVerbatim_orig if embeddedVerbatim
204
+ deplate.variables['codeSyntax'] = syntax_orig if syntax
205
+ deplate.pop_input_format(input_format) if pif
206
+ end
207
+ end
208
+ end
209
+
210
+
211
+ class Deplate::Command::DOC < Deplate::Command
212
+ @@commands["DOC"] = self
213
+ @@commands["VAR"] = self
214
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
215
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
216
+ opts, text = deplate.input.parse_args(text, nil, false)
217
+ for k, v in opts
218
+ deplate.register_metadata(src,
219
+ "type" => "variable",
220
+ "name" => k,
221
+ "value" => v
222
+ )
223
+ end
224
+ update_variables(deplate.variables, args, opts)
225
+ end
226
+ end
227
+
228
+
229
+ class Deplate::Command::OPT < Deplate::Command
230
+ @@commands["OPT"] = self
231
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
232
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
233
+ elt = array.last
234
+ if elt
235
+ opts, text = deplate.input.parse_args(text, nil, false)
236
+ deplate.register_id(opts, elt)
237
+ update_variables(elt.args, args, opts)
238
+ elt.update_args
239
+ else
240
+ Deplate::Core.log(["No element given", match[0]], :error, src)
241
+ end
242
+ end
243
+ end
244
+
245
+
246
+ class Deplate::Command::PUT < Deplate::Command
247
+ @@commands["PUT"] = self
248
+ @@commands["CLIP"] = self
249
+ @@commands["SET"] = self
250
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
251
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
252
+ id = args["id"]
253
+ if id
254
+ text = deplate.parse_with_source(src, text, false)
255
+ deplate.set_clip(id, Deplate::Element::Clip.new(text, deplate, src))
256
+ else
257
+ Deplate::Core.log(["No clip-id given", text], :error, src)
258
+ end
259
+ end
260
+ end
261
+
262
+
263
+ class Deplate::Command::GET < Deplate::Command
264
+ @@commands["GET"] = self
265
+ @formatter = :format_GET
266
+
267
+ def setup_command
268
+ @id = @args["id"] || @accum[0]
269
+ end
270
+
271
+ def process
272
+ @elt = @deplate.get_clip(@id)
273
+ if @elt
274
+ return self
275
+ else
276
+ log(["GET: Clip not found", @id], :error)
277
+ return nil
278
+ end
279
+ end
280
+ end
281
+
282
+
283
+ class Deplate::Command::XARG < Deplate::Command
284
+ @@commands["XARG"] = self
285
+ @@commands["XVAL"] = self
286
+
287
+ def setup_command
288
+ id = args["id"] || @accum[0]
289
+ @elt = @deplate.variables[id]
290
+ if @elt
291
+ @elt = @elt.split(/[\n\r]/).each {|l| l.chomp!}
292
+ else
293
+ log(["Unknown variable", id, @name], :error)
294
+ end
295
+ end
296
+
297
+ def format_special
298
+ @elt
299
+ end
300
+ end
301
+
302
+
303
+ class Deplate::Command::ARG < Deplate::Command
304
+ @@commands["ARG"] = self
305
+ @@commands["VAL"] = self
306
+
307
+ class << self
308
+ def accumulate(src, array, deplate, text, match, args, cmd)
309
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
310
+ id = args["id"] || text
311
+ val = deplate.variables[id]
312
+ if val
313
+ acc = val.split(/[\n\r]/)
314
+ acc.each {|l| l.chomp!}
315
+ d = deplate.options.master ? deplate.options.master : deplate
316
+ d.include_stringarray(acc, array, src.begin, src.file)
317
+ else
318
+ Deplate::Core.log(["Unknown variable", id, cmd], :error, src)
319
+ end
320
+ end
321
+ end
322
+ end
323
+
324
+
325
+ class Deplate::Command::BIB < Deplate::Command
326
+ @@commands["BIB"] = self
327
+ class << self
328
+ def accumulate(src, array, deplate, text, match, args, cmd)
329
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
330
+ bibs = text.strip.split(/\s*\|\s*/)
331
+ deplate.options.bib += bibs
332
+ deplate.formatter.read_bib(bibs)
333
+ end
334
+ end
335
+ end
336
+
337
+
338
+ class Deplate::Command::TITLE < Deplate::Command
339
+ @@commands["TITLE"] = self
340
+ @@commands["TI"] = self
341
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
342
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
343
+ c = deplate.parse_with_source(src, text, false)
344
+ deplate.set_clip("title", Deplate::Element::Clip.new(c, deplate, src))
345
+ deplate.register_metadata(src,
346
+ "type" => "metadata",
347
+ "name" => "title",
348
+ "value" => text
349
+ )
350
+ end
351
+ end
352
+
353
+
354
+ class Deplate::Command::AUTHOR < Deplate::Command
355
+ @@commands["AUTHOR"] = self
356
+ @@commands["AU"] = self
357
+ class << self
358
+ def accumulate(src, array, deplate, text, match, args, cmd)
359
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
360
+ deplate.options.author ||= []
361
+ for this in text.split(/([;\/]|\s+(&|and))\s+/)
362
+ unless this =~ /^\s*([;\/&]|and)\s*$/
363
+ author = Deplate::Names.name_match_sf(this) ||
364
+ Deplate::Names.name_match_fs(this) || {}
365
+ sn = args["surname"]
366
+ author[:surname] = sn if sn
367
+ fn = args["firstname"]
368
+ author[:firstname] = fn if fn
369
+ if this.empty?
370
+ author[:name] = args["name"] || "%s %s" % [args["firstname"], args["surname"]]
371
+ else
372
+ author[:name] = this
373
+ end
374
+ author[:note] = args["note"]
375
+ deplate.options.author << author
376
+ end
377
+ end
378
+ sep = deplate.variables["authorSep"] || "; "
379
+ authors = deplate.options.author.collect {|h| h[:name]}
380
+ authors = authors.join(sep)
381
+ parsed = deplate.parse_with_source(src, authors, false)
382
+ deplate.set_clip("author", Deplate::Element::Clip.new(parsed, deplate, src))
383
+ deplate.register_metadata(src,
384
+ "type" => "metadata",
385
+ "name" => "author",
386
+ "value" => authors
387
+ )
388
+ end
389
+ end
390
+ end
391
+
392
+
393
+ class Deplate::Command::AUTHORNOTE < Deplate::Command
394
+ @@commands["AUTHORNOTE"] = self
395
+ @@commands["AN"] = self
396
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
397
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
398
+ unless text.empty?
399
+ author = deplate.options.author.last
400
+ if author
401
+ author[:note] = text
402
+ end
403
+ end
404
+ ans = deplate.options.author.collect {|h| h[:note]}
405
+ sep = deplate.variables["authorSep"] || "; "
406
+ ans = ans.join(sep)
407
+ parsed = deplate.parse_with_source(src, ans, false)
408
+ deplate.set_clip("authornote", Deplate::Element::Clip.new(parsed, deplate, src))
409
+ deplate.register_metadata(src,
410
+ "type" => "metadata",
411
+ "name" => "authornote",
412
+ "value" => ans
413
+ )
414
+ end
415
+ end
416
+
417
+
418
+ class Deplate::Command::DATE < Deplate::Command
419
+ @@commands["DATE"] = self
420
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
421
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
422
+ d = get_date(text, args)
423
+ c = deplate.parse_with_source(src, d, false)
424
+ deplate.set_clip(cmd.downcase, Deplate::Element::Clip.new(c, deplate, src))
425
+ deplate.register_metadata(src,
426
+ 'type' => 'metadata',
427
+ 'name' => 'date',
428
+ 'value' => d
429
+ )
430
+ end
431
+ end
432
+
433
+
434
+ class Deplate::Command::IMG < Deplate::Command
435
+ @@commands['IMG'] = self
436
+ @@commands['IMAGE'] = self
437
+ @@commands['FIG'] = self
438
+ @@commands['FIGURE'] = self
439
+ @formatter = :format_IMG
440
+
441
+ def register_caption
442
+ register_figure
443
+ end
444
+ end
445
+
446
+
447
+ class Deplate::Command::MAKETITLE < Deplate::Command
448
+ @@commands['MAKETITLE'] = self
449
+ @formatter = :format_title
450
+ end
451
+
452
+
453
+ class Deplate::Command::MAKEBIB < Deplate::Command
454
+ @@commands['MAKEBIB'] = self
455
+ @formatter = :format_MAKEBIB
456
+ end
457
+
458
+
459
+ class Deplate::Command::LIST < Deplate::Command
460
+ @@commands['LIST'] = self
461
+ @formatter = :format_LIST
462
+ end
463
+
464
+
465
+ class Deplate::Command::TABLE < Deplate::Command
466
+ @@commands['TABLE'] = self
467
+ def setup_command
468
+ if File.exist?(@text)
469
+ File.open(@text) {|io| @accum = io.read.split(/[\r\n]+/)}
470
+ else
471
+ log(['File not found', @text], :error)
472
+ end
473
+ end
474
+
475
+ def finish
476
+ return Deplate::Regions::Table.make_char_separated(self, @accum, @args['sep'])
477
+ end
478
+ end
479
+
480
+
481
+ class Deplate::Command::IDX < Deplate::Command
482
+ @@commands['IDX'] = self
483
+ @formatter = :format_IDX
484
+
485
+ class << self
486
+ def accumulate(src, array, deplate, text, match, args, cmd)
487
+ i = -1
488
+ while array[i] and array[i].kind_of?(Deplate::Element::Whitespace)
489
+ i -= 1
490
+ end
491
+ e = array[i]
492
+ if e
493
+ out = get_indices(e, deplate, args, text, src)
494
+ pseudocontainer = Deplate::PseudoContainer.new(deplate, :args => args)
495
+ e.postponed_preformat << Proc.new do |container|
496
+ out.collect! do |idx|
497
+ deplate.formatter.format_particle(:format_index, pseudocontainer, idx)
498
+ end
499
+ end
500
+ e.postponed_format << Proc.new do |container|
501
+ out.delete('')
502
+ out.compact!
503
+ container.output(out.join) unless out.empty?
504
+ end
505
+ else
506
+ array << self.new(deplate, src, text, match, args, cmd)
507
+ end
508
+ end
509
+
510
+ def get_indices(container, deplate, args, text, source)
511
+ accum = []
512
+ auto = args['auto']
513
+ auto = deplate.variables['autoindex'] if auto.nil?
514
+ for i in text.split(/\s*;\s*/)
515
+ idx = deplate.add_index(nil, i, deplate.get_current_heading)
516
+ Deplate::Particle.auto_indexing(deplate, idx) if auto
517
+ accum << idx
518
+ container.add_metadata(source,
519
+ 'type' => 'index',
520
+ 'name' => idx.name,
521
+ 'label' => idx.label
522
+ )
523
+ end
524
+ return accum
525
+ end
526
+ end
527
+
528
+ def setup_command
529
+ @accum = Deplate::Command::IDX.get_indices(self, @deplate, @args, @text, @source)
530
+ end
531
+
532
+ def finish
533
+ return self
534
+ end
535
+
536
+ def process
537
+ @accum.collect! do |idx|
538
+ deplate.formatter.format_particle(:format_index, self, idx)
539
+ end
540
+ @accum.delete("")
541
+ @accum.compact!
542
+ @elt = [ @accum.join ]
543
+ super
544
+ end
545
+ end
546
+
547
+
548
+ class Deplate::Command::AUTOIDX < Deplate::Command
549
+ @@commands["AUTOIDX"] = self
550
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
551
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
552
+ hd = deplate.get_current_heading
553
+ for i in text.split(/\s*;\s*/)
554
+ Deplate::Particle.auto_indexing(deplate, deplate.add_index(nil, i, hd))
555
+ end
556
+ end
557
+ end
558
+
559
+
560
+ class Deplate::Command::NOIDX < Deplate::Command
561
+ @@commands["NOIDX"] = self
562
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
563
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
564
+ for i in text.split(/\s*;\s*/)
565
+ deplate.remove_index(self, i)
566
+ end
567
+ end
568
+ end
569
+
570
+
571
+ class Deplate::Command::DONTIDX < Deplate::Command
572
+ @@commands["DONTIDX"] = self
573
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
574
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
575
+ deplate.options.dont_index += text.split(/\s*;\s*/)
576
+ end
577
+ end
578
+
579
+
580
+ class Deplate::Command::WITH < Deplate::Command
581
+ @@commands["WITH"] = self
582
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
583
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
584
+ file = args["file"]
585
+ body = nil
586
+ if file
587
+ File.open(file) {|io| body = io.readlines}
588
+ else
589
+ arg = args["arg"]
590
+ if arg
591
+ body = deplate.variables[arg].split(/[\n\r]/)
592
+ end
593
+ end
594
+ if body
595
+ body.each {|l| l.chomp!}
596
+ sep = "-=deplate=-%.10f-=end=-" % Time.new.to_f
597
+ acc = ["#%s <<%s" % [text, sep], *body] << sep
598
+ deplate.include_stringarray(acc, array, src.begin, src.file)
599
+ else
600
+ Deplate::Core.log(["No input! Skip", text], :error, src)
601
+ end
602
+ end
603
+ end
604
+
605
+
606
+ class Deplate::Command::ABBREV < Deplate::Command
607
+ @@commands["ABBREV"] = self
608
+ @@abbrevn = 0
609
+
610
+ def self.accumulate(src, array, deplate, text, match, args, cmd)
611
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
612
+ rx = nil
613
+ tx = nil
614
+ cmd = nil
615
+ catch(:exit) do
616
+ w = args["word"] || args["w"] || args["wd"]
617
+ if w
618
+ rx = Regexp.new(%{\\b%s\\b} % Regexp.escape(w))
619
+ tx = "%{#{text}}"
620
+ throw :exit
621
+ end
622
+ s = args["symbol"] || args["sym"]
623
+ if s
624
+ rx = Regexp.new(%{`%s} % Regexp.escape(s))
625
+ tx = "%{#{text}}"
626
+ throw :exit
627
+ end
628
+ r = args["regexp"] || args["rx"]
629
+ if r
630
+ rx = Regexp.new(r)
631
+ tx = %{@match[0].gsub(/#{r}/, %{#{text}})}
632
+ throw :exit
633
+ end
634
+ end
635
+ if rx
636
+ if args["plain"]
637
+ cmd = %{@deplate.formatter.plain_text(#{tx})}
638
+ specific = false
639
+ elsif args["native"] or args["ins"]
640
+ cmd = tx
641
+ specific = true
642
+ else
643
+ cmd = %{@deplate.parse_and_format(@container, #{tx}, false)}
644
+ specific = false
645
+ end
646
+ body = <<-EOR
647
+ @rx = /^#{rx}/
648
+ def setup
649
+ @elt = #{cmd}
650
+ end
651
+ EOR
652
+ cls = Deplate::Cache.particle(deplate, body,
653
+ :register => true,
654
+ :specific => specific
655
+ )
656
+ else
657
+ Deplate::Core.log(["No pattern specified", args], :error, src)
658
+ end
659
+ end
660
+ end
661
+
662
+
663
+ class Deplate::Command::MODULE < Deplate::Command
664
+ @@commands["MODULE"] = self
665
+ @@commands["MOD"] = self
666
+ class << self
667
+ def accumulate(src, array, deplate, text, match, args, cmd)
668
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
669
+ deplate.require_module(text)
670
+ deplate.call_methods_matching(deplate, /^hook_late_require_/)
671
+ # deplate.initialize_particles(false, :always => true)
672
+ end
673
+ end
674
+ end
675
+
676
+
677
+ class Deplate::Command::LTX < Deplate::Command
678
+ @@commands["LTX"] = self
679
+ @@commands["INLATEX"] = self
680
+ class << self
681
+ def accumulate(src, array, deplate, text, match, args, cmd)
682
+ Deplate::Core.log("%s: %s" % [cmd, text], :debug)
683
+ m = []
684
+ m[Deplate::Element::Region.rxi_name] = 'Ltx'
685
+ m[Deplate::Element::Region.rxi_args] = match[2]
686
+ m[Deplate::Element::Region.rxi_endrx] = Regexp.escape('_$%{}%$_')
687
+ m[Deplate::Element::Region.rxi_indent] = ''
688
+ text += "\n_$%{}%$_"
689
+ Deplate::Element::Region.accumulate(src, array, deplate, text, m)
690
+ end
691
+ end
692
+ end
693
+