javascriptre 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +25 -0
- data/LICENSE.txt +19 -0
- data/README.md +9 -0
- data/Rakefile +83 -0
- data/javascriptre.gemspec +49 -0
- data/lib/javascriptre.ry +166 -0
- data/test/00-load.rb +31 -0
- data/test/01-basic.rb +57 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ead84ce61d64d58eade0f1f4b53aa5f8fd89685e
|
4
|
+
data.tar.gz: fdefe51af340d0aa4506aa15cf0e25f3b5f4c889
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ee73f6d6b93d91204528ede21252bc72ddf1165794ce014149047617a655bbfc01e49921e0a0a29ba6b91f79bf58ddf7f631d5748f2497573df827dbcb32d728
|
7
|
+
data.tar.gz: 50e40694e1bade0f93495472030efde50e573b7246bde60e4f9c2ef6458d1242b700b72f6d51b3065165bca807f24b0d470040f4971ee525f4c8b30b3f3258b1
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#! /your/favourite/path/to/bundler
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2014 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
source 'https://rubygems.org'
|
25
|
+
gemspec require: false
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2015 Urabe, Shyouhei
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
8
|
+
so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be
|
11
|
+
included in all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
#! /your/favourite/path/to/rake
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2015 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
begin
|
25
|
+
require 'rubygems'
|
26
|
+
require 'bundler/setup'
|
27
|
+
require 'rake'
|
28
|
+
rescue Exception => e
|
29
|
+
$stderr.puts e.message
|
30
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
31
|
+
exit false
|
32
|
+
else
|
33
|
+
begin
|
34
|
+
Bundler.setup :default
|
35
|
+
rescue Bundler::BundlerError => e
|
36
|
+
$stderr.puts e.message
|
37
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
38
|
+
exit e.status_code
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
begin
|
43
|
+
Bundler.setup :default, :development
|
44
|
+
require 'rake/testtask'
|
45
|
+
require 'bundler/gem_tasks'
|
46
|
+
|
47
|
+
task 'default' => %w'test'
|
48
|
+
task 'spec' => %w'test'
|
49
|
+
desc "run tests"
|
50
|
+
Rake::TestTask.new do |t|
|
51
|
+
t.test_files = FileList['test/**/*.rb']
|
52
|
+
end
|
53
|
+
|
54
|
+
task 'yard' => %w'lib/javascriptre.rb'
|
55
|
+
task 'rdoc' => %w'lib/javascriptre.rb'
|
56
|
+
task 'build' => %w'lib/javascriptre.rb'
|
57
|
+
file 'lib/javascriptre.rb' => %w'lib/javascriptre.ry' do |t|
|
58
|
+
sh "bundle exec racc --output-file=#{t.name} #{t.prerequisites.first}"
|
59
|
+
end
|
60
|
+
|
61
|
+
rescue LoadError, NameError
|
62
|
+
p $!
|
63
|
+
# OK, they can be absent on non-development mode.
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "a la rails console"
|
67
|
+
task :console => %w'lib/javascriptre.rb' do
|
68
|
+
require_relative 'lib/javascriptre'
|
69
|
+
require 'irb'
|
70
|
+
require 'irb/completion'
|
71
|
+
ARGV.clear
|
72
|
+
IRB.start
|
73
|
+
end
|
74
|
+
task :c => :console
|
75
|
+
|
76
|
+
desc "pry console"
|
77
|
+
task :pry => %w'lib/javascriptre.rb' do
|
78
|
+
require_relative 'lib/javascriptre'
|
79
|
+
require 'pry'
|
80
|
+
ARGV.clear
|
81
|
+
Pry.start
|
82
|
+
end
|
83
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#! /your/favourite/path/to/gem
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2015 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
Gem::Specification.new do |spec|
|
25
|
+
spec.name = "javascriptre"
|
26
|
+
spec.version = 1.0
|
27
|
+
spec.authors = ["Urabe, Shyouhei"]
|
28
|
+
spec.email = ["shyouhei@ruby-lang.org"]
|
29
|
+
spec.summary = 'ECMAScript RegExp parser'
|
30
|
+
spec.description = <<-end.gsub(/[\s]+/m, ' ').strip
|
31
|
+
Believe it or not this is a ECMA-262 edition 5.1
|
32
|
+
-compatible Regular Expression parser and evaluator,
|
33
|
+
written in Ruby.
|
34
|
+
end
|
35
|
+
spec.homepage = "https://github.com/shyouhei/javascriptre"
|
36
|
+
spec.license = "MIT"
|
37
|
+
|
38
|
+
spec.files = `git ls-files -z`.split("\x0") + %w'lib/javascriptre.rb'
|
39
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
40
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
41
|
+
spec.require_paths = %w"lib"
|
42
|
+
|
43
|
+
spec.required_ruby_version = '>= 1.8'
|
44
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
45
|
+
spec.add_development_dependency 'rake', '~> 10.3'
|
46
|
+
spec.add_development_dependency 'racc', '~> 1.4.11'
|
47
|
+
spec.add_development_dependency 'test-unit', '~> 3.0'
|
48
|
+
spec.add_development_dependency 'pry', '~> 0.10'
|
49
|
+
end
|
data/lib/javascriptre.ry
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
#! /your/favourite/path/to/racc
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2015 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
# Believe it or not this is a ECMA-262 edition 5.1 -compatible Regular Expression
|
25
|
+
# parser and evaluator, written in Ruby.
|
26
|
+
#
|
27
|
+
# Of course it translates JS RegExp into Ruby's Regexp.
|
28
|
+
#
|
29
|
+
# @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.1
|
30
|
+
class Javascriptre
|
31
|
+
|
32
|
+
options no_result_var
|
33
|
+
rule
|
34
|
+
|
35
|
+
Pattern : Disjunction { val }
|
36
|
+
Disjunction : Alternative { val }
|
37
|
+
| Alternative '|' Disjunction { val }
|
38
|
+
Alternative : # [empty] { val }
|
39
|
+
| Alternative Term { val }
|
40
|
+
Term : Assertion { val }
|
41
|
+
| Atom { val }
|
42
|
+
| Atom Quantifier { val }
|
43
|
+
Assertion : '^' { '\\A' }
|
44
|
+
| '$' { '\\z' }
|
45
|
+
| '\\' 'b' { val }
|
46
|
+
| '\\' 'B' { val }
|
47
|
+
| '(' '?' '=' Disjunction ')' { val }
|
48
|
+
| '(' '?' '!' Disjunction ')' { val }
|
49
|
+
Quantifier : QuantifierPrefix { val }
|
50
|
+
| QuantifierPrefix '?' { val }
|
51
|
+
QuantifierPrefix : '*' { val }
|
52
|
+
| '+' { val }
|
53
|
+
| '?' { val }
|
54
|
+
| '{' DecimalDigits '}' { val }
|
55
|
+
| '{' DecimalDigits ',' '}' { val }
|
56
|
+
| '{' DecimalDigits ',' DecimalDigits '}' { val }
|
57
|
+
Atom : PatternCharacter { val }
|
58
|
+
| '.' { val }
|
59
|
+
| '\\' AtomEscape { val }
|
60
|
+
| CharacterClass { val }
|
61
|
+
| '(' Disjunction ')' { val }
|
62
|
+
| '(' '?' ':' Disjunction ')' { val }
|
63
|
+
PatternCharacter : others { val }
|
64
|
+
| ControlLetter { val }
|
65
|
+
| DecimalDigit { val }
|
66
|
+
| '!' | ',' | '-' | ':' | '=' { val }
|
67
|
+
AtomEscape : DecimalEscape { val }
|
68
|
+
| CharacterEscape { val }
|
69
|
+
| CharacterClassEscape { val }
|
70
|
+
CharacterEscape : ControlEscape { val }
|
71
|
+
| 'c' ControlLetter { val }
|
72
|
+
| HexEscapeSequence { val }
|
73
|
+
| UnicodeEscapeSequence { val }
|
74
|
+
| IdentityEscape { val }
|
75
|
+
ControlEscape : 'f' | 'n' | 't' | 'r' | 'v' { val }
|
76
|
+
ControlLetter : 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' { val }
|
77
|
+
| 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' { val }
|
78
|
+
| 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' { val }
|
79
|
+
| 'v' | 'w' | 'x' | 'y' | 'z' { val }
|
80
|
+
| 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' { val }
|
81
|
+
| 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' { val }
|
82
|
+
| 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' { val }
|
83
|
+
| 'V' | 'W' | 'X' | 'Y' | 'Z' { val }
|
84
|
+
HexEscapeSequence : 'x' HexDigit HexDigit { val }
|
85
|
+
UnicodeEscapeSequence : 'u' HexDigit HexDigit HexDigit HexDigit { val }
|
86
|
+
IdentityEscape : others { val }
|
87
|
+
| '!' | ',' | '-' | ':' | '=' { val }
|
88
|
+
| '^' | '$' | '\\' | '.' | '*' | '+' | '?' { val }
|
89
|
+
| '(' | ')' | '[' | ']' | '{' | '}' | '|' { val }
|
90
|
+
DecimalEscape : '0' { val }
|
91
|
+
| nonzero DecimalDigits { val }
|
92
|
+
nonzero : '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' { val }
|
93
|
+
CharacterClassEscape : 'd' | 'D' | 's' | 'S' | 'w' | 'W' { val }
|
94
|
+
CharacterClass : '[' '^' ClassRanges ']' { val }
|
95
|
+
| '[' ClassRanges ']' { val }
|
96
|
+
ClassRanges : # [empty] { val }
|
97
|
+
| NonemptyClassRanges { val }
|
98
|
+
NonemptyClassRanges : ClassAtom { val }
|
99
|
+
| ClassAtom NonemptyClassRangesNoDash { val }
|
100
|
+
| ClassAtom '-' ClassAtom ClassRanges { val }
|
101
|
+
NonemptyClassRangesNoDash : ClassAtom { val }
|
102
|
+
| ClassAtomNoDash NonemptyClassRangesNoDash { val }
|
103
|
+
| ClassAtomNoDash '-' ClassAtom ClassRanges { val }
|
104
|
+
ClassAtom : '-' { val }
|
105
|
+
| ClassAtomNoDash { val }
|
106
|
+
ClassAtomNoDash : others { val }
|
107
|
+
| ControlLetter { val }
|
108
|
+
| DecimalDigit { val }
|
109
|
+
| '!' | ',' | ':' | '=' { val }
|
110
|
+
| '^' | '$' | '.' | '*' | '+' | '?' { val }
|
111
|
+
| '(' | ')' | '[' | '{' | '}' | '|' { val }
|
112
|
+
| '\\' ClassEscape { val }
|
113
|
+
ClassEscape : DecimalEscape { val }
|
114
|
+
| 'b' { val }
|
115
|
+
| CharacterEscape { val }
|
116
|
+
| CharacterClassEscape { val }
|
117
|
+
DecimalDigits : DecimalDigit { val }
|
118
|
+
| DecimalDigits DecimalDigit { val }
|
119
|
+
HexDigit : DecimalDigit { val }
|
120
|
+
| 'a' | 'b' | 'c' | 'd' | 'e' | 'f' { val }
|
121
|
+
| 'A' | 'B' | 'C' | 'D' | 'E' | 'F' { val }
|
122
|
+
DecimalDigit : '0' | nonzero { val }
|
123
|
+
|
124
|
+
---- header
|
125
|
+
require 'strscan'
|
126
|
+
|
127
|
+
---- inner
|
128
|
+
|
129
|
+
class << self
|
130
|
+
private
|
131
|
+
alias bare_new new
|
132
|
+
|
133
|
+
public
|
134
|
+
# Compiles the given JS RegExp.
|
135
|
+
#
|
136
|
+
# @param str [String] regular expression in ECMA-262 fashion.
|
137
|
+
def new str
|
138
|
+
obj = bare_new str
|
139
|
+
return obj.rexp
|
140
|
+
rescue Racc::ParseError
|
141
|
+
raise ArgumentError, "malformed JS Re: #{str.inspect} => #$!"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def initialize str
|
146
|
+
@buf = StringScanner.new str
|
147
|
+
@pattern = do_parse
|
148
|
+
@rexp = Regexp.new @pattern.join
|
149
|
+
end
|
150
|
+
|
151
|
+
attr_reader :rexp # @return [Regexp] the expression in ruby.
|
152
|
+
|
153
|
+
private
|
154
|
+
|
155
|
+
def next_token
|
156
|
+
case
|
157
|
+
when @buf.eos?
|
158
|
+
return false, nil
|
159
|
+
when c = @buf.scan(/[!$()*+,\-.0123456789:=?ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^abcdefghijklmnopqrstuvwxyz{|}]/) then
|
160
|
+
return c, c
|
161
|
+
when c = @buf.scan(/./) then
|
162
|
+
return :others, c
|
163
|
+
else
|
164
|
+
raise @buf.inspect
|
165
|
+
end
|
166
|
+
end
|
data/test/00-load.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
#! /your/favourite/path/to/ruby
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2015 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
require 'test-unit'
|
25
|
+
class Test00Load < Test::Unit::TestCase
|
26
|
+
def test_require
|
27
|
+
assert_nothing_raised do
|
28
|
+
require 'javascriptre'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/test/01-basic.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
#! /your/favourite/path/to/ruby
|
2
|
+
# -*- mode: ruby; coding: utf-8; indent-tabs-mode: nil; ruby-indent-level 2 -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2015 Urabe, Shyouhei
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be
|
14
|
+
# included in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
require 'test-unit'
|
25
|
+
require 'javascriptre'
|
26
|
+
|
27
|
+
class Test01Basic < Test::Unit::TestCase
|
28
|
+
|
29
|
+
test 'no args' do
|
30
|
+
assert_raise ArgumentError do
|
31
|
+
Javascriptre.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'many args' do
|
36
|
+
assert_raise ArgumentError do
|
37
|
+
Javascriptre.new(*%w'q w e r t y u i o p')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'simple' do
|
42
|
+
assert { Javascriptre.new("foo") == /foo/ }
|
43
|
+
assert { Javascriptre.new("[bar]") == /[bar]/ }
|
44
|
+
assert { Javascriptre.new("(?:b(?:a(?:z)?)?)?") == /(?:b(?:a(?:z)?)?)?/ }
|
45
|
+
end
|
46
|
+
|
47
|
+
test '^$' do
|
48
|
+
assert { Javascriptre.new("^foo") == /\Afoo/ }
|
49
|
+
assert { Javascriptre.new("bar$") == /bar\z/ }
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'invalid JS re' do
|
53
|
+
assert_raise ArgumentError do
|
54
|
+
Javascriptre.new("(?<name>foo)\g<foo>")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: javascriptre
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Urabe, Shyouhei
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: racc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.4.11
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.4.11
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: test-unit
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.10'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.10'
|
83
|
+
description: Believe it or not this is a ECMA-262 edition 5.1 -compatible Regular
|
84
|
+
Expression parser and evaluator, written in Ruby.
|
85
|
+
email:
|
86
|
+
- shyouhei@ruby-lang.org
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- ".gitignore"
|
92
|
+
- Gemfile
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- javascriptre.gemspec
|
97
|
+
- lib/javascriptre.rb
|
98
|
+
- lib/javascriptre.ry
|
99
|
+
- test/00-load.rb
|
100
|
+
- test/01-basic.rb
|
101
|
+
homepage: https://github.com/shyouhei/javascriptre
|
102
|
+
licenses:
|
103
|
+
- MIT
|
104
|
+
metadata: {}
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '1.8'
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubyforge_project:
|
121
|
+
rubygems_version: 2.4.5
|
122
|
+
signing_key:
|
123
|
+
specification_version: 4
|
124
|
+
summary: ECMAScript RegExp parser
|
125
|
+
test_files:
|
126
|
+
- test/00-load.rb
|
127
|
+
- test/01-basic.rb
|