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.
Files changed (160) hide show
  1. data/AUTHORS.TXT +3 -0
  2. data/CHANGES.TXT +248 -175
  3. data/LICENSE.TXT +0 -0
  4. data/NEWS.TXT +28 -24
  5. data/README.TXT +0 -0
  6. data/TODO.TXT +174 -88
  7. data/VERSION.TXT +1 -1
  8. data/bin/deplate +0 -0
  9. data/bin/deplate.bat +0 -0
  10. data/etc/deplate.ini +91 -3
  11. data/lib/action_view/helpers/deplate.rb +45 -0
  12. data/lib/deplate.rb +6 -1
  13. data/lib/deplate/abstract-class.rb +0 -0
  14. data/lib/deplate/bib.rb +576 -0
  15. data/lib/deplate/builtin.rb +0 -0
  16. data/lib/deplate/cache.rb +55 -5
  17. data/lib/deplate/commands.rb +346 -183
  18. data/lib/deplate/common.rb +209 -48
  19. data/lib/deplate/converter.rb +12 -6
  20. data/lib/deplate/core.rb +777 -378
  21. data/lib/deplate/counters.rb +254 -0
  22. data/lib/deplate/css/article.css +4 -3
  23. data/lib/deplate/css/deplate.css +121 -5
  24. data/lib/deplate/css/heading-navbar.css +0 -0
  25. data/lib/deplate/css/layout-deplate-print.css +0 -0
  26. data/lib/deplate/css/layout-deplate.css +0 -0
  27. data/lib/deplate/css/sans-serif.css +0 -0
  28. data/lib/deplate/css/serif-e.css +0 -0
  29. data/lib/deplate/css/serif-rel.css +0 -0
  30. data/lib/deplate/css/serif.css +9 -3
  31. data/lib/deplate/css/slides.css +0 -0
  32. data/lib/deplate/css/tabbar-left.css +0 -0
  33. data/lib/deplate/css/tabbar-right-ie.css +3 -9
  34. data/lib/deplate/css/tabbar-right.css +51 -18
  35. data/lib/deplate/css/tabbar-top.css +7 -1
  36. data/lib/deplate/css/tabbar.css +0 -0
  37. data/lib/deplate/css/text-sans-serif.css +0 -0
  38. data/lib/deplate/css/text-serif.css +0 -0
  39. data/lib/deplate/define.rb +183 -177
  40. data/lib/deplate/deplate-string.rb +82 -0
  41. data/lib/deplate/docbook.rb +236 -128
  42. data/lib/deplate/elements.rb +584 -417
  43. data/lib/deplate/etc.rb +163 -101
  44. data/lib/deplate/external.rb +42 -11
  45. data/lib/deplate/fmt/dbk-article-4.1.2.rb +0 -0
  46. data/lib/deplate/fmt/dbk-article.rb +0 -0
  47. data/lib/deplate/fmt/dbk-book.rb +0 -0
  48. data/lib/deplate/fmt/dbk-ref.rb +3 -3
  49. data/lib/deplate/fmt/dbk-slides.rb +0 -0
  50. data/lib/deplate/fmt/dbk-snippet.rb +0 -0
  51. data/lib/deplate/fmt/html-snippet.rb +0 -0
  52. data/lib/deplate/fmt/html.rb +783 -550
  53. data/lib/deplate/fmt/htmlsite.rb +192 -199
  54. data/lib/deplate/fmt/htmlslides.rb +0 -0
  55. data/lib/deplate/fmt/htmlwebsite.rb +3 -3
  56. data/lib/deplate/fmt/latex-snippet.rb +0 -0
  57. data/lib/deplate/fmt/latex.rb +242 -83
  58. data/lib/deplate/fmt/null.rb +32 -0
  59. data/lib/deplate/fmt/php.rb +4 -4
  60. data/lib/deplate/fmt/phpsite.rb +6 -5
  61. data/lib/deplate/fmt/plain.rb +160 -106
  62. data/lib/deplate/fmt/template.rb +0 -0
  63. data/lib/deplate/fmt/xhtml10t.rb +0 -0
  64. data/lib/deplate/formatter-snippet.rb +0 -0
  65. data/lib/deplate/formatter.rb +613 -301
  66. data/lib/deplate/input.rb +202 -142
  67. data/lib/deplate/input/deplate-headings.rb +4 -6
  68. data/lib/deplate/input/deplate-restricted.rb +15 -9
  69. data/lib/deplate/input/deplate.rb +2 -4
  70. data/lib/deplate/input/rdoc.rb +39 -38
  71. data/lib/deplate/input/template.rb +0 -0
  72. data/lib/deplate/lib/Makefile.config +29 -0
  73. data/lib/deplate/lib/latex/deplate.sty +54 -0
  74. data/lib/deplate/lib/latex/highlight-extra.sty +0 -0
  75. data/lib/deplate/lib/latex/highlight-typical.sty +0 -0
  76. data/lib/deplate/lib/php/page-comment.inc.php +216 -0
  77. data/lib/deplate/lib/tabmenu.js +0 -0
  78. data/lib/deplate/locale/de.latin1 +155 -17
  79. data/lib/deplate/locale/ru.koi8-r +0 -0
  80. data/lib/deplate/locale/zh_cn.gb2312 +0 -0
  81. data/lib/deplate/macros.rb +133 -82
  82. data/lib/deplate/messages.rb +6 -4
  83. data/lib/deplate/metadata.rb +0 -0
  84. data/lib/deplate/metadata/marshal.rb +0 -0
  85. data/lib/deplate/metadata/xml.rb +0 -0
  86. data/lib/deplate/metadata/yaml.rb +0 -0
  87. data/lib/deplate/mod/anyword.rb +3 -3
  88. data/lib/deplate/mod/babelfish.rb +4 -4
  89. data/lib/deplate/mod/code-gvim.rb +8 -4
  90. data/lib/deplate/mod/code-highlight.rb +3 -3
  91. data/lib/deplate/mod/colored-log.rb +0 -0
  92. data/lib/deplate/mod/de.rb +2 -2
  93. data/lib/deplate/mod/en.rb +0 -0
  94. data/lib/deplate/mod/endnotes.rb +0 -0
  95. data/lib/deplate/mod/fr.rb +0 -0
  96. data/lib/deplate/mod/html-asciimath.rb +0 -0
  97. data/lib/deplate/mod/html-deplate-button.rb +0 -0
  98. data/lib/deplate/mod/html-headings-navbar.rb +5 -13
  99. data/lib/deplate/mod/html-jsmath.rb +39 -0
  100. data/lib/deplate/mod/html-obfuscate-email.rb +3 -3
  101. data/lib/deplate/mod/html-sidebar.rb +0 -0
  102. data/lib/deplate/mod/htmlslides-navbar-fh.rb +3 -3
  103. data/lib/deplate/mod/iconv.rb +0 -0
  104. data/lib/deplate/mod/imgurl.rb +4 -4
  105. data/lib/deplate/mod/inlatex-compound.rb +7 -10
  106. data/lib/deplate/mod/koma.rb +0 -0
  107. data/lib/deplate/mod/latex-emph-table-head.rb +0 -0
  108. data/lib/deplate/mod/latex-styles.rb +7 -4
  109. data/lib/deplate/mod/latex-verbatim-small.rb +0 -0
  110. data/lib/deplate/mod/makefile.rb +23 -7
  111. data/lib/deplate/mod/mark-external-urls.rb +3 -3
  112. data/lib/deplate/mod/markup-1-warn.rb +10 -10
  113. data/lib/deplate/mod/markup-1.rb +0 -0
  114. data/lib/deplate/mod/navbar-png.rb +24 -8
  115. data/lib/deplate/mod/noindent.rb +0 -0
  116. data/lib/deplate/mod/numpara.rb +0 -0
  117. data/lib/deplate/mod/particle-math.rb +4 -4
  118. data/lib/deplate/mod/php-extra.rb +46 -6
  119. data/lib/deplate/mod/pstoedit.rb +0 -0
  120. data/lib/deplate/mod/recode.rb +0 -0
  121. data/lib/deplate/mod/ru_koi8-r.rb +0 -0
  122. data/lib/deplate/mod/smart-dash.rb +26 -0
  123. data/lib/deplate/mod/smiley.rb +69 -7
  124. data/lib/deplate/mod/soffice.rb +0 -0
  125. data/lib/deplate/mod/symbols-latin1.rb +14 -23
  126. data/lib/deplate/mod/symbols-od-utf-8.rb +5 -3
  127. data/lib/deplate/mod/symbols-plain.rb +5 -35
  128. data/lib/deplate/mod/symbols-sgml.rb +8 -9
  129. data/lib/deplate/mod/symbols-utf-8.rb +8 -9
  130. data/lib/deplate/mod/symbols-xml.rb +5 -9
  131. data/lib/deplate/mod/syntax-region-alt.rb +5 -5
  132. data/lib/deplate/mod/utf8.rb +0 -0
  133. data/lib/deplate/mod/validate-html.rb +0 -0
  134. data/lib/deplate/mod/xmlrpc.rb +0 -0
  135. data/lib/deplate/mod/zh-cn-autospace.rb +18 -20
  136. data/lib/deplate/mod/zh-cn.rb +4 -6
  137. data/lib/deplate/nukumi2.rb +71 -0
  138. data/lib/deplate/once-method.rb +0 -0
  139. data/lib/deplate/output.rb +19 -21
  140. data/lib/deplate/particles.rb +178 -116
  141. data/lib/deplate/regions.rb +99 -58
  142. data/lib/deplate/skeletons.rb +122 -0
  143. data/lib/deplate/structured.rb +164 -106
  144. data/lib/deplate/template.rb +67 -43
  145. data/lib/deplate/templates/html-doc.html +0 -0
  146. data/lib/deplate/templates/html-left-tabbar-js.html +0 -0
  147. data/lib/deplate/templates/html-left-tabbar.html +0 -0
  148. data/lib/deplate/templates/html-tabbar-right-pcomments.php +22 -0
  149. data/lib/deplate/templates/html-tabbar-right-step.html +24 -0
  150. data/lib/deplate/templates/html-tabbar-right-table.html +0 -0
  151. data/lib/deplate/templates/html-tabbar-right.html +2 -4
  152. data/lib/deplate/templates/html-tabbar-top.html +0 -9
  153. data/lib/deplate/templates/html-tabbar.html +0 -0
  154. data/lib/deplate/variables.rb +127 -0
  155. data/lib/deplate/wiki-markup.rb +99 -33
  156. data/lib/deplate/xml.rb +18 -18
  157. data/lib/deplate/zh-cn.rb +0 -0
  158. data/lib/ps2ppm.rb +0 -0
  159. data/man/man1/deplate.1 +564 -474
  160. metadata +201 -186
