kpeg 1.0.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -112,7 +112,7 @@ module KPeg
112
112
  # Let default ruby string handling figure it out
113
113
  lang = ""
114
114
  end
115
- code << indentify("_tmp = scan(/\\A#{op.regexp}/#{lang})\n", indent)
115
+ code << indentify("_tmp = scan(/\\G#{op.regexp}/#{lang})\n", indent)
116
116
  when CharRange
117
117
  ss = save()
118
118
  if op.start.bytesize == 1 and op.fin.bytesize == 1
@@ -32,6 +32,7 @@ module KPeg
32
32
  @result = nil
33
33
  @failed_rule = nil
34
34
  @failing_rule_offset = -1
35
+ @line_offsets = nil
35
36
 
36
37
  setup_foreign_grammar
37
38
  end
@@ -150,9 +151,8 @@ module KPeg
150
151
  end
151
152
 
152
153
  def scan(reg)
153
- if m = reg.match(@string[@pos..-1])
154
- width = m.end(0)
155
- @pos += width
154
+ if m = reg.match(@string, @pos)
155
+ @pos = m.end(0)
156
156
  return true
157
157
  end
158
158
 
@@ -265,8 +265,6 @@ module KPeg
265
265
  else
266
266
  return ans
267
267
  end
268
-
269
- return ans
270
268
  end
271
269
  end
272
270
 
@@ -299,8 +297,6 @@ module KPeg
299
297
  else
300
298
  return ans
301
299
  end
302
-
303
- return ans
304
300
  end
305
301
  end
306
302
 
@@ -77,7 +77,7 @@ sgl_escape_quote = "\\'" { "'" }
77
77
  | "[" - range_num:e - "]" { [e.to_i, e.to_i] }
78
78
 
79
79
  curly_block = curly
