From 098c0fe46736e5c2ece6ef5bf85ea68dcd2fbe34 Mon Sep 17 00:00:00 2001 From: iska Date: Sat, 28 Feb 2015 01:03:54 +0100 Subject: [PATCH] Add initial implementation for parsing a fragment https://html.spec.whatwg.org/multipage/syntax.html#html-fragment-parsing-algorithm --- HTMLKit/HTMLParser.m | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/HTMLKit/HTMLParser.m b/HTMLKit/HTMLParser.m index 58d5450..5db0831 100644 --- a/HTMLKit/HTMLParser.m +++ b/HTMLKit/HTMLParser.m @@ -229,6 +229,28 @@ return nil; } +- (id)parseFragment +{ + if (_contextElement != nil) { + if (matches(_contextElement.tagName, @"title", @"textarea")) { + _tokenizer.state = HTMLTokenizerStateRCDATA; + } else if (matches(_contextElement.tagName, @"style", @"xmp", @"iframe", @"noembed", @"noframes")) { + _tokenizer.state = HTMLTokenizerStateRAWTEXT; + } else if ([_contextElement.tagName isEqualToString:@"script"]) { + _tokenizer.state = HTMLTokenizerStateScriptData; + } else if ([_contextElement.tagName isEqualToString:@"noscript"]) { + if (_scriptingFlag) { + _tokenizer.state = HTMLTokenizerStateRAWTEXT; + } + } else if ([_contextElement.tagName isEqualToString:@"plaintext"]) { + _tokenizer.state = HTMLTokenizerStatePLAINTEXT; + } else { + _tokenizer = HTMLTokenizerStateData; + } + } + + return nil; +} - (void)processToken:(HTMLToken *)token { @@ -289,7 +311,24 @@ - (void)processTokenByApplyingRulesForParsingTokensInForeignContent:(HTMLToken *)token { - + switch (token.type) { + case HTMLTokenTypeCharacter: + + break; + case HTMLTokenTypeComment: + + break; + case HTMLTokenTypeDoctype: + + break; + case HTMLTokenTypeStartTag: + + break; + case HTMLTokenTypeEndTag: + + break; + } +} #pragma mark -