trac-wiki 0.3.10 → 0.3.12

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,2 +1,3 @@
1
1
  source 'https://rubygems.org/'
2
2
  gemspec
3
+ gem 'unicode_utils'
data/Gemfile.lock CHANGED
@@ -1,13 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trac-wiki (0.2.24)
4
+ trac-wiki (0.3.10)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  bacon (1.2.0)
10
10
  rake (10.0.4)
11
+ unicode_utils (1.4.0)
11
12
 
12
13
  PLATFORMS
13
14
  ruby
@@ -16,3 +17,4 @@ DEPENDENCIES
16
17
  bacon
17
18
  rake
18
19
  trac-wiki!
20
+ unicode_utils
data/README CHANGED
@@ -104,6 +104,22 @@ Project page on github:
104
104
  create html toc from previously parsed text
105
105
 
106
106
  * `parser.add_macro_command(name, &block)`
107
+
108
+ * `parser.env.(env|at(key))`
109
+ access to env values after parse
110
+
111
+ == Macros ==
112
+
113
+ * `{{template}}`
114
+ * `{{$variable}}`
115
+ * can be set by {{!set variable|value}}
116
+ * `$1`, `$2` parameters send to template {{template ONE|TWO}}
117
+ * parameters send to template can be named {{template ahoj=test|hi=west}}
118
+ * `$0` all parameters (without named)
119
+ * `$00` all parameters (with named)
120
+
121
+ * `{{!command}}`
122
+
107
123
  == BUGS ==
108
124
 
109
125
  If you found a bug, please report it at the TracWiki project's tracker
data/lib/trac-wiki/env.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  module TracWiki
3
3
 
4
4
  class Env
5
+ attr_accessor :env
5
6
  def initialize(parser, env = {})
6
7
  @parser = parser
7
8
  @env = env
@@ -33,34 +34,6 @@ module TracWiki
33
34
  return do_macro_templ(macro_name, args)
34
35
  end
35
36
 
36
- # # parse to next }} (with balanced {{..}})
37
- # # output will be parsed tree: [ "string", [ "string", ... ], "string", [..],[..] ]
38
- # def parse_macro_tree(macro_name, str)
39
- # return do_macro_cmd(macro_name, []), $', 0 if str =~ /\A}}/
40
- # #print "_parse_macro_cmd: #{macro_name}, str#{str}\n"
41
- # lines = 0
42
- # tree = []
43
- # cur = tree
44
- # stack = []
45
- # while str =~ /{{|}}/
46
- # prefix, match, str = $`, $&, $'
47
- # cur.push(prefix) if prefix.size > 0
48
- # lines += prefix.count("\n")
49
- # if match == '{{'
50
- # stack.push(cur)
51
- # cur.push([])
52
- # cur = cur[-1]
53
- # elsif match == '}}'
54
- # return tree, str, lines if cur == tree
55
- # cur = stack.pop
56
- # else
57
- # raise "never happen"
58
- # end
59
- # end
60
- # raise "eol in parsing macro params"
61
- # end
62
-
63
-
64
37
  # parse to next }} (with balanced {{..}})
65
38
  # like parse_macro_vartempl but not expand content
66
39
  # r: [expansion, rest_of_str, count_of_consumed_lines]
@@ -119,7 +92,8 @@ module TracWiki
119
92
  def prepare_y
120
93
  #print "prepare_y\n"
121
94
  return if @env.key? 'y'
122
- arg = @env['arg']
95
+ #arg = @env['argv']['00']
96
+ arg = @env['argv']['00']
123
97
  return if arg.nil?
124
98
  begin
125
99
  @env['y'] = YAML.load(arg)
@@ -137,7 +111,7 @@ module TracWiki
137
111
  return @env[key] || default if key.is_a? Symbol
138
112
  prepare_y if key =~ /^y\./
139
113
  key = "argv.#{key}" if key =~ /^\d+$/
140
- #print "key: #{key}\n"
114
+ print "key: #{key}\n"
141
115
  cur = @env
142
116
  key.split(/\./).each do |subkey|
143
117
  subkey = at($1, '') if subkey =~ /\A\$(.*)/
@@ -153,7 +127,7 @@ module TracWiki
153
127
  #print "at(#{key}) -> default\n" if cur.nil?
154
128
  return default if cur.nil?
155
129
  end
156
- #print "at(#{key})->#{cur}\n"
130
+ print "at(#{key})->#{cur}\n"
157
131
  to_str ? cur.to_s : cur
