public IList<Node> ParseFragment(string inputFragment, Element context, string baseUri, ParseErrorList errors) { // context may be null _state = HtmlTreeBuilderState.Initial; InitialiseParse(inputFragment, baseUri, errors); _contextElement = context; _fragmentParsing = true; Element root = null; if (context != null) { if (context.OwnerDocument != null) // quirks setup: { _doc.QuirksMode(context.OwnerDocument.QuirksMode()); } // initialise the tokeniser state: string contextTag = context.TagName(); if (StringUtil.In(contextTag, "title", "textarea")) { _tokeniser.Transition(TokeniserState.RcData); } else if (StringUtil.In(contextTag, "iframe", "noembed", "noframes", "style", "xmp")) { _tokeniser.Transition(TokeniserState.RawText); } else if (contextTag.Equals("script")) { _tokeniser.Transition(TokeniserState.ScriptData); } else if (contextTag.Equals(("noscript"))) { _tokeniser.Transition(TokeniserState.Data); // if scripting enabled, rawtext } else if (contextTag.Equals("plaintext")) { _tokeniser.Transition(TokeniserState.Data); } else { _tokeniser.Transition(TokeniserState.Data); // default } root = new Element(Tag.ValueOf("html"), baseUri); _doc.AppendChild(root); _stack.AddFirst(root); ResetInsertionMode(); // todo: setup form element to nearest form on context (up ancestor chain) } RunParser(); if (context != null) { return root.ChildNodes; } else { return _doc.ChildNodes; } }
public override Document Parse(string input, string baseUri, ParseErrorList errors) { _state = HtmlTreeBuilderState.Initial; return base.Parse(input, baseUri, errors); }
public void Error(HtmlTreeBuilderState state) { if (_errors == null) { throw new Exception(); } if (_errors.CanAddError) { _errors.Add(new ParseError(_reader.Position, "Unexpected token [{0}] when in state [{1}]", _currentToken.Type, state)); } }
public void MarkInsertionMode() { _originalState = _state; }
public void Transition(HtmlTreeBuilderState state) { this._state = state; }
public bool Process(Token token, HtmlTreeBuilderState state) { _currentToken = token; return state.Process(token, this); }