deplate 0.7.3 → 0.8
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 +3 -0
- data/CHANGES.TXT +248 -175
- data/LICENSE.TXT +0 -0
- data/NEWS.TXT +28 -24
- data/README.TXT +0 -0
- data/TODO.TXT +174 -88
- data/VERSION.TXT +1 -1
- data/bin/deplate +0 -0
- data/bin/deplate.bat +0 -0
- data/etc/deplate.ini +91 -3
- data/lib/action_view/helpers/deplate.rb +45 -0
- data/lib/deplate.rb +6 -1
- data/lib/deplate/abstract-class.rb +0 -0
- data/lib/deplate/bib.rb +576 -0
- data/lib/deplate/builtin.rb +0 -0
- data/lib/deplate/cache.rb +55 -5
- data/lib/deplate/commands.rb +346 -183
- data/lib/deplate/common.rb +209 -48
- data/lib/deplate/converter.rb +12 -6
- data/lib/deplate/core.rb +777 -378
- data/lib/deplate/counters.rb +254 -0
- data/lib/deplate/css/article.css +4 -3
- data/lib/deplate/css/deplate.css +121 -5
- data/lib/deplate/css/heading-navbar.css +0 -0
- data/lib/deplate/css/layout-deplate-print.css +0 -0
- data/lib/deplate/css/layout-deplate.css +0 -0
- data/lib/deplate/css/sans-serif.css +0 -0
- data/lib/deplate/css/serif-e.css +0 -0
- data/lib/deplate/css/serif-rel.css +0 -0
- data/lib/deplate/css/serif.css +9 -3
- data/lib/deplate/css/slides.css +0 -0
- data/lib/deplate/css/tabbar-left.css +0 -0
- data/lib/deplate/css/tabbar-right-ie.css +3 -9
- data/lib/deplate/css/tabbar-right.css +51 -18
- data/lib/deplate/css/tabbar-top.css +7 -1
- data/lib/deplate/css/tabbar.css +0 -0
- data/lib/deplate/css/text-sans-serif.css +0 -0
- data/lib/deplate/css/text-serif.css +0 -0
- data/lib/deplate/define.rb +183 -177
- data/lib/deplate/deplate-string.rb +82 -0
- data/lib/deplate/docbook.rb +236 -128
- data/lib/deplate/elements.rb +584 -417
- data/lib/deplate/etc.rb +163 -101
- data/lib/deplate/external.rb +42 -11
- data/lib/deplate/fmt/dbk-article-4.1.2.rb +0 -0
- data/lib/deplate/fmt/dbk-article.rb +0 -0
- data/lib/deplate/fmt/dbk-book.rb +0 -0
- data/lib/deplate/fmt/dbk-ref.rb +3 -3
- data/lib/deplate/fmt/dbk-slides.rb +0 -0
- data/lib/deplate/fmt/dbk-snippet.rb +0 -0
- data/lib/deplate/fmt/html-snippet.rb +0 -0
- data/lib/deplate/fmt/html.rb +783 -550
- data/lib/deplate/fmt/htmlsite.rb +192 -199
- data/lib/deplate/fmt/htmlslides.rb +0 -0
- data/lib/deplate/fmt/htmlwebsite.rb +3 -3
- data/lib/deplate/fmt/latex-snippet.rb +0 -0
- data/lib/deplate/fmt/latex.rb +242 -83
- data/lib/deplate/fmt/null.rb +32 -0
- data/lib/deplate/fmt/php.rb +4 -4
- data/lib/deplate/fmt/phpsite.rb +6 -5
- data/lib/deplate/fmt/plain.rb +160 -106
- data/lib/deplate/fmt/template.rb +0 -0
- data/lib/deplate/fmt/xhtml10t.rb +0 -0
- data/lib/deplate/formatter-snippet.rb +0 -0
- data/lib/deplate/formatter.rb +613 -301
- data/lib/deplate/input.rb +202 -142
- data/lib/deplate/input/deplate-headings.rb +4 -6
- data/lib/deplate/input/deplate-restricted.rb +15 -9
- data/lib/deplate/input/deplate.rb +2 -4
- data/lib/deplate/input/rdoc.rb +39 -38
- data/lib/deplate/input/template.rb +0 -0
- data/lib/deplate/lib/Makefile.config +29 -0
- data/lib/deplate/lib/latex/deplate.sty +54 -0
- data/lib/deplate/lib/latex/highlight-extra.sty +0 -0
- data/lib/deplate/lib/latex/highlight-typical.sty +0 -0
- data/lib/deplate/lib/php/page-comment.inc.php +216 -0
- data/lib/deplate/lib/tabmenu.js +0 -0
- data/lib/deplate/locale/de.latin1 +155 -17
- data/lib/deplate/locale/ru.koi8-r +0 -0
- data/lib/deplate/locale/zh_cn.gb2312 +0 -0
- data/lib/deplate/macros.rb +133 -82
- data/lib/deplate/messages.rb +6 -4
- data/lib/deplate/metadata.rb +0 -0
- data/lib/deplate/metadata/marshal.rb +0 -0
- data/lib/deplate/metadata/xml.rb +0 -0
- data/lib/deplate/metadata/yaml.rb +0 -0
- data/lib/deplate/mod/anyword.rb +3 -3
- data/lib/deplate/mod/babelfish.rb +4 -4
- data/lib/deplate/mod/code-gvim.rb +8 -4
- data/lib/deplate/mod/code-highlight.rb +3 -3
- data/lib/deplate/mod/colored-log.rb +0 -0
- data/lib/deplate/mod/de.rb +2 -2
- data/lib/deplate/mod/en.rb +0 -0
- data/lib/deplate/mod/endnotes.rb +0 -0
- data/lib/deplate/mod/fr.rb +0 -0
- data/lib/deplate/mod/html-asciimath.rb +0 -0
- data/lib/deplate/mod/html-deplate-button.rb +0 -0
- data/lib/deplate/mod/html-headings-navbar.rb +5 -13
- data/lib/deplate/mod/html-jsmath.rb +39 -0
- data/lib/deplate/mod/html-obfuscate-email.rb +3 -3
- data/lib/deplate/mod/html-sidebar.rb +0 -0
- data/lib/deplate/mod/htmlslides-navbar-fh.rb +3 -3
- data/lib/deplate/mod/iconv.rb +0 -0
- data/lib/deplate/mod/imgurl.rb +4 -4
- data/lib/deplate/mod/inlatex-compound.rb +7 -10
- data/lib/deplate/mod/koma.rb +0 -0
- data/lib/deplate/mod/latex-emph-table-head.rb +0 -0
- data/lib/deplate/mod/latex-styles.rb +7 -4
- data/lib/deplate/mod/latex-verbatim-small.rb +0 -0
- data/lib/deplate/mod/makefile.rb +23 -7
- data/lib/deplate/mod/mark-external-urls.rb +3 -3
- data/lib/deplate/mod/markup-1-warn.rb +10 -10
- data/lib/deplate/mod/markup-1.rb +0 -0
- data/lib/deplate/mod/navbar-png.rb +24 -8
- data/lib/deplate/mod/noindent.rb +0 -0
- data/lib/deplate/mod/numpara.rb +0 -0
- data/lib/deplate/mod/particle-math.rb +4 -4
- data/lib/deplate/mod/php-extra.rb +46 -6
- data/lib/deplate/mod/pstoedit.rb +0 -0
- data/lib/deplate/mod/recode.rb +0 -0
- data/lib/deplate/mod/ru_koi8-r.rb +0 -0
- data/lib/deplate/mod/smart-dash.rb +26 -0
- data/lib/deplate/mod/smiley.rb +69 -7
- data/lib/deplate/mod/soffice.rb +0 -0
- data/lib/deplate/mod/symbols-latin1.rb +14 -23
- data/lib/deplate/mod/symbols-od-utf-8.rb +5 -3
- data/lib/deplate/mod/symbols-plain.rb +5 -35
- data/lib/deplate/mod/symbols-sgml.rb +8 -9
- data/lib/deplate/mod/symbols-utf-8.rb +8 -9
- data/lib/deplate/mod/symbols-xml.rb +5 -9
- data/lib/deplate/mod/syntax-region-alt.rb +5 -5
- data/lib/deplate/mod/utf8.rb +0 -0
- data/lib/deplate/mod/validate-html.rb +0 -0
- data/lib/deplate/mod/xmlrpc.rb +0 -0
- data/lib/deplate/mod/zh-cn-autospace.rb +18 -20
- data/lib/deplate/mod/zh-cn.rb +4 -6
- data/lib/deplate/nukumi2.rb +71 -0
- data/lib/deplate/once-method.rb +0 -0
- data/lib/deplate/output.rb +19 -21
- data/lib/deplate/particles.rb +178 -116
- data/lib/deplate/regions.rb +99 -58
- data/lib/deplate/skeletons.rb +122 -0
- data/lib/deplate/structured.rb +164 -106
- data/lib/deplate/template.rb +67 -43
- data/lib/deplate/templates/html-doc.html +0 -0
- data/lib/deplate/templates/html-left-tabbar-js.html +0 -0
- data/lib/deplate/templates/html-left-tabbar.html +0 -0
- data/lib/deplate/templates/html-tabbar-right-pcomments.php +22 -0
- data/lib/deplate/templates/html-tabbar-right-step.html +24 -0
- data/lib/deplate/templates/html-tabbar-right-table.html +0 -0
- data/lib/deplate/templates/html-tabbar-right.html +2 -4
- data/lib/deplate/templates/html-tabbar-top.html +0 -9
- data/lib/deplate/templates/html-tabbar.html +0 -0
- data/lib/deplate/variables.rb +127 -0
- data/lib/deplate/wiki-markup.rb +99 -33
- data/lib/deplate/xml.rb +18 -18
- data/lib/deplate/zh-cn.rb +0 -0
- data/lib/ps2ppm.rb +0 -0
- data/man/man1/deplate.1 +564 -474
- metadata +201 -186
data/lib/deplate/elements.rb
CHANGED
@@ -3,14 +3,15 @@
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
5
5
|
# @Created: 26-M�r-2004.
|
6
|
-
# @Last Change:
|
7
|
-
# @Revision: 0.
|
6
|
+
# @Last Change: 07-Jun-2006.
|
7
|
+
# @Revision: 0.4285
|
8
8
|
|
9
|
+
require "deplate/abstract-class"
|
9
10
|
|
10
11
|
class Deplate::DontFormatException < Exception
|
11
12
|
end
|
12
13
|
|
13
|
-
Deplate::CaptionDef = Struct.new('DeplateCaptionDef', :elt, :args)
|
14
|
+
Deplate::CaptionDef = Struct.new('DeplateCaptionDef', :elt, :args, :source)
|
14
15
|
|
15
16
|
# Deplate::Elements are text entities at line or paragraph level.
|
16
17
|
class Deplate::Element < Deplate::BaseElement
|
@@ -18,15 +19,16 @@ class Deplate::Element < Deplate::BaseElement
|
|
18
19
|
|
19
20
|
@@accumulate_pre = {}
|
20
21
|
@@accumulate_post = {}
|
21
|
-
|
22
|
+
|
22
23
|
#### attached labels
|
23
24
|
attr_accessor :label
|
24
25
|
#### an attached caption (for Table etc.)
|
25
|
-
|
26
|
+
attr_reader :caption
|
27
|
+
attr_accessor :captionOptions
|
26
28
|
#### is this element in one-line format?
|
27
29
|
attr_accessor :multiliner
|
28
30
|
#### end pattern
|
29
|
-
attr_reader
|
31
|
+
attr_reader :endRx
|
30
32
|
#### the element's level of indentation or whatever
|
31
33
|
attr_accessor :level_heading, :top_heading_idx
|
32
34
|
#### an array of deferred formatting blocks
|
@@ -37,22 +39,19 @@ class Deplate::Element < Deplate::BaseElement
|
|
37
39
|
attr_accessor :registered_metadata
|
38
40
|
|
39
41
|
attr_reader :line_cont
|
42
|
+
attr_reader :embedable
|
40
43
|
|
41
44
|
# class methods & variables
|
42
45
|
class << self
|
43
|
-
# the regular expression for this class
|
44
|
-
attr_reader :rx
|
45
|
-
attr_reader :labelling
|
46
|
-
|
47
46
|
def match(text)
|
48
|
-
return
|
47
|
+
return self.rx.match(text)
|
49
48
|
end
|
50
49
|
|
51
50
|
def elements
|
52
51
|
return @@elements
|
53
52
|
end
|
54
53
|
|
55
|
-
def is_volatile?(match)
|
54
|
+
def is_volatile?(match, input)
|
56
55
|
false
|
57
56
|
end
|
58
57
|
|
@@ -60,14 +59,6 @@ class Deplate::Element < Deplate::BaseElement
|
|
60
59
|
@@elements << c
|
61
60
|
end
|
62
61
|
|
63
|
-
def set_labelling(val=true)
|
64
|
-
@labelling = val
|
65
|
-
end
|
66
|
-
|
67
|
-
def set_name(name)
|
68
|
-
@name=name
|
69
|
-
end
|
70
|
-
|
71
62
|
def accumulate(src, array, deplate, text, match, *args)
|
72
63
|
Deplate::Core.log(["New element", self.name, text], :debug)
|
73
64
|
e = self.new(deplate, src, text, match, *args)
|
@@ -90,10 +81,21 @@ class Deplate::Element < Deplate::BaseElement
|
|
90
81
|
@@accumulate_post[klass] = hooks
|
91
82
|
end
|
92
83
|
|
93
|
-
def do_accumulate(src, array, deplate, *args)
|
94
|
-
run_accumulation_hooks(@@accumulate_pre[self], src, array, deplate, *args)
|
95
|
-
|
96
|
-
|
84
|
+
def do_accumulate(src, array, deplate, text, *args)
|
85
|
+
run_accumulation_hooks(@@accumulate_pre[self], src, array, deplate, text, *args)
|
86
|
+
top = array.last
|
87
|
+
accumulate(src, array, deplate, text, *args)
|
88
|
+
indentation = text.gsub(/^(\s*).*$/, '\\1')
|
89
|
+
shiftwidth = deplate.variables['tabWidth']
|
90
|
+
shiftwidth = shiftwidth ? shiftwidth.to_i : 4
|
91
|
+
indent_level = indentation.size / shiftwidth
|
92
|
+
i = -1
|
93
|
+
while ((e = array[i]) and (!top or e != top))
|
94
|
+
e.indentation = indentation
|
95
|
+
e.indentation_level = indent_level
|
96
|
+
i -= 1
|
97
|
+
end
|
98
|
+
run_accumulation_hooks(@@accumulate_post[self], src, array, deplate, text, *args)
|
97
99
|
end
|
98
100
|
|
99
101
|
def run_accumulation_hooks(all_hooks, src, array, deplate, *args)
|
@@ -113,18 +115,20 @@ class Deplate::Element < Deplate::BaseElement
|
|
113
115
|
|
114
116
|
def get_date(arg, args)
|
115
117
|
case arg
|
116
|
-
when
|
118
|
+
when 'now', '', nil
|
117
119
|
return Time.new.asctime
|
118
|
-
when
|
119
|
-
return Time.new.strftime(
|
120
|
-
when
|
121
|
-
return Time.new.strftime(
|
122
|
-
when
|
123
|
-
return Time.new.strftime(
|
124
|
-
when
|
125
|
-
return Time.new.strftime(
|
126
|
-
when
|
127
|
-
return
|
120
|
+
when 'time'
|
121
|
+
return Time.new.strftime('%X')
|
122
|
+
when 'today'
|
123
|
+
return Time.new.strftime('%d. %b %Y')
|
124
|
+
when 'month'
|
125
|
+
return Time.new.strftime('%B %Y')
|
126
|
+
when 'year'
|
127
|
+
return Time.new.strftime('%Y')
|
128
|
+
when 'none', 'nil'
|
129
|
+
return ''
|
130
|
+
# when '', nil
|
131
|
+
# return ''
|
128
132
|
else
|
129
133
|
return Time.new.strftime(arg)
|
130
134
|
end
|
@@ -133,19 +137,24 @@ class Deplate::Element < Deplate::BaseElement
|
|
133
137
|
|
134
138
|
def initialize(deplate, src, text, match, *args)
|
135
139
|
super(deplate)
|
140
|
+
@multiliner = false
|
136
141
|
@source = src
|
137
142
|
@text = text
|
138
143
|
@match = match
|
139
144
|
@endRx = nil
|
140
145
|
@fmx = nil
|
141
146
|
@label = []
|
142
|
-
@collapse =
|
147
|
+
@collapse = false
|
143
148
|
@caption = nil
|
144
149
|
@container = nil
|
145
150
|
@line_cont = true
|
151
|
+
@embedable = true
|
146
152
|
@postponed_format = []
|
147
153
|
@postponed_preformat = []
|
148
154
|
@registered_metadata = []
|
155
|
+
|
156
|
+
@level = get_level if respond_to?(:get_level)
|
157
|
+
@accum = respond_to?(:get_text) ? [get_text] : []
|
149
158
|
|
150
159
|
set_instance_top
|
151
160
|
|
@@ -177,9 +186,9 @@ class Deplate::Element < Deplate::BaseElement
|
|
177
186
|
if lab
|
178
187
|
for l in lab.compact
|
179
188
|
# or @deplate.label_aliases.include?(l)
|
180
|
-
|
189
|
+
if anyway or !@label.include?(l)
|
181
190
|
@label << l
|
182
|
-
@deplate.add_label(self, l,
|
191
|
+
@deplate.add_label(self, l, level_as_string, :anyway => anyway)
|
183
192
|
end
|
184
193
|
end
|
185
194
|
end
|
@@ -210,8 +219,10 @@ class Deplate::Element < Deplate::BaseElement
|
|
210
219
|
@accum << line
|
211
220
|
end
|
212
221
|
|
213
|
-
|
214
|
-
|
222
|
+
def_abstract :push_match
|
223
|
+
|
224
|
+
def to_be_continued?(line, klass, match)
|
225
|
+
klass.nil? && @multiliner
|
215
226
|
end
|
216
227
|
|
217
228
|
# compile the accumulated lines in @accum & put the result into @elt
|
@@ -229,33 +240,42 @@ class Deplate::Element < Deplate::BaseElement
|
|
229
240
|
if @deplate.options.keep_whitespace
|
230
241
|
return accum.join("\n")
|
231
242
|
else
|
232
|
-
return accum.join(
|
243
|
+
return accum.collect {|l| l.strip}.join(' ')
|
233
244
|
end
|
234
245
|
end
|
235
246
|
|
236
247
|
def process
|
237
248
|
process_etc
|
238
249
|
process_particles do |e|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
250
|
+
printable_particles(e)
|
251
|
+
end
|
252
|
+
return self
|
253
|
+
end
|
254
|
+
|
255
|
+
def printable_particles(e)
|
256
|
+
if e.kind_of?(String)
|
257
|
+
### <+TBD+> This actually is more of an error and shouldn't be
|
258
|
+
e
|
259
|
+
else
|
260
|
+
rv = e.collect do |p|
|
261
|
+
case p
|
262
|
+
when Array
|
263
|
+
printable_particles(p)
|
264
|
+
else
|
244
265
|
# <+TBD+> begin
|
245
266
|
# p.container = self
|
246
267
|
p.process
|
247
268
|
# rescue Exception => e
|
248
|
-
|
249
|
-
|
269
|
+
# puts e.backtrace.join("\n")
|
270
|
+
# raise
|
250
271
|
# end
|
251
272
|
p.elt
|
252
273
|
end
|
253
|
-
@deplate.join_particles(rv)
|
254
274
|
end
|
275
|
+
@deplate.join_particles(rv)
|
255
276
|
end
|
256
|
-
return self
|
257
277
|
end
|
258
|
-
|
278
|
+
|
259
279
|
def print
|
260
280
|
unless @args['swallow']
|
261
281
|
for block in @postponed_preformat
|
@@ -271,7 +291,18 @@ class Deplate::Element < Deplate::BaseElement
|
|
271
291
|
def format_current(formatting_method=nil)
|
272
292
|
formatting_method ||= self.class.formatter
|
273
293
|
if formatting_method
|
274
|
-
|
294
|
+
case formatting_method
|
295
|
+
when Array
|
296
|
+
for fm in formatting_method
|
297
|
+
@elt = format_element(fm, self)
|
298
|
+
end
|
299
|
+
elt = @elt
|
300
|
+
when Symbol
|
301
|
+
elt = format_element(formatting_method, self)
|
302
|
+
else
|
303
|
+
log(['Internal error', 'format_current', self.class.name, formatting_method],
|
304
|
+
:error)
|
305
|
+
end
|
275
306
|
elsif self.respond_to?(:format_special)
|
276
307
|
elt = format_special
|
277
308
|
else
|
@@ -308,12 +339,12 @@ class Deplate::Element < Deplate::BaseElement
|
|
308
339
|
|
309
340
|
def label_accum(out, formatting_method)
|
310
341
|
fmt = @deplate.formatter
|
311
|
-
if fmt.label_once.include?(formatting_method)
|
342
|
+
if formatting_method and fmt.label_once.include?(formatting_method)
|
312
343
|
l = format_element(:format_label, self, :once)
|
313
344
|
out.unshift(l) unless l.empty?
|
314
345
|
elsif fmt.label_delegate.include?(formatting_method)
|
315
346
|
else
|
316
|
-
case label_mode || fmt.label_mode
|
347
|
+
case self.label_mode || fmt.label_mode
|
317
348
|
when :once
|
318
349
|
l = format_element(:format_label, self, :once)
|
319
350
|
out.unshift(l) unless l.empty?
|
@@ -323,7 +354,7 @@ class Deplate::Element < Deplate::BaseElement
|
|
323
354
|
when :after
|
324
355
|
l = format_element(:format_label, self, :after)
|
325
356
|
out.push(l) unless l.empty?
|
326
|
-
when :delegate, :self
|
357
|
+
when :delegate, :self, :none
|
327
358
|
else
|
328
359
|
lb = format_element(:format_label, self, :before)
|
329
360
|
la = format_element(:format_label, self, :after)
|
@@ -350,18 +381,63 @@ class Deplate::Element < Deplate::BaseElement
|
|
350
381
|
end
|
351
382
|
|
352
383
|
def register_caption
|
353
|
-
log(["Can't attach caption to", self.class.name], :error)
|
384
|
+
# log(["Can't attach caption to", self.class.name], :error)
|
385
|
+
end
|
386
|
+
|
387
|
+
def set_caption(captiondef, quiet=false)
|
388
|
+
if @caption
|
389
|
+
log('Element already has a caption', :error) unless quiet
|
390
|
+
else
|
391
|
+
self.level_as_string = @deplate.get_current_heading
|
392
|
+
captiondef.elt = @deplate.parse_with_source(captiondef.source,
|
393
|
+
captiondef.elt,
|
394
|
+
false)
|
395
|
+
@caption = captiondef
|
396
|
+
if respond_to?(:register_caption)
|
397
|
+
register_caption
|
398
|
+
end
|
399
|
+
end
|
354
400
|
end
|
355
401
|
|
356
402
|
def to_plain_text
|
357
403
|
@accum.join("\n")
|
358
404
|
end
|
405
|
+
|
406
|
+
def element_caption
|
407
|
+
@caption ? @caption.elt : elt_as_caption
|
408
|
+
end
|
359
409
|
|
410
|
+
def elt_as_caption
|
411
|
+
@elt
|
412
|
+
end
|
413
|
+
|
414
|
+
def register_in_listing(list, args={})
|
415
|
+
@deplate.options.listings.push(list, self)
|
416
|
+
|
417
|
+
en = @deplate.options.listings.get_prop(list, 'entity') || list
|
418
|
+
# nn = @deplate.get_numbering_mode(en, 2)
|
419
|
+
# nn = nil if nn == 0
|
420
|
+
cn = @deplate.options.listings.get_prop(list, 'counter') || list
|
421
|
+
# self.level_as_string = @deplate.options.counters.increase(cn, :to_s => true, :level => nn)
|
422
|
+
self.level_as_string = @deplate.options.counters.increase(cn, :to_s => true)
|
423
|
+
prefix = @deplate.options.listings.get_prop(list, 'prefix') || list
|
424
|
+
label = @deplate.elt_label(prefix, level_as_string)
|
425
|
+
@label << label
|
426
|
+
@args[:id] ||= label
|
427
|
+
|
428
|
+
@registered_metadata << @deplate.get_metadata(@source,
|
429
|
+
'type' => list,
|
430
|
+
'name' => element_caption,
|
431
|
+
'id' => get_id
|
432
|
+
)
|
433
|
+
end
|
434
|
+
|
360
435
|
protected
|
361
436
|
def process_etc
|
362
|
-
if !@caption and @args[
|
363
|
-
caption
|
364
|
-
|
437
|
+
if !@caption and @args['caption']
|
438
|
+
log(['DEBUG: Too late: Add caption', @args['caption']], :error)
|
439
|
+
caption = @deplate.parse(self, @args['caption'])
|
440
|
+
set_caption(Deplate::CaptionDef.new(caption, @args, @source))
|
365
441
|
end
|
366
442
|
if defined?(@caption) && @caption
|
367
443
|
elt = @caption.elt.collect {|p| p.process; p.elt}
|
@@ -376,19 +452,32 @@ class Deplate::Element < Deplate::BaseElement
|
|
376
452
|
end
|
377
453
|
|
378
454
|
def unify_props(other)
|
379
|
-
|
455
|
+
if !level_as_string and other.level_as_string
|
456
|
+
self.level_as_string = other.level_as_string
|
457
|
+
end
|
458
|
+
l = [other.args['id'], other.args[:id], *other.label]
|
459
|
+
l.compact!
|
460
|
+
l.uniq!
|
461
|
+
put_label(l, true)
|
380
462
|
@args.update(other.args)
|
463
|
+
# p "DBG", self.class, other.class, @args.keys, other.args.keys
|
381
464
|
@level ||= other.level
|
382
|
-
@caption ||= other.caption
|
383
|
-
@captionOptions ||= other.captionOptions
|
384
465
|
@source.begin ||= other.source.begin
|
385
466
|
@source.end = other.source.end if other.source.end
|
467
|
+
@indentation ||= other.indentation
|
468
|
+
@indentation_level ||= other.indentation_level
|
469
|
+
@captionOptions ||= other.captionOptions
|
470
|
+
if !@caption
|
471
|
+
cap = @args['caption']
|
472
|
+
if cap
|
473
|
+
set_caption(Deplate::CaptionDef.new(cap, @args, @source))
|
474
|
+
elsif other.caption
|
475
|
+
@caption = other.caption
|
476
|
+
end
|
477
|
+
end
|
386
478
|
if other.styles
|
387
479
|
update_styles(other.styles)
|
388
480
|
end
|
389
|
-
if !level_as_string and other.level_as_string
|
390
|
-
self.level_as_string = other.level_as_string
|
391
|
-
end
|
392
481
|
end
|
393
482
|
|
394
483
|
def unify_elt(other)
|
@@ -401,7 +490,8 @@ class Deplate::Element < Deplate::BaseElement
|
|
401
490
|
|
402
491
|
def container=(element)
|
403
492
|
@container = element
|
404
|
-
@args = element.args
|
493
|
+
# @args = element.args
|
494
|
+
@args.update(element.args)
|
405
495
|
@postponed_format = element.postponed_format
|
406
496
|
@postponed_preformat = element.postponed_preformat
|
407
497
|
end
|
@@ -433,86 +523,305 @@ class Deplate::Element < Deplate::BaseElement
|
|
433
523
|
if @elt
|
434
524
|
@elt = (@elt.collect(&block)).join
|
435
525
|
else
|
436
|
-
log(["Internal error:
|
526
|
+
log(["Internal error: No @elt", self.class], :error)
|
437
527
|
@elt = ""
|
438
528
|
end
|
439
529
|
end
|
440
530
|
alias process_elements process_particles
|
441
531
|
|
442
532
|
def register_figure
|
443
|
-
|
444
|
-
@deplate.current_figure += 1
|
445
|
-
@level_as_string = [@deplate.current_heading[0], @deplate.current_figure].join(".")
|
446
|
-
@label << @deplate.elt_label("fig", @level_as_string)
|
533
|
+
register_in_listing('lof')
|
447
534
|
end
|
448
535
|
|
449
536
|
def register_table
|
450
|
-
|
451
|
-
@deplate.current_table += 1
|
452
|
-
@level_as_string = [@deplate.current_heading[0], @deplate.current_table].join(".")
|
453
|
-
@label << @deplate.elt_label("tab", @level_as_string)
|
537
|
+
register_in_listing('lot')
|
454
538
|
end
|
455
539
|
end
|
456
540
|
|
541
|
+
|
457
542
|
class Deplate::Element::Comment < Deplate::Element
|
458
543
|
register_element
|
459
|
-
set_rx(/^\s*(%+)[
|
460
|
-
|
544
|
+
set_rx(/^\s*(%+)[[:blank:]]*(.*)$/)
|
545
|
+
def_get :level, lambda {@match[1].size}
|
546
|
+
def_get :text, 2
|
547
|
+
|
461
548
|
# disappear
|
462
549
|
def self.accumulate(src, array, deplate, text, match)
|
463
550
|
Deplate::Core.log(["Hide comment", text], :debug)
|
464
551
|
end
|
465
552
|
|
466
553
|
def setup
|
467
|
-
@
|
554
|
+
@collapse = true
|
555
|
+
end
|
556
|
+
end
|
557
|
+
|
558
|
+
|
559
|
+
class Deplate::Element::Note < Deplate::Element
|
560
|
+
register_element
|
561
|
+
set_formatter :format_note
|
562
|
+
set_rx(/^([[:blank:]]+)([#!?+]{3,3})\s+(.*)$/)
|
563
|
+
def_get :level, lambda {expand_tab(@match[1]).size}
|
564
|
+
def_get :marker, lambda {@match[2][0..0]}
|
565
|
+
def_get :text, 3
|
566
|
+
|
567
|
+
attr_reader :marker
|
568
|
+
|
569
|
+
def setup
|
570
|
+
@multiliner = true
|
571
|
+
@marker = get_marker
|
572
|
+
end
|
573
|
+
|
574
|
+
def to_be_continued?(line, klass, match)
|
575
|
+
indent = get_indent(line).size
|
576
|
+
return indent >= @level
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
|
581
|
+
Deplate::ListItem = Struct.new('DeplateListItem', :item, :body, :listtype, :type,
|
582
|
+
:level, :max, :explicit, :label, :style, :opts,
|
583
|
+
:preformatted)
|
584
|
+
|
585
|
+
class Deplate::List < Deplate::Element
|
586
|
+
set_formatter :format_list
|
587
|
+
class_attribute :listtype
|
588
|
+
# class_attribute :not_embedable, []
|
589
|
+
|
590
|
+
def_get :opts
|
591
|
+
def_get :level, lambda {expand_tab(@match[2]).size}
|
592
|
+
def_get :level_max, lambda {expand_tab(@match[1]).size}
|
593
|
+
def_get :item, 3
|
594
|
+
def_get :text, 4
|
595
|
+
|
596
|
+
attr_reader :levelRange, :item, :oitem
|
597
|
+
|
598
|
+
def setup
|
599
|
+
@multiliner = true
|
468
600
|
@collapse = true
|
469
|
-
@
|
470
|
-
|
601
|
+
@itemopts = get_opts
|
602
|
+
if self.instance_of?(Deplate::List::Description)
|
603
|
+
@levelMax = @level + (@deplate.variables["tabwidth"] || 4)
|
604
|
+
else
|
605
|
+
@levelMax = get_level_max
|
606
|
+
end
|
607
|
+
@oitem = @item = get_item
|
471
608
|
end
|
472
609
|
|
473
|
-
def
|
474
|
-
|
610
|
+
def collapsable?(other)
|
611
|
+
if other.kind_of?(Deplate::List)
|
612
|
+
return true
|
613
|
+
elsif other.kind_of?(Deplate::Element::Paragraph)
|
614
|
+
return @elt.find do |i|
|
615
|
+
continuation_level_ok?(other.level, i.level, i.max)
|
616
|
+
end
|
617
|
+
elsif other.kind_of?(Deplate::Element::Whitespace)
|
618
|
+
return true
|
619
|
+
elsif indentation_level_ok?(other) and other.embedable
|
620
|
+
# and !self.class.not_embedable.include?(other.class)
|
621
|
+
return true
|
622
|
+
else
|
623
|
+
return false
|
624
|
+
end
|
625
|
+
end
|
626
|
+
|
627
|
+
def unify_now(other)
|
628
|
+
if other.kind_of?(Deplate::Element::Paragraph)
|
629
|
+
@elt << Deplate::ListItem.new([], other.elt.flatten, @elt.last.listtype,
|
630
|
+
"Paragraph", other.level, other.level,
|
631
|
+
other.is_explicit?, other.label,
|
632
|
+
other.class.name)
|
633
|
+
other.label = []
|
634
|
+
unify_props(other)
|
635
|
+
elsif other.kind_of?(Deplate::Element::Whitespace)
|
636
|
+
elsif other.kind_of?(Deplate::List)
|
637
|
+
super
|
638
|
+
else
|
639
|
+
e = @elt.last
|
640
|
+
unless e.type == 'Container' and e.body.unify(other)
|
641
|
+
# unify_props(other)
|
642
|
+
l = other.level
|
643
|
+
unless l
|
644
|
+
l = e.level if e
|
645
|
+
l ||= level
|
646
|
+
end
|
647
|
+
@elt << Deplate::ListItem.new([], other, @elt.last.listtype,
|
648
|
+
"Container", l, l,
|
649
|
+
other.is_explicit?, other.label,
|
650
|
+
other.class.name)
|
651
|
+
end
|
652
|
+
end
|
475
653
|
end
|
476
654
|
|
477
|
-
def
|
478
|
-
|
655
|
+
def to_be_continued?(line, klass, match)
|
656
|
+
linelevel = get_indent(line).size
|
657
|
+
klass.nil? && continuation_level_ok?(linelevel, @level, @levelMax)
|
658
|
+
end
|
659
|
+
|
660
|
+
def continuation_level_ok?(otherLevel, thisLevel, thisMaxLevel)
|
661
|
+
# return thisLevel <= otherLevel && otherLevel <= thisMaxLevel
|
662
|
+
return thisLevel <= otherLevel
|
663
|
+
end
|
664
|
+
|
665
|
+
def indentation_level_ok?(other)
|
666
|
+
return indentation <= other.indentation
|
667
|
+
end
|
668
|
+
|
669
|
+
def finish
|
670
|
+
finish_item
|
671
|
+
finish_elt
|
672
|
+
@label = []
|
673
|
+
return self
|
674
|
+
end
|
675
|
+
|
676
|
+
def finish_item
|
677
|
+
@item = @deplate.parse(self, @item)
|
678
|
+
end
|
679
|
+
|
680
|
+
def finish_elt
|
681
|
+
accum = @deplate.parse(self, @accum.join(" "))
|
682
|
+
type = self.class.listtype
|
683
|
+
@elt = [Deplate::ListItem.new(@item, accum, type, type, @level,
|
684
|
+
@levelMax, is_explicit?, @label,
|
685
|
+
type, @itemopts)]
|
686
|
+
end
|
687
|
+
|
688
|
+
def process_particles(&block)
|
689
|
+
@elt.each do |e|
|
690
|
+
e.item = block.call(e.item)
|
691
|
+
case e.type
|
692
|
+
when 'Container'
|
693
|
+
# <+TBD+> This doesn't work for all elements (e.g.
|
694
|
+
# volatile elements)
|
695
|
+
# e.body.process_particles(&block)
|
696
|
+
e.body = e.body.process
|
697
|
+
else
|
698
|
+
e.body = block.call(e.body)
|
699
|
+
end
|
700
|
+
end
|
701
|
+
end
|
702
|
+
end
|
703
|
+
|
704
|
+
|
705
|
+
class Deplate::List::Ordered < Deplate::List
|
706
|
+
register_element
|
707
|
+
set_rx(/^(([[:blank:]]+)([0-9]+\.|[#\@?]\.?|[a-zA-Z?]\.)[[:blank:]]+)(.+)$/)
|
708
|
+
self.listtype = "Ordered"
|
709
|
+
|
710
|
+
def is_explicit?
|
711
|
+
if @oitem =~ /^[0-9a-zA-Z]+\.$/
|
712
|
+
return true
|
713
|
+
else
|
714
|
+
return false
|
715
|
+
end
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
|
720
|
+
class Deplate::List::Itemize < Deplate::List
|
721
|
+
register_element
|
722
|
+
set_rx(/^(([[:blank:]]+)([-�+*])[[:blank:]]+)(.+)$/)
|
723
|
+
self.listtype = "Itemize"
|
724
|
+
end
|
725
|
+
|
726
|
+
|
727
|
+
class Deplate::List::Description < Deplate::List
|
728
|
+
register_element
|
729
|
+
set_rx(/^(([[:blank:]]+)(.+?)[[:blank:]]+::[[:blank:]])(.*)$/)
|
730
|
+
self.listtype = "Description"
|
731
|
+
end
|
732
|
+
|
733
|
+
|
734
|
+
class Deplate::List::Task < Deplate::List
|
735
|
+
register_element
|
736
|
+
set_rx(/^(([[:blank:]]+)#(([0-9][A-Z]?|[A-Z][0-9]?)[[:blank:]]+(_|x|x?[0-9-]+%?)|(_|x|x?[0-9-]+%?)[[:blank:]]+([0-9][A-Z]?|[A-Z][0-9]?)))[[:blank:]]+(.*)$/)
|
737
|
+
self.listtype = 'Task'
|
738
|
+
def_get :item, lambda {[@itemopts[:priority], @itemopts[:category]].join}
|
739
|
+
def_get :text, 8
|
740
|
+
|
741
|
+
attr_accessor :task
|
742
|
+
|
743
|
+
def finish_item
|
744
|
+
# @item = @deplate.parse(self, @item)
|
745
|
+
end
|
746
|
+
|
747
|
+
def get_opts
|
748
|
+
if defined?(@task) and @task
|
749
|
+
return @task
|
750
|
+
end
|
751
|
+
|
752
|
+
item = @match[3]
|
753
|
+
rv = {}
|
754
|
+
type, due = item.split(/\s+/)
|
755
|
+
if type =~ /^(_|x|x?[\d-]+%?)$/
|
756
|
+
type, due = due, type
|
757
|
+
end
|
758
|
+
|
759
|
+
if type =~ /^([0-9])([A-Z]?)$/
|
760
|
+
rv[:priority] = $1
|
761
|
+
rv[:category] = $2 unless $2.empty?
|
762
|
+
elsif type =~ /^([A-Z])([0-9]?)$/
|
763
|
+
rv[:priority] = $2
|
764
|
+
rv[:category] = $1 unless $1.empty?
|
765
|
+
else
|
766
|
+
log(['Invalid task item', item], :error)
|
767
|
+
end
|
768
|
+
|
769
|
+
if due =~ /^\s*x/
|
770
|
+
rv[:done] = true
|
771
|
+
end
|
772
|
+
if due =~ /^\s*x?([0-9-]+%?)/
|
773
|
+
# rv[:due] = ParseDate::parsedate($1, true)
|
774
|
+
rv[:due] = $1
|
775
|
+
end
|
776
|
+
|
777
|
+
rv
|
479
778
|
end
|
480
779
|
end
|
481
780
|
|
781
|
+
|
482
782
|
class Deplate::Element::Region < Deplate::Element
|
483
783
|
register_element
|
484
784
|
set_rx(/^(\s*)#([A-Z]([a-z][A-Za-z]*)?)\b(.*)(\<\<(.+)|:)\s*$/)
|
485
|
-
@rxi_name = 2
|
486
|
-
@rxi_args = 4
|
487
|
-
@rxi_endrx = 6
|
488
|
-
@rxi_indent = 1
|
489
785
|
|
490
|
-
|
786
|
+
class_attribute :rxi_indent, 1
|
787
|
+
class_attribute :rxi_name, 2
|
788
|
+
class_attribute :rxi_args, 4
|
789
|
+
class_attribute :rxi_endrx, 6
|
491
790
|
|
492
|
-
|
493
|
-
|
791
|
+
def_get :name, lambda {@match[self.class.rxi_name]}
|
792
|
+
def_get :args, lambda {@match[self.class.rxi_args]}
|
793
|
+
def_get :indent, lambda {@match[self.class.rxi_indent]}
|
794
|
+
def_get :endrx, lambda {
|
795
|
+
i = self.class.rxi_endrx
|
796
|
+
if @match[i - 1] == ":"
|
797
|
+
/^(#{get_indent})?#End\s*$/
|
798
|
+
else
|
799
|
+
erx = @match[i]
|
800
|
+
if erx
|
801
|
+
/^(#{get_indent})?#{Regexp.escape(erx)}\s*$/
|
802
|
+
end
|
803
|
+
end
|
804
|
+
}
|
494
805
|
|
806
|
+
class << self
|
495
807
|
def pseudo_match(args)
|
496
|
-
[
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
nil, #5
|
503
|
-
args[:endrx], #6
|
504
|
-
]
|
808
|
+
rv = []
|
809
|
+
rv[rxi_indent] = args[:indent]
|
810
|
+
rv[rxi_args] = args[:args]
|
811
|
+
rv[rxi_name] = args[:name]
|
812
|
+
rv[rxi_endrx] = args[:endrx]
|
813
|
+
rv
|
505
814
|
end
|
506
815
|
end
|
816
|
+
|
817
|
+
attr_reader :specified, :regNote, :name
|
507
818
|
|
508
819
|
def setup(name=nil)
|
509
820
|
@multiliner = true
|
510
821
|
@endRx = get_endrx
|
511
|
-
@accum = []
|
512
822
|
@name = name || get_name
|
513
823
|
begin
|
514
824
|
@args, @regNote = @deplate.input.parse_args(get_args)
|
515
|
-
@collapse = false
|
516
825
|
region = @deplate.input.regions[@name]
|
517
826
|
unless region
|
518
827
|
if @deplate.formatter.matches?(@name)
|
@@ -529,96 +838,37 @@ class Deplate::Element::Region < Deplate::Element
|
|
529
838
|
region = Deplate::Regions::UNKNOWN
|
530
839
|
end
|
531
840
|
@specified = region.new(@deplate, @source, @text, @match, self)
|
532
|
-
@specified.indent = get_indent
|
533
841
|
@line_cont = region.line_cont
|
534
842
|
# @deplate.register_id(@args, @specified)
|
535
843
|
@deplate.register_id(@args, self)
|
536
844
|
end
|
537
845
|
|
538
|
-
def get_name
|
539
|
-
@match[self.class.rxi_name]
|
540
|
-
end
|
541
|
-
|
542
|
-
def get_args
|
543
|
-
@match[self.class.rxi_args]
|
544
|
-
end
|
545
|
-
|
546
|
-
def get_endrx
|
547
|
-
i = self.class.rxi_endrx
|
548
|
-
if @match[i - 1] == ":"
|
549
|
-
/^(#{get_indent})?#End\s*$/
|
550
|
-
else
|
551
|
-
erx = @match[i]
|
552
|
-
if erx
|
553
|
-
/^(#{get_indent})?#{Regexp.escape(erx)}\s*$/
|
554
|
-
end
|
555
|
-
end
|
556
|
-
end
|
557
|
-
|
558
|
-
def get_indent
|
559
|
-
@match[self.class.rxi_indent]
|
560
|
-
end
|
561
|
-
|
562
846
|
def finish
|
847
|
+
update_region
|
563
848
|
return @specified.finish
|
564
849
|
end
|
565
|
-
end
|
566
850
|
|
567
|
-
|
568
|
-
|
569
|
-
# attr_accessor :prototype
|
570
|
-
|
571
|
-
def initialize(acc, deplate, source)
|
572
|
-
super(deplate)
|
573
|
-
@acc = acc
|
574
|
-
@elt = nil
|
575
|
-
@source = source
|
576
|
-
@invoker = nil
|
577
|
-
@is_template = false
|
578
|
-
@prototype = nil
|
851
|
+
def finished?
|
852
|
+
@specified.finished?
|
579
853
|
end
|
580
854
|
|
581
|
-
def
|
582
|
-
|
583
|
-
|
584
|
-
@prototype.args.update(@args) if @prototype
|
585
|
-
end
|
586
|
-
unless @elt
|
587
|
-
@elt = @acc.collect{|p| p.process; p.elt}
|
588
|
-
@elt = @deplate.join_particles(@elt)
|
589
|
-
end
|
590
|
-
return self
|
591
|
-
end
|
592
|
-
|
593
|
-
def format_clip(invoker, expected)
|
594
|
-
unless @elt
|
595
|
-
log("We shouldn't be here. If you can track down when this happens, please send an example to the author.", :anyway)
|
596
|
-
process
|
597
|
-
end
|
598
|
-
if @elt
|
599
|
-
@prototype.match_expected(expected, invoker)
|
600
|
-
else
|
601
|
-
log("Clip is nil, which is quite strange and most likely deplate's error but as I haven't had the time yet to track this down this error still occurs.", :error)
|
602
|
-
end
|
603
|
-
@elt
|
604
|
-
end
|
605
|
-
|
606
|
-
def print
|
607
|
-
output(@elt)
|
855
|
+
def update_region
|
856
|
+
@specified.indentation = indentation
|
857
|
+
@specified.indent = get_indent
|
608
858
|
end
|
609
859
|
end
|
610
860
|
|
861
|
+
|
611
862
|
class Deplate::Element::Command < Deplate::Element
|
612
863
|
register_element
|
613
|
-
set_rx
|
864
|
+
set_rx(/^\s*#([A-Z]+)((\s[^:]+)?(:\s*(.+?)\s*)?)$/)
|
614
865
|
attr :name
|
615
866
|
|
616
867
|
class << self
|
617
|
-
def is_volatile?(match)
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
true
|
868
|
+
def is_volatile?(match, input)
|
869
|
+
cmd = input.commands[match[1]]
|
870
|
+
if cmd
|
871
|
+
cmd.volatile
|
622
872
|
else
|
623
873
|
false
|
624
874
|
end
|
@@ -626,15 +876,15 @@ class Deplate::Element::Command < Deplate::Element
|
|
626
876
|
|
627
877
|
def accumulate(src, array, deplate, text, match)
|
628
878
|
cmd = match[1]
|
629
|
-
Deplate::Core.log([
|
879
|
+
Deplate::Core.log(['Command', cmd, text], :debug)
|
630
880
|
begin
|
631
881
|
args, text = deplate.input.parse_args(match[2])
|
632
882
|
case cmd
|
633
|
-
when
|
883
|
+
when 'IF'
|
634
884
|
deplate.switches << !check_switch(deplate, text)
|
635
|
-
when
|
885
|
+
when 'ELSEIF'
|
636
886
|
if deplate.switches.empty?
|
637
|
-
Deplate::Core.log([
|
887
|
+
Deplate::Core.log(['ELSEIF without IF', cmd, match[0]], :error, src)
|
638
888
|
else
|
639
889
|
case deplate.switches.last
|
640
890
|
when :skip
|
@@ -646,9 +896,9 @@ class Deplate::Element::Command < Deplate::Element
|
|
646
896
|
deplate.switches << :skip
|
647
897
|
end
|
648
898
|
end
|
649
|
-
when
|
899
|
+
when 'ELSE'
|
650
900
|
if deplate.switches.empty?
|
651
|
-
Deplate::Core.log([
|
901
|
+
Deplate::Core.log(['ELSE without IF', cmd, match[0]], :error, src)
|
652
902
|
else
|
653
903
|
case deplate.switches.last
|
654
904
|
when :skip
|
@@ -659,9 +909,9 @@ class Deplate::Element::Command < Deplate::Element
|
|
659
909
|
deplate.switches << :skip
|
660
910
|
end
|
661
911
|
end
|
662
|
-
when
|
912
|
+
when 'ENDIF'
|
663
913
|
if deplate.switches.empty?
|
664
|
-
Deplate::Core.log([
|
914
|
+
Deplate::Core.log(['ENDIF without IF', cmd, match[0]], :error, src)
|
665
915
|
else
|
666
916
|
deplate.switches.pop
|
667
917
|
end
|
@@ -671,12 +921,12 @@ class Deplate::Element::Command < Deplate::Element
|
|
671
921
|
if cc
|
672
922
|
cc.do_accumulate(src, array, deplate, text, match, args, cmd)
|
673
923
|
else
|
674
|
-
Deplate::Core.log([
|
924
|
+
Deplate::Core.log(['Unknown command', cmd, match[0]], :error, src)
|
675
925
|
end
|
676
926
|
end
|
677
927
|
end
|
678
928
|
rescue Deplate::DontFormatException
|
679
|
-
Deplate::Core.log([
|
929
|
+
Deplate::Core.log(['Dropping', match[0]], nil, src)
|
680
930
|
end
|
681
931
|
end
|
682
932
|
|
@@ -694,24 +944,38 @@ class Deplate::Element::Command < Deplate::Element
|
|
694
944
|
end
|
695
945
|
val = m[4]
|
696
946
|
op = val ? m[3] : m[2]
|
697
|
-
|
698
|
-
|
947
|
+
case val
|
948
|
+
when 'true'
|
949
|
+
val = true
|
950
|
+
when 'false'
|
951
|
+
val = false
|
952
|
+
when nil
|
953
|
+
else
|
954
|
+
val = Deplate::Core.remove_backslashes(val.strip)
|
955
|
+
end
|
956
|
+
if op == '!'
|
957
|
+
switch = get_var_or_option(deplate, var)
|
958
|
+
if negate
|
959
|
+
return !switch
|
960
|
+
else
|
961
|
+
return switch
|
962
|
+
end
|
699
963
|
else
|
700
964
|
case op
|
701
|
-
when
|
965
|
+
when '==', '!='
|
702
966
|
compare = Proc.new {|a, b| a == b}
|
703
|
-
when
|
967
|
+
when '=~', '!=~'
|
704
968
|
compare = Proc.new {|a, b| a =~ Regexp.new(b)}
|
705
969
|
else
|
706
|
-
raise
|
970
|
+
raise 'Internal error'
|
707
971
|
end
|
708
972
|
case var
|
709
|
-
when
|
973
|
+
when 'fmt'
|
710
974
|
switch = compare.call(deplate.formatter.formatter_name, val)
|
711
975
|
else
|
712
976
|
switch = compare.call(get_var_or_option(deplate, var), val)
|
713
977
|
end
|
714
|
-
if op[0..0] ==
|
978
|
+
if op[0..0] == '!' or negate
|
715
979
|
return !switch
|
716
980
|
else
|
717
981
|
return switch
|
@@ -720,7 +984,7 @@ class Deplate::Element::Command < Deplate::Element
|
|
720
984
|
elsif text =~ /^\w+$/
|
721
985
|
return get_var_or_option(deplate, text)
|
722
986
|
else
|
723
|
-
Deplate::Core.log([
|
987
|
+
Deplate::Core.log(['Malformed condition', text], :error)
|
724
988
|
return true
|
725
989
|
end
|
726
990
|
end
|
@@ -731,181 +995,21 @@ class Deplate::Element::Command < Deplate::Element
|
|
731
995
|
elsif deplate.options.allow.include?(':') && key =~ /^:(.*)$/
|
732
996
|
return deplate.options.send($1)
|
733
997
|
end
|
734
|
-
Deplate::Core.log([
|
998
|
+
Deplate::Core.log(['Unknown variable or option', key])
|
735
999
|
return nil
|
736
1000
|
end
|
737
1001
|
end
|
738
1002
|
end
|
739
1003
|
|
740
|
-
class Deplate::Element::Note < Deplate::Element
|
741
|
-
register_element
|
742
|
-
set_formatter :format_note
|
743
|
-
set_rx /^([ \t]+)([#!?+]{3,3})\s+(.*)$/
|
744
|
-
|
745
|
-
attr_reader :marker
|
746
|
-
|
747
|
-
def setup
|
748
|
-
@multiliner = true
|
749
|
-
@collapse = false
|
750
|
-
@level = get_level
|
751
|
-
@marker = get_marker
|
752
|
-
@accum = [get_text]
|
753
|
-
end
|
754
|
-
|
755
|
-
def to_be_continued?(line)
|
756
|
-
indent = get_indent(line).size
|
757
|
-
return indent >= @level
|
758
|
-
end
|
759
|
-
|
760
|
-
def get_level
|
761
|
-
expand_tab(@match[1]).size
|
762
|
-
end
|
763
|
-
|
764
|
-
def get_marker
|
765
|
-
@match[2][0..0]
|
766
|
-
end
|
767
|
-
|
768
|
-
def get_text
|
769
|
-
@match[3]
|
770
|
-
end
|
771
|
-
end
|
772
|
-
|
773
|
-
Deplate::ListItem = Struct.new("DeplateListItem", :item, :body, :listtype, :type,
|
774
|
-
:level, :max, :explicit, :label, :style)
|
775
|
-
|
776
|
-
class Deplate::List < Deplate::Element
|
777
|
-
set_formatter :format_list
|
778
|
-
set_labelling
|
779
|
-
|
780
|
-
attr_reader :levelRange, :item, :oitem
|
781
|
-
|
782
|
-
class << self
|
783
|
-
attr :name
|
784
|
-
end
|
785
|
-
|
786
|
-
def setup
|
787
|
-
@multiliner = true
|
788
|
-
@collapse = true
|
789
|
-
@level = get_level
|
790
|
-
if self.instance_of?(Deplate::List::Description)
|
791
|
-
@levelMax = @level + (@deplate.variables["tabwidth"] || 4)
|
792
|
-
else
|
793
|
-
@levelMax = get_level_max
|
794
|
-
end
|
795
|
-
@oitem = @item = get_item
|
796
|
-
@accum = [get_text]
|
797
|
-
end
|
798
|
-
|
799
|
-
def get_level
|
800
|
-
expand_tab(@match[2]).size
|
801
|
-
end
|
802
|
-
|
803
|
-
def get_level_max
|
804
|
-
expand_tab(@match[1]).size
|
805
|
-
end
|
806
|
-
|
807
|
-
def get_item
|
808
|
-
@match[3]
|
809
|
-
end
|
810
|
-
|
811
|
-
def get_text
|
812
|
-
@match[4]
|
813
|
-
end
|
814
|
-
|
815
|
-
def collapsable?(other)
|
816
|
-
if other.kind_of?(Deplate::List)
|
817
|
-
return true
|
818
|
-
elsif other.kind_of?(Deplate::Element::Paragraph)
|
819
|
-
return @elt.find do |i|
|
820
|
-
continuation_level_ok?(other.level, i.level, i.max)
|
821
|
-
end
|
822
|
-
elsif other.kind_of?(Deplate::Element::Whitespace)
|
823
|
-
return true
|
824
|
-
else
|
825
|
-
return false
|
826
|
-
end
|
827
|
-
end
|
828
|
-
|
829
|
-
def unify_now(other)
|
830
|
-
if other.kind_of?(Deplate::Element::Paragraph)
|
831
|
-
@elt << Deplate::ListItem.new([], other.elt.flatten, @elt.last.listtype,
|
832
|
-
"Paragraph", other.level, other.level,
|
833
|
-
other.is_explicit?, other.label)
|
834
|
-
other.label = []
|
835
|
-
unify_props(other)
|
836
|
-
elsif other.kind_of?(Deplate::Element::Whitespace)
|
837
|
-
else
|
838
|
-
super
|
839
|
-
end
|
840
|
-
end
|
841
|
-
|
842
|
-
def to_be_continued?(line)
|
843
|
-
linelevel = get_indent(line).size
|
844
|
-
return continuation_level_ok?(linelevel, @level, @levelMax)
|
845
|
-
end
|
846
|
-
|
847
|
-
def continuation_level_ok?(otherLevel, thisLevel, thisMaxLevel)
|
848
|
-
# return thisLevel <= otherLevel && otherLevel <= thisMaxLevel
|
849
|
-
return thisLevel <= otherLevel
|
850
|
-
end
|
851
|
-
|
852
|
-
def finish
|
853
|
-
@item = @deplate.parse(self, @item)
|
854
|
-
accum = @deplate.parse(self, @accum.join(" "))
|
855
|
-
name = self.class.name
|
856
|
-
@elt = [Deplate::ListItem.new(@item, accum, name, name, @level,
|
857
|
-
@levelMax, is_explicit?, @label)]
|
858
|
-
@label = []
|
859
|
-
return self
|
860
|
-
end
|
861
|
-
|
862
|
-
def process_particles(&block)
|
863
|
-
@elt.each do |e|
|
864
|
-
e.item = block.call(e.item)
|
865
|
-
e.body = block.call(e.body)
|
866
|
-
end
|
867
|
-
end
|
868
|
-
end
|
869
|
-
|
870
|
-
class Deplate::List::Numbered < Deplate::List
|
871
|
-
register_element
|
872
|
-
set_formatter :format_list
|
873
|
-
set_rx /^(([ \t]+)([0-9]+\.|[#\@?]\.?|[a-zA-Z?]\.)[ \t]+)(.+)$/
|
874
|
-
set_name "Numbered"
|
875
|
-
|
876
|
-
def is_explicit?
|
877
|
-
if @oitem =~ /^[0-9a-zA-Z]+\.$/
|
878
|
-
return true
|
879
|
-
else
|
880
|
-
return false
|
881
|
-
end
|
882
|
-
end
|
883
|
-
end
|
884
|
-
|
885
|
-
class Deplate::List::Itemize < Deplate::List
|
886
|
-
register_element
|
887
|
-
set_formatter :format_list
|
888
|
-
set_rx /^(([ \t]+)([-�+*])[ \t]+)(.+)$/
|
889
|
-
set_name "Itemize"
|
890
|
-
end
|
891
|
-
|
892
|
-
class Deplate::List::Description < Deplate::List
|
893
|
-
register_element
|
894
|
-
set_formatter :format_list
|
895
|
-
set_rx /^(([ \t]+)(.+?)[ \t]+::[ \t])(.*)$/
|
896
|
-
set_name "Description"
|
897
|
-
end
|
898
|
-
|
899
|
-
|
900
1004
|
|
901
1005
|
class Deplate::Element::Table < Deplate::Element
|
902
1006
|
register_element
|
903
1007
|
set_formatter :format_table
|
904
|
-
set_rx
|
1008
|
+
set_rx(/^\s*(\|\|?)([[:blank:]]+.+[[:blank:]]+)\1\s*$/)
|
905
1009
|
|
906
|
-
TableRow = Struct.new(
|
1010
|
+
TableRow = Struct.new('DeplateTableRow', :high, :cols, :head, :foot, :is_ruler,
|
907
1011
|
:from_top, :from_bottom)
|
908
|
-
TableCell = Struct.new(
|
1012
|
+
TableCell = Struct.new('DeplateTableCell', :cell,
|
909
1013
|
:x, :y, :from_right, :from_bottom,
|
910
1014
|
:high, :head, :foot,
|
911
1015
|
:span_x, :span_y, :row)
|
@@ -914,7 +1018,7 @@ class Deplate::Element::Table < Deplate::Element
|
|
914
1018
|
:contains_footnotes, :printed_header
|
915
1019
|
|
916
1020
|
def setup
|
917
|
-
@multiliner =
|
1021
|
+
@multiliner = :match
|
918
1022
|
@collapse = true
|
919
1023
|
high = get_highlight
|
920
1024
|
cols = get_cols
|
@@ -925,12 +1029,23 @@ class Deplate::Element::Table < Deplate::Element
|
|
925
1029
|
@contains_footnotes = false
|
926
1030
|
end
|
927
1031
|
|
928
|
-
def
|
929
|
-
|
1032
|
+
def to_be_continued?(line, klass, match)
|
1033
|
+
klass == self.class
|
1034
|
+
end
|
1035
|
+
|
1036
|
+
def push_match(match)
|
1037
|
+
high = get_highlight(match)
|
1038
|
+
cols = get_cols(match)
|
1039
|
+
cols.collect! {|t| t.strip}
|
1040
|
+
@accum << TableRow.new(high, cols)
|
1041
|
+
end
|
1042
|
+
|
1043
|
+
def get_highlight(match=@match)
|
1044
|
+
match[1].size == 2
|
930
1045
|
end
|
931
1046
|
|
932
|
-
def get_cols
|
933
|
-
|
1047
|
+
def get_cols(match=@match)
|
1048
|
+
match[2].split(/[[:blank:]]\|\|?[[:blank:]]/)
|
934
1049
|
end
|
935
1050
|
|
936
1051
|
def unify_now(other)
|
@@ -1078,18 +1193,25 @@ class Deplate::Element::Table < Deplate::Element
|
|
1078
1193
|
end
|
1079
1194
|
end
|
1080
1195
|
|
1196
|
+
def unify_props(other)
|
1197
|
+
super
|
1198
|
+
end
|
1199
|
+
|
1081
1200
|
def register_caption
|
1082
1201
|
register_table
|
1083
1202
|
end
|
1084
1203
|
end
|
1085
1204
|
|
1205
|
+
|
1086
1206
|
class Deplate::Element::Heading < Deplate::Element
|
1087
1207
|
attr_accessor :first_top, :last_top, :top_index, :abstract
|
1088
1208
|
attr_writer :destination
|
1089
1209
|
|
1090
1210
|
register_element
|
1091
1211
|
set_formatter :format_heading
|
1092
|
-
set_rx
|
1212
|
+
set_rx(/^(\*+)[[:blank:]]+(.*?)$/)
|
1213
|
+
def_get :level, lambda {@match[1].size}
|
1214
|
+
def_get :text, 2
|
1093
1215
|
|
1094
1216
|
class << self
|
1095
1217
|
def accumulate(src, array, deplate, text, match)
|
@@ -1109,15 +1231,10 @@ class Deplate::Element::Heading < Deplate::Element
|
|
1109
1231
|
end
|
1110
1232
|
|
1111
1233
|
def set_instance_top
|
1112
|
-
@level = get_level
|
1113
1234
|
ls = @deplate.variables["levelshift"]
|
1114
1235
|
if ls
|
1115
1236
|
@level += ls.to_i
|
1116
1237
|
end
|
1117
|
-
if is_top_heading?
|
1118
|
-
@deplate.current_table = 0
|
1119
|
-
@deplate.current_figure = 0
|
1120
|
-
end
|
1121
1238
|
@deplate.increase_current_heading(@level)
|
1122
1239
|
super
|
1123
1240
|
end
|
@@ -1125,28 +1242,18 @@ class Deplate::Element::Heading < Deplate::Element
|
|
1125
1242
|
def setup
|
1126
1243
|
@first_top = false
|
1127
1244
|
@last_top = false
|
1128
|
-
@multiliner = false
|
1129
|
-
@collapse = false
|
1130
1245
|
@abstract = nil
|
1131
|
-
@accum = [get_text]
|
1132
|
-
@args[:id] = @deplate.elt_label("hd", @level_as_string)
|
1133
1246
|
@destination = @deplate.output.destination
|
1134
1247
|
@top_index = [0, 0]
|
1135
|
-
@deplate.
|
1248
|
+
@args[:id] = @deplate.elt_label('hd', level_as_string)
|
1249
|
+
@deplate.options.listings.push('toc', self)
|
1250
|
+
# register_in_listing('toc')
|
1136
1251
|
@deplate.headings[@level_heading] = self
|
1137
1252
|
update_args
|
1138
1253
|
end
|
1139
1254
|
|
1140
|
-
def get_level
|
1141
|
-
@match[1].size
|
1142
|
-
end
|
1143
|
-
|
1144
|
-
def get_text
|
1145
|
-
@match[2]
|
1146
|
-
end
|
1147
|
-
|
1148
1255
|
def is_top_heading?
|
1149
|
-
@level
|
1256
|
+
@level <= @deplate.options.split_level
|
1150
1257
|
end
|
1151
1258
|
|
1152
1259
|
def update_options(args)
|
@@ -1166,7 +1273,24 @@ class Deplate::Element::Heading < Deplate::Element
|
|
1166
1273
|
end
|
1167
1274
|
|
1168
1275
|
def process
|
1169
|
-
rv
|
1276
|
+
rv = super
|
1277
|
+
url = @args['url']
|
1278
|
+
hh = @deplate.variables['hyperHeading']
|
1279
|
+
if url and hh
|
1280
|
+
if hh == 'full'
|
1281
|
+
# <+TBD+> Extract invalid tags and move them add them to the
|
1282
|
+
# end of the result (but this has to be done by the
|
1283
|
+
# formatter, so well ...)
|
1284
|
+
rv.elt = @deplate.formatter.format_particle(:format_url, rv, rv.elt, url, nil)
|
1285
|
+
else
|
1286
|
+
button = @deplate.variables['hyperHeadingButton'] ||
|
1287
|
+
@deplate.parse_and_format_without_wikinames(self,
|
1288
|
+
# '{img alt="=>": hyperHeading}',
|
1289
|
+
'=>',
|
1290
|
+
false)
|
1291
|
+
rv.elt += @deplate.formatter.format_particle(:format_url, rv, button, url, nil)
|
1292
|
+
end
|
1293
|
+
end
|
1170
1294
|
if rv.is_top_heading?
|
1171
1295
|
@deplate.options.heading_names[@top_heading_idx] = rv.elt
|
1172
1296
|
if @deplate.variables['subToC']
|
@@ -1174,7 +1298,7 @@ class Deplate::Element::Heading < Deplate::Element
|
|
1174
1298
|
match = []
|
1175
1299
|
toc = Deplate::Command::LIST.new(@deplate, @source, 'toc', match, args, 'LIST')
|
1176
1300
|
toc.level = @level
|
1177
|
-
toc.level_as_string =
|
1301
|
+
toc.level_as_string = level_as_string
|
1178
1302
|
rv = [rv, toc.finish.process].compact.flatten
|
1179
1303
|
end
|
1180
1304
|
end
|
@@ -1197,49 +1321,48 @@ class Deplate::Element::Heading < Deplate::Element
|
|
1197
1321
|
end
|
1198
1322
|
|
1199
1323
|
def description
|
1200
|
-
if @args['shortcaption']
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1324
|
+
desc = if @args['shortcaption']
|
1325
|
+
@args['shortcaption']
|
1326
|
+
elsif @caption
|
1327
|
+
@caption.elt
|
1328
|
+
else
|
1329
|
+
@elt
|
1330
|
+
end
|
1331
|
+
printable_particles(desc)
|
1207
1332
|
end
|
1208
1333
|
|
1209
1334
|
def register_caption
|
1210
|
-
@deplate.
|
1211
|
-
@label << @deplate.elt_label('hd',
|
1335
|
+
@deplate.options.listings.push('toc', self)
|
1336
|
+
@label << @deplate.elt_label('hd', level_as_string)
|
1212
1337
|
end
|
1213
1338
|
end
|
1214
1339
|
|
1340
|
+
|
1215
1341
|
class Deplate::Element::Break < Deplate::Element
|
1216
1342
|
register_element
|
1217
1343
|
set_formatter :format_break
|
1218
|
-
set_rx
|
1219
|
-
|
1220
|
-
def setup
|
1221
|
-
@multiliner = false
|
1222
|
-
@collapse = false
|
1223
|
-
@accum = []
|
1224
|
-
end
|
1344
|
+
set_rx(/^\s*-{2,}8\<-{2,}\s*$/)
|
1225
1345
|
end
|
1226
1346
|
|
1347
|
+
|
1227
1348
|
# An anchor is not a proper element, but is attached to the preceding one
|
1228
1349
|
class Deplate::Element::Anchor < Deplate::Element
|
1229
1350
|
register_element
|
1230
1351
|
set_formatter :format_anchor
|
1231
|
-
set_rx
|
1352
|
+
set_rx(/^\s*%?#([a-z][a-zA-Z0-9:_-]+)(.*)$/)
|
1232
1353
|
|
1233
1354
|
class << self
|
1234
1355
|
def accumulate(src, array, deplate, text, match)
|
1235
1356
|
i = 0
|
1236
1357
|
l = get_text(match)
|
1237
1358
|
Deplate::Core.log(['New anchor', l], :debug)
|
1359
|
+
r = get_rest(match)
|
1360
|
+
if r and !r.empty?
|
1361
|
+
Deplate::Core.log(['Deprecated: Text after anchor', r], :error, src)
|
1362
|
+
end
|
1238
1363
|
last = array.last
|
1239
1364
|
if last and last.can_be_labelled
|
1240
1365
|
last.put_label([l])
|
1241
|
-
# last.args["label"] ||= l
|
1242
|
-
deplate.labels_named << l
|
1243
1366
|
else
|
1244
1367
|
Deplate::Core.log(["Defer label", l], nil, src)
|
1245
1368
|
deplate.labels_floating << l
|
@@ -1250,7 +1373,11 @@ class Deplate::Element::Anchor < Deplate::Element
|
|
1250
1373
|
match[1]
|
1251
1374
|
end
|
1252
1375
|
|
1253
|
-
def
|
1376
|
+
def get_rest(match)
|
1377
|
+
match[2]
|
1378
|
+
end
|
1379
|
+
|
1380
|
+
def is_volatile?(match, input)
|
1254
1381
|
true
|
1255
1382
|
end
|
1256
1383
|
end
|
@@ -1264,10 +1391,12 @@ class Deplate::Element::Anchor < Deplate::Element
|
|
1264
1391
|
end
|
1265
1392
|
end
|
1266
1393
|
|
1394
|
+
|
1267
1395
|
# just disappear
|
1268
1396
|
class Deplate::Element::Whitespace < Deplate::Element
|
1269
1397
|
register_element
|
1270
|
-
set_rx
|
1398
|
+
set_rx(/^\s*$/)
|
1399
|
+
def_get :text, lambda {@text}
|
1271
1400
|
|
1272
1401
|
class << self
|
1273
1402
|
def accumulate(src, array, deplate, text, match)
|
@@ -1284,9 +1413,7 @@ class Deplate::Element::Whitespace < Deplate::Element
|
|
1284
1413
|
end
|
1285
1414
|
|
1286
1415
|
def setup(kw)
|
1287
|
-
@
|
1288
|
-
@collapse = true
|
1289
|
-
@accum = [@text]
|
1416
|
+
@collapse = true
|
1290
1417
|
@can_be_labelled = false
|
1291
1418
|
@keep_whitespace = kw
|
1292
1419
|
end
|
@@ -1308,9 +1435,8 @@ class Deplate::Element::PotentialPageBreak < Deplate::Element
|
|
1308
1435
|
set_formatter :format_PAGEBREAK
|
1309
1436
|
attr_accessor :enabled
|
1310
1437
|
|
1311
|
-
def
|
1438
|
+
def setup
|
1312
1439
|
@enabled = false
|
1313
|
-
super
|
1314
1440
|
end
|
1315
1441
|
|
1316
1442
|
def process
|
@@ -1327,29 +1453,70 @@ end
|
|
1327
1453
|
# matches
|
1328
1454
|
class Deplate::Element::Paragraph < Deplate::Element
|
1329
1455
|
set_formatter :format_paragraph
|
1330
|
-
set_rx
|
1456
|
+
set_rx(/^([[:blank:]]*)(.+)[[:blank:]]*$/)
|
1457
|
+
def_get :level, lambda {get_indent(@match[1]).size}
|
1458
|
+
def_get :text, lambda {@deplate.options.keep_whitespace ? @match[0] : @match[2]}
|
1331
1459
|
|
1332
1460
|
class << self
|
1333
1461
|
def from_text(deplate, src, text)
|
1334
|
-
m =
|
1462
|
+
m = self.rx.match(text)
|
1335
1463
|
self.new(deplate, src, text, m)
|
1336
1464
|
end
|
1337
1465
|
end
|
1338
1466
|
|
1339
1467
|
def setup
|
1340
1468
|
@multiliner = true
|
1341
|
-
@collapse = false
|
1342
|
-
@level = get_level
|
1343
|
-
@accum = [get_text]
|
1344
1469
|
end
|
1470
|
+
end
|
1471
|
+
|
1345
1472
|
|
1346
|
-
|
1347
|
-
|
1473
|
+
class Deplate::Element::Clip < Deplate::BaseElement
|
1474
|
+
attr_reader :is_template
|
1475
|
+
# attr_accessor :prototype
|
1476
|
+
|
1477
|
+
def initialize(acc, deplate, source)
|
1478
|
+
super(deplate)
|
1479
|
+
@acc = acc
|
1480
|
+
@elt = nil
|
1481
|
+
@source = source
|
1482
|
+
@invoker = nil
|
1483
|
+
@is_template = false
|
1484
|
+
@prototype = nil
|
1348
1485
|
end
|
1349
1486
|
|
1350
|
-
def
|
1351
|
-
|
1487
|
+
def process
|
1488
|
+
unless @prototype
|
1489
|
+
@prototype = @acc.first
|
1490
|
+
@prototype.args.update(@args) if @prototype
|
1491
|
+
end
|
1492
|
+
unless @elt
|
1493
|
+
@elt = @acc.collect{|p| p.process; p.elt}
|
1494
|
+
@elt = @deplate.join_particles(@elt)
|
1495
|
+
end
|
1496
|
+
return self
|
1497
|
+
end
|
1498
|
+
|
1499
|
+
def format_clip(invoker, expected)
|
1500
|
+
unless @elt
|
1501
|
+
log("We shouldn't be here. If you can track down when this happens, please send an example to the author.", :anyway)
|
1502
|
+
process
|
1503
|
+
end
|
1504
|
+
if @elt
|
1505
|
+
if @prototype
|
1506
|
+
@prototype.match_expected(expected, invoker)
|
1507
|
+
elsif @elt =~ /\S/
|
1508
|
+
log(['Internal error', 'prototype=nil', @elt], :error)
|
1509
|
+
end
|
1510
|
+
else
|
1511
|
+
log("Clip is nil, which is quite strange and most likely deplate's error but as I haven't had the time yet to track this down this error still occurs.", :error)
|
1512
|
+
end
|
1513
|
+
@elt
|
1514
|
+
end
|
1515
|
+
|
1516
|
+
def print
|
1517
|
+
output(@elt)
|
1352
1518
|
end
|
1353
1519
|
end
|
1354
1520
|
|
1521
|
+
|
1355
1522
|
# vim: ff=unix
|