@@ -3,8 +3,8 @@
3
3
  # @Website: http://deplate.sf.net/
4
4
  # @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
5
5
  # @Created: 24-M�r-2004.
6
- # @Last Change: 02-Nov-2005.
7
- # @Revision: 0.1655
6
+ # @Last Change: 05-Jun-2006.
7
+ # @Revision: 0.1847
8
8
 
9
9
  require "uri"
10
10
  require "deplate/common"
@@ -12,8 +12,6 @@ require "deplate/common"
12
12
 
13
13
  # Sub-line level text bits.
14
14
  class Deplate::Particle < Deplate::BaseParticle
15
- # An array of auto-indexed words/strings.
16
- @@autoindexed = []
17
15
  # An array of the default particle classes.
18
16
  @@particles = []
19
17
  # The regular expression for the default particle classes.
@@ -25,8 +23,6 @@ class Deplate::Particle < Deplate::BaseParticle
25
23
  @@rx_extended = nil
26
24
 
27
25
  class << self
28
- attr :rx
29
-
30
26
  def particles
31
27
  @@particles
32
28
  end
@@ -44,16 +40,20 @@ class Deplate::Particle < Deplate::BaseParticle
44
40
  end
45
41
 
46
42
  def match(text)
47
- return @rx.match(text)
43
+ return self.rx.match(text)
48
44
  end
