internal void Emit(Token token) { Validate.IsFalse(isEmitPending, "There is an unread token pending!"); emitPending = token; isEmitPending = true; if (token.type == iText.StyledXmlParser.Jsoup.Parser.TokenType.StartTag) { Token.StartTag startTag = (Token.StartTag)token; lastStartTag = startTag.tagName; if (startTag.selfClosing) { selfClosingFlagAcknowledged = false; } } else { if (token.type == iText.StyledXmlParser.Jsoup.Parser.TokenType.EndTag) { Token.EndTag endTag = (Token.EndTag)token; if (endTag.attributes != null) { Error("Attributes incorrectly present on end tag"); } } } }
internal virtual iText.StyledXmlParser.Jsoup.Nodes.Element InsertEmpty(Token.StartTag startTag) { iText.StyledXmlParser.Jsoup.Parser.Tag tag = iText.StyledXmlParser.Jsoup.Parser.Tag.ValueOf(startTag.Name( )); iText.StyledXmlParser.Jsoup.Nodes.Element el = new iText.StyledXmlParser.Jsoup.Nodes.Element(tag, baseUri, startTag.attributes); InsertNode(el); if (startTag.IsSelfClosing()) { if (tag.IsKnownTag()) { if (tag.IsSelfClosing()) { tokeniser.AcknowledgeSelfClosingFlag(); } } else { // if not acked, promulagates error // unknown tag, remember this is self closing for output tag.SetSelfClosing(); tokeniser.AcknowledgeSelfClosingFlag(); } } // not an distinct error return(el); }
internal virtual FormElement InsertForm(Token.StartTag startTag, bool onStack) { iText.StyledXmlParser.Jsoup.Parser.Tag tag = iText.StyledXmlParser.Jsoup.Parser.Tag.ValueOf(startTag.Name( )); FormElement el = new FormElement(tag, baseUri, startTag.attributes); SetFormElement(el); InsertNode(el); if (onStack) { stack.Add(el); } return(el); }
internal virtual iText.StyledXmlParser.Jsoup.Nodes.Element Insert(Token.StartTag startTag) { // handle empty unknown tags // when the spec expects an empty tag, will directly hit insertEmpty, so won't generate this fake end tag. if (startTag.IsSelfClosing()) { iText.StyledXmlParser.Jsoup.Nodes.Element el = InsertEmpty(startTag); stack.Add(el); tokeniser.Transition(TokeniserState.Data); // handles <script />, otherwise needs breakout steps from script data tokeniser.Emit(((Token.Tag)emptyEnd.Reset()).Name(el.TagName())); // ensure we get out of whatever state we are in. emitted for yielded processing return(el); } iText.StyledXmlParser.Jsoup.Nodes.Element el_1 = new iText.StyledXmlParser.Jsoup.Nodes.Element(iText.StyledXmlParser.Jsoup.Parser.Tag .ValueOf(startTag.Name()), baseUri, startTag.attributes); Insert(el_1); return(el_1); }
internal virtual iText.StyledXmlParser.Jsoup.Nodes.Element Insert(Token.StartTag startTag) { iText.StyledXmlParser.Jsoup.Parser.Tag tag = iText.StyledXmlParser.Jsoup.Parser.Tag.ValueOf(startTag.Name( )); // todo: wonder if for xml parsing, should treat all tags as unknown? because it's not html. iText.StyledXmlParser.Jsoup.Nodes.Element el = new iText.StyledXmlParser.Jsoup.Nodes.Element(tag, baseUri, startTag.attributes); InsertNode(el); if (startTag.IsSelfClosing()) { tokeniser.AcknowledgeSelfClosingFlag(); if (!tag.IsKnownTag()) { // unknown tag, remember this is self closing for output. see above. tag.SetSelfClosing(); } } else { stack.Add(el); } return(el); }