Class: Gherkin3::TokenMatcher
- Inherits:
-
Object
- Object
- Gherkin3::TokenMatcher
- Defined in:
- lib/gherkin3/token_matcher.rb
Constant Summary collapse
- LANGUAGE_PATTERN =
/^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/
Instance Method Summary collapse
- #_match_DocStringSeparator(token, separator, is_open) ⇒ Object
-
#initialize(dialect_name = 'en') ⇒ TokenMatcher
constructor
A new instance of TokenMatcher.
- #match_BackgroundLine(token) ⇒ Object
- #match_Comment(token) ⇒ Object
- #match_DocStringSeparator(token) ⇒ Object
- #match_Empty(token) ⇒ Object
- #match_EOF(token) ⇒ Object
- #match_ExamplesLine(token) ⇒ Object
- #match_FeatureLine(token) ⇒ Object
- #match_Language(token) ⇒ Object
- #match_Other(token) ⇒ Object
- #match_ScenarioLine(token) ⇒ Object
- #match_ScenarioOutlineLine(token) ⇒ Object
- #match_StepLine(token) ⇒ Object
- #match_TableRow(token) ⇒ Object
- #match_TagLine(token) ⇒ Object
- #reset ⇒ Object
Constructor Details
#initialize(dialect_name = 'en') ⇒ TokenMatcher
Returns a new instance of TokenMatcher.
8 9 10 11 |
# File 'lib/gherkin3/token_matcher.rb', line 8 def initialize(dialect_name = 'en') change_dialect(dialect_name, nil) reset end |
Instance Method Details
#_match_DocStringSeparator(token, separator, is_open) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/gherkin3/token_matcher.rb', line 88 def _match_DocStringSeparator(token, separator, is_open) return false unless token.line.start_with?(separator) content_type = nil if is_open content_type = token.line.get_rest_trimmed(separator.length) @active_doc_string_separator = separator @indent_to_remove = token.line.indent else @active_doc_string_separator = nil @indent_to_remove = 0 end # TODO: Use the separator as keyword. That's needed for pretty printing. set_token_matched(token, :DocStringSeparator, content_type) true end |
#match_BackgroundLine(token) ⇒ Object
38 39 40 |
# File 'lib/gherkin3/token_matcher.rb', line 38 def match_BackgroundLine(token) match_title_line(token, :BackgroundLine, @dialect.background_keywords) end |
#match_Comment(token) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/gherkin3/token_matcher.rb', line 59 def match_Comment(token) return false unless token.line.start_with?('#') text = token.line.get_line_text(0) #take the entire line, including leading space set_token_matched(token, :Comment, text, nil, 0) true end |
#match_DocStringSeparator(token) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'lib/gherkin3/token_matcher.rb', line 77 def match_DocStringSeparator(token) if @active_doc_string_separator.nil? # open _match_DocStringSeparator(token, '"""', true) || _match_DocStringSeparator(token, '```', true) else # close _match_DocStringSeparator(token, @active_doc_string_separator, false) end end |
#match_Empty(token) ⇒ Object
53 54 55 56 57 |
# File 'lib/gherkin3/token_matcher.rb', line 53 def match_Empty(token) return false unless token.line.empty? set_token_matched(token, :Empty, nil, nil, 0) true end |
#match_EOF(token) ⇒ Object
106 107 108 109 110 |
# File 'lib/gherkin3/token_matcher.rb', line 106 def match_EOF(token) return false unless token.eof? set_token_matched(token, :EOF) true end |
#match_ExamplesLine(token) ⇒ Object
42 43 44 |
# File 'lib/gherkin3/token_matcher.rb', line 42 def match_ExamplesLine(token) match_title_line(token, :ExamplesLine, @dialect.examples_keywords) end |
#match_FeatureLine(token) ⇒ Object
26 27 28 |
# File 'lib/gherkin3/token_matcher.rb', line 26 def match_FeatureLine(token) match_title_line(token, :FeatureLine, @dialect.feature_keywords) end |
#match_Language(token) ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/gherkin3/token_matcher.rb', line 66 def match_Language(token) return false unless token.line.trimmed_line_text =~ LANGUAGE_PATTERN dialect_name = $1 set_token_matched(token, :Language, dialect_name) change_dialect(dialect_name, token.location) true end |
#match_Other(token) ⇒ Object
112 113 114 115 116 |
# File 'lib/gherkin3/token_matcher.rb', line 112 def match_Other(token) text = token.line.get_line_text(@indent_to_remove) # take the entire line, except removing DocString indents set_token_matched(token, :Other, unescape_docstring(text), nil, 0) true end |
#match_ScenarioLine(token) ⇒ Object
30 31 32 |
# File 'lib/gherkin3/token_matcher.rb', line 30 def match_ScenarioLine(token) match_title_line(token, :ScenarioLine, @dialect.scenario_keywords) end |
#match_ScenarioOutlineLine(token) ⇒ Object
34 35 36 |
# File 'lib/gherkin3/token_matcher.rb', line 34 def match_ScenarioOutlineLine(token) match_title_line(token, :ScenarioOutlineLine, @dialect.scenario_outline_keywords) end |
#match_StepLine(token) ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/gherkin3/token_matcher.rb', line 118 def match_StepLine(token) keywords = @dialect.given_keywords + @dialect.when_keywords + @dialect.then_keywords + @dialect.and_keywords + @dialect.but_keywords keyword = keywords.detect { |k| token.line.start_with?(k) } return false unless keyword title = token.line.get_rest_trimmed(keyword.length) set_token_matched(token, :StepLine, title, keyword) return true end |
#match_TableRow(token) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/gherkin3/token_matcher.rb', line 46 def match_TableRow(token) return false unless token.line.start_with?('|') # TODO: indent set_token_matched(token, :TableRow, nil, nil, nil, token.line.table_cells) true end |
#match_TagLine(token) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/gherkin3/token_matcher.rb', line 19 def match_TagLine(token) return false unless token.line.start_with?('@') set_token_matched(token, :TagLine, nil, nil, nil, token.line.) true end |
#reset ⇒ Object
13 14 15 16 17 |
# File 'lib/gherkin3/token_matcher.rb', line 13 def reset change_dialect('en', nil) unless @dialect_name == 'en' @active_doc_string_separator = nil @indent_to_remove = 0 end |