diff --git a/Sources/HTMLParser.m b/Sources/HTMLParser.m
index 15a8df1..3ec4910 100644
--- a/Sources/HTMLParser.m
+++ b/Sources/HTMLParser.m
@@ -1308,7 +1308,7 @@
_framesetOkFlag = NO;
} else if ([tagName isEqualToString:@"a"]) {
HTMLElement *element = ^ HTMLElement * {
- for (HTMLElement *element in self->_listOfActiveFormattingElements.reverseObjectEnumerator) {
+ for (HTMLElement *element in self->_listOfActiveFormattingElements.reverseObjectEnumerator) {
if ([element isEqual:[HTMLMarker marker]]) return nil;
if ([element.tagName isEqualToString:@"a"]) {
return element;
@@ -2513,13 +2513,13 @@
[characters enumerateSubstringsInRange:NSMakeRange(0, characters.length)
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
- if ([substring isEqualToString:@"\uFFFD"]) {
- [self emitParseError:@"Unexpected Character (0x0000) in foreign content"];
- } else if (!substring.htmlkit_isHTMLWhitespaceString) {
- self->_framesetOkFlag = NO;
- }
- [self insertCharacters:substring];
- }];
+ if ([substring isEqualToString:@"\uFFFD"]) {
+ [self emitParseError:@"Unexpected Character (0x0000) in foreign content"];
+ } else if (!substring.htmlkit_isHTMLWhitespaceString) {
+ self->_framesetOkFlag = NO;
+ }
+ [self insertCharacters:substring];
+ }];
return;
}
@@ -2541,23 +2541,19 @@
}
[self insertForeignElementForToken:token.asTagToken inNamespace:self.adjustedCurrentNode.htmlNamespace];
if (token.asTagToken.selfClosing) {
- [self->_stackOfOpenElements popCurrentNode];
+ [self->_stackOfOpenElements popCurrentNode];
}
};
void (^ matchedCase)(void) = ^ {
[self emitParseError:@"Unexpected start tag <%@> in foreign content", token.asTagToken.tagName];
- if (self->_fragmentParsingAlgorithm) {
- anythingElse();
- } else {
- [self->_stackOfOpenElements popCurrentNode];
- while (!IsNodeMathMLTextIntegrationPoint(self.currentNode) &&
- !IsNodeHTMLIntegrationPoint(self.currentNode) &&
- self.currentNode.htmlNamespace != HTMLNamespaceHTML) {
- [self->_stackOfOpenElements popCurrentNode];
- }
- [self reprocessToken:token];
+
+ while (!IsNodeMathMLTextIntegrationPoint(self.currentNode) &&
+ !IsNodeHTMLIntegrationPoint(self.currentNode) &&
+ self.currentNode.htmlNamespace != HTMLNamespaceHTML) {
+ [self->_stackOfOpenElements popCurrentNode];
}
+ [self processToken:token byApplyingRulesForInsertionMode:HTMLInsertionModeInBody];
};
if ([token.asTagToken.tagName isEqualToAny:@"b", @"big", @"blockquote", @"body", @"br",
diff --git a/Sources/HTMLTokenizer.m b/Sources/HTMLTokenizer.m
index bcf854e..dd93c3a 100644
--- a/Sources/HTMLTokenizer.m
+++ b/Sources/HTMLTokenizer.m
@@ -2413,6 +2413,7 @@
usingComparator:^ NSComparisonResult (id obj1, id obj2) { return [obj1 compare:obj2]; }];
if (searchIndex >= entities.count || ![[entities objectAtIndex:searchIndex] hasPrefix:name]) {
+ [name setString:[name substringToIndex:name.length -1]];
break;
}
diff --git a/Sources/include/HTMLElementAdjustment.h b/Sources/include/HTMLElementAdjustment.h
index 907fa7e..325402c 100644
--- a/Sources/include/HTMLElementAdjustment.h
+++ b/Sources/include/HTMLElementAdjustment.h
@@ -29,64 +29,66 @@ NS_INLINE void AdjustSVGAttributes(HTMLTagToken *token)
return;
}
- NSDictionary *replacements = @{@"attributename": @"attributeName",
- @"attributetype": @"attributeType",
- @"basefrequency": @"baseFrequency",
- @"baseprofile": @"baseProfile",
- @"calcmode": @"calcMode",
- @"clippathunits": @"clipPathUnits",
- @"diffuseconstant": @"diffuseConstant",
- @"edgemode": @"edgeMode",
- @"filterunits": @"filterUnits",
- @"glyphref": @"glyphRef",
- @"gradienttransform": @"gradientTransform",
- @"gradientunits": @"gradientUnits",
- @"kernelmatrix": @"kernelMatrix",
- @"kernelunitlength": @"kernelUnitLength",
- @"keypoints": @"keyPoints",
- @"keysplines": @"keySplines",
- @"keytimes": @"keyTimes",
- @"lengthadjust": @"lengthAdjust",
- @"limitingconeangle": @"limitingConeAngle",
- @"markerheight": @"markerHeight",
- @"markerunits": @"markerUnits",
- @"markerwidth": @"markerWidth",
- @"maskcontentunits": @"maskContentUnits",
- @"maskunits": @"maskUnits",
- @"numoctaves": @"numOctaves",
- @"pathlength": @"pathLength",
- @"patterncontentunits": @"patternContentUnits",
- @"patterntransform": @"patternTransform",
- @"patternunits": @"patternUnits",
- @"pointsatx": @"pointsAtX",
- @"pointsaty": @"pointsAtY",
- @"pointsatz": @"pointsAtZ",
- @"preservealpha": @"preserveAlpha",
- @"preserveaspectratio": @"preserveAspectRatio",
- @"primitiveunits": @"primitiveUnits",
- @"refx": @"refX",
- @"refy": @"refY",
- @"repeatcount": @"repeatCount",
- @"repeatdur": @"repeatDur",
- @"requiredextensions": @"requiredExtensions",
- @"requiredfeatures": @"requiredFeatures",
- @"specularconstant": @"specularConstant",
- @"specularexponent": @"specularExponent",
- @"spreadmethod": @"spreadMethod",
- @"startoffset": @"startOffset",
- @"stddeviation": @"stdDeviation",
- @"stitchtiles": @"stitchTiles",
- @"surfacescale": @"surfaceScale",
- @"systemlanguage": @"systemLanguage",
- @"tablevalues": @"tableValues",
- @"targetx": @"targetX",
- @"targety": @"targetY",
- @"textlength": @"textLength",
- @"viewbox": @"viewBox",
- @"viewtarget": @"viewTarget",
- @"xchannelselector": @"xChannelSelector",
- @"ychannelselector": @"yChannelSelector",
- @"zoomandpan": @"zoomAndPan"};
+ NSDictionary *replacements = @{
+ @"attributename": @"attributeName",
+ @"attributetype": @"attributeType",
+ @"basefrequency": @"baseFrequency",
+ @"baseprofile": @"baseProfile",
+ @"calcmode": @"calcMode",
+ @"clippathunits": @"clipPathUnits",
+ @"diffuseconstant": @"diffuseConstant",
+ @"edgemode": @"edgeMode",
+ @"filterunits": @"filterUnits",
+ @"glyphref": @"glyphRef",
+ @"gradienttransform": @"gradientTransform",
+ @"gradientunits": @"gradientUnits",
+ @"kernelmatrix": @"kernelMatrix",
+ @"kernelunitlength": @"kernelUnitLength",
+ @"keypoints": @"keyPoints",
+ @"keysplines": @"keySplines",
+ @"keytimes": @"keyTimes",
+ @"lengthadjust": @"lengthAdjust",
+ @"limitingconeangle": @"limitingConeAngle",
+ @"markerheight": @"markerHeight",
+ @"markerunits": @"markerUnits",
+ @"markerwidth": @"markerWidth",
+ @"maskcontentunits": @"maskContentUnits",
+ @"maskunits": @"maskUnits",
+ @"numoctaves": @"numOctaves",
+ @"pathlength": @"pathLength",
+ @"patterncontentunits": @"patternContentUnits",
+ @"patterntransform": @"patternTransform",
+ @"patternunits": @"patternUnits",
+ @"pointsatx": @"pointsAtX",
+ @"pointsaty": @"pointsAtY",
+ @"pointsatz": @"pointsAtZ",
+ @"preservealpha": @"preserveAlpha",
+ @"preserveaspectratio": @"preserveAspectRatio",
+ @"primitiveunits": @"primitiveUnits",
+ @"refx": @"refX",
+ @"refy": @"refY",
+ @"repeatcount": @"repeatCount",
+ @"repeatdur": @"repeatDur",
+ @"requiredextensions": @"requiredExtensions",
+ @"requiredfeatures": @"requiredFeatures",
+ @"specularconstant": @"specularConstant",
+ @"specularexponent": @"specularExponent",
+ @"spreadmethod": @"spreadMethod",
+ @"startoffset": @"startOffset",
+ @"stddeviation": @"stdDeviation",
+ @"stitchtiles": @"stitchTiles",
+ @"surfacescale": @"surfaceScale",
+ @"systemlanguage": @"systemLanguage",
+ @"tablevalues": @"tableValues",
+ @"targetx": @"targetX",
+ @"targety": @"targetY",
+ @"textlength": @"textLength",
+ @"viewbox": @"viewBox",
+ @"viewtarget": @"viewTarget",
+ @"xchannelselector": @"xChannelSelector",
+ @"ychannelselector": @"yChannelSelector",
+ @"zoomandpan": @"zoomAndPan"
+ };
HTMLOrderedDictionary *adjusted = [HTMLOrderedDictionary new];
for (id key in token.attributes) {
@@ -99,43 +101,44 @@ NS_INLINE void AdjustSVGAttributes(HTMLTagToken *token)
NS_INLINE void AdjustSVGNameCase(HTMLTagToken *token)
{
NSDictionary *replacements = @{
- @"altglyph": @"altGlyph",
- @"altglyphdef": @"altGlyphDef",
- @"altglyphitem": @"altGlyphItem",
- @"animatecolor": @"animateColor",
- @"animatemotion": @"animateMotion",
- @"animatetransform": @"animateTransform",
- @"clippath": @"clipPath",
- @"feblend": @"feBlend",
- @"fecolormatrix": @"feColorMatrix",
- @"fecomponenttransfer": @"feComponentTransfer",
- @"fecomposite": @"feComposite",
- @"feconvolvematrix": @"feConvolveMatrix",
- @"fediffuselighting": @"feDiffuseLighting",
- @"fedisplacementmap": @"feDisplacementMap",
- @"fedistantlight": @"feDistantLight",
- @"fedropshadow": @"feDropShadow",
- @"feflood": @"feFlood",
- @"fefunca": @"feFuncA",
- @"fefuncb": @"feFuncB",
- @"fefuncg": @"feFuncG",
- @"fefuncr": @"feFuncR",
- @"fegaussianblur": @"feGaussianBlur",
- @"feimage": @"feImage",
- @"femerge": @"feMerge",
- @"femergenode": @"feMergeNode",
- @"femorphology": @"feMorphology",
- @"feoffset": @"feOffset",
- @"fepointlight": @"fePointLight",
- @"fespecularlighting": @"feSpecularLighting",
- @"fespotlight": @"feSpotLight",
- @"fetile": @"feTile",
- @"feturbulence": @"feTurbulence",
- @"foreignobject": @"foreignObject",
- @"glyphref": @"glyphRef",
- @"lineargradient": @"linearGradient",
- @"radialgradient": @"radialGradient",
- @"textpath": @"textPath"};
+ @"altglyph": @"altGlyph",
+ @"altglyphdef": @"altGlyphDef",
+ @"altglyphitem": @"altGlyphItem",
+ @"animatecolor": @"animateColor",
+ @"animatemotion": @"animateMotion",
+ @"animatetransform": @"animateTransform",
+ @"clippath": @"clipPath",
+ @"feblend": @"feBlend",
+ @"fecolormatrix": @"feColorMatrix",
+ @"fecomponenttransfer": @"feComponentTransfer",
+ @"fecomposite": @"feComposite",
+ @"feconvolvematrix": @"feConvolveMatrix",
+ @"fediffuselighting": @"feDiffuseLighting",
+ @"fedisplacementmap": @"feDisplacementMap",
+ @"fedistantlight": @"feDistantLight",
+ @"fedropshadow": @"feDropShadow",
+ @"feflood": @"feFlood",
+ @"fefunca": @"feFuncA",
+ @"fefuncb": @"feFuncB",
+ @"fefuncg": @"feFuncG",
+ @"fefuncr": @"feFuncR",
+ @"fegaussianblur": @"feGaussianBlur",
+ @"feimage": @"feImage",
+ @"femerge": @"feMerge",
+ @"femergenode": @"feMergeNode",
+ @"femorphology": @"feMorphology",
+ @"feoffset": @"feOffset",
+ @"fepointlight": @"fePointLight",
+ @"fespecularlighting": @"feSpecularLighting",
+ @"fespotlight": @"feSpotLight",
+ @"fetile": @"feTile",
+ @"feturbulence": @"feTurbulence",
+ @"foreignobject": @"foreignObject",
+ @"glyphref": @"glyphRef",
+ @"lineargradient": @"linearGradient",
+ @"radialgradient": @"radialGradient",
+ @"textpath": @"textPath"
+ };
NSString *replacement = replacements[token.tagName] ?: token.tagName;
token.tagName = replacement;