49
45
 
50
46
  def register_particle(c=self)
51
47
  @@particles << c
52
48
  end
49
+
50
+ def disable_particle(*particles)
51
+ particles.each {|p| @@particles.delete(p)}
52
+ end
53
53
 
54
54
  # Create an auto-indexed word. Arguments:
55
55
  # deplate:: An instance of Deplate::Core.
56
- # idx:: An instance of the Deplate::Core::IndexEntry structure.
56
+ # idx:: An instance of the Deplate::IndexEntry structure.
57
57
  def auto_indexing(deplate, idx)
58
58
  if idx
59
59
  i = idx.name
@@ -61,14 +61,15 @@ class Deplate::Particle < Deplate::BaseParticle
61
61
  name = i.gsub(/\W\|s/) do |x|
62
62
  x.unpack('H2' * x.size)
63
63
  end
64
- if !w.any? {|x| @@autoindexed.include?(x)}
65
- @@autoindexed += w
64
+ autoindexed = deplate.options.autoindexed
65
+ if !w.any? {|x| autoindexed.include?(x)}
66
+ autoindexed.concat(w)
66
67
  aname = %{AutoIndex#{name}}
67
68
  if self == Deplate::HyperLink
68
69
  rx = Regexp.escape(i).gsub(/\\/, "\\\\")
69
70
  rx.gsub!(/"/, %{\\\\"})
70
71
  body = <<-EOR