80
- curly = "{" < (/[^{}"']+/ | string | curly)* > "}" { @g.action(text) }
80
+ curly = "{" < (spaces | /[^{}"']+/ | string | curly)* > "}" { @g.action(text) }
81
81
  nested_paren = "(" (/[^()"']+/ | string | nested_paren)* ")"
82
82
 
83
83
  value = value:v ":" var:n { @g.t(v,n) }
@@ -10,6 +10,7 @@ class KPeg::FormatParser
10
10
  @result = nil
11
11
  @failed_rule = nil
12
12
  @failing_rule_offset = -1
13
+ @line_offsets = nil
13
14
 
14
15
  setup_foreign_grammar
15
16
  end
@@ -26,17 +27,32 @@ class KPeg::FormatParser
26
27
  target + 1
27
28
  end
28
29
 
29
- def current_line(target=pos)
30
- cur_offset = 0
31
- cur_line = 0
30
+ if [].respond_to? :bsearch_index
31
+ def current_line(target=pos)
32
+ unless @line_offsets
33
+ @line_offsets = []
34
+ total = 0
35
+ string.each_line do |line|
36
+ total += line.size
37
+ @line_offsets << total
38
+ end
39
+ end
32
40
 
33
- string.each_line do |line|
34
- cur_line += 1
35
- cur_offset += line.size
36
- return cur_line if cur_offset >= target
41
+ @line_offsets.bsearch_index {|x| x >= target } + 1 || -1
37
42
  end
43
+ else
44
+ def current_line(target=pos)
45
+ cur_offset = 0
46
+ cur_line = 0
47
+
48
+ string.each_line do |line|
49
+ cur_line += 1
50
+ cur_offset += line.size
51
+ return cur_line if cur_offset >= target
52
+ end
38
53
 
39
- -1
54
+ -1
55
+ end
40
56
  end
41
57
 
42
58
  def lines
@@ -155,9 +171,8 @@ class KPeg::FormatParser
155
171
  end
156
172
 
157
173
  def scan(reg)
158
- if m = reg.match(@string[@pos..-1])
159
- width = m.end(0)
160
- @pos += width
174
+ if m = reg.match(@string, @pos)
175
+ @pos = m.end(0)
161
176
  return true
162
177
  end
163
178
 
@@ -270,8 +285,6 @@ class KPeg::FormatParser
270
285
  else
271
286
  return ans
272
287
  end
273
-
274
- return ans
275
288
  end
276
289
  end
277
290
 
@@ -304,8 +317,6 @@ class KPeg::FormatParser
304
317
  else
305
318
  return ans
306
319
  end
307
-
308
- return ans
309
320
  end
310
321
  end
311
322
 
@@ -526,7 +537,7 @@ class KPeg::FormatParser
526
537
  _tmp = match_string("-")
527
538
  break if _tmp
528
539
  self.pos = _save1
529
- _tmp = scan(/\A(?i-mx:[a-z][\w-]*)/)
540
+ _tmp = scan(/\G(?i-mx:[a-z][\w-]*)/)
530
541
  break if _tmp
531
542
  self.pos = _save1
532
543
  break
@@ -557,7 +568,7 @@ class KPeg::FormatParser
557
568
  _save = self.pos
558
569
  while true # sequence
559
570
  _text_start = self.pos
560
- _tmp = scan(/\A(?i-mx:[a-z_]\w*)/)
571
+ _tmp = scan(/\G(?i-mx:[a-z_]\w*)/)
561
572
  if _tmp
562
573
  text = get_text(_text_start)
563
574
  end
@@ -821,7 +832,7 @@ class KPeg::FormatParser
821
832
  _save1 = self.pos
822
833
  while true # sequence
823
834
  _text_start = self.pos
824
- _tmp = scan(/\A(?-mix:[0-7]{1,3})/)
835
+ _tmp = scan(/\G(?-mix:[0-7]{1,3})/)
825
836
  if _tmp
826
837
  text = get_text(_text_start)
827
838
  end
@@ -848,7 +859,7 @@ class KPeg::FormatParser
848
859
  break
849
860
  end
850
861
  _text_start = self.pos
851
- _tmp = scan(/\A(?i-mx:[a-f\d]{2})/)
862
+ _tmp = scan(/\G(?i-mx:[a-f\d]{2})/)
852
863
  if _tmp
853
864
  text = get_text(_text_start)
854
865
  end
@@ -879,7 +890,7 @@ class KPeg::FormatParser
879
890
  _save = self.pos
880
891
  while true # sequence
881
892
  _text_start = self.pos
882
- _tmp = scan(/\A(?-mix:[^\\"]+)/)
893
+ _tmp = scan(/\G(?-mix:[^\\"]+)/)
883
894
  if _tmp
884
895
  text = get_text(_text_start)
885
896
  end
@@ -1017,7 +1028,7 @@ class KPeg::FormatParser
1017
1028
  _save = self.pos
1018
1029
  while true # sequence
1019
1030
  _text_start = self.pos
1020
- _tmp = scan(/\A(?-mix:[^'])/)
1031
+ _tmp = scan(/\G(?-mix:[^'])/)
1021
1032
  if _tmp
1022
1033
  text = get_text(_text_start)
1023
1034
  end
@@ -1142,7 +1153,7 @@ class KPeg::FormatParser
1142
1153
  _tmp = match_string("\\/")
1143
1154
  break if _tmp
1144
1155
  self.pos = _save2
1145
- _tmp = scan(/\A(?-mix:[^\/])/)
1156
+ _tmp = scan(/\G(?-mix:[^\/])/)
1146
1157
  break if _tmp
1147
1158
  self.pos = _save2
1148
1159
  break
@@ -1156,7 +1167,7 @@ class KPeg::FormatParser
1156
1167
  _tmp = match_string("\\/")
1157
1168
  break if _tmp
1158
1169
  self.pos = _save3
1159
- _tmp = scan(/\A(?-mix:[^\/])/)
1170
+ _tmp = scan(/\G(?-mix:[^\/])/)
1160
1171
  break if _tmp
1161
1172
  self.pos = _save3
1162
1173
  break
@@ -1269,7 +1280,7 @@ class KPeg::FormatParser
1269
1280
  _save = self.pos
1270
1281
  while true # sequence
1271
1282
  _text_start = self.pos
1272
- _tmp = scan(/\A(?i-mx:[a-z\d])/)
1283
+ _tmp = scan(/\G(?i-mx:[a-z\d])/)
1273
1284
  if _tmp
1274
1285
  text = get_text(_text_start)
1275
1286
  end
@@ -1339,7 +1350,7 @@ class KPeg::FormatParser
1339
1350
  _save = self.pos
1340
1351
  while true # sequence
1341
1352
  _text_start = self.pos
1342
- _tmp = scan(/\A(?-mix:[1-9]\d*)/)
1353
+ _tmp = scan(/\G(?-mix:[1-9]\d*)/)
1343
1354
  if _tmp
1344
1355
  text = get_text(_text_start)
1345
1356
  end
@@ -1514,7 +1525,7 @@ class KPeg::FormatParser
1514
1525
  return _tmp
1515
1526
  end
1516
1527
 
1517
- # curly = "{" < (/[^{}"']+/ | string | curly)* > "}" { @g.action(text) }
1528
+ # curly = "{" < (spaces | /[^{}"']+/ | string | curly)* > "}" { @g.action(text) }
1518
1529
  def _curly
1519
1530
 
1520
1531
  _save = self.pos
@@ -1529,7 +1540,10 @@ class KPeg::FormatParser
1529
1540
 
1530
1541
  _save2 = self.pos
1531
1542
  while true # choice
1532
- _tmp = scan(/\A(?-mix:[^{}"']+)/)
1543
+ _tmp = apply(:_spaces)
1544
+ break if _tmp
1545
+ self.pos = _save2
1546
+ _tmp = scan(/\G(?-mix:[^{}"']+)/)
1533
1547
  break if _tmp
1534
1548
  self.pos = _save2
1535
1549
  _tmp = apply(:_string)
@@ -1582,7 +1596,7 @@ class KPeg::FormatParser
1582
1596
 
1583
1597
  _save2 = self.pos
1584
1598
  while true # choice
1585
- _tmp = scan(/\A(?-mix:[^()"']+)/)
1599
+ _tmp = scan(/\G(?-mix:[^()"']+)/)
1586
1600
  break if _tmp
1587
1601
  self.pos = _save2
1588
1602
  _tmp = apply(:_string)
@@ -2619,7 +2633,7 @@ class KPeg::FormatParser
2619
2633
  break
2620
2634
  end
2621
2635
  _text_start = self.pos
2622
- _tmp = scan(/\A(?-mix:[:\w]+)/)
2636
+ _tmp = scan(/\G(?-mix:[:\w]+)/)
2623
2637
  if _tmp
2624
2638
  text = get_text(_text_start)
2625
2639
  end
@@ -2917,7 +2931,7 @@ class KPeg::FormatParser
2917
2931
  _save = self.pos
2918
2932
  while true # sequence
2919
2933
  _text_start = self.pos
2920
- _tmp = scan(/\A(?-mix:[A-Z]\w*)/)
2934
+ _tmp = scan(/\G(?-mix:[A-Z]\w*)/)
2921
2935
  if _tmp
2922
2936
  text = get_text(_text_start)
2923
2937
  end
@@ -2943,7 +2957,7 @@ class KPeg::FormatParser
2943
2957
  _save = self.pos
2944
2958
  while true # sequence
2945
2959
  _text_start = self.pos
2946
- _tmp = scan(/\A(?i-mx:[a-z_]\w*)/)
2960
+ _tmp = scan(/\G(?i-mx:[a-z_]\w*)/)
2947
2961
  if _tmp
2948
2962
  text = get_text(_text_start)
2949
2963
  end
@@ -3160,7 +3174,7 @@ class KPeg::FormatParser
3160
3174
  Rules[:_range_elem] = rule_info("range_elem", "< (range_num | kleene) > { text }")
3161
3175
  Rules[:_mult_range] = rule_info("mult_range", "(\"[\" - range_elem:l - \",\" - range_elem:r - \"]\" { [l == \"*\" ? nil : l.to_i, r == \"*\" ? nil : r.to_i] } | \"[\" - range_num:e - \"]\" { [e.to_i, e.to_i] })")
3162
3176
  Rules[:_curly_block] = rule_info("curly_block", "curly")
3163
- Rules[:_curly] = rule_info("curly", "\"{\" < (/[^{}\"']+/ | string | curly)* > \"}\" { @g.action(text) }")
3177
+ Rules[:_curly] = rule_info("curly", "\"{\" < (spaces | /[^{}\"']+/ | string | curly)* > \"}\" { @g.action(text) }")
3164
3178
  Rules[:_nested_paren] = rule_info("nested_paren", "\"(\" (/[^()\"']+/ | string | nested_paren)* \")\"")
3165
3179
  Rules[:_value] = rule_info("value", "(value:v \":\" var:n { @g.t(v,n) } | value:v \"?\" { @g.maybe(v) } | value:v \"+\" { @g.many(v) } | value:v \"*\" { @g.kleene(v) } | value:v mult_range:r { @g.multiple(v, *r) } | \"&\" value:v { @g.andp(v) } | \"!\" value:v { @g.notp(v) } | \"(\" - expression:o - \")\" { o } | \"@<\" - expression:o - \">\" { @g.bounds(o) } | \"<\" - expression:o - \">\" { @g.collect(o) } | curly_block | \"~\" method:m < nested_paren? > { @g.action(\"\#{m}\#{text}\") } | \".\" { @g.dot } | \"@\" var:name < nested_paren? > !(- \"=\") { @g.invoke(name, text.empty? ? nil : text) } | \"^\" var:name < nested_paren? > { @g.foreign_invoke(\"parent\", name, text) } | \"%\" var:gram \".\" var:name < nested_paren? > { @g.foreign_invoke(gram, name, text) } | var:name < nested_paren? > !(- \"=\") { @g.ref(name, nil, text.empty? ? nil : text) } | char_range | regexp | string)")
3166
3180
  Rules[:_spaces] = rule_info("spaces", "(space | comment)+")
data/lib/kpeg/position.rb CHANGED
@@ -10,17 +10,32 @@ module KPeg
10
10
  target + 1
11
11
  end
12
12
 
13
- def current_line(target=pos)
14
- cur_offset = 0
15
- cur_line = 0
16
-
17
- string.each_line do |line|
18
- cur_line += 1
19
- cur_offset += line.size
20
- return cur_line if cur_offset >= target
13
+ if [].respond_to? :bsearch_index
14
+ def current_line(target=pos)
15
+ unless @line_offsets
16
+ @line_offsets = []
17
+ total = 0
18
+ string.each_line do |line|
19
+ total += line.size
20
+ @line_offsets << total
21
+ end
22
+ end
23
+
24
+ @line_offsets.bsearch_index {|x| x >= target } + 1 || -1
25
+ end
26
+ else
27
+ def current_line(target=pos)
28
+ cur_offset = 0
29
+ cur_line = 0
30
+
31
+ string.each_line do |line|
32
+ cur_line += 1
33
+ cur_offset += line.size
34
+ return cur_line if cur_offset >= target
35
+ end
36
+
37
+ -1
21
38
  end
22
-
23
- -1
24
39
  end
25
40
 
26
41
  def lines
@@ -18,6 +18,7 @@ class KPeg::StringEscape
18
18
  @result = nil
19
19
  @failed_rule = nil
20
20
  @failing_rule_offset = -1
21
+ @line_offsets = nil
21
22
 
22
23
  setup_foreign_grammar
23
24
  end
@@ -34,17 +35,32 @@ class KPeg::StringEscape
34
35
  target + 1
35
36
  end
36
37
 
37
- def current_line(target=pos)
38
- cur_offset = 0
39
- cur_line = 0
38
+ if [].respond_to? :bsearch_index
39
+ def current_line(target=pos)
40
+ unless @line_offsets
41
+ @line_offsets = []
42
+ total = 0
43
+ string.each_line do |line|
44
+ total += line.size
45
+ @line_offsets << total
46
+ end
47
+ end
40
48
 
41
- string.each_line do |line|
42
- cur_line += 1
43
- cur_offset += line.size
44
- return cur_line if cur_offset >= target
49
+ @line_offsets.bsearch_index {|x| x >= target } + 1 || -1
45
50
  end
51
+ else
52
+ def current_line(target=pos)
53
+ cur_offset = 0
54
+ cur_line = 0
55
+
56
+ string.each_line do |line|
57
+ cur_line += 1
58
+ cur_offset += line.size
59
+ return cur_line if cur_offset >= target
60
+ end
46
61
 
47
- -1
62
+ -1
63
+ end
48
64
  end
49
65
 
50
66
  def lines
@@ -163,9 +179,8 @@ class KPeg::StringEscape
163
179
  end
164
180
 
165
181
  def scan(reg)
166
- if m = reg.match(@string[@pos..-1])
167
- width = m.end(0)
168
- @pos += width
182
+ if m = reg.match(@string, @pos)
183
+ @pos = m.end(0)
169
184
  return true
170
185
  end
171
186
 
@@ -278,8 +293,6 @@ class KPeg::StringEscape
278
293
  else
279
294
  return ans
280
295
  end
281
-
282
- return ans
283
296
  end
284
297
  end
285
298
 
@@ -312,8 +325,6 @@ class KPeg::StringEscape
312
325
  else
313
326
  return ans
314
327
  end
315
-
316
- return ans
317
328
  end
318
329
  end
319
330
 
@@ -371,7 +382,7 @@ class KPeg::StringEscape
371
382
  _save1 = self.pos
372
383
  while true # sequence
373
384
  _text_start = self.pos
374
- _tmp = scan(/\A(?-mix:[\w ]+)/)
385
+ _tmp = scan(/\G(?-mix:[\w ]+)/)
375
386
  if _tmp
376
387
  text = get_text(_text_start)
377
388
  end
data/lib/kpeg.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module KPeg
2
2
 
3
- VERSION = "1.0.0"
3
+ VERSION = "1.3.1"
4
4
 
5
5
  def self.grammar
6
6
  g = Grammar.new
@@ -80,7 +80,7 @@ class Test < KPeg::CompiledParser
80
80
 
81
81
  # root = /[0-9]/
82
82
  def _root
83
- _tmp = scan(/\\A(?-mix:[0-9])/)
83
+ _tmp = scan(/\\G(?-mix:[0-9])/)
84
84
  set_failed_rule :_root unless _tmp
85
85
  return _tmp
86
86
  end
@@ -114,7 +114,7 @@ class Test < KPeg::CompiledParser
114
114
 
115
115
  # root = /./
116
116
  def _root
117
- _tmp = scan(/\\A(?-mix:.)/)
117
+ _tmp = scan(/\\G(?-mix:.)/)
118
118
  set_failed_rule :_root unless _tmp
119
119
  return _tmp
120
120
  end
@@ -133,7 +133,7 @@ class Test < KPeg::CompiledParser
133
133
 
134
134
  # root = /./u
135
135
  def _root
136
- _tmp = scan(/\\A(?-mix:.)/u)
136
+ _tmp = scan(/\\G(?-mix:.)/u)
137
137
  set_failed_rule :_root unless _tmp
138
138
  return _tmp
139
139
  end
@@ -7,6 +7,7 @@ class TestKPegCompiledParser < Minitest::Test
7
7
 
8
8
  gram = <<-GRAM
9
9
  letter = [a-z]
10
+ number = [0-9]
10
11
  root = letter
11
12
  GRAM
12
13
 
@@ -14,7 +15,7 @@ class TestKPegCompiledParser < Minitest::Test
14
15
 
15
16
  gram = <<-GRAM
16
17
  %test = TestKPegCompiledParser::TestParser
17
- root = %test.letter "!"
18
+ root = %test.letter %test.number? "!"
18
19
  GRAM
19
20
 
20
21
  KPeg.compile gram, "CompTestParser", self
@@ -78,4 +79,12 @@ class TestKPegCompiledParser < Minitest::Test
78
79
  assert_equal expected, r.failure_oneline
79
80
  end
80
81
 
82
+ def test_composite_two_char_error
83
+ r = CompTestParser.new "aa"
84
+ assert_nil r.parse, "should not parse"
85
+
86
+ expected = "@1:2 failed rule 'TestKPegCompiledParser::TestParser#_number', got 'a'"
87
+ assert_equal expected, r.failure_oneline
88
+ end
89
+
81
90
  end
@@ -431,6 +431,25 @@ a=b
431
431
  assert_equal expected, m.directives
432
432
  end
433
433
 
434
+ def test_parser_directive_single_quote
435
+ m = match <<-GRAMMAR
436
+ %% header {
437
+ # It's a bug I found
438
+ }
439
+
440
+ a=b
441
+ GRAMMAR
442
+
443
+ assert_rule G.ref("b"), m
444
+
445
+ expected = {
446
+ "header" => KPeg::Action.new("\n# It's a bug I found\n")
447
+ }
448
+
449
+ assert_equal expected, m.directives
450
+ end
451
+
452
+
434
453
  def test_parser_setup
435
454
  m = match "%% { def initialize; end }\na=b"
436
455
  assert_rule G.ref("b"), m
metadata CHANGED
@@ -1,57 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kpeg
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-04 00:00:00.000000000 Z
11
+ date: 2022-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.2'
19
+ version: '5.14'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.2'
26
+ version: '5.14'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rdoc
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '4.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '7'
34
37
  type: :development
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - ~>
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '4.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: hoe
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ~>
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '3.7'
53
+ version: '3.23'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ~>
58
+ - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '3.7'
60
+ version: '3.23'
55
61
  description: |-
56
62
  KPeg is a simple PEG library for Ruby. It provides an API as well as native
57
63
  grammar to build the grammar.
@@ -70,10 +76,12 @@ extra_rdoc_files:
70
76
  - Manifest.txt
71
77
  - README.rdoc
72
78
  - examples/phone_number/README.md
79
+ - examples/tiny_markdown/sample.md
73
80
  - examples/upper/README.md
74
81
  files:
75
- - .autotest
76
- - .travis.yml
82
+ - ".autotest"
83
+ - ".hoeignore"
84
+ - Gemfile
77
85
  - History.txt
78
86
  - LICENSE
79
87
  - Manifest.txt
@@ -91,6 +99,12 @@ files:
91
99
  - examples/phone_number/README.md
92
100
  - examples/phone_number/phone_number.kpeg
93
101
  - examples/phone_number/phone_number.rb
102
+ - examples/tiny_markdown/Rakefile
103
+ - examples/tiny_markdown/driver.rb
104
+ - examples/tiny_markdown/node.rb
105
+ - examples/tiny_markdown/sample.md
106
+ - examples/tiny_markdown/tiny_markdown.kpeg
107
+ - examples/tiny_markdown/tiny_markdown.kpeg.rb
94
108
  - examples/upper/README.md
95
109
  - examples/upper/upper.kpeg
96
110
  - examples/upper/upper.rb
@@ -116,42 +130,34 @@ files:
116
130
  - test/test_kpeg_format_parser_round_trip.rb
117
131
  - test/test_kpeg_grammar.rb
118
132
  - test/test_kpeg_grammar_renderer.rb
133
+ - test/test_kpeg_string_escape.rb
119
134
  - vim/syntax_kpeg/ftdetect/kpeg.vim
120
135
  - vim/syntax_kpeg/syntax/kpeg.vim
121
- - test/test_kpeg_string_escape.rb
122
- - .gemtest
123
136
  homepage: https://github.com/evanphx/kpeg
124
137
  licenses:
125
138
  - MIT
126
- metadata: {}
127
- post_install_message:
139
+ metadata:
140
+ homepage_uri: https://github.com/evanphx/kpeg
141
+ bug_tracker_uri: https://github.com/evanphx/kpeg/issues
142
+ post_install_message:
128
143
  rdoc_options:
129
- - --main
144
+ - "--main"
130
145
  - README.rdoc
131
146
  require_paths:
132
147
  - lib
133
148
  required_ruby_version: !ruby/object:Gem::Requirement
134
149
  requirements:
135
- - - '>='
150
+ - - ">="
136
151
  - !ruby/object:Gem::Version
137
152
  version: '0'
138
153
  required_rubygems_version: !ruby/object:Gem::Requirement
139
154
  requirements:
140
- - - '>='
155
+ - - ">="
141
156
  - !ruby/object:Gem::Version
142
157
  version: '0'
143
158
  requirements: []
144
- rubyforge_project: kpeg
145
- rubygems_version: 2.1.10
146
- signing_key:
159
+ rubygems_version: 3.2.15
160
+ signing_key:
147
161
  specification_version: 4
148
162
  summary: KPeg is a simple PEG library for Ruby
149
- test_files:
150
- - test/test_kpeg.rb
151
- - test/test_kpeg_code_generator.rb
152
- - test/test_kpeg_compiled_parser.rb
153
- - test/test_kpeg_format.rb
154
- - test/test_kpeg_format_parser_round_trip.rb
155
- - test/test_kpeg_grammar.rb
156
- - test/test_kpeg_grammar_renderer.rb
157
- - test/test_kpeg_string_escape.rb
163
+ test_files: []
data/.gemtest DELETED
File without changes
data/.travis.yml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- script: rake travis
3
- before_script:
4
- - gem install hoe-travis --no-rdoc --no-ri
5
- - rake travis:before -t
6
- language: ruby
7
- notifications:
8
- email:
9
- - evan@fallingsnow.net
10
- - drbrain@segment7.net
11
- rvm:
12
- - 1.8.7
13
- - 1.9.2
14
- - 1.9.3
15
- - 2.0.0