regextest 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|