trac-wiki 0.3.29 → 0.3.30

Sign up to get free protection for your applications and to get access to all the features.
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