gherkin 1.0.5-i386-mswin32 → 1.0.6-i386-mswin32
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.
- data/.gitignore +1 -0
- data/History.txt +14 -3
- data/README.rdoc +4 -15
- data/Rakefile +0 -2
- data/VERSION.yml +1 -1
- data/lib/gherkin/c_lexer.rb +3 -5
- data/lib/gherkin/i18n.rb +3 -3
- data/lib/gherkin/i18n.yml +13 -0
- data/lib/gherkin/rb_lexer.rb +3 -5
- data/ragel/lexer.java.rl.erb +2 -2
- data/tasks/compile.rake +2 -74
- data/tasks/gems.rake +31 -0
- data/tasks/ikvm.rake +5 -5
- data/tasks/ragel_task.rb +1 -1
- data/tasks/release.rake +26 -0
- metadata +5 -21
- data/dotnet/.gitignore +0 -13
- data/gherkin.gemspec +0 -172
- data/java/Gherkin.iml +0 -16
- data/ragel/lexer.csharp.rl.erb +0 -240
data/.gitignore
CHANGED
data/History.txt
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
== 1.0.
|
1
|
+
== 1.0.6 (2010-04-10)
|
2
|
+
|
3
|
+
=== New Features
|
4
|
+
* Fully automated release process. (Aslak Hellesøy)
|
5
|
+
|
6
|
+
=== Changed Features
|
7
|
+
* Made generated classes use a more uniform naming convention. (Aslak Hellesøy)
|
8
|
+
|
9
|
+
=== Removed Features
|
10
|
+
* Removed C# port, obsoleted by IKVM build from 1.0.5. (Aslak Hellesøy)
|
11
|
+
|
12
|
+
== 1.0.5 (2010-04-08)
|
2
13
|
|
3
14
|
=== New Features
|
4
15
|
* New .NET build of gherkin - an ikvmc build of gherkin.jar to gherkin.dll. (Aslak Hellesøy)
|
@@ -6,7 +17,7 @@
|
|
6
17
|
=== Bugfixes
|
7
18
|
* Made parsers reusable so that the same instance can parse several features. (Aslak Hellesøy)
|
8
19
|
|
9
|
-
== 1.0.4 (
|
20
|
+
== 1.0.4 (2010-04-07)
|
10
21
|
|
11
22
|
=== New features
|
12
23
|
* Pure java releases of Gherkin at http://cukes.info/maven
|
@@ -15,7 +26,7 @@
|
|
15
26
|
=== Changed features
|
16
27
|
* The Lexer now emits the '@' for tags. (Aslak Hellesøy)
|
17
28
|
|
18
|
-
== 1.0.3 (
|
29
|
+
== 1.0.3 (2010-03-31)
|
19
30
|
|
20
31
|
=== Bugfixes
|
21
32
|
* The C lexer correctly instantiates a new array for each table, instead of reusing the old one. (Aslak Hellesøy)
|
data/README.rdoc
CHANGED
@@ -28,21 +28,10 @@ E.g. in Bash, export RL_LANG="en,fr,no". This can be quite helpful when modifyin
|
|
28
28
|
|
29
29
|
== Release process
|
30
30
|
|
31
|
-
* Bump version in the VERSION file
|
32
|
-
|
33
|
-
|
34
|
-
*
|
35
|
-
* rake clean jar compile
|
36
|
-
* rake gemspec
|
37
|
-
* git commit -a -m "Release vX.Y.Z"
|
38
|
-
* rake gemcutter:release
|
39
|
-
* rake git:release
|
40
|
-
* ./nativegems.sh
|
41
|
-
* gem push pkg/... (for each native gem)
|
42
|
-
* cd java && mvn deploy
|
43
|
-
* rake ikvm
|
44
|
-
* Upload pkg/gherkin-X.Y.Z.dll to Github: http://github.com/aslakhellesoy/gherkin/downloads
|
45
|
-
|
31
|
+
* Bump version in the VERSION.yml file and:
|
32
|
+
** java/pom.xml
|
33
|
+
** ikvm/Gherkin/Gherkin,csproj
|
34
|
+
* rake release:ALL
|
46
35
|
* Announce on Cucumber list, IRC and Twitter.
|
47
36
|
|
48
37
|
== Configuring Rake-Compiler for cross compilation
|
data/Rakefile
CHANGED
@@ -22,9 +22,7 @@ begin
|
|
22
22
|
gem.add_development_dependency "rspec", ">= 1.3.0"
|
23
23
|
gem.add_development_dependency "cucumber", ">= 0.6.4"
|
24
24
|
gem.add_development_dependency "rake-compiler", ">= 0.7.0" unless defined?(JRUBY_VERSION)
|
25
|
-
gem.add_development_dependency "albacore", ">= 0.1.2"
|
26
25
|
|
27
|
-
gem.files -= FileList['dotnet/**/*']
|
28
26
|
gem.files -= FileList['ikvm/**/*']
|
29
27
|
gem.files -= FileList['java/**/*']
|
30
28
|
case ENV['PLATFORM']
|
data/VERSION.yml
CHANGED
data/lib/gherkin/c_lexer.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
module Gherkin
|
2
2
|
module CLexer
|
3
|
-
def self.[](
|
4
|
-
|
5
|
-
|
6
|
-
i18n_lexer_class_name = name.capitalize
|
7
|
-
const_get(i18n_lexer_class_name)
|
3
|
+
def self.[](i18n_sanitized_key)
|
4
|
+
require "gherkin_lexer_#{i18n_sanitized_key}"
|
5
|
+
const_get(i18n_sanitized_key.capitalize)
|
8
6
|
end
|
9
7
|
end
|
10
8
|
end
|
data/lib/gherkin/i18n.rb
CHANGED
@@ -65,16 +65,16 @@ module Gherkin
|
|
65
65
|
|
66
66
|
def c(listener)
|
67
67
|
require 'gherkin/c_lexer'
|
68
|
-
CLexer[
|
68
|
+
CLexer[sanitized_key].new(listener)
|
69
69
|
end
|
70
70
|
|
71
71
|
def rb(listener)
|
72
72
|
require 'gherkin/rb_lexer'
|
73
|
-
RbLexer[
|
73
|
+
RbLexer[sanitized_key].new(listener)
|
74
74
|
end
|
75
75
|
|
76
76
|
def sanitized_key
|
77
|
-
@key.gsub(/[\s-]/, '')
|
77
|
+
@key.gsub(/[\s-]/, '_').downcase
|
78
78
|
end
|
79
79
|
|
80
80
|
def incomplete?
|
data/lib/gherkin/i18n.yml
CHANGED
@@ -495,6 +495,19 @@
|
|
495
495
|
then: "*|O zaman"
|
496
496
|
and: "*|Ve"
|
497
497
|
but: "*|Fakat|Ama"
|
498
|
+
"uk":
|
499
|
+
name: Ukrainian
|
500
|
+
native: Українська
|
501
|
+
feature: Функціонал
|
502
|
+
background: Передумова
|
503
|
+
scenario: Сценарій
|
504
|
+
scenario_outline: Структура сценарію
|
505
|
+
examples: Приклади
|
506
|
+
given: "*|Припустимо|Припустимо, що|Нехай"
|
507
|
+
when: "*|Якщо"
|
508
|
+
then: "*|То"
|
509
|
+
and: "*|І"
|
510
|
+
but: "*|Але"
|
498
511
|
"uz":
|
499
512
|
name: Uzbek
|
500
513
|
native: Узбекча
|
data/lib/gherkin/rb_lexer.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
module Gherkin
|
2
2
|
module RbLexer
|
3
|
-
def self.[](
|
4
|
-
|
5
|
-
|
6
|
-
i18n_lexer_class_name = name.capitalize
|
7
|
-
const_get(i18n_lexer_class_name)
|
3
|
+
def self.[](i18n_sanitized_key)
|
4
|
+
require "gherkin/rb_lexer/#{i18n_sanitized_key}"
|
5
|
+
const_get(i18n_sanitized_key.capitalize)
|
8
6
|
end
|
9
7
|
end
|
10
8
|
end
|
data/ragel/lexer.java.rl.erb
CHANGED
@@ -8,7 +8,7 @@ import gherkin.Lexer;
|
|
8
8
|
import gherkin.Listener;
|
9
9
|
import gherkin.LexingError;
|
10
10
|
|
11
|
-
public class <%= @i18n.sanitized_key.
|
11
|
+
public class <%= @i18n.sanitized_key.upcase %> implements Lexer {
|
12
12
|
%%{
|
13
13
|
machine lexer;
|
14
14
|
alphtype byte;
|
@@ -134,7 +134,7 @@ public class <%= @i18n.sanitized_key.capitalize %> implements Lexer {
|
|
134
134
|
|
135
135
|
private final Listener listener;
|
136
136
|
|
137
|
-
public <%= @i18n.sanitized_key.
|
137
|
+
public <%= @i18n.sanitized_key.upcase %>(Listener listener) {
|
138
138
|
this.listener = listener;
|
139
139
|
}
|
140
140
|
|
data/tasks/compile.rake
CHANGED
@@ -8,10 +8,7 @@ CLEAN.include [
|
|
8
8
|
'ragel/i18n/*.rl',
|
9
9
|
'lib/gherkin/rb_lexer/*.rb',
|
10
10
|
'ext/**/*.c',
|
11
|
-
'java/src/gherkin/lexer/*.java'
|
12
|
-
'dotnet/Gherkin/Lexer',
|
13
|
-
'dotnet/Gherkin/obj',
|
14
|
-
'dotnet/Gherkin/bin'
|
11
|
+
'java/src/main/java/gherkin/lexer/*.java'
|
15
12
|
]
|
16
13
|
|
17
14
|
desc "Compile the Java extensions"
|
@@ -21,83 +18,14 @@ file 'lib/gherkin.jar' => Dir['java/src/main/java/**/*.java'] do
|
|
21
18
|
sh("mvn -f java/pom.xml package")
|
22
19
|
end
|
23
20
|
|
24
|
-
namespace :dotnet do
|
25
|
-
require 'albacore'
|
26
|
-
|
27
|
-
FileList['lib/gherkin/parser/*'].each do |src|
|
28
|
-
dst = "dotnet/Gherkin/StateMachine/#{File.basename(src)}"
|
29
|
-
file dst => src do
|
30
|
-
cp src, dst, :verbose => true
|
31
|
-
end
|
32
|
-
task :compile => dst
|
33
|
-
end
|
34
|
-
|
35
|
-
task :compile => :lexer
|
36
|
-
|
37
|
-
if (`which mono` rescue "") =~ /mono/
|
38
|
-
xbuild :compile do |msb|
|
39
|
-
msb.properties :configuration => :Release
|
40
|
-
msb.targets :Build
|
41
|
-
msb.solution = 'dotnet/Gherkin.sln'
|
42
|
-
end
|
43
|
-
|
44
|
-
require 'rake/xunittask'
|
45
|
-
class XUnitTestRunner
|
46
|
-
def execute
|
47
|
-
system("mono dotnet/lib/xunit/xunit.console.exe dotnet/Gherkin.Tests/bin/Release/Gherkin.Tests.dll")
|
48
|
-
exit 1 if $? != 0
|
49
|
-
end
|
50
|
-
end
|
51
|
-
else
|
52
|
-
msbuild :compile do |msb|
|
53
|
-
msb.properties :configuration => :Release
|
54
|
-
msb.targets :Build
|
55
|
-
msb.solution = 'dotnet/Gherkin.sln'
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
xunit :test => :compile do |xunit|
|
60
|
-
xunit.path_to_command = "dotnet/lib/xunit/xunit.console.exe"
|
61
|
-
xunit.assembly = "dotnet/Gherkin.Tests/bin/Release/Gherkin.Tests.dll"
|
62
|
-
end
|
63
|
-
|
64
|
-
task :package => :test do
|
65
|
-
cp 'dotnet/Gherkin/bin/Release/Gherkin.dll', 'lib/Gherkin.dll'
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
desc "Compile and package the .NET extensions"
|
70
|
-
task :dotnet => ['dotnet:package']
|
71
|
-
|
72
|
-
class CSharpSByteFixTask
|
73
|
-
def initialize(source)
|
74
|
-
@source = source
|
75
|
-
define_tasks
|
76
|
-
end
|
77
|
-
|
78
|
-
def define_tasks
|
79
|
-
directory File.dirname(target)
|
80
|
-
file target => [File.dirname(target), @source] do
|
81
|
-
sh "cat #{@source} | sed ""s/sbyte/short/g"" > #{target}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def target
|
86
|
-
"dotnet/Gherkin/Lexer/#{File.basename(@source)}"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
21
|
rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : []
|
91
22
|
langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.key) }
|
92
23
|
|
93
24
|
langs.each do |i18n|
|
94
25
|
java = RagelTask.new('java', i18n)
|
95
26
|
rb = RagelTask.new('rb', i18n)
|
96
|
-
csharp_tmp = RagelTask.new('csharp', i18n)
|
97
|
-
csharp = CSharpSByteFixTask.new(csharp_tmp.target)
|
98
27
|
|
99
|
-
|
100
|
-
task 'dotnet:lexer' => csharp.target
|
28
|
+
file 'lib/gherkin.jar' => [java.target, rb.target]
|
101
29
|
|
102
30
|
begin
|
103
31
|
unless defined?(JRUBY_VERSION)
|
data/tasks/gems.rake
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
namespace :gems do
|
2
|
+
desc 'Release JRuby gem'
|
3
|
+
task :jruby => :release_dir do
|
4
|
+
sh "rvm jruby rake clean spec gemspec build PLATFORM=java"
|
5
|
+
mv "pkg/gherkin-#{GHERKIN_VERSION}-java.gem", 'release'
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Release MRI/C POSIX gem"
|
9
|
+
task :posix => :release_dir do
|
10
|
+
sh "rvm 1.8.7 rake clean spec gemspec build"
|
11
|
+
mv "pkg/gherkin-#{GHERKIN_VERSION}.gem", 'release'
|
12
|
+
end
|
13
|
+
|
14
|
+
[:mswin32, :mingw32].each do |win_compiler|
|
15
|
+
desc "Release MRI/C precompiled #{win_compiler} gem"
|
16
|
+
task win_compiler => :posix do
|
17
|
+
sh "rvm 1.8.7 rake cross compile gemspec build PLATFORM=i386-#{win_compiler} RUBY_CC_VERSION=1.8.6"
|
18
|
+
mv "pkg/gherkin-#{GHERKIN_VERSION}-x86-#{win_compiler}.gem", 'release'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
task :release_dir do
|
23
|
+
mkdir 'release' unless File.directory?('release')
|
24
|
+
end
|
25
|
+
|
26
|
+
task :clean_release_dir do
|
27
|
+
rm_rf 'release' if File.directory?('release')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
task :gems => ['gems:clean_release_dir', 'gems:jruby', 'gems:posix', 'gems:mswin32', 'gems:mingw32']
|
data/tasks/ikvm.rake
CHANGED
@@ -26,19 +26,19 @@ namespace :ikvm do
|
|
26
26
|
task :dll => 'pkg/gherkin.dll'
|
27
27
|
|
28
28
|
file 'pkg/gherkin.exe' => 'lib/gherkin.jar' do
|
29
|
-
mkdir_p '
|
30
|
-
sh("mono /usr/local/ikvm/bin/ikvmc.exe -target:exe lib/gherkin.jar -out:
|
29
|
+
mkdir_p 'release' unless File.directory?('release')
|
30
|
+
sh("mono /usr/local/ikvm/bin/ikvmc.exe -target:exe lib/gherkin.jar -out:release/gherkin-#{GHERKIN_VERSION}.exe")
|
31
31
|
end
|
32
32
|
|
33
33
|
file 'pkg/gherkin.dll' => 'lib/gherkin.jar' do
|
34
|
-
mkdir_p '
|
35
|
-
sh("mono /usr/local/ikvm/bin/ikvmc.exe -target:library lib/gherkin.jar -out:
|
34
|
+
mkdir_p 'release' unless File.directory?('release')
|
35
|
+
sh("mono /usr/local/ikvm/bin/ikvmc.exe -target:library lib/gherkin.jar -out:release/gherkin-#{GHERKIN_VERSION}.dll")
|
36
36
|
end
|
37
37
|
|
38
38
|
desc 'Copy the IKVM .dll files over to the pkg dir'
|
39
39
|
task :copy_ikvm_dlls do
|
40
40
|
Dir['/usr/local/ikvm/bin/{IKVM.OpenJDK.Core,IKVM.OpenJDK.Text,IKVM.Runtime}.dll'].each do |dll|
|
41
|
-
cp dll, '
|
41
|
+
cp dll, 'release'
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
data/tasks/ragel_task.rb
CHANGED
@@ -28,7 +28,7 @@ class RagelTask
|
|
28
28
|
def target
|
29
29
|
{
|
30
30
|
'c' => "ext/gherkin_lexer_#{@i18n.sanitized_key}/gherkin_lexer_#{@i18n.sanitized_key}.c",
|
31
|
-
'java' => "java/src/main/java/gherkin/lexer/#{@i18n.sanitized_key.
|
31
|
+
'java' => "java/src/main/java/gherkin/lexer/#{@i18n.sanitized_key.upcase}.java",
|
32
32
|
'rb' => "lib/gherkin/rb_lexer/#{@i18n.sanitized_key}.rb",
|
33
33
|
'csharp' => "tmp/#{@i18n.sanitized_key}.cs"
|
34
34
|
}[@lang]
|
data/tasks/release.rake
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
namespace :release do
|
2
|
+
desc 'Uplad all packages and tag git'
|
3
|
+
task :ALL => [:_gems, :dll, :jar, 'git:release']
|
4
|
+
|
5
|
+
task :_gems => :gems do
|
6
|
+
Dir.chdir('release') do
|
7
|
+
Dir['*.gem'].each do |gem_file|
|
8
|
+
sh("gem push #{gem_file}")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
task :dll => :ikvm do
|
14
|
+
Dir.chdir('release') do
|
15
|
+
# This requires aslakhellesoy's build of the github gem,
|
16
|
+
# which has tekkub's upload command.
|
17
|
+
sh("github upload #{Dir['gherkin*.dll'][0]}")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
task :jar do
|
22
|
+
Dir.chdir('java') do
|
23
|
+
sh("mvn deploy")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 6
|
9
|
+
version: 1.0.6
|
10
10
|
platform: i386-mswin32
|
11
11
|
authors:
|
12
12
|
- Mike Sassak
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-04-
|
19
|
+
date: 2010-04-10 00:00:00 +02:00
|
20
20
|
default_executable: gherkin
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|
@@ -74,20 +74,6 @@ dependencies:
|
|
74
74
|
version: 0.7.0
|
75
75
|
type: :development
|
76
76
|
version_requirements: *id004
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
name: albacore
|
79
|
-
prerelease: false
|
80
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
81
|
-
requirements:
|
82
|
-
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
- 1
|
87
|
-
- 2
|
88
|
-
version: 0.1.2
|
89
|
-
type: :development
|
90
|
-
version_requirements: *id005
|
91
77
|
description: A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.
|
92
78
|
email: cukes@googlegroups.com
|
93
79
|
executables:
|
@@ -108,7 +94,6 @@ files:
|
|
108
94
|
- VERSION.yml
|
109
95
|
- bin/gherkin
|
110
96
|
- cucumber.yml
|
111
|
-
- dotnet/.gitignore
|
112
97
|
- features/feature_parser.feature
|
113
98
|
- features/native_lexer.feature
|
114
99
|
- features/parser_with_native_lexer.feature
|
@@ -117,10 +102,8 @@ files:
|
|
117
102
|
- features/step_definitions/pretty_listener_step.rb
|
118
103
|
- features/steps_parser.feature
|
119
104
|
- features/support/env.rb
|
120
|
-
- gherkin.gemspec
|
121
105
|
- ikvm/.gitignore
|
122
106
|
- java/.gitignore
|
123
|
-
- java/Gherkin.iml
|
124
107
|
- java/src/main/java/gherkin/lexer/.gitignore
|
125
108
|
- lib/.gitignore
|
126
109
|
- lib/gherkin.rb
|
@@ -153,7 +136,6 @@ files:
|
|
153
136
|
- nativegems.sh
|
154
137
|
- ragel/i18n/.gitignore
|
155
138
|
- ragel/lexer.c.rl.erb
|
156
|
-
- ragel/lexer.csharp.rl.erb
|
157
139
|
- ragel/lexer.java.rl.erb
|
158
140
|
- ragel/lexer.rb.rl.erb
|
159
141
|
- ragel/lexer_common.rl.erb
|
@@ -191,9 +173,11 @@ files:
|
|
191
173
|
- tasks/bench/null_listener.rb
|
192
174
|
- tasks/compile.rake
|
193
175
|
- tasks/cucumber.rake
|
176
|
+
- tasks/gems.rake
|
194
177
|
- tasks/ikvm.rake
|
195
178
|
- tasks/ragel_task.rb
|
196
179
|
- tasks/rdoc.rake
|
180
|
+
- tasks/release.rake
|
197
181
|
- tasks/rspec.rake
|
198
182
|
has_rdoc: true
|
199
183
|
homepage: http://github.com/aslakhellesoy/gherkin
|
data/dotnet/.gitignore
DELETED
data/gherkin.gemspec
DELETED
@@ -1,172 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{gherkin}
|
8
|
-
s.version = "1.0.5"
|
9
|
-
s.platform = %q{i386-mswin32}
|
10
|
-
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
-
s.authors = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Helles\303\270y"]
|
13
|
-
s.date = %q{2010-04-08}
|
14
|
-
s.default_executable = %q{gherkin}
|
15
|
-
s.description = %q{A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.}
|
16
|
-
s.email = %q{cukes@googlegroups.com}
|
17
|
-
s.executables = ["gherkin"]
|
18
|
-
s.extra_rdoc_files = [
|
19
|
-
"LICENSE",
|
20
|
-
"README.rdoc"
|
21
|
-
]
|
22
|
-
s.files = [
|
23
|
-
".gitattributes",
|
24
|
-
".gitignore",
|
25
|
-
".mailmap",
|
26
|
-
"History.txt",
|
27
|
-
"LICENSE",
|
28
|
-
"README.rdoc",
|
29
|
-
"Rakefile",
|
30
|
-
"VERSION.yml",
|
31
|
-
"bin/gherkin",
|
32
|
-
"cucumber.yml",
|
33
|
-
"dotnet/.gitignore",
|
34
|
-
"features/feature_parser.feature",
|
35
|
-
"features/native_lexer.feature",
|
36
|
-
"features/parser_with_native_lexer.feature",
|
37
|
-
"features/pretty_printer.feature",
|
38
|
-
"features/step_definitions/gherkin_steps.rb",
|
39
|
-
"features/step_definitions/pretty_listener_step.rb",
|
40
|
-
"features/steps_parser.feature",
|
41
|
-
"features/support/env.rb",
|
42
|
-
"gherkin.gemspec",
|
43
|
-
"ikvm/.gitignore",
|
44
|
-
"java/.gitignore",
|
45
|
-
"java/Gherkin.iml",
|
46
|
-
"java/src/main/java/gherkin/lexer/.gitignore",
|
47
|
-
"lib/.gitignore",
|
48
|
-
"lib/gherkin.rb",
|
49
|
-
"lib/gherkin/c_lexer.rb",
|
50
|
-
"lib/gherkin/cli/main.rb",
|
51
|
-
"lib/gherkin/core_ext/array.rb",
|
52
|
-
"lib/gherkin/csharp_lexer.rb",
|
53
|
-
"lib/gherkin/formatter/argument.rb",
|
54
|
-
"lib/gherkin/formatter/colors.rb",
|
55
|
-
"lib/gherkin/formatter/monochrome_format.rb",
|
56
|
-
"lib/gherkin/formatter/pretty_listener.rb",
|
57
|
-
"lib/gherkin/i18n.rb",
|
58
|
-
"lib/gherkin/i18n.yml",
|
59
|
-
"lib/gherkin/i18n_lexer.rb",
|
60
|
-
"lib/gherkin/parser/filter_listener.rb",
|
61
|
-
"lib/gherkin/parser/meta.txt",
|
62
|
-
"lib/gherkin/parser/parser.rb",
|
63
|
-
"lib/gherkin/parser/root.txt",
|
64
|
-
"lib/gherkin/parser/sexp.rb",
|
65
|
-
"lib/gherkin/parser/steps.txt",
|
66
|
-
"lib/gherkin/parser/tag_expression.rb",
|
67
|
-
"lib/gherkin/rb_lexer.rb",
|
68
|
-
"lib/gherkin/rb_lexer/.gitignore",
|
69
|
-
"lib/gherkin/rb_lexer/README.rdoc",
|
70
|
-
"lib/gherkin/tools.rb",
|
71
|
-
"lib/gherkin/tools/files.rb",
|
72
|
-
"lib/gherkin/tools/reformat.rb",
|
73
|
-
"lib/gherkin/tools/stats.rb",
|
74
|
-
"lib/gherkin/tools/stats_listener.rb",
|
75
|
-
"nativegems.sh",
|
76
|
-
"ragel/i18n/.gitignore",
|
77
|
-
"ragel/lexer.c.rl.erb",
|
78
|
-
"ragel/lexer.csharp.rl.erb",
|
79
|
-
"ragel/lexer.java.rl.erb",
|
80
|
-
"ragel/lexer.rb.rl.erb",
|
81
|
-
"ragel/lexer_common.rl.erb",
|
82
|
-
"spec/gherkin/c_lexer_spec.rb",
|
83
|
-
"spec/gherkin/csharp_lexer_spec.rb",
|
84
|
-
"spec/gherkin/fixtures/1.feature",
|
85
|
-
"spec/gherkin/fixtures/comments_in_table.feature",
|
86
|
-
"spec/gherkin/fixtures/complex.feature",
|
87
|
-
"spec/gherkin/fixtures/dos_line_endings.feature",
|
88
|
-
"spec/gherkin/fixtures/i18n_fr.feature",
|
89
|
-
"spec/gherkin/fixtures/i18n_no.feature",
|
90
|
-
"spec/gherkin/fixtures/i18n_zh-CN.feature",
|
91
|
-
"spec/gherkin/fixtures/simple.feature",
|
92
|
-
"spec/gherkin/fixtures/simple_with_comments.feature",
|
93
|
-
"spec/gherkin/fixtures/simple_with_tags.feature",
|
94
|
-
"spec/gherkin/formatter/argument_spec.rb",
|
95
|
-
"spec/gherkin/formatter/colors_spec.rb",
|
96
|
-
"spec/gherkin/formatter/pretty_listener_spec.rb",
|
97
|
-
"spec/gherkin/i18n_lexer_spec.rb",
|
98
|
-
"spec/gherkin/i18n_spec.rb",
|
99
|
-
"spec/gherkin/java_lexer_spec.rb",
|
100
|
-
"spec/gherkin/parser/filter_listener_spec.rb",
|
101
|
-
"spec/gherkin/parser/parser_spec.rb",
|
102
|
-
"spec/gherkin/parser/tag_expression_spec.rb",
|
103
|
-
"spec/gherkin/rb_lexer_spec.rb",
|
104
|
-
"spec/gherkin/sexp_recorder.rb",
|
105
|
-
"spec/gherkin/shared/lexer_spec.rb",
|
106
|
-
"spec/gherkin/shared/py_string_spec.rb",
|
107
|
-
"spec/gherkin/shared/row_spec.rb",
|
108
|
-
"spec/gherkin/shared/tags_spec.rb",
|
109
|
-
"spec/spec_helper.rb",
|
110
|
-
"tasks/bench.rake",
|
111
|
-
"tasks/bench/feature_builder.rb",
|
112
|
-
"tasks/bench/generated/.gitignore",
|
113
|
-
"tasks/bench/null_listener.rb",
|
114
|
-
"tasks/compile.rake",
|
115
|
-
"tasks/cucumber.rake",
|
116
|
-
"tasks/ikvm.rake",
|
117
|
-
"tasks/ragel_task.rb",
|
118
|
-
"tasks/rdoc.rake",
|
119
|
-
"tasks/rspec.rake"
|
120
|
-
]
|
121
|
-
s.homepage = %q{http://github.com/aslakhellesoy/gherkin}
|
122
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
123
|
-
s.require_paths = ["lib"]
|
124
|
-
s.rubygems_version = %q{1.3.6}
|
125
|
-
s.summary = %q{Fast Gherkin lexer/parser}
|
126
|
-
s.test_files = [
|
127
|
-
"spec/gherkin/c_lexer_spec.rb",
|
128
|
-
"spec/gherkin/csharp_lexer_spec.rb",
|
129
|
-
"spec/gherkin/formatter/argument_spec.rb",
|
130
|
-
"spec/gherkin/formatter/colors_spec.rb",
|
131
|
-
"spec/gherkin/formatter/pretty_listener_spec.rb",
|
132
|
-
"spec/gherkin/i18n_lexer_spec.rb",
|
133
|
-
"spec/gherkin/i18n_spec.rb",
|
134
|
-
"spec/gherkin/java_lexer_spec.rb",
|
135
|
-
"spec/gherkin/parser/filter_listener_spec.rb",
|
136
|
-
"spec/gherkin/parser/parser_spec.rb",
|
137
|
-
"spec/gherkin/parser/tag_expression_spec.rb",
|
138
|
-
"spec/gherkin/rb_lexer_spec.rb",
|
139
|
-
"spec/gherkin/sexp_recorder.rb",
|
140
|
-
"spec/gherkin/shared/lexer_spec.rb",
|
141
|
-
"spec/gherkin/shared/py_string_spec.rb",
|
142
|
-
"spec/gherkin/shared/row_spec.rb",
|
143
|
-
"spec/gherkin/shared/tags_spec.rb",
|
144
|
-
"spec/spec_helper.rb"
|
145
|
-
]
|
146
|
-
|
147
|
-
if s.respond_to? :specification_version then
|
148
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
149
|
-
s.specification_version = 3
|
150
|
-
|
151
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
152
|
-
s.add_runtime_dependency(%q<trollop>, [">= 1.15"])
|
153
|
-
s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
|
154
|
-
s.add_development_dependency(%q<cucumber>, [">= 0.6.4"])
|
155
|
-
s.add_development_dependency(%q<rake-compiler>, [">= 0.7.0"])
|
156
|
-
s.add_development_dependency(%q<albacore>, [">= 0.1.2"])
|
157
|
-
else
|
158
|
-
s.add_dependency(%q<trollop>, [">= 1.15"])
|
159
|
-
s.add_dependency(%q<rspec>, [">= 1.3.0"])
|
160
|
-
s.add_dependency(%q<cucumber>, [">= 0.6.4"])
|
161
|
-
s.add_dependency(%q<rake-compiler>, [">= 0.7.0"])
|
162
|
-
s.add_dependency(%q<albacore>, [">= 0.1.2"])
|
163
|
-
end
|
164
|
-
else
|
165
|
-
s.add_dependency(%q<trollop>, [">= 1.15"])
|
166
|
-
s.add_dependency(%q<rspec>, [">= 1.3.0"])
|
167
|
-
s.add_dependency(%q<cucumber>, [">= 0.6.4"])
|
168
|
-
s.add_dependency(%q<rake-compiler>, [">= 0.7.0"])
|
169
|
-
s.add_dependency(%q<albacore>, [">= 0.1.2"])
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
data/java/Gherkin.iml
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
3
|
-
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
4
|
-
<output url="file://$MODULE_DIR$/target/classes" />
|
5
|
-
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
6
|
-
<content url="file://$MODULE_DIR$">
|
7
|
-
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
9
|
-
<excludeFolder url="file://$MODULE_DIR$/target" />
|
10
|
-
</content>
|
11
|
-
<orderEntry type="inheritedJdk" />
|
12
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
13
|
-
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.8.1" level="project" />
|
14
|
-
</component>
|
15
|
-
</module>
|
16
|
-
|
data/ragel/lexer.csharp.rl.erb
DELETED
@@ -1,240 +0,0 @@
|
|
1
|
-
namespace Gherkin.Lexer
|
2
|
-
{
|
3
|
-
using System.Text;
|
4
|
-
using System.Text.RegularExpressions;
|
5
|
-
using System.IO;
|
6
|
-
using System.Collections.Generic;
|
7
|
-
using System.Linq;
|
8
|
-
|
9
|
-
[Language("<%= @i18n.sanitized_key.downcase %>")]
|
10
|
-
public class <%= @i18n.sanitized_key.capitalize %> : ILexer {
|
11
|
-
%%{
|
12
|
-
machine lexer;
|
13
|
-
alphtype char;
|
14
|
-
|
15
|
-
action begin_content {
|
16
|
-
contentStart = p;
|
17
|
-
contentCol = p - lastNewline + 1;
|
18
|
-
contentNewline = lastNewline;
|
19
|
-
currentLine = lineNumber;
|
20
|
-
}
|
21
|
-
|
22
|
-
action start_pystring {
|
23
|
-
currentLine = lineNumber;
|
24
|
-
pystringStartCol = p - lastNewline;
|
25
|
-
pystringStartNewline = lastNewline;
|
26
|
-
}
|
27
|
-
|
28
|
-
action begin_pystring_content {
|
29
|
-
contentStart = p;
|
30
|
-
}
|
31
|
-
|
32
|
-
action store_pystring_content {
|
33
|
-
string con = Unindent(pystringStartCol, new Regex("(\\r?\\n)?( )*\\Z").Replace(Substring(data, contentStart, nextKeywordStart-1), "", 1));
|
34
|
-
listener.PythonString(new Token(con, GetCharacterPosition(data, pystringStartNewline, currentLine, pystringStartCol+1)));
|
35
|
-
}
|
36
|
-
|
37
|
-
action store_feature_content {
|
38
|
-
string con = MultilineStrip(KeywordContent(data, p, eof, nextKeywordStart, contentStart).Trim());
|
39
|
-
listener.Feature(new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)), new Token(con, GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
40
|
-
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
41
|
-
nextKeywordStart = -1;
|
42
|
-
}
|
43
|
-
|
44
|
-
action store_background_content {
|
45
|
-
string con = MultilineStrip(KeywordContent(data, p, eof, nextKeywordStart, contentStart));
|
46
|
-
listener.Background(new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)), new Token(con, GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
47
|
-
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
48
|
-
nextKeywordStart = -1;
|
49
|
-
}
|
50
|
-
|
51
|
-
action store_scenario_content {
|
52
|
-
string con = MultilineStrip(KeywordContent(data, p, eof, nextKeywordStart, contentStart));
|
53
|
-
listener.Scenario(new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)), new Token(con, GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
54
|
-
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
55
|
-
nextKeywordStart = -1;
|
56
|
-
}
|
57
|
-
|
58
|
-
action store_scenario_outline_content {
|
59
|
-
string con = MultilineStrip(KeywordContent(data, p, eof, nextKeywordStart, contentStart));
|
60
|
-
listener.ScenarioOutline(new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)), new Token(con, GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
61
|
-
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
62
|
-
nextKeywordStart = -1;
|
63
|
-
}
|
64
|
-
|
65
|
-
action store_examples_content {
|
66
|
-
string con = MultilineStrip(KeywordContent(data, p, eof, nextKeywordStart, contentStart));
|
67
|
-
listener.Examples(new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)), new Token(con, GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
68
|
-
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
69
|
-
nextKeywordStart = -1;
|
70
|
-
}
|
71
|
-
|
72
|
-
action store_step_content {
|
73
|
-
listener.Step(
|
74
|
-
new Token(keyword, GetCharacterPosition(data, keywordNewline, currentLine, keywordCol)),
|
75
|
-
new Token(Substring(data, contentStart, p).Trim(), GetCharacterPosition(data, contentNewline, currentLine, contentCol)),
|
76
|
-
LookupStepKind(keyword));
|
77
|
-
}
|
78
|
-
|
79
|
-
action store_comment_content {
|
80
|
-
listener.Comment(new Token(Substring(data, contentStart, p).Trim(), GetCharacterPosition(data, contentNewline, currentLine, contentCol)));
|
81
|
-
keywordStart = -1;
|
82
|
-
}
|
83
|
-
|
84
|
-
action store_tag_content {
|
85
|
-
listener.Tag(new Token(Substring(data, contentStart, p).Trim(), GetCharacterPosition(data, contentNewline, currentLine, contentCol-1)));
|
86
|
-
keywordStart = -1;
|
87
|
-
}
|
88
|
-
|
89
|
-
action inc_line_number {
|
90
|
-
lineNumber++;
|
91
|
-
}
|
92
|
-
|
93
|
-
action last_newline {
|
94
|
-
lastNewline = p + 1;
|
95
|
-
}
|
96
|
-
|
97
|
-
action start_keyword {
|
98
|
-
if(keywordStart == -1) keywordStart = p;
|
99
|
-
if(nextKeywordStart == -1)
|
100
|
-
{
|
101
|
-
keywordCol = p - lastNewline + 1;
|
102
|
-
keywordNewline = lastNewline;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
action end_keyword {
|
107
|
-
keyword = new Regex(":$").Replace(Substring(data, keywordStart, p), "", 1);
|
108
|
-
keywordStart = -1;
|
109
|
-
}
|
110
|
-
|
111
|
-
action next_keyword_start {
|
112
|
-
nextKeywordStart = p;
|
113
|
-
}
|
114
|
-
|
115
|
-
action start_row {
|
116
|
-
p = p - 1;
|
117
|
-
contentCol = p - lastNewline + 1;
|
118
|
-
currentRow = new List<Token>();
|
119
|
-
currentLine = lineNumber;
|
120
|
-
}
|
121
|
-
|
122
|
-
action begin_cell_content {
|
123
|
-
contentStart = p;
|
124
|
-
}
|
125
|
-
|
126
|
-
action store_cell_content {
|
127
|
-
currentRow.Add(new Token(Substring(data, contentStart, p).Trim(), GetCharacterPosition(data, lastNewline, lineNumber, contentStart - lastNewline + 1)));
|
128
|
-
}
|
129
|
-
|
130
|
-
action store_row {
|
131
|
-
listener.Row(currentRow, GetCharacterPosition(data, contentNewline, currentLine, contentCol));
|
132
|
-
}
|
133
|
-
|
134
|
-
action end_feature {
|
135
|
-
if(cs < lexer_first_final) {
|
136
|
-
string content = CurrentLineContent(data, lastNewline);
|
137
|
-
throw new LexingException("Lexing error on line " + lineNumber + ": '" + content + "'");
|
138
|
-
} else {
|
139
|
-
listener.Eof();
|
140
|
-
}
|
141
|
-
}
|
142
|
-
|
143
|
-
include lexer_common "lexer_common.<%= @i18n.sanitized_key %>.rl";
|
144
|
-
}%%
|
145
|
-
|
146
|
-
private readonly IListener listener;
|
147
|
-
|
148
|
-
private static readonly IDictionary<string, StepKind> stepKeywords = new Dictionary<string, StepKind>();
|
149
|
-
|
150
|
-
static <%= @i18n.sanitized_key.capitalize %>()
|
151
|
-
{
|
152
|
-
<% @i18n.keywords('given', true).reject{|kw| kw == '* '}.each do |keyword| %>
|
153
|
-
stepKeywords["<%=keyword%>"] = StepKind.Given;
|
154
|
-
<% end %>
|
155
|
-
<% @i18n.keywords('when', true).reject{|kw| kw == '* '}.each do |keyword| %>
|
156
|
-
stepKeywords["<%=keyword%>"] = StepKind.When;
|
157
|
-
<% end %>
|
158
|
-
<% @i18n.keywords('then', true).reject{|kw| kw == '* '}.each do |keyword| %>
|
159
|
-
stepKeywords["<%=keyword%>"] = StepKind.Then;
|
160
|
-
<% end %>
|
161
|
-
<% @i18n.keywords('and', true).reject{|kw| kw == '* '}.each do |keyword| %>
|
162
|
-
stepKeywords["<%=keyword%>"] = StepKind.And;
|
163
|
-
<% end %>
|
164
|
-
<% @i18n.keywords('but', true).reject{|kw| kw == '* '}.each do |keyword| %>
|
165
|
-
stepKeywords["<%=keyword%>"] = StepKind.But;
|
166
|
-
<% end %>
|
167
|
-
stepKeywords["* "] = StepKind.Any;
|
168
|
-
}
|
169
|
-
|
170
|
-
private static StepKind LookupStepKind(string keyword)
|
171
|
-
{
|
172
|
-
if (!stepKeywords.Keys.Contains(keyword))
|
173
|
-
return StepKind.Unknown;
|
174
|
-
return stepKeywords[keyword];
|
175
|
-
}
|
176
|
-
|
177
|
-
public <%= @i18n.sanitized_key.capitalize %>(IListener listener) {
|
178
|
-
this.listener = listener;
|
179
|
-
|
180
|
-
}
|
181
|
-
|
182
|
-
%% write data noerror;
|
183
|
-
|
184
|
-
public void Scan(TextReader inputSequence) {
|
185
|
-
string input = inputSequence.ReadToEnd() + "\n%_FEATURE_END_%";
|
186
|
-
char[] data = Encoding.GetEncoding("iso-8859-1").GetChars(Encoding.UTF8.GetBytes(input));
|
187
|
-
int cs, p = 0, pe = data.Length;
|
188
|
-
int eof = pe;
|
189
|
-
|
190
|
-
int lineNumber = 1;
|
191
|
-
int lastNewline = 0;
|
192
|
-
|
193
|
-
int keywordCol = -1;
|
194
|
-
int keywordNewline = 0;
|
195
|
-
int contentCol = -1;
|
196
|
-
int contentNewline = 0;
|
197
|
-
int contentStart = -1;
|
198
|
-
int currentLine = -1;
|
199
|
-
int pystringStartNewline = 0;
|
200
|
-
int pystringStartCol = -1;
|
201
|
-
int nextKeywordStart = -1;
|
202
|
-
int keywordStart = -1;
|
203
|
-
string keyword = null;
|
204
|
-
IList<Token> currentRow = null;
|
205
|
-
|
206
|
-
%% write init;
|
207
|
-
%% write exec;
|
208
|
-
}
|
209
|
-
|
210
|
-
private string KeywordContent(char[] data, int p, int eof, int nextKeywordStart, int contentStart) {
|
211
|
-
int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart;
|
212
|
-
return Substring(data, contentStart, endPoint);
|
213
|
-
}
|
214
|
-
|
215
|
-
private string MultilineStrip(string text) {
|
216
|
-
var result = new StringBuilder();
|
217
|
-
foreach (var s in text.Split(new [] {'\n'})) {
|
218
|
-
result.AppendLine(s.Trim());
|
219
|
-
}
|
220
|
-
return result.ToString().Trim();
|
221
|
-
}
|
222
|
-
|
223
|
-
private string Unindent(int startCol, string text) {
|
224
|
-
return new Regex("^ {0," + startCol + "}", RegexOptions.Multiline).Replace(text, "");
|
225
|
-
}
|
226
|
-
|
227
|
-
private string CurrentLineContent(char[] data, int lastNewline) {
|
228
|
-
return Substring(data, lastNewline, data.Length).Trim();
|
229
|
-
}
|
230
|
-
|
231
|
-
private string Substring(char[] data, int start, int end) {
|
232
|
-
return Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(data, start, end-start));
|
233
|
-
}
|
234
|
-
|
235
|
-
private Position GetCharacterPosition(char[] data, int lineStart, int line, int bytecol) {
|
236
|
-
return new Position(line,
|
237
|
-
Encoding.UTF8.GetCharCount(Encoding.GetEncoding("iso-8859-1").GetBytes(data, lineStart, bytecol)));
|
238
|
-
}
|
239
|
-
}
|
240
|
-
}
|