public void Build(Token token) { var subNodes = domBuilder.BuildFromToken(token); foreach (var subNode in subNodes) { CurrentNode.AddSubNode((RuleType)token.MatchedType, subNode); } }
public bool Match_Empty(Token token) { if (!token.IsEOF && token.Line.IsEmpty()) { token.MatchedType = TokenType.Empty; return true; } return false; }
public bool Match_EOF(Token token) { if (token.IsEOF) { token.MatchedType = TokenType.EOF; return true; } return false; }
public bool Match_MultiLineArgument(Token token) { if (token.Line.StartsWith("\"\"\"")) //TODO: equals { token.MatchedType = TokenType.MultiLineArgument; token.Indent = token.Line.Indent; return true; } return false; }
public bool Match_Comment(Token token) { if (!token.IsEOF && token.Line.StartsWith("#")) { token.MatchedType = TokenType.Comment; token.Text = token.Line.GetRestTrimmed(0).Substring(1); if (languageChangeAllowed && token.Text.StartsWith(LANGUAGE_PREFIX, StringComparison.OrdinalIgnoreCase)) { var language = token.Text.Substring(LANGUAGE_PREFIX.Length).Trim(); currentDialect = dialectProvider.GetDialect(language); } languageChangeAllowed = false; return true; } return false; }
public IEnumerable<object> BuildFromToken(Token token) { switch (token.MatchedType) { case TokenType.TagLine: foreach (var item in token.Items) { yield return new Tag(item); } break; case TokenType.TableRow: yield return new GherkinTableRow(token.Items.Select(cv => new GherkinTableCell(cv)).ToArray()); break; default: yield return token; break; } }
public bool Match_Other(Token token) { token.MatchedType = TokenType.Other; token.Text = token.Line.GetLineText(); return true; }
public bool Match_Feature(Token token) { return MatchTitleLine(token, TokenType.Feature); }
public bool Match_Examples(Token token) { return MatchTitleLine(token, TokenType.Examples); }
public bool Match_Background(Token token) { return MatchTitleLine(token, TokenType.Background); }
private bool MatchTitleLine(Token token, TokenType tokenType) { if (token.IsEOF) return false; var keywords = currentDialect.GetTitleKeywords(tokenType); foreach (var keyword in keywords) { if (token.Line.StartsWith(keyword, ':')) { token.MatchedType = tokenType; token.MatchedKeyword = keyword; token.Text = token.Line.GetRestTrimmed(keyword.Length + 1); languageChangeAllowed = false; return true; } } return false; }
public bool Match_TagLine(Token token) { if (!token.IsEOF && token.Line.StartsWith("@")) { token.MatchedType = TokenType.TagLine; token.Items = token.Line.Split(1).ToArray(); languageChangeAllowed = false; return true; } return false; }
public bool Match_TableRow(Token token) { if (token.Line.StartsWith("|")) { token.MatchedType = TokenType.TableRow; token.Items = token.Line.GetTableCells().ToArray(); return true; } return false; }
public bool Match_Step(Token token) { var keywords = currentDialect.StepKeywords; foreach (var keyword in keywords) { if (token.Line.StartsWith(keyword)) { token.MatchedType = TokenType.Step; token.MatchedKeyword = keyword; token.Text = token.Line.GetRestTrimmed(keyword.Length); return true; } } return false; }
public bool Match_ScenarioOutline(Token token) { return MatchTitleLine(token, TokenType.ScenarioOutline); }