deplate 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. data/AUTHORS.TXT +26 -0
  2. data/CHANGES.TXT +177 -0
  3. data/LICENSE.TXT +340 -0
  4. data/NEWS.TXT +29 -0
  5. data/README.TXT +86 -0
  6. data/TODO.TXT +202 -0
  7. data/VERSION.TXT +1 -0
  8. data/bin/deplate +3 -0
  9. data/bin/deplate.bat +2 -0
  10. data/etc/deplate.ini +361 -0
  11. data/lib/deplate.rb +31 -0
  12. data/lib/deplate/abstract-class.rb +30 -0
  13. data/lib/deplate/builtin.rb +11 -0
  14. data/lib/deplate/cache.rb +59 -0
  15. data/lib/deplate/commands.rb +693 -0
  16. data/lib/deplate/common.rb +335 -0
  17. data/lib/deplate/converter.rb +99 -0
  18. data/lib/deplate/core.rb +2705 -0
  19. data/lib/deplate/css/article.css +545 -0
  20. data/lib/deplate/css/deplate.css +699 -0
  21. data/lib/deplate/css/heading-navbar.css +29 -0
  22. data/lib/deplate/css/layout-deplate-print.css +540 -0
  23. data/lib/deplate/css/layout-deplate.css +764 -0
  24. data/lib/deplate/css/sans-serif.css +160 -0
  25. data/lib/deplate/css/serif-e.css +170 -0
  26. data/lib/deplate/css/serif-rel.css +121 -0
  27. data/lib/deplate/css/serif.css +190 -0
  28. data/lib/deplate/css/slides.css +11 -0
  29. data/lib/deplate/css/tabbar-left.css +91 -0
  30. data/lib/deplate/css/tabbar-right-ie.css +14 -0
  31. data/lib/deplate/css/tabbar-right.css +118 -0
  32. data/lib/deplate/css/tabbar-top.css +64 -0
  33. data/lib/deplate/css/tabbar.css +81 -0
  34. data/lib/deplate/css/text-sans-serif.css +154 -0
  35. data/lib/deplate/css/text-serif.css +175 -0
  36. data/lib/deplate/define.rb +439 -0
  37. data/lib/deplate/docbook.rb +738 -0
  38. data/lib/deplate/elements.rb +1355 -0
  39. data/lib/deplate/etc.rb +199 -0
  40. data/lib/deplate/external.rb +135 -0
  41. data/lib/deplate/fmt/dbk-article-4.1.2.rb +21 -0
  42. data/lib/deplate/fmt/dbk-article.rb +46 -0
  43. data/lib/deplate/fmt/dbk-book.rb +46 -0
  44. data/lib/deplate/fmt/dbk-ref.rb +105 -0
  45. data/lib/deplate/fmt/dbk-slides.rb +47 -0
  46. data/lib/deplate/fmt/dbk-snippet.rb +21 -0
  47. data/lib/deplate/fmt/html-snippet.rb +21 -0
  48. data/lib/deplate/fmt/html.rb +1696 -0
  49. data/lib/deplate/fmt/htmlsite.rb +419 -0
  50. data/lib/deplate/fmt/htmlslides.rb +21 -0
  51. data/lib/deplate/fmt/htmlwebsite.rb +70 -0
  52. data/lib/deplate/fmt/latex-snippet.rb +22 -0
  53. data/lib/deplate/fmt/latex.rb +1242 -0
  54. data/lib/deplate/fmt/php.rb +19 -0
  55. data/lib/deplate/fmt/phpsite.rb +19 -0
  56. data/lib/deplate/fmt/plain.rb +598 -0
  57. data/lib/deplate/fmt/template.rb +34 -0
  58. data/lib/deplate/fmt/xhtml10t.rb +41 -0
  59. data/lib/deplate/formatter-snippet.rb +17 -0
  60. data/lib/deplate/formatter.rb +1210 -0
  61. data/lib/deplate/input.rb +492 -0
  62. data/lib/deplate/input/deplate-headings.rb +48 -0
  63. data/lib/deplate/input/deplate-restricted.rb +70 -0
  64. data/lib/deplate/input/deplate.rb +28 -0
  65. data/lib/deplate/input/rdoc.rb +277 -0
  66. data/lib/deplate/input/template.rb +29 -0
  67. data/lib/deplate/lib/latex/highlight-extra.sty +15 -0
  68. data/lib/deplate/lib/latex/highlight-typical.sty +15 -0
  69. data/lib/deplate/lib/tabmenu.js +146 -0
  70. data/lib/deplate/locale/de.latin1 +708 -0
  71. data/lib/deplate/locale/ru.koi8-r +48 -0
  72. data/lib/deplate/locale/zh_cn.gb2312 +35 -0
  73. data/lib/deplate/macros.rb +639 -0
  74. data/lib/deplate/messages.rb +120 -0
  75. data/lib/deplate/metadata.rb +77 -0
  76. data/lib/deplate/metadata/marshal.rb +24 -0
  77. data/lib/deplate/metadata/xml.rb +42 -0
  78. data/lib/deplate/metadata/yaml.rb +26 -0
  79. data/lib/deplate/mod/anyword.rb +56 -0
  80. data/lib/deplate/mod/babelfish.rb +27 -0
  81. data/lib/deplate/mod/code-gvim.rb +52 -0
  82. data/lib/deplate/mod/code-highlight.rb +91 -0
  83. data/lib/deplate/mod/colored-log.rb +17 -0
  84. data/lib/deplate/mod/de.rb +19 -0
  85. data/lib/deplate/mod/en.rb +17 -0
  86. data/lib/deplate/mod/endnotes.rb +60 -0
  87. data/lib/deplate/mod/fr.rb +46 -0
  88. data/lib/deplate/mod/html-asciimath.rb +40 -0
  89. data/lib/deplate/mod/html-deplate-button.rb +15 -0
  90. data/lib/deplate/mod/html-headings-navbar.rb +39 -0
  91. data/lib/deplate/mod/html-obfuscate-email.rb +47 -0
  92. data/lib/deplate/mod/html-sidebar.rb +232 -0
  93. data/lib/deplate/mod/htmlslides-navbar-fh.rb +32 -0
  94. data/lib/deplate/mod/iconv.rb +35 -0
  95. data/lib/deplate/mod/imgurl.rb +30 -0
  96. data/lib/deplate/mod/inlatex-compound.rb +69 -0
  97. data/lib/deplate/mod/koma.rb +109 -0
  98. data/lib/deplate/mod/latex-emph-table-head.rb +38 -0
  99. data/lib/deplate/mod/latex-styles.rb +461 -0
  100. data/lib/deplate/mod/latex-verbatim-small.rb +29 -0
  101. data/lib/deplate/mod/makefile.rb +194 -0
  102. data/lib/deplate/mod/mark-external-urls.rb +38 -0
  103. data/lib/deplate/mod/markup-1-warn.rb +37 -0
  104. data/lib/deplate/mod/markup-1.rb +41 -0
  105. data/lib/deplate/mod/navbar-png.rb +33 -0
  106. data/lib/deplate/mod/noindent.rb +32 -0
  107. data/lib/deplate/mod/numpara.rb +40 -0
  108. data/lib/deplate/mod/particle-math.rb +34 -0
  109. data/lib/deplate/mod/php-extra.rb +44 -0
  110. data/lib/deplate/mod/pstoedit.rb +71 -0
  111. data/lib/deplate/mod/recode.rb +57 -0
  112. data/lib/deplate/mod/ru_koi8-r.rb +20 -0
  113. data/lib/deplate/mod/smiley.rb +50 -0
  114. data/lib/deplate/mod/soffice.rb +23 -0
  115. data/lib/deplate/mod/symbols-latin1.rb +58 -0
  116. data/lib/deplate/mod/symbols-od-utf-8.rb +16 -0
  117. data/lib/deplate/mod/symbols-plain.rb +58 -0
  118. data/lib/deplate/mod/symbols-sgml.rb +97 -0
  119. data/lib/deplate/mod/symbols-utf-8.rb +81 -0
  120. data/lib/deplate/mod/symbols-xml.rb +34 -0
  121. data/lib/deplate/mod/syntax-region-alt.rb +37 -0
  122. data/lib/deplate/mod/utf8.rb +49 -0
  123. data/lib/deplate/mod/validate-html.rb +35 -0
  124. data/lib/deplate/mod/xmlrpc.rb +233 -0
  125. data/lib/deplate/mod/zh-cn-autospace.rb +108 -0
  126. data/lib/deplate/mod/zh-cn.rb +59 -0
  127. data/lib/deplate/once-method.rb +44 -0
  128. data/lib/deplate/output.rb +249 -0
  129. data/lib/deplate/particles.rb +815 -0
  130. data/lib/deplate/regions.rb +1076 -0
  131. data/lib/deplate/structured.rb +763 -0
  132. data/lib/deplate/template.rb +430 -0
  133. data/lib/deplate/templates/html-doc.html +28 -0
  134. data/lib/deplate/templates/html-left-tabbar-js.html +37 -0
  135. data/lib/deplate/templates/html-left-tabbar.html +31 -0
  136. data/lib/deplate/templates/html-tabbar-right-table.html +43 -0
  137. data/lib/deplate/templates/html-tabbar-right.html +23 -0
  138. data/lib/deplate/templates/html-tabbar-top.html +43 -0
  139. data/lib/deplate/templates/html-tabbar.html +31 -0
  140. data/lib/deplate/wiki-markup.rb +117 -0
  141. data/lib/deplate/xml.rb +109 -0
  142. data/lib/deplate/zh-cn.rb +59 -0
  143. data/lib/ps2ppm.rb +239 -0
  144. data/man/man1/deplate.1 +692 -0
  145. metadata +210 -0