71
- @rx = %r{^\\b#{rx}\\b}
72
+ set_rx(%r{^\\b#{rx}\\b})
72
73
  def setup
73
74
  super
74
75
  name = match[0]
@@ -86,7 +87,7 @@ class Deplate::Particle < Deplate::BaseParticle
86
87
  rx = w.collect {|i| Regexp.escape(i)}.join("\\b|\\b")
87
88
  rx.gsub!(/"/, %{\\\\"})
88
89
  body = <<-EOR
89
- @rx = %r{^\\b#{rx}\\b}
90
+ set_rx(%r{^\\b#{rx}\\b})
90
91
  def setup
91
92
  @idx = @deplate.add_index(self, %{#{idxName}}) if @container
92
93
  end
@@ -95,12 +96,13 @@ class Deplate::Particle < Deplate::BaseParticle
95
96
  @elt = plain_text(Deplate::Core.remove_backslashes(@match[0])) +
96
97
  format_particle(:format_index, self, @idx)
97
98
  else
98
- @elt = ""
99
+ @elt = ''
99
100
  end
100
101
  end
101
102
  EOR
102
103
  end
103
104
  cls = Deplate::Cache.particle(deplate, body,
105
+ :super => Deplate::Autoindex,
104
106
  :register => true,
105
107
  :extended => true)
106
108
  end
@@ -114,9 +116,9 @@ class Deplate::Particle < Deplate::BaseParticle
114
116
 
115
117
  end
116
118
 
117
- def initialize(deplate, container, context, match, alt, last="", rest="")
119
+ def initialize(deplate, container, context, match, alt, last='', rest='')
118
120
  super(deplate, :container => container)
119
- @level_as_string = container.level_as_string if container
121
+ self.level_as_string = container.level_as_string if container
120
122
  @context = context
121
123
  @match = match
122
124
  @last = last
@@ -133,23 +135,47 @@ class Deplate::Particle < Deplate::BaseParticle
133
135
  end
134
136
 
135
137
 
138
+ class Deplate::Autoindex < Deplate::Particle
139
+ end
140
+
141
+
136
142
  # A wrapper class for simple particles that require only minimal
137
143
  # processing.
138
144
  class Deplate::SimpleParticle < Deplate::Particle
139
145
  def setup
140
146
  @elt = @deplate.parse(@container, get_text, @alt)
141
147
  end
148
+
142
149
  def get_text
143
150
  @match[1]
144
151
  end
152
+
153
+ def process
154
+ @elt = @deplate.format_particles(@elt)
155
+ fmt = self.class.formatter
156
+ if fmt
157
+ @elt = format_particle(fmt, self, @elt)
158
+ # else
159
+ # raise 'Internal error: No formatter'
160
+ end
161
+ end
145
162
  end
146
163
 
147
164
 
148
165
  # A pseudo-particle class. Note the following difference: @match holds
149
166
  # the plain text as String and not as MatchData.
150
167
  class Deplate::Particle::Text < Deplate::Particle
168
+ # set_formatter :plain_text
169
+ class << self
170
+ def pseudo_match(text)
171
+ [text]
172
+ end
173
+ end
151
174
  def process
152
- @elt = plain_text(@match)
175
+ @elt = plain_text(get_text)
176
+ end
177
+ def get_text
178
+ @match[0]
153
179
  end
154
180
  end
155
181
 
@@ -157,7 +183,7 @@ end
157
183
  # Match characters escaped with a backslash.
158
184
  class Deplate::Particle::Escaped < Deplate::Particle
159
185
  register_particle
160
- set_rx /^\\(.)/
186
+ set_rx(/^\\(.)/)
161
187
  def process
162
188
  @elt = plain_text(@match[1], true)
163
189
  end
@@ -166,12 +192,24 @@ end
166
192
 
167
193
  # Match emphasized text marked as <tt>__text__</tt>.
168
194
  class Deplate::Particle::Emphasize < Deplate::SimpleParticle
169
- register_particle
170
- set_rx /^__((\\_|.)+?)__/
171
- def process
172
- @elt = @deplate.format_particles(@elt)
173
- @elt = format_particle(:format_emphasize, self, @elt)
195
+ class << self
196
+ def markup(text)
197
+ if text
198
+ [
199
+ '__',
200
+ Deplate::Core.escape_characters(text, :escape => '_\\'),
201
+ '__'
202
+ ].join
203
+ end
204
+ end
174
205
  end
206
+ register_particle
207
+ set_rx(/^__((\\_|.)+?)__/)
208
+ set_formatter :format_emphasize
209
+ # def process
210
+ # @elt = @deplate.format_particles(@elt)
211
+ # @elt = format_particle(:format_emphasize, self, @elt)
212
+ # end
175
213
  end
176
214
 
177
215
 
@@ -179,23 +217,29 @@ end
179
217
  class Deplate::Particle::Code < Deplate::Particle
180
218
  register_particle
181
219
  set_rx(/^''((\\\\|\\'|.)+?)''/)
220
+ def_get :text, 1
182
221
 
183
222
  class << self
184
223
  # Programmatically markup text as code. Used e.g. for some
185
224
  # R-generated tables.
186
225
  def markup(text)
187
- [%{''}, text.gsub("'", "\\\\'"), %{''}].join
226
+ [
227
+ %{''},
228
+ # text.gsub("'", "\\\\'"),
229
+ Deplate::Core.escape_characters(text, :escape => "'\\"),
230
+ %{''}
231
+ ].join
188
232
  end
189
233
  end
190
234
 
235
+ def hook_pre_process
236
+ @elt = Deplate::Core.remove_backslashes(@elt)
237
+ end
238
+
191
239
  def process
192
240
  text = Deplate::Core.remove_backslashes(get_text)
193
241
  @elt = format_particle(:format_code, self, text)
194
242
  end
195
-
196
- def get_text
197
- @match[1]
198
- end
199
243
  end
200
244
 
201
245
 
@@ -204,28 +248,8 @@ end
204
248
  class Deplate::Particle::Symbol < Deplate::Particle
205
249
  register_particle
206
250
 
207
- # A hash of symbols and method names for formatting this symbol.
208
- @@symbols_table = {}
209
- # An array of symbols in order as they were defined -- as ruby
210
- # eagerly sorts the keys in the @@symbols_table hash. This is used
211
- # for building the rx.
212
- @@symbols_keys = []
213
-
214
- class << self
215
- # Add a symbol. If val is nil, a general formatter dependent
216
- # routine will be used.
217
- def add_symbol(key, val=nil)
218
- @@symbols_keys << Regexp.escape(key)
219
- @@symbols_table[key] = val
220
- end
221
-
222
- # Build the rx based on @@symbols_keys.
223
- def setup_rx
224
- @rx = Regexp.new(%{^(%s)} % @@symbols_keys.join("|"))
225
- end
226
- end
227
-
228
- for i in [
251
+ # An association array of symbols and method names for formatting this symbol.
252
+ @@symbols_table = [
229
253
  ["<->"],
230
254
  ["<-" ],
231
255
  ["->" ],
@@ -251,14 +275,44 @@ class Deplate::Particle::Symbol < Deplate::Particle
251
275
  ["``", :singlequote_open],
252
276
  ["`'", :singlequote_close],
253
277
  ]
254
- add_symbol(*i)
278
+ # An array of symbols in order as they were defined -- as ruby
279
+ # eagerly sorts the keys in the @@symbols_table hash. This is used
280
+ # for building the rx.
281
+ @@symbols_keys = []
282
+
283
+ class << self
284
+ # Add a symbol. If val is nil, a general formatter dependent
285
+ # routine will be used.
286
+ def add_symbol(key, val=nil)
287
+ @@symbols_keys << Regexp.escape(key)
288
+ # @@symbols_table[key] = val
289
+ end
290
+
291
+ # Build the rx based on @@symbols_keys.
292
+ def setup_rx
293
+ set_rx(Regexp.new(%{^(%s)} % @@symbols_keys.join("|")))
294
+ end
295
+
296
+ def reset_symbols
297
+ @@symbols_keys = []
298
+ for i in @@symbols_table
299
+ add_symbol(*i)
300
+ end
301
+ setup_rx
302
+ end
255
303
  end
256
- setup_rx
257
304
 
305
+ reset_symbols
306
+
258
307
  def process
259
- sym = @@symbols_table[@match[1]]
260
- if sym
308
+ sym = @@symbols_table.assoc(@match[1])[1]
309
+ case sym
310
+ when ::Proc
311
+ @elt = instance_eval &sym
312
+ when ::Symbol
261
313
  @elt = @deplate.formatter.send(sym, self)
314
+ when ::String
315
+ @elt = format_particle(:format_symbol, self, sym)
262
316
  else
263
317
  @elt = format_particle(:format_symbol, self, @match[1])
264
318
  end
@@ -270,7 +324,7 @@ class Deplate::Particle::DoubleQuote < Deplate::Particle
270
324
  register_particle
271
325
  set_rx(/^"/)
272
326
  def process
273
- if @last =~ /(^|[\s({\[])$/
327
+ if @last =~ /(^|[\s({\[])$/ or (@rest =~ /^\w/ and @last =~ /\W$/)
274
328
  @elt = format_particle(:doublequote_open, self)
275
329
  else
276
330
  @elt = format_particle(:doublequote_close, self)
@@ -283,7 +337,7 @@ class Deplate::Particle::SingleQuote < Deplate::Particle
283
337
  register_particle
284
338
  set_rx(/^'/)
285
339
  def process
286
- if @last =~ /(^|[\s({\[])$/
340
+ if @last =~ /(^|[\s({\[])$/ or (@rest =~ /^\w/ and @last =~ /\W$/)
287
341
  @elt = format_particle(:singlequote_open, self)
288
342
  else
289
343
  @elt = format_particle(:singlequote_close, self)
@@ -340,17 +394,29 @@ class Deplate::HyperLink < Deplate::Particle
340
394
  def url_anchor(url, anchor)
341
395
  dest = [url]
342
396
  if anchor and !anchor.empty?
343
- dest << "#" << anchor
397
+ dest << '#' << anchor
344
398
  end
345
399
  dest.join
346
400
  end
401
+
402
+ def upper_case_chars
403
+ @@uc
404
+ end
405
+
406
+ def lower_case_chars
407
+ @@lc
408
+ end
409
+
410
+ def chars
411
+ @@uc + @@lc
412
+ end
347
413
  end
348
414
 
349
415
  include Deplate::InterWiki
350
416
 
351
417
  def get_InterWiki(id)
352
418
  d = @@interwikis[id]
353
- Deplate::Core.log(["Unknown InterWiki name", id], :error, @container.source) unless d
419
+ Deplate::Core.log(['Unknown InterWiki name', id], :error, @container.source) unless d
354
420
  return d
355
421
  end
356
422
 
@@ -367,15 +433,15 @@ class Deplate::HyperLink < Deplate::Particle
367
433
  #
368
434
  # +++ the heuristic is fragile and sometimes gives wrong results
369
435
  def complete_wiki_ref(inter, name, dest, anchor)
370
- sfx = @deplate.variables["suffix"]
371
- sfx = ".%s" % sfx if sfx
436
+ sfx = @deplate.variables['suffix']
437
+ sfx = '.%s' % sfx if sfx
372
438
  if dest.empty?
373
439
  label = guess_label(dest, anchor)
374
440
  if label
375
441
  dest = @container.output_file_name(:relative => self)
376
442
  return :wiki, name, dest, label
377
443
  else
378
- log(["Wiki reference to unknown anchor", "#{dest}##{anchor}"], :error)
444
+ log(['Wiki reference to unknown anchor', "#{dest}##{anchor}"], :error)
379
445
  return nil
380
446
  end
381
447
  elsif @literal
@@ -396,23 +462,23 @@ class Deplate::HyperLink < Deplate::Particle
396
462
  return :url, name, d.url + @deplate.file_with_suffix(dest, d.sfx), anchor
397
463
  end
398
464
  # we then check if the file was included
399
- elsif @deplate.file_included?(dest, File.dirname(@container.source.file || ""), sfx)
465
+ elsif @deplate.file_included?(dest, File.dirname(@container.source.file || ''), sfx)
400
466
  label = guess_label(@deplate.file_with_suffix(dest, sfx), anchor)
401
467
  if label
402
468
  dest = @container.output_file_name(:label => label)
403
469
  else
404
- dest = ""
470
+ dest = ''
405
471
  end
406
472
  return :wiki, name, dest, label
407
473
  end
408
474
  # Fallback heuristic
409
- src = @container.source.file || ""
475
+ src = @container.source.file || ''
410
476
  dest_sfx = File.extname(dest)
411
477
  dest_abs = File.expand_path(dest, File.basename(src))
412
478
  dest_is_dir = (File.exist?(dest_abs) and File.stat(dest_abs).directory?)
413
- if !dest_is_dir and (dest_sfx == "" or dest_sfx == sfx or dest_sfx == File.extname(src))
479
+ if !dest_is_dir and (dest_sfx == '' or dest_sfx == sfx or dest_sfx == File.extname(src))
414
480
  dest1 = @deplate.file_with_suffix(dest, @deplate.options.suffix)
415
- name = dest1 if !dest_sfx.empty? and (name == dest or name == "")
481
+ name = dest1 if !dest_sfx.empty? and (name == dest or name == '')
416
482
  return :url, name, dest1, anchor
417
483
  else
418
484
  return :url, name, dest, anchor
@@ -421,8 +487,8 @@ class Deplate::HyperLink < Deplate::Particle
421
487
 
422
488
  def indexing(idx)
423
489
  idx = idx.compact
424
- unless @deplate.variables["indexwiki"] == "no" or idx.empty?
425
- auto = @deplate.variables["autoindex"]
490
+ unless @deplate.variables['indexwiki'] == 'no' or idx.empty?
491
+ auto = @deplate.variables['autoindex']
426
492
  for i in idx
427
493
  Deplate::Particle.auto_indexing(@deplate, i) if auto
428
494
  end
@@ -435,14 +501,14 @@ class Deplate::HyperLink < Deplate::Particle
435
501
  def process
436
502
  type, name, dest, anchor = complete_wiki_ref(@inter, *@elt)
437
503
  if type
438
- dest.gsub!(/\\/, "/")
504
+ dest.gsub!(/\\/, '/')
439
505
  dest = encode_dest(dest)
440
506
  anchor = encode_anchor(anchor)
441
507
  if dest =~ Deplate::HyperLink::Url.rx
442
508
  if dest =~ /^mailto:/
443
- @styles << "mailto"
509
+ @styles << 'mailto'
444
510
  else
445
- @styles << "remote"
511
+ @styles << 'remote'
446
512
  end
447
513
  end
448
514
  case type
@@ -471,7 +537,7 @@ class Deplate::HyperLink < Deplate::Particle
471
537
 
472
538
  def encode_dest(dest)
473
539
  if dest =~ /^~/
474
- return "file://%s" % File.join(ENV["HOME"], encode_path(dest[1..-1]))
540
+ return 'file://%s' % File.join(ENV['HOME'], encode_path(dest[1..-1]))
475
541
  elsif dest =~ Deplate::HyperLink::Url.rx
476
542
  # elsif dest =~ URI::REGEXP::ABS_URI
477
543
  # if it looks like an url, we assume that it's already properly encoded
@@ -502,17 +568,24 @@ class Deplate::HyperLink::Extended < Deplate::HyperLink
502
568
  class << self
503
569
  def setup
504
570
  # @rx = /^\[\[([^\]#]*)(#(#{@@bc}))?\](\[(.+?)\])?([-!~*]*)\]/
505
- @rx = /^\[\[([^\]#]*)(#([^\]]*))?\](\[(.+?)\])?([-!~*]*)\]/
571
+ # @rx = /^\[\[([^\]#]*)(#([^\]]*))?\](\[(.+?)\])?([-!~*]*)\]/
572
+ set_rx(/^\[\[(([#{@@uc}]+?)::)?([^\]#]*)(#([^\]]*))?\](\[(.+?)\])?([-!~*]*)\]/)
506
573
  end
507
574
  end
508
575
 
576
+ def_get :interwiki, 2
577
+ def_get :destination, 3
578
+ def_get :anchor, 5
579
+ def_get :name, 7
580
+ def_get :modifier, 8
581
+
509
582
  def setup
510
- @inter = nil
511
- @dest = get_destination || ""
583
+ @inter = get_interwiki
584
+ @dest = get_destination || ''
512
585
  @anchor = get_anchor
513
586
  @name = get_name
514
- @modifier = get_modifier || ""
515
- unless @modifier.include?("-")
587
+ @modifier = get_modifier || ''
588
+ unless @modifier.include?('-')
516
589
  if @name
517
590
  id = @name
518
591
  else
@@ -529,7 +602,7 @@ class Deplate::HyperLink::Extended < Deplate::HyperLink
529
602
  idx = []
530
603
  end
531
604
  @idx = indexing(idx)
532
- @literal = @modifier.include?("!") # || @dest =~ Deplate::HyperLink::Url.rx
605
+ @literal = @modifier.include?('!') # || @dest =~ Deplate::HyperLink::Url.rx
533
606
  if @modifier.include?('~') and @dest =~ /^\~/
534
607
  @dest = File.expand_path(@dest)
535
608
  end
@@ -537,22 +610,6 @@ class Deplate::HyperLink::Extended < Deplate::HyperLink
537
610
  @args['target'] = '_blank'
538
611
  end
539
612
  end
540
-
541
- def get_destination
542
- @match[1]
543
- end
544
-
545
- def get_anchor
546
- @match[3]
547
- end
548
-
549
- def get_name
550
- @match[5]
551
- end
552
-
553
- def get_modifier
554
- @match[6]
555
- end
556
613
 
557
614
  def process
558
615
  @name = @deplate.parse_and_format(self, @name, false, [
@@ -589,11 +646,21 @@ end
589
646
  # OTHERDEPLATE::[-some name-]#there
590
647
  class Deplate::HyperLink::Simple < Deplate::HyperLink
591
648
  register_particle
649
+ self.pre_condition = lambda do |match|
650
+ pre = match.pre_match
651
+ cond = pre.empty? || pre !~ /[#{@@uc}#{@@lc}[:alnum:]]$/
652
+ if cond
653
+ post = match.post_match
654
+ cond &&= (post.empty? || post !~ /^[#{@@uc}#{@@lc}[:alnum:]]/)
655
+ end
656
+ cond
657
+ end
592
658
 
593
659
  class << self
594
660
  def setup
595
661
  # @rx = /^((\b[#{@@uc}]+)::)?(\[-(.*?)-\]|\b[#{@@uc}][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+\b)(#(#{@@ac})\b)?/
596
- @rx = /^(([#{@@uc}]+)::)?(\[-(.*?)-\]|\b[#{@@uc}][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+\b)(#(#{@@ac}))?/
662
+ # set_rx(/^(([#{@@uc}]+)::)?(\[-(.*?)-\]|\b[#{@@uc}][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+\b)(#(#{@@ac}))?/)
663
+ set_rx(/^(([#{@@uc}]+)::)?(\[-(.*?)-\]|[#{@@uc}][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+)(#(#{@@ac}))?/)
597
664
  # @rx = /^(([#{@@uc}]+)::)?(\[-(.*?)-\]|\b[A-Z][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+)(#(#{@@ac}))?(?!#{@@ac})/
598
665
  # @rx = /^(([#{@@uc}]+)::)?(\[-(.*?)-\]|\b[#{@@uc}][#{@@lc}]+([#{@@uc}][#{@@lc}0-9]+)+)(#(#{@@ac}))?(?!(#{@@ac}|$))/
599
666
  end
@@ -687,29 +754,16 @@ class Deplate::Particle::Macro < Deplate::Particle
687
754
  # The macro name.
688
755
  attr_reader :macro
689
756
 
690
- class << self
691
- # This function builds the rx for the macro reader. The optional
692
- # argument defines the depth of nested macros for which the
693
- # regular expression is being built. The default is 5 which should
694
- # be sufficient due to the primitivity of the macro language.
695
- def build_rx(depth=5)
696
- @rx = "\\{(?>\\\\\\{|\\\\\\}|\\\\\\\\|[^{}]+?|#)*\\}"
697
- @rxr = @rx.gsub("\\", "\\\\\\\\")
698
- for i in 1..depth
699
- @rx.gsub!(/#/, @rxr)
700
- end
701
- @rx.gsub!(/#/, "[^{}]+?")
702
- @rx = Regexp.new("^" + @rx)
703
- end
704
- end
705
-
706
- build_rx
757
+ set_rx Deplate::Rx.builder('\\{(?>\\\\\\{|\\\\\\}|\\\\\\\\|[^{}]+?|{#})*\\}')
707
758
 
708
759
  def setup
709
760
  begin
710
761
  macro = get_text
711
- unless macro.empty?
762
+ if macro.empty?
763
+ @elt = plain_text(@match[0], false)
764
+ else
712
765
  @macro, args, text = split_name_args(macro)
766
+ # args[:macro] = macro
713
767
  if @macro
714
768
  @elt = Deplate::Macro.exec(@deplate, @container, @context, @macro, args, @alt, text)
715
769
  if @elt
@@ -733,7 +787,8 @@ class Deplate::Particle::Macro < Deplate::Particle
733
787
  end
734
788
 
735
789
  def split_name_args(macro)
736
- m = /^([^a-zA-Z]|[[:alnum:]_]+)(.*)$/.match(macro)
790
+ # m = /^([^a-zA-Z]|[[:alnum:]_]+)(.*)$/.match(macro)
791
+ m = /^([^a-zA-Z]|[^:[:space:]]+)(.*)$/.match(macro)
737
792
  if m
738
793
  macro = m[1]
739
794
  if macro =~ /^[^a-zA-Z]/
@@ -750,7 +805,14 @@ class Deplate::Particle::Macro < Deplate::Particle
750
805
  end
751
806
 
752
807
  def process
753
- @elt = if @elt then @elt.process else "" end
808
+ @elt = case @elt
809
+ when String
810
+ @elt
811
+ when nil
812
+ ''
813
+ else
814
+ @elt.process
815
+ end
754
816
  end
755
817
  end
756
818
 
@@ -758,7 +820,7 @@ end
758
820
  # Give warnings about misplaced, unbalanced, or not-escaped curly braces.
759
821
  class Deplate::Particle::CurlyBrace < Deplate::Particle
760
822
  register_particle
761
- set_rx /^([{}])/
823
+ set_rx(/^([{}])/)
762
824
 
763
825
  def process
764
826
  sample_pre = @last[-10..-1]
@@ -772,7 +834,7 @@ end
772
834
  # Match against whitespace. This class is currently only used for
773
835
  # template input filter.
774
836
  class Deplate::Particle::Whitespace < Deplate::Particle
775
- set_rx /^\s+/
837
+ set_rx(/^\s+/)
776
838
 
777
839
  def process
778
840
  @elt = @match[0]