public void ParseMarkupExpressionStatementTest() { //Create parser StatementParser statementParser = new StatementParser(Init("tr td p \"test\";")); Statement parsedStatement = statementParser.ParseMarkupStatement(); //Test statement Assert.AreEqual(typeof(MarkupExpressionStatement), parsedStatement.GetType()); //Test MarkupExpressionStatement MarkupExpressionStatement statement = (MarkupExpressionStatement)parsedStatement; Assert.AreEqual(typeof(Markup), statement.GetMarkups().Get(0).GetType()); Assert.AreEqual("tr", statement.GetMarkups().Get(0).ToString()); Assert.AreEqual(typeof(Markup), statement.GetMarkups().Get(1).GetType()); Assert.AreEqual("td", statement.GetMarkups().Get(1).ToString()); Assert.AreEqual(typeof(TextExpression), statement.GetExpression().GetType()); Assert.AreEqual("\"test\"", statement.GetExpression().ToString()); }
/// <summary> /// Interpret MarkupExpressionStatement /// </summary> /// <param name="statement">MarkupExpressionStatement to interpret</param> public override void Visit(MarkupExpressionStatement statement) { //Iterate through Markup+ ISyntaxNode[] MarkupArray = statement.GetMarkups().ToArray(); for (int i = 0; i <= (MarkupArray.Length - 1); i++) { if (IsMarkupCall((Markup)MarkupArray[i])) { //Check if called function contains an yield, if so, add remaining markups/expression to yield stack String functionIdentifier = ((Markup)MarkupArray[i]).GetDesignator().GetIdentifier(); if (NodeContainsYield(SymbolTable.GetFunctionDefinition(functionIdentifier))) { //Get remaining markups NodeList nonInterpretedMarkups = new NodeList(); for (int j = i + 1; j <= (MarkupArray.Length - 1); j++) { nonInterpretedMarkups.Add(MarkupArray[j]); } //Create new MarkupExpressionStatement and push it to stack MarkupExpressionStatement markupExpressionStatement = new MarkupExpressionStatement(); markupExpressionStatement.SetMarkups(nonInterpretedMarkups); markupExpressionStatement.SetExpression(statement.GetExpression()); PushYieldNode(markupExpressionStatement); } //Interpret markup ((Markup)MarkupArray[i]).AcceptVisitor(this); return; } else { //Interpret Tag ((Markup)MarkupArray[i]).AcceptVisitor(this); } } //Interpret expression statement.GetExpression().AcceptVisitor(this); XHTMLElement element = new XHTMLElement(TextValue, Current); element.SetTagState(false); AddElement(element); }