public void ParseShouldLeaveCursorOneTokenPastTheParagraphBoundary() { var parserNode = new OoxmlNodeTd(new OoxmlScanner( new Source(@"<w:body> <w:p> <w:pPr> <w:i /> </w:pPr> </w:p> </w:body>") )); parserNode.NextToken(); while (parserNode.CurrentToken.Keyword != KeywordToken.PreviousParagraph) { parserNode.NextToken(); } var sut = new PreviousParagraphStatementParser(parserNode); sut.Parse(parserNode.CurrentToken); var currentToken = parserNode.CurrentToken; Assert.AreEqual(KeywordToken.Close, currentToken.Keyword); Assert.AreEqual("w:p", currentToken.Text); }
public void CurrentTokenDoesNotMoveCharForward() { var testInput = @"<w:p testAttrib=""test"">ok jim</w:p>"; var a = new OoxmlNodeTd(new OoxmlScanner(new Source(testInput))); a.NextToken(); Assert.AreEqual(a.CurrentToken.Keyword, KeywordToken.STARTING_ELEMENT); a.NextToken(); Assert.AreEqual(a.CurrentToken.Keyword, KeywordToken.Paragraph); Assert.AreEqual(a.CurrentToken.Keyword, KeywordToken.Paragraph); }
public void ParseShouldLeaveCursorOneTokenPastTheWordBoundary() { var parserNode = new OoxmlNodeTd(new OoxmlScanner( new Source(@"<w:body> <w:p> <w:t>Testing this string</w:t> </w:p> </w:body>") )); parserNode.NextToken(); while (parserNode.CurrentToken.Keyword != KeywordToken.StringLiteral) { parserNode.NextToken(); } var Sut = new OoxmlToHtml.Parsers.StringLiteralStatementParser(parserNode); Sut.Parse(parserNode.CurrentToken); Assert.AreEqual(KeywordToken.Close, parserNode.CurrentToken.Keyword); }
public virtual INode Parse(Token token) { StringBuilder stringBuilder = new StringBuilder(); while (_parser.CurrentToken.Keyword != KeywordToken.EOF && _parser.CurrentToken.Keyword == KeywordToken.StringLiteral) { stringBuilder.Append(_parser.CurrentToken.Text); stringBuilder.Append(' '); if (_parser.PeekToken().Keyword == KeywordToken.Code) { break; } _parser.NextToken(); } var newNode = NodeFactory.CreateNode(KeywordToken.StringLiteral); newNode.SetAttribute("Text", stringBuilder.ToString().TrimEnd()); return(newNode); }
public virtual INode Parse(Token token) { var currentNode = NodeFactory.CreateNode(AttributeName); parser.NextToken(); while (parser.CurrentToken.Keyword != KeywordToken.ENDING_ELEMENT && parser.CurrentToken.Keyword != KeywordToken.EOF && parser.CurrentToken.Keyword != KeywordToken.ShortClose) { IAttributeStatementParser attributeNode = null; switch (parser.CurrentToken.Keyword) { // parse attributes case KeywordToken.StringLiteral: attributeNode = new UnknownStringLiteralAttribute(parser); break; case KeywordToken.Value: attributeNode = new ValueAttribute(parser); break; default: parser.NextToken(); break; } if (attributeNode != null) { currentNode.SetAttribute(attributeNode.AttributeName, attributeNode.Parse(parser.CurrentToken).GetAttribute("value")); } } if (parser.CurrentToken.Keyword == KeywordToken.ENDING_ELEMENT) { // if we are not at the end of the file or at the end tag of the of the current tag. go into the while // if we are at the end of the current tag, stop collecting children for the current tag while (parser.CurrentToken.Keyword != KeywordToken.EOF && parser.CurrentToken.Keyword != KeywordToken.Close ) { // we are in the body of the element parser.NextToken(); IStatementParser elementNode = null; switch (parser.CurrentToken.Keyword) { case KeywordToken.StringLiteral: elementNode = new StringLiteralStatementParser(parser); break; case KeywordToken.Paragraph: elementNode = new ParagraphStatementParser(parser); break; case KeywordToken.PreviousParagraph: elementNode = new PreviousParagraphStatementParser(parser); break; case KeywordToken.Color: elementNode = new ColorStatementNode(parser); break; case KeywordToken.Text: elementNode = new TextStatementParser(parser); break; case KeywordToken.Italic: elementNode = new ItalicStatementParser(parser); break; case KeywordToken.ParagraphStyle: elementNode = new ParagraphStyleStatementParser(parser); break; case KeywordToken.Unknown: elementNode = new UnknownElementParser(parser); break; case KeywordToken.Bold: elementNode = new GenericElementNode(parser, KeywordToken.Bold); break; case KeywordToken.Run: elementNode = new GenericElementNode(parser, KeywordToken.Run); break; case KeywordToken.Size: elementNode = new GenericElementNode(parser, KeywordToken.Size); break; } if (elementNode != null) { currentNode.AddChild(elementNode.Parse(parser.CurrentToken)); } } parser.NextToken(); } return(currentNode); }