regextest 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +25 -0
- data/README.md +88 -0
- data/Rakefile +55 -0
- data/bin/console +14 -0
- data/bin/regextest +4 -0
- data/bin/setup +7 -0
- data/contrib/Onigmo/RE.txt +522 -0
- data/contrib/Onigmo/UnicodeProps.txt +728 -0
- data/contrib/Onigmo/testpy.py +1319 -0
- data/contrib/unicode/Blocks.txt +298 -0
- data/contrib/unicode/CaseFolding.txt +1414 -0
- data/contrib/unicode/DerivedAge.txt +1538 -0
- data/contrib/unicode/DerivedCoreProperties.txt +11029 -0
- data/contrib/unicode/PropList.txt +1525 -0
- data/contrib/unicode/PropertyAliases.txt +193 -0
- data/contrib/unicode/PropertyValueAliases.txt +1420 -0
- data/contrib/unicode/README.txt +25 -0
- data/contrib/unicode/Scripts.txt +2539 -0
- data/contrib/unicode/UnicodeData.txt +29215 -0
- data/lib/pre-case-folding.rb +101 -0
- data/lib/pre-posix-char-class.rb +150 -0
- data/lib/pre-unicode.rb +116 -0
- data/lib/regextest.rb +268 -0
- data/lib/regextest/back.rb +58 -0
- data/lib/regextest/back/element.rb +151 -0
- data/lib/regextest/back/main.rb +356 -0
- data/lib/regextest/back/result.rb +498 -0
- data/lib/regextest/back/test-case.rb +268 -0
- data/lib/regextest/back/work-thread.rb +119 -0
- data/lib/regextest/common.rb +63 -0
- data/lib/regextest/front.rb +60 -0
- data/lib/regextest/front/anchor.rb +45 -0
- data/lib/regextest/front/back-refer.rb +120 -0
- data/lib/regextest/front/bracket-parser.rb +400 -0
- data/lib/regextest/front/bracket-parser.y +117 -0
- data/lib/regextest/front/bracket-scanner.rb +124 -0
- data/lib/regextest/front/bracket.rb +64 -0
- data/lib/regextest/front/builtin-functions.rb +31 -0
- data/lib/regextest/front/case-folding.rb +18 -0
- data/lib/regextest/front/char-class.rb +243 -0
- data/lib/regextest/front/empty.rb +43 -0
- data/lib/regextest/front/letter.rb +327 -0
- data/lib/regextest/front/manage-parentheses.rb +74 -0
- data/lib/regextest/front/parenthesis.rb +153 -0
- data/lib/regextest/front/parser.rb +1366 -0
- data/lib/regextest/front/parser.y +271 -0
- data/lib/regextest/front/range.rb +60 -0
- data/lib/regextest/front/repeat.rb +90 -0
- data/lib/regextest/front/repeatable.rb +77 -0
- data/lib/regextest/front/scanner.rb +187 -0
- data/lib/regextest/front/selectable.rb +65 -0
- data/lib/regextest/front/sequence.rb +73 -0
- data/lib/regextest/front/unicode.rb +1272 -0
- data/lib/regextest/regex-option.rb +144 -0
- data/lib/regextest/regexp.rb +44 -0
- data/lib/regextest/version.rb +5 -0
- data/lib/tst-reg-test.rb +159 -0
- data/regextest.gemspec +26 -0
- metadata +162 -0
@@ -0,0 +1,144 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
# A class that manages options of regular expression
|
6
|
+
class Regextest::RegexOption
|
7
|
+
# Constants for the class
|
8
|
+
TstRegOptDefault = 1
|
9
|
+
TstRegOptAscii = 2
|
10
|
+
TstRegOptUnicode = 3
|
11
|
+
|
12
|
+
attr_accessor :reg_options, :char_set
|
13
|
+
|
14
|
+
def initialize(options = nil)
|
15
|
+
self.set(options)
|
16
|
+
@char_set = TstRegOptDefault
|
17
|
+
end
|
18
|
+
|
19
|
+
# a method for copy (maybe unnecessary)
|
20
|
+
def initialize_copy(source_obj)
|
21
|
+
@reg_options = source_obj.reg_options
|
22
|
+
@char_set = source_obj.char_set
|
23
|
+
end
|
24
|
+
|
25
|
+
# set one or more options
|
26
|
+
def set(options)
|
27
|
+
@reg_options = 0
|
28
|
+
modify(options)
|
29
|
+
end
|
30
|
+
|
31
|
+
# modify one or more options
|
32
|
+
def modify(options)
|
33
|
+
case options
|
34
|
+
when String
|
35
|
+
modify_string(options)
|
36
|
+
when Integer
|
37
|
+
modify_integer(options)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# modify regoption by string (like 'x-im')
|
42
|
+
def modify_string(opt_string)
|
43
|
+
opts = opt_string.split("-")
|
44
|
+
raise "Option string (#{opt_string}) is invalid." if(opts.size > 2)
|
45
|
+
|
46
|
+
# set option bits
|
47
|
+
if(opts[0])
|
48
|
+
opts[0].split(//).each do | opt |
|
49
|
+
case opt
|
50
|
+
when 'i'
|
51
|
+
@reg_options |= Regexp::IGNORECASE
|
52
|
+
when 'x'
|
53
|
+
@reg_options |= Regexp::EXTENDED
|
54
|
+
when 'm'
|
55
|
+
@reg_options |= Regexp::MULTILINE
|
56
|
+
when 'd'
|
57
|
+
@char_set = TstRegOptDefault
|
58
|
+
when 'u'
|
59
|
+
@char_set = TstRegOptUnicode
|
60
|
+
when 'a'
|
61
|
+
@char_set = TstRegOptAscii
|
62
|
+
else
|
63
|
+
raise "Invalid char (#{opt}) found in regexp option"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# reset option bits
|
69
|
+
if(opts[1])
|
70
|
+
opts[1].split(//).each do | opt |
|
71
|
+
case opt
|
72
|
+
when 'i'
|
73
|
+
@reg_options &= ~Regexp::IGNORECASE
|
74
|
+
when 'x'
|
75
|
+
@reg_options &= ~Regexp::EXTENDED
|
76
|
+
when 'm'
|
77
|
+
@reg_options &= ~Regexp::MULTILINE
|
78
|
+
else
|
79
|
+
raise "Invalid char (#{opt}) found in regexp option"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
@reg_options
|
84
|
+
end
|
85
|
+
|
86
|
+
# modify options by integer
|
87
|
+
def modify_integer(options)
|
88
|
+
@reg_options |= options
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# methods for checking each flag
|
93
|
+
def is_ignore?
|
94
|
+
(@reg_options & Regexp::IGNORECASE != 0)
|
95
|
+
end
|
96
|
+
|
97
|
+
def is_extended?
|
98
|
+
(@reg_options & Regexp::EXTENDED != 0)
|
99
|
+
end
|
100
|
+
|
101
|
+
def is_multiline?
|
102
|
+
(@reg_options & Regexp::MULTILINE != 0)
|
103
|
+
end
|
104
|
+
|
105
|
+
def is_default_char_set?
|
106
|
+
(@char_set == TstRegOptDefault)
|
107
|
+
end
|
108
|
+
|
109
|
+
def is_ascii?
|
110
|
+
(@char_set == TstRegOptAscii)
|
111
|
+
end
|
112
|
+
|
113
|
+
def is_unicode?
|
114
|
+
(@char_set == TstRegOptUnicode)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
# Test suite (execute when this file is specified in command line)
|
120
|
+
if __FILE__ == $0
|
121
|
+
puts "test #{__FILE__}"
|
122
|
+
|
123
|
+
opts = Regextest::RegexOption.new("ixm")
|
124
|
+
puts "OK igonore" if(opts.is_ignore?)
|
125
|
+
puts "OK extended" if(opts.is_extended?)
|
126
|
+
puts "OK multiline" if(opts.is_multiline?)
|
127
|
+
|
128
|
+
opts2 = opts.dup
|
129
|
+
puts "OK dup igonore" if(opts2.is_ignore?)
|
130
|
+
puts "OK dup extended" if(opts2.is_extended?)
|
131
|
+
puts "OK dup multiline" if(opts2.is_multiline?)
|
132
|
+
|
133
|
+
opts.modify("-ixm")
|
134
|
+
puts "OK mod igonore" if(!opts.is_ignore?)
|
135
|
+
puts "OK mod extended" if(!opts.is_extended?)
|
136
|
+
puts "OK mod multiline" if(!opts.is_multiline?)
|
137
|
+
|
138
|
+
# verify opt2 is independent of opt
|
139
|
+
puts "OK mod igonore" if(opts2.is_ignore?)
|
140
|
+
puts "OK mod extended" if(opts2.is_extended?)
|
141
|
+
puts "OK mod multiline" if(opts2.is_multiline?)
|
142
|
+
|
143
|
+
end
|
144
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
# Add-on methods (samples, sample, match_data) for Regexp class
|
6
|
+
# @raise [Regextest::RegextestError] if impossible to generate.
|
7
|
+
# @raise [Regextest::RegextestFailedToGenerate] if failed to generate. Mainly caused by Regextest's restrictions.
|
8
|
+
# @raise [Regextest::RegextestTimeout] if detected timeout while verification. Option 'verification: false' may be workaround.
|
9
|
+
# @raise [RuntimeError] if something wrong... mainly caused by Regextest's bug
|
10
|
+
class Regexp
|
11
|
+
|
12
|
+
# generate a sample string of regexp
|
13
|
+
# @param [Hash] option option parameters for sampling
|
14
|
+
# @option option [Fixnum] :seed seed for randomization
|
15
|
+
# @option option [TrueClass] :verification specify true (or not speficy) if verified using ruby Regexp.
|
16
|
+
# @option option [FalseClass] :verification specify false if skip to verify using ruby Regexp.
|
17
|
+
# @return [String] if able to generate matched string
|
18
|
+
def sample(option = {})
|
19
|
+
if option[:verification] != false
|
20
|
+
match_data(option).string
|
21
|
+
else
|
22
|
+
match_data(option)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# generate match-data object(s) of regexp
|
27
|
+
# @param [Hash] option option parameters for sampling
|
28
|
+
# @option option [Fixnum] :seed seed for randomization
|
29
|
+
# @option option [TrueClass] :verification specify true (or not speficy) if verified using ruby Regexp.
|
30
|
+
# @option option [FalseClass] :verification specify false if skip to verify using ruby Regexp.
|
31
|
+
# @return [MatchData] if able to generate matched data
|
32
|
+
def match_data(option = {})
|
33
|
+
regextest = Regextest.new(self, option)
|
34
|
+
result = regextest.generate
|
35
|
+
end
|
36
|
+
|
37
|
+
# parse regexp and return json data
|
38
|
+
# @return [String] return parsed json string
|
39
|
+
def to_json
|
40
|
+
regextest = Regextest.new(self, {})
|
41
|
+
regextest.to_json
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/tst-reg-test.rb
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Copyright (C) 2016 Mikio Ikoma
|
4
|
+
|
5
|
+
require 'regextest'
|
6
|
+
require 'kconv'
|
7
|
+
require 'timeout'
|
8
|
+
require 'pp'
|
9
|
+
|
10
|
+
class Regextest::Test
|
11
|
+
def initialize(min_test, max_test)
|
12
|
+
results = {
|
13
|
+
success: [],
|
14
|
+
bug: [],
|
15
|
+
failed: [],
|
16
|
+
impossible: [],
|
17
|
+
others: [],
|
18
|
+
not_scope: [],
|
19
|
+
timeout: [],
|
20
|
+
perl_syntax: [],
|
21
|
+
}
|
22
|
+
time_out = 1
|
23
|
+
do_test(results, min_test, max_test, time_out)
|
24
|
+
print_results(results)
|
25
|
+
end
|
26
|
+
|
27
|
+
def print_results(results)
|
28
|
+
puts ""
|
29
|
+
(results[:failed] + results[:bug]).each do | failed_hash |
|
30
|
+
regex = failed_hash[:test] || failed_hash[:result][:reg]
|
31
|
+
puts "======="
|
32
|
+
puts " type: #{failed_hash[:type] || failed_hash[:result][:result]}"
|
33
|
+
puts " test: #{regex}"
|
34
|
+
puts " info: #{failed_hash[:info] || failed_hash[:result][:reason]}"
|
35
|
+
puts " indx: #{failed_hash[:index]}"
|
36
|
+
pp failed_hash
|
37
|
+
end
|
38
|
+
|
39
|
+
puts "======"
|
40
|
+
puts "success: #{results[:success].size}"
|
41
|
+
puts "bug: #{results[:bug].size}"
|
42
|
+
puts "failed: #{results[:failed].size}"
|
43
|
+
puts "impossible: #{results[:impossible].size}"
|
44
|
+
puts "others: #{results[:others].size}"
|
45
|
+
puts "timeout: #{results[:timeout].size}"
|
46
|
+
puts "regexp error: #{results[:not_scope].size}"
|
47
|
+
puts "perl_syntax: #{results[:perl_syntax].size}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def do_test(results, min_test, max_test, timeout_seconds)
|
51
|
+
get_lines(results).each_with_index do | line, i |
|
52
|
+
next if(i < min_test || i > max_test)
|
53
|
+
puts line
|
54
|
+
begin
|
55
|
+
rc = nil
|
56
|
+
timeout(timeout_seconds){
|
57
|
+
rc = eval(line)
|
58
|
+
}
|
59
|
+
if(rc[:result] == :ok)
|
60
|
+
results[:success].push({ md: rc[:md], reg: rc[:reg], index: i})
|
61
|
+
else
|
62
|
+
results[:failed].push({ result: rc, index: i })
|
63
|
+
end
|
64
|
+
rescue Timeout::Error => ex
|
65
|
+
warn "Timeout::Error #{ex}. \nline:#{line}"
|
66
|
+
results[:timeout].push({result: :timeout, message: ex, reg: line, index: i})
|
67
|
+
rescue RegexpError => ex
|
68
|
+
warn "RegexpError #{ex}. \nline:#{line}"
|
69
|
+
results[:not_scope].push({result: :regexp_error, message: ex, reg: line, index: i})
|
70
|
+
rescue ArgumentError => ex
|
71
|
+
warn "ArgumentError #{ex}. \nline: line"
|
72
|
+
results[:failed].push({type: :argument_error, info: ex, test: line, index: i})
|
73
|
+
#rescue Regextest::Common::RegextestTimeout => ex
|
74
|
+
# warn "RegextestTimeout #{ex}. \nline:#{line}"
|
75
|
+
# results[:failed].push({ type: :timeout, test: line, info: ex, index: i})
|
76
|
+
rescue Regextest::RegextestError => ex
|
77
|
+
warn "RegextestError #{ex}. \nline:#{line}"
|
78
|
+
results[:impossible].push({ type: Regextest::RegextestError, test: line, info: ex, index: i})
|
79
|
+
rescue Regextest::RegextestFailedToGenerate => ex
|
80
|
+
warn "RegextestFailedToGenerate #{ex}. \nline:#{line}"
|
81
|
+
results[:failed].push({ type: Regextest::RegextestFailedToGenerate, test: line, info: ex, index: i})
|
82
|
+
rescue RuntimeError => ex
|
83
|
+
warn "RuntimeError #{ex}. \nline:#{line}"
|
84
|
+
results[:bug].push({ type: RuntimeError, test: line, info: ex, index: i})
|
85
|
+
rescue SyntaxError => ex
|
86
|
+
warn "SyntaxError #{ex}. \nline:#{line}"
|
87
|
+
results[:failed].push({ type: SyntaxError, test: line, info: ex, index: i})
|
88
|
+
rescue NameError => ex
|
89
|
+
warn "NameError #{ex}. \nline:#{line}"
|
90
|
+
results[:failed].push({ type: NameError, test: line, info: ex, index: i})
|
91
|
+
rescue TypeError => ex
|
92
|
+
warn "TypeError #{ex}. \nline:#{line}"
|
93
|
+
results[:failed].push({ type: TypeError, test: line, info: ex, index: i})
|
94
|
+
rescue Encoding::CompatibilityError => ex
|
95
|
+
warn "Encoding::CompatibilityError #{ex}. \nline:#{line}"
|
96
|
+
results[:failed].push({ type: Encoding::CompatibilityError, test: line, info: ex, index: i})
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def get_lines(results)
|
102
|
+
lines = []
|
103
|
+
# py_source = IO.read("../contrib/Onigmo/testpy.py")
|
104
|
+
File::open("../contrib/Onigmo/testpy.py") do |f|
|
105
|
+
f.each do |line|
|
106
|
+
line.force_encoding("utf-8")
|
107
|
+
if !line.match(/ONIG_SYNTAX_PERL/)
|
108
|
+
if(md = line.match(/^\s*(?:x|x2|n)\s*\(.+?$/u) rescue nil)
|
109
|
+
line.sub!(/,\s*\".+?$/, ")") rescue nil
|
110
|
+
lines.push line if line
|
111
|
+
end
|
112
|
+
else
|
113
|
+
warn "Perl syntax. \nline:#{line}"
|
114
|
+
results[:perl_syntax].push({ type: :perl_syntax, test: line, info: nil})
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
lines
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_normal_test(reg)
|
122
|
+
result = nil
|
123
|
+
a_test = /#{reg}/
|
124
|
+
# puts a_test.source
|
125
|
+
obj = Regextest.new(a_test)
|
126
|
+
10.times do | i |
|
127
|
+
md = obj.generate
|
128
|
+
if(md)
|
129
|
+
# print "OK md:#{md},"
|
130
|
+
result = {result: :ok, md: md, reg: a_test}
|
131
|
+
else
|
132
|
+
warn "Failed. reg='#{a_test}', reason=#{obj.reason}"
|
133
|
+
result = {result: :unmatched, reg: a_test, reason: obj.reason}
|
134
|
+
break
|
135
|
+
end
|
136
|
+
end
|
137
|
+
result
|
138
|
+
end
|
139
|
+
|
140
|
+
def x(reg, *params)
|
141
|
+
check_normal_test(reg)
|
142
|
+
end
|
143
|
+
|
144
|
+
def x2(reg, *params)
|
145
|
+
check_normal_test(reg)
|
146
|
+
end
|
147
|
+
|
148
|
+
def n(reg, *params)
|
149
|
+
check_normal_test(reg)
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
# Test suite (execute when this file is specified in command line)
|
155
|
+
if __FILE__ == $0
|
156
|
+
min_test = ARGV[1]?(ARGV[0].to_i):0
|
157
|
+
max_test = ARGV[1]?(ARGV[1].to_i):(ARGV[0]?(ARGV[0].to_i):99999999)
|
158
|
+
Regextest::Test.new(min_test, max_test)
|
159
|
+
end
|
data/regextest.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'regextest/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "regextest"
|
8
|
+
spec.version = Regextest::VERSION
|
9
|
+
spec.authors = ["IKOMA, Mikio"]
|
10
|
+
spec.email = ["mikio.ikoma@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{A ruby library for generating sample data of regular expression}
|
13
|
+
spec.description = %q{This library generates data matched with specified regular expression.}
|
14
|
+
spec.homepage = "https://bitbucket.org/ikomamik/regextest"
|
15
|
+
spec.license = "2-clause BSD license (see the file LICENSE.txt)"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.8"
|
23
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
24
|
+
spec.add_development_dependency "yard", "~> 0.9.5"
|
25
|
+
spec.add_development_dependency "rspec"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,162 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: regextest
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- IKOMA, Mikio
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-08-21 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.8'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.8'
|
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.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: yard
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.9.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: This library generates data matched with specified regular expression.
|
70
|
+
email:
|
71
|
+
- mikio.ikoma@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- bin/console
|
84
|
+
- bin/regextest
|
85
|
+
- bin/setup
|
86
|
+
- contrib/Onigmo/RE.txt
|
87
|
+
- contrib/Onigmo/UnicodeProps.txt
|
88
|
+
- contrib/Onigmo/testpy.py
|
89
|
+
- contrib/unicode/Blocks.txt
|
90
|
+
- contrib/unicode/CaseFolding.txt
|
91
|
+
- contrib/unicode/DerivedAge.txt
|
92
|
+
- contrib/unicode/DerivedCoreProperties.txt
|
93
|
+
- contrib/unicode/PropList.txt
|
94
|
+
- contrib/unicode/PropertyAliases.txt
|
95
|
+
- contrib/unicode/PropertyValueAliases.txt
|
96
|
+
- contrib/unicode/README.txt
|
97
|
+
- contrib/unicode/Scripts.txt
|
98
|
+
- contrib/unicode/UnicodeData.txt
|
99
|
+
- lib/pre-case-folding.rb
|
100
|
+
- lib/pre-posix-char-class.rb
|
101
|
+
- lib/pre-unicode.rb
|
102
|
+
- lib/regextest.rb
|
103
|
+
- lib/regextest/back.rb
|
104
|
+
- lib/regextest/back/element.rb
|
105
|
+
- lib/regextest/back/main.rb
|
106
|
+
- lib/regextest/back/result.rb
|
107
|
+
- lib/regextest/back/test-case.rb
|
108
|
+
- lib/regextest/back/work-thread.rb
|
109
|
+
- lib/regextest/common.rb
|
110
|
+
- lib/regextest/front.rb
|
111
|
+
- lib/regextest/front/anchor.rb
|
112
|
+
- lib/regextest/front/back-refer.rb
|
113
|
+
- lib/regextest/front/bracket-parser.rb
|
114
|
+
- lib/regextest/front/bracket-parser.y
|
115
|
+
- lib/regextest/front/bracket-scanner.rb
|
116
|
+
- lib/regextest/front/bracket.rb
|
117
|
+
- lib/regextest/front/builtin-functions.rb
|
118
|
+
- lib/regextest/front/case-folding.rb
|
119
|
+
- lib/regextest/front/char-class.rb
|
120
|
+
- lib/regextest/front/empty.rb
|
121
|
+
- lib/regextest/front/letter.rb
|
122
|
+
- lib/regextest/front/manage-parentheses.rb
|
123
|
+
- lib/regextest/front/parenthesis.rb
|
124
|
+
- lib/regextest/front/parser.rb
|
125
|
+
- lib/regextest/front/parser.y
|
126
|
+
- lib/regextest/front/range.rb
|
127
|
+
- lib/regextest/front/repeat.rb
|
128
|
+
- lib/regextest/front/repeatable.rb
|
129
|
+
- lib/regextest/front/scanner.rb
|
130
|
+
- lib/regextest/front/selectable.rb
|
131
|
+
- lib/regextest/front/sequence.rb
|
132
|
+
- lib/regextest/front/unicode.rb
|
133
|
+
- lib/regextest/regex-option.rb
|
134
|
+
- lib/regextest/regexp.rb
|
135
|
+
- lib/regextest/version.rb
|
136
|
+
- lib/tst-reg-test.rb
|
137
|
+
- regextest.gemspec
|
138
|
+
homepage: https://bitbucket.org/ikomamik/regextest
|
139
|
+
licenses:
|
140
|
+
- 2-clause BSD license (see the file LICENSE.txt)
|
141
|
+
metadata: {}
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
requirements: []
|
157
|
+
rubyforge_project:
|
158
|
+
rubygems_version: 2.0.14
|
159
|
+
signing_key:
|
160
|
+
specification_version: 4
|
161
|
+
summary: A ruby library for generating sample data of regular expression
|
162
|
+
test_files: []
|