예제 #1
0
 public void Build(Token token)
 {
     var subNodes = domBuilder.BuildFromToken(token);
     foreach (var subNode in subNodes)
     {
         CurrentNode.AddSubNode((RuleType)token.MatchedType, subNode);
     }
 }
예제 #2
0
 public bool Match_Empty(Token token)
 {
     if (!token.IsEOF && token.Line.IsEmpty())
     {
         token.MatchedType = TokenType.Empty;
         return true;
     }
     return false;
 }
예제 #3
0
 public bool Match_EOF(Token token)
 {
     if (token.IsEOF)
     {
         token.MatchedType = TokenType.EOF;
         return true;
     }
     return false;
 }
예제 #4
0
 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;
 }
예제 #5
0
        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;
        }
예제 #6
0
 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;
     }
 }
예제 #7
0
 public bool Match_Other(Token token)
 {
     token.MatchedType = TokenType.Other;
     token.Text = token.Line.GetLineText();
     return true;
 }
예제 #8
0
 public bool Match_Feature(Token token)
 {
     return MatchTitleLine(token, TokenType.Feature);
 }
예제 #9
0
 public bool Match_Examples(Token token)
 {
     return MatchTitleLine(token, TokenType.Examples);
 }
예제 #10
0
 public bool Match_Background(Token token)
 {
     return MatchTitleLine(token, TokenType.Background);
 }
예제 #11
0
        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;
        }
예제 #12
0
        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;
        }
예제 #13
0
 public bool Match_TableRow(Token token)
 {
     if (token.Line.StartsWith("|"))
     {
         token.MatchedType = TokenType.TableRow;
         token.Items = token.Line.GetTableCells().ToArray();
         return true;
     }
     return false;
 }
예제 #14
0
 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;
 }
예제 #15
0
 public bool Match_ScenarioOutline(Token token)
 {
     return MatchTitleLine(token, TokenType.ScenarioOutline);
 }