citrus 2.3.6 → 2.3.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +14 -0
- data/examples/email.citrus +161 -0
- data/examples/email_test.rb +178 -0
- data/lib/citrus/file.rb +1 -1
- data/lib/citrus/version.rb +1 -1
- metadata +161 -150
data/CHANGES
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
= 2.3.7 / 2011-02-20
|
2
|
+
|
3
|
+
* Fixed a bug that prevented forward slashes from being used inside character
|
4
|
+
class literals.
|
5
|
+
|
6
|
+
* Added email address example.
|
7
|
+
|
8
|
+
= 2.3.6 / 2011-02-19
|
9
|
+
|
10
|
+
* Fixed a bug that prevented memoization from advancing the input's pointer
|
11
|
+
properly (thanks joachimm).
|
12
|
+
|
13
|
+
* Several additions to the TextMate bundle (thanks joachimm).
|
14
|
+
|
1
15
|
= 2.3.5 / 2011-02-07
|
2
16
|
|
3
17
|
* Fixed a bug that prevented Match objects from being printed properly using
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# A grammar for email addresses that closely conforms to RFC 5322, with the
|
2
|
+
# notable exception that this grammar does not allow for folding white space
|
3
|
+
# or comments within atoms.
|
4
|
+
grammar EmailAddress
|
5
|
+
root addr-spec
|
6
|
+
|
7
|
+
# ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
8
|
+
rule ALPHA
|
9
|
+
[A-Za-z]
|
10
|
+
end
|
11
|
+
|
12
|
+
# DIGIT = %x30-39
|
13
|
+
# ; 0-9
|
14
|
+
rule DIGIT
|
15
|
+
[0-9]
|
16
|
+
end
|
17
|
+
|
18
|
+
# DQUOTE = %x22
|
19
|
+
# ; " (Double Quote)
|
20
|
+
rule DQUOTE
|
21
|
+
'"'
|
22
|
+
end
|
23
|
+
|
24
|
+
# NO-WS-CTL = %d1-8 / ; US-ASCII control characters
|
25
|
+
# %d11 / ; that do not include the
|
26
|
+
# %d12 / ; carriage return, line feed,
|
27
|
+
# %d14-31 / ; and white space characters
|
28
|
+
# %d127
|
29
|
+
rule NO-WS-CTL
|
30
|
+
[\x01-\x08\x0B\x0C\x0E-\x1F\x7F]
|
31
|
+
end
|
32
|
+
|
33
|
+
# quoted-pair = ("\" text) / obs-qp
|
34
|
+
rule quoted-pair
|
35
|
+
("\\" text) | obs-qp
|
36
|
+
end
|
37
|
+
|
38
|
+
# atext = ALPHA / DIGIT / ; Printable US-ASCII
|
39
|
+
# "!" / "#" / ; characters not including
|
40
|
+
# "$" / "%" / ; specials. Used for atoms.
|
41
|
+
# "&" / "'" /
|
42
|
+
# "*" / "+" /
|
43
|
+
# "-" / "/" /
|
44
|
+
# "=" / "?" /
|
45
|
+
# "^" / "_" /
|
46
|
+
# "`" / "{" /
|
47
|
+
# "|" / "}" /
|
48
|
+
# "~"
|
49
|
+
rule atext
|
50
|
+
ALPHA | DIGIT | [!\#$\%&'*+-/=?^_`{|}~]
|
51
|
+
end
|
52
|
+
|
53
|
+
# atom = [CFWS] 1*atext [CFWS]
|
54
|
+
rule atom
|
55
|
+
atext 1*
|
56
|
+
end
|
57
|
+
|
58
|
+
# dot-atom-text = 1*atext *("." 1*atext)
|
59
|
+
rule dot-atom-text
|
60
|
+
atext 1* ("." atext 1*)*
|
61
|
+
end
|
62
|
+
|
63
|
+
# dot-atom = [CFWS] dot-atom-text [CFWS]
|
64
|
+
rule dot-atom
|
65
|
+
dot-atom-text
|
66
|
+
end
|
67
|
+
|
68
|
+
# qtext = %d33 / ; Printable US-ASCII
|
69
|
+
# %d35-91 / ; characters not including
|
70
|
+
# %d93-126 / ; "\" or the quote character
|
71
|
+
# obs-qtext
|
72
|
+
rule qtext
|
73
|
+
[\x21\x23-\x5B\x5D-\x7E] | obs-qtext
|
74
|
+
end
|
75
|
+
|
76
|
+
# qcontent = qtext / quoted-pair
|
77
|
+
rule qcontent
|
78
|
+
qtext | quoted-pair
|
79
|
+
end
|
80
|
+
|
81
|
+
# quoted-string = [CFWS]
|
82
|
+
# DQUOTE *([FWS] qcontent) [FWS] DQUOTE
|
83
|
+
# [CFWS]
|
84
|
+
rule quoted-string
|
85
|
+
'"' qcontent* '"'
|
86
|
+
end
|
87
|
+
|
88
|
+
# word = atom / quoted-string
|
89
|
+
rule word
|
90
|
+
atom | quoted-string
|
91
|
+
end
|
92
|
+
|
93
|
+
# addr-spec = local-part "@" domain
|
94
|
+
rule addr-spec
|
95
|
+
local-part "@" domain
|
96
|
+
end
|
97
|
+
|
98
|
+
# local-part = dot-atom / quoted-string / obs-local-part
|
99
|
+
rule local-part
|
100
|
+
dot-atom | quoted-string | obs-local-part
|
101
|
+
end
|
102
|
+
|
103
|
+
# domain = dot-atom / domain-literal / obs-domain
|
104
|
+
rule domain
|
105
|
+
dot-atom | domain-literal | obs-domain
|
106
|
+
end
|
107
|
+
|
108
|
+
# domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
|
109
|
+
rule domain-literal
|
110
|
+
"[" dtext* "]"
|
111
|
+
end
|
112
|
+
|
113
|
+
# dtext = %d33-90 / ; Printable US-ASCII
|
114
|
+
# %d94-126 / ; characters not including
|
115
|
+
# obs-dtext ; "[", "]", or "\"
|
116
|
+
rule dtext
|
117
|
+
[\x21-\x5A\x5E-\x7E] | obs-dtext
|
118
|
+
end
|
119
|
+
|
120
|
+
# text = %d1-9 / ; Characters excluding CR
|
121
|
+
# %d11 / ; and LF
|
122
|
+
# %d12 /
|
123
|
+
# %d14-127
|
124
|
+
rule text
|
125
|
+
[\x01-\x09\x0B\x0C\x0E-\x7F]
|
126
|
+
end
|
127
|
+
|
128
|
+
# obs-NO-WS-CTL = %d1-8 / ; US-ASCII control
|
129
|
+
# %d11 / ; characters that do not
|
130
|
+
# %d12 / ; include the carriage
|
131
|
+
# %d14-31 / ; return, line feed, and
|
132
|
+
# %d127 ; white space characters
|
133
|
+
rule obs-NO-WS-CTL
|
134
|
+
[\x01-\x08\x0B\x0C\x0E-\x1F\x7F]
|
135
|
+
end
|
136
|
+
|
137
|
+
# obs-qtext = obs-NO-WS-CTL
|
138
|
+
rule obs-qtext
|
139
|
+
obs-NO-WS-CTL
|
140
|
+
end
|
141
|
+
|
142
|
+
# obs-qp = "\" (%d0 / obs-NO-WS-CTL / LF / CR)
|
143
|
+
rule obs-qp
|
144
|
+
"\\" ("\x00" | obs-NO-WS-CTL | "\n" | "\r")
|
145
|
+
end
|
146
|
+
|
147
|
+
# obs-local-part = word *("." word)
|
148
|
+
rule obs-local-part
|
149
|
+
word ("." word)*
|
150
|
+
end
|
151
|
+
|
152
|
+
# obs-domain = atom *("." atom)
|
153
|
+
rule obs-domain
|
154
|
+
atom ("." atom)*
|
155
|
+
end
|
156
|
+
|
157
|
+
# obs-dtext = obs-NO-WS-CTL / quoted-pair
|
158
|
+
rule obs-dtext
|
159
|
+
obs-NO-WS-CTL | quoted-pair
|
160
|
+
end
|
161
|
+
end
|
@@ -0,0 +1,178 @@
|
|
1
|
+
# This file contains a suite of tests for the EmailAddress grammar
|
2
|
+
# found in email.citrus.
|
3
|
+
|
4
|
+
require 'citrus'
|
5
|
+
Citrus.require File.expand_path('../email', __FILE__)
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
class EmailAddressTest < Test::Unit::TestCase
|
9
|
+
def test_addr_spec_valid
|
10
|
+
addresses = %w[
|
11
|
+
l3tt3rsAndNumb3rs@domain.com
|
12
|
+
has-dash@domain.com
|
13
|
+
hasApostrophe.o'leary@domain.org
|
14
|
+
uncommonTLD@domain.museum
|
15
|
+
uncommonTLD@domain.travel
|
16
|
+
uncommonTLD@domain.mobi
|
17
|
+
countryCodeTLD@domain.uk
|
18
|
+
countryCodeTLD@domain.rw
|
19
|
+
lettersInDomain@911.com
|
20
|
+
underscore_inLocal@domain.net
|
21
|
+
IPInsteadOfDomain@127.0.0.1
|
22
|
+
subdomain@sub.domain.com
|
23
|
+
local@dash-inDomain.com
|
24
|
+
dot.inLocal@foo.com
|
25
|
+
a@singleLetterLocal.org
|
26
|
+
singleLetterDomain@x.org
|
27
|
+
&*=?^+{}'~@validCharsInLocal.net
|
28
|
+
foor@bar.newTLD
|
29
|
+
]
|
30
|
+
|
31
|
+
addresses.each do |address|
|
32
|
+
match = EmailAddress.parse(address)
|
33
|
+
assert(match)
|
34
|
+
assert_equal(address, match)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# NO-WS-CTL = %d1-8 / ; US-ASCII control characters
|
39
|
+
# %d11 / ; that do not include the
|
40
|
+
# %d12 / ; carriage return, line feed,
|
41
|
+
# %d14-31 / ; and white space characters
|
42
|
+
# %d127
|
43
|
+
def test_no_ws_ctl
|
44
|
+
chars = chars_no_ws_ctl
|
45
|
+
|
46
|
+
chars.each do |c|
|
47
|
+
match = EmailAddress.parse(c, :root => :'NO-WS-CTL')
|
48
|
+
assert(match)
|
49
|
+
assert_equal(c, match)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# quoted-pair = ("\" text) / obs-qp
|
54
|
+
def test_quoted_pair
|
55
|
+
chars = chars_quoted_pair
|
56
|
+
|
57
|
+
chars.each do |c|
|
58
|
+
match = EmailAddress.parse(c, :root => :'quoted-pair')
|
59
|
+
assert(match)
|
60
|
+
assert_equal(c, match)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# atext = ALPHA / DIGIT / ; Printable US-ASCII
|
65
|
+
# "!" / "#" / ; characters not including
|
66
|
+
# "$" / "%" / ; specials. Used for atoms.
|
67
|
+
# "&" / "'" /
|
68
|
+
# "*" / "+" /
|
69
|
+
# "-" / "/" /
|
70
|
+
# "=" / "?" /
|
71
|
+
# "^" / "_" /
|
72
|
+
# "`" / "{" /
|
73
|
+
# "|" / "}" /
|
74
|
+
# "~"
|
75
|
+
def test_atext
|
76
|
+
chars = ('A'..'Z').to_a
|
77
|
+
chars += ('a'..'z').to_a
|
78
|
+
chars += ('0'..'9').to_a
|
79
|
+
chars.push(*%w[! # $ % & ' * + - / = ? ^ _ ` { | } ~])
|
80
|
+
|
81
|
+
chars.each do |c|
|
82
|
+
match = EmailAddress.parse(c, :root => :atext)
|
83
|
+
assert(match)
|
84
|
+
assert_equal(c, match)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# qtext = %d33 / ; Printable US-ASCII
|
89
|
+
# %d35-91 / ; characters not including
|
90
|
+
# %d93-126 / ; "\" or the quote character
|
91
|
+
# obs-qtext
|
92
|
+
def test_qtext
|
93
|
+
chars = ["\x21"]
|
94
|
+
chars += ("\x23".."\x5B").to_a
|
95
|
+
chars += ("\x5D".."\x7E").to_a
|
96
|
+
|
97
|
+
# obs-qtext
|
98
|
+
chars += chars_obs_no_ws_ctl
|
99
|
+
|
100
|
+
chars.each do |c|
|
101
|
+
match = EmailAddress.parse(c, :root => :qtext)
|
102
|
+
assert(match)
|
103
|
+
assert_equal(c, match)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# dtext = %d33-90 / ; Printable US-ASCII
|
108
|
+
# %d94-126 / ; characters not including
|
109
|
+
# obs-dtext ; "[", "]", or "\"
|
110
|
+
def test_dtext
|
111
|
+
chars = ("\x21".."\x5A").to_a
|
112
|
+
chars += ("\x5E".."\x7E").to_a
|
113
|
+
|
114
|
+
# obs-dtext
|
115
|
+
chars += chars_obs_no_ws_ctl
|
116
|
+
chars += chars_quoted_pair
|
117
|
+
|
118
|
+
chars.each do |c|
|
119
|
+
match = EmailAddress.parse(c, :root => :dtext)
|
120
|
+
assert(match)
|
121
|
+
assert_equal(c, match)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# text = %d1-9 / ; Characters excluding CR
|
126
|
+
# %d11 / ; and LF
|
127
|
+
# %d12 /
|
128
|
+
# %d14-127
|
129
|
+
def test_text
|
130
|
+
chars = chars_text
|
131
|
+
|
132
|
+
chars.each do |c|
|
133
|
+
match = EmailAddress.parse(c, :root => :text)
|
134
|
+
assert(match)
|
135
|
+
assert_equal(c, match)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# [\x01-\x08\x0B\x0C\x0E-\x1F\x7F]
|
140
|
+
def chars_no_ws_ctl
|
141
|
+
chars = ("\x01".."\x08").to_a
|
142
|
+
chars << "\x0B"
|
143
|
+
chars << "\x0C"
|
144
|
+
chars += ("\x0E".."\x1F").to_a
|
145
|
+
chars << "\x7F"
|
146
|
+
chars
|
147
|
+
end
|
148
|
+
|
149
|
+
# [\x01-\x09\x0B\x0C\x0E-\x7F]
|
150
|
+
def chars_text
|
151
|
+
chars = ("\x01".."\x09").to_a
|
152
|
+
chars << "\x0B"
|
153
|
+
chars << "\x0C"
|
154
|
+
chars += ("\x0E".."\x7F").to_a
|
155
|
+
chars
|
156
|
+
end
|
157
|
+
|
158
|
+
# [\x01-\x08\x0B\x0C\x0E-\x1F\x7F]
|
159
|
+
def chars_obs_no_ws_ctl
|
160
|
+
chars_no_ws_ctl
|
161
|
+
end
|
162
|
+
|
163
|
+
# ("\\" text) | obs-qp
|
164
|
+
def chars_quoted_pair
|
165
|
+
chars = chars_text.map {|c| "\\" + c }
|
166
|
+
chars += chars_obs_qp
|
167
|
+
chars
|
168
|
+
end
|
169
|
+
|
170
|
+
# "\\" ("\x00" | obs-NO-WS-CTL | "\n" | "\r")
|
171
|
+
def chars_obs_qp
|
172
|
+
chars = ["\x00"]
|
173
|
+
chars += chars_obs_no_ws_ctl
|
174
|
+
chars << "\n"
|
175
|
+
chars << "\r"
|
176
|
+
chars.map {|c| "\\" + c }
|
177
|
+
end
|
178
|
+
end
|
data/lib/citrus/file.rb
CHANGED
data/lib/citrus/version.rb
CHANGED
metadata
CHANGED
@@ -1,27 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: citrus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 2
|
7
|
+
- 3
|
8
|
+
- 7
|
9
|
+
version: 2.3.7
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
|
-
- Michael Jackson
|
12
|
+
- Michael Jackson
|
8
13
|
autorequire:
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2011-02-
|
17
|
+
date: 2011-02-20 00:00:00 -08:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rake
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :development
|
31
|
+
version_requirements: *id001
|
25
32
|
description: Parsing Expressions for Ruby
|
26
33
|
email: mjijackson@gmail.com
|
27
34
|
executables: []
|
@@ -29,159 +36,163 @@ executables: []
|
|
29
36
|
extensions: []
|
30
37
|
|
31
38
|
extra_rdoc_files:
|
32
|
-
- README
|
33
|
-
- CHANGES
|
39
|
+
- README
|
40
|
+
- CHANGES
|
34
41
|
files:
|
35
|
-
- benchmark/after.dat
|
36
|
-
- benchmark/before.dat
|
37
|
-
- benchmark/seqpar.citrus
|
38
|
-
- benchmark/seqpar.gnuplot
|
39
|
-
- benchmark/seqpar.rb
|
40
|
-
- doc/background.markdown
|
41
|
-
- doc/example.markdown
|
42
|
-
- doc/extras.markdown
|
43
|
-
- doc/index.markdown
|
44
|
-
- doc/license.markdown
|
45
|
-
- doc/links.markdown
|
46
|
-
- doc/syntax.markdown
|
47
|
-
- doc/testing.markdown
|
48
|
-
- examples/calc.citrus
|
49
|
-
- examples/calc_test.rb
|
50
|
-
- examples/calc_test.rbc
|
51
|
-
- examples/
|
52
|
-
- examples/
|
53
|
-
- examples/
|
54
|
-
- examples/
|
55
|
-
- examples/
|
56
|
-
- examples/
|
57
|
-
- examples/
|
58
|
-
- examples/
|
59
|
-
- examples/
|
60
|
-
-
|
61
|
-
-
|
62
|
-
- lib/citrus.rb
|
63
|
-
-
|
64
|
-
-
|
65
|
-
- test/
|
66
|
-
- test/
|
67
|
-
- test/
|
68
|
-
- test/
|
69
|
-
- test/
|
70
|
-
- test/
|
71
|
-
- test/
|
72
|
-
- test/
|
73
|
-
- test/
|
74
|
-
- test/
|
75
|
-
- test/
|
76
|
-
- test/
|
77
|
-
- test/
|
78
|
-
- test/
|
79
|
-
- test/
|
80
|
-
- test/
|
81
|
-
- test/
|
82
|
-
- test/
|
83
|
-
- test/
|
84
|
-
- test/
|
85
|
-
- test/
|
86
|
-
- test/
|
87
|
-
- test/
|
88
|
-
- test/
|
89
|
-
- test/
|
90
|
-
- test/
|
91
|
-
- test/
|
92
|
-
- test/
|
93
|
-
- test/
|
94
|
-
- test/
|
95
|
-
- test/
|
96
|
-
- test/
|
97
|
-
- test/
|
98
|
-
- test/
|
99
|
-
- test/
|
100
|
-
- test/
|
101
|
-
- test/
|
102
|
-
- test/
|
103
|
-
- test/
|
104
|
-
- test/
|
105
|
-
- test/
|
106
|
-
- test/
|
107
|
-
- test/
|
108
|
-
- test/
|
109
|
-
- test/
|
110
|
-
- test/
|
111
|
-
- test/
|
112
|
-
- citrus
|
113
|
-
-
|
114
|
-
-
|
115
|
-
-
|
42
|
+
- benchmark/after.dat
|
43
|
+
- benchmark/before.dat
|
44
|
+
- benchmark/seqpar.citrus
|
45
|
+
- benchmark/seqpar.gnuplot
|
46
|
+
- benchmark/seqpar.rb
|
47
|
+
- doc/background.markdown
|
48
|
+
- doc/example.markdown
|
49
|
+
- doc/extras.markdown
|
50
|
+
- doc/index.markdown
|
51
|
+
- doc/license.markdown
|
52
|
+
- doc/links.markdown
|
53
|
+
- doc/syntax.markdown
|
54
|
+
- doc/testing.markdown
|
55
|
+
- examples/calc.citrus
|
56
|
+
- examples/calc_test.rb
|
57
|
+
- examples/calc_test.rbc
|
58
|
+
- examples/email.citrus
|
59
|
+
- examples/email_test.rb
|
60
|
+
- examples/ipaddress.citrus
|
61
|
+
- examples/ipaddress_test.rb
|
62
|
+
- examples/ipaddress_test.rbc
|
63
|
+
- examples/ipv4address.citrus
|
64
|
+
- examples/ipv4address_test.rb
|
65
|
+
- examples/ipv4address_test.rbc
|
66
|
+
- examples/ipv6address.citrus
|
67
|
+
- examples/ipv6address_test.rb
|
68
|
+
- examples/ipv6address_test.rbc
|
69
|
+
- lib/citrus.rb
|
70
|
+
- lib/citrus/file.rb
|
71
|
+
- lib/citrus/version.rb
|
72
|
+
- test/alias_test.rb
|
73
|
+
- test/alias_test.rbc
|
74
|
+
- test/and_predicate_test.rb
|
75
|
+
- test/and_predicate_test.rbc
|
76
|
+
- test/but_predicate_test.rb
|
77
|
+
- test/but_predicate_test.rbc
|
78
|
+
- test/choice_test.rb
|
79
|
+
- test/choice_test.rbc
|
80
|
+
- test/extension_test.rb
|
81
|
+
- test/extension_test.rbc
|
82
|
+
- test/file_test.rb
|
83
|
+
- test/file_test.rbc
|
84
|
+
- test/grammar_test.rb
|
85
|
+
- test/grammar_test.rbc
|
86
|
+
- test/helper.rb
|
87
|
+
- test/helper.rbc
|
88
|
+
- test/input_test.rb
|
89
|
+
- test/input_test.rbc
|
90
|
+
- test/label_test.rb
|
91
|
+
- test/label_test.rbc
|
92
|
+
- test/match_test.rb
|
93
|
+
- test/match_test.rbc
|
94
|
+
- test/memoized_input_test.rb
|
95
|
+
- test/memoized_input_test.rbc
|
96
|
+
- test/multibyte_test.rb
|
97
|
+
- test/multibyte_test.rbc
|
98
|
+
- test/not_predicate_test.rb
|
99
|
+
- test/not_predicate_test.rbc
|
100
|
+
- test/parse_error_test.rb
|
101
|
+
- test/parse_error_test.rbc
|
102
|
+
- test/repeat_test.rb
|
103
|
+
- test/repeat_test.rbc
|
104
|
+
- test/sequence_test.rb
|
105
|
+
- test/sequence_test.rbc
|
106
|
+
- test/string_terminal_test.rb
|
107
|
+
- test/string_terminal_test.rbc
|
108
|
+
- test/super_test.rb
|
109
|
+
- test/super_test.rbc
|
110
|
+
- test/terminal_test.rb
|
111
|
+
- test/terminal_test.rbc
|
112
|
+
- test/_files/alias.citrus
|
113
|
+
- test/_files/grammar1.citrus
|
114
|
+
- test/_files/grammar2.citrus
|
115
|
+
- test/_files/grammar3.citrus
|
116
|
+
- test/_files/rule1.citrus
|
117
|
+
- test/_files/rule2.citrus
|
118
|
+
- test/_files/rule3.citrus
|
119
|
+
- test/_files/super.citrus
|
120
|
+
- test/_files/super2.citrus
|
121
|
+
- citrus.gemspec
|
122
|
+
- Rakefile
|
123
|
+
- README
|
124
|
+
- CHANGES
|
116
125
|
has_rdoc: true
|
117
126
|
homepage: http://mjijackson.com/citrus
|
118
127
|
licenses: []
|
119
128
|
|
120
129
|
post_install_message:
|
121
130
|
rdoc_options:
|
122
|
-
- --line-numbers
|
123
|
-
- --inline-source
|
124
|
-
- --title
|
125
|
-
- Citrus
|
126
|
-
- --main
|
127
|
-
- Citrus
|
131
|
+
- --line-numbers
|
132
|
+
- --inline-source
|
133
|
+
- --title
|
134
|
+
- Citrus
|
135
|
+
- --main
|
136
|
+
- Citrus
|
128
137
|
require_paths:
|
129
|
-
- lib
|
138
|
+
- lib
|
130
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
140
|
requirements:
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
136
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
147
|
requirements:
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
148
|
+
- - ">="
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
142
153
|
requirements: []
|
143
154
|
|
144
155
|
rubyforge_project:
|
145
|
-
rubygems_version: 1.3.
|
156
|
+
rubygems_version: 1.3.6
|
146
157
|
signing_key:
|
147
158
|
specification_version: 3
|
148
159
|
summary: Parsing Expressions for Ruby
|
149
160
|
test_files:
|
150
|
-
- test/alias_test.rb
|
151
|
-
- test/alias_test.rbc
|
152
|
-
- test/and_predicate_test.rb
|
153
|
-
- test/and_predicate_test.rbc
|
154
|
-
- test/but_predicate_test.rb
|
155
|
-
- test/but_predicate_test.rbc
|
156
|
-
- test/choice_test.rb
|
157
|
-
- test/choice_test.rbc
|
158
|
-
- test/extension_test.rb
|
159
|
-
- test/extension_test.rbc
|
160
|
-
- test/file_test.rb
|
161
|
-
- test/file_test.rbc
|
162
|
-
- test/grammar_test.rb
|
163
|
-
- test/grammar_test.rbc
|
164
|
-
- test/input_test.rb
|
165
|
-
- test/input_test.rbc
|
166
|
-
- test/label_test.rb
|
167
|
-
- test/label_test.rbc
|
168
|
-
- test/match_test.rb
|
169
|
-
- test/match_test.rbc
|
170
|
-
- test/memoized_input_test.rb
|
171
|
-
- test/memoized_input_test.rbc
|
172
|
-
- test/multibyte_test.rb
|
173
|
-
- test/multibyte_test.rbc
|
174
|
-
- test/not_predicate_test.rb
|
175
|
-
- test/not_predicate_test.rbc
|
176
|
-
- test/parse_error_test.rb
|
177
|
-
- test/parse_error_test.rbc
|
178
|
-
- test/repeat_test.rb
|
179
|
-
- test/repeat_test.rbc
|
180
|
-
- test/sequence_test.rb
|
181
|
-
- test/sequence_test.rbc
|
182
|
-
- test/string_terminal_test.rb
|
183
|
-
- test/string_terminal_test.rbc
|
184
|
-
- test/super_test.rb
|
185
|
-
- test/super_test.rbc
|
186
|
-
- test/terminal_test.rb
|
187
|
-
- test/terminal_test.rbc
|
161
|
+
- test/alias_test.rb
|
162
|
+
- test/alias_test.rbc
|
163
|
+
- test/and_predicate_test.rb
|
164
|
+
- test/and_predicate_test.rbc
|
165
|
+
- test/but_predicate_test.rb
|
166
|
+
- test/but_predicate_test.rbc
|
167
|
+
- test/choice_test.rb
|
168
|
+
- test/choice_test.rbc
|
169
|
+
- test/extension_test.rb
|
170
|
+
- test/extension_test.rbc
|
171
|
+
- test/file_test.rb
|
172
|
+
- test/file_test.rbc
|
173
|
+
- test/grammar_test.rb
|
174
|
+
- test/grammar_test.rbc
|
175
|
+
- test/input_test.rb
|
176
|
+
- test/input_test.rbc
|
177
|
+
- test/label_test.rb
|
178
|
+
- test/label_test.rbc
|
179
|
+
- test/match_test.rb
|
180
|
+
- test/match_test.rbc
|
181
|
+
- test/memoized_input_test.rb
|
182
|
+
- test/memoized_input_test.rbc
|
183
|
+
- test/multibyte_test.rb
|
184
|
+
- test/multibyte_test.rbc
|
185
|
+
- test/not_predicate_test.rb
|
186
|
+
- test/not_predicate_test.rbc
|
187
|
+
- test/parse_error_test.rb
|
188
|
+
- test/parse_error_test.rbc
|
189
|
+
- test/repeat_test.rb
|
190
|
+
- test/repeat_test.rbc
|
191
|
+
- test/sequence_test.rb
|
192
|
+
- test/sequence_test.rbc
|
193
|
+
- test/string_terminal_test.rb
|
194
|
+
- test/string_terminal_test.rbc
|
195
|
+
- test/super_test.rb
|
196
|
+
- test/super_test.rbc
|
197
|
+
- test/terminal_test.rb
|
198
|
+
- test/terminal_test.rbc
|