rouge 4.7.0 → 5.0.0

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.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -4
  3. data/bin/rougify +3 -4
  4. data/lib/rouge/cli.rb +7 -10
  5. data/lib/rouge/demos/abap +30 -4
  6. data/lib/rouge/demos/dylan +8 -0
  7. data/lib/rouge/demos/kick_assembler +14 -0
  8. data/lib/rouge/demos/pdf +29 -0
  9. data/lib/rouge/demos/thrift +15 -0
  10. data/lib/rouge/demos/veryl +24 -0
  11. data/lib/rouge/eager.rb +3 -0
  12. data/lib/rouge/formatters/html.rb +8 -1
  13. data/lib/rouge/formatters/html_debug.rb +16 -0
  14. data/lib/rouge/formatters/html_legacy.rb +15 -1
  15. data/lib/rouge/formatters/html_legacy_table.rb +57 -0
  16. data/lib/rouge/formatters/html_line_highlighter.rb +11 -4
  17. data/lib/rouge/formatters/html_line_table.rb +8 -3
  18. data/lib/rouge/formatters/html_linewise.rb +11 -2
  19. data/lib/rouge/formatters/html_pygments.rb +6 -1
  20. data/lib/rouge/formatters/html_table.rb +47 -21
  21. data/lib/rouge/formatters/terminal256.rb +3 -3
  22. data/lib/rouge/formatters/tex.rb +1 -1
  23. data/lib/rouge/guesser.rb +1 -1
  24. data/lib/rouge/guessers/disambiguation.rb +2 -2
  25. data/lib/rouge/guessers/glob_mapping.rb +2 -2
  26. data/lib/rouge/guessers/modeline.rb +2 -2
  27. data/lib/rouge/lexer.rb +40 -21
  28. data/lib/rouge/lexers/abap/builtins.rb +187 -0
  29. data/lib/rouge/lexers/abap.rb +70 -178
  30. data/lib/rouge/lexers/ada.rb +1 -1
  31. data/lib/rouge/lexers/apache/keywords.rb +3 -11
  32. data/lib/rouge/lexers/apache.rb +25 -24
  33. data/lib/rouge/lexers/apex.rb +2 -2
  34. data/lib/rouge/lexers/apiblueprint.rb +2 -2
  35. data/lib/rouge/lexers/bicep.rb +2 -2
  36. data/lib/rouge/lexers/biml.rb +36 -9
  37. data/lib/rouge/lexers/brightscript.rb +3 -4
  38. data/lib/rouge/lexers/c.rb +9 -5
  39. data/lib/rouge/lexers/console.rb +11 -5
  40. data/lib/rouge/lexers/cpp.rb +10 -12
  41. data/lib/rouge/lexers/crystal.rb +1 -1
  42. data/lib/rouge/lexers/css.rb +21 -2
  43. data/lib/rouge/lexers/cuda.rb +4 -4
  44. data/lib/rouge/lexers/cython.rb +26 -50
  45. data/lib/rouge/lexers/dafny.rb +1 -1
  46. data/lib/rouge/lexers/dart.rb +2 -0
  47. data/lib/rouge/lexers/datastudio.rb +1 -1
  48. data/lib/rouge/lexers/digdag.rb +2 -3
  49. data/lib/rouge/lexers/dylan.rb +109 -0
  50. data/lib/rouge/lexers/ecl.rb +3 -3
  51. data/lib/rouge/lexers/elixir.rb +14 -9
  52. data/lib/rouge/lexers/escape.rb +1 -1
  53. data/lib/rouge/lexers/factor.rb +1 -1
  54. data/lib/rouge/lexers/freefem.rb +2 -2
  55. data/lib/rouge/lexers/ghc_cmm.rb +1 -1
  56. data/lib/rouge/lexers/ghc_core.rb +1 -1
  57. data/lib/rouge/lexers/gherkin/keywords.rb +10 -6
  58. data/lib/rouge/lexers/gherkin.rb +28 -26
  59. data/lib/rouge/lexers/gjs.rb +2 -2
  60. data/lib/rouge/lexers/glsl/builtins.rb +17 -0
  61. data/lib/rouge/lexers/glsl.rb +50 -113
  62. data/lib/rouge/lexers/go.rb +1 -1
  63. data/lib/rouge/lexers/gradle.rb +2 -2
  64. data/lib/rouge/lexers/groovy.rb +6 -0
  65. data/lib/rouge/lexers/gts.rb +2 -2
  66. data/lib/rouge/lexers/hack.rb +4 -6
  67. data/lib/rouge/lexers/haxe.rb +2 -2
  68. data/lib/rouge/lexers/hlsl.rb +6 -6
  69. data/lib/rouge/lexers/hocon.rb +2 -2
  70. data/lib/rouge/lexers/hql.rb +15 -19
  71. data/lib/rouge/lexers/idris.rb +1 -1
  72. data/lib/rouge/lexers/igorpro/builtins.rb +1530 -0
  73. data/lib/rouge/lexers/igorpro.rb +49 -520
  74. data/lib/rouge/lexers/irb.rb +3 -3
  75. data/lib/rouge/lexers/isbl.rb +7 -43
  76. data/lib/rouge/lexers/j.rb +1 -1
  77. data/lib/rouge/lexers/json5.rb +2 -2
  78. data/lib/rouge/lexers/json_doc.rb +2 -2
  79. data/lib/rouge/lexers/jsp.rb +119 -119
  80. data/lib/rouge/lexers/jsx.rb +2 -2
  81. data/lib/rouge/lexers/kick_assembler.rb +100 -0
  82. data/lib/rouge/lexers/kotlin.rb +5 -0
  83. data/lib/rouge/lexers/lasso/keywords.rb +6 -6
  84. data/lib/rouge/lexers/lasso.rb +9 -11
  85. data/lib/rouge/lexers/liquid.rb +5 -6
  86. data/lib/rouge/lexers/llvm/keywords.rb +3 -12
  87. data/lib/rouge/lexers/llvm.rb +5 -16
  88. data/lib/rouge/lexers/lua/keywords.rb +11 -13
  89. data/lib/rouge/lexers/lua.rb +8 -7
  90. data/lib/rouge/lexers/lutin.rb +5 -4
  91. data/lib/rouge/lexers/m68k.rb +3 -3
  92. data/lib/rouge/lexers/mason.rb +110 -110
  93. data/lib/rouge/lexers/mathematica/keywords.rb +1 -3
  94. data/lib/rouge/lexers/mathematica.rb +6 -7
  95. data/lib/rouge/lexers/matlab/keywords.rb +2 -2
  96. data/lib/rouge/lexers/matlab.rb +5 -5
  97. data/lib/rouge/lexers/meson.rb +1 -1
  98. data/lib/rouge/lexers/mojo.rb +6 -2
  99. data/lib/rouge/lexers/moonscript.rb +19 -17
  100. data/lib/rouge/lexers/nesasm.rb +6 -6
  101. data/lib/rouge/lexers/nial.rb +7 -8
  102. data/lib/rouge/lexers/nim.rb +3 -3
  103. data/lib/rouge/lexers/nix.rb +10 -8
  104. data/lib/rouge/lexers/objective_c.rb +3 -3
  105. data/lib/rouge/lexers/objective_cpp.rb +3 -2
  106. data/lib/rouge/lexers/ocaml.rb +2 -2
  107. data/lib/rouge/lexers/openedge.rb +9 -9
  108. data/lib/rouge/lexers/pdf.rb +109 -0
  109. data/lib/rouge/lexers/php/keywords.rb +136 -138
  110. data/lib/rouge/lexers/php.rb +58 -9
  111. data/lib/rouge/lexers/plsql.rb +8 -9
  112. data/lib/rouge/lexers/postscript.rb +1 -1
  113. data/lib/rouge/lexers/powershell.rb +1 -1
  114. data/lib/rouge/lexers/python.rb +110 -65
  115. data/lib/rouge/lexers/qml.rb +2 -2
  116. data/lib/rouge/lexers/reasonml.rb +2 -2
  117. data/lib/rouge/lexers/rego.rb +53 -53
  118. data/lib/rouge/lexers/rescript.rb +2 -2
  119. data/lib/rouge/lexers/robot_framework.rb +12 -12
  120. data/lib/rouge/lexers/{coq.rb → rocq.rb} +15 -6
  121. data/lib/rouge/lexers/ruby.rb +33 -7
  122. data/lib/rouge/lexers/rust.rb +1 -0
  123. data/lib/rouge/lexers/sas.rb +164 -165
  124. data/lib/rouge/lexers/sass/common.rb +1 -1
  125. data/lib/rouge/lexers/sass.rb +2 -2
  126. data/lib/rouge/lexers/scss.rb +2 -2
  127. data/lib/rouge/lexers/sed.rb +1 -1
  128. data/lib/rouge/lexers/shell.rb +5 -5
  129. data/lib/rouge/lexers/slice.rb +2 -2
  130. data/lib/rouge/lexers/sparql.rb +1 -1
  131. data/lib/rouge/lexers/sqf/keywords.rb +5 -3
  132. data/lib/rouge/lexers/sqf.rb +3 -4
  133. data/lib/rouge/lexers/stan.rb +9 -15
  134. data/lib/rouge/lexers/svelte.rb +2 -2
  135. data/lib/rouge/lexers/swift.rb +2 -2
  136. data/lib/rouge/lexers/tcl.rb +1 -1
  137. data/lib/rouge/lexers/terraform.rb +2 -2
  138. data/lib/rouge/lexers/thrift.rb +120 -0
  139. data/lib/rouge/lexers/tsx.rb +3 -3
  140. data/lib/rouge/lexers/ttcn3.rb +1 -1
  141. data/lib/rouge/lexers/twig.rb +2 -2
  142. data/lib/rouge/lexers/typescript.rb +3 -3
  143. data/lib/rouge/lexers/varnish.rb +8 -8
  144. data/lib/rouge/lexers/veryl.rb +109 -0
  145. data/lib/rouge/lexers/viml/keywords.rb +5 -7
  146. data/lib/rouge/lexers/viml.rb +8 -10
  147. data/lib/rouge/lexers/vue.rb +2 -2
  148. data/lib/rouge/lexers/xquery.rb +2 -1
  149. data/lib/rouge/lexers/yaml.rb +13 -1
  150. data/lib/rouge/lexers/yang.rb +42 -74
  151. data/lib/rouge/lexers/zig.rb +10 -10
  152. data/lib/rouge/plugins/redcarpet.rb +3 -2
  153. data/lib/rouge/regex_lexer.rb +25 -14
  154. data/lib/rouge/themes/gruvbox.rb +3 -0
  155. data/lib/rouge/token.rb +1 -1
  156. data/lib/rouge/util.rb +1 -1
  157. data/lib/rouge/version.rb +1 -1
  158. data/lib/rouge.rb +70 -59
  159. data/lib/rubocop/cop/rouge/no_building_alternation_pattern_in_regexp.rb +71 -0
  160. data/lib/rubocop/cop/rouge/no_huge_collections.rb +37 -0
  161. data/rouge.gemspec +8 -5
  162. metadata +40 -9
  163. data/lib/rouge/lexers/isbl/builtins.rb +0 -17
  164. data/lib/rouge/lexers/matlab/builtins.rb +0 -11
  165. /data/lib/rouge/demos/{coq → rocq} +0 -0
@@ -1,10 +1,10 @@
1
1
  # -*- coding: utf-8 -*- #
2
2
  # frozen_string_literal: true
3
3
 
4
+ require_relative 'python'
5
+
4
6
  module Rouge
5
7
  module Lexers
6
- load_lexer 'python.rb'
7
-
8
8
  class Cython < Python
9
9
  title "Cython"
10
10
  desc "Cython and Pyrex source code (cython.org)"
@@ -25,13 +25,20 @@ module Rouge
25
25
  end
26
26
 
27
27
  def self.c_keywords
28
- @ckeywords ||= %w(
28
+ @c_keywords ||= Set.new %w(
29
29
  public readonly extern api inline enum union
30
30
  )
31
31
  end
32
32
 
33
+ def self.builtins
34
+ @builtins ||= super + %w(python_call)
35
+ end
36
+
33
37
  identifier = /[a-z_]\w*/i
34
- dotted_identifier = /[a-z_.][\w.]*/i
38
+
39
+ prepend :from_import do
40
+ rule %r/cimport\b/, Keyword::Namespace, :pop!
41
+ end
35
42
 
36
43
  prepend :root do
37
44
  rule %r/cp?def|ctypedef/ do
@@ -40,54 +47,16 @@ module Rouge
40
47
  push :c_start
41
48
  end
42
49
 
43
- rule %r/(from)((?:\\\s|\s)+)(#{dotted_identifier})((?:\\\s|\s)+)(cimport)/ do
44
- groups Keyword::Namespace,
45
- Text,
46
- Name::Namespace,
47
- Text,
48
- Keyword::Namespace
49
- end
50
-
51
- rule %r/(cimport)(\s+)(#{dotted_identifier})/ do
52
- groups Keyword::Namespace, Text, Name::Namespace
53
- end
50
+ rule %r/cimport\b/, Keyword::Namespace, :import
54
51
 
55
52
  rule %r/(struct)((?:\\\s|\s)+)/ do
56
53
  groups Keyword, Text
57
54
  push :classname
58
55
  end
59
56
 
60
- mixin :func_call_fix
61
-
62
57
  rule %r/[(,]/, Punctuation, :c_start
63
58
  end
64
59
 
65
- prepend :classname do
66
- rule %r/(?:\\\s|\s)+/, Text
67
- end
68
-
69
- prepend :funcname do
70
- rule %r/(?:\\\s|\s)+/, Text
71
- end
72
- # This is a fix for the way that function calls are lexed in the Python
73
- # lexer. This should be moved to the Python lexer once confirmed that it
74
- # does not cause any regressions.
75
- state :func_call_fix do
76
- rule %r/#{identifier}(?=\()/ do |m|
77
- if self.class.keywords.include? m[0]
78
- token Keyword
79
- elsif self.class.exceptions.include? m[0]
80
- token Name::Builtin
81
- elsif self.class.builtins.include? m[0]
82
- token Name::Builtin
83
- elsif self.class.builtins_pseudo.include? m[0]
84
- token Name::Builtin::Pseudo
85
- else
86
- token Name::Function
87
- end
88
- end
89
- end
90
-
91
60
  # The Cython lexer adds three states to those already in the Python lexer.
92
61
  # Calls to `cdef`, `cpdef` and `ctypedef` move the lexer into the :c_start
93
62
  # state. The primary purpose of this state is to highlight datatypes. Once
@@ -97,7 +66,7 @@ module Rouge
97
66
  # have moved out of a C block.
98
67
 
99
68
  state :c_start do
100
- rule %r/[^\S\n]+/, Text
69
+ mixin :inline_whitespace
101
70
 
102
71
  rule %r/cp?def|ctypedef/, Keyword
103
72
 
@@ -106,16 +75,16 @@ module Rouge
106
75
  # This rule matches identifiers that could be type declarations. The
107
76
  # lookahead matches (1) pointers, (2) arrays and (3) variable names.
108
77
  rule %r/#{identifier}(?=(?:\*+)|(?:[ \t]*\[)|(?:[ \t]+\w))/ do |m|
109
- if self.class.keywords.include? m[0]
78
+ if self.class.keywords.include?(m[0])
110
79
  token Keyword
111
80
  pop!
112
- elsif %w(def).include? m[0]
81
+ elsif m[0] == 'def'
113
82
  token Keyword
114
83
  goto :funcname
115
- elsif %w(struct class).include? m[0]
116
- token Keyword::Reserved
84
+ elsif %w(struct class).include?(m[0])
85
+ token Keyword
117
86
  goto :classname
118
- elsif self.class.c_keywords.include? m[0]
87
+ elsif self.class.c_keywords.include?(m[0])
119
88
  token Keyword::Reserved
120
89
  else
121
90
  token Keyword::Type
@@ -144,7 +113,14 @@ module Rouge
144
113
  end
145
114
  end
146
115
 
147
- rule(//) { @indentation = nil; reset_stack }
116
+ rule(//) do
117
+ @indentation = nil
118
+ # pop c_indent
119
+ pop!
120
+
121
+ # replace :c_definitions with :newline
122
+ goto :newline
123
+ end
148
124
  end
149
125
  end
150
126
  end
@@ -58,7 +58,7 @@ module Rouge
58
58
  schar = /(?:[^\\"\n\r]|\\["'ntr\\0])/
59
59
  uchar = /(?:\\u#{hex_digit}{4})/
60
60
 
61
- ## IMPORTANT: Rules are ordered, which allows later rules to be
61
+ ## IMPORTANT: Rules are ordered, which allows later rules to be
62
62
  ## simpler than they would otherwise be
63
63
  state :root do
64
64
  rule %r(/\*), Comment::Multiline, :comment
@@ -45,6 +45,8 @@ module Rouge
45
45
  rule %r(/\*.*?\*/)m, Comment::Multiline
46
46
  rule %r/"/, Str, :dqs
47
47
  rule %r/'/, Str, :sqs
48
+ rule %r/r""".*?"""/m, Str::Other
49
+ rule %r/r'''.*?'''/m, Str::Other
48
50
  rule %r/r"[^"]*"/, Str::Other
49
51
  rule %r/r'[^']*'/, Str::Other
50
52
  rule %r/##{id}*/i, Str::Symbol
@@ -124,7 +124,7 @@ module Rouge
124
124
  rule %r/#{id}(?=\s*[(])/, Name::Function
125
125
  rule id do |m|
126
126
  name = m[0].upcase
127
-
127
+
128
128
  if self.class.sql_keywords.include? name
129
129
  token Keyword
130
130
  else
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'set'
3
+ require_relative 'yaml'
4
+
4
5
  module Rouge
5
6
  module Lexers
6
- load_lexer 'yaml.rb'
7
-
8
7
  class Digdag < YAML
9
8
  title 'digdag'
10
9
  desc 'A simple, open source, multi-cloud workflow engine (https://www.digdag.io/)'
@@ -0,0 +1,109 @@
1
+ # -*- coding: utf-8 -*- #
2
+ # frozen_string_literal: true
3
+
4
+ module Rouge
5
+ module Lexers
6
+ class Dylan < RegexLexer
7
+ title 'Dylan'
8
+ desc 'Dylan Language (https://opendylan.org)'
9
+ tag 'dylan'
10
+ filenames '*.dylan'
11
+
12
+ # Definitions from the Dylan Reference Manual
13
+ # see:
14
+ # https://opendylan.org/books/drm/Modules
15
+ # https://opendylan.org/books/drm/Conditional_Execution
16
+ # https://opendylan.org/books/drm/Statement_Macros
17
+ reserved_words = Set.new %w(
18
+ begin block case class constant create define domain else
19
+ end exception for function generic handler if let library local
20
+ macro method module otherwise select unless until variable while
21
+ )
22
+
23
+ hash_word = Set.new %w(#t #f #next #rest #key #all-keys #include)
24
+ operators = Set.new %w(+ - * / ^ = == ~ ~= ~== < <= > >= & | :=)
25
+
26
+ state :root do
27
+ rule %r/^[\w.-]+:/, Comment::Preproc, :header
28
+ rule %r/\s+/, Text::Whitespace
29
+ rule(%r//) { goto :main }
30
+ end
31
+
32
+ # see https://opendylan.org/books/drm/Dylan_Interchange_Format
33
+ state :header do
34
+ rule(/.*?$/) { token Comment; goto :header_value }
35
+ end
36
+
37
+ state :header_value do
38
+ # line continuations are defined as any line that starts with whitespace
39
+ rule %r/^[ \t]+.*?$/, Comment
40
+ rule %r/\n+/, Comment
41
+ rule(//) { pop! }
42
+ end
43
+
44
+ state :main do
45
+ # Comments
46
+ rule %r(//.*?$), Comment::Single
47
+ rule %r(/\*.*?\*/)m, Comment::Multiline
48
+ rule %r/\s+/, Text::Whitespace
49
+
50
+ # Keywords
51
+ rule %r/\w+/ do |m|
52
+ if reserved_words.include?(m[0])
53
+ token Keyword
54
+ elsif hash_word.include?(m[0])
55
+ token Keyword::Constant
56
+ else
57
+ fallthrough!
58
+ end
59
+ end
60
+
61
+ rule %r/#(t|f|next|rest|key|all-keys|include)\b/, Keyword::Constant
62
+
63
+ # Numbers
64
+ rule %r([+-]?\d+/\d+), Literal::Number::Other
65
+ rule %r/[+-]?\d*[.]\d+(?:e[+-]?\d+)?/i, Literal::Number::Float
66
+ rule %r/[+-]?\d+[.]\d*(?:e[+-]?\d+)?/i, Literal::Number::Float
67
+ rule %r/[+-]\d+(?:e[+-]?\d+)?/i, Literal::Number::Float
68
+ rule %r/#b[01]+/, Literal::Number::Bin
69
+ rule %r/#o[0-7]+/, Literal::Number::Oct
70
+ rule %r/[+-]?[0-9]+/, Literal::Number::Integer
71
+ rule %r/#x[0-9a-f]+/i, Literal::Number::Hex
72
+
73
+ # Operators and punctuation
74
+ rule %r/::|=>|#[(\[#]|[.][.][.]|[(),.;\[\]{}=?]/, Punctuation
75
+
76
+ word_re = %r([\w!&*<>|^\$%@][\w!&*<>|^\$%@=/?~+-]*|[+-~])
77
+
78
+ rule %r/\\#{word_re}/, Str::Symbol
79
+
80
+ rule word_re do |m|
81
+ word = m[0]
82
+ if operators.include?(word)
83
+ token Operator
84
+ elsif word.start_with?('<') && word.end_with?('>')
85
+ token Name::Class
86
+ elsif word.start_with?('*') && word.end_with?('*')
87
+ token Name::Variable::Instance
88
+ elsif word.start_with?('$')
89
+ token Name::Constant
90
+ else
91
+ token Name
92
+ end
93
+ end
94
+
95
+ rule %r/:/, Operator # For 'constrained names'
96
+ # Strings, characters and whitespace
97
+ rule %r/"/, Str::Double, :dq
98
+ rule %r/'([^\\']|(\\[\\'abefnrt0])|(\\[0-9a-f]+))'/, Str::Char
99
+ end
100
+
101
+ state :dq do
102
+ rule %r/\\[\\'"abefnrt0]/, Str::Escape
103
+ rule %r/\\<\h+>/, Str::Escape
104
+ rule %r/[^\\"]+/, Str::Double
105
+ rule %r/"/, Str::Double, :pop!
106
+ end
107
+ end
108
+ end
109
+ end
@@ -42,9 +42,9 @@ module Rouge
42
42
  row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt
43
43
  stepped stored sum table tan tanh thisnode topn tounicode toxml
44
44
  transfer transform trim truncate typeof ungroup unicodeorder variance
45
- which workunit xmldecode xmlencode xmltext xmlunicode apply assert
46
- build buildindex evaluate fail keydiff keypatch loadxml nothor notify
47
- output parallel sequential soapcall wait
45
+ which workunit xmldecode xmlencode xmltext xmlunicode assert
46
+ build buildindex fail keydiff keypatch loadxml nothor notify
47
+ output parallel sequential wait
48
48
  )
49
49
  end
50
50
 
@@ -99,43 +99,48 @@ module Rouge
99
99
 
100
100
  state :sigil_strings do
101
101
  # ~-sigiled strings
102
- # ~(abc), ~[abc], ~<abc>, ~|abc|, ~r/abc/, etc
102
+ # ~r(abc), ~r[abc], ~r<abc>, ~r|abc|, ~r/abc/, etc
103
103
  # Cribbed and adjusted from Ruby lexer
104
104
  delimiter_map = { '{' => '}', '[' => ']', '(' => ')', '<' => '>' }
105
- # Match a-z for custom sigils too
106
- sigil_opens = Regexp.union(delimiter_map.keys + %w(| / ' "))
107
- rule %r/~([A-Za-z])?(#{sigil_opens})/ do |m|
105
+ sigil_opens = Regexp.union(delimiter_map.keys + [%r/"{3}/] + %w(| / ' "))
106
+ rule %r/~([a-z]|[A-Z][A-Z0-9]*)(#{sigil_opens})/ do |m|
108
107
  open = Regexp.escape(m[2])
109
108
  close = Regexp.escape(delimiter_map[m[2]] || m[2])
110
- interp = /[SRCW]/ === m[1]
109
+ interp = /^[srcw]$/ === m[1]
111
110
  toktype = Str::Other
112
111
 
113
112
  puts " open: #{open.inspect}" if @debug
114
113
  puts " close: #{close.inspect}" if @debug
115
114
 
116
115
  # regexes
117
- if 'Rr'.include? m[1]
116
+ if m[1] == 'r' || m[1] == 'R'
118
117
  toktype = Str::Regex
119
118
  push :regex_flags
120
119
  end
121
120
 
122
- if 'Ww'.include? m[1]
121
+ if m[1] == 'w' || m[1] == 'W'
123
122
  push :list_flags
124
123
  end
125
124
 
125
+ if open == '"""'
126
+ toktype = Str::Doc
127
+ end
128
+
126
129
  token toktype
127
130
 
128
131
  push do
129
132
  rule %r/#{close}/, toktype, :pop!
130
133
 
131
- if interp
134
+ if toktype == Str::Doc
135
+ rule %r/(?:.|\n)*?"""/, toktype, :pop!
136
+ elsif interp
132
137
  mixin :interpoling
133
138
  rule %r/#/, toktype
134
139
  else
135
140
  rule %r/[\\#]/, toktype
136
141
  end
137
142
 
138
- uniq_chars = [open, close].uniq.join
143
+ uniq_chars = [open, close].uniq.join.squeeze
139
144
  rule %r/[^##{uniq_chars}\\]+/m, toktype
140
145
  end
141
146
  end
@@ -33,7 +33,7 @@ module Rouge
33
33
  end
34
34
 
35
35
  def stream_tokens(str, &b)
36
- stream = StringScanner.new(str)
36
+ stream = StringScanner.new(str, fixed_anchor: true)
37
37
 
38
38
  loop do
39
39
  if stream.scan(to_start_regex)
@@ -25,7 +25,7 @@ module Rouge
25
25
  do unless* if* loop bi-curry* drop when* assert= retainstack
26
26
  assert? -rot execute 2bi@ 2tri@ boa with either? 3drop bi
27
27
  curry? datastack until 3dip over 3curry tri-curry* tri-curry@
28
- swap and 2nip throw bi-curry (clone) hashcode* compose 2dip if
28
+ swap and 2nip throw bi-curry (clone) hashcode* compose 2dip
29
29
  3tri unless compose? tuple keep 2curry equal? assert tri 2drop
30
30
  most <wrapper> boolean? identity-hashcode identity-tuple?
31
31
  null new dip bi-curry@ rot xor identity-tuple boolean
@@ -1,10 +1,10 @@
1
1
  # -*- coding: utf-8 -*- #
2
2
  # frozen_string_literal: true
3
3
 
4
+ require_relative 'cpp'
5
+
4
6
  module Rouge
5
7
  module Lexers
6
- load_lexer 'cpp.rb'
7
-
8
8
  class FreeFEM < Cpp
9
9
  title "FreeFEM"
10
10
  desc "The FreeFEM programming language (freefem.org)"
@@ -245,7 +245,7 @@ module Rouge
245
245
  # `(type /* optional whitespace */ var_name /* optional whitespace */)`
246
246
  # Note: Only the token for type is produced here.
247
247
  rule %r{
248
- (^#{id})
248
+ (#{id})
249
249
  (#{ws}+)
250
250
  (#{id})
251
251
  }mx do |m|
@@ -88,7 +88,7 @@ module Rouge
88
88
  rule %r/[A-Z][^\s.,(){}]*/, Keyword::Type
89
89
 
90
90
  # packages, e.g. 'ghc-prim-0.5.3:'
91
- rule %r/(^[a-z].*?\d+\.\d+\.\d+)(:)(?=\S)/ do |m|
91
+ rule %r/([a-z].*?\d+\.\d+\.\d+)(:)(?=\S)/ do |m|
92
92
  token Name::Namespace, m[1]
93
93
  token Punctuation, m[2]
94
94
  end
@@ -7,12 +7,16 @@
7
7
 
8
8
  module Rouge
9
9
  module Lexers
10
- def Gherkin.keywords
11
- @keywords ||= {}.tap do |k|
12
- k[:step] = Set.new ["'a ", "'ach ", "'ej ", "* ", "7 ", "A ", "A taktiež ", "A také ", "A tiež ", "A zároveň ", "AN ", "Aber ", "Ac ", "Ach", "Adott ", "Agus", "Ak ", "Akkor ", "Alavez ", "Ale ", "Aleshores ", "Ali ", "All git out ", "Allora ", "Alors ", "Als ", "Ama ", "Amennyiben ", "Amikor ", "Amma ", "Ampak ", "An ", "Ananging ", "Ancaq ", "And ", "Angenommen ", "Anrhegedig a ", "Ansin", "Antonces ", "Apabila ", "Atesa ", "Atunci ", "Atès ", "Avast! ", "Aye ", "BUT ", "Bagi ", "Banjur ", "Belgilangan ", "Bet ", "Bila ", "Biết ", "Blimey! ", "Buh ", "But ", "But at the end of the day I reckon ", "Bæþsealf ", "Bæþsealfa ", "Bæþsealfe ", "Cal ", "Cand ", "Cando ", "Ce ", "Cho ", "Ciricæw ", "Ciricæwa ", "Ciricæwe ", "Come hell or high water ", "Cuan ", "Cuando ", "Cuir i gcás go", "Cuir i gcás gur", "Cuir i gcás nach", "Cuir i gcás nár", "Când ", "DEN ", "DaH ghu' bejlu' ", "Dada ", "Dadas ", "Dadena ", "Dadeno ", "Dado ", "Dados ", "Daes ", "Dan ", "Dann ", "Dano ", "Daos ", "Dar ", "Dat fiind ", "Data ", "Date ", "Date fiind ", "Dati ", "Dati fiind ", "Dato ", "Dată fiind", "Dau ", "Daus ", "Daţi fiind ", "Dați fiind ", "De ", "Den youse gotta ", "Dengan ", "Diasumsikan ", "Diberi ", "Diketahui ", "Diyelim ki ", "Do ", "Donada ", "Donat ", "Donc ", "Donitaĵo ", "Dun ", "Duota ", "Dáu ", "E ", "Eeldades ", "Ef ", "En ", "Entao ", "Entonces ", "Então ", "Entón ", "Entós ", "Epi ", "Et ", "Et qu'", "Et que ", "Etant donné ", "Etant donné qu'", "Etant donné que ", "Etant donnée ", "Etant données ", "Etant donnés ", "Eğer ki ", "Fakat ", "Fixin' to ", "Gangway! ", "Gdy ", "Gegeben sei ", "Gegeben seien ", "Gegeven ", "Gegewe ", "Gitt ", "Given ", "Givet ", "Givun ", "Ha ", "Həm ", "I ", "I CAN HAZ ", "In ", "Ir ", "It's just unbelievable ", "Ja ", "Jeśli ", "Jeżeli ", "Jika ", "Kad ", "Kada ", "Kadar ", "Kai ", "Kaj ", "Když ", "Kemudian ", "Ketika ", "Keď ", "Khi ", "Kiedy ", "Ko ", "Koga ", "Komence ", "Kui ", "Kuid ", "Kun ", "Lan ", "Le ", "Le sa a ", "Let go and haul ", "Logo ", "Lorsqu'", "Lorsque ", "Lè ", "Lè sa a ", "Ma ", "Maar ", "Mais ", "Mais qu'", "Mais que ", "Majd ", "Mając ", "Maka ", "Manawa ", "Mas ", "Men ", "Menawa ", "Mutta ", "Nalika ", "Nalikaning ", "Nanging ", "Nato ", "Nhưng ", "Niin ", "Njuk ", "No ", "Nuair a", "Nuair ba", "Nuair nach", "Nuair nár", "När ", "Når ", "Nə vaxt ki ", "O halda ", "O zaman ", "Och ", "Og ", "Oletetaan ", "Ond ", "Onda ", "Oraz ", "Pak ", "Pero ", "Peru ", "Però ", "Podano ", "Pokiaľ ", "Pokud ", "Potem ", "Potom ", "Privzeto ", "Pryd ", "Quan ", "Quand ", "Quando ", "Quick out of the chute ", "Sachant ", "Sachant qu'", "Sachant que ", "Se ", "Sed ", "Si ", "Siis ", "Sipoze ", "Sipoze Ke ", "Sipoze ke ", "Soit ", "Stel ", "Så ", "Tad ", "Tada ", "Tak ", "Takrat ", "Tapi ", "Ter ", "Tetapi ", "Tha ", "Tha the ", "Then ", "There’s no tree but bears some fruit ", "Thurh ", "Thì ", "Toda ", "Togash ", "Too right ", "Tutaq ki ", "Ukoliko ", "Un ", "Und ", "Ve ", "Vendar ", "Verilir ", "Và ", "Və ", "WEN ", "Wanneer ", "Well now hold on, I'll you what ", "Wenn ", "When ", "Wtedy ", "Wun ", "Y ", "Y'know ", "Ya ", "Yeah nah ", "Yna ", "Youse know like when ", "Youse know when youse got ", "Za date ", "Za dati ", "Za dato ", "Za predpokladu ", "Za předpokladu ", "Zadan ", "Zadani ", "Zadano ", "Zakładając ", "Zakładając, że ", "Zaradi ", "Zatim ", "a ", "an ", "awer ", "dann ", "ghu' noblu' ", "latlh ", "mä ", "qaSDI' ", "ugeholl ", "vaj ", "wann ", "És ", "Étant donné ", "Étant donné qu'", "Étant donné que ", "Étant donnée ", "Étant données ", "Étant donnés ", "Ða ", "Ða ðe ", "Ðurh ", "Þa ", "Þa þe ", "Þegar ", "Þurh ", "Þá ", "Če ", "Şi ", "Əgər ", "Și ", "Όταν ", "Αλλά ", "Δεδομένου ", "Και ", "Τότε ", "І ", "А ", "А також ", "Агар ", "Але ", "Али ", "Аммо ", "Анх ", "Бирок ", "Ва ", "Вә ", "Гэхдээ ", "Дадена ", "Дадено ", "Дано ", "Допустим ", "Если ", "За дате ", "За дати ", "За дато ", "Затем ", "И ", "Иначе ", "К тому же ", "Кад ", "Када ", "Кога ", "Когато ", "Когда ", "Коли ", "Лекин ", "Ләкин ", "Мөн ", "Нехай ", "Но ", "Нәтиҗәдә ", "Онда ", "Припустимо ", "Припустимо, що ", "Пусть ", "Та ", "Также ", "То ", "Тогаш ", "Тогда ", "Тоді ", "Тэгэхэд ", "Тэгээд ", "Унда ", "Харин ", "Хэрэв ", "Якщо ", "Үүний дараа ", "Һәм ", "Әгәр ", "Әйтик ", "Әмма ", "Өгөгдсөн нь ", "Ապա ", "Բայց ", "Դիցուք ", "Եթե ", "Եվ ", "Երբ ", "אבל ", "אז ", "אזי ", "בהינתן ", "וגם ", "כאשר ", "آنگاه ", "اذاً ", "اما ", "اور ", "اگر ", "با فرض ", "بالفرض ", "بفرض ", "تب ", "ثم ", "جب ", "عندما ", "فرض کیا ", "لكن ", "لیکن ", "متى ", "هنگامی ", "و ", "پھر ", "अगर ", "अनि ", "अनी ", "आणि ", "और ", "कदा ", "किन्तु ", "चूंकि ", "जब ", "जर", "जेव्हा ", "तथा ", "तदा ", "तब ", "तर ", "तसेच ", "तेव्हा ", "त्यसपछि ", "दिइएको ", "दिएको ", "दिलेल्या प्रमाणे ", "पण ", "पर ", "परंतु ", "परन्तु ", "मग ", "यदि ", "र ", "ਅਤੇ ", "ਜਦੋਂ ", "ਜਿਵੇਂ ਕਿ ", "ਜੇਕਰ ", "ਤਦ ", "ਪਰ ", "અને ", "આપેલ છે ", "ક્યારે ", "પછી ", "પણ ", "அப்பொழுது ", "ஆனால் ", "எப்போது ", "கொடுக்கப்பட்ட ", "மற்றும் ", "மேலும் ", "అప్పుడు ", "ఈ పరిస్థితిలో ", "కాని ", "చెప్పబడినది ", "మరియు ", "ಆದರೆ ", "ನಂತರ ", "ನೀಡಿದ ", "ಮತ್ತು ", "ಸ್ಥಿತಿಯನ್ನು ", "กำหนดให้ ", "ดังนั้น ", "เมื่อ ", "แต่ ", "และ ", "ასევე ", "და ", "ვთქვათ ", "თუ ", "თუმცა ", "მაგრამ ", "მაშინ ", "მოცემული ", "მოცემულია ", "როგორც კი ", "როდესაც ", "როცა ", "መቼ ", "እና ", "ከዚያ ", "የተሰጠ ", "ግን ", "かつ", "しかし", "ただし", "ならば", "もし", "且つ", "並且", "但し", "但是", "假如", "假定", "假設", "假设", "前提", "同时", "同時", "并且", "当", "然し", "當", "而且", "那么", "那麼", "그러면", "그리고", "단", "만약", "만일", "먼저", "조건", "하지만", "🎬", "😂", "😐", "😔", "🙏"]
13
- k[:element] = Set.new ["Abstract Scenario", "Abstrakt Scenario", "Achtergrond", "Aer", "Agtergrond", "All hat and no cattle", "Antecedentes", "Antecedents", "Atburðarás", "Aturan", "Awww, look mate", "B4", "Background", "Baggrund", "Bakgrund", "Bakgrunn", "Bakgrunnur", "Beispiel", "Beispill", "Busy as a hound in flea season", "Bối cảnh", "Caso", "Casu", "Cefndir", "Cenario", "Cenario de Fundo", "Cenário", "Cenário de Fundo", "Contesto", "Context", "Contexte", "Contexto", "Cás", "Cás Achomair", "Cúlra", "Dasar", "Delineacao do Cenario", "Delineação do Cenário", "Dis is what went down", "Dyagram Senaryo", "Dyagram senaryo", "Eixemplo", "Ejemplo", "Eksempel", "Ekzemplo", "Enghraifft", "Esbozo do escenario", "Esbozu del casu", "Escenari", "Escenario", "Esempio", "Esquema de l'escenari", "Esquema del caso", "Esquema del escenario", "Esquema do Cenario", "Esquema do Cenário", "Example", "Exemple", "Exemplo", "Exemplu", "First off", "Fono", "Forgatókönyv", "Forgatókönyv vázlat", "Fundo", "Garis Panduan Senario", "Garis-Besar Skenario", "Geçmiş", "Grundlage", "Hannergrond", "Heave to", "Hintergrund", "Háttér", "Istorik", "Juhtum", "Kazo", "Kazo-skizo", "Keadaan", "Kerangka Keadaan", "Kerangka Senario", "Kerangka Situasi", "Keçmiş", "Khung kịch bản", "Khung tình huống", "Koncept", "Konsep skenario", "Kontekst", "Kontekstas", "Konteksts", "Kontext", "Konturo de la scenaro", "Kontèks", "Kural", "Kịch bản", "Latar Belakang", "Lemme tell y'all a story", "Lýsing Atburðarásar", "Lýsing Dæma", "MISHUN", "MISHUN SRSLY", "Na primer", "Náčrt Scenára", "Náčrt Scenáru", "Náčrt Scénáře", "Nümunə", "Oris scenarija", "Osnova", "Osnova Scenára", "Osnova scénáře", "Osnutek", "Ozadje", "Pavyzdys", "Piemērs", "Plan Senaryo", "Plan du Scénario", "Plan du scénario", "Plan senaryo", "Plang vum Szenario", "Pozadie", "Pozadina", "Pozadí", "Pravidlo", "Pravilo", "Pregled na scenarija", "Primer", "Primjer", "Przykład", "Príklad", "Példa", "Příklad", "Raamjuhtum", "Raamstsenaarium", "Reckon it's like", "Reegel", "Regel", "Regla", "Regla de negocio", "Regola", "Regra", "Reguła", "Rerefons", "Rule", "Rule ", "Règle", "Sampla", "Scenarie", "Scenarij", "Scenarijaus šablonas", "Scenariju", "Scenariju-obris", "Scenarijus", "Scenario", "Scenario Amlinellol", "Scenario Outline", "Scenario Template", "Scenario-outline", "Scenariomal", "Scenariomall", "Scenariu", "Scenariusz", "Scenaro", "Scenár", "Scenārijs", "Scenārijs pēc parauga", "Schema dello scenario", "Scénario", "Scénář", "Senario", "Senaryo", "Senaryo Deskripsyon", "Senaryo deskripsyon", "Senaryo taslağı", "Serious as a snake bite", "Shiver me timbers", "Situasi", "Situasie", "Situasie Uiteensetting", "Situācija", "Skenario", "Skenario konsep", "Skica", "Skizo", "Sodrzhina", "Ssenari", "Ssenarinin strukturu", "Structura scenariu", "Structură scenariu", "Struktura scenarija", "Stsenaarium", "Swa", "Swa hwaer swa", "Swa hwær swa", "Szablon scenariusza", "Szabály", "Szenarien", "Szenario", "Szenariogrundriss", "Tapaus", "Tapausaihio", "Taust", "Tausta", "The thing of it is", "Tình huống", "Voorbeeld", "Voraussetzungen", "Vorbedingungen", "Wharrimean is", "Yo-ho-ho", "Zasada", "Założenia", "lut", "lut chovnatlh", "mo'", "Ær", "Örnek", "Παράδειγμα", "Περίγραμμα Σεναρίου", "Περιγραφή Σεναρίου", "Σενάριο", "Υπόβαθρο", "Агуулга", "Кереш", "Контекст", "Концепт", "На пример", "Основа", "Передумова", "Позадина", "Правило", "Преглед на сценарија", "Предистория", "Предыстория", "Приклад", "Пример", "Рамка на сценарий", "Скица", "Содржина", "Структура сценария", "Структура сценарија", "Структура сценарію", "Сценар", "Сценарий", "Сценарий структураси", "Сценарийның төзелеше", "Сценарио", "Сценарын төлөвлөгөө", "Сценарій", "Тарих", "Шаблон сценария", "Կոնտեքստ", "Սցենար", "Սցենարի կառուցվացքը", "Օրինակ", "דוגמא", "כלל", "רקע", "תבנית תרחיש", "תרחיש", "الخلفية", "الگوی سناریو", "زمینه", "سناریو", "سيناريو", "سيناريو مخطط", "مثال", "منظر نامے کا خاکہ", "منظرنامہ", "پس منظر", "नियम", "परिदृश्य", "परिदृश्य रूपरेखा", "पार्श्वभूमी", "पृष्ठभूमि", "पृष्ठभूमी", "ਉਦਾਹਰਨ", "ਪਟਕਥਾ", "ਪਟਕਥਾ ਢਾਂਚਾ", "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", "ਪਿਛੋਕੜ", "ઉદાહરણ", "પરિદ્દશ્ય ઢાંચો", "પરિદ્દશ્ય રૂપરેખા", "બેકગ્રાઉન્ડ", "સ્થિતિ", "உதாரணமாக", "காட்சி", "காட்சி சுருக்கம்", "காட்சி வார்ப்புரு", "பின்னணி", "ఉదాహరణ", "కథనం", "నేపథ్యం", "సన్నివేశం", "ಉದಾಹರಣೆ", "ಕಥಾಸಾರಾಂಶ", "ವಿವರಣೆ", "ಹಿನ್ನೆಲೆ", "สรุปเหตุการณ์", "เหตุการณ์", "แนวคิด", "โครงสร้างของเหตุการณ์", "კონტექსტი", "მაგ", "მაგალითად", "მაგალითი", "ნიმუში", "სცენარი", "სცენარის ნიმუში", "სცენარის შაბლონი", "შაბლონი", "წესი", "ሁናቴ", "ሁናቴ አብነት", "ሁናቴ ዝርዝር", "ህግ", "መነሻ", "መነሻ ሀሳብ", "ምሳሌ", "ቅድመ ሁኔታ", "シナリオ", "シナリオアウトライン", "シナリオテンプレ", "シナリオテンプレート", "テンプレ", "ルール", "剧本", "剧本大纲", "劇本", "劇本大綱", "场景", "场景大纲", "場景", "場景大綱", "背景", "规则", "배경", "시나리오", "시나리오 개요", "💤", "📕", "📖", "🥒"]
14
- k[:examples] = Set.new ["Atburðarásir", "Beispiele", "Beispiller", "Cenarios", "Cenários", "Conto", "Contoh", "Contone", "Dead men tell no tales", "Dæmi", "Dữ liệu", "EXAMPLZ", "Egzanp", "Eixemplos", "Ejemplos", "Eksempler", "Ekzemploj", "Enghreifftiau", "Esempi", "Examples", "Exempel", "Exemple", "Exemples", "Exemplos", "Juhtumid", "Misal", "Now that's a story longer than a cattle drive in July", "Nümunələr", "Paraugs", "Pavyzdžiai", "Piemēri", "Primeri", "Primjeri", "Przykłady", "Príklady", "Példák", "Příklady", "Samplaí", "Scenaria", "Scenarijai", "Scenariji", "Scenarios", "Se the", "Se ðe", "Se þe", "Tapaukset", "Variantai", "Voorbeelde", "Voorbeelden", "You'll wanna", "ghantoH", "lutmey", "Örnekler", "Παραδείγματα", "Σενάρια", "Мисаллар", "Мисоллар", "Приклади", "Примери", "Примеры", "Сценарија", "Сценарији", "Тухайлбал", "Үрнәкләр", "Օրինակներ", "דוגמאות", "امثلة", "مثالیں", "نمونه ها", "उदाहरण", "उदाहरणहरु", "ਉਦਾਹਰਨਾਂ", "ઉદાહરણો", "எடுத்துக்காட்டுகள்", "காட்சிகள்", "நிலைமைகளில்", "ఉదాహరణలు", "ಉದಾಹರಣೆಗಳು", "ชุดของตัวอย่าง", "ชุดของเหตุการณ์", "მაგალითები", "ሁናቴዎች", "ምሳሌዎች", "サンプル", "例", "例子", "예", "📓"]
15
- k[:feature] = Set.new ["Ability", "Abilità", "Ahoy matey!", "All gussied up", "Arwedd", "Aspekt", "Besigheid Behoefte", "Biznis potreba", "Business Need", "Caracteristica", "Característica", "Carauterística", "Egenskab", "Egenskap", "Eiginleiki", "Esigenza di Business", "Feature", "Fitur", "Fonctionnalité", "Fonksyonalite", "Funcionalidade", "Funcionalitat", "Functionalitate", "Functionaliteit", "Funcţionalitate", "Funcționalitate", "Fungsi", "Funkcia", "Funkcija", "Funkcionalitāte", "Funkcionalnost", "Funkcja", "Funksie", "Funktion", "Funktionalität", "Funktionalitéit", "Funzionalità", "Fīča", "Gné", "Hwaet", "Hwæt", "Jellemző", "Karakteristik", "Karakteristika", "Lastnost", "Mak", "Mogucnost", "Mogućnost", "Mozhnost", "Moznosti", "Možnosti", "Necesidad del negocio", "OH HAI", "Omadus", "Ominaisuus", "Osobina", "Potrzeba biznesowa", "Požadavek", "Požiadavka", "Pretty much", "Qap", "Qu'meH 'ut", "Requisito", "Savybė", "This ain’t my first rodeo", "Trajto", "Tính năng", "Vermoë", "Vlastnosť", "Właściwość", "Značilnost", "laH", "perbogh", "poQbogh malja'", "Özellik", "Özəllik", "Δυνατότητα", "Λειτουργία", "Бизнис потреба", "Могућност", "Можност", "Мөмкинлек", "Особина", "Свойство", "Фича", "Функц", "Функционал", "Функционалност", "Функциональность", "Функция", "Функціонал", "Үзенчәлеклелек", "Հատկություն", "Ֆունկցիոնալություն", "תכונה", "خاصية", "خصوصیت", "صلاحیت", "وِیژگی", "کاروبار کی ضرورت", "रूप लेख", "विशेषता", "वैशिष्ट्य", "सुविधा", "ਖਾਸੀਅਤ", "ਨਕਸ਼ ਨੁਹਾਰ", "ਮੁਹਾਂਦਰਾ", "ક્ષમતા", "લક્ષણ", "વ્યાપાર જરૂર", "அம்சம்", "திறன்", "வணிக தேவை", "గుణము", "ಹೆಚ್ಚಳ", "ความต้องการทางธุรกิจ", "ความสามารถ", "โครงหลัก", "თვისება", "მოთხოვნა", "ስራ", "የሚፈለገው ድርጊት", "የተፈለገው ስራ", "フィーチャ", "功能", "機能", "기능", "📚"]
10
+ class Gherkin
11
+ # [jneen] this giant regex is staying, because Gherkin step
12
+ # keywords are so arbitrary that there is not a good simple
13
+ # pattern to match all of them and check post-hoc.
14
+ STEP_REGEX = %r('a\b|'ach\b|'ej\b|\*|7\b|A\b|A\ taktiež\b|A\ také\b|A\ tiež\b|A\ zároveň\b|AN\b|Aber\b|Ac\b|Ach\b|Adott\b|Agus\b|Ak\b|Akkor\b|Alavez\b|Ale\b|Aleshores\b|Ali\b|All\ git\ out\b|Allora\b|Alors\b|Als\b|Ama\b|Amennyiben\b|Amikor\b|Amma\b|Ampak\b|An\b|Ananging\b|Ancaq\b|And\b|Angenommen\b|Anrhegedig\ a\b|Ansin\b|Antonces\b|Apabila\b|Atesa\b|Atunci\b|Atès\b|Avast!|Aye\b|BUT\b|Bagi\b|Banjur\b|Belgilangan\b|Bet\b|Bila\b|Biết\b|Blimey!|Buh\b|But\b|But\ at\ the\ end\ of\ the\ day\ I\ reckon\b|Bæþsealf\b|Bæþsealfa\b|Bæþsealfe\b|Cal\b|Cand\b|Cando\b|Ce\b|Cho\b|Ciricæw\b|Ciricæwa\b|Ciricæwe\b|Come\ hell\ or\ high\ water\b|Cuan\b|Cuando\b|Cuir\ i\ gcás\ go\b|Cuir\ i\ gcás\ gur\b|Cuir\ i\ gcás\ nach\b|Cuir\ i\ gcás\ nár\b|Când\b|DEN\b|DaH\ ghu'\ bejlu'|Dada\b|Dadas\b|Dadena\b|Dadeno\b|Dado\b|Dados\b|Daes\b|Dan\b|Dann\b|Dano\b|Daos\b|Dar\b|Dat\ fiind\b|Data\b|Date\b|Date\ fiind\b|Dati\b|Dati\ fiind\b|Dato\b|Dată\ fiind\b|Dau\b|Daus\b|Daţi\ fiind\b|Dați\ fiind\b|De\b|Den\ youse\ gotta\b|Dengan\b|Diasumsikan\b|Diberi\b|Diketahui\b|Diyelim\ ki\b|Do\b|Donada\b|Donat\b|Donc\b|Donitaĵo\b|Dun\b|Duota\b|Dáu\b|E\b|Ed\b|Eeldades\b|Ef\b|En\b|Entao\b|Entonces\b|Então\b|Entón\b|Entós\b|Epi\b|Et\b|Et\ qu'|Et\ que\b|Etant\ donné\b|Etant\ donné\ qu'|Etant\ donné\ que\b|Etant\ donnée\b|Etant\ données\b|Etant\ donnés\b|Eğer\ ki\b|Fakat\b|Fixin'\ to\b|Gangway!|Gdy\b|Gegeben\ sei\b|Gegeben\ seien\b|Gegeven\b|Gegewe\b|Gitt\b|Given\b|Givet\b|Givun\b|Ha\b|Həm\b|I\b|I\ CAN\ HAZ\b|In\b|Ir\b|It's\ just\ unbelievable\b|Ja\b|Jeśli\b|Jeżeli\b|Jika\b|Kad\b|Kada\b|Kadar\b|Kai\b|Kaj\b|Když\b|Kemudian\b|Ketika\b|Keď\b|Khi\b|Kiedy\b|Ko\b|Koga\b|Komence\b|Kui\b|Kuid\b|Kun\b|Lan\b|Le\b|Le\ sa\ a\b|Let\ go\ and\ haul\b|Logo\b|Lorsqu'|Lorsque\b|Lè\b|Lè\ sa\ a\b|Ma\b|Maar\b|Mais\b|Mais\ qu'|Mais\ que\b|Majd\b|Mając\b|Maka\b|Manawa\b|Mas\b|Men\b|Menawa\b|Mutta\b|Nalika\b|Nalikaning\b|Nanging\b|Nato\b|Nhưng\b|Niin\b|Njuk\b|No\b|Nuair\ a\b|Nuair\ ba\b|Nuair\ nach\b|Nuair\ nár\b|När\b|Når\b|Nə\ vaxt\ ki\b|O\ halda\b|O\ zaman\b|Och\b|Og\b|Oletetaan\b|Ond\b|Onda\b|Oraz\b|Pak\b|Pero\b|Peru\b|Però\b|Podano\b|Pokiaľ\b|Pokud\b|Potem\b|Potom\b|Privzeto\b|Pryd\b|Quan\b|Quand\b|Quando\b|Quick\ out\ of\ the\ chute\b|Sachant\b|Sachant\ qu'|Sachant\ que\b|Se\b|Sed\b|Si\b|Siis\b|Sipoze\b|Sipoze\ Ke\b|Sipoze\ ke\b|Soit\b|Stel\b|Så\b|Tad\b|Tada\b|Tak\b|Takrat\b|Tapi\b|Ter\b|Tetapi\b|Tha\b|Tha\ the\b|Then\b|There’s\ no\ tree\ but\ bears\ some\ fruit\b|Thurh\b|Thì\b|Toda\b|Togash\b|Too\ right\b|Tutaq\ ki\b|Ukoliko\b|Un\b|Und\b|Ve\b|Vendar\b|Verilir\b|Và\b|Və\b|WEN\b|Wanneer\b|Well\ now\ hold\ on,\ I'll\ you\ what\b|Wenn\b|When\b|Wtedy\b|Wun\b|Y\b|Y'know\b|Ya\b|Yeah\ nah\b|Yna\b|Youse\ know\ like\ when\b|Youse\ know\ when\ youse\ got\b|Za\ date\b|Za\ dati\b|Za\ dato\b|Za\ predpokladu\b|Za\ předpokladu\b|Zadan\b|Zadani\b|Zadano\b|Zakładając\b|Zakładając,\ że\b|Zaradi\b|Zatim\b|a\b|an\b|awer\b|dann\b|ghu'\ noblu'|latlh\b|mä\b|qaSDI'|ugeholl\b|vaj\b|wann\b|És\b|Étant\ donné\b|Étant\ donné\ qu'|Étant\ donné\ que\b|Étant\ donnée\b|Étant\ données\b|Étant\ donnés\b|Ða\b|Ða\ ðe\b|Ðurh\b|Þa\b|Þa\ þe\b|Þegar\b|Þurh\b|Þá\b|Če\b|Şi\b|Əgər\b|Și\b|Όταν\b|Αλλά\b|Δεδομένου\b|Και\b|Τότε\b|І\b|Інакш\b|А\b|А\ також\b|Агар\b|Але\b|Али\b|Аммо\b|Анх\b|Бирок\b|Ва\b|Вә\b|Гэхдээ\b|Дадена\b|Дадено\b|Дадзена\b|Дано\b|Допустим\b|Ды\b|Если\b|За\ дате\b|За\ дати\b|За\ дато\b|Затем\b|И\b|Иначе\b|К\ тому\ же\b|Кад\b|Када\b|Калі\b|Кога\b|Когато\b|Когда\b|Коли\b|Лекин\b|Ләкин\b|Мөн\b|Нехай\b|Но\b|Няхай\b|Нәтиҗәдә\b|Онда\b|Припустимо\b|Припустимо,\ що\b|Пусть\b|Та\b|Тады\b|Также\b|Таксама\b|То\b|Тогаш\b|Тогда\b|Тоді\b|Тэгэхэд\b|Тэгээд\b|Унда\b|Харин\b|Хэрэв\b|Якщо\b|Үүний\ дараа\b|Һәм\b|Әгәр\b|Әйтик\b|Әмма\b|Өгөгдсөн\ нь\b|Ապա\b|Բայց\b|Դիցուք\b|Եթե\b|Եվ\b|Երբ\b|אבל\b|אז\b|אזי\b|בהינתן\b|וגם\b|כאשר\b|آنگاه\b|اذاً\b|اما\b|اور\b|اگر\b|با\ فرض\b|بالفرض\b|بفرض\b|تب\b|ثم\b|جب\b|عندما\b|فرض\ کیا\b|لكن\b|لیکن\b|متى\b|هنگامی\b|و\b|پھر\b|अगर\b|अनि\b|अनी\b|आणि\b|और\b|कदा\b|किन्तु\b|चूंकि\b|जब\b|जर\b|जेव्हा\b|तथा\b|तदा\b|तब\b|तर\b|तसेच\b|तेव्हा\b|त्यसपछि\b|दिइएको\b|दिएको\b|दिलेल्या\ प्रमाणे\b|पण\b|पर\b|परंतु\b|परन्तु\b|मग\b|यदि\b|र\b|ਅਤੇ\b|ਜਦੋਂ\b|ਜਿਵੇਂ\ ਕਿ\b|ਜੇਕਰ\b|ਤਦ\b|ਪਰ\b|અને\b|આપેલ\ છે\b|ક્યારે\b|પછી\b|પણ\b|அப்பொழுது\b|ஆனால்\b|எப்போது\b|கொடுக்கப்பட்ட\b|மற்றும்\b|மேலும்\b|అప్పుడు\b|ఈ\ పరిస్థితిలో\b|కాని\b|చెప్పబడినది\b|మరియు\b|ಆದರೆ\b|ನಂತರ\b|ನೀಡಿದ\b|ಮತ್ತು\b|ಸ್ಥಿತಿಯನ್ನು\b|എപ്പോൾ\b|ഒപ്പം\b|നൽകിയത്\b|പക്ഷേ\b|പിന്നെ\b|กำหนดให้\b|ดังนั้น\b|เมื่อ\b|แต่\b|และ\b|ასევე\b|და\b|ვთქვათ\b|თუ\b|თუმცა\b|მაგრამ\b|მაშინ\b|მოცემული\b|მოცემულია\b|როგორც\ კი\b|როდესაც\b|როცა\b|መቼ\b|እና\b|ከዚያ\b|የተሰጠ\b|ግን\b|かつ\b|しかし\b|ただし\b|ならば\b|もし\b|且つ\b|並且\b|但し\b|但是\b|假如\b|假定\b|假設\b|假设\b|前提\b|同时\b|同時\b|并且\b|当\b|然し\b|當\b|而且\b|那么\b|那麼\b|그러면\b|그리고\b|단\b|만약\b|만일\b|먼저\b|조건\b|하지만\b|🎬|😂|😐|😔|🙏)o
15
+
16
+ KEYWORDS = {}.tap do |k|
17
+ k[:element] = Set.new ["Abstract Scenario", "Abstrakt Scenario", "Achtergrond", "Aer", "Agtergrond", "All hat and no cattle", "Antecedentes", "Antecedents", "Atburðarás", "Aturan", "Awww, look mate", "B4", "Background", "Baggrund", "Bakgrund", "Bakgrunn", "Bakgrunnur", "Beispiel", "Beispill", "Busy as a hound in flea season", "Bối cảnh", "Caso", "Casu", "Cefndir", "Cenario", "Cenario de Fundo", "Cenário", "Cenário de Fundo", "Contesto", "Context", "Contexte", "Contexto", "Cás", "Cás Achomair", "Cúlra", "Cцэнар", "Dasar", "Delineacao do Cenario", "Delineação do Cenário", "Dis is what went down", "Dyagram Senaryo", "Dyagram senaryo", "Eixemplo", "Ejemplo", "Eksempel", "Ekzemplo", "Enghraifft", "Esbozo do escenario", "Esbozu del casu", "Escenari", "Escenario", "Esempio", "Esquema de l'escenari", "Esquema del caso", "Esquema del escenario", "Esquema do Cenario", "Esquema do Cenário", "Example", "Exemple", "Exemplo", "Exemplu", "First off", "Fono", "Forgatókönyv", "Forgatókönyv vázlat", "Fundo", "Garis Panduan Senario", "Garis-Besar Skenario", "Geçmiş", "Grundlage", "Hannergrond", "Heave to", "Hintergrund", "Háttér", "Istorik", "Juhtum", "Kazo", "Kazo-skizo", "Keadaan", "Kerangka Keadaan", "Kerangka Senario", "Kerangka Situasi", "Keçmiş", "Khung kịch bản", "Khung tình huống", "Koncept", "Konsep skenario", "Kontekst", "Kontekstas", "Konteksts", "Kontext", "Konturo de la scenaro", "Kontèks", "Kural", "Kịch bản", "Latar Belakang", "Lemme tell y'all a story", "Lýsing Atburðarásar", "Lýsing Dæma", "MISHUN", "MISHUN SRSLY", "Na primer", "Náčrt Scenára", "Náčrt Scenáru", "Náčrt Scénáře", "Nümunə", "Oris scenarija", "Osnova", "Osnova Scenára", "Osnova scénáře", "Osnutek", "Ozadje", "Pavyzdys", "Piemērs", "Plan Senaryo", "Plan du Scénario", "Plan du scénario", "Plan senaryo", "Plang vum Szenario", "Pozadie", "Pozadina", "Pozadí", "Pravidlo", "Pravilo", "Pregled na scenarija", "Primer", "Primjer", "Przykład", "Príklad", "Példa", "Příklad", "Quy tắc", "Raamjuhtum", "Raamstsenaarium", "Reckon it's like", "Reegel", "Reel", "Regel", "Regla", "Regla de negocio", "Regola", "Regra", "Regulo", "Reguła", "Rerefons", "Reël", "Riail", "Rule", "Règle", "Sampla", "Scenarie", "Scenarij", "Scenarijaus šablonas", "Scenariju", "Scenariju-obris", "Scenarijus", "Scenario", "Scenario Amlinellol", "Scenario Outline", "Scenario Template", "Scenario-outline", "Scenariomal", "Scenariomall", "Scenariu", "Scenariusz", "Scenaro", "Scenár", "Scenārijs", "Scenārijs pēc parauga", "Schema dello scenario", "Scénario", "Scénář", "Senario", "Senaryo", "Senaryo Deskripsyon", "Senaryo deskripsyon", "Senaryo taslağı", "Serious as a snake bite", "Shiver me timbers", "Situasi", "Situasie", "Situasie Uiteensetting", "Situācija", "Skenario", "Skenario konsep", "Skica", "Skizo", "Sodrzhina", "Ssenari", "Ssenarinin strukturu", "Structura scenariu", "Structură scenariu", "Struktura scenarija", "Stsenaarium", "Swa", "Swa hwaer swa", "Swa hwær swa", "Szablon scenariusza", "Szabály", "Szenarien", "Szenario", "Szenariogrundriss", "Tapaus", "Tapausaihio", "Taust", "Tausta", "The thing of it is", "Tình huống", "Voorbeeld", "Voraussetzungen", "Vorbedingungen", "Wharrimean is", "Yo-ho-ho", "Zasada", "Założenia", "lut", "lut chovnatlh", "mo'", "Ær", "Örnek", "Παράδειγμα", "Περίγραμμα Σεναρίου", "Περιγραφή Σεναρίου", "Σενάριο", "Υπόβαθρο", "Агуулга", "Кантэкст", "Кереш", "Контекст", "Концепт", "На пример", "Основа", "Передумова", "Позадина", "Правило", "Правілы", "Преглед на сценарија", "Предистория", "Предыстория", "Приклад", "Пример", "Рамка на сценарий", "Скица", "Содржина", "Структура сценария", "Структура сценарија", "Структура сценарію", "Сценар", "Сценарий", "Сценарий структураси", "Сценарийның төзелеше", "Сценарио", "Сценарын төлөвлөгөө", "Сценарій", "Сцэнарый", "Тарих", "Узор сцэнара", "Шаблон сценария", "Шаблон сцэнарыя", "Կոնտեքստ", "Սցենար", "Սցենարի կառուցվացքը", "Օրինակ", "דוגמא", "כלל", "רקע", "תבנית תרחיש", "תרחיש", "الخلفية", "الگوی سناریو", "زمینه", "سناریو", "سيناريو", "سيناريو مخطط", "مثال", "منظر نامے کا خاکہ", "منظرنامہ", "پس منظر", "नियम", "परिदृश्य", "परिदृश्य रूपरेखा", "पार्श्वभूमी", "पृष्ठभूमि", "पृष्ठभूमी", "ਉਦਾਹਰਨ", "ਪਟਕਥਾ", "ਪਟਕਥਾ ਢਾਂਚਾ", "ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ", "ਪਿਛੋਕੜ", "ઉદાહરણ", "નિયમ", "પરિદ્દશ્ય ઢાંચો", "પરિદ્દશ્ય રૂપરેખા", "બેકગ્રાઉન્ડ", "સ્થિતિ", "உதாரணமாக", "காட்சி", "காட்சி சுருக்கம்", "காட்சி வார்ப்புரு", "பின்னணி", "ఉదాహరణ", "కథనం", "నేపథ్యం", "సన్నివేశం", "ಉದಾಹರಣೆ", "ಕಥಾಸಾರಾಂಶ", "ವಿವರಣೆ", "ಹಿನ್ನೆಲೆ", "നിയമം", "പശ്ചാത്തലം", "രംഗം", "സാഹചര്യത്തിന്റെ രൂപരേഖ", "สรุปเหตุการณ์", "เหตุการณ์", "แนวคิด", "โครงสร้างของเหตุการณ์", "კონტექსტი", "მაგ", "მაგალითად", "მაგალითი", "ნიმუში", "სცენარი", "სცენარის ნიმუში", "სცენარის შაბლონი", "შაბლონი", "წესი", "ሁናቴ", "ሁናቴ አብነት", "ሁናቴ ዝርዝር", "ህግ", "መነሻ", "መነሻ ሀሳብ", "ምሳሌ", "ቅድመ ሁኔታ", "シナリオ", "シナリオアウトライン", "シナリオテンプレ", "シナリオテンプレート", "テンプレ", "ルール", "剧本", "剧本大纲", "劇本", "劇本大綱", "场景", "场景大纲", "場景", "場景大綱", "背景", "规则", "규칙", "배경", "시나리오", "시나리오 개요", "💤", "📕", "📖", "🥒"]
18
+ k[:examples] = Set.new ["Atburðarásir", "Beispiele", "Beispiller", "Cenarios", "Cenários", "Conto", "Contoh", "Contone", "Dead men tell no tales", "Dæmi", "Dữ liệu", "EXAMPLZ", "Egzanp", "Eixemplos", "Ejemplos", "Eksempler", "Ekzemploj", "Enghreifftiau", "Esempi", "Examples", "Exempel", "Exemple", "Exemples", "Exemplos", "Juhtumid", "Misal", "Now that's a story longer than a cattle drive in July", "Nümunələr", "Paraugs", "Pavyzdžiai", "Piemēri", "Primeri", "Primjeri", "Przykłady", "Príklady", "Példák", "Příklady", "Samplaí", "Scenaria", "Scenarijai", "Scenariji", "Scenarios", "Se the", "Se ðe", "Se þe", "Tapaukset", "Variantai", "Voorbeelde", "Voorbeelden", "You'll wanna", "ghantoH", "lutmey", "Örnekler", "Παραδείγματα", "Σενάρια", "Значения", "Мисаллар", "Мисоллар", "Приклади", "Примери", "Примеры", "Прыклады", "Сценарија", "Сценарији", "Тухайлбал", "Үрнәкләр", "Օրինակներ", "דוגמאות", "امثلة", "مثالیں", "نمونه ها", "उदाहरण", "उदाहरणहरु", "ਉਦਾਹਰਨਾਂ", "ઉદાહરણો", "எடுத்துக்காட்டுகள்", "காட்சிகள்", "நிலைமைகளில்", "ఉదాహరణలు", "ಉದಾಹರಣೆಗಳು", "ഉദാഹരണങ്ങൾ", "ชุดของตัวอย่าง", "ชุดของเหตุการณ์", "მაგალითები", "ሁናቴዎች", "ምሳሌዎች", "サンプル", "例", "例子", "예", "📓"]
19
+ k[:feature] = Set.new ["Ability", "Abilità", "Ahoy matey!", "All gussied up", "Arwedd", "Aspekt", "Besigheid Behoefte", "Biznis potreba", "Business Need", "Caracteristica", "Característica", "Carauterística", "Egenskab", "Egenskap", "Eiginleiki", "Esigenza di Business", "Feature", "Fitur", "Fonctionnalité", "Fonksyonalite", "Funcionalidade", "Funcionalitat", "Functionalitate", "Functionaliteit", "Funcţionalitate", "Funcționalitate", "Fungsi", "Funkcia", "Funkcija", "Funkcionalitāte", "Funkcionalnost", "Funkcja", "Funksie", "Funktion", "Funktionalität", "Funktionalitéit", "Funzionalità", "Fīča", "Gné", "Hwaet", "Hwæt", "Jellemző", "Karakteristik", "Karakteristika", "Lastnost", "Mak", "Mogucnost", "Mogućnost", "Mozhnost", "Moznosti", "Možnosti", "Necesidad del negocio", "OH HAI", "Omadus", "Ominaisuus", "Osobina", "Potrzeba biznesowa", "Požadavek", "Požiadavka", "Pretty much", "Qap", "Qu'meH 'ut", "Requisito", "Savybė", "This ain’t my first rodeo", "Trajto", "Tính năng", "Vermoë", "Vlastnosť", "Właściwość", "Značilnost", "laH", "perbogh", "poQbogh malja'", "Özellik", "Özəllik", "Δυνατότητα", "Λειτουργία", "Бизнис потреба", "Могућност", "Можност", "Мөмкинлек", "Особина", "Свойство", "Фича", "Функц", "Функционал", "Функционалност", "Функциональность", "Функция", "Функцыянальнасць", "Функціонал", "Фіча", "Үзенчәлеклелек", "Հատկություն", "Ֆունկցիոնալություն", "תכונה", "خاصية", "خصوصیت", "صلاحیت", "وِیژگی", "کاروبار کی ضرورت", "रूप लेख", "विशेषता", "वैशिष्ट्य", "सुविधा", "ਖਾਸੀਅਤ", "ਨਕਸ਼ ਨੁਹਾਰ", "ਮੁਹਾਂਦਰਾ", "ક્ષમતા", "લક્ષણ", "વ્યાપાર જરૂર", "அம்சம்", "திறன்", "வணிக தேவை", "గుణము", "ಹೆಚ್ಚಳ", "സവിശേഷത", "ความต้องการทางธุรกิจ", "ความสามารถ", "โครงหลัก", "თვისება", "მოთხოვნა", "ስራ", "የሚፈለገው ድርጊት", "የተፈለገው ስራ", "フィーチャ", "功能", "機能", "기능", "📚"]
16
20
  end
17
21
  end
18
22
  end
@@ -17,26 +17,8 @@ module Rouge
17
17
  return true if text.shebang? 'cucumber'
18
18
  end
19
19
 
20
- # self-modifying method that loads the keywords file
21
- def self.keywords
22
- Kernel::load File.join(Lexers::BASE_DIR, 'gherkin/keywords.rb')
23
- keywords
24
- end
25
-
26
- def self.step_regex
27
- # in Gherkin's config, keywords that end in < don't
28
- # need word boundaries at the ends - all others do.
29
- @step_regex ||= Regexp.new(
30
- keywords[:step].map do |w|
31
- if w.end_with? '<'
32
- Regexp.escape(w.chop)
33
- elsif w.end_with?(' ')
34
- Regexp.escape(w)
35
- else
36
- "#{Regexp.escape(w)}\\b"
37
- end
38
- end.join('|')
39
- )
20
+ lazy do
21
+ require_relative 'gherkin/keywords'
40
22
  end
41
23
 
42
24
  rest_of_line = /.*?(?=[#\n])/
@@ -46,10 +28,29 @@ module Rouge
46
28
  rule %r/[ \r\t]+/, Text
47
29
  end
48
30
 
31
+ state :annotated_string do
32
+ rule %r((""")(\S*)(.*?)("""))m do |m|
33
+ open, lang, content, close = m.captures
34
+
35
+ token Str, open
36
+ token Str::Escape, lang
37
+
38
+ sublexer = Rouge::Lexer.find(lang.strip)
39
+
40
+ if sublexer
41
+ delegate sublexer, content
42
+ else
43
+ token Str, content
44
+ end
45
+
46
+ token Str, close
47
+ end
48
+ end
49
+
49
50
  state :root do
50
51
  mixin :basic
51
52
  rule %r(\n), Text
52
- rule %r(""".*?""")m, Str
53
+ mixin :annotated_string
53
54
  rule %r(@[^\s@]+), Name::Tag
54
55
  mixin :has_table
55
56
  mixin :has_examples
@@ -60,11 +61,11 @@ module Rouge
60
61
  reset_stack
61
62
 
62
63
  keyword = m[1]
63
- keyword_tok = if self.class.keywords[:element].include? keyword
64
+ keyword_tok = if KEYWORDS[:element].include? keyword
64
65
  push :description; Keyword::Namespace
65
- elsif self.class.keywords[:feature].include? keyword
66
+ elsif KEYWORDS[:feature].include? keyword
66
67
  push :feature_description; Keyword::Declaration
67
- elsif self.class.keywords[:examples].include? keyword
68
+ elsif KEYWORDS[:examples].include? keyword
68
69
  push :example_description; Name::Namespace
69
70
  else
70
71
  Error
@@ -76,9 +77,10 @@ module Rouge
76
77
 
77
78
  state :has_examples do
78
79
  mixin :has_scenarios
79
- rule Gherkin.step_regex, Name::Function do
80
+ rule Gherkin::STEP_REGEX do
80
81
  token Name::Function
81
- reset_stack; push :step
82
+ reset_stack
83
+ push :step
82
84
  end
83
85
  end
84
86