deplate 0.7.3 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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/input.rb
CHANGED
@@ -3,31 +3,28 @@
|
|
3
3
|
# @Website: http://deplate.sf.net/
|
4
4
|
# @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
|
5
5
|
# @Created: 10-M�r-2005.
|
6
|
-
# @Last Change:
|
7
|
-
# @Revision: 0.
|
6
|
+
# @Last Change: 07-Jun-2006.
|
7
|
+
# @Revision: 0.467
|
8
8
|
#
|
9
9
|
# = Description
|
10
10
|
# = Usage
|
11
11
|
# = TODO
|
12
12
|
# = CHANGES
|
13
13
|
|
14
|
+
require "deplate/common"
|
15
|
+
|
14
16
|
# Input:
|
15
|
-
class Deplate::Input
|
17
|
+
class Deplate::Input < Deplate::CommonObject
|
16
18
|
class << self
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@myname = value
|
21
|
-
klass = self
|
22
|
-
Deplate::Core.class_eval do
|
23
|
-
declare_input_format(klass)
|
24
|
-
end
|
19
|
+
def hook_post_myname=(name)
|
20
|
+
klass = self
|
21
|
+
Deplate::Core.class_eval {declare_input_format(klass)}
|
25
22
|
end
|
26
23
|
end
|
27
|
-
|
28
|
-
self.myname = 'deplate'
|
29
24
|
|
30
|
-
|
25
|
+
class_attribute :myname, 'deplate'
|
26
|
+
|
27
|
+
attr_reader :elements, :commands, :regions, :macros, :skeleton_expander
|
31
28
|
attr_reader :paragraph_class, :comment_class, :command_class
|
32
29
|
attr_reader :particles, :rx_particles, :particles_ext, :rx_particles_ext
|
33
30
|
|
@@ -37,14 +34,20 @@ class Deplate::Input
|
|
37
34
|
@deplate = deplate
|
38
35
|
@options = deplate.options
|
39
36
|
@args = args
|
40
|
-
@elements =
|
41
|
-
@commands =
|
42
|
-
@regions =
|
43
|
-
@macros =
|
37
|
+
@elements = args[:elements] || Deplate::Element.elements
|
38
|
+
@commands = args[:commands] || Deplate::Command.commands
|
39
|
+
@regions = args[:regions ] || Deplate::Region.regions
|
40
|
+
@macros = args[:macros] || Deplate::Macro.macros
|
44
41
|
@paragraph_class = args[:paragraph_class] || Deplate::Element::Paragraph
|
45
42
|
@comment_class = args[:comment_class] || Deplate::Element::Comment
|
46
43
|
@command_class = args[:command_class] || Deplate::Element::Command
|
47
44
|
@allow_onthefly_particles = args[:onthefly_particles] || true
|
45
|
+
if @options.skeletons.empty?
|
46
|
+
@skeleton_expander = nil
|
47
|
+
else
|
48
|
+
expander = args[:expander_class] || Deplate::SkeletonExpander
|
49
|
+
@skeleton_expander = expander.new(deplate)
|
50
|
+
end
|
48
51
|
initialize_particles
|
49
52
|
end
|
50
53
|
|
@@ -90,6 +93,35 @@ class Deplate::Input
|
|
90
93
|
@rx_particles = get_rx_particles(@particles)
|
91
94
|
end
|
92
95
|
end
|
96
|
+
|
97
|
+
def register_element(instance, args={})
|
98
|
+
# <+TBD+> duplicates will be ignored
|
99
|
+
@elements << instance
|
100
|
+
end
|
101
|
+
|
102
|
+
def register_macro(instance, args={})
|
103
|
+
name = Deplate::CommonGround.get_explicit_id(args)
|
104
|
+
if @macros[name]
|
105
|
+
@deplate.log(['Macro already defined', name])
|
106
|
+
end
|
107
|
+
@macros[name] = instance
|
108
|
+
end
|
109
|
+
|
110
|
+
def register_region(instance, args={})
|
111
|
+
name = Deplate::CommonGround.get_explicit_id(args)
|
112
|
+
if @regions[name]
|
113
|
+
@deplate.log(['Region already defined', name])
|
114
|
+
end
|
115
|
+
@regions[name] = instance
|
116
|
+
end
|
117
|
+
|
118
|
+
def register_command(instance, args={})
|
119
|
+
name = Deplate::CommonGround.get_explicit_id(args)
|
120
|
+
if @commands[name]
|
121
|
+
@deplate.log(['Command already defined', name])
|
122
|
+
end
|
123
|
+
@commands[name] = instance
|
124
|
+
end
|
93
125
|
|
94
126
|
def register_particle(particle, args={})
|
95
127
|
arr = args[:extended] ? @particles_ext : @particles
|
@@ -110,7 +142,9 @@ class Deplate::Input
|
|
110
142
|
end
|
111
143
|
|
112
144
|
def get_rx_particles(particles)
|
113
|
-
return Regexp.new(particles.collect
|
145
|
+
return Regexp.new(particles.collect do |e|
|
146
|
+
e.rx.source[1..-1]
|
147
|
+
end.join("|"))
|
114
148
|
end
|
115
149
|
|
116
150
|
def get_particles(what, alt=true)
|
@@ -138,23 +172,26 @@ class Deplate::Input
|
|
138
172
|
# This is the general function for including text from whatever source
|
139
173
|
# that follows the enumeration interface. In general, the more
|
140
174
|
# specialized methods from Deplate::Core should be used to call this.
|
141
|
-
def
|
142
|
-
accum
|
143
|
-
|
175
|
+
def include_string(string, acc_array, linenumber)
|
176
|
+
accum = []
|
177
|
+
string = @skeleton_expander.expand(string) if @skeleton_expander
|
178
|
+
for line in string
|
144
179
|
linenumber += 1
|
145
180
|
line.chomp!
|
146
181
|
unless accum.empty?
|
147
|
-
line.gsub!(/^\s+/,
|
182
|
+
line.gsub!(/^\s+/, '')
|
148
183
|
end
|
149
|
-
|
150
|
-
if comment_class.match(line)
|
184
|
+
if !unfinished_region?(acc_array.last) and comment_class.match(line)
|
151
185
|
next
|
152
|
-
elsif use_line_continuation and line =~ /(^|[^\\])\\$/
|
153
|
-
accum << line[0..-2]
|
154
186
|
else
|
155
|
-
|
156
|
-
|
157
|
-
|
187
|
+
use_line_continuation = acc_array.last ? acc_array.last.line_cont : true
|
188
|
+
if use_line_continuation and line =~ /(^|[^\\])\\$/
|
189
|
+
accum << line[0..-2]
|
190
|
+
else
|
191
|
+
accum << line
|
192
|
+
handle_line(acc_array, accum.join, linenumber)
|
193
|
+
accum = []
|
194
|
+
end
|
158
195
|
end
|
159
196
|
end
|
160
197
|
handle_line(acc_array, nil, linenumber)
|
@@ -172,31 +209,33 @@ class Deplate::Input
|
|
172
209
|
ec = @deplate.variables['embeddedVerbatim'] || 'Verbatim'
|
173
210
|
rx = /^#{tic}/
|
174
211
|
if line =~ rx
|
212
|
+
# p "DBG tic", line
|
175
213
|
if $1
|
176
214
|
line = $1
|
177
215
|
else
|
178
216
|
line.sub!(rx, '')
|
179
217
|
end
|
180
|
-
if last.kind_of?(Deplate::Element::Region) and last.name == ec and !last.finished?
|
218
|
+
if last and last.kind_of?(Deplate::Element::Region) and last.name == ec and !last.finished?
|
181
219
|
last = finish_last(array, last, lineNumber)
|
182
220
|
end
|
183
221
|
else
|
184
|
-
|
222
|
+
# p "DBG notic", line
|
223
|
+
if !@deplate.switches.last and !ec.empty?
|
185
224
|
if last.kind_of?(Deplate::Element::Region) and last.name == ec
|
186
225
|
last << line
|
187
226
|
elsif line =~ /\S/
|
188
|
-
|
227
|
+
if last and !last.finished?
|
189
228
|
last = finish_last(array, last, lineNumber)
|
190
229
|
end
|
191
230
|
m = Deplate::Element::Region.pseudo_match(:args => '')
|
192
231
|
Deplate::Element::Region.do_accumulate(src, array, @deplate, '', m, ec)
|
193
|
-
array.last << line
|
232
|
+
array.last << line if array.last
|
194
233
|
end
|
195
234
|
end
|
196
235
|
return
|
197
236
|
end
|
198
237
|
end
|
199
|
-
if
|
238
|
+
if unfinished_region?(last)
|
200
239
|
# last is a region
|
201
240
|
if line =~ last.endRx
|
202
241
|
last = finish_last(array, last, lineNumber)
|
@@ -213,20 +252,25 @@ class Deplate::Input
|
|
213
252
|
elsif last.finished?
|
214
253
|
# last is finished, so we start a new element
|
215
254
|
c = e || paragraph_class
|
216
|
-
elsif e
|
217
|
-
unless e.is_volatile?(m)
|
218
|
-
last = finish_last(array, last, lineNumber - 1)
|
219
|
-
end
|
220
|
-
c = e
|
221
|
-
elsif last.to_be_continued?(line)
|
255
|
+
elsif last.to_be_continued?(line, e, m)
|
222
256
|
# this line is something else, so we ask last if it wants
|
223
257
|
# to be continued
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
258
|
+
case last.multiliner
|
259
|
+
when :match
|
260
|
+
last.push_match(m)
|
261
|
+
when true
|
262
|
+
if @options.keep_whitespace or last.keep_whitespace
|
263
|
+
last << line
|
264
|
+
else
|
265
|
+
last << line.strip
|
266
|
+
end
|
228
267
|
end
|
229
268
|
c = nil
|
269
|
+
elsif e
|
270
|
+
unless e.is_volatile?(m, self)
|
271
|
+
last = finish_last(array, last, lineNumber - 1)
|
272
|
+
end
|
273
|
+
c = e
|
230
274
|
else
|
231
275
|
# last doesn't want this line, so we start a new element
|
232
276
|
last = finish_last(array, last, lineNumber - 1)
|
@@ -247,10 +291,14 @@ class Deplate::Input
|
|
247
291
|
end
|
248
292
|
private :handle_line
|
249
293
|
|
294
|
+
def unfinished_region?(last)
|
295
|
+
return last && !last.finished? && last.endRx
|
296
|
+
end
|
297
|
+
|
250
298
|
def finish_last(array, last, lineNumber=-1)
|
251
|
-
last.source.end
|
252
|
-
finished_element
|
253
|
-
array.pop
|
299
|
+
last.source.end = lineNumber if lineNumber > 0
|
300
|
+
# finished_element = last.finish
|
301
|
+
finished_element = array.pop.finish
|
254
302
|
if finished_element.kind_of?(Array)
|
255
303
|
for e in finished_element
|
256
304
|
handle_finished_element(array, e)
|
@@ -333,45 +381,62 @@ class Deplate::Input
|
|
333
381
|
particles.each do |e|
|
334
382
|
m = e.match(mx[0])
|
335
383
|
if m
|
336
|
-
|
337
|
-
unless
|
338
|
-
|
384
|
+
pc = e.pre_condition
|
385
|
+
unless pc && !pc.call(mx)
|
386
|
+
pre = mx.pre_match
|
387
|
+
unless pre.empty?
|
388
|
+
rt << as_text(container, rt, mx.pre_match, alt, last)
|
389
|
+
end
|
390
|
+
txt = last + mx.pre_match
|
391
|
+
begin
|
392
|
+
rt << e.new(@deplate, container, rt, m, alt, txt, rest)
|
393
|
+
rescue Exception => exc
|
394
|
+
puts exc
|
395
|
+
# puts "#{exc}\nInternal error when initializing %s: %s" % [e.name, txt]
|
396
|
+
# raise exc
|
397
|
+
end
|
398
|
+
throw :ok
|
339
399
|
end
|
340
|
-
txt = last + mx.pre_match
|
341
|
-
# begin
|
342
|
-
rt << e.new(@deplate, container, rt, m, alt, txt, rest)
|
343
|
-
# rescue Exception => exc
|
344
|
-
# puts "Internal error when initializing %s: %s" % [e.name, txt]
|
345
|
-
# raise exc
|
346
|
-
# end
|
347
|
-
throw :ok
|
348
400
|
end
|
349
401
|
end
|
350
402
|
txt = mx.pre_match + mx[0]
|
351
|
-
rt <<
|
403
|
+
rt << as_text(container, rt, txt, alt, last, rest)
|
352
404
|
end
|
353
405
|
last = mx[0]
|
354
406
|
else
|
355
|
-
rt <<
|
407
|
+
rt << as_text(container, rt, rest, alt, last, "")
|
356
408
|
break
|
357
409
|
end
|
358
410
|
end
|
359
411
|
return rt
|
360
412
|
end
|
361
413
|
|
414
|
+
def as_text(container, context, match, alt, last="", rest="")
|
415
|
+
case match
|
416
|
+
when String
|
417
|
+
match = Deplate::Particle::Text.pseudo_match(match)
|
418
|
+
end
|
419
|
+
Deplate::Particle::Text.new(@deplate, container, context, match, alt, last, rest)
|
420
|
+
end
|
421
|
+
|
362
422
|
def parse_with_particles(container, text, particles, alt=true)
|
363
423
|
parse_using(container, text, get_particles(:rx, alt), particles, alt)
|
364
424
|
end
|
365
425
|
|
366
|
-
def parse_with_source(source, text, alt=true)
|
426
|
+
def parse_with_source(source, text, alt=true, excluded=[])
|
367
427
|
container = Deplate::PseudoContainer.new(@deplate, :source => source)
|
368
|
-
parse(container, text, alt)
|
428
|
+
parse(container, text, alt, excluded)
|
369
429
|
end
|
370
430
|
|
371
431
|
def parse(container, text, alt=true, excluded=[])
|
372
432
|
rx, particles = get_particles(:both, alt)
|
373
433
|
for p in excluded
|
374
|
-
|
434
|
+
case p
|
435
|
+
when Proc
|
436
|
+
particles.delete_if &p
|
437
|
+
else
|
438
|
+
particles.delete(p)
|
439
|
+
end
|
375
440
|
end
|
376
441
|
parse_using(container, text, rx, particles, alt)
|
377
442
|
end
|
@@ -387,99 +452,94 @@ class Deplate::Input
|
|
387
452
|
@@rxsrc_key = %{[@\\w]+(\\[\\S*?\\])?}
|
388
453
|
@@rxsrc_args1 = %{(#{@@rxsrc_key})(!|=(#{@@rxsrc_argval}))\\s*} % "^=!:"
|
389
454
|
@@rxsrc_args2 = %{(#{@@rxsrc_key})(!|=(#{@@rxsrc_argval}))\\s*} % "^=!"
|
390
|
-
@@rx_args = /^\s*(#{@@rxsrc_args2})(\s
|
455
|
+
@@rx_args = /^\s*(#{@@rxsrc_args2})(?=(\s*$|\s+#{@@rxsrc_key}(!|=)))/
|
391
456
|
@@rx_argstext = /^\s*((#{@@rxsrc_args1})*?)(:\s*(.+))?$/
|
392
457
|
|
393
458
|
def parse_args(argText, container=nil, firstPass=true, parseText=false)
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
val = false
|
419
|
-
else
|
420
|
-
valm = /^"(.*?)"$/.match(m[5])
|
421
|
-
if valm
|
422
|
-
val = valm[1]
|
423
|
-
else
|
424
|
-
val = m[5].strip
|
425
|
-
end
|
426
|
-
val = Deplate::Core.remove_backslashes(val)
|
427
|
-
end
|
428
|
-
accum[key] = val
|
429
|
-
args = m.post_match
|
430
|
-
if args.empty?
|
431
|
-
break
|
432
|
-
end
|
433
|
-
else
|
434
|
-
log_error(@container, ["Argument parse error", args, argText])
|
459
|
+
unless argText
|
460
|
+
return nil
|
461
|
+
end
|
462
|
+
argText.strip!
|
463
|
+
if argText.empty?
|
464
|
+
return [{}, '']
|
465
|
+
end
|
466
|
+
if firstPass
|
467
|
+
m = @@rx_argstext.match(argText)
|
468
|
+
else
|
469
|
+
m = [nil, argText]
|
470
|
+
end
|
471
|
+
accum = {}
|
472
|
+
if m
|
473
|
+
args = m[1]
|
474
|
+
text = m[10]
|
475
|
+
while !args.empty?
|
476
|
+
m = @@rx_args.match(args)
|
477
|
+
if m
|
478
|
+
key = m[2]
|
479
|
+
val = m[5]
|
480
|
+
Deplate::Core.canonic_args(accum, key, val)
|
481
|
+
args = m.post_match
|
482
|
+
if args.empty?
|
435
483
|
break
|
436
484
|
end
|
485
|
+
else
|
486
|
+
log_error(@container, ['Argument parse error', args, argText])
|
487
|
+
break
|
437
488
|
end
|
438
|
-
if parseText
|
439
|
-
if text
|
440
|
-
parsed = parse(container, text)
|
441
|
-
else
|
442
|
-
parsed = []
|
443
|
-
end
|
444
|
-
end
|
445
|
-
else
|
446
|
-
text = nil
|
447
|
-
parsed = nil
|
448
|
-
end
|
449
|
-
id = accum['id']
|
450
|
-
if id
|
451
|
-
accum['@id'] = id
|
452
|
-
accum['id'] = @deplate.formatter.encode_id(id)
|
453
489
|
end
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
if ifOpt
|
458
|
-
accum.delete("if")
|
459
|
-
ifOpt = Deplate::Element::Command.check_switch(@deplate, ifOpt)
|
460
|
-
else
|
461
|
-
ifOpt = true
|
462
|
-
end
|
463
|
-
nofmt = accum["nofmt"]
|
464
|
-
accum.delete("nofmt") if nofmt
|
465
|
-
nofmt ||= accum["noFmt"]
|
466
|
-
accum.delete("noFmt") if nofmt
|
467
|
-
if (!firstPass or (ifOpt and
|
468
|
-
(!fmt || @deplate.formatter.matches?(fmt)) and
|
469
|
-
(!nofmt || !(@deplate.formatter.matches?(nofmt)))))
|
470
|
-
if parseText
|
471
|
-
return [accum, text, parsed]
|
490
|
+
if parseText
|
491
|
+
if text
|
492
|
+
parsed = parse(container, text)
|
472
493
|
else
|
473
|
-
|
494
|
+
parsed = []
|
474
495
|
end
|
496
|
+
end
|
497
|
+
else
|
498
|
+
text = nil
|
499
|
+
parsed = nil
|
500
|
+
end
|
501
|
+
id = accum['id']
|
502
|
+
if id
|
503
|
+
accum['@id'] = id
|
504
|
+
accum['id'] = @deplate.formatter.encode_id(id)
|
505
|
+
end
|
506
|
+
fmt = accum['fmt']
|
507
|
+
accum.delete('fmt') if fmt
|
508
|
+
ifOpt0 = ifOpt = accum['if']
|
509
|
+
if ifOpt
|
510
|
+
accum.delete('if')
|
511
|
+
ifOpt = Deplate::Element::Command.check_switch(@deplate, ifOpt)
|
512
|
+
else
|
513
|
+
ifOpt = true
|
514
|
+
end
|
515
|
+
if ifOpt0 and !ifOpt and accum['else']
|
516
|
+
text = accum['else']
|
517
|
+
accum.delete('else')
|
518
|
+
parsed = parse(container, text)
|
519
|
+
ifOpt = true
|
520
|
+
end
|
521
|
+
nofmt = accum['nofmt']
|
522
|
+
accum.delete('nofmt') if nofmt
|
523
|
+
nofmt ||= accum['noFmt']
|
524
|
+
accum.delete('noFmt') if nofmt
|
525
|
+
if (!firstPass or
|
526
|
+
(ifOpt and
|
527
|
+
(!fmt || @deplate.formatter.matches?(fmt)) and
|
528
|
+
(!nofmt || !(@deplate.formatter.matches?(nofmt)))))
|
529
|
+
if parseText
|
530
|
+
return [accum, text, parsed]
|
475
531
|
else
|
476
|
-
|
532
|
+
return [accum, text || '']
|
477
533
|
end
|
478
534
|
else
|
479
|
-
|
535
|
+
raise Deplate::DontFormatException
|
480
536
|
end
|
481
537
|
end
|
482
538
|
|
539
|
+
def allow_set_variable(var)
|
540
|
+
true
|
541
|
+
end
|
542
|
+
|
483
543
|
private
|
484
544
|
def log_error(container, text)
|
485
545
|
(container || @deplate).log(text, :error)
|