Example #1
0
        private ScriptConditionStatement ParseElseStatement(bool isElseIf)
        {
            // Case of elsif
            if (isElseIf)
            {
                return(ParseIfStatement(false, true));
            }

            // unit test: 200-if-else-statement.txt

            /*
             * Token nextToken = PeekToken();
             * if (!_isLiquid &&
             *  nextToken.Type == TokenType.Identifier &&
             *  GetAsText(nextToken) == "if")
             * {
             *  NextToken();
             *
             *  if (_isKeepTrivia)
             *  {
             *      // We don't store the trivias here
             *      _trivias.Clear();
             *  }
             *  return ParseIfStatement(false, true);
             * }
             */

            ScriptElseStatement elseStatement = Open <ScriptElseStatement>();

            NextToken(); // skip else

            // unit test: 201-if-else-error4.txt
            if (ExpectEndOfStatement(elseStatement))
            {
                elseStatement.Body = ParseBlockStatement(elseStatement);
            }

            return(Close(elseStatement));
        }
        /// <summary>
        /// Extracts a statement
        /// </summary>
        /// <param name="scriptStatements">Statement list to fill</param>
        /// <param name="statement">Statement to check</param>
        private static void ExtractStatement(List <ScriptStatement> scriptStatements, ScriptStatement statement)
        {
            if (!(statement is ScriptRawStatement))
            {
                scriptStatements.Add(statement);
            }

            if (statement is ScriptLoopStatementBase)
            {
                ScriptLoopStatementBase loopStatement = (ScriptLoopStatementBase)statement;
                foreach (ScriptNode curChild in loopStatement.Children)
                {
                    ScriptStatement curStatement = curChild as ScriptStatement;
                    if (curStatement != null)
                    {
                        ExtractStatement(scriptStatements, curStatement);
                    }
                }
            }
            else if (statement is ScriptIfStatement)
            {
                ScriptIfStatement ifStatement = (ScriptIfStatement)statement;
                if (ifStatement.Then != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(ifStatement.Then.Statements));
                }

                if (ifStatement.Else != null)
                {
                    ExtractStatement(scriptStatements, ifStatement.Else);
                }
            }
            else if (statement is ScriptElseStatement)
            {
                ScriptElseStatement elseStatement = (ScriptElseStatement)statement;
                if (elseStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(elseStatement.Body.Statements));
                }
            }
            else if (statement is ScriptCaptureStatement)
            {
                ScriptCaptureStatement captureStatement = (ScriptCaptureStatement)statement;
                if (captureStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(captureStatement.Body.Statements));
                }
            }
            else if (statement is ScriptCaseStatement)
            {
                ScriptCaseStatement caseStatement = (ScriptCaseStatement)statement;
                if (caseStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(caseStatement.Body.Statements));
                }
            }
            else if (statement is ScriptFunction)
            {
                ScriptFunction functionStatement = (ScriptFunction)statement;
                if (functionStatement.Body != null)
                {
                    ExtractStatement(scriptStatements, functionStatement.Body);
                }
            }
            else if (statement is ScriptWhenStatement)
            {
                ScriptWhenStatement whenStatement = (ScriptWhenStatement)statement;
                if (whenStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(whenStatement.Body.Statements));
                }
            }
            else if (statement is ScriptWithStatement)
            {
                ScriptWithStatement withStatement = (ScriptWithStatement)statement;
                if (withStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(withStatement.Body.Statements));
                }
            }
            else if (statement is ScriptWrapStatement)
            {
                ScriptWrapStatement wrapStatement = (ScriptWrapStatement)statement;
                if (wrapStatement.Body != null)
                {
                    scriptStatements.AddRange(ExtractStatementsFromList(wrapStatement.Body.Statements));
                }
            }
            else if (statement is ScriptBlockStatement)
            {
                ScriptBlockStatement blockStatement = (ScriptBlockStatement)statement;
                scriptStatements.AddRange(ExtractStatementsFromList(blockStatement.Statements));
            }
        }