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 12 |
# File 'lib/gherkin3/token_matcher.rb', line 8 def initialize(dialect_name = 'en') @default_dialect_name = dialect_name change_dialect(dialect_name, nil) reset end |
Instance Method Details
#_match_DocStringSeparator(token, separator, is_open) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/gherkin3/token_matcher.rb', line 89 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
39 40 41 |
# File 'lib/gherkin3/token_matcher.rb', line 39 def match_BackgroundLine(token) match_title_line(token, :BackgroundLine, @dialect.background_keywords) end |
#match_Comment(token) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/gherkin3/token_matcher.rb', line 60 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
78 79 80 81 82 83 84 85 86 87 |
# File 'lib/gherkin3/token_matcher.rb', line 78 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
54 55 56 57 58 |
# File 'lib/gherkin3/token_matcher.rb', line 54 def match_Empty(token) return false unless token.line.empty? set_token_matched(token, :Empty, nil, nil, 0) true end |
#match_EOF(token) ⇒ Object
107 108 109 110 111 |
# File 'lib/gherkin3/token_matcher.rb', line 107 def match_EOF(token) return false unless token.eof? set_token_matched(token, :EOF) true end |
#match_ExamplesLine(token) ⇒ Object
43 44 45 |
# File 'lib/gherkin3/token_matcher.rb', line 43 def match_ExamplesLine(token) match_title_line(token, :ExamplesLine, @dialect.examples_keywords) end |
#match_FeatureLine(token) ⇒ Object
27 28 29 |
# File 'lib/gherkin3/token_matcher.rb', line 27 def match_FeatureLine(token) match_title_line(token, :FeatureLine, @dialect.feature_keywords) end |
#match_Language(token) ⇒ Object
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/gherkin3/token_matcher.rb', line 67 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
113 114 115 116 117 |
# File 'lib/gherkin3/token_matcher.rb', line 113 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
31 32 33 |
# File 'lib/gherkin3/token_matcher.rb', line 31 def match_ScenarioLine(token) match_title_line(token, :ScenarioLine, @dialect.scenario_keywords) end |
#match_ScenarioOutlineLine(token) ⇒ Object
35 36 37 |
# File 'lib/gherkin3/token_matcher.rb', line 35 def match_ScenarioOutlineLine(token) match_title_line(token, :ScenarioOutlineLine, @dialect.scenario_outline_keywords) end |
#match_StepLine(token) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/gherkin3/token_matcher.rb', line 119 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
47 48 49 50 51 52 |
# File 'lib/gherkin3/token_matcher.rb', line 47 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
20 21 22 23 24 25 |
# File 'lib/gherkin3/token_matcher.rb', line 20 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
14 15 16 17 18 |
# File 'lib/gherkin3/token_matcher.rb', line 14 def reset change_dialect(@default_dialect_name, nil) unless @dialect_name == @default_dialect_name @active_doc_string_separator = nil @indent_to_remove = 0 end |