158
132
  end
159
133
  def atput(key, val = nil)
@@ -232,18 +206,21 @@ module TracWiki
232
206
  env[k] = v if k != :depth && k != 'arg' && k!='argv'
233
207
  end
234
208
  env[:depth] = (@env[:depth]||0)+1
235
- env['arg'] = args.join('|')
236
209
  env['argv'] = {}
210
+ env['argv']['00'] = args.join('|')
211
+ arg0 = []
237
212
 
238
213
  idx = 1
239
214
  args.each do |arg|
240
- if arg =~ /\A\s*(\w+)\s*=\s*(.*)/m
215
+ if arg =~ /\A\s*(\w+)=\s*(.*)/m
241
216
  env[$1] = $2
242
217
  else
243
218
  env['argv'][idx.to_s] = arg
219
+ arg0.push arg
244
220
  idx+=1
245
221
  end
246
222
  end
223
+ env['argv']['0'] = arg0.join('|')
247
224
  return Env.new(@parser, env)
248
225
  end
249
226
 
@@ -56,6 +56,10 @@ module TracWiki
56
56
  # ]
57
57
  attr_accessor :headings
58
58
 
59
+ def env
60
+ env
61
+ end
62
+
59
63
  # url base for links
60
64
  attr_writer :base
61
65
 
@@ -117,11 +121,13 @@ module TracWiki
117
121
  # result fo `template_handler('myCoolMacro') inserted
118
122
  attr_accessor :template_handler
119
123
 
124
+
125
+ # macro {{$var}} | {{#comment}} | {{!cmd}} | {{template}} | {{/template}}
120
126
  # string begins with macro