@@ -0,0 +1,492 @@
1
+ # input.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: 10-M�r-2005.
6
+ # @Last Change: 01-Nov-2005.
7
+ # @Revision: 0.294
8
+ #
9
+ # = Description
10
+ # = Usage
11
+ # = TODO
12
+ # = CHANGES
13
+
14
+ # Input:
15
+ class Deplate::Input
16
+ class << self
17
+ attr_reader :myname
18
+
19
+ def myname=(value)
20
+ @myname = value
21
+ klass = self
22
+ Deplate::Core.class_eval do
23
+ declare_input_format(klass)
24
+ end
25
+ end
26
+ end
27
+
28
+ self.myname = 'deplate'
29
+
30
+ attr_reader :elements, :commands, :regions, :macros
31
+ attr_reader :paragraph_class, :comment_class, :command_class
32
+ attr_reader :particles, :rx_particles, :particles_ext, :rx_particles_ext
33
+
34
+ @@custom_particles = {}
35
+
36
+ def initialize(deplate, args)
37
+ @deplate = deplate
38
+ @options = deplate.options
39
+ @args = args
40
+ @elements = (args[:elements] || Deplate::Element.elements)
41
+ @commands = (args[:commands] || Deplate::Command.commands)
42
+ @regions = (args[:regions ] || Deplate::Region.regions)
43
+ @macros = (args[:macros] || Deplate::Macro.macros)
44
+ @paragraph_class = args[:paragraph_class] || Deplate::Element::Paragraph
45
+ @comment_class = args[:comment_class] || Deplate::Element::Comment
46
+ @command_class = args[:command_class] || Deplate::Element::Command
47
+ @allow_onthefly_particles = args[:onthefly_particles] || true
48
+ initialize_particles
49
+ end
50
+
51
+ def initialize_particles(alt=false, args=@args)
52
+ always = args[:always]
53
+ if always or @allow_onthefly_particles or !@rx_particles
54
+ @particles_custom ||= args[:particles]
55
+ if @particles_custom
56
+ @particles = args[:particles].dup
57
+ else
58
+ @particles = Deplate::Particle.particles.dup
59
+ end
60
+ for p in @options.disabled_particles
61
+ disable_particle_class(p)
62
+ end
63
+ initialize_rx(:standard)
64
+ end
65
+
66
+ if always or !defined?(@particles_ext) or (@allow_onthefly_particles and alt)
67
+ @particles_ext_custom ||= args[:particles_ext]
68
+ if @particles_ext_custom
69
+ @particles_ext = args[:particles_ext].dup
70
+ else
71
+ @particles_ext = Deplate::Particle.particles_ext.dup
72
+ end
73
+ initialize_rx(:extended)
74
+ else
75
+ @particles_all = @particles
76
+ @rx_particles_all = @rx_particles
77
+ end
78
+ end
79
+
80
+ def initialize_rx(what=:both)
81
+ case what
82
+ when :extended, :both
83
+ if @particles_ext
84
+ @particles_all = @particles + @particles_ext
85
+ else
86
+ @particles_all = @particles
87
+ end
88
+ @rx_particles_all = get_rx_particles(@particles_all)
89
+ else
90
+ @rx_particles = get_rx_particles(@particles)
91
+ end
92
+ end
93
+
94
+ def register_particle(particle, args={})
95
+ arr = args[:extended] ? @particles_ext : @particles
96
+ id = args[:id] || particle.name
97
+ catch(:cont) do
98
+ old = @@custom_particles[id]
99
+ if old
100
+ idx = arr.index(old)
101
+ if idx
102
+ arr[idx] = particle
103
+ throw :cont
104
+ end
105
+ end
106
+ arr << particle
107
+ end
108
+ @@custom_particles[id] = particle
109
+ initialize_rx(:both)
110
+ end
111
+
112
+ def get_rx_particles(particles)
113
+ return Regexp.new(particles.collect {|e| e.rx.source[1..-1]}.join("|"))
114
+ end
115
+
116
+ def get_particles(what, alt=true)
117
+ if alt
118
+ p = @particles_all
119
+ r = @rx_particles_all
120
+ else
121
+ p = @particles
122
+ r = @rx_particles
123
+ end
124
+ case what
125
+ when :rx
126
+ return r
127
+ when :particles
128
+ return p
129
+ else
130
+ return r, p
131
+ end
132
+ end
133
+
134
+ def disable_particle_class(particle)
135
+ @particles.delete(particle)
136
+ end
137
+
138
+ # This is the general function for including text from whatever source
139
+ # that follows the enumeration interface. In general, the more
140
+ # specialized methods from Deplate::Core should be used to call this.
141
+ def include_enum(enum, acc_array, linenumber)
142
+ accum = []
143
+ for line in enum
144
+ linenumber += 1
145
+ line.chomp!
146
+ unless accum.empty?
147
+ line.gsub!(/^\s+/, "")
148
+ end
149
+ use_line_continuation = acc_array.last ? acc_array.last.line_cont : true
150
+ if comment_class.match(line)
151
+ next
152
+ elsif use_line_continuation and line =~ /(^|[^\\])\\$/
153
+ accum << line[0..-2]
154
+ else
155
+ accum << line
156
+ handle_line(acc_array, accum.join, linenumber)
157
+ accum = []
158
+ end
159
+ end
160
+ handle_line(acc_array, nil, linenumber)
161
+ end
162
+
163
+ def handle_line(array, line, lineNumber=-1)
164
+ last = array.last
165
+ if line
166
+ src = Deplate::Source.new(@deplate.current_source, @deplate.current_source_stats,
167
+ lineNumber, nil)
168
+ if (tic = @deplate.variables['embeddedTextRx'])
169
+ # If +embeddedTextRx+ is set, the actual text is hidden in
170
+ # comments or similar. Other text is printed as
171
+ # verbatim.
172
+ ec = @deplate.variables['embeddedVerbatim'] || 'Verbatim'
173
+ rx = /^#{tic}/
174
+ if line =~ rx
175
+ if $1
176
+ line = $1
177
+ else
178
+ line.sub!(rx, '')
179
+ end
180
+ if last.kind_of?(Deplate::Element::Region) and last.name == ec and !last.finished?
181
+ last = finish_last(array, last, lineNumber)
182
+ end
183
+ else
184
+ if !@deplate.switches.last
185
+ if last.kind_of?(Deplate::Element::Region) and last.name == ec
186
+ last << line
187
+ elsif line =~ /\S/
188
+ unless last.finished?
189
+ last = finish_last(array, last, lineNumber)
190
+ end
191
+ m = Deplate::Element::Region.pseudo_match(:args => '')
192
+ Deplate::Element::Region.do_accumulate(src, array, @deplate, '', m, ec)
193
+ array.last << line
194
+ end
195
+ end
196
+ return
197
+ end
198
+ end
199
+ if last and !last.finished? and last.endRx
200
+ # last is a region
201
+ if line =~ last.endRx
202
+ last = finish_last(array, last, lineNumber)
203
+ else
204
+ last << line
205
+ end
206
+ else
207
+ # last is something else
208
+ e, m = match_elements(line)
209
+ if last
210
+ # so, there is a element in the queue
211
+ if e == comment_class
212
+ c = nil
213
+ elsif last.finished?
214
+ # last is finished, so we start a new element
215
+ 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)
222
+ # this line is something else, so we ask last if it wants
223
+ # to be continued
224
+ if @options.keep_whitespace or last.keep_whitespace
225
+ last << line
226
+ else
227
+ last << line.strip
228
+ end
229
+ c = nil
230
+ else
231
+ # last doesn't want this line, so we start a new element
232
+ last = finish_last(array, last, lineNumber - 1)
233
+ c = paragraph_class
234
+ end
235
+ else
236
+ # as there is no last element, we start a new one in any
237
+ # case
238
+ c = e || paragraph_class
239
+ end
240
+ if c and (c == command_class or !@deplate.switches.last)
241
+ c.do_accumulate(src, array, @deplate, line, m)
242
+ end
243
+ end
244
+ elsif last and !last.finished?
245
+ last = finish_last(array, last, lineNumber)
246
+ end
247
+ end
248
+ private :handle_line
249
+
250
+ def finish_last(array, last, lineNumber=-1)
251
+ last.source.end = lineNumber if lineNumber > 0
252
+ finished_element = last.finish
253
+ array.pop
254
+ if finished_element.kind_of?(Array)
255
+ for e in finished_element
256
+ handle_finished_element(array, e)
257
+ end
258
+ else
259
+ handle_finished_element(array, finished_element)
260
+ end
261
+ array.last
262
+ end
263
+ private :finish_last
264
+
265
+ def handle_finished_element(array, element)
266
+ unless element.nil? or element.drop?
267
+ pred = array.last
268
+ unless pred and pred.unify(element)
269
+ if !@deplate.labels_floating.empty? and element.can_be_labelled
270
+ element.put_label(@deplate.labels_floating)
271
+ @deplate.labels_floating = []
272
+ end
273
+ array << element
274
+ end
275
+ end
276
+ end
277
+ private :handle_finished_element
278
+
279
+
280
+ ### Elements
281
+
282
+ # Test for all elements except Paragraph. It's a real Paragraph if there
283
+ # is undefined text and the previous element wasn't a "multiliner"
284
+ def match_elements(line)
285
+ @elements.each do |e|
286
+ m = e.match(line)
287
+ if m
288
+ return [e, m]
289
+ end
290
+ end
291
+ return [nil, @paragraph_class.match(line)]
292
+ end
293
+ private :match_elements
294
+
295
+
296
+ ### Particles
297
+
298
+ # This is the method that does the actual parsing of elements into
299
+ # particles. It takes a regular expression made up of all known particles
300
+ # and matches the text against it. It splits the text into a prelude, a
301
+ # match, and the rest. The the prelude is turned into an instance of
302
+ # Deplate::Particle::Text, the match into a matching particle. The rest is
303
+ # matched against the grand regular expression again.
304
+ #
305
+ # This approach provides for easy runtime modifications of the
306
+ # lexer/parser, which wouldn't be possible, I assume, if I had used rexml
307
+ # or similar ... I assume.
308
+ #
309
+ # Anyway, you should call this method directly unless you have to, but use
310
+ # the more specialized ones.
311
+ def parse_using(container, text, rx, particles, alt=true)
312
+ rest = text
313
+ rt = []
314
+ last = ""
315
+ src = container ? container.source : nil
316
+ while !rest.empty?
317
+ begin
318
+ mx = rx.match(rest)
319
+ rescue RegexpError => e
320
+ if rest.size > 60
321
+ sample = "%s ..." % rest[0..60]
322
+ else
323
+ sample = rest
324
+ end
325
+ log_error(container, ["Regexp error when parsing", sample], :error, src)
326
+ rescue Exception => e
327
+ puts e.backtrace[0..10].join("\n")
328
+ raise e
329
+ end
330
+ if mx
331
+ rest = mx.post_match
332
+ catch(:ok) do
333
+ particles.each do |e|
334
+ m = e.match(mx[0])
335
+ if m
336
+ pre = mx.pre_match
337
+ unless pre.empty?
338
+ rt << Deplate::Particle::Text.new(@deplate, container, rt, mx.pre_match, alt, last)
339
+ 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
+ end
349
+ end
350
+ txt = mx.pre_match + mx[0]
351
+ rt << Deplate::Particle::Text.new(@deplate, container, rt, txt, alt, last, rest)
352
+ end
353
+ last = mx[0]
354
+ else
355
+ rt << Deplate::Particle::Text.new(@deplate, container, rt, rest, alt, last, "")
356
+ break
357
+ end
358
+ end
359
+ return rt
360
+ end
361
+
362
+ def parse_with_particles(container, text, particles, alt=true)
363
+ parse_using(container, text, get_particles(:rx, alt), particles, alt)
364
+ end
365
+
366
+ def parse_with_source(source, text, alt=true)
367
+ container = Deplate::PseudoContainer.new(@deplate, :source => source)
368
+ parse(container, text, alt)
369
+ end
370
+
371
+ def parse(container, text, alt=true, excluded=[])
372
+ rx, particles = get_particles(:both, alt)
373
+ for p in excluded
374
+ particles.delete(p)
375
+ end
376
+ parse_using(container, text, rx, particles, alt)
377
+ end
378
+
379
+ ### Arguments
380
+ # @@rxsrc_args = %{(\\w+?)(!|=("(\\\\"|[^"])*"|(\\\\=|.)+?))(\\s*$|(?= \w+(!|=)))}
381
+ # @@rxsrc_args = %{(\\w+?)(!|=((\\\\=|.)+?))(\\s*$|(?= \w+(!|=)))}
382
+ # @@rxsrc_argval = %{("(\\\\"|[^"])*?"|(\\\\=|\\\\:|\\\\!|[^=!]+)+?)}
383
+ # @@rxsrc_argval = %{(\\\\=|\\\\:|[^=:]*)+?}
384
+ # @@rxsrc_argval = %{("(\\\\"|[^"])*?"|(\\\\ |\\\\=|\\\\:|\\\\!|[%s]+)+?)}
385
+ @@rxsrc_argval = %{("(\\\\"|[^"])*"|\\([^)]+\\)|\\\\.|[%s"]+)+?}
386
+ # @@rxsrc_argval = %{("(\\\\"|[^"])*"|\\\\.|[%s"]+)+?}
387
+ @@rxsrc_key = %{[@\\w]+(\\[\\S*?\\])?}
388
+ @@rxsrc_args1 = %{(#{@@rxsrc_key})(!|=(#{@@rxsrc_argval}))\\s*} % "^=!:"
389
+ @@rxsrc_args2 = %{(#{@@rxsrc_key})(!|=(#{@@rxsrc_argval}))\\s*} % "^=!"
390
+ @@rx_args = /^\s*(#{@@rxsrc_args2})(\s*$|(?=\s+#{@@rxsrc_key}(!|=)))/
391
+ @@rx_argstext = /^\s*((#{@@rxsrc_args1})*?)(:\s*(.+))?$/
392
+
393
+ def parse_args(argText, container=nil, firstPass=true, parseText=false)
394
+ if argText
395
+ if firstPass
396
+ m = @@rx_argstext.match(argText)
397
+ else
398
+ m = [nil, argText]
399
+ end
400
+ accum = {}
401
+ if m
402
+ args = m[1]
403
+ text = m[10]
404
+ while !args.empty?
405
+ m = @@rx_args.match(args)
406
+ if m
407
+ key = m[2]
408
+ if key =~ /^no[A-Z]/
409
+ key_alt = key[2..2].downcase + key[3..-1]
410
+ accum[key_alt] = false
411
+ val = true
412
+ end
413
+ if m[4] == "!"
414
+ val = true
415
+ elsif m[5] == 'true'
416
+ val = true
417
+ elsif m[5] == 'false'
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])
435
+ break
436
+ end
437
+ 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
+ end
454
+ fmt = accum["fmt"]
455
+ accum.delete("fmt") if fmt
456
+ ifOpt = accum["if"]
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]
472
+ else
473
+ return [accum, text || ""]
474
+ end
475
+ else
476
+ raise Deplate::DontFormatException
477
+ end
478
+ else
479
+ return nil
480
+ end
481
+ end
482
+
483
+ private
484
+ def log_error(container, text)
485
+ (container || @deplate).log(text, :error)
486
+ end
487
+ end
488
+
489
+ # class Deplate::Core
490
+ # declare_input_format(Deplate::Input)
491
+ # end
492
+