Class: Gherkin::I18nLexer
- Inherits:
-
Object
- Object
- Gherkin::I18nLexer
- Defined in:
- lib/gherkin/i18n_lexer.rb
Overview
The main entry point to lexing Gherkin source.
Constant Summary collapse
- LANGUAGE_PATTERN =
:nodoc:
/language\s*:\s*(.*)/
Instance Attribute Summary collapse
-
#i18n_language ⇒ Object
readonly
Returns the value of attribute i18n_language.
Class Method Summary collapse
- .c ⇒ Object
- .csharp ⇒ Object
- .i18n_language(source) ⇒ Object
- .lexer_class(i18n_lang, force_ruby) ⇒ Object
- .new(parser, force_ruby) ⇒ Object
- .rb ⇒ Object
Instance Method Summary collapse
-
#initialize(parser, force_ruby) ⇒ I18nLexer
constructor
A new instance of I18nLexer.
- #scan(source) ⇒ Object
Constructor Details
#initialize(parser, force_ruby) ⇒ I18nLexer
Returns a new instance of I18nLexer.
62 63 64 65 |
# File 'lib/gherkin/i18n_lexer.rb', line 62 def initialize(parser, force_ruby) @parser = parser @force_ruby = force_ruby end |
Instance Attribute Details
#i18n_language ⇒ Object (readonly)
Returns the value of attribute i18n_language.
11 12 13 |
# File 'lib/gherkin/i18n_lexer.rb', line 11 def i18n_language @i18n_language end |
Class Method Details
.c ⇒ Object
46 47 48 49 |
# File 'lib/gherkin/i18n_lexer.rb', line 46 def c require 'gherkin/c_lexer' CLexer end |
.csharp ⇒ Object
51 52 53 54 |
# File 'lib/gherkin/i18n_lexer.rb', line 51 def csharp require 'gherkin/csharp_lexer' CSharpLexer end |
.i18n_language(source) ⇒ Object
40 41 42 43 44 |
# File 'lib/gherkin/i18n_lexer.rb', line 40 def i18n_language(source) line_one = source.split(/\n/)[0] match = LANGUAGE_PATTERN.match(line_one) I18n.get(match ? match[1] : 'en').key end |
.lexer_class(i18n_lang, force_ruby) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/gherkin/i18n_lexer.rb', line 23 def lexer_class(i18n_lang, force_ruby) begin if force_ruby rb[i18n_lang] else begin c[i18n_lang] rescue NameError, LoadError => e warn("WARNING: #{e.}. Reverting to Ruby lexer.") rb[i18n_lang] end end rescue LoadError => e raise I18nLexerNotFound, "No lexer was found for #{i18n_lang} (#{e.}). Supported languages are listed in gherkin/i18n.yml." end end |
.new(parser, force_ruby) ⇒ Object
14 15 16 17 18 19 20 21 |
# File 'lib/gherkin/i18n_lexer.rb', line 14 def new(parser, force_ruby) if !force_ruby && defined?(JRUBY_VERSION) require 'gherkin.jar' Java::Gherkin::I18nLexer.new(parser) else super end end |
.rb ⇒ Object
56 57 58 59 |
# File 'lib/gherkin/i18n_lexer.rb', line 56 def rb require 'gherkin/rb_lexer' RbLexer end |
Instance Method Details
#scan(source) ⇒ Object
67 68 69 70 71 |
# File 'lib/gherkin/i18n_lexer.rb', line 67 def scan(source) @i18n_language = self.class.i18n_language(source) delegate = self.class.lexer_class(@i18n_language, @force_ruby).new(@parser) delegate.scan(source) end |