121
- MACRO_BEG_REX = /\A\{\{ ( \$[\$\.\w]+ | [\#!]\w* |\w+ ) /x
122
- MACRO_BEG_INSIDE_REX = /\A(.*?)(?<!\{)\{\{ ( \$[\$\.\w]+ | [\#!]\w* | \w+ ) /xm
127
+ MACRO_BEG_REX = /\A\{\{ ( \$[\$\.\w]+ | [\#!\/]\w* |\w+ ) /x
128
+ MACRO_BEG_INSIDE_REX = /\A(.*?)(?<!\{)\{\{ ( \$[\$\.\w]+ | [\#!\/]\w* | \w+ ) /xm
123
129
  # find end of marcro or begin of inner macro
124
- MACRO_END_REX = /\A(.*?) ( \}\} | \{\{ ( \$[\$\.\w]+ | [\#!]\w* | \w+) )/mx
130
+ MACRO_END_REX = /\A(.*?) ( \}\} | \{\{ ( \$[\$\.\w]+ | [\#!\/]\w* | \w+) )/mx
125
131
 
126
132
  # Create a new Parser instance.
127
133
  def initialize(options = nil)
@@ -1,3 +1,3 @@
1
1
  module TracWiki
2
- VERSION = '0.3.10'
2
+ VERSION = '0.3.12'
3
3
  end
data/test/parser_test.rb CHANGED
@@ -12,6 +12,13 @@ class Bacon::Context
12
12
  parser = TracWiki.parser(options)
13
13
  parser.to_html(wiki).should.equal html
14
14
  end
15
+ def env(wiki, var, val,options = {})
16
+ options[:macro_commands] = { '!print' => proc { |env| env.arg(0) + '! ' }, }
17
+ options[:template_handler] = self.method(:template_handler)
18
+ parser = TracWiki.parser(options)
19
+ parser.to_html(wiki)
20
+ parser.env.at(var).should.equal val
21
+ end
15
22
 
16
23
  def template_handler(tname, env)
17
24
  case tname
@@ -23,8 +30,12 @@ class Bacon::Context
23
30
  "{{$y.ahoj}},{{$y.bhoj.1}}"
24
31
  when 'ytest2'
25
32
  "{{!set i|ahoj}}{{$y.$i}},{{$y.bhoj.1}}"
33
+ when 'varnula'
34
+ "nula:{{$0}},a:{{$a}}"
35
+ when 'varnulanula'
36
+ "nulanula:{{$00}},a:{{$a}}"
26
37
  when 'vartest'
27
- "jedna:{{$1}},dve:{{$2}},p:{{$p}},arg:{{$arg}}"
38
+ "jedna:{{$1}},dve:{{$2}},p:{{$p}},arg:{{$00}}"
28
39
  when 'test'
29
40
  "{{west}}"
30
41
  when 'west'
@@ -39,6 +50,10 @@ class Bacon::Context
39
50
  "maclen:{{$maclen}}"
40
51
  when 'wide'
41
52
  "0123456789{{wide}}" * 10
53
+ when 'testoff'
54
+ "off:{{$offset}}"
55
+ when '/slash'
56
+ "slash/slash"
42
57
  else
43
58
  nil
44
59
  #"UNK_TEMPL(#{tname})"
@@ -1057,7 +1072,11 @@ eos
1057
1072
  tc "<p><blockquote>2<blockquote>6</blockquote></blockquote></p>\n", "> {{$offset}}\n> > {{$offset}}"
1058
1073
  tc "<p>test:5,17</p>\n", "test:{{$offset}},{{$offset}}"
1059
1074
  tc "<p>test:5,17,<strong>31</strong></p>\n", "test:{{$offset}},{{$offset}},**{{$offset}}**"
1075
+ tc "<p>off:0</p>\n", "{{testoff}}"
1076
+ tc "<p>A:off:2</p>\n", "A:{{testoff}}"
1077
+ tc "<p>A:off:2</p>\n", "A:{{#echo {{testoff}}}}"
1060
1078
  end
1079
+
1061
1080
  it 'should parse offset and template' do
1062
1081
  tc "<p>ahoj ahoj,19</p>\n" , "ahoj {{$mac|ahoj}},{{$offset}}"
1063
1082
  tc "<p>ahoj line one line two ,12</p>\n" , "ahoj {{nl}},{{$offset}}"
@@ -1081,6 +1100,9 @@ eos
1081
1100
  tc "<p>28</p>\n" , "{{$maclen|a=e|b=c|d={{$e}}}}"
1082
1101
  tc "<p>maclen:14</p>\n" , "{{maclentest}}"
1083
1102
  end
1103
+ it 'should parse macro slash' do
1104
+ tc "<p>slash/slash</p>\n" , "{{/slash}}"
1105
+ end
1084
1106
  it 'should parse lineno' do
1085
1107
  tc "<p>1</p>\n" , "{{$lineno}}"
1086
1108
  tc "<p>3</p>\n" , "\n\n{{$lineno}}"
@@ -1098,5 +1120,21 @@ eos
1098
1120
  tc "<ul><li>[[ahoj|bhoj]]</li>\n</ul>\n<p>3</p>\n", "* [[ahoj|bhoj]]\n\n{{$lineno}}", :no_link => true
1099
1121
  tc "<ul><li>[[ahoj|bhoj]] 2</li>\n</ul>\n", "* [[ahoj|bhoj]]\n{{$lineno}}", :no_link => true
1100
1122
  end
1123
+ it 'should parse nula' do
1124
+ tc "<p>nula:TEXT,a:</p>\n" , "{{varnula TEXT}}"
1125
+ tc "<p>nula:TEXT,a:AHOJ</p>\n" , "{{varnula a=AHOJ|TEXT}}"
1126
+ tc "<p>nula:TEXT,a:AHOJ</p>\n" , "{{varnula TEXT|a=AHOJ}}"
1127
+ tc "<p>nula:TEXT,a:</p>\n" , "{{varnula TEXT|b=AHOJ}}"
1128
+ tc "<p>nula:TE|XT,a:AHOJ</p>\n" , "{{varnula TE|XT|a=AHOJ}}"
1129
+ tc "<p>nula:TE|XT,a:AHOJ</p>\n" , "{{varnula TE|a=AHOJ|XT}}"
1130
+ tc "<p>nula:TE|XT,a:AHOJ</p>\n" , "{{varnula TE|a=AHOJ|XT}}"
1131
+ tc "<p>nulanula:TE|a=AHOJ|XT,a:AHOJ</p>\n" , "{{varnulanula TE|a=AHOJ|XT}}"
1132
+ end
1133
+ it 'should parse env' do
1134
+ env '{{!set b|ahoj}}', 'b', 'ahoj'
1135
+ # env '{{!set *|ahoj}}', '*', 'ahoj'
1136
+ # env '{{!set *|{}|}}', '*', '{}'
1137
+ # tc "<p>a</p>\n" , "{{!set qq|a}}{{$qq}}"
1138
+ end
1101
1139
  end
1102
1140
  # vim: tw=0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trac-wiki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
4
+ version: 0.3.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-10 00:00:00.000000000 Z
12
+ date: 2014-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bacon