trac-wiki 0.3.29 → 0.3.30

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9b5ec9f3bc16fa6f4d396574df290fcec619af0
4
- data.tar.gz: e1d703758466837f1fad8770696982f7d6c8667a
3
+ metadata.gz: 107e539c3fae535e4b91d514bf1029e2a4ff4ab7
4
+ data.tar.gz: 58eecadc0308900fadb9da7aff1bd4a087265966
5
5
  SHA512:
6
- metadata.gz: 2209fd84630c345578bc32e9d7ca8557b9f0abb89f5d26b603ad6f836c14defebba6eea592eeac742472050c4a284752539d55cc87efbfcd8fc3fd3034e68ebb
7
- data.tar.gz: f0ac26537e613f37456886b88e6d2e5901a01bb8b0ff691df619134b63a56d606c36a7d35b62ea1e243539df79def9b901f414c9c17379e000a461db33e11327
6
+ metadata.gz: 25571b19eaf7b3aeb17c8ecb82a02921bd810605109ff6d47790db88ac391fdbfe4773ab27def6efd8b20f3809563a0584b7543c959917801ca0542f96a00739
7
+ data.tar.gz: fff67c49f1eecc16441bacd85cd4bac4bdff762ed71dd102ce7f3e6f402f547d1aa8e930f7158211a09c18d311f3497323cfbeb85ac29e5fe4d9847fafc332f6
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trac-wiki (0.3.28)
4
+ trac-wiki (0.3.29)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -2,6 +2,8 @@
2
2
  require 'cgi'
3
3
  require 'uri'
4
4
  require 'yaml'
5
+ require 'base64'
6
+ require 'digest/sha2'
5
7
  require 'unicode_utils/compatibility_decomposition'
6
8
 
7
9
  # :main: TracWiki
@@ -131,10 +133,10 @@ module TracWiki
131
133
 
132
134
  # macro {{$var}} | {{#comment}} | {{!cmd}} | {{template}} | {{/template}}
133
135
  # string begins with macro
134
- MACRO_BEG_REX = /\A\{\{ ( \$[\$\.\w]+ | [\#!\/]\w* |\w+ ) /x
135
- MACRO_BEG_INSIDE_REX = /\A(.*?) (?<!\{|!|!\{) \{\{ ( \$[\$\.\w]+ | [\#!\/]\w* | \w+ ) /xm
136
+ MACRO_BEG_REX = /\A\{\{ ( \$[#\$\.\w]+ | [\#!\/]\w* |\w+ ) /x
137
+ MACRO_BEG_INSIDE_REX = /\A(.*?) (?<!\{|!|!\{) \{\{ ( \$[#\$\.\w]+ | [\#!\/]\w* | \w+ ) /xm
136
138
  # find end of marcro or begin of inner macro
137
- MACRO_END_REX = /\A(.*?) ( \}\} | \{\{ ( \$[\$\.\w]+ | [\#!\/]\w* | \w+) )/mx
139
+ MACRO_END_REX = /\A(.*?) ( \}\} | \{\{ ( \$[#\$\.\w]+ | [\#!\/]\w* | \w+) )/mx
138
140
 
139
141
  # Create a new Parser instance.
140
142
  def initialize(options = {})
@@ -227,29 +229,83 @@ module TracWiki
227
229
  pat = Regexp.new(pat[1..-2]) if pat =~ /\A\/.*\/\Z/
228
230
  env.expand_arg(0).gsub(pat, env.expand_arg(2))
229
231
  },
230
- '!macpos' => proc { |env| "#{env.at('lineno')}.#{env.at('offset')}-#{env.at('elineno')}.#{env.at('eoffset')}" },
232
+ '!macpos'=> proc { |env| "#{env.at('lineno')}.#{env.at('offset')}-#{env.at('elineno')}.#{env.at('eoffset')}" },
233
+ # in macro {{arg {{$i}}} -> i=4 => ctyry
234
+ '!arg' => proc { |env|
235
+ #print "arg: #{env.arg(0)}, #{env} }"
236
+ "#{env.at(env.expand(env.arg(0)))}"
237
+ },
238
+
239
+ # {{!forargs i|3|i:{$$i}}}} -> 0,1,2
240
+ # {{!forargs i||i:{$$i}}}} -> 0,1,2
241
+ '!sprintf' => proc { |env|
242
+ fmt = env.arg(0)
243
+ args = (1 .. env.arg_count ).map{ |i| env.expand_arg(i)}
244
+ begin
245
+ sprintf fmt, *args
246
+ rescue Exception => e
247
+ "(sprintf error:`#{e}`)"
248
+ end
249
+ },
250
+ '!digest' => proc { |env| Base64.urlsafe_encode64(Digest::SHA256.digest(env.expand_arg(0))) },
251
+ '!base64' => proc { |env| Base64.urlsafe_encode64(env.expand_arg(0)) },
252
+ '!tt' => proc { |env| "`#{env.expand_arg(0)}`" },
253
+ '!forargs' => proc { |env| i_name = env.arg(0)
254
+ i_name = env.arg(0)
255
+ start = env.arg(1).to_i # side efect '' => 0
256
+ start = 1 if start < 1
257
+ template = env.arg(2)
258
+ argcount =
259
+ (start .. env.arg_count ).map do |i|
260
+ env.atput(i_name, i.to_s)
261
+ env.expand(template)
262
+ end.join('')
263
+ },
264
+ # {{!for i|1,3|i:{$$i}}}} -> 0,1,2
265
+ # {{!for i|1,3,data|i:{$$i}}}} -> data[1,2,3]
266
+ # {{!for i|data|i:{$$i}}}} -> vsechny data
267
+ # {{!for i|1|i:{$$i}}}} -> vsechny data
231
268
  '!for' => proc { |env| i_name = env.arg(0)
232
- top = env.arg(1)
233
- tmpl = env.arg(2)
234
- #print "top#{top}\n"
235
- if top =~ /^\d+/
236
- set = (0..(top.to_i-1))
269
+
270
+ raise "!for takes exactly 3 argumentsif not #{env.arg_count}" if env.arg_count != 3
271
+
272
+ i_name = env.arg(0)
273
+ range = env.expand_arg(1)
274
+ templ = env.arg(2)
275
+
276
+ arange = range.split(/,/)
277
+ arange = [ nil, nil, arange[0]] if arange.size == 1
278
+
279
+ bot = arange[0]
280
+ top = arange[1]
281
+ var = arange[2]
282
+
283
+ if var.nil?
284
+ set = (bot.to_i||1 .. top.to_i)
237
285
  else
238
- set = env.at(top, nil, false)
239
- if set.is_a?(Hash)
240
- set = set.keys.sort
241
- elsif set.is_a?(Array)
242
- set = (0 .. set.size-1)
243
- elsif set.nil?
286
+ obj = env.at(var, nil, false)
287
+
288
+ if obj.is_a?(Hash)
289
+ set = obj.keys.sort
290
+ elsif obj.is_a?(Array)
291
+ #print "ble:#{bot} #{bot}, #{obj.size}\n"
292
+ set = (bot||0 .. obj.size-1)
293
+ elsif obj.nil?
244
294
  set = []
245
295
  else
246
- print "error top(#{top}), set#{set} #{set.class}\n"
247
- raise "Error in {{!for #{i_name}|#{top}|#{tmpl}}} $#{top}.class=#{set.class}(#{set.to_s})"
296
+ raise "Error: wrong arg #{obj} class='#{obj.class}'"
248
297
  end
249
298
  end
299
+ #set.select! { |x| x >= bot } if bot
300
+ #set.select! { |x| x <= top } if top
301
+
302
+ #print "for set#{set} tmpl#{templ||"nic"}\n"
303
+
250
304
  set.map do |i|
305
+ #print "for#{i} #{templ}\n"
251
306
  env[i_name] = i.to_s
252
- env.expand(tmpl)
307
+ env.atput(i_name, i.to_s)
308
+ env.expand(templ)
253
309
  end.join('')
254
310
  },
255
311
  }
@@ -1,3 +1,3 @@
1
1
  module TracWiki
2
- VERSION = '0.3.29'
2
+ VERSION = '0.3.30'
3
3
  end
@@ -72,9 +72,19 @@ class Bacon::Context
72
72
  "off:{{$offset}}"
73
73
  when '/slash'
74
74
  "slash/slash"
75
+ when 'argcount'
76
+ "{{$#}},{{$##}}"
77
+ when 'argi'
78
+ "{{$i}}:{{!arg {{$i}}}}."
79
+ when 'forargs'
80
+ "{{!forargs i||{{$i}}:{{!arg {{$i}}}},}}"
81
+ when 'forargs2'
82
+ "{{!forargs i|2|{{$i}}:{{!arg {{$i}}}},}}"
75
83
  when 'unkmacro'
76
84
  #"UNKNOWN-MACRO:!{{!.{{$0}}}}."
77
85
  "UNKNOWN-MACRO:!{{!.{{$1}}}}."
86
+ when 'digesttest'
87
+ "({{$00}}:{{!digest blabla{{$00}}}})"
78
88
  else
79
89
  nil
80
90
  #"UNK_TEMPL(#{tname})"
@@ -1063,20 +1073,27 @@ eos
1063
1073
  tc "<p>,2</p>\n", "{{!yset ahoj|data: [1,2]\ndesc: malo}},{{$ahoj.data.1}}"
1064
1074
  tc "<p>AHOJ,dve</p>\n", "{{ytest2 \nahoj: AHOJ\nbhoj: [ jedna, dve ]\n}}"
1065
1075
  tc "<p>,,BHOJ</p>\n", "{{!set ahoj|AHOJ}},{{!set AHOJ|BHOJ}},{{$$ahoj}}"
1066
- tc "<p>(0),(1),(2),</p>\n", "{{!for i|3|({{$i}}),}}", allow_html: true
1067
- tc "<p>(0),(1),(2),(3),</p>\n", "{{!for i|4|({{$i}}),}}", allow_html: true
1068
- tc "<p>,(ALFA),(BETA),</p>\n", "{{!yset data|[ALFA,BETA]}},{{!for i|data|({{$data.$i}}),}}"
1069
- tc "<p>,(1),(2),</p>\n", "{{!yset data|[1,2]}},{{!for i|data|({{$data.$i}}),}}"
1070
- tc "<p>,(alfa:ALFA),(beta:BETA),</p>\n", "{{!yset data|beta: BETA\nalfa: ALFA\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1071
- tc "<p>,(0:1),(1:2),</p>\n", "{{!yset data|[ 1,2 ]\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1072
- tc "<p>,</p>\n", "{{!yset data|[ ]\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1073
1076
 
1074
1077
  tc "<p>,FALSE</p>\n", "{{!yset data|[1,2]}},{{!ifdef data.55|TRUE|FALSE}}"
1075
1078
  tc "<p>,TRUE</p>\n", "{{!yset data|[1,2]}},{{!ifdef data.1|TRUE|FALSE}}"
1076
1079
  tc "<p>,TRUE</p>\n", "{{!yset data|{a: 1, b: 2} }},{{!ifdef data.a|TRUE|FALSE}}"
1077
1080
  tc "<p>,FALSE</p>\n", "{{!yset data|{a: 1, b: 2} }},{{!ifdef data.q|TRUE|FALSE}}"
1078
1081
  end
1079
-
1082
+ it 'should parse !for' do
1083
+ tc "<p>(1),(2),(3),</p>\n", "{{!for i|1,3|({{$i}}),}}", allow_html: true
1084
+ tc "<p>(2),(3),</p>\n", "{{!for i|2,3|({{$i}}),}}", allow_html: true
1085
+ tc "<p>(3),</p>\n", "{{!for i|3,3|({{$i}}),}}", allow_html: true
1086
+ tc "<p>(0),(1),(2),(3),(4),</p>\n", "{{!for i|,4|({{$i}}),}}", allow_html: true
1087
+ tc "<p>,(ALFA),(BETA),</p>\n", "{{!yset data|[ALFA,BETA]}},{{!for i|data|({{$data.$i}}),}}"
1088
+ tc "<p>,(1),(2),</p>\n", "{{!yset data|[1,2]}},{{!for i|data|({{$data.$i}}),}}"
1089
+ tc "<p>,(alfa:ALFA),(beta:BETA),</p>\n", "{{!yset data|beta: BETA\nalfa: ALFA\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1090
+ tc "<p>,(0:1),(1:2),</p>\n", "{{!yset data|[ 1,2 ]\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1091
+ tc "<p>,</p>\n", "{{!yset data|[ ]\n}},{{!for i|data|({{$i}}:{{$data.$i}}),}}"
1092
+ end
1093
+ it 'should parse argi' do
1094
+ tc "<p>1:one.</p>\n", "{{argi one|two|i=1}}"
1095
+ tc "<p>2:two.</p>\n", "{{argi one|two|i=2}}"
1096
+ end
1080
1097
  it 'should parse html' do
1081
1098
  tc "<p>alert(666)</p>\n", "<script>alert(666)</script>", allow_html: true
1082
1099
  tc "<p><b>T</b>E</p>\n", "<p><b>T</b>E</p>", allow_html: true
@@ -1114,8 +1131,8 @@ eos
1114
1131
  tc "<p>d<strong>e</strong></p>\n", "{{!ifeq a|b|c|d*\\\n*e**}}"
1115
1132
  tc "<p>d<strong>e</strong></p>\n", "{{!ifeq a|b|c|d*\\\r\n*e**}}"
1116
1133
  tc "<p>e</p>\n", "{{!ifeq a|b|c|\\\r\ne}}"
1117
- tc "<p>a0a1a2</p>\n", "{{!for i|3|a\\\n{{$i}}}}"
1118
- tc "<p>a0a1a2</p>\n", "{{!for i|3|a\\\n {{$i}}}}"
1134
+ tc "<p>a1a2a3</p>\n", "{{!for i|1,3|a\\\n{{$i}}}}"
1135
+ tc "<p>a0a1a2a3</p>\n", "{{!for i|0,3|a\\\n {{$i}}}}"
1119
1136
  end
1120
1137
  it 'should parse offset' do
1121
1138
  tc "<p>0</p>\n", "{{$offset}}"
@@ -1260,6 +1277,13 @@ eos
1260
1277
  tc "<p>meow</p>\n", "{{$UNKVAR|meow}}\n"
1261
1278
  tc "<p>cat:</p>\n", "cat:{{$UNKVAR}}\n"
1262
1279
  end
1280
+ it 'should argcount ' do
1281
+ tc "<p>0,0</p>\n", "{{argcount}}"
1282
+ tc "<p>1,1</p>\n", "{{argcount one}}"
1283
+ tc "<p>2,2</p>\n", "{{argcount one|two}}"
1284
+ tc "<p>2,3</p>\n", "{{argcount one|two|blaf=haf}}"
1285
+ tc "<p>0,3</p>\n", "{{argcount one=1|two=2|blaf=haf}}"
1286
+ end
1263
1287
  it 'should parse data-* ' do
1264
1288
  tc "<div data-coffie=\"tea\">TEST</div>\n", "<div data-coffie=\"tea\">TEST</div>\n", allow_html: true
1265
1289
  tc "<div data-coffie-break=\"tea\">TEST</div>\n", "<div data-coffie-break=\"tea\">TEST</div>\n", allow_html: true
@@ -1267,5 +1291,31 @@ eos
1267
1291
 
1268
1292
  tc "<p>&lt;div data-coffie-break=&quot;tea&quot;&gt;TEST&lt;/div&gt;</p>\n", "<div data-coffie-break=\"tea\">TEST</div>\n", allow_html: false
1269
1293
  end
1294
+ it 'should forargs' do
1295
+ tc "<p>1:jedna,2:dva,3:tri,</p>\n", "{{forargs jedna|dva|tri}}", allow_html: true
1296
+ tc "<p>2:dva,3:tri,</p>\n", "{{forargs2 jedna|dva|tri}}", allow_html: true
1297
+ end
1298
+ it 'should parse digest' do
1299
+ tc "<p>wFNeS-K3n_2TKRMFQ2v4iTFOSj-uwF7P_Lt98xrZ5Ro=</p>\n", "{{!digest Hello world!}}"
1300
+ tc "<p>wFNeS-K3n_2TKRMFQ2v4iTFOSj-uwF7P_Lt98xrZ5Ro=</p>\n", "{{!digest Hello world!}}"
1301
+ tc "<p>wFNeS-K3n_2TKRMFQ2v4iTFOSj-uwF7P_Lt98xrZ5Ro=</p>\n", "{{!set ahoj|Hello world!}}{{!digest {{$ahoj}}}}"
1302
+ tc "<p>qj7BbmrMgJ2LKBhmInYlar_S8bRBy1FXSTPz1L0RXRE=</p>\n", "{{!set ahoj|Hello world.}}{{!digest {{$ahoj}}}}"
1303
+ end
1304
+ it 'should parse sprintf' do
1305
+ tc "<p>001</p>\n", "{{!sprintf %03i|1}}"
1306
+ tc "<p>0001-3.14</p>\n", "{{!sprintf %04i-%.2f|1|3.1415}}"
1307
+ tc "<p><tt> ahoj</tt></p>\n", "{{!sprintf `%7s`|ahoj}}"
1308
+ tc "<p><tt>ahoj </tt></p>\n", "{{!sprintf `%-7s`|ahoj}}"
1309
+ tc "<p>(sprintf error:<tt>malformed format string - %*[0-9]</tt>)</p>\n", "{{!sprintf %03|1}}"
1310
+ end
1311
+ it 'should parse sprintf' do
1312
+ tc "<p><tt>ahoj</tt></p>\n", "{{!tt ahoj}}"
1313
+ tc "<p>YWhvanRl</p>\n", "{{!base64 ahojte}}"
1314
+ tc "<p>(ahojte:FuVx_SBpN3croY9zm4j14xVw19yIHsyZIzErSffwPpY=)</p>\n", "{{digesttest ahojte}}"
1315
+ tc "<p>(bhojte:iwqSnWkQXpGogNtIXpDr8TYIcwJFQTKOLQgG7b9VFVg=)</p>\n", "{{digesttest bhojte}}"
1316
+ tc "<p>(bhojte|ahoj=qhoj:6o2F88ZwLtQadp-8O6ArYIPcePy8_h_rg_2Fsa0EUv0=)</p>\n", "{{digesttest bhojte|ahoj=qhoj}}"
1317
+ tc "<p>(bhojte|ahoj=dhoj:m8afmveEhG78gsv5Pt-gJ56idfKCR10JNPr-G72Fttc=)</p>\n", "{{digesttest bhojte|ahoj=dhoj}}"
1318
+ tc "<p><tt>ah!@\#$%^&amp;*()[]oj</tt></p>\n", "{{!tt ah!@\#$%^&*()[]oj}}"
1319
+ end
1270
1320
  end
1271
1321
  # vim: tw=0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trac-wiki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.29
4
+ version: 0.3.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vitas Stradal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-18 00:00:00.000000000 Z
11
+ date: 2015-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bacon