", token.asTagToken.tagName];
+ } else {
+ break;
+ }
+ return;
+ default:
+ break;
+ }
+
+ [self HTMLInsertionModeInTable:token];
+}
+
+- (void)HTMLInsertionModeInCell:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToAny:@"td", @"th", nil]) {
+ if (![_stackOfOpenElements hasElementInTableScopeWithTagName:token.asTagToken.tagName]) {
+ [self emitParseError:@"Unexpected tag '%@' for misnested element in ", token.asTagToken.tagName];
+ return;
+ } else {
+ [self generateImpliedEndTagsExceptForElement:nil];
+ if (![self.currentNode.tagName isEqualToString:token.asTagToken.tagName]) {
+ [self emitParseError:@"Misnested element <%@> in ", token.asTagToken.tagName];
+ }
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:token.asTagToken.tagName];
+ [_listOfActiveFormattingElements clearUptoLastMarker];
+ [self switchInsertionMode:HTMLInsertionModeInRow];
+ }
+ } else if ([token.asTagToken.tagName isEqualToAny:@"body", @"caption", @"col", @"colgroup",
+ @"html", nil]) {
+ [self emitParseError:@"Unexpected end tag %@> in ", token.asTagToken.tagName];
+ } else if ([token.asTagToken.tagName isEqualToAny:@"table", @"tbody", @"tfoot", @"thhead", @"tr", nil]) {
+ if (![_stackOfOpenElements hasElementInTableScopeWithTagName:token.asTagToken.tagName]) {
+ [self emitParseError:@"Unexpected end tag %@> for misnested element in ", token.asTagToken.tagName];
+ return;
+ } else {
+ [self closeTheCell];
+ [self reprocessToken:token];
+ }
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToAny:@"caption", @"col", @"colgroup", @"tbody",
+ @"td", @"tfoot", @"th", @"thead", @"tr", nil]) {
+ if (![_stackOfOpenElements hasElementInTableScopeWithAnyOfTagNames:@[@"td", @"th"]]) {
+ [self emitParseError:@"Unexpected start tag <%@> for misnested element in ", token.asTagToken.tagName];
+ return;
+ } else {
+ [self closeTheCell];
+ [self reprocessToken:token];
+ }
+ } else {
+ break;
+ }
+ return;
+ default:
+ break;
+ }
+
+ [self HTMLInsertionModeInBody:token];
+}
+
+- (void)HTMLInsertionModeInSelect:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ {
+ NSMutableString *charactes = [token.asCharacterToken.characters mutableCopy];
+ NSUInteger nullCount = [charactes replaceOccurrencesOfString:@"\0"
+ withString:@""
+ options:NSLiteralSearch
+ range:NSMakeRange(0, charactes.length)];
+ for (int i = 0; i < nullCount; i++) {
+ [self emitParseError:@"Unexpected Character (0x0000) in "];
+ }
+
+ if (charactes.length > 0) {
+ [self insertCharacters:charactes];
+ }
+ return;
+ }
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self emitParseError:@"Unexpected DOCTYPE Token in "];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"option"]) {
+ if ([self.currentNode.tagName isEqualToString:@"option"]) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ [self insertElementForToken:token.asTagToken];
+ } else if ([token.asTagToken.tagName isEqualToString:@"optgroup"]) {
+ if ([self.currentNode.tagName isEqualToString:@"option"]) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ if ([self.currentNode.tagName isEqualToString:@"optgroup"]) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ [self insertElementForToken:token.asTagToken];
+ } else if ([token.asTagToken.tagName isEqualToString:@"select"]) {
+ [self emitParseError:@"Unexpect start tag in "];
+ if (![_stackOfOpenElements hasElementInSelectScopeWithTagName:@"select"]) {
+ return;
+ } else {
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:@"select"];
+ [self resetInsertionModeAppropriately];
+ }
+ } else if ([token.asTagToken.tagName isEqualToAny:@"input", @"keygen", @"textarea", nil]) {
+ [self emitParseError:@"Unexpect start tag <%@> in ", token.asTagToken.tagName];
+ if (![_stackOfOpenElements hasElementInSelectScopeWithTagName:@"select"]) {
+ return;
+ } else {
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:@"select"];
+ [self resetInsertionModeAppropriately];
+ [self reprocessToken:token];
+ }
+ } else if ([token.asTagToken.tagName isEqualToAny:@"script", @"template", nil]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToString:@"optgroup"]) {
+ HTMLElement *beforeCurrent = _stackOfOpenElements[_stackOfOpenElements.count - 2];
+ if ([self.currentNode.tagName isEqualToString:@"option"] &&
+ [beforeCurrent.tagName isEqualToString:@"optgroup"]) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ if ([self.currentNode.tagName isEqualToString:@"optgroup"]) {
+ [_stackOfOpenElements popCurrentNode];
+ } else {
+ [self emitParseError:@"Unexpected end tag for misnested element in "];
+ return;
+ }
+ } else if ([token.asTagToken.tagName isEqualToString:@"option"]) {
+ if ([self.currentNode.tagName isEqualToString:@"option"]) {
+ [_stackOfOpenElements popCurrentNode];
+ } else {
+ [self emitParseError:@"Unexpected end tag for misnested element in "];
+ return;
+ }
+ } else if ([token.asTagToken.tagName isEqualToString:@"select"]) {
+ if (![_stackOfOpenElements hasElementInSelectScopeWithTagName:@"select"]) {
+ [self emitParseError:@"Unexpected end tag for misnested lement in "];
+ return;
+ } else {
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:@"select"];
+ [self resetInsertionModeAppropriately];
+ }
+ } else if ([token.asTagToken.tagName isEqualToString:@"template"]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeEOF:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token in "];
+}
+
+- (void)HTMLInsertionModeInSelectInTable:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToAny:@"caption", @"table", @"tbody", @"tfoot", @"thead",
+ @"tr", @"td", @"th", nil]) {
+ [self emitParseError:@"Unexpected start tag <%@> in in ", token.asTagToken.tagName];
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:@"select"];
+ [self resetInsertionModeAppropriately];
+ [self reprocessToken:token];
+ }
+ break;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToAny:@"caption", @"table", @"tbody", @"tfoot", @"thead",
+ @"tr", @"td", @"th", nil]) {
+ [self emitParseError:@"Unexpected end tag %@> in in ", token.asTagToken.tagName];
+ if (![_stackOfOpenElements hasElementInTableScopeWithTagName:token.asTagToken.tagName]) {
+ return;
+ }
+ [_stackOfOpenElements popElementsUntilElementPoppedWithTagName:@"select"];
+ [self resetInsertionModeAppropriately];
+ [self reprocessToken:token];
+ }
+ break;
+ default:
+ break;
+ }
+
+ [self HTMLInsertionModeInSelect:token];
+}
+
+- (void)HTMLInsertionModeInTemplate:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ case HTMLTokenTypeComment:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToAny:@"base", @"basefont", @"bgsound", @"link", @"meta",
+ @"noframes", @"script", @"style", @"template", @"title", nil]) {
+ [self HTMLInsertionModeInHead:token];
+ } else if ([token.asTagToken.tagName isEqualToAny:@"caption", @"colgroup", @"tbody", @"tfoot",
+ @"thead", nil]) {
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [_stackOfTemplateInsertionModes addObject:@(HTMLInsertionModeInTable)];
+ [self switchInsertionMode:HTMLInsertionModeInTable];
+ [self reprocessToken:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"col"]) {
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [_stackOfTemplateInsertionModes addObject:@(HTMLInsertionModeInColumnGroup)];
+ [self switchInsertionMode:HTMLInsertionModeInColumnGroup];
+ [self reprocessToken:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"tr"]) {
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [_stackOfTemplateInsertionModes addObject:@(HTMLInsertionModeInTableBody)];
+ [self switchInsertionMode:HTMLInsertionModeInTableBody];
+ [self reprocessToken:token];
+ } else if ([token.asTagToken.tagName isEqualToAny:@"td", @"th", nil]) {
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [_stackOfTemplateInsertionModes addObject:@(HTMLInsertionModeInRow)];
+ [self switchInsertionMode:HTMLInsertionModeInRow];
+ [self reprocessToken:token];
+ } else {
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [_stackOfTemplateInsertionModes addObject:@(HTMLInsertionModeInBody)];
+ [self switchInsertionMode:HTMLInsertionModeInBody];
+ [self reprocessToken:token];
+ }
+ return;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToString:@"template"]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ [self emitParseError:@"Unexpected end tag %@> in ", token.asTagToken.tagName];
+ }
+ return;
+ case HTMLTokenTypeEOF:
+ if (![_stackOfOpenElements containsElementWithTagName:@"template"]) {
+ [self stopParsing];
+ return;
+ }
+ [_stackOfOpenElements popElementsUntilTemplateElementPopped];
+ [_listOfActiveFormattingElements clearUptoLastMarker];
+ [_stackOfTemplateInsertionModes removeLastObject];
+ [self resetInsertionModeAppropriately];
+ [self reprocessToken:token];
+ return;
+ default:
+ break;
+ }
+}
+
+- (void)HTMLInsertionModeAfterBody:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ {
+ HTMLCharacterToken *leadingWhiteSpace = [token.asCharacterToken tokenBySplitingLeadingWhiteSpace];
+ if (leadingWhiteSpace) {
+ [self insertCharacters:leadingWhiteSpace.characters];
+ }
+
+ if (token.asCharacterToken.isEmpty) {
+ return;
+ }
+ break;
+ }
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken asChildOfNode:_stackOfOpenElements.firstNode];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self emitParseError:@"Unexpected DOCTYPE Token after "];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ return;
+ }
+ break;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ if (_fragmentParsingAlgorithm) {
+ [self emitParseError:@"Unexpected end tag in fragment parsing after "];
+ return;
+ }
+ [self switchInsertionMode:HTMLInsertionModeAfterAfterBody];
+ return;
+ }
+ break;
+ case HTMLTokenTypeEOF:
+ [self stopParsing];
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token after "];
+ [self switchInsertionMode:HTMLInsertionModeInBody];
+ [self reprocessToken:token];
+}
+
+- (void)HTMLInsertionModeInFrameset:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ {
+ NSString *characters = token.asCharacterToken.characters;
+
+ [characters enumerateSubstringsInRange:NSMakeRange(0, characters.length)
+ options:NSStringEnumerationByComposedCharacterSequences
+ usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
+ if (substring.htmlkit_isHTMLWhitespaceString) {
+ [self insertCharacters:substring];
+ } else {
+ [self emitParseError:@"Unexpected Character (%@) in ", substring];
+ }
+ }];
+
+ return;
+ }
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self emitParseError:@"Unexpected DOCTYPE Token in "];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"frameset"]) {
+ [self insertElementForToken:token.asTagToken];
+ } else if ([token.asTagToken.tagName isEqualToString:@"frame"]) {
+ [self insertElementForToken:token.asTagToken];
+ [_stackOfOpenElements popCurrentNode];
+ } else if ([token.asTagToken.tagName isEqualToString:@"noframes"]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToString:@"frameset"]) {
+ if (self.currentNode == _stackOfOpenElements.firstNode &&
+ [self.currentNode.tagName isEqualToString:@"html"]) {
+ [self emitParseError:@"Unexpected end tag for misnested element in "];
+ return;
+ } else {
+ [_stackOfOpenElements popCurrentNode];
+ if (!_fragmentParsingAlgorithm &&
+ ![self.currentNode.tagName isEqualToString:@"frameset"]) {
+ [self switchInsertionMode:HTMLInsertionModeAfterFrameset];
+ return;
+ }
+ }
+ }
+ break;
+ case HTMLTokenTypeEOF:
+ if (self.currentNode == _stackOfOpenElements.firstNode &&
+ [self.currentNode.tagName isEqualToString:@"html"]) {
+ [self emitParseError:@"EOF reached in "];
+ }
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token in "];
+}
+
+- (void)HTMLInsertionModeAfterFrameset:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ {
+ NSString *characters = token.asCharacterToken.characters;
+
+ [characters enumerateSubstringsInRange:NSMakeRange(0, characters.length)
+ options:NSStringEnumerationByComposedCharacterSequences
+ usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
+ if (substring.htmlkit_isHTMLWhitespaceString) {
+ [self insertCharacters:substring];
+ } else {
+ [self emitParseError:@"Unexpected Character (%@) after ", substring];
+ }
+ }];
+
+ return;
+ }
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self emitParseError:@"Unexpected DOCTYPE Token in "];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"noframes"]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeEndTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self switchInsertionMode:HTMLInsertionModeAfterAfterFrameset];
+ return;
+ }
+ break;
+ case HTMLTokenTypeEOF:
+ [self stopParsing];
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token after "];
+}
+
+- (void)HTMLInsertionModeAfterAfterBody:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken asChildOfNode:_document];
+ return;
+ case HTMLTokenTypeCharacter:
+ {
+ HTMLCharacterToken *leadingWhiteSpace = [token.asCharacterToken tokenBySplitingLeadingWhiteSpace];
+ if (leadingWhiteSpace) {
+ [self insertCharacters:leadingWhiteSpace.characters];
+ }
+
+ if (token.asCharacterToken.isEmpty) {
+ return;
+ }
+ break;
+ }
+ case HTMLTokenTypeDoctype:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ }
+ break;
+ case HTMLTokenTypeEOF:
+ [self stopParsing];
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token after after "];
+ [self switchInsertionMode:HTMLInsertionModeInBody];
+ [self reprocessToken:token];
+}
+
+- (void)HTMLInsertionModeAfterAfterFrameset:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken asChildOfNode:_document];
+ return;
+ case HTMLTokenTypeCharacter:
+ {
+ HTMLCharacterToken *leadingWhiteSpace = [token.asCharacterToken tokenBySplitingLeadingWhiteSpace];
+ if (leadingWhiteSpace) {
+ [self insertCharacters:leadingWhiteSpace.characters];
+ }
+
+ if (token.asCharacterToken.isEmpty) {
+ return;
+ }
+ break;
+ }
+ case HTMLTokenTypeDoctype:
+ [self HTMLInsertionModeInBody:token];
+ return;
+ case HTMLTokenTypeStartTag:
+ if ([token.asTagToken.tagName isEqualToString:@"html"]) {
+ [self HTMLInsertionModeInBody:token];
+ } else if ([token.asTagToken.tagName isEqualToString:@"noframes"]) {
+ [self HTMLInsertionModeInHead:token];
+ } else {
+ break;
+ }
+ return;
+ case HTMLTokenTypeEOF:
+ [self stopParsing];
+ return;
+ default:
+ break;
+ }
+
+ [self emitParseError:@"Unexpected token after after "];
+}
+
+- (void)processTokenByApplyingRulesForParsingTokensInForeignContent:(HTMLToken *)token
+{
+ switch (token.type) {
+ case HTMLTokenTypeCharacter:
+ {
+ NSMutableString *characters = [token.asCharacterToken.characters mutableCopy];
+ [characters replaceOccurrencesOfString:@"\0"
+ withString:@"\uFFFD"
+ options:NSLiteralSearch
+ range:NSMakeRange(0, characters.length)];
+
+ [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) {
+ _framesetOkFlag = NO;
+ }
+ [self insertCharacters:substring];
+ }];
+
+ return;
+ }
+ case HTMLTokenTypeComment:
+ [self insertComment:token.asCommentToken];
+ return;
+ case HTMLTokenTypeDoctype:
+ [self emitParseError:@"Unexpected DOCTYPE Token in foreign content"];
+ return;
+ case HTMLTokenTypeStartTag:
+ {
+ void (^ anythingElse)(void) = ^ {
+ if (self.adjustedCurrentNode.htmlNamespace == HTMLNamespaceMathML) {
+ AdjustMathMLAttributes(token.asTagToken);
+ }
+ if (self.adjustedCurrentNode.htmlNamespace == HTMLNamespaceSVG) {
+ AdjustSVGNameCase(token.asTagToken);
+ AdjustSVGAttributes(token.asTagToken);
+ }
+ [self insertForeignElementForToken:token.asTagToken inNamespace:self.adjustedCurrentNode.htmlNamespace];
+ if (token.asTagToken.selfClosing) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ };
+
+ void (^ matchedCase)(void) = ^ {
+ [self emitParseError:@"Unexpected start tag <%@> in foreign content", token.asTagToken.tagName];
+ if (_fragmentParsingAlgorithm) {
+ anythingElse();
+ } else {
+ [_stackOfOpenElements popCurrentNode];
+ while (!IsNodeMathMLTextIntegrationPoint(self.currentNode) &&
+ !IsNodeHTMLIntegrationPoint(self.currentNode) &&
+ self.currentNode.htmlNamespace != HTMLNamespaceHTML) {
+ [_stackOfOpenElements popCurrentNode];
+ }
+ [self reprocessToken:token];
+ }
+ };
+
+ if ([token.asTagToken.tagName isEqualToAny:@"b", @"big", @"blockquote", @"body", @"br",
+ @"center", @"code", @"dd", @"div", @"dl", @"dt", @"em", @"embed", @"h1", @"h2",
+ @"h3", @"h4", @"h5", @"h6", @"head", @"hr", @"i", @"img", @"li", @"listing",
+ @"menu", @"meta", @"nobr", @"ol", @"p", @"pre", @"ruby", @"s", @"small", @"span",
+ @"strong", @"strike", @"sub", @"sup", @"table", @"tt", @"u", @"ul", @"var", nil]) {
+ matchedCase();
+ } else if ([token.asTagToken.tagName isEqualToString:@"font"] && (token.asTagToken.attributes[@"color"] ||
+ token.asTagToken.attributes[@"face"] ||
+ token.asTagToken.attributes[@"size"])) {
+ matchedCase();
+ } else {
+ anythingElse();
+ }
+ return;
+ }
+ case HTMLTokenTypeEndTag:
+ {
+ HTMLElement *node = _stackOfOpenElements.currentNode;
+ NSUInteger index = _stackOfOpenElements.count - 1;
+
+ if (![node.tagName isEqualToStringIgnoringCase:token.asTagToken.tagName]) {
+ [self emitParseError:@"Unexpected end tag %@> for misnested element in foreign content", token.asTagToken.tagName];
+ }
+
+ while (YES) {
+ if (node == _stackOfOpenElements.firstNode) {
+ break;
+ }
+ if ([node.tagName isEqualToStringIgnoringCase:token.asTagToken.tagName]) {
+ [_stackOfOpenElements popElementsUntilElementPopped:node];
+ break;
+ }
+ node = _stackOfOpenElements[--index];
+ if (node.htmlNamespace != HTMLNamespaceHTML) {
+ continue;
+ } else {
+ [self processToken:token byApplyingRulesForInsertionMode:_insertionMode];
+ break;
+ }
+ }
+ return;
+ }
+ default:
+ break;
+ }
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLQuircksMode.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLQuircksMode.m
new file mode 100644
index 0000000..7e1016e
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLQuircksMode.m
@@ -0,0 +1,21 @@
+//
+// HTMLQuircksMode.m
+// HTMLKit
+//
+// Created by Iska on 26.03.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLQuirksMode.h"
+#import "NSString+Private.h"
+
+BOOL QuirksModePrefixMatch(NSString *publicIdentifier)
+{
+ for (int i = 0; i < sizeof(HTMLQuirksModePrefixes) / sizeof(HTMLQuirksModePrefixes[0]); i++) {
+ if ([publicIdentifier hasPrefixIgnoringCase:HTMLQuirksModePrefixes[i]]) {
+ return YES;
+ }
+ }
+ return NO;
+}
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLRange.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLRange.m
new file mode 100644
index 0000000..2c6b217
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLRange.m
@@ -0,0 +1,767 @@
+//
+// HTMLRange.m
+// HTMLKit
+//
+// Created by Iska on 20/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLRange.h"
+#import "HTMLDocument.h"
+#import "HTMLKitDOMExceptions.h"
+#import "HTMLDocument+Private.h"
+#import "HTMLDOMUtils.h"
+#import "HTMLNodeTraversal.h"
+
+@interface HTMLRange ()
+{
+ HTMLDocument *_ownerDocument;
+}
+@end
+
+@implementation HTMLRange
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithDocument:(HTMLDocument *)document
+{
+ return [self initWithDocument:document startContainer:document startOffset:0 endContainer:document endOffset:0];
+}
+
+- (instancetype)initWithDowcument:(HTMLDocument *)document
+{
+ return [self initWithDocument:document startContainer:document startOffset:0 endContainer:document endOffset:0];
+}
+
+- (instancetype)initWithDowcument:(HTMLDocument *)document
+ startContainer:(HTMLNode *)startContainer startOffset:(NSUInteger)startOffset
+ endContainer:(HTMLNode *)endContainer endOffset:(NSUInteger)endOffset
+{
+ return [self initWithDocument:document
+ startContainer:startContainer startOffset:startOffset
+ endContainer:endContainer endOffset:endOffset];
+}
+
+- (instancetype)initWithDocument:(HTMLDocument *)document
+ startContainer:(HTMLNode *)startContainer startOffset:(NSUInteger)startOffset
+ endContainer:(HTMLNode *)endContainer endOffset:(NSUInteger)endOffset
+{
+ self = [super init];
+ if (self) {
+ _ownerDocument = document;
+ [_ownerDocument attachRange:self];
+ [self setStartNode:startContainer startOffset:startOffset];
+ [self setEndNode:endContainer endOffset:endOffset];
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [_ownerDocument detachRange:self];
+}
+
+#pragma mark - Properties
+
+- (BOOL)isCollapsed
+{
+ return _startContainer == _endContainer && _startOffset == _endOffset;
+}
+
+- (HTMLNode *)commonAncestorContainer
+{
+ return GetCommonAncestorContainer(_startContainer, _endContainer);
+}
+
+- (HTMLNode *)rootNode
+{
+ return _startContainer.rootNode;
+}
+
+#pragma mark - Boundaries
+
+NS_INLINE void CheckValidBoundaryNode(HTMLDocument *document, HTMLNode *node, NSString *cmd)
+{
+ if (node.ownerDocument != document) {
+ [NSException raise:HTMLKitWrongDocumentError
+ format:@"%@: Invalid Node Error, %@ is not in the same document.",
+ cmd, node];
+ }
+}
+
+NS_INLINE void CheckValidBoundaryNodeType(HTMLNode *node, NSString *cmd)
+{
+ if (node == nil || node.nodeType == HTMLNodeDocumentType) {
+ [NSException raise:HTMLKitInvalidNodeTypeError
+ format:@"%@: Invalid Node Type Error, %@ is not a valid range boundary node.",
+ cmd, node];
+ }
+}
+
+NS_INLINE void CheckValidBoundaryOffset(HTMLNode *node, NSUInteger offset, NSString *cmd)
+{
+ if (node.length < offset) {
+ [NSException raise:HTMLKitIndexSizeError
+ format:@"%@: Index Size Error, invalid index %lu for range boundary node %@.",
+ cmd, (unsigned long)offset, node];
+ }
+}
+
+NS_INLINE void CheckValidDocument(HTMLRange *lhs, HTMLRange *rhs, NSString *cmd)
+{
+ if (lhs.rootNode != rhs.rootNode) {
+ [NSException raise:HTMLKitWrongDocumentError
+ format:@"%@: Wrong Document Error, ranges %@ and %@ are not in the same document.",
+ cmd, lhs, rhs];
+ }
+}
+
+NS_INLINE NSComparisonResult CompareBoundaries(HTMLNode *startNode, NSUInteger startOffset, HTMLNode *endNode, NSUInteger endOffset)
+{
+ if (startNode == endNode) {
+ if (startOffset == endOffset) {
+ return NSOrderedSame;
+ } else if (startOffset < endOffset) {
+ return NSOrderedAscending;
+ } else {
+ return NSOrderedDescending;
+ }
+ }
+
+ HTMLDocumentPosition position = [startNode compareDocumentPositionWithNode:endNode];
+ if ((position & HTMLDocumentPositionFollowing) == HTMLDocumentPositionFollowing) {
+ if (CompareBoundaries(endNode, endOffset, startNode, startOffset) == NSOrderedAscending) {
+ return NSOrderedDescending;
+ } else {
+ return NSOrderedAscending;
+ }
+ }
+
+ if ((position & HTMLDocumentPositionContains) == HTMLDocumentPositionContains) {
+ HTMLNode *child = endNode;
+ while (child.parentNode != startNode) {
+ child = child.parentNode;
+ }
+ if (child.index < startOffset) {
+ return NSOrderedDescending;
+ }
+ }
+
+ return NSOrderedAscending;
+}
+
+- (void)setStartNode:(HTMLNode *)node startOffset:(NSUInteger)offset
+{
+ CheckValidBoundaryNode(_ownerDocument, node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryNodeType(node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryOffset(node, offset, NSStringFromSelector(_cmd));
+
+ if (self.rootNode != node.rootNode ||
+ CompareBoundaries(node, offset, _endContainer, _endOffset) == NSOrderedDescending) {
+ _endContainer = node;
+ _endOffset = offset;
+ }
+
+ _startContainer = node;
+ _startOffset = offset;
+}
+
+- (void)setEndNode:(HTMLNode *)node endOffset:(NSUInteger)offset
+{
+ CheckValidBoundaryNode(_ownerDocument, node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryNodeType(node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryOffset(node, offset, NSStringFromSelector(_cmd));
+
+ if (self.rootNode != node.rootNode ||
+ CompareBoundaries(node, offset, _startContainer, _startOffset) == NSOrderedAscending) {
+ _startContainer = node;
+ _startOffset = offset;
+ }
+
+ _endContainer = node;
+ _endOffset = offset;
+}
+
+- (void)setStartBeforeNode:(HTMLNode *)node
+{
+ HTMLNode *parent = node.parentNode;
+ [self setStartNode:parent startOffset:node.index];
+}
+
+- (void)setStartAfterNode:(HTMLNode *)node
+{
+ HTMLNode *parent = node.parentNode;
+ [self setStartNode:parent startOffset:node.index + 1];
+}
+
+- (void)setEndBeforeNode:(HTMLNode *)node
+{
+ HTMLNode *parent = node.parentNode;
+ [self setEndNode:parent endOffset:node.index];
+}
+
+- (void)setEndAfterNode:(HTMLNode *)node
+{
+ HTMLNode *parent = node.parentNode;
+ [self setEndNode:parent endOffset:node.index + 1];
+}
+
+- (void)collapseToStart
+{
+ [self setEndNode:_startContainer endOffset:_startOffset];
+}
+
+- (void)collapseToEnd
+{
+ [self setStartNode:_endContainer startOffset:_endOffset];
+}
+
+- (void)selectNode:(HTMLNode *)node
+{
+ HTMLNode *parent = node.parentNode;
+ [self setStartNode:parent startOffset:node.index];
+ [self setEndNode:parent endOffset:node.index + 1];
+}
+
+- (void)selectNodeContents:(HTMLNode *)node
+{
+ [self setStartNode:node startOffset:0];
+ [self setEndNode:node endOffset:node.length];
+}
+
+- (NSComparisonResult)compareBoundaryPoints:(HTMLRangeComparisonMethod)method sourceRange:(HTMLRange *)sourceRange
+{
+ CheckValidDocument(self, sourceRange, NSStringFromSelector(_cmd));
+
+ switch (method) {
+ case HTMLRangeComparisonMethodStartToStart:
+ return CompareBoundaries(_startContainer, _startOffset, sourceRange.startContainer, sourceRange.startOffset);
+ case HTMLRangeComparisonMethodStartToEnd:
+ return CompareBoundaries(_endContainer, _endOffset, sourceRange.startContainer, sourceRange.startOffset);
+ case HTMLRangeComparisonMethodEndToEnd:
+ return CompareBoundaries(_endContainer, _endOffset, sourceRange.endContainer, sourceRange.endOffset);
+ case HTMLRangeComparisonMethodEndToStart:
+ return CompareBoundaries(_startContainer, _startOffset, sourceRange.endContainer, sourceRange.endOffset);
+ }
+}
+
+#pragma mark - Containment
+
+- (NSComparisonResult)comparePoint:(HTMLNode *)node offset:(NSUInteger)offset
+{
+ CheckValidBoundaryNode(_ownerDocument, node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryNodeType(node, NSStringFromSelector(_cmd));
+
+ CheckValidBoundaryOffset(node, offset, NSStringFromSelector(_cmd));
+
+ if (CompareBoundaries(node, offset, _startContainer, _startOffset) == NSOrderedAscending) {
+ return NSOrderedAscending;
+ }
+
+ if (CompareBoundaries(node, offset, _endContainer, _endOffset) == NSOrderedDescending) {
+ return NSOrderedDescending;
+ }
+
+ return NSOrderedSame;
+}
+
+- (BOOL)containsPoint:(HTMLNode *)node offset:(NSUInteger)offset
+{
+ return [self comparePoint:node offset:offset] == NSOrderedSame;
+}
+
+- (BOOL)intersectsNode:(HTMLNode *)node
+{
+ if (self.rootNode != node.rootNode) {
+ return NO;
+ }
+
+ HTMLNode *parent = node.parentNode;
+ if (parent == nil) {
+ return YES;
+ }
+
+ NSUInteger offset = node.index;
+ if (CompareBoundaries(parent, offset, _endContainer, _endOffset) == NSOrderedAscending &&
+ CompareBoundaries(parent, offset + 1, _startContainer, _startOffset) == NSOrderedDescending) {
+ return YES;
+ }
+
+ return NO;
+}
+
+- (BOOL)containsNode:(HTMLNode *)node
+{
+ return CompareBoundaries(_startContainer, _startOffset, node, 0) == NSOrderedAscending &&
+ CompareBoundaries(_endContainer, _endOffset, node, node.length) == NSOrderedDescending;
+}
+
+- (BOOL)partiallyContainsNode:(HTMLNode *)node
+{
+ return [GetAncestorNodes(_startContainer) containsObject:node] || [GetAncestorNodes(_endContainer) containsObject:node];
+}
+
+- (NSArray *)containedNodes:(HTMLNode *)commonAncestor
+{
+ NSMutableArray *containedNodes = [NSMutableArray array];
+ [commonAncestor.childNodes enumerateObjectsUsingBlock:^(HTMLNode * _Nonnull node, NSUInteger idx, BOOL * _Nonnull stop) {
+ if (node.nodeType == HTMLNodeDocumentType) {
+ [NSException raise:HTMLKitHierarchyRequestError format:@"Hierarchy Request Error, encountered a DOCTYPE contained in range: %@", self];
+ }
+ if ([self containsNode:node]) {
+ [containedNodes addObject:node];
+ }
+ }];
+
+ return containedNodes;
+}
+
+#pragma mark - Update Callbacks
+
+- (void)didRemoveCharacterDataInNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length
+{
+ if (_startContainer == node && _startOffset > offset) {
+ if (_startOffset <= offset + length) {
+ _startOffset = offset;
+ } else {
+ _startOffset = _startOffset - length;
+ }
+ }
+ if (_endContainer == node && _endOffset > offset) {
+ if (_endOffset <= offset + length) {
+ _endOffset = offset;
+ } else {
+ _endOffset = _endOffset - length;
+ }
+ }
+}
+
+- (void)didAddCharacterDataToNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length
+{
+ if (_startContainer == node && _startOffset > offset) {
+ _startOffset = _startOffset + length;
+ }
+ if (_endContainer == node && _endOffset > offset) {
+ _endOffset = _endOffset + length;
+ }
+}
+
+- (void)didInsertNewTextNode:(HTMLText *)newNode intoParent:(HTMLNode *)parent afterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset
+{
+ if (_startContainer == node && _startOffset > offset) {
+ _startContainer = newNode;
+ _startOffset -= offset;
+ }
+
+ if (_endContainer == node && _endOffset > offset) {
+ _endContainer = newNode;
+ _endOffset -= offset;
+ }
+
+ if (_startContainer == parent && _startOffset == node.index + 1) {
+ _startOffset += 1;
+ }
+
+ if (_endContainer == parent && _endOffset == node.index + 1) {
+ _endOffset += 1;
+ }
+}
+
+- (void)clampRangesAfterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset
+{
+ if (_startContainer == node && _startOffset > offset) {
+ _startOffset = offset;
+ }
+
+ if (_endContainer == node && _endOffset > offset) {
+ _endOffset = offset;
+ }
+}
+
+- (void)runRemovingStepsForNode:(HTMLNode *)oldNode withOldParent:(HTMLNode *)oldParent andOldPreviousSibling:(HTMLNode *)oldPreviousSibling
+{
+ NSUInteger oldIndex = oldPreviousSibling.index + 1;
+
+ if ([_startContainer containsNode:oldNode]) {
+ [self setStartNode:oldNode startOffset:oldIndex];
+ }
+
+ if ([_endContainer containsNode:oldNode]) {
+ [self setEndNode:oldNode endOffset:oldIndex];
+ }
+
+ if (_startContainer == oldParent && _startOffset > oldIndex) {
+ _startOffset -= 1;
+ }
+
+ if (_endContainer == oldParent && _endOffset > oldIndex) {
+ _endOffset -= 1;
+ }
+}
+
+#pragma mark - Mutations
+
+NS_INLINE HTMLNode * GetHighestPartiallyContainedChild(HTMLNode *node, HTMLNode *root)
+{
+ if (node == root) {
+ return nil;
+ }
+
+ while (node.parentNode != root) {
+ node = node.parentNode;
+ }
+ return node;
+}
+
+NS_INLINE HTMLCharacterData * CloneCharachterData(HTMLNode *node, NSUInteger start, NSUInteger length, BOOL delete)
+{
+ HTMLCharacterData *clone = (HTMLCharacterData *)[node copy];
+ NSRange range = NSMakeRange(start, length);
+ [clone setData:[clone.data substringWithRange:range]];
+
+ if (delete) {
+ [(HTMLCharacterData *)node deleteDataInRange:range];
+ }
+
+ return clone;
+}
+
+- (void)deleteContents
+{
+ if (self.isCollapsed) {
+ return;
+ }
+
+ if (_startContainer == _endContainer && [_startContainer isKindOfClass:[HTMLCharacterData class]]) {
+ [(HTMLCharacterData *)_startContainer deleteDataInRange:NSMakeRange(_startOffset, _endOffset - _startOffset)];
+ return;
+ }
+
+ HTMLNode *commonAncestor = self.commonAncestorContainer;
+
+ NSMutableArray *containedNodes = [NSMutableArray array];
+
+ HTMLNode *node = FollowingNode(_startContainer, commonAncestor);
+ while (node) {
+ if ([self containsNode:node]) {
+ [containedNodes addObject:node];
+ node = FollowingNodeSkippingChildren(node, commonAncestor);
+ } else {
+ node = FollowingNode(node, commonAncestor);
+ }
+ }
+
+ HTMLNode *newNode = _startContainer;
+ NSUInteger newOffset = _startOffset;
+
+ if (![_startContainer containsNode:_endContainer]) {
+ HTMLNode *referenceNode = _startContainer;
+ while (referenceNode.parentNode) {
+ if ([referenceNode.parentNode containsNode:_endContainer]) {
+ newNode = referenceNode.parentNode;
+ newOffset = referenceNode.index + 1;
+ break;
+ }
+ referenceNode = referenceNode.parentNode;
+ }
+ }
+
+ if ([_startContainer isKindOfClass:[HTMLCharacterData class]]) {
+ [(HTMLCharacterData *)_startContainer deleteDataInRange:NSMakeRange(_startOffset, _startContainer.length - _startOffset)];
+ }
+
+ for (HTMLNode *node in containedNodes) {
+ [node removeFromParentNode];
+ }
+
+ if ([_endContainer isKindOfClass:[HTMLCharacterData class]]) {
+ [(HTMLCharacterData *)_endContainer deleteDataInRange:NSMakeRange(0, _endOffset)];
+ }
+
+ [self setStartNode:newNode startOffset:newOffset];
+ [self setEndNode:newNode endOffset:newOffset];
+}
+
+- (HTMLDocumentFragment *)extractContents
+{
+ HTMLDocumentFragment *fragment = [[HTMLDocumentFragment alloc] initWithDocument:_ownerDocument];
+
+ // Nothing todo
+ if (self.isCollapsed) {
+ return fragment;
+ }
+
+ // Same character data container, handle that and return
+ if (_startContainer == _endContainer && [_startContainer isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_startContainer, _startOffset, _endOffset - _startOffset, YES);
+ [fragment appendNode:clone];
+
+ return fragment;
+ }
+
+ HTMLNode *commonAncestor = self.commonAncestorContainer;
+ HTMLNode *firstPartiallyContainedChild = GetHighestPartiallyContainedChild(_startContainer, commonAncestor);
+ HTMLNode *lastPartiallyContainedChild = GetHighestPartiallyContainedChild(_endContainer, commonAncestor);
+ NSArray *containedNodes = [self containedNodes:commonAncestor];
+
+ HTMLNode *newNode = _startContainer;
+ NSUInteger newOffset = _startOffset;
+
+ if (![_startContainer containsNode:_endContainer]) {
+ HTMLNode *referenceNode = _startContainer;
+ while (referenceNode.parentNode) {
+ if ([referenceNode.parentNode containsNode:_endContainer]) {
+ newNode = referenceNode.parentNode;
+ newOffset = referenceNode.index + 1;
+ break;
+ }
+ referenceNode = referenceNode.parentNode;
+ }
+ }
+
+ if ([firstPartiallyContainedChild isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_startContainer, _startOffset, _startContainer.length - _startOffset, YES);
+ [fragment appendNode:clone];
+ } else if (firstPartiallyContainedChild != nil) {
+ HTMLNode *clone = [firstPartiallyContainedChild copy];
+ [fragment appendNode:clone];
+
+ HTMLRange *subRange = [[HTMLRange alloc] initWithDocument:_ownerDocument
+ startContainer:_startContainer
+ startOffset:_startOffset
+ endContainer:firstPartiallyContainedChild
+ endOffset:firstPartiallyContainedChild.length];
+ HTMLDocumentFragment *subFragment = [subRange extractContents];
+ [clone appendNode:subFragment];
+ }
+
+ for (HTMLNode *node in containedNodes) {
+ [fragment appendNode:node];
+ }
+
+ if ([lastPartiallyContainedChild isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_endContainer, 0, _endOffset, YES);
+ [fragment appendNode:clone];
+ } else if (lastPartiallyContainedChild != nil) {
+ HTMLNode *clone = [lastPartiallyContainedChild copy];
+ [fragment appendNode:clone];
+
+ HTMLRange *subRange = [[HTMLRange alloc] initWithDocument:_ownerDocument
+ startContainer:lastPartiallyContainedChild
+ startOffset:0
+ endContainer:_endContainer
+ endOffset:_endOffset];
+ HTMLDocumentFragment *subFragment = [subRange extractContents];
+ [clone appendNode:subFragment];
+ }
+
+ [self setStartNode:newNode startOffset:newOffset];
+ [self setEndNode:newNode endOffset:newOffset];
+
+ return fragment;
+}
+
+- (HTMLDocumentFragment *)cloneContents
+{
+ HTMLDocumentFragment *fragment = [[HTMLDocumentFragment alloc] initWithDocument:_ownerDocument];
+
+ // Nothing todo
+ if (self.isCollapsed) {
+ return fragment;
+ }
+
+ // Same character data container, handle that and return
+ if (_startContainer == _endContainer && [_startContainer isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_startContainer, _startOffset, _endOffset - _startOffset, NO);
+ [fragment appendNode:clone];
+ return fragment;
+ }
+
+ HTMLNode *commonAncestor = self.commonAncestorContainer;
+ HTMLNode *firstPartiallyContainedChild = GetHighestPartiallyContainedChild(_startContainer, commonAncestor);
+ HTMLNode *lastPartiallyContainedChild = GetHighestPartiallyContainedChild(_endContainer, commonAncestor);
+ NSArray *containedNodes = [self containedNodes:commonAncestor];
+
+ if ([firstPartiallyContainedChild isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_startContainer, _startOffset, _startContainer.length - _startOffset, NO);
+ [fragment appendNode:clone];
+ } else if (firstPartiallyContainedChild != nil) {
+ HTMLNode *clone = [firstPartiallyContainedChild copy];
+ [fragment appendNode:clone];
+
+ HTMLRange *subRange = [[HTMLRange alloc] initWithDocument:_ownerDocument
+ startContainer:_startContainer
+ startOffset:_startOffset
+ endContainer:firstPartiallyContainedChild
+ endOffset:firstPartiallyContainedChild.length];
+ HTMLDocumentFragment *subFragment = [subRange cloneContents];
+ [clone appendNode:subFragment];
+ }
+
+ for (HTMLNode *node in containedNodes) {
+ HTMLNode *clone = [node cloneNodeDeep:YES];
+ [fragment appendNode:clone];
+ }
+
+ if ([lastPartiallyContainedChild isKindOfClass:[HTMLCharacterData class]]) {
+ HTMLCharacterData *clone = CloneCharachterData(_endContainer, 0, _endOffset, NO);
+ [fragment appendNode:clone];
+ } else if (lastPartiallyContainedChild != nil) {
+ HTMLNode *clone = [lastPartiallyContainedChild copy];
+ [fragment appendNode:clone];
+
+ HTMLRange *subRange = [[HTMLRange alloc] initWithDocument:_ownerDocument
+ startContainer:lastPartiallyContainedChild
+ startOffset:0
+ endContainer:_endContainer
+ endOffset:_endOffset];
+ HTMLDocumentFragment *subFragment = [subRange cloneContents];
+ [clone appendNode:subFragment];
+ }
+
+ return fragment;
+}
+
+#pragma mark - Insertion & Surround
+
+NS_INLINE void CheckValidInsertionNode(HTMLNode *startContainer, HTMLNode *node, NSString *cmd)
+{
+ if (startContainer == node || startContainer.nodeType == HTMLNodeComment ||
+ (startContainer.nodeType == HTMLNodeText && startContainer.parentNode == nil)) {
+ [NSException raise:HTMLKitHierarchyRequestError
+ format:@"%@: Hierarchy Request Error, cannot insert node into range: %@", cmd, node];
+ }
+}
+
+- (void)insertNode:(HTMLNode *)node
+{
+ CheckValidInsertionNode(_startContainer, node, NSStringFromSelector(_cmd));
+
+ HTMLNode *referenceNode = nil;
+
+ if (_startContainer.nodeType == HTMLNodeText) {
+ referenceNode = _startContainer;
+ } else {
+ referenceNode = [_startContainer childNodeAtIndex:_startOffset];
+ }
+
+ HTMLNode *parent = _startContainer;
+ if (referenceNode != nil) {
+ parent = referenceNode.parentNode;
+ }
+
+ if (_startContainer.nodeType == HTMLNodeText) {
+ referenceNode = [(HTMLText *)_startContainer splitTextAtOffset:_startOffset];
+ }
+
+ if (node == referenceNode) {
+ referenceNode = referenceNode.nextSibling;
+ }
+
+ [node removeFromParentNode];
+
+ NSUInteger newOffset = referenceNode ? referenceNode.index : parent.length;
+ newOffset += (node.nodeType == HTMLNodeDocumentFragment) ? node.length : 1;
+
+ [parent insertNode:node beforeChildNode:referenceNode];
+
+ if (self.isCollapsed) {
+ [self setEndNode:parent endOffset:newOffset];
+ }
+}
+
+NS_INLINE void CheckValidSurroundState(HTMLRange *range, NSString *cmd)
+{
+ for (HTMLNode *node in GetAncestorNodes(range.startContainer)) {
+ if ([node containsNode:range.endContainer]) {
+ return;
+ }
+
+ if (node.nodeType != HTMLNodeText) {
+ [NSException raise:HTMLKitInvalidStateError
+ format:@"%@: Invalid State Error, cannot surround range with a partially-contaied non-text node.", cmd];
+ }
+ };
+
+ for (HTMLNode *node in GetAncestorNodes(range.endContainer)) {
+ if ([node containsNode:range.startContainer]) {
+ return;
+ }
+
+ if (node.nodeType != HTMLNodeText) {
+ [NSException raise:HTMLKitInvalidNodeTypeError
+ format:@"%@: Invalid State Error, cannot surround range with a partially-contaied non-text node.", cmd];
+ }
+ };
+}
+
+NS_INLINE void CheckValidSurroundNodeType(HTMLNode *node, NSString *cmd)
+{
+ if (node == nil || node.nodeType == HTMLNodeDocumentType || node.nodeType == HTMLNodeDocument ||
+ node.nodeType == HTMLNodeDocumentFragment) {
+ [NSException raise:HTMLKitInvalidNodeTypeError
+ format:@"%@: Invalid Node Type Error, %@ is not a valid new parent for a range.",
+ cmd, node];
+ }
+}
+
+- (void)surroundContents:(HTMLNode *)newParent
+{
+ CheckValidSurroundState(self, NSStringFromSelector(_cmd));
+
+ CheckValidSurroundNodeType(newParent, NSStringFromSelector(_cmd));
+
+ HTMLDocumentFragment *fragment = [self extractContents];
+ [newParent removeAllChildNodes];
+
+ [self insertNode:newParent];
+ [newParent appendNode:fragment];
+ [self selectNode:newParent];
+}
+
+#pragma mark - Description & Stringifier
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p (%@, %lu), (%@, %lu)>", self.class, self,
+ _startContainer, (unsigned long)_startOffset,
+ _endContainer, (unsigned long)_endOffset];
+}
+
+- (NSString *)textContent
+{
+ HTMLNode *lastNode = nil;
+ if ([_endContainer isKindOfClass:[HTMLCharacterData class]]) {
+ lastNode = FollowingNodeSkippingChildren(_endContainer, _ownerDocument);
+ } else if (_endContainer.childNodesCount > _endOffset) {
+ lastNode = [_endContainer childNodeAtIndex:_endOffset];
+ } else {
+ lastNode = FollowingNodeSkippingChildren(_endContainer, _ownerDocument);
+ }
+
+ NSMutableString *content = [NSMutableString string];
+ for (HTMLNode *node = _startContainer; node != lastNode; node = FollowingNode(node, _ownerDocument)) {
+ if (node.nodeType == HTMLNodeText) {
+ HTMLText *text = (HTMLText *)node;
+
+ if (node == _startContainer) {
+ NSString *string = [text substringDataWithRange:NSMakeRange(_startOffset, _startContainer.length - _startOffset)];
+ [content appendString:string];
+ } else if (node == _endContainer) {
+ NSString *string = [text substringDataWithRange:NSMakeRange(0, _endOffset)];
+ [content appendString:string];
+ } else {
+ [content appendString:text.data];
+ }
+ }
+ }
+
+ return content;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLSerializer.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLSerializer.m
new file mode 100644
index 0000000..9a82834
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLSerializer.m
@@ -0,0 +1,155 @@
+//
+// HTMLSerializer.m
+// HTMLKit
+//
+// Created by Iska on 28.07.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import "HTMLSerializer.h"
+#import "HTMLDOM.h"
+#import "HTMLNode+Private.h"
+#import "HTMLTreeVisitor.h"
+#import "NSString+Private.h"
+
+#pragma mark - Serializer
+
+@interface HTMLSerializer ()
+{
+ HTMLNode *_root;
+ HTMLTreeVisitor *_treeVisitor;
+ NSUInteger _ignore;
+ NSMutableString *_result;
+}
+- (instancetype)initWithNode:(HTMLNode *)node;
+- (NSString *)serializeWithScope:(HTMLSerializationScope)scope;
+@end
+
+@implementation HTMLSerializer
+
++ (NSString *)serializeNode:(HTMLNode *)node scope:(HTMLSerializationScope)scope
+{
+ HTMLSerializer *serializer = [[HTMLSerializer alloc] initWithNode:node];
+ return [serializer serializeWithScope:scope];
+}
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithNode:(HTMLNode *)node
+{
+ self = [super init];
+ if (self) {
+ _root = node;
+ _treeVisitor = [[HTMLTreeVisitor alloc] initWithNode:node];
+ _result = [NSMutableString new];
+ _ignore = 0;
+ }
+ return self;
+}
+
+#pragma mark - Serialization
+
+- (NSString *)serializeWithScope:(HTMLSerializationScope)scope
+{
+ [_result setString:@""];
+
+ HTMLNodeVisitorBlock *nodeVisitor = [HTMLNodeVisitorBlock visitorWithEnterBlock:^(HTMLNode * node) {
+ if (scope == HTMLSerializationScopeChildrenOnly && node == _root) {
+ return;
+ }
+
+ if (_ignore > 0) {
+ return;
+ }
+
+ switch (node.nodeType) {
+ case HTMLNodeElement:
+ [self openElement:node.asElement];
+ break;
+ case HTMLNodeComment:
+ [self serializeComment:node.asComment];
+ break;
+ case HTMLNodeText:
+ [self serializeText:node.asText];
+ break;
+ case HTMLNodeDocumentFragment:
+ [self serializeDocumentType:node.asDocumentType];
+ break;
+ default:
+ break;
+ }
+ } leaveBlock:^(HTMLNode * _Nonnull node) {
+ if (scope == HTMLSerializationScopeChildrenOnly && node == _root) {
+ return;
+ }
+
+ switch (node.nodeType) {
+ case HTMLNodeElement:
+ if ([node.asElement.tagName isEqualToAny:@"area", @"base", @"basefont", @"bgsound", @"br", @"col", @"embed",
+ @"frame", @"hr", @"img", @"input", @"keygen", @"link", @"menuitem", @"meta", @"param", @"source",
+ @"track", @"wbr", nil]) {
+ _ignore--;
+ break;
+ }
+ [self closeElement:node.asElement];
+ default:
+ break;
+ }
+ }];
+
+ [_treeVisitor walkWithNodeVisitor:nodeVisitor];
+ return [_result copy];
+}
+
+- (void)openElement:(HTMLElement *)element
+{
+ [_result appendFormat:@"<%@", element.tagName];
+ [element.attributes enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, BOOL *stop) {
+ NSMutableString *escaped = [value mutableCopy];
+ [escaped replaceOccurrencesOfString:@"&" withString:@"&" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"0x00A0" withString:@" " options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"\"" withString:@""" options:0 range:NSMakeRange(0, escaped.length)];
+
+ [_result appendFormat:@" %@=\"%@\"", key, escaped];
+ }];
+
+ [_result appendString:@">"];
+
+ if ([element.tagName isEqualToAny:@"area", @"base", @"basefont", @"bgsound", @"br", @"col", @"embed",
+ @"frame", @"hr", @"img", @"input", @"keygen", @"link", @"menuitem", @"meta", @"param", @"source",
+ @"track", @"wbr", nil]) {
+ _ignore++;
+ }
+}
+
+- (void)closeElement:(HTMLElement *)element
+{
+ [_result appendFormat:@"%@>", element.tagName];
+}
+
+- (void)serializeText:(HTMLText *)text
+{
+ if ([text.parentElement.tagName isEqualToAny:@"style", @"script", @"xmp", @"iframe", @"noembed", @"noframes",
+ @"plaintext", @"noscript", nil]) {
+ [_result appendString:text.data];
+ } else {
+ NSMutableString *escaped = [text.data mutableCopy];
+ [escaped replaceOccurrencesOfString:@"&" withString:@"&" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"\00A0" withString:@" " options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@"<" withString:@"<" options:0 range:NSMakeRange(0, escaped.length)];
+ [escaped replaceOccurrencesOfString:@">" withString:@">" options:0 range:NSMakeRange(0, escaped.length)];
+ [_result appendString:escaped];
+ }
+}
+
+- (void)serializeComment:(HTMLComment *)comment
+{
+ [_result appendFormat:@"", comment.data];
+}
+
+- (void)serializeDocumentType:(HTMLDocumentType *)doctype
+{
+ [_result appendFormat:@"", doctype.name];
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLStackOfOpenElements.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLStackOfOpenElements.m
new file mode 100644
index 0000000..7420537
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLStackOfOpenElements.m
@@ -0,0 +1,374 @@
+//
+// HTMLStackOfOpenElements.m
+// HTMLKit
+//
+// Created by Iska on 08/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLStackOfOpenElements.h"
+#import "NSString+HTMLKit.h"
+#import "HTMLElementTypes.h"
+#import "HTMLTemplate.h"
+
+@interface HTMLStackOfOpenElements ()
+{
+ NSMutableArray *_stack;
+}
+@end
+
+@implementation HTMLStackOfOpenElements
+
+#pragma mark - Init
+
+- (instancetype)init
+{
+ self = [super init];
+ if (self) {
+ _stack = [NSMutableArray new];
+ }
+ return self;
+}
+
+#pragma mark - Node Access
+
+- (HTMLElement *)currentNode
+{
+ return _stack.lastObject;
+}
+
+- (HTMLElement *)firstNode
+{
+ return _stack.firstObject;
+}
+
+- (HTMLElement *)lastNode
+{
+ return _stack.lastObject;
+}
+
+- (id)objectAtIndexedSubscript:(NSUInteger)index;
+{
+ return [_stack objectAtIndex:index];
+}
+
+- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx
+{
+ [_stack setObject:obj atIndexedSubscript:idx];
+}
+
+- (NSUInteger)indexOfElement:(id)node
+{
+ return [_stack indexOfObject:node];
+}
+
+- (void)pushElement:(HTMLElement *)element
+{
+ [_stack addObject:element];
+}
+
+- (void)removeElement:(id)element
+{
+ [_stack removeObject:element];
+}
+
+- (BOOL)containsElement:(id)element
+{
+ return [_stack containsObject:element];
+}
+
+- (BOOL)containsElementWithTagName:(NSString *)tagName
+{
+ NSUInteger index = [_stack indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
+ if ([[(HTMLElement *)obj tagName] isEqualToString:tagName]) {
+ *stop = YES;
+ return YES;
+ }
+ return NO;
+ }];
+ return index != NSNotFound;
+}
+
+- (void)insertElement:(HTMLElement *)element atIndex:(NSUInteger)index
+{
+ [_stack insertObject:element atIndex:index];
+}
+
+- (void)replaceElementAtIndex:(NSUInteger)index withElement:(HTMLElement *)element
+{
+ [_stack replaceObjectAtIndex:index withObject:element];
+}
+
+#pragma mark - Pops
+
+- (void)popCurrentNode
+{
+ [_stack removeLastObject];
+}
+
+- (void)popElementsUntilElementPoppedWithTagName:(NSString *)tagName
+{
+ while (self.currentNode) {
+ if (self.currentNode.htmlNamespace == HTMLNamespaceHTML &&
+ [self.currentNode.tagName isEqualToString:tagName]) {
+ break;
+ }
+ [_stack removeLastObject];
+ }
+ [_stack removeLastObject];
+}
+
+- (void)popElementsUntilAnElementPoppedWithAnyOfTagNames:(NSArray *)tagNames
+{
+ while (self.currentNode) {
+ if (self.currentNode.htmlNamespace == HTMLNamespaceHTML &&
+ [tagNames containsObject:self.currentNode.tagName]) {
+ break;
+ }
+ [_stack removeLastObject];
+ }
+ [_stack removeLastObject];
+}
+
+- (void)popElementsUntilElementPopped:(HTMLElement *)element
+{
+ while (self.currentNode && ![self.currentNode isEqual:element]) {
+ [_stack removeLastObject];
+ }
+ [_stack removeLastObject];
+}
+
+- (void)popElementsUntilTemplateElementPopped
+{
+ while (self.currentNode && ![self.currentNode isKindOfClass:[HTMLTemplate class]]) {
+ [_stack removeLastObject];
+ }
+ [_stack removeLastObject];
+}
+
+- (void)clearBackToTableContext
+{
+ while (self.currentNode && ![self.currentNode.tagName isEqualToAny:@"table", @"template", @"html", nil]) {
+ [_stack removeLastObject];
+ }
+}
+
+- (void)clearBackToTableBodyContext
+{
+ while (![self.currentNode.tagName isEqualToAny:@"tbody", @"tfoot", @"thead", @"template", @"html", nil]) {
+ [_stack removeLastObject];
+ }
+}
+
+- (void)clearBackToTableRowContext
+{
+ while (![self.currentNode.tagName isEqualToAny:@"tr", @"template", @"html", nil]) {
+ [_stack removeLastObject];
+ }
+}
+
+- (void)popAll
+{
+ [_stack removeAllObjects];
+}
+
+#pragma mark - Element Scope
+
+NS_INLINE BOOL IsSpecificScopeElement(HTMLElement *element)
+{
+ switch (element.htmlNamespace) {
+ case HTMLNamespaceHTML:
+ return [element.tagName isEqualToAny:@"applet", @"caption", @"html", @"table", @"td", @"th", @"marquee", @"object", @"template", nil];
+ case HTMLNamespaceMathML:
+ return [element.tagName isEqualToAny:@"mi", @"mo", @"mn", @"ms", @"mtext", @"annotation-xml", nil];
+ case HTMLNamespaceSVG:
+ return [element.tagName isEqualToAny:@"foreignObject", @"desc", @"title", nil];
+ }
+}
+
+NS_INLINE BOOL IsHeaderElement(HTMLElement *element)
+{
+ if (element.htmlNamespace != HTMLNamespaceHTML) {
+ return NO;
+ }
+
+ return [element.tagName isEqualToAny:@"h1", @"h2", @"h3", @"h4", @"h5", @"h6", nil];
+}
+
+NS_INLINE BOOL IsTableScopeElement(HTMLElement *element)
+{
+ if (element.htmlNamespace != HTMLNamespaceHTML) {
+ return NO;
+ }
+
+ return [element.tagName isEqualToAny:@"html", @"table", @"template", nil];
+}
+
+NS_INLINE BOOL IsListItemScopeElement(HTMLElement *element)
+{
+ if (element.htmlNamespace != HTMLNamespaceHTML) {
+ return NO;
+ }
+
+ return [element.tagName isEqualToAny:@"ol", @"ul", nil];
+}
+
+NS_INLINE BOOL IsSelectScopeElement(HTMLElement *element)
+{
+ if (element.htmlNamespace != HTMLNamespaceHTML) {
+ return NO;
+ }
+
+ return ![element.tagName isEqualToString:@"optgroup"] && ![element.tagName isEqualToString:@"option"];
+}
+
+NS_INLINE BOOL IsButtonScopeElement(HTMLElement *element)
+{
+ if (element.htmlNamespace != HTMLNamespaceHTML) {
+ return NO;
+ }
+
+ return [element.tagName isEqualToString:@"button"];
+}
+
+- (HTMLElement *)hasElementInScopeWithTagName:(NSString *)tagName;
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagName isEqualToString:node.tagName]) {
+ return node;
+ }
+ if (IsSpecificScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasHeaderElementInScope
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (IsHeaderElement(node)) {
+ return node;
+ }
+ if (IsSpecificScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasElementInTableScopeWithTagName:(NSString *)tagName
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagName isEqualToString:node.tagName]) {
+ return node;
+ }
+ if (IsTableScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasElementInTableScopeWithAnyOfTagNames:(NSArray *)tagNames
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagNames containsObject:node.tagName]) {
+ return node;
+ }
+ if (IsTableScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasElementInListItemScopeWithTagName:(NSString *)tagName
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagName isEqualToString:node.tagName]) {
+ return node;
+ }
+ if (IsSpecificScopeElement(node) || IsListItemScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasElementInButtonScopeWithTagName:(NSString *)tagName
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagName isEqualToString:node.tagName]) {
+ return node;
+ }
+ if (IsSpecificScopeElement(node) || IsButtonScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)hasElementInSelectScopeWithTagName:(NSString *)tagName
+{
+ for (HTMLElement *node in _stack.reverseObjectEnumerator) {
+ if (node.htmlNamespace == HTMLNamespaceHTML && [tagName isEqualToString:node.tagName]) {
+ return node;
+ }
+ if (IsSelectScopeElement(node)) {
+ return nil;
+ }
+ }
+ return nil;
+}
+
+- (HTMLElement *)furthestBlockAfterIndex:(NSUInteger)index
+{
+ for (NSUInteger i = index; i < _stack.count; i++) {
+ HTMLElement *element = _stack[i];
+ if (IsSpecialElement(element)) {
+ return element;
+ }
+ }
+ return nil;
+}
+
+#pragma mark - Count
+
+- (NSUInteger)count
+{
+ return _stack.count;
+}
+
+- (BOOL)isEmpy
+{
+ return _stack.count == 0;
+}
+
+#pragma mark - Enumeraiton
+
+- (NSEnumerator *)enumerator
+{
+ return _stack.objectEnumerator;
+}
+
+- (NSEnumerator *)reverseObjectEnumerator
+{
+ return _stack.reverseObjectEnumerator;
+}
+
+#pragma mark - NSFastEnumeration
+
+- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len
+{
+ return [_stack countByEnumeratingWithState:state objects:buffer count:len];
+}
+
+#pragma mark - Description
+
+- (NSString *)description
+{
+ return _stack.description;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTagToken.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTagToken.m
new file mode 100644
index 0000000..31be545
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTagToken.m
@@ -0,0 +1,128 @@
+//
+// HTMLTagToken.m
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import "HTMLTagToken.h"
+
+@interface HTMLTagToken ()
+{
+ NSMutableString *_tagName;
+ HTMLOrderedDictionary *_attributes;
+}
+
+@end
+
+@implementation HTMLTagToken
+@synthesize tagName = _tagName;
+
+- (instancetype)initWithTagName:(NSString *)tagName
+{
+ return [self initWithTagName:tagName attributes:nil];
+}
+
+- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
+{
+ self = [super init];
+ if (self) {
+ _tagName = [tagName mutableCopy];
+ if (attributes != nil) {
+ _attributes = [HTMLOrderedDictionary new];
+ [_attributes addEntriesFromDictionary:attributes];
+ }
+ }
+ return self;
+}
+
+- (void)appendStringToTagName:(NSString *)string
+{
+ if (_tagName == nil) {
+ _tagName = [NSMutableString new];
+ }
+ [_tagName appendString:string];
+}
+
+@end
+
+#pragma mark - Start Tag Token
+
+@implementation HTMLStartTagToken
+
+- (instancetype)initWithTagName:(NSString *)tagName
+{
+ return [self initWithTagName:tagName attributes:nil];
+}
+
+- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
+{
+ self = [super initWithTagName:tagName attributes:attributes];
+ if (self) {
+ self.type = HTMLTokenTypeStartTag;
+ }
+ return self;
+}
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLStartTagToken *token = (HTMLStartTagToken *)other;
+
+ return (bothNilOrEqual(self.tagName, token.tagName) &&
+ bothNilOrEqual(self.attributes, token.attributes));
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.tagName.hash + self.attributes.hash;
+}
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p TagName=%@ Attributes=%@>", self.class, self, self.tagName, self.attributes];
+}
+
+@end
+
+#pragma mark - End Tag Token
+
+@implementation HTMLEndTagToken
+
+- (instancetype)initWithTagName:(NSString *)tagName
+{
+ return [self initWithTagName:tagName attributes:nil];
+}
+
+- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes
+{
+ self = [super initWithTagName:tagName attributes:attributes];
+ if (self) {
+ self.type = HTMLTokenTypeEndTag;
+ }
+ return self;
+}
+
+- (BOOL)isEqual:(id)other
+{
+ if ([other isKindOfClass:[self class]]) {
+ HTMLStartTagToken *token = (HTMLStartTagToken *)other;
+ return bothNilOrEqual(self.tagName, token.tagName);
+ }
+ return NO;
+}
+
+- (NSUInteger)hash
+{
+ return self.tagName.hash;
+}
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p TagName=%@ Attributes=%@>", self.class, self, self.tagName, self.attributes];
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTemplate.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTemplate.m
new file mode 100644
index 0000000..aa6fe59
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTemplate.m
@@ -0,0 +1,41 @@
+//
+// HTMLTemplate.m
+// HTMLKit
+//
+// Created by Iska on 12/04/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLTemplate.h"
+#import "HTMLDocument.h"
+#import "HTMLNode+Private.h"
+
+@implementation HTMLTemplate
+
+- (instancetype)init
+{
+ self = [super initWithTagName:@"template"];
+ return self;
+}
+
+- (void)setOwnerDocument:(HTMLDocument *)ownerDocument
+{
+ [super setOwnerDocument:ownerDocument];
+ [self.ownerDocument adoptNode:self.content];
+}
+
+- (HTMLDocumentFragment *)content
+{
+ if (_content == nil) {
+ _content = [[HTMLDocumentFragment alloc] initWithDocument:self.ownerDocument.associatedInertTemplateDocument];
+ }
+
+ return _content;
+}
+
+- (NSOrderedSet *)childNodes
+{
+ return self.content.childNodes;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLText.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLText.m
new file mode 100644
index 0000000..1e4d05b
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLText.m
@@ -0,0 +1,76 @@
+//
+// HTMLText.m
+// HTMLKit
+//
+// Created by Iska on 26/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLText.h"
+#import "HTMLElement.h"
+#import "NSString+Private.h"
+#import "HTMLCharacterData+Private.h"
+#import "HTMLKitDOMExceptions.h"
+#import "HTMLDocument+Private.h"
+
+@implementation HTMLText
+
+- (instancetype)init
+{
+ return [self initWithData:@""];
+}
+
+- (instancetype)initWithData:(NSString *)data
+{
+ return [super initWithName:@"#text" type:HTMLNodeText data:data];
+}
+
+- (void)appendString:(NSString *)string
+{
+ [self appendData:string];
+}
+
+NS_INLINE void CheckValidOffset(HTMLNode *node, NSUInteger offset, NSString *cmd)
+{
+ if (offset > node.length) {
+ [NSException raise:HTMLKitIndexSizeError
+ format:@"%@: Index Size Error, invalid offset %lu for splitting text node %@.",
+ cmd, (unsigned long)offset, node];
+ }
+}
+
+- (HTMLText *)splitTextAtOffset:(NSUInteger)offset
+{
+ CheckValidOffset(self, offset, NSStringFromSelector(_cmd));
+
+ NSUInteger length = self.length;
+ NSUInteger count = length - offset;
+ NSRange range = NSMakeRange(offset, count);
+
+ NSString *newData = [self.data substringWithRange:range];
+ HTMLText *newNode = [[HTMLText alloc] initWithData:newData];
+ [self.ownerDocument adoptNode:newNode];
+
+ HTMLNode *parent = self.parentNode;
+ if (parent != nil) {
+ [parent insertNode:newNode beforeChildNode:self.nextSibling];
+ [self.ownerDocument didInsertNewTextNode:newNode intoParent:parent afterSplittingTextNode:self atOffset:offset];
+ }
+
+ [self deleteDataInRange:range];
+
+ if (parent != nil) {
+ [self.ownerDocument clampRangesAfterSplittingTextNode:self atOffset:offset];
+ }
+
+ return newNode;
+}
+
+#pragma mark - Description
+
+- (NSString *)description
+{
+ return [NSString stringWithFormat:@"<%@: %p \"%@\">", self.class, self, self.data];
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLToken.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLToken.m
new file mode 100644
index 0000000..ec4f4d0
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLToken.m
@@ -0,0 +1,91 @@
+//
+// HTMLToken.m
+// HTMLKit
+//
+// Created by Iska on 20/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import "HTMLToken.h"
+
+@interface HTMLToken ()
+{
+ HTMLTokenType _type;
+}
+
+@end
+
+@implementation HTMLToken
+@synthesize type = _type;
+
+- (BOOL)isDoctypeToken
+{
+ return _type == HTMLTokenTypeDoctype;
+}
+
+- (BOOL)isStartTagToken
+{
+ return _type == HTMLTokenTypeStartTag;
+}
+
+- (BOOL)isEndTagToken
+{
+ return _type == HTMLTokenTypeEndTag;
+}
+
+- (BOOL)isCommentToken
+{
+ return _type == HTMLTokenTypeComment;
+}
+
+- (BOOL)isCharacterToken
+{
+ return _type == HTMLTokenTypeCharacter;
+}
+
+- (BOOL)isEOFToken
+{
+ return _type == HTMLTokenTypeEOF;
+}
+
+- (BOOL)isParseError
+{
+ return _type == HTMLTokenTypeParseError;
+}
+
+- (HTMLDOCTYPEToken *)asDoctypeToken
+{
+ return (HTMLDOCTYPEToken *)self;
+}
+
+- (HTMLTagToken *)asTagToken
+{
+ return (HTMLTagToken *)self;
+}
+
+- (HTMLStartTagToken *)asStartTagToken
+{
+ return (HTMLStartTagToken *)self;
+}
+
+- (HTMLEndTagToken *)asEndTagToken
+{
+ return (HTMLEndTagToken *)self;
+}
+
+- (HTMLCommentToken *)asCommentToken
+{
+ return (HTMLCommentToken *)self;
+}
+
+- (HTMLCharacterToken *)asCharacterToken
+{
+ return (HTMLCharacterToken *)self;
+}
+
+- (HTMLParseErrorToken *)asParseError
+{
+ return (HTMLParseErrorToken *)self;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizer.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizer.m
new file mode 100644
index 0000000..bcf854e
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizer.m
@@ -0,0 +1,2622 @@
+//
+// HTMLTokenizer.m
+// HTMLKit
+//
+// Created by Iska on 19/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import "HTMLTokenizer.h"
+#import "HTMLInputStreamReader.h"
+#import "HTMLTokens.h"
+#import "HTMLParser.h"
+#import "HTMLTokenizerStates.h"
+#import "HTMLTokenizerCharacters.h"
+#import "HTMLTokenizerEntities.h"
+#import "HTMLParser+Private.h"
+
+@interface HTMLTokenizer ()
+{
+ HTMLTokenizerState _currentState;
+
+ /* Input Stream & Tokens Queue */
+ HTMLInputStreamReader *_inputStreamReader;
+ NSMutableArray *_tokens;
+
+ /* Character Reference */
+ HTMLTokenizerState _characterReferenceReturnState;
+ unsigned long long _characterReferenceCode;
+ BOOL _characterReferenceOverflow;
+
+ /* Pending Tokens & Attributes*/
+ HTMLTagToken *_currentTagToken;
+ HTMLCharacterToken *_currentCharacterToken;
+ HTMLCommentToken *_currentCommentToken;
+ HTMLDOCTYPEToken *_currentDoctypeToken;
+ NSMutableString *_currentAttributeName;
+ NSMutableString *_currentAttributeValue;
+ BOOL _selfClosingFlagAknowledged;
+
+ /* Aux */
+ NSString *_lastStartTagName;
+ NSMutableString *_temporaryBuffer;
+
+ BOOL _eof;
+}
+@end
+
+@implementation HTMLTokenizer
+@synthesize state = _currentState;
+@synthesize parseErrorCallback = _parseErrorCallback;
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithString:(NSString *)string
+{
+ self = [super init];
+ if (self) {
+ _currentState = HTMLTokenizerStateData;
+ _characterReferenceReturnState = _currentState;
+
+ _tokens = [NSMutableArray new];
+ _inputStreamReader = [[HTMLInputStreamReader alloc] initWithString:string];
+ __weak HTMLTokenizer *weakSelf = self;
+ _inputStreamReader.errorCallback = ^ (NSString *code, NSString *details) {
+ [weakSelf emitParseError:code details:@"%@", details];
+ };
+ }
+ return self;
+}
+
+#pragma mark - Accessor
+
+- (NSString *)string
+{
+ return _inputStreamReader.string;
+}
+
+#pragma mark - State Machine
+
+- (id)nextObject
+{
+ @autoreleasepool {
+ while (_eof == NO && _tokens.count == 0) {
+ [self read];
+ }
+ HTMLToken *nextToken = [_tokens firstObject];
+ if (_tokens.count > 0) {
+ [_tokens removeObjectAtIndex:0];
+ }
+ return nextToken;
+ }
+}
+
+- (void)read
+{
+ switch (_currentState) {
+ case HTMLTokenizerStateData:
+ return [self HTMLTokenizerStateData];
+ case HTMLTokenizerStateRCDATA:
+ return [self HTMLTokenizerStateRCDATA];
+ case HTMLTokenizerStateRAWTEXT:
+ return [self HTMLTokenizerStateRAWTEXT];
+ case HTMLTokenizerStateScriptData:
+ return [self HTMLTokenizerStateScriptData];
+ case HTMLTokenizerStatePLAINTEXT:
+ return [self HTMLTokenizerStatePLAINTEXT];
+ case HTMLTokenizerStateTagOpen:
+ return [self HTMLTokenizerStateTagOpen];
+ case HTMLTokenizerStateEndTagOpen:
+ return [self HTMLTokenizerStateEndTagOpen];
+ case HTMLTokenizerStateTagName:
+ return [self HTMLTokenizerStateTagName];
+ case HTMLTokenizerStateRCDATALessThanSign:
+ return [self HTMLTokenizerStateRCDATALessThanSign];
+ case HTMLTokenizerStateRCDATAEndTagOpen:
+ return [self HTMLTokenizerStateRCDATAEndTagOpen];
+ case HTMLTokenizerStateRCDATAEndTagName:
+ return [self HTMLTokenizerStateRCDATAEndTagName];
+ case HTMLTokenizerStateRAWTEXTLessThanSign:
+ return [self HTMLTokenizerStateRAWTEXTLessThanSign];
+ case HTMLTokenizerStateRAWTEXTEndTagOpen:
+ return [self HTMLTokenizerStateRAWTEXTEndTagOpen];
+ case HTMLTokenizerStateRAWTEXTEndTagName:
+ return [self HTMLTokenizerStateRAWTEXTEndTagName];
+ case HTMLTokenizerStateScriptDataLessThanSign:
+ return [self HTMLTokenizerStateScriptDataLessThanSign];
+ case HTMLTokenizerStateScriptDataEndTagOpen:
+ return [self HTMLTokenizerStateScriptDataEndTagOpen];
+ case HTMLTokenizerStateScriptDataEndTagName:
+ return [self HTMLTokenizerStateScriptDataEndTagName];
+ case HTMLTokenizerStateScriptDataEscapeStart:
+ return [self HTMLTokenizerStateScriptDataEscapeStart];
+ case HTMLTokenizerStateScriptDataEscapeStartDash:
+ return [self HTMLTokenizerStateScriptDataEscapeStartDash];
+ case HTMLTokenizerStateScriptDataEscaped:
+ return [self HTMLTokenizerStateScriptDataEscaped];
+ case HTMLTokenizerStateScriptDataEscapedDash:
+ return [self HTMLTokenizerStateScriptDataEscapedDash];
+ case HTMLTokenizerStateScriptDataEscapedDashDash:
+ return [self HTMLTokenizerStateScriptDataEscapedDashDash];
+ case HTMLTokenizerStateScriptDataEscapedLessThanSign:
+ return [self HTMLTokenizerStateScriptDataEscapedLessThanSign];
+ case HTMLTokenizerStateScriptDataEscapedEndTagOpen:
+ return [self HTMLTokenizerStateScriptDataEscapedEndTagOpen];
+ case HTMLTokenizerStateScriptDataEscapedEndTagName:
+ return [self HTMLTokenizerStateScriptDataEscapedEndTagName];
+ case HTMLTokenizerStateScriptDataDoubleEscapeStart:
+ return [self HTMLTokenizerStateScriptDataDoubleEscapeStart];
+ case HTMLTokenizerStateScriptDataDoubleEscaped:
+ return [self HTMLTokenizerStateScriptDataDoubleEscaped];
+ case HTMLTokenizerStateScriptDataDoubleEscapedDash:
+ return [self HTMLTokenizerStateScriptDataDoubleEscapedDash];
+ case HTMLTokenizerStateScriptDataDoubleEscapedDashDash:
+ return [self HTMLTokenizerStateScriptDataDoubleEscapedDashDash];
+ case HTMLTokenizerStateScriptDataDoubleEscapedLessThanSign:
+ return [self HTMLTokenizerStateScriptDataDoubleEscapedLessThanSign];
+ case HTMLTokenizerStateScriptDataDoubleEscapeEnd:
+ return [self HTMLTokenizerStateScriptDataDoubleEscapeEnd];
+ case HTMLTokenizerStateBeforeAttributeName:
+ return [self HTMLTokenizerStateBeforeAttributeName];
+ case HTMLTokenizerStateAttributeName:
+ return [self HTMLTokenizerStateAttributeName];
+ case HTMLTokenizerStateAfterAttributeName:
+ return [self HTMLTokenizerStateAfterAttributeName];
+ case HTMLTokenizerStateBeforeAttributeValue:
+ return [self HTMLTokenizerStateBeforeAttributeValue];
+ case HTMLTokenizerStateAttributeValueDoubleQuoted:
+ return [self HTMLTokenizerStateAttributeValueDoubleQuoted];
+ case HTMLTokenizerStateAttributeValueSingleQuoted:
+ return [self HTMLTokenizerStateAttributeValueSingleQuoted];
+ case HTMLTokenizerStateAttributeValueUnquoted:
+ return [self HTMLTokenizerStateAttributeValueUnquoted];
+ case HTMLTokenizerStateAfterAttributeValueQuoted:
+ return [self HTMLTokenizerStateAfterAttributeValueQuoted];
+ case HTMLTokenizerStateSelfClosingStartTag:
+ return [self HTMLTokenizerStateSelfClosingStartTag];
+ case HTMLTokenizerStateBogusComment:
+ return [self HTMLTokenizerStateBogusComment];
+ case HTMLTokenizerStateMarkupDeclarationOpen:
+ return [self HTMLTokenizerStateMarkupDeclarationOpen];
+ case HTMLTokenizerStateCommentStart:
+ return [self HTMLTokenizerStateCommentStart];
+ case HTMLTokenizerStateCommentStartDash:
+ return [self HTMLTokenizerStateCommentStartDash];
+ case HTMLTokenizerStateComment:
+ return [self HTMLTokenizerStateComment];
+ case HTMLTokenizerStateCommentLessThanSign:
+ return [self HTMLTokenizerStateCommentLessThanSign];
+ case HTMLTokenizerStateCommentLessThanSignBang:
+ return [self HTMLTokenizerStateCommentLessThanSignBang];
+ case HTMLTokenizerStateCommentLessThanSignBangDash:
+ return [self HTMLTokenizerStateCommentLessThanSignBangDash];
+ case HTMLTokenizerStateCommentLessThanSignBangDashDash:
+ return [self HTMLTokenizerStateCommentLessThanSignBangDashDash];
+ case HTMLTokenizerStateCommentEndDash:
+ return [self HTMLTokenizerStateCommentEndDash];
+ case HTMLTokenizerStateCommentEnd:
+ return [self HTMLTokenizerStateCommentEnd];
+ case HTMLTokenizerStateCommentEndBang:
+ return [self HTMLTokenizerStateCommentEndBang];
+ case HTMLTokenizerStateDOCTYPE:
+ return [self HTMLTokenizerStateDOCTYPE];
+ case HTMLTokenizerStateBeforeDOCTYPEName:
+ return [self HTMLTokenizerStateBeforeDOCTYPEName];
+ case HTMLTokenizerStateDOCTYPEName:
+ return [self HTMLTokenizerStateDOCTYPEName];
+ case HTMLTokenizerStateAfterDOCTYPEName:
+ return [self HTMLTokenizerStateAfterDOCTYPEName];
+ case HTMLTokenizerStateAfterDOCTYPEPublicKeyword:
+ return [self HTMLTokenizerStateAfterDOCTYPEPublicKeyword];
+ case HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier:
+ return [self HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier];
+ case HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted:
+ return [self HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted];
+ case HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted:
+ return [self HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted];
+ case HTMLTokenizerStateAfterDOCTYPEPublicIdentifier:
+ return [self HTMLTokenizerStateAfterDOCTYPEPublicIdentifier];
+ case HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers:
+ return [self HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers];
+ case HTMLTokenizerStateAfterDOCTYPESystemKeyword:
+ return [self HTMLTokenizerStateAfterDOCTYPESystemKeyword];
+ case HTMLTokenizerStateBeforeDOCTYPESystemIdentifier:
+ return [self HTMLTokenizerStateBeforeDOCTYPESystemIdentifier];
+ case HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted:
+ return [self HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted];
+ case HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted:
+ return [self HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted];
+ case HTMLTokenizerStateAfterDOCTYPESystemIdentifier:
+ return [self HTMLTokenizerStateAfterDOCTYPESystemIdentifier];
+ case HTMLTokenizerStateBogusDOCTYPE:
+ return [self HTMLTokenizerStateBogusDOCTYPE];
+ case HTMLTokenizerStateCDATASection:
+ return [self HTMLTokenizerStateCDATASection];
+ case HTMLTokenizerStateCDATASectionBracket:
+ return [self HTMLTokenizerStateCDATASectionBracket];
+ case HTMLTokenizerStateCDATASectionEnd:
+ return [self HTMLTokenizerStateCDATASectionEnd];
+ case HTMLTokenizerStateCharacterReference:
+ return [self HTMLTokenizerStateCharacterReference];
+ case HTMLTokenizerStateNamedCharacterReference:
+ return [self HTMLTokenizerStateNamedCharacterReference];
+ case HTMLTokenizerStateAmbiguousAmpersand:
+ return [self HTMLTokenizerStateAmbiguousAmpersand];
+ case HTMLTokenizerStateNumericCharacterReference:
+ return [self HTMLTokenizerStateNumericCharacterReference];
+ case HTMLTokenizerStateHexadecimalCharacterReferenceStart:
+ return [self HTMLTokenizerStateHexadecimalCharacterReferenceStart];
+ case HTMLTokenizerStateDecimalCharacterReferenceStart:
+ return [self HTMLTokenizerStateDecimalCharacterReferenceStart];
+ case HTMLTokenizerStateHexadecimalCharacterReference:
+ return [self HTMLTokenizerStateHexadecimalCharacterReference];
+ case HTMLTokenizerStateDecimalCharacterReference:
+ return [self HTMLTokenizerStateDecimalCharacterReference];
+ case HTMLTokenizerStateNumericCharacterReferenceEnd:
+ return [self HTMLTokenizerStateNumericCharacterReferenceEnd];
+ default:
+ break;
+ }
+}
+
+- (void)switchToState:(HTMLTokenizerState)state
+{
+ _currentState = state;
+}
+
+#pragma mark - Emits
+
+- (void)emitToken:(HTMLToken *)token
+{
+ if (_currentCharacterToken != nil) {
+ [_tokens addObject:_currentCharacterToken];
+ _currentCharacterToken = nil;
+ }
+ [_tokens addObject:token];
+}
+
+- (void)emitEOFToken
+{
+ [self emitToken:[HTMLEOFToken token]];
+ _eof = YES;
+}
+
+- (void)emitCurrentTagToken
+{
+ [self finalizeCurrentAttribute];
+
+ switch (_currentTagToken.type) {
+ case HTMLTokenTypeStartTag:
+ _lastStartTagName = _currentTagToken.tagName;
+ if (_currentTagToken.isSelfClosing) {
+ _selfClosingFlagAknowledged = NO;
+ }
+ break;
+ case HTMLTokenTypeEndTag:
+ if (_currentTagToken.attributes != nil) {
+ [self emitParseError:@"end-tag-with-attributes" details:@"End tag [%@]", _currentTagToken.tagName];
+ }
+ if (_currentTagToken.isSelfClosing) {
+ [self emitParseError:@"end-tag-with-trailing-solidus" details:@"End tag [%@]", _currentTagToken.tagName];
+ }
+ break;
+ default:
+ break;
+ }
+
+ [self emitToken:_currentTagToken];
+ _currentTagToken = nil;
+}
+
+- (void)emitCharacterToken:(UTF32Char)character
+{
+ [self emitCharacterTokenWithString:StringFromUTF32Char(character)];
+}
+
+- (void)emitCharacterTokenWithString:(NSString *)string
+{
+ if (string.length == 0) {
+ return;
+ }
+
+ if (_currentCharacterToken == nil) {
+ _currentCharacterToken = [HTMLCharacterToken new];
+ }
+
+ [_currentCharacterToken appendString:string];
+}
+
+- (void)emitParseError:(NSString *)code details:(NSString *)format, ... NS_FORMAT_FUNCTION(2, 3)
+{
+ if (!self.parseErrorCallback) {
+ return;
+ }
+
+ NSString *details = nil;
+
+ if (format) {
+ va_list args;
+ va_start(args, format);
+ details = [[NSString alloc] initWithFormat:format arguments:args];
+ va_end(args);
+ }
+
+ HTMLParseErrorToken *token = [[HTMLParseErrorToken alloc] initWithCode:code
+ details:details
+ location:_inputStreamReader.currentLocation];
+ self.parseErrorCallback(token);
+}
+
+#pragma mark - Token Checks
+
+- (BOOL)isCurrentEndTagTokenAppropriate
+{
+ return ([_currentTagToken isKindOfClass:[HTMLEndTagToken class]] &&
+ [_currentTagToken.tagName isEqualToString:_lastStartTagName]);
+}
+
+#pragma mark - Attributes
+
+- (void)appendToCurrentAttributeName:(NSString *)string
+{
+ if (_currentAttributeName == nil) {
+ _currentAttributeName = [NSMutableString new];
+ }
+ [_currentAttributeName appendString:string];
+}
+
+- (void)appendToCurrentAttributeValue:(NSString *)string
+{
+ if (_currentAttributeValue == nil) {
+ _currentAttributeValue = [NSMutableString new];
+ }
+ [_currentAttributeValue appendString:string];
+}
+
+- (void)finalizeCurrentAttribute
+{
+ if (_currentAttributeName != nil) {
+ if (_currentTagToken.attributes == nil) {
+ _currentTagToken.attributes = [HTMLOrderedDictionary new];
+ }
+
+ if (_currentTagToken.attributes[_currentAttributeName] != nil) {
+ [self emitParseError:@"duplicate-attribute"
+ details:@"Tag [%@] already contains an attrbitue with name [%@]", _currentTagToken, _currentAttributeName];
+ } else {
+ _currentTagToken.attributes[_currentAttributeName] = _currentAttributeValue ?: @"";
+ }
+ }
+ _currentAttributeName = nil;
+ _currentAttributeValue = nil;
+}
+
+#pragma mark - Character Reference
+
+- (void)flushCodePointsConsumedAsCharacterReference
+{
+ if (_characterReferenceReturnState == HTMLTokenizerStateAttributeValueUnquoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueSingleQuoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueDoubleQuoted) {
+ [self appendToCurrentAttributeValue:_temporaryBuffer];
+ } else {
+ [self emitCharacterTokenWithString:_temporaryBuffer];
+ }
+}
+
+#pragma mark - States
+
+- (void)HTMLTokenizerStateData
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case AMPERSAND:
+ _characterReferenceReturnState = HTMLTokenizerStateData;
+ [self switchToState:HTMLTokenizerStateCharacterReference];
+ break;
+ case LESS_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateTagOpen];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [self emitCharacterToken:character];
+ break;
+ case EOF:
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitCharacterToken:character];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRCDATA
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case AMPERSAND:
+ _characterReferenceReturnState = HTMLTokenizerStateRCDATA;
+ [self switchToState:HTMLTokenizerStateCharacterReference];
+ break;
+ case LESS_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateRCDATALessThanSign];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [self emitCharacterToken:REPLACEMENT_CHAR];
+ break;
+ case EOF:
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitCharacterToken:character];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRAWTEXT
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LESS_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateRAWTEXTLessThanSign];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [self emitCharacterToken:REPLACEMENT_CHAR];
+ break;
+ case EOF:
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitCharacterToken:character];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateScriptData
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LESS_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateScriptDataLessThanSign];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [self emitCharacterToken:REPLACEMENT_CHAR];
+ break;
+ case EOF:
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitCharacterToken:character];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStatePLAINTEXT
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [self emitCharacterToken:REPLACEMENT_CHAR];
+ break;
+ case EOF:
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitCharacterToken:character];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateTagOpen
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case EXCLAMATION_MARK:
+ [self switchToState:HTMLTokenizerStateMarkupDeclarationOpen];
+ break;
+ case SOLIDUS:
+ [self switchToState:HTMLTokenizerStateEndTagOpen];
+ break;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ _currentTagToken = [[HTMLStartTagToken alloc] initWithTagName:StringFromUniChar(character + 0x0020)];
+ [self switchToState:HTMLTokenizerStateTagName];
+ break;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ _currentTagToken = [[HTMLStartTagToken alloc] initWithTagName:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateTagName];
+ break;
+ case QUESTION_MARK:
+ [self emitParseError:@"unexpected-question-mark-instead-of-tag-name"
+ details:@"Unexpected (0x003F, ?) instead of tag name"];
+ _currentCommentToken = [[HTMLCommentToken alloc] initWithData:@""];
+ [self switchToState:HTMLTokenizerStateBogusComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ case EOF:
+ [self emitParseError:@"eof-before-tag-name" details:nil];
+ [self emitCharacterToken:LESS_THAN_SIGN];
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitParseError:@"invalid-first-character-of-tag-name"
+ details:@"Unexpected first character (0x%X) of tag name", (unsigned int)character];
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitCharacterToken:LESS_THAN_SIGN];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateEndTagOpen
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character + 0x0020)];
+ [self switchToState:HTMLTokenizerStateTagName];
+ break;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateTagName];
+ break;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-end-tag-name" details:@"Unexpected (0x003E, >) missing end tag name"];
+ [self switchToState:HTMLTokenizerStateData];
+ break;
+ case EOF:
+ [self emitParseError:@"eof-before-tag-name" details:nil];
+ [self emitCharacterTokenWithString:@""];
+ [self emitEOFToken];
+ break;
+ default:
+ [self emitParseError:@"invalid-first-character-of-tag-name"
+ details:@"Unexpected first character (0x%X) of end tag name", (unsigned int)character];
+ _currentCommentToken = [[HTMLCommentToken alloc] initWithData:@""];
+ [self switchToState:HTMLTokenizerStateBogusComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateTagName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateBeforeAttributeName];
+ break;
+ case SOLIDUS:
+ [self switchToState:HTMLTokenizerStateSelfClosingStartTag];
+ break;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitCurrentTagToken];
+ break;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ [_currentTagToken appendStringToTagName:StringFromUTF32Char(character + 0x0020)];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentTagToken appendStringToTagName:StringFromUniChar(REPLACEMENT_CHAR)];
+ break;
+ case EOF:
+ [self emitParseError:@"eof-in-tag" details:nil];
+ [self emitEOFToken];
+ break;
+ default:
+ [_currentTagToken appendStringToTagName:StringFromUTF32Char(character)];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRCDATALessThanSign
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case SOLIDUS:
+ _temporaryBuffer = [NSMutableString new];
+ [self switchToState:HTMLTokenizerStateRCDATAEndTagOpen];
+ break;
+ default:
+ [self switchToState:HTMLTokenizerStateRCDATA];
+ [self emitCharacterToken:LESS_THAN_SIGN];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRCDATAEndTagOpen
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character + 0x0020)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateRCDATAEndTagName];
+ break;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateRCDATAEndTagName];
+ break;
+ default:
+ [self switchToState:HTMLTokenizerStateRCDATA];
+ [self emitCharacterTokenWithString:@""];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRCDATAEndTagName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateBeforeAttributeName];
+ return;
+ }
+ break;
+ case SOLIDUS:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateSelfClosingStartTag];
+ return;
+ }
+ break;
+ case GREATER_THAN_SIGN:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitCurrentTagToken];
+ return;
+ }
+ break;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ [_currentTagToken appendStringToTagName:StringFromUniChar(character + 0x0020)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ return;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ [_currentTagToken appendStringToTagName:StringFromUniChar(character)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ return;
+ }
+
+ [self switchToState:HTMLTokenizerStateRCDATA];
+ [self emitCharacterTokenWithString:@""];
+ [self emitCharacterTokenWithString:_temporaryBuffer];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+}
+
+- (void)HTMLTokenizerStateRAWTEXTLessThanSign
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case SOLIDUS:
+ _temporaryBuffer = [NSMutableString new];
+ [self switchToState:HTMLTokenizerStateRAWTEXTEndTagOpen];
+ break;
+ default:
+ [self switchToState:HTMLTokenizerStateRAWTEXT];
+ [self emitCharacterToken:LESS_THAN_SIGN];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRAWTEXTEndTagOpen
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character + 0x0020)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateRAWTEXTEndTagName];
+ break;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ _currentTagToken = [[HTMLEndTagToken alloc] initWithTagName:StringFromUniChar(character)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateRAWTEXTEndTagName];
+ break;
+ default:
+ [self switchToState:HTMLTokenizerStateRAWTEXT];
+ [self emitCharacterTokenWithString:@""];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ break;
+ }
+}
+
+- (void)HTMLTokenizerStateRAWTEXTEndTagName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateBeforeAttributeName];
+ return;
+ }
+ break;
+ case SOLIDUS:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateSelfClosingStartTag];
+ return;
+ }
+ break;
+ case GREATER_THAN_SIGN:
+ if ([self isCurrentEndTagTokenAppropriate]) {
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitCurrentTagToken];
+ return;
+ }
+ break;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ [_currentTagToken appendStringToTagName:StringFromUniChar(character + 0x0020)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ return;
+ case LATIN_SMALL_LETTER_A ... LATIN_SMALL_LETTER_Z:
+ [_currentTagToken appendStringToTagName:StringFromUniChar(character)];
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ return;
+ }
+
+ [self switchToState:HTMLTokenizerStateRAWTEXT];
+ [self emitCharacterTokenWithString:@""];
+ [self emitCharacterTokenWithString:_temporaryBuffer];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+}
+
+- (void)HTMLTokenizerStateScriptDataLessThanSign
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case SOLIDUS:
+ _temporaryBuffer = [NSMutableString new];
+ [self switchToState:HTMLTokenizerStateScriptDataEndTagOpen];
+ break;
+ case EXCLAMATION_MARK:
+ [self switchToState:HTMLTokenizerStateScriptDataEscapeStart];
+ [self emitCharacterTokenWithString:@") in comment start"];
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentCommentToken];
+ return;
+ default:
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentStartDash
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case HYPHEN_MINUS:
+ [self switchToState:HTMLTokenizerStateCommentEnd];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"abrupt-closing-of-empty-comment" details:@"Unexpeted character (0x003E, >) in comment start"];
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentCommentToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-comment" details:nil];
+ [self emitToken:_currentCommentToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentCommentToken appendStringToData:StringFromUniChar(HYPHEN_MINUS)];
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateComment
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LESS_THAN_SIGN:
+ [_currentCommentToken appendStringToData:StringFromUniChar(LESS_THAN_SIGN)];
+ [self switchToState:HTMLTokenizerStateCommentLessThanSign];
+ return;
+ case HYPHEN_MINUS:
+ [self switchToState:HTMLTokenizerStateCommentEndDash];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentCommentToken appendStringToData:StringFromUniChar(REPLACEMENT_CHAR)];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-commnet" details:nil];
+ [self emitToken:_currentCommentToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentCommentToken appendStringToData:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentLessThanSign
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case EXCLAMATION_MARK:
+ [_currentCommentToken appendStringToData:StringFromUniChar(EXCLAMATION_MARK)];
+ [self switchToState:HTMLTokenizerStateCommentLessThanSignBang];
+ return;
+ case LESS_THAN_SIGN:
+ [_currentCommentToken appendStringToData:StringFromUniChar(LESS_THAN_SIGN)];
+ return;
+ default:
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentLessThanSignBang
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case HYPHEN_MINUS:
+ [self switchToState:HTMLTokenizerStateCommentLessThanSignBangDash];
+ return;
+ default:
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentLessThanSignBangDash
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case HYPHEN_MINUS:
+ [self switchToState:HTMLTokenizerStateCommentLessThanSignBangDashDash];
+ return;
+ default:
+ [self switchToState:HTMLTokenizerStateCommentEndDash];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentLessThanSignBangDashDash
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case GREATER_THAN_SIGN:
+ case EOF:
+ [self switchToState:HTMLTokenizerStateCommentEnd];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ default:
+ [self emitParseError:@"nested-comment" details:nil];
+ [self switchToState:HTMLTokenizerStateCommentEnd];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentEndDash
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case HYPHEN_MINUS:
+ [self switchToState:HTMLTokenizerStateCommentEnd];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-comment" details:nil];
+ [self emitToken:_currentCommentToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentCommentToken appendStringToData:StringFromUniChar(HYPHEN_MINUS)];
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentEnd
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentCommentToken];
+ return;
+ case EXCLAMATION_MARK:
+ [self switchToState:HTMLTokenizerStateCommentEndBang];
+ return;
+ case HYPHEN_MINUS:
+ [_currentCommentToken appendStringToData:StringFromUniChar(HYPHEN_MINUS)];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-comment" details:nil];
+ [self emitToken:_currentCommentToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentCommentToken appendStringToData:@"--"];
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCommentEndBang
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case HYPHEN_MINUS:
+ [_currentCommentToken appendStringToData:@"--!"];
+ [self switchToState:HTMLTokenizerStateCommentEndDash];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"incorrectly-closed-comment" details:@"Unexpeted character (0x003E, >) in comment end"];
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentCommentToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-comment" details:nil];
+ [self emitToken:_currentCommentToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentCommentToken appendStringToData:@"--!"];
+ [self switchToState:HTMLTokenizerStateComment];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPE
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateBeforeDOCTYPEName];
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateBeforeDOCTYPEName];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ _currentDoctypeToken = [HTMLDOCTYPEToken new];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-whitespace-before-doctype-name"
+ details:@"Unexpected character (%@) instead of whitespace before DOCTYPE name", StringFromUTF32Char(character)];
+ [self switchToState:HTMLTokenizerStateBeforeDOCTYPEName];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateBeforeDOCTYPEName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ return;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ _currentDoctypeToken = [[HTMLDOCTYPEToken alloc] initWithName:StringFromUniChar(character + 0x0020)];
+ [self switchToState:HTMLTokenizerStateDOCTYPEName];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ _currentDoctypeToken = [[HTMLDOCTYPEToken alloc] initWithName:StringFromUniChar(REPLACEMENT_CHAR)];
+ [self switchToState:HTMLTokenizerStateDOCTYPEName];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-doctype-name" details:@"Unexpected character (0x003E, >) before DOCTYPE name"];
+ _currentDoctypeToken = [HTMLDOCTYPEToken new];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken = [HTMLDOCTYPEToken new];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ _currentDoctypeToken = [[HTMLDOCTYPEToken alloc] initWithName:StringFromUTF32Char(character)];
+ [self switchToState:HTMLTokenizerStateDOCTYPEName];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPEName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPEName];
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case LATIN_CAPITAL_LETTER_A ... LATIN_CAPITAL_LETTER_Z:
+ [_currentDoctypeToken appendStringToName:StringFromUTF32Char(character + 0x0020)];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentDoctypeToken appendStringToName:StringFromUniChar(REPLACEMENT_CHAR)];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentDoctypeToken appendStringToName:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateAfterDOCTYPEName
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ {
+ if ((character == LATIN_SMALL_LETTER_P || character == LATIN_CAPITAL_LETTER_P) &&
+ [_inputStreamReader consumeString:@"UBLIC" caseSensitive:NO]) {
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPEPublicKeyword];
+ } else if ((character == LATIN_SMALL_LETTER_S || character == LATIN_CAPITAL_LETTER_S) &&
+ [_inputStreamReader consumeString:@"YSTEM" caseSensitive:NO]) {
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPESystemKeyword];
+ } else {
+ [self emitParseError:@"invalid-character-sequence-after-doctype-name"
+ details:@"Expected PUBLIC or SYSTEM after DOCTYPE name"];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ }
+ return;
+ }
+ }
+}
+
+- (void)HTMLTokenizerStateAfterDOCTYPEPublicKeyword
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier];
+ return;
+ case QUOTATION_MARK:
+ [self emitParseError:@"missing-whitespace-after-doctype-public-keyword"
+ details:@"Unexpected character (0x0022, \") instead of whitespace after DOCTYPE PUBLIC keyword"];
+ _currentDoctypeToken.publicIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted];
+ return;
+ case APOSTROPHE:
+ [self emitParseError:@"missing-whitespace-after-doctype-public-keyword"
+ details:@"Unexpected character (0x0027, ') instead of whitespace after DOCTYPE PUBLIC keyword"];
+ _currentDoctypeToken.publicIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-doctype-public-identifier" details:nil];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-public-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE Public identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ return;
+ case QUOTATION_MARK:
+ _currentDoctypeToken.publicIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted];
+ break;
+ case APOSTROPHE:
+ _currentDoctypeToken.publicIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted];
+ break;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-doctype-public-identifier" details:nil];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ break;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-public-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE Public identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case QUOTATION_MARK:
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPEPublicIdentifier];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentDoctypeToken appendStringToPublicIdentifier:StringFromUniChar(REPLACEMENT_CHAR)];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"abrupt-doctype-public-identifier" details:@"Unexpected character (0x003E, >) in DOCTYPE Public identifier"];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentDoctypeToken appendStringToPublicIdentifier:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case APOSTROPHE:
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPEPublicIdentifier];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentDoctypeToken appendStringToPublicIdentifier:StringFromUniChar(REPLACEMENT_CHAR)];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"abrupt-doctype-public-identifier" details:@"Unexpected character (0x003E, >) in DOCTYPE Public identifier"];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentDoctypeToken appendStringToPublicIdentifier:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateAfterDOCTYPEPublicIdentifier
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers];
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case QUOTATION_MARK:
+ [self emitParseError:@"missing-whitespace-between-doctype-public-and-system-identifiers"
+ details:@"Unexpected character (0x0022, \") instead of whitespace between DOCTYPE Public and System identifiers"];
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted];
+ return;
+ case APOSTROPHE:
+ [self emitParseError:@"missing-whitespace-between-doctype-public-and-system-identifiers"
+ details:@"Unexpected character (0x0027, ') instead of whitespace between DOCTYPE Public and System identifiers"];
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-system-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE System identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case QUOTATION_MARK:
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted];
+ return;
+ case APOSTROPHE:
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-system-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE System identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateAfterDOCTYPESystemKeyword
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ [self switchToState:HTMLTokenizerStateBeforeDOCTYPESystemIdentifier];
+ return;
+ case QUOTATION_MARK:
+ [self emitParseError:@"missing-whitespace-after-doctype-system-keyword"
+ details:@"Unexpected character (0x0022, \") after DOCTYPE System identifier"];
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted];
+ return;
+ case APOSTROPHE:
+ [self emitParseError:@"missing-whitespace-after-doctype-system-keyword"
+ details:@"Unexpected character (0x0027, ') after DOCTYPE System identifier"];
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-doctype-system-identifier" details:nil];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-system-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE System identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateBeforeDOCTYPESystemIdentifier
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ break;
+ case QUOTATION_MARK:
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted];
+ break;
+ case APOSTROPHE:
+ _currentDoctypeToken.systemIdentifier = [NSMutableString string];
+ [self switchToState:HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted];
+ break;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"missing-doctype-system-identifier" details:nil];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"missing-quote-before-doctype-system-identifier"
+ details:@"Unexpected character (%@) instead of quote before DOCTYPE System identifier", StringFromUTF32Char(character)];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case QUOTATION_MARK:
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPESystemIdentifier];
+ break;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentDoctypeToken appendStringToSystemIdentifier:StringFromUniChar(REPLACEMENT_CHAR)];
+ break;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"abrupt-doctype-system-identifier" details:@"Unexpected character (0x003E, >) in DOCTYPE System identifier"];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentDoctypeToken appendStringToSystemIdentifier:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case APOSTROPHE:
+ [self switchToState:HTMLTokenizerStateAfterDOCTYPESystemIdentifier];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ [_currentDoctypeToken appendStringToSystemIdentifier:StringFromUniChar(REPLACEMENT_CHAR)];
+ return;
+ case GREATER_THAN_SIGN:
+ [self emitParseError:@"abrupt-doctype-system-identifier" details:@"Unexpected character (0x003E, >) in DOCTYPE System identifier"];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [_currentDoctypeToken appendStringToSystemIdentifier:StringFromUTF32Char(character)];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateAfterDOCTYPESystemIdentifier
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case CHARACTER_TABULATION:
+ case LINE_FEED:
+ case FORM_FEED:
+ case SPACE:
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-doctype" details:nil];
+ [self switchToState:HTMLTokenizerStateData];
+ _currentDoctypeToken.forceQuirks = YES;
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitParseError:@"unexpected-character-after-doctype-system-identifier"
+ details:@"Unexpected character (%@) after DOCTYPE System identifier", StringFromUTF32Char(character)];
+ [self switchToState:HTMLTokenizerStateBogusDOCTYPE];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateBogusDOCTYPE
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ [self emitToken:_currentDoctypeToken];
+ return;
+ case NULL_CHAR:
+ [self emitParseError:@"unexpected-null-character" details:nil];
+ return;
+ case EOF:
+ [self emitToken:_currentDoctypeToken];
+ [self emitEOFToken];
+ return;
+ default:
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCDATASection
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case RIGHT_SQUARE_BRACKET:
+ [self switchToState:HTMLTokenizerStateCDATASectionBracket];
+ return;
+ case EOF:
+ [self emitParseError:@"eof-in-cdata" details:nil];
+ [self emitEOFToken];
+ return;
+ default:
+ [self emitCharacterToken:character];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCDATASectionBracket
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case RIGHT_SQUARE_BRACKET:
+ [self switchToState:HTMLTokenizerStateCDATASectionEnd];
+ return;
+ default:
+ [self emitCharacterToken:RIGHT_SQUARE_BRACKET];
+ [self switchToState:HTMLTokenizerStateCDATASection];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+
+- (void)HTMLTokenizerStateCDATASectionEnd
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case RIGHT_SQUARE_BRACKET:
+ [self emitCharacterToken:RIGHT_SQUARE_BRACKET];
+ return;
+ case GREATER_THAN_SIGN:
+ [self switchToState:HTMLTokenizerStateData];
+ return;
+ default:
+ [self emitCharacterTokenWithString:@"]]"];
+ [self switchToState:HTMLTokenizerStateCDATASection];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateCharacterReference
+{
+ _temporaryBuffer = [NSMutableString new];
+ [_temporaryBuffer appendString:@"&"];
+
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isAlphanumeric(character)) {
+ [self switchToState:HTMLTokenizerStateNamedCharacterReference];
+ [_inputStreamReader unconsumeCurrentInputCharacter];
+ return;
+ }
+
+ switch (character) {
+ case NUMBER_SIGN:
+ [_temporaryBuffer appendString:@"#"];
+ [self switchToState:HTMLTokenizerStateNumericCharacterReference];
+ return;
+ default:
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateNamedCharacterReference
+{
+ NSArray *entities = [HTMLTokenizerEntities entities];
+
+ NSMutableString *name = [NSMutableString stringWithString:@""];
+ NSString *foundEntityName = nil;
+ NSString *foundEntityReplacement = nil;
+ UTF32Char lastConsumedCharacter = EOF;
+ NSUInteger searchIndex = 0;
+
+ [_inputStreamReader markCurrentLocation];
+
+ while (YES) {
+ lastConsumedCharacter = [_inputStreamReader consumeNextInputCharacter];
+ if (lastConsumedCharacter == EOF) break;
+
+ NSString *lastCharacterString = StringFromUTF32Char(lastConsumedCharacter);
+ [name appendString:lastCharacterString];
+
+ searchIndex= [entities indexOfObject:name
+ inSortedRange:NSMakeRange(searchIndex, entities.count - searchIndex)
+ options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual
+ usingComparator:^ NSComparisonResult (id obj1, id obj2) { return [obj1 compare:obj2]; }];
+
+ if (searchIndex >= entities.count || ![[entities objectAtIndex:searchIndex] hasPrefix:name]) {
+ break;
+ }
+
+ if ([[entities objectAtIndex:searchIndex] isEqualToString:name]) {
+ foundEntityName = [name copy];
+ foundEntityReplacement = [HTMLTokenizerEntities replacementAtIndex:searchIndex];
+ }
+ }
+
+ [_inputStreamReader rewindToMarkedLocation];
+
+ if (foundEntityName) {
+ [_inputStreamReader consumeString:foundEntityName caseSensitive:YES];
+ [_temporaryBuffer appendString:foundEntityName];
+
+ BOOL inAttribute = (_characterReferenceReturnState == HTMLTokenizerStateAttributeValueUnquoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueSingleQuoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueDoubleQuoted);
+
+ unichar lastMatchedCharacter = [foundEntityName characterAtIndex:foundEntityName.length - 1];
+ UTF32Char nextCharacter = [_inputStreamReader nextInputCharacter];
+ if (inAttribute && lastMatchedCharacter != SEMICOLON && (nextCharacter == EQUALS_SIGN || isAlphanumeric(nextCharacter))) {
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+ return;
+ }
+
+ if (lastMatchedCharacter != SEMICOLON) {
+ [self emitParseError:@"missing-semicolon-after-character-reference" details:nil];
+ }
+
+ _temporaryBuffer = [NSMutableString new];
+ [_temporaryBuffer appendString:foundEntityReplacement];
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+ } else {
+ NSString *unknownEntity = name;
+ if (lastConsumedCharacter == SEMICOLON) {
+ unknownEntity = [name substringToIndex:name.length -1];
+ }
+ [_inputStreamReader consumeString:unknownEntity caseSensitive:YES];
+ [_temporaryBuffer appendString:unknownEntity];
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:HTMLTokenizerStateAmbiguousAmpersand];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateAmbiguousAmpersand
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isAlphanumeric(character)) {
+ if (_characterReferenceReturnState == HTMLTokenizerStateAttributeValueUnquoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueSingleQuoted ||
+ _characterReferenceReturnState == HTMLTokenizerStateAttributeValueDoubleQuoted) {
+ [self appendToCurrentAttributeValue:StringFromUTF32Char(character)];
+ } else {
+ [self emitCharacterToken:character];
+ }
+ return;
+ }
+
+ switch (character) {
+ case SEMICOLON:
+ [self emitParseError:@"unknown-named-character-reference" details:@"Ambiguous ampersand followed by a semicolon encountered"];
+ [self switchToState:_characterReferenceReturnState];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ default:
+ [self switchToState:_characterReferenceReturnState];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateNumericCharacterReference
+{
+ _characterReferenceCode = 0;
+ _characterReferenceOverflow = NO;
+
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ switch (character) {
+ case LATIN_CAPITAL_LETTER_X:
+ case LATIN_SMALL_LETTER_X:
+ [_temporaryBuffer appendString:StringFromUniChar(character)];
+ [self switchToState:HTMLTokenizerStateHexadecimalCharacterReferenceStart];
+ return;
+ default:
+ [self switchToState:HTMLTokenizerStateDecimalCharacterReferenceStart];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ return;
+ }
+}
+
+- (void)HTMLTokenizerStateHexadecimalCharacterReferenceStart
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isHexDigit(character)) {
+ [self switchToState:HTMLTokenizerStateHexadecimalCharacterReference];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ } else {
+ [self emitParseError:@"absence-of-digits-in-numeric-character-reference"
+ details:@"Expected a hexadecimal digit but got character (%@) ", StringFromUTF32Char(character)];
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ }
+}
+
+- (void)HTMLTokenizerStateDecimalCharacterReferenceStart
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isDigit(character)) {
+ [self switchToState:HTMLTokenizerStateDecimalCharacterReference];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ } else {
+ [self emitParseError:@"absence-of-digits-in-numeric-character-reference"
+ details:@"Expected a decimal digit but got character (%@) ", StringFromUTF32Char(character)];
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ }
+}
+
+- (void)HTMLTokenizerStateHexadecimalCharacterReference
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isDigit(character)) {
+ if (_characterReferenceCode > (ULLONG_MAX >> 4)) {
+ _characterReferenceOverflow = YES;
+ }
+ _characterReferenceCode <<= 4;
+
+ if (_characterReferenceCode > (ULLONG_MAX - (character - 0x0030))) {
+ _characterReferenceOverflow = YES;
+ }
+ _characterReferenceCode += (character - 0x0030);
+ } else if (isUpperHexDigit(character)) {
+ _characterReferenceCode <<= 4;
+ _characterReferenceCode += (character - 0x0037);
+ } else if (isLowerHexDigit(character)) {
+ _characterReferenceCode <<= 4;
+ _characterReferenceCode += (character - 0x0057);
+ } else if (character == SEMICOLON) {
+ [self switchToState:HTMLTokenizerStateNumericCharacterReferenceEnd];
+ } else {
+ [self emitParseError:@"missing-semicolon-after-character-reference"
+ details:@"Expected semicolon but got (%@)", StringFromUTF32Char(character)];
+ [self switchToState:HTMLTokenizerStateNumericCharacterReferenceEnd];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ }
+}
+
+- (void)HTMLTokenizerStateDecimalCharacterReference
+{
+ UTF32Char character = [_inputStreamReader consumeNextInputCharacter];
+ if (isDigit(character)) {
+ if (_characterReferenceCode > (ULLONG_MAX / 10)) {
+ _characterReferenceOverflow = YES;
+ }
+ _characterReferenceCode = (_characterReferenceCode << 3) + (_characterReferenceCode << 1);
+
+ if (_characterReferenceCode > (ULLONG_MAX - (character - 0x0030))) {
+ _characterReferenceOverflow = YES;
+ }
+ _characterReferenceCode += (character - 0x0030);
+ } else if (character == SEMICOLON) {
+ [self switchToState:HTMLTokenizerStateNumericCharacterReferenceEnd];
+ } else {
+ [self emitParseError:@"missing-semicolon-after-character-reference"
+ details:@"Expected semicolon but got (%@)", StringFromUTF32Char(character)];
+ [self switchToState:HTMLTokenizerStateNumericCharacterReferenceEnd];
+ [_inputStreamReader reconsumeCurrentInputCharacter];
+ }
+}
+
+- (void)HTMLTokenizerStateNumericCharacterReferenceEnd
+{
+ if (_characterReferenceOverflow) {
+ [self emitParseError:@"character-reference-outside-unicode-range" details:nil];
+ _characterReferenceCode = REPLACEMENT_CHAR;
+ } else if (_characterReferenceCode == NULL_CHAR) {
+ [self emitParseError:@"null-character-reference" details:nil];
+ _characterReferenceCode = REPLACEMENT_CHAR;
+ } else if (_characterReferenceCode > 0x10FFFF) {
+ [self emitParseError:@"character-reference-outside-unicode-range" details:nil];
+ _characterReferenceCode = REPLACEMENT_CHAR;
+ } else if (isSurrogate(_characterReferenceCode)) {
+ [self emitParseError:@"surrogate-character-reference" details:nil];
+ _characterReferenceCode = REPLACEMENT_CHAR;
+ } else if (isNoncharacter(_characterReferenceCode)) {
+ [self emitParseError:@"noncharacter-character-reference" details:nil];
+ } else if (_characterReferenceCode == CARRIAGE_RETURN || isControlCharacter(_characterReferenceCode)) {
+ [self emitParseError:@"control-character-reference" details:nil];
+ UTF32Char reference = NumericReplacementCharacter((UTF32Char)_characterReferenceCode);
+ if (reference != NULL_CHAR) {
+ _characterReferenceCode = reference;
+ }
+ }
+
+ _temporaryBuffer = [NSMutableString new];
+ [_temporaryBuffer appendString:StringFromUTF32Char((UTF32Char)_characterReferenceCode)];
+ [self flushCodePointsConsumedAsCharacterReference];
+ [self switchToState:_characterReferenceReturnState];
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizerEntities.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizerEntities.m
new file mode 100644
index 0000000..4cac6a5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTokenizerEntities.m
@@ -0,0 +1,2283 @@
+ //
+ // HTMLTokenizerEntities.m
+ // HTMLKit
+ //
+ // Created by Iska on 11/10/14.
+ // Copyright (c) 2014 BrainCookie. All rights reserved.
+ //
+
+#import "HTMLTokenizerEntities.h"
+
+#define NAMED_CHARACTER_REFERENCES \
+ NAMED_CHARACTER_REFERENCE( "AElig", "\U000000c6" ) \
+ NAMED_CHARACTER_REFERENCE( "AElig;", "\U000000c6" ) \
+ NAMED_CHARACTER_REFERENCE( "AMP", "&" ) \
+ NAMED_CHARACTER_REFERENCE( "AMP;", "&" ) \
+ NAMED_CHARACTER_REFERENCE( "Aacute", "\U000000c1" ) \
+ NAMED_CHARACTER_REFERENCE( "Aacute;", "\U000000c1" ) \
+ NAMED_CHARACTER_REFERENCE( "Abreve;", "\U00000102" ) \
+ NAMED_CHARACTER_REFERENCE( "Acirc", "\U000000c2" ) \
+ NAMED_CHARACTER_REFERENCE( "Acirc;", "\U000000c2" ) \
+ NAMED_CHARACTER_REFERENCE( "Acy;", "\U00000410" ) \
+ NAMED_CHARACTER_REFERENCE( "Afr;", "\U0001d504" ) \
+ NAMED_CHARACTER_REFERENCE( "Agrave", "\U000000c0" ) \
+ NAMED_CHARACTER_REFERENCE( "Agrave;", "\U000000c0" ) \
+ NAMED_CHARACTER_REFERENCE( "Alpha;", "\U00000391" ) \
+ NAMED_CHARACTER_REFERENCE( "Amacr;", "\U00000100" ) \
+ NAMED_CHARACTER_REFERENCE( "And;", "\U00002a53" ) \
+ NAMED_CHARACTER_REFERENCE( "Aogon;", "\U00000104" ) \
+ NAMED_CHARACTER_REFERENCE( "Aopf;", "\U0001d538" ) \
+ NAMED_CHARACTER_REFERENCE( "ApplyFunction;", "\U00002061" ) \
+ NAMED_CHARACTER_REFERENCE( "Aring", "\U000000c5" ) \
+ NAMED_CHARACTER_REFERENCE( "Aring;", "\U000000c5" ) \
+ NAMED_CHARACTER_REFERENCE( "Ascr;", "\U0001d49c" ) \
+ NAMED_CHARACTER_REFERENCE( "Assign;", "\U00002254" ) \
+ NAMED_CHARACTER_REFERENCE( "Atilde", "\U000000c3" ) \
+ NAMED_CHARACTER_REFERENCE( "Atilde;", "\U000000c3" ) \
+ NAMED_CHARACTER_REFERENCE( "Auml", "\U000000c4" ) \
+ NAMED_CHARACTER_REFERENCE( "Auml;", "\U000000c4" ) \
+ NAMED_CHARACTER_REFERENCE( "Backslash;", "\U00002216" ) \
+ NAMED_CHARACTER_REFERENCE( "Barv;", "\U00002ae7" ) \
+ NAMED_CHARACTER_REFERENCE( "Barwed;", "\U00002306" ) \
+ NAMED_CHARACTER_REFERENCE( "Bcy;", "\U00000411" ) \
+ NAMED_CHARACTER_REFERENCE( "Because;", "\U00002235" ) \
+ NAMED_CHARACTER_REFERENCE( "Bernoullis;", "\U0000212c" ) \
+ NAMED_CHARACTER_REFERENCE( "Beta;", "\U00000392" ) \
+ NAMED_CHARACTER_REFERENCE( "Bfr;", "\U0001d505" ) \
+ NAMED_CHARACTER_REFERENCE( "Bopf;", "\U0001d539" ) \
+ NAMED_CHARACTER_REFERENCE( "Breve;", "\U000002d8" ) \
+ NAMED_CHARACTER_REFERENCE( "Bscr;", "\U0000212c" ) \
+ NAMED_CHARACTER_REFERENCE( "Bumpeq;", "\U0000224e" ) \
+ NAMED_CHARACTER_REFERENCE( "CHcy;", "\U00000427" ) \
+ NAMED_CHARACTER_REFERENCE( "COPY", "\U000000a9" ) \
+ NAMED_CHARACTER_REFERENCE( "COPY;", "\U000000a9" ) \
+ NAMED_CHARACTER_REFERENCE( "Cacute;", "\U00000106" ) \
+ NAMED_CHARACTER_REFERENCE( "Cap;", "\U000022d2" ) \
+ NAMED_CHARACTER_REFERENCE( "CapitalDifferentialD;", "\U00002145" ) \
+ NAMED_CHARACTER_REFERENCE( "Cayleys;", "\U0000212d" ) \
+ NAMED_CHARACTER_REFERENCE( "Ccaron;", "\U0000010c" ) \
+ NAMED_CHARACTER_REFERENCE( "Ccedil", "\U000000c7" ) \
+ NAMED_CHARACTER_REFERENCE( "Ccedil;", "\U000000c7" ) \
+ NAMED_CHARACTER_REFERENCE( "Ccirc;", "\U00000108" ) \
+ NAMED_CHARACTER_REFERENCE( "Cconint;", "\U00002230" ) \
+ NAMED_CHARACTER_REFERENCE( "Cdot;", "\U0000010a" ) \
+ NAMED_CHARACTER_REFERENCE( "Cedilla;", "\U000000b8" ) \
+ NAMED_CHARACTER_REFERENCE( "CenterDot;", "\U000000b7" ) \
+ NAMED_CHARACTER_REFERENCE( "Cfr;", "\U0000212d" ) \
+ NAMED_CHARACTER_REFERENCE( "Chi;", "\U000003a7" ) \
+ NAMED_CHARACTER_REFERENCE( "CircleDot;", "\U00002299" ) \
+ NAMED_CHARACTER_REFERENCE( "CircleMinus;", "\U00002296" ) \
+ NAMED_CHARACTER_REFERENCE( "CirclePlus;", "\U00002295" ) \
+ NAMED_CHARACTER_REFERENCE( "CircleTimes;", "\U00002297" ) \
+ NAMED_CHARACTER_REFERENCE( "ClockwiseContourIntegral;", "\U00002232" ) \
+ NAMED_CHARACTER_REFERENCE( "CloseCurlyDoubleQuote;", "\U0000201d" ) \
+ NAMED_CHARACTER_REFERENCE( "CloseCurlyQuote;", "\U00002019" ) \
+ NAMED_CHARACTER_REFERENCE( "Colon;", "\U00002237" ) \
+ NAMED_CHARACTER_REFERENCE( "Colone;", "\U00002a74" ) \
+ NAMED_CHARACTER_REFERENCE( "Congruent;", "\U00002261" ) \
+ NAMED_CHARACTER_REFERENCE( "Conint;", "\U0000222f" ) \
+ NAMED_CHARACTER_REFERENCE( "ContourIntegral;", "\U0000222e" ) \
+ NAMED_CHARACTER_REFERENCE( "Copf;", "\U00002102" ) \
+ NAMED_CHARACTER_REFERENCE( "Coproduct;", "\U00002210" ) \
+ NAMED_CHARACTER_REFERENCE( "CounterClockwiseContourIntegral;", "\U00002233" ) \
+ NAMED_CHARACTER_REFERENCE( "Cross;", "\U00002a2f" ) \
+ NAMED_CHARACTER_REFERENCE( "Cscr;", "\U0001d49e" ) \
+ NAMED_CHARACTER_REFERENCE( "Cup;", "\U000022d3" ) \
+ NAMED_CHARACTER_REFERENCE( "CupCap;", "\U0000224d" ) \
+ NAMED_CHARACTER_REFERENCE( "DD;", "\U00002145" ) \
+ NAMED_CHARACTER_REFERENCE( "DDotrahd;", "\U00002911" ) \
+ NAMED_CHARACTER_REFERENCE( "DJcy;", "\U00000402" ) \
+ NAMED_CHARACTER_REFERENCE( "DScy;", "\U00000405" ) \
+ NAMED_CHARACTER_REFERENCE( "DZcy;", "\U0000040f" ) \
+ NAMED_CHARACTER_REFERENCE( "Dagger;", "\U00002021" ) \
+ NAMED_CHARACTER_REFERENCE( "Darr;", "\U000021a1" ) \
+ NAMED_CHARACTER_REFERENCE( "Dashv;", "\U00002ae4" ) \
+ NAMED_CHARACTER_REFERENCE( "Dcaron;", "\U0000010e" ) \
+ NAMED_CHARACTER_REFERENCE( "Dcy;", "\U00000414" ) \
+ NAMED_CHARACTER_REFERENCE( "Del;", "\U00002207" ) \
+ NAMED_CHARACTER_REFERENCE( "Delta;", "\U00000394" ) \
+ NAMED_CHARACTER_REFERENCE( "Dfr;", "\U0001d507" ) \
+ NAMED_CHARACTER_REFERENCE( "DiacriticalAcute;", "\U000000b4" ) \
+ NAMED_CHARACTER_REFERENCE( "DiacriticalDot;", "\U000002d9" ) \
+ NAMED_CHARACTER_REFERENCE( "DiacriticalDoubleAcute;", "\U000002dd" ) \
+ NAMED_CHARACTER_REFERENCE( "DiacriticalGrave;", "\U00000060" ) \
+ NAMED_CHARACTER_REFERENCE( "DiacriticalTilde;", "\U000002dc" ) \
+ NAMED_CHARACTER_REFERENCE( "Diamond;", "\U000022c4" ) \
+ NAMED_CHARACTER_REFERENCE( "DifferentialD;", "\U00002146" ) \
+ NAMED_CHARACTER_REFERENCE( "Dopf;", "\U0001d53b" ) \
+ NAMED_CHARACTER_REFERENCE( "Dot;", "\U000000a8" ) \
+ NAMED_CHARACTER_REFERENCE( "DotDot;", "\U000020dc" ) \
+ NAMED_CHARACTER_REFERENCE( "DotEqual;", "\U00002250" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleContourIntegral;", "\U0000222f" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleDot;", "\U000000a8" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleDownArrow;", "\U000021d3" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLeftArrow;", "\U000021d0" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLeftRightArrow;", "\U000021d4" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLeftTee;", "\U00002ae4" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLongLeftArrow;", "\U000027f8" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLongLeftRightArrow;", "\U000027fa" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleLongRightArrow;", "\U000027f9" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleRightArrow;", "\U000021d2" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleRightTee;", "\U000022a8" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleUpArrow;", "\U000021d1" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleUpDownArrow;", "\U000021d5" ) \
+ NAMED_CHARACTER_REFERENCE( "DoubleVerticalBar;", "\U00002225" ) \
+ NAMED_CHARACTER_REFERENCE( "DownArrow;", "\U00002193" ) \
+ NAMED_CHARACTER_REFERENCE( "DownArrowBar;", "\U00002913" ) \
+ NAMED_CHARACTER_REFERENCE( "DownArrowUpArrow;", "\U000021f5" ) \
+ NAMED_CHARACTER_REFERENCE( "DownBreve;", "\U00000311" ) \
+ NAMED_CHARACTER_REFERENCE( "DownLeftRightVector;", "\U00002950" ) \
+ NAMED_CHARACTER_REFERENCE( "DownLeftTeeVector;", "\U0000295e" ) \
+ NAMED_CHARACTER_REFERENCE( "DownLeftVector;", "\U000021bd" ) \
+ NAMED_CHARACTER_REFERENCE( "DownLeftVectorBar;", "\U00002956" ) \
+ NAMED_CHARACTER_REFERENCE( "DownRightTeeVector;", "\U0000295f" ) \
+ NAMED_CHARACTER_REFERENCE( "DownRightVector;", "\U000021c1" ) \
+ NAMED_CHARACTER_REFERENCE( "DownRightVectorBar;", "\U00002957" ) \
+ NAMED_CHARACTER_REFERENCE( "DownTee;", "\U000022a4" ) \
+ NAMED_CHARACTER_REFERENCE( "DownTeeArrow;", "\U000021a7" ) \
+ NAMED_CHARACTER_REFERENCE( "Downarrow;", "\U000021d3" ) \
+ NAMED_CHARACTER_REFERENCE( "Dscr;", "\U0001d49f" ) \
+ NAMED_CHARACTER_REFERENCE( "Dstrok;", "\U00000110" ) \
+ NAMED_CHARACTER_REFERENCE( "ENG;", "\U0000014a" ) \
+ NAMED_CHARACTER_REFERENCE( "ETH", "\U000000d0" ) \
+ NAMED_CHARACTER_REFERENCE( "ETH;", "\U000000d0" ) \
+ NAMED_CHARACTER_REFERENCE( "Eacute", "\U000000c9" ) \
+ NAMED_CHARACTER_REFERENCE( "Eacute;", "\U000000c9" ) \
+ NAMED_CHARACTER_REFERENCE( "Ecaron;", "\U0000011a" ) \
+ NAMED_CHARACTER_REFERENCE( "Ecirc", "\U000000ca" ) \
+ NAMED_CHARACTER_REFERENCE( "Ecirc;", "\U000000ca" ) \
+ NAMED_CHARACTER_REFERENCE( "Ecy;", "\U0000042d" ) \
+ NAMED_CHARACTER_REFERENCE( "Edot;", "\U00000116" ) \
+ NAMED_CHARACTER_REFERENCE( "Efr;", "\U0001d508" ) \
+ NAMED_CHARACTER_REFERENCE( "Egrave", "\U000000c8" ) \
+ NAMED_CHARACTER_REFERENCE( "Egrave;", "\U000000c8" ) \
+ NAMED_CHARACTER_REFERENCE( "Element;", "\U00002208" ) \
+ NAMED_CHARACTER_REFERENCE( "Emacr;", "\U00000112" ) \
+ NAMED_CHARACTER_REFERENCE( "EmptySmallSquare;", "\U000025fb" ) \
+ NAMED_CHARACTER_REFERENCE( "EmptyVerySmallSquare;", "\U000025ab" ) \
+ NAMED_CHARACTER_REFERENCE( "Eogon;", "\U00000118" ) \
+ NAMED_CHARACTER_REFERENCE( "Eopf;", "\U0001d53c" ) \
+ NAMED_CHARACTER_REFERENCE( "Epsilon;", "\U00000395" ) \
+ NAMED_CHARACTER_REFERENCE( "Equal;", "\U00002a75" ) \
+ NAMED_CHARACTER_REFERENCE( "EqualTilde;", "\U00002242" ) \
+ NAMED_CHARACTER_REFERENCE( "Equilibrium;", "\U000021cc" ) \
+ NAMED_CHARACTER_REFERENCE( "Escr;", "\U00002130" ) \
+ NAMED_CHARACTER_REFERENCE( "Esim;", "\U00002a73" ) \
+ NAMED_CHARACTER_REFERENCE( "Eta;", "\U00000397" ) \
+ NAMED_CHARACTER_REFERENCE( "Euml", "\U000000cb" ) \
+ NAMED_CHARACTER_REFERENCE( "Euml;", "\U000000cb" ) \
+ NAMED_CHARACTER_REFERENCE( "Exists;", "\U00002203" ) \
+ NAMED_CHARACTER_REFERENCE( "ExponentialE;", "\U00002147" ) \
+ NAMED_CHARACTER_REFERENCE( "Fcy;", "\U00000424" ) \
+ NAMED_CHARACTER_REFERENCE( "Ffr;", "\U0001d509" ) \
+ NAMED_CHARACTER_REFERENCE( "FilledSmallSquare;", "\U000025fc" ) \
+ NAMED_CHARACTER_REFERENCE( "FilledVerySmallSquare;", "\U000025aa" ) \
+ NAMED_CHARACTER_REFERENCE( "Fopf;", "\U0001d53d" ) \
+ NAMED_CHARACTER_REFERENCE( "ForAll;", "\U00002200" ) \
+ NAMED_CHARACTER_REFERENCE( "Fouriertrf;", "\U00002131" ) \
+ NAMED_CHARACTER_REFERENCE( "Fscr;", "\U00002131" ) \
+ NAMED_CHARACTER_REFERENCE( "GJcy;", "\U00000403" ) \
+ NAMED_CHARACTER_REFERENCE( "GT", ">" ) \
+ NAMED_CHARACTER_REFERENCE( "GT;", ">" ) \
+ NAMED_CHARACTER_REFERENCE( "Gamma;", "\U00000393" ) \
+ NAMED_CHARACTER_REFERENCE( "Gammad;", "\U000003dc" ) \
+ NAMED_CHARACTER_REFERENCE( "Gbreve;", "\U0000011e" ) \
+ NAMED_CHARACTER_REFERENCE( "Gcedil;", "\U00000122" ) \
+ NAMED_CHARACTER_REFERENCE( "Gcirc;", "\U0000011c" ) \
+ NAMED_CHARACTER_REFERENCE( "Gcy;", "\U00000413" ) \
+ NAMED_CHARACTER_REFERENCE( "Gdot;", "\U00000120" ) \
+ NAMED_CHARACTER_REFERENCE( "Gfr;", "\U0001d50a" ) \
+ NAMED_CHARACTER_REFERENCE( "Gg;", "\U000022d9" ) \
+ NAMED_CHARACTER_REFERENCE( "Gopf;", "\U0001d53e" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterEqual;", "\U00002265" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterEqualLess;", "\U000022db" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterFullEqual;", "\U00002267" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterGreater;", "\U00002aa2" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterLess;", "\U00002277" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterSlantEqual;", "\U00002a7e" ) \
+ NAMED_CHARACTER_REFERENCE( "GreaterTilde;", "\U00002273" ) \
+ NAMED_CHARACTER_REFERENCE( "Gscr;", "\U0001d4a2" ) \
+ NAMED_CHARACTER_REFERENCE( "Gt;", "\U0000226b" ) \
+ NAMED_CHARACTER_REFERENCE( "HARDcy;", "\U0000042a" ) \
+ NAMED_CHARACTER_REFERENCE( "Hacek;", "\U000002c7" ) \
+ NAMED_CHARACTER_REFERENCE( "Hat;", "^" ) \
+ NAMED_CHARACTER_REFERENCE( "Hcirc;", "\U00000124" ) \
+ NAMED_CHARACTER_REFERENCE( "Hfr;", "\U0000210c" ) \
+ NAMED_CHARACTER_REFERENCE( "HilbertSpace;", "\U0000210b" ) \
+ NAMED_CHARACTER_REFERENCE( "Hopf;", "\U0000210d" ) \
+ NAMED_CHARACTER_REFERENCE( "HorizontalLine;", "\U00002500" ) \
+ NAMED_CHARACTER_REFERENCE( "Hscr;", "\U0000210b" ) \
+ NAMED_CHARACTER_REFERENCE( "Hstrok;", "\U00000126" ) \
+ NAMED_CHARACTER_REFERENCE( "HumpDownHump;", "\U0000224e" ) \
+ NAMED_CHARACTER_REFERENCE( "HumpEqual;", "\U0000224f" ) \
+ NAMED_CHARACTER_REFERENCE( "IEcy;", "\U00000415" ) \
+ NAMED_CHARACTER_REFERENCE( "IJlig;", "\U00000132" ) \
+ NAMED_CHARACTER_REFERENCE( "IOcy;", "\U00000401" ) \
+ NAMED_CHARACTER_REFERENCE( "Iacute", "\U000000cd" ) \
+ NAMED_CHARACTER_REFERENCE( "Iacute;", "\U000000cd" ) \
+ NAMED_CHARACTER_REFERENCE( "Icirc", "\U000000ce" ) \
+ NAMED_CHARACTER_REFERENCE( "Icirc;", "\U000000ce" ) \
+ NAMED_CHARACTER_REFERENCE( "Icy;", "\U00000418" ) \
+ NAMED_CHARACTER_REFERENCE( "Idot;", "\U00000130" ) \
+ NAMED_CHARACTER_REFERENCE( "Ifr;", "\U00002111" ) \
+ NAMED_CHARACTER_REFERENCE( "Igrave", "\U000000cc" ) \
+ NAMED_CHARACTER_REFERENCE( "Igrave;", "\U000000cc" ) \
+ NAMED_CHARACTER_REFERENCE( "Im;", "\U00002111" ) \
+ NAMED_CHARACTER_REFERENCE( "Imacr;", "\U0000012a" ) \
+ NAMED_CHARACTER_REFERENCE( "ImaginaryI;", "\U00002148" ) \
+ NAMED_CHARACTER_REFERENCE( "Implies;", "\U000021d2" ) \
+ NAMED_CHARACTER_REFERENCE( "Int;", "\U0000222c" ) \
+ NAMED_CHARACTER_REFERENCE( "Integral;", "\U0000222b" ) \
+ NAMED_CHARACTER_REFERENCE( "Intersection;", "\U000022c2" ) \
+ NAMED_CHARACTER_REFERENCE( "InvisibleComma;", "\U00002063" ) \
+ NAMED_CHARACTER_REFERENCE( "InvisibleTimes;", "\U00002062" ) \
+ NAMED_CHARACTER_REFERENCE( "Iogon;", "\U0000012e" ) \
+ NAMED_CHARACTER_REFERENCE( "Iopf;", "\U0001d540" ) \
+ NAMED_CHARACTER_REFERENCE( "Iota;", "\U00000399" ) \
+ NAMED_CHARACTER_REFERENCE( "Iscr;", "\U00002110" ) \
+ NAMED_CHARACTER_REFERENCE( "Itilde;", "\U00000128" ) \
+ NAMED_CHARACTER_REFERENCE( "Iukcy;", "\U00000406" ) \
+ NAMED_CHARACTER_REFERENCE( "Iuml", "\U000000cf" ) \
+ NAMED_CHARACTER_REFERENCE( "Iuml;", "\U000000cf" ) \
+ NAMED_CHARACTER_REFERENCE( "Jcirc;", "\U00000134" ) \
+ NAMED_CHARACTER_REFERENCE( "Jcy;", "\U00000419" ) \
+ NAMED_CHARACTER_REFERENCE( "Jfr;", "\U0001d50d" ) \
+ NAMED_CHARACTER_REFERENCE( "Jopf;", "\U0001d541" ) \
+ NAMED_CHARACTER_REFERENCE( "Jscr;", "\U0001d4a5" ) \
+ NAMED_CHARACTER_REFERENCE( "Jsercy;", "\U00000408" ) \
+ NAMED_CHARACTER_REFERENCE( "Jukcy;", "\U00000404" ) \
+ NAMED_CHARACTER_REFERENCE( "KHcy;", "\U00000425" ) \
+ NAMED_CHARACTER_REFERENCE( "KJcy;", "\U0000040c" ) \
+ NAMED_CHARACTER_REFERENCE( "Kappa;", "\U0000039a" ) \
+ NAMED_CHARACTER_REFERENCE( "Kcedil;", "\U00000136" ) \
+ NAMED_CHARACTER_REFERENCE( "Kcy;", "\U0000041a" ) \
+ NAMED_CHARACTER_REFERENCE( "Kfr;", "\U0001d50e" ) \
+ NAMED_CHARACTER_REFERENCE( "Kopf;", "\U0001d542" ) \
+ NAMED_CHARACTER_REFERENCE( "Kscr;", "\U0001d4a6" ) \
+ NAMED_CHARACTER_REFERENCE( "LJcy;", "\U00000409" ) \
+ NAMED_CHARACTER_REFERENCE( "LT", "<" ) \
+ NAMED_CHARACTER_REFERENCE( "LT;", "<" ) \
+ NAMED_CHARACTER_REFERENCE( "Lacute;", "\U00000139" ) \
+ NAMED_CHARACTER_REFERENCE( "Lambda;", "\U0000039b" ) \
+ NAMED_CHARACTER_REFERENCE( "Lang;", "\U000027ea" ) \
+ NAMED_CHARACTER_REFERENCE( "Laplacetrf;", "\U00002112" ) \
+ NAMED_CHARACTER_REFERENCE( "Larr;", "\U0000219e" ) \
+ NAMED_CHARACTER_REFERENCE( "Lcaron;", "\U0000013d" ) \
+ NAMED_CHARACTER_REFERENCE( "Lcedil;", "\U0000013b" ) \
+ NAMED_CHARACTER_REFERENCE( "Lcy;", "\U0000041b" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftAngleBracket;", "\U000027e8" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftArrow;", "\U00002190" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftArrowBar;", "\U000021e4" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftArrowRightArrow;", "\U000021c6" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftCeiling;", "\U00002308" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftDoubleBracket;", "\U000027e6" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftDownTeeVector;", "\U00002961" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftDownVector;", "\U000021c3" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftDownVectorBar;", "\U00002959" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftFloor;", "\U0000230a" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftRightArrow;", "\U00002194" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftRightVector;", "\U0000294e" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTee;", "\U000022a3" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTeeArrow;", "\U000021a4" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTeeVector;", "\U0000295a" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTriangle;", "\U000022b2" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTriangleBar;", "\U000029cf" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftTriangleEqual;", "\U000022b4" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftUpDownVector;", "\U00002951" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftUpTeeVector;", "\U00002960" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftUpVector;", "\U000021bf" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftUpVectorBar;", "\U00002958" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftVector;", "\U000021bc" ) \
+ NAMED_CHARACTER_REFERENCE( "LeftVectorBar;", "\U00002952" ) \
+ NAMED_CHARACTER_REFERENCE( "Leftarrow;", "\U000021d0" ) \
+ NAMED_CHARACTER_REFERENCE( "Leftrightarrow;", "\U000021d4" ) \
+ NAMED_CHARACTER_REFERENCE( "LessEqualGreater;", "\U000022da" ) \
+ NAMED_CHARACTER_REFERENCE( "LessFullEqual;", "\U00002266" ) \
+ NAMED_CHARACTER_REFERENCE( "LessGreater;", "\U00002276" ) \
+ NAMED_CHARACTER_REFERENCE( "LessLess;", "\U00002aa1" ) \
+ NAMED_CHARACTER_REFERENCE( "LessSlantEqual;", "\U00002a7d" ) \
+ NAMED_CHARACTER_REFERENCE( "LessTilde;", "\U00002272" ) \
+ NAMED_CHARACTER_REFERENCE( "Lfr;", "\U0001d50f" ) \
+ NAMED_CHARACTER_REFERENCE( "Ll;", "\U000022d8" ) \
+ NAMED_CHARACTER_REFERENCE( "Lleftarrow;", "\U000021da" ) \
+ NAMED_CHARACTER_REFERENCE( "Lmidot;", "\U0000013f" ) \
+ NAMED_CHARACTER_REFERENCE( "LongLeftArrow;", "\U000027f5" ) \
+ NAMED_CHARACTER_REFERENCE( "LongLeftRightArrow;", "\U000027f7" ) \
+ NAMED_CHARACTER_REFERENCE( "LongRightArrow;", "\U000027f6" ) \
+ NAMED_CHARACTER_REFERENCE( "Longleftarrow;", "\U000027f8" ) \
+ NAMED_CHARACTER_REFERENCE( "Longleftrightarrow;", "\U000027fa" ) \
+ NAMED_CHARACTER_REFERENCE( "Longrightarrow;", "\U000027f9" ) \
+ NAMED_CHARACTER_REFERENCE( "Lopf;", "\U0001d543" ) \
+ NAMED_CHARACTER_REFERENCE( "LowerLeftArrow;", "\U00002199" ) \
+ NAMED_CHARACTER_REFERENCE( "LowerRightArrow;", "\U00002198" ) \
+ NAMED_CHARACTER_REFERENCE( "Lscr;", "\U00002112" ) \
+ NAMED_CHARACTER_REFERENCE( "Lsh;", "\U000021b0" ) \
+ NAMED_CHARACTER_REFERENCE( "Lstrok;", "\U00000141" ) \
+ NAMED_CHARACTER_REFERENCE( "Lt;", "\U0000226a" ) \
+ NAMED_CHARACTER_REFERENCE( "Map;", "\U00002905" ) \
+ NAMED_CHARACTER_REFERENCE( "Mcy;", "\U0000041c" ) \
+ NAMED_CHARACTER_REFERENCE( "MediumSpace;", "\U0000205f" ) \
+ NAMED_CHARACTER_REFERENCE( "Mellintrf;", "\U00002133" ) \
+ NAMED_CHARACTER_REFERENCE( "Mfr;", "\U0001d510" ) \
+ NAMED_CHARACTER_REFERENCE( "MinusPlus;", "\U00002213" ) \
+ NAMED_CHARACTER_REFERENCE( "Mopf;", "\U0001d544" ) \
+ NAMED_CHARACTER_REFERENCE( "Mscr;", "\U00002133" ) \
+ NAMED_CHARACTER_REFERENCE( "Mu;", "\U0000039c" ) \
+ NAMED_CHARACTER_REFERENCE( "NJcy;", "\U0000040a" ) \
+ NAMED_CHARACTER_REFERENCE( "Nacute;", "\U00000143" ) \
+ NAMED_CHARACTER_REFERENCE( "Ncaron;", "\U00000147" ) \
+ NAMED_CHARACTER_REFERENCE( "Ncedil;", "\U00000145" ) \
+ NAMED_CHARACTER_REFERENCE( "Ncy;", "\U0000041d" ) \
+ NAMED_CHARACTER_REFERENCE( "NegativeMediumSpace;", "\U0000200b" ) \
+ NAMED_CHARACTER_REFERENCE( "NegativeThickSpace;", "\U0000200b" ) \
+ NAMED_CHARACTER_REFERENCE( "NegativeThinSpace;", "\U0000200b" ) \
+ NAMED_CHARACTER_REFERENCE( "NegativeVeryThinSpace;", "\U0000200b" ) \
+ NAMED_CHARACTER_REFERENCE( "NestedGreaterGreater;", "\U0000226b" ) \
+ NAMED_CHARACTER_REFERENCE( "NestedLessLess;", "\U0000226a" ) \
+ NAMED_CHARACTER_REFERENCE( "NewLine;", "\n" ) \
+ NAMED_CHARACTER_REFERENCE( "Nfr;", "\U0001d511" ) \
+ NAMED_CHARACTER_REFERENCE( "NoBreak;", "\U00002060" ) \
+ NAMED_CHARACTER_REFERENCE( "NonBreakingSpace;", "\U000000a0" ) \
+ NAMED_CHARACTER_REFERENCE( "Nopf;", "\U00002115" ) \
+ NAMED_CHARACTER_REFERENCE( "Not;", "\U00002aec" ) \
+ NAMED_CHARACTER_REFERENCE( "NotCongruent;", "\U00002262" ) \
+ NAMED_CHARACTER_REFERENCE( "NotCupCap;", "\U0000226d" ) \
+ NAMED_CHARACTER_REFERENCE( "NotDoubleVerticalBar;", "\U00002226" ) \
+ NAMED_CHARACTER_REFERENCE( "NotElement;", "\U00002209" ) \
+ NAMED_CHARACTER_REFERENCE( "NotEqual;", "\U00002260" ) \
+ NAMED_CHARACTER_REFERENCE( "NotEqualTilde;", "\U00002242\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotExists;", "\U00002204" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreater;", "\U0000226f" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterEqual;", "\U00002271" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterFullEqual;", "\U00002267\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterGreater;", "\U0000226b\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterLess;", "\U00002279" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterSlantEqual;", "\U00002a7e\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotGreaterTilde;", "\U00002275" ) \
+ NAMED_CHARACTER_REFERENCE( "NotHumpDownHump;", "\U0000224e\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotHumpEqual;", "\U0000224f\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLeftTriangle;", "\U000022ea" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLeftTriangleBar;", "\U000029cf\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLeftTriangleEqual;", "\U000022ec" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLess;", "\U0000226e" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLessEqual;", "\U00002270" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLessGreater;", "\U00002278" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLessLess;", "\U0000226a\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLessSlantEqual;", "\U00002a7d\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotLessTilde;", "\U00002274" ) \
+ NAMED_CHARACTER_REFERENCE( "NotNestedGreaterGreater;", "\U00002aa2\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotNestedLessLess;", "\U00002aa1\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotPrecedes;", "\U00002280" ) \
+ NAMED_CHARACTER_REFERENCE( "NotPrecedesEqual;", "\U00002aaf\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotPrecedesSlantEqual;", "\U000022e0" ) \
+ NAMED_CHARACTER_REFERENCE( "NotReverseElement;", "\U0000220c" ) \
+ NAMED_CHARACTER_REFERENCE( "NotRightTriangle;", "\U000022eb" ) \
+ NAMED_CHARACTER_REFERENCE( "NotRightTriangleBar;", "\U000029d0\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotRightTriangleEqual;", "\U000022ed" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSquareSubset;", "\U0000228f\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSquareSubsetEqual;", "\U000022e2" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSquareSuperset;", "\U00002290\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSquareSupersetEqual;", "\U000022e3" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSubset;", "\U00002282\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSubsetEqual;", "\U00002288" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSucceeds;", "\U00002281" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSucceedsEqual;", "\U00002ab0\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSucceedsSlantEqual;", "\U000022e1" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSucceedsTilde;", "\U0000227f\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSuperset;", "\U00002283\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "NotSupersetEqual;", "\U00002289" ) \
+ NAMED_CHARACTER_REFERENCE( "NotTilde;", "\U00002241" ) \
+ NAMED_CHARACTER_REFERENCE( "NotTildeEqual;", "\U00002244" ) \
+ NAMED_CHARACTER_REFERENCE( "NotTildeFullEqual;", "\U00002247" ) \
+ NAMED_CHARACTER_REFERENCE( "NotTildeTilde;", "\U00002249" ) \
+ NAMED_CHARACTER_REFERENCE( "NotVerticalBar;", "\U00002224" ) \
+ NAMED_CHARACTER_REFERENCE( "Nscr;", "\U0001d4a9" ) \
+ NAMED_CHARACTER_REFERENCE( "Ntilde", "\U000000d1" ) \
+ NAMED_CHARACTER_REFERENCE( "Ntilde;", "\U000000d1" ) \
+ NAMED_CHARACTER_REFERENCE( "Nu;", "\U0000039d" ) \
+ NAMED_CHARACTER_REFERENCE( "OElig;", "\U00000152" ) \
+ NAMED_CHARACTER_REFERENCE( "Oacute", "\U000000d3" ) \
+ NAMED_CHARACTER_REFERENCE( "Oacute;", "\U000000d3" ) \
+ NAMED_CHARACTER_REFERENCE( "Ocirc", "\U000000d4" ) \
+ NAMED_CHARACTER_REFERENCE( "Ocirc;", "\U000000d4" ) \
+ NAMED_CHARACTER_REFERENCE( "Ocy;", "\U0000041e" ) \
+ NAMED_CHARACTER_REFERENCE( "Odblac;", "\U00000150" ) \
+ NAMED_CHARACTER_REFERENCE( "Ofr;", "\U0001d512" ) \
+ NAMED_CHARACTER_REFERENCE( "Ograve", "\U000000d2" ) \
+ NAMED_CHARACTER_REFERENCE( "Ograve;", "\U000000d2" ) \
+ NAMED_CHARACTER_REFERENCE( "Omacr;", "\U0000014c" ) \
+ NAMED_CHARACTER_REFERENCE( "Omega;", "\U000003a9" ) \
+ NAMED_CHARACTER_REFERENCE( "Omicron;", "\U0000039f" ) \
+ NAMED_CHARACTER_REFERENCE( "Oopf;", "\U0001d546" ) \
+ NAMED_CHARACTER_REFERENCE( "OpenCurlyDoubleQuote;", "\U0000201c" ) \
+ NAMED_CHARACTER_REFERENCE( "OpenCurlyQuote;", "\U00002018" ) \
+ NAMED_CHARACTER_REFERENCE( "Or;", "\U00002a54" ) \
+ NAMED_CHARACTER_REFERENCE( "Oscr;", "\U0001d4aa" ) \
+ NAMED_CHARACTER_REFERENCE( "Oslash", "\U000000d8" ) \
+ NAMED_CHARACTER_REFERENCE( "Oslash;", "\U000000d8" ) \
+ NAMED_CHARACTER_REFERENCE( "Otilde", "\U000000d5" ) \
+ NAMED_CHARACTER_REFERENCE( "Otilde;", "\U000000d5" ) \
+ NAMED_CHARACTER_REFERENCE( "Otimes;", "\U00002a37" ) \
+ NAMED_CHARACTER_REFERENCE( "Ouml", "\U000000d6" ) \
+ NAMED_CHARACTER_REFERENCE( "Ouml;", "\U000000d6" ) \
+ NAMED_CHARACTER_REFERENCE( "OverBar;", "\U0000203e" ) \
+ NAMED_CHARACTER_REFERENCE( "OverBrace;", "\U000023de" ) \
+ NAMED_CHARACTER_REFERENCE( "OverBracket;", "\U000023b4" ) \
+ NAMED_CHARACTER_REFERENCE( "OverParenthesis;", "\U000023dc" ) \
+ NAMED_CHARACTER_REFERENCE( "PartialD;", "\U00002202" ) \
+ NAMED_CHARACTER_REFERENCE( "Pcy;", "\U0000041f" ) \
+ NAMED_CHARACTER_REFERENCE( "Pfr;", "\U0001d513" ) \
+ NAMED_CHARACTER_REFERENCE( "Phi;", "\U000003a6" ) \
+ NAMED_CHARACTER_REFERENCE( "Pi;", "\U000003a0" ) \
+ NAMED_CHARACTER_REFERENCE( "PlusMinus;", "\U000000b1" ) \
+ NAMED_CHARACTER_REFERENCE( "Poincareplane;", "\U0000210c" ) \
+ NAMED_CHARACTER_REFERENCE( "Popf;", "\U00002119" ) \
+ NAMED_CHARACTER_REFERENCE( "Pr;", "\U00002abb" ) \
+ NAMED_CHARACTER_REFERENCE( "Precedes;", "\U0000227a" ) \
+ NAMED_CHARACTER_REFERENCE( "PrecedesEqual;", "\U00002aaf" ) \
+ NAMED_CHARACTER_REFERENCE( "PrecedesSlantEqual;", "\U0000227c" ) \
+ NAMED_CHARACTER_REFERENCE( "PrecedesTilde;", "\U0000227e" ) \
+ NAMED_CHARACTER_REFERENCE( "Prime;", "\U00002033" ) \
+ NAMED_CHARACTER_REFERENCE( "Product;", "\U0000220f" ) \
+ NAMED_CHARACTER_REFERENCE( "Proportion;", "\U00002237" ) \
+ NAMED_CHARACTER_REFERENCE( "Proportional;", "\U0000221d" ) \
+ NAMED_CHARACTER_REFERENCE( "Pscr;", "\U0001d4ab" ) \
+ NAMED_CHARACTER_REFERENCE( "Psi;", "\U000003a8" ) \
+ NAMED_CHARACTER_REFERENCE( "QUOT", "\"" ) \
+ NAMED_CHARACTER_REFERENCE( "QUOT;", "\"" ) \
+ NAMED_CHARACTER_REFERENCE( "Qfr;", "\U0001d514" ) \
+ NAMED_CHARACTER_REFERENCE( "Qopf;", "\U0000211a" ) \
+ NAMED_CHARACTER_REFERENCE( "Qscr;", "\U0001d4ac" ) \
+ NAMED_CHARACTER_REFERENCE( "RBarr;", "\U00002910" ) \
+ NAMED_CHARACTER_REFERENCE( "REG", "\U000000ae" ) \
+ NAMED_CHARACTER_REFERENCE( "REG;", "\U000000ae" ) \
+ NAMED_CHARACTER_REFERENCE( "Racute;", "\U00000154" ) \
+ NAMED_CHARACTER_REFERENCE( "Rang;", "\U000027eb" ) \
+ NAMED_CHARACTER_REFERENCE( "Rarr;", "\U000021a0" ) \
+ NAMED_CHARACTER_REFERENCE( "Rarrtl;", "\U00002916" ) \
+ NAMED_CHARACTER_REFERENCE( "Rcaron;", "\U00000158" ) \
+ NAMED_CHARACTER_REFERENCE( "Rcedil;", "\U00000156" ) \
+ NAMED_CHARACTER_REFERENCE( "Rcy;", "\U00000420" ) \
+ NAMED_CHARACTER_REFERENCE( "Re;", "\U0000211c" ) \
+ NAMED_CHARACTER_REFERENCE( "ReverseElement;", "\U0000220b" ) \
+ NAMED_CHARACTER_REFERENCE( "ReverseEquilibrium;", "\U000021cb" ) \
+ NAMED_CHARACTER_REFERENCE( "ReverseUpEquilibrium;", "\U0000296f" ) \
+ NAMED_CHARACTER_REFERENCE( "Rfr;", "\U0000211c" ) \
+ NAMED_CHARACTER_REFERENCE( "Rho;", "\U000003a1" ) \
+ NAMED_CHARACTER_REFERENCE( "RightAngleBracket;", "\U000027e9" ) \
+ NAMED_CHARACTER_REFERENCE( "RightArrow;", "\U00002192" ) \
+ NAMED_CHARACTER_REFERENCE( "RightArrowBar;", "\U000021e5" ) \
+ NAMED_CHARACTER_REFERENCE( "RightArrowLeftArrow;", "\U000021c4" ) \
+ NAMED_CHARACTER_REFERENCE( "RightCeiling;", "\U00002309" ) \
+ NAMED_CHARACTER_REFERENCE( "RightDoubleBracket;", "\U000027e7" ) \
+ NAMED_CHARACTER_REFERENCE( "RightDownTeeVector;", "\U0000295d" ) \
+ NAMED_CHARACTER_REFERENCE( "RightDownVector;", "\U000021c2" ) \
+ NAMED_CHARACTER_REFERENCE( "RightDownVectorBar;", "\U00002955" ) \
+ NAMED_CHARACTER_REFERENCE( "RightFloor;", "\U0000230b" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTee;", "\U000022a2" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTeeArrow;", "\U000021a6" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTeeVector;", "\U0000295b" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTriangle;", "\U000022b3" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTriangleBar;", "\U000029d0" ) \
+ NAMED_CHARACTER_REFERENCE( "RightTriangleEqual;", "\U000022b5" ) \
+ NAMED_CHARACTER_REFERENCE( "RightUpDownVector;", "\U0000294f" ) \
+ NAMED_CHARACTER_REFERENCE( "RightUpTeeVector;", "\U0000295c" ) \
+ NAMED_CHARACTER_REFERENCE( "RightUpVector;", "\U000021be" ) \
+ NAMED_CHARACTER_REFERENCE( "RightUpVectorBar;", "\U00002954" ) \
+ NAMED_CHARACTER_REFERENCE( "RightVector;", "\U000021c0" ) \
+ NAMED_CHARACTER_REFERENCE( "RightVectorBar;", "\U00002953" ) \
+ NAMED_CHARACTER_REFERENCE( "Rightarrow;", "\U000021d2" ) \
+ NAMED_CHARACTER_REFERENCE( "Ropf;", "\U0000211d" ) \
+ NAMED_CHARACTER_REFERENCE( "RoundImplies;", "\U00002970" ) \
+ NAMED_CHARACTER_REFERENCE( "Rrightarrow;", "\U000021db" ) \
+ NAMED_CHARACTER_REFERENCE( "Rscr;", "\U0000211b" ) \
+ NAMED_CHARACTER_REFERENCE( "Rsh;", "\U000021b1" ) \
+ NAMED_CHARACTER_REFERENCE( "RuleDelayed;", "\U000029f4" ) \
+ NAMED_CHARACTER_REFERENCE( "SHCHcy;", "\U00000429" ) \
+ NAMED_CHARACTER_REFERENCE( "SHcy;", "\U00000428" ) \
+ NAMED_CHARACTER_REFERENCE( "SOFTcy;", "\U0000042c" ) \
+ NAMED_CHARACTER_REFERENCE( "Sacute;", "\U0000015a" ) \
+ NAMED_CHARACTER_REFERENCE( "Sc;", "\U00002abc" ) \
+ NAMED_CHARACTER_REFERENCE( "Scaron;", "\U00000160" ) \
+ NAMED_CHARACTER_REFERENCE( "Scedil;", "\U0000015e" ) \
+ NAMED_CHARACTER_REFERENCE( "Scirc;", "\U0000015c" ) \
+ NAMED_CHARACTER_REFERENCE( "Scy;", "\U00000421" ) \
+ NAMED_CHARACTER_REFERENCE( "Sfr;", "\U0001d516" ) \
+ NAMED_CHARACTER_REFERENCE( "ShortDownArrow;", "\U00002193" ) \
+ NAMED_CHARACTER_REFERENCE( "ShortLeftArrow;", "\U00002190" ) \
+ NAMED_CHARACTER_REFERENCE( "ShortRightArrow;", "\U00002192" ) \
+ NAMED_CHARACTER_REFERENCE( "ShortUpArrow;", "\U00002191" ) \
+ NAMED_CHARACTER_REFERENCE( "Sigma;", "\U000003a3" ) \
+ NAMED_CHARACTER_REFERENCE( "SmallCircle;", "\U00002218" ) \
+ NAMED_CHARACTER_REFERENCE( "Sopf;", "\U0001d54a" ) \
+ NAMED_CHARACTER_REFERENCE( "Sqrt;", "\U0000221a" ) \
+ NAMED_CHARACTER_REFERENCE( "Square;", "\U000025a1" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareIntersection;", "\U00002293" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareSubset;", "\U0000228f" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareSubsetEqual;", "\U00002291" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareSuperset;", "\U00002290" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareSupersetEqual;", "\U00002292" ) \
+ NAMED_CHARACTER_REFERENCE( "SquareUnion;", "\U00002294" ) \
+ NAMED_CHARACTER_REFERENCE( "Sscr;", "\U0001d4ae" ) \
+ NAMED_CHARACTER_REFERENCE( "Star;", "\U000022c6" ) \
+ NAMED_CHARACTER_REFERENCE( "Sub;", "\U000022d0" ) \
+ NAMED_CHARACTER_REFERENCE( "Subset;", "\U000022d0" ) \
+ NAMED_CHARACTER_REFERENCE( "SubsetEqual;", "\U00002286" ) \
+ NAMED_CHARACTER_REFERENCE( "Succeeds;", "\U0000227b" ) \
+ NAMED_CHARACTER_REFERENCE( "SucceedsEqual;", "\U00002ab0" ) \
+ NAMED_CHARACTER_REFERENCE( "SucceedsSlantEqual;", "\U0000227d" ) \
+ NAMED_CHARACTER_REFERENCE( "SucceedsTilde;", "\U0000227f" ) \
+ NAMED_CHARACTER_REFERENCE( "SuchThat;", "\U0000220b" ) \
+ NAMED_CHARACTER_REFERENCE( "Sum;", "\U00002211" ) \
+ NAMED_CHARACTER_REFERENCE( "Sup;", "\U000022d1" ) \
+ NAMED_CHARACTER_REFERENCE( "Superset;", "\U00002283" ) \
+ NAMED_CHARACTER_REFERENCE( "SupersetEqual;", "\U00002287" ) \
+ NAMED_CHARACTER_REFERENCE( "Supset;", "\U000022d1" ) \
+ NAMED_CHARACTER_REFERENCE( "THORN", "\U000000de" ) \
+ NAMED_CHARACTER_REFERENCE( "THORN;", "\U000000de" ) \
+ NAMED_CHARACTER_REFERENCE( "TRADE;", "\U00002122" ) \
+ NAMED_CHARACTER_REFERENCE( "TSHcy;", "\U0000040b" ) \
+ NAMED_CHARACTER_REFERENCE( "TScy;", "\U00000426" ) \
+ NAMED_CHARACTER_REFERENCE( "Tab;", "\t" ) \
+ NAMED_CHARACTER_REFERENCE( "Tau;", "\U000003a4" ) \
+ NAMED_CHARACTER_REFERENCE( "Tcaron;", "\U00000164" ) \
+ NAMED_CHARACTER_REFERENCE( "Tcedil;", "\U00000162" ) \
+ NAMED_CHARACTER_REFERENCE( "Tcy;", "\U00000422" ) \
+ NAMED_CHARACTER_REFERENCE( "Tfr;", "\U0001d517" ) \
+ NAMED_CHARACTER_REFERENCE( "Therefore;", "\U00002234" ) \
+ NAMED_CHARACTER_REFERENCE( "Theta;", "\U00000398" ) \
+ NAMED_CHARACTER_REFERENCE( "ThickSpace;", "\U0000205f\U0000200a" ) \
+ NAMED_CHARACTER_REFERENCE( "ThinSpace;", "\U00002009" ) \
+ NAMED_CHARACTER_REFERENCE( "Tilde;", "\U0000223c" ) \
+ NAMED_CHARACTER_REFERENCE( "TildeEqual;", "\U00002243" ) \
+ NAMED_CHARACTER_REFERENCE( "TildeFullEqual;", "\U00002245" ) \
+ NAMED_CHARACTER_REFERENCE( "TildeTilde;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "Topf;", "\U0001d54b" ) \
+ NAMED_CHARACTER_REFERENCE( "TripleDot;", "\U000020db" ) \
+ NAMED_CHARACTER_REFERENCE( "Tscr;", "\U0001d4af" ) \
+ NAMED_CHARACTER_REFERENCE( "Tstrok;", "\U00000166" ) \
+ NAMED_CHARACTER_REFERENCE( "Uacute", "\U000000da" ) \
+ NAMED_CHARACTER_REFERENCE( "Uacute;", "\U000000da" ) \
+ NAMED_CHARACTER_REFERENCE( "Uarr;", "\U0000219f" ) \
+ NAMED_CHARACTER_REFERENCE( "Uarrocir;", "\U00002949" ) \
+ NAMED_CHARACTER_REFERENCE( "Ubrcy;", "\U0000040e" ) \
+ NAMED_CHARACTER_REFERENCE( "Ubreve;", "\U0000016c" ) \
+ NAMED_CHARACTER_REFERENCE( "Ucirc", "\U000000db" ) \
+ NAMED_CHARACTER_REFERENCE( "Ucirc;", "\U000000db" ) \
+ NAMED_CHARACTER_REFERENCE( "Ucy;", "\U00000423" ) \
+ NAMED_CHARACTER_REFERENCE( "Udblac;", "\U00000170" ) \
+ NAMED_CHARACTER_REFERENCE( "Ufr;", "\U0001d518" ) \
+ NAMED_CHARACTER_REFERENCE( "Ugrave", "\U000000d9" ) \
+ NAMED_CHARACTER_REFERENCE( "Ugrave;", "\U000000d9" ) \
+ NAMED_CHARACTER_REFERENCE( "Umacr;", "\U0000016a" ) \
+ NAMED_CHARACTER_REFERENCE( "UnderBar;", "_" ) \
+ NAMED_CHARACTER_REFERENCE( "UnderBrace;", "\U000023df" ) \
+ NAMED_CHARACTER_REFERENCE( "UnderBracket;", "\U000023b5" ) \
+ NAMED_CHARACTER_REFERENCE( "UnderParenthesis;", "\U000023dd" ) \
+ NAMED_CHARACTER_REFERENCE( "Union;", "\U000022c3" ) \
+ NAMED_CHARACTER_REFERENCE( "UnionPlus;", "\U0000228e" ) \
+ NAMED_CHARACTER_REFERENCE( "Uogon;", "\U00000172" ) \
+ NAMED_CHARACTER_REFERENCE( "Uopf;", "\U0001d54c" ) \
+ NAMED_CHARACTER_REFERENCE( "UpArrow;", "\U00002191" ) \
+ NAMED_CHARACTER_REFERENCE( "UpArrowBar;", "\U00002912" ) \
+ NAMED_CHARACTER_REFERENCE( "UpArrowDownArrow;", "\U000021c5" ) \
+ NAMED_CHARACTER_REFERENCE( "UpDownArrow;", "\U00002195" ) \
+ NAMED_CHARACTER_REFERENCE( "UpEquilibrium;", "\U0000296e" ) \
+ NAMED_CHARACTER_REFERENCE( "UpTee;", "\U000022a5" ) \
+ NAMED_CHARACTER_REFERENCE( "UpTeeArrow;", "\U000021a5" ) \
+ NAMED_CHARACTER_REFERENCE( "Uparrow;", "\U000021d1" ) \
+ NAMED_CHARACTER_REFERENCE( "Updownarrow;", "\U000021d5" ) \
+ NAMED_CHARACTER_REFERENCE( "UpperLeftArrow;", "\U00002196" ) \
+ NAMED_CHARACTER_REFERENCE( "UpperRightArrow;", "\U00002197" ) \
+ NAMED_CHARACTER_REFERENCE( "Upsi;", "\U000003d2" ) \
+ NAMED_CHARACTER_REFERENCE( "Upsilon;", "\U000003a5" ) \
+ NAMED_CHARACTER_REFERENCE( "Uring;", "\U0000016e" ) \
+ NAMED_CHARACTER_REFERENCE( "Uscr;", "\U0001d4b0" ) \
+ NAMED_CHARACTER_REFERENCE( "Utilde;", "\U00000168" ) \
+ NAMED_CHARACTER_REFERENCE( "Uuml", "\U000000dc" ) \
+ NAMED_CHARACTER_REFERENCE( "Uuml;", "\U000000dc" ) \
+ NAMED_CHARACTER_REFERENCE( "VDash;", "\U000022ab" ) \
+ NAMED_CHARACTER_REFERENCE( "Vbar;", "\U00002aeb" ) \
+ NAMED_CHARACTER_REFERENCE( "Vcy;", "\U00000412" ) \
+ NAMED_CHARACTER_REFERENCE( "Vdash;", "\U000022a9" ) \
+ NAMED_CHARACTER_REFERENCE( "Vdashl;", "\U00002ae6" ) \
+ NAMED_CHARACTER_REFERENCE( "Vee;", "\U000022c1" ) \
+ NAMED_CHARACTER_REFERENCE( "Verbar;", "\U00002016" ) \
+ NAMED_CHARACTER_REFERENCE( "Vert;", "\U00002016" ) \
+ NAMED_CHARACTER_REFERENCE( "VerticalBar;", "\U00002223" ) \
+ NAMED_CHARACTER_REFERENCE( "VerticalLine;", "|" ) \
+ NAMED_CHARACTER_REFERENCE( "VerticalSeparator;", "\U00002758" ) \
+ NAMED_CHARACTER_REFERENCE( "VerticalTilde;", "\U00002240" ) \
+ NAMED_CHARACTER_REFERENCE( "VeryThinSpace;", "\U0000200a" ) \
+ NAMED_CHARACTER_REFERENCE( "Vfr;", "\U0001d519" ) \
+ NAMED_CHARACTER_REFERENCE( "Vopf;", "\U0001d54d" ) \
+ NAMED_CHARACTER_REFERENCE( "Vscr;", "\U0001d4b1" ) \
+ NAMED_CHARACTER_REFERENCE( "Vvdash;", "\U000022aa" ) \
+ NAMED_CHARACTER_REFERENCE( "Wcirc;", "\U00000174" ) \
+ NAMED_CHARACTER_REFERENCE( "Wedge;", "\U000022c0" ) \
+ NAMED_CHARACTER_REFERENCE( "Wfr;", "\U0001d51a" ) \
+ NAMED_CHARACTER_REFERENCE( "Wopf;", "\U0001d54e" ) \
+ NAMED_CHARACTER_REFERENCE( "Wscr;", "\U0001d4b2" ) \
+ NAMED_CHARACTER_REFERENCE( "Xfr;", "\U0001d51b" ) \
+ NAMED_CHARACTER_REFERENCE( "Xi;", "\U0000039e" ) \
+ NAMED_CHARACTER_REFERENCE( "Xopf;", "\U0001d54f" ) \
+ NAMED_CHARACTER_REFERENCE( "Xscr;", "\U0001d4b3" ) \
+ NAMED_CHARACTER_REFERENCE( "YAcy;", "\U0000042f" ) \
+ NAMED_CHARACTER_REFERENCE( "YIcy;", "\U00000407" ) \
+ NAMED_CHARACTER_REFERENCE( "YUcy;", "\U0000042e" ) \
+ NAMED_CHARACTER_REFERENCE( "Yacute", "\U000000dd" ) \
+ NAMED_CHARACTER_REFERENCE( "Yacute;", "\U000000dd" ) \
+ NAMED_CHARACTER_REFERENCE( "Ycirc;", "\U00000176" ) \
+ NAMED_CHARACTER_REFERENCE( "Ycy;", "\U0000042b" ) \
+ NAMED_CHARACTER_REFERENCE( "Yfr;", "\U0001d51c" ) \
+ NAMED_CHARACTER_REFERENCE( "Yopf;", "\U0001d550" ) \
+ NAMED_CHARACTER_REFERENCE( "Yscr;", "\U0001d4b4" ) \
+ NAMED_CHARACTER_REFERENCE( "Yuml;", "\U00000178" ) \
+ NAMED_CHARACTER_REFERENCE( "ZHcy;", "\U00000416" ) \
+ NAMED_CHARACTER_REFERENCE( "Zacute;", "\U00000179" ) \
+ NAMED_CHARACTER_REFERENCE( "Zcaron;", "\U0000017d" ) \
+ NAMED_CHARACTER_REFERENCE( "Zcy;", "\U00000417" ) \
+ NAMED_CHARACTER_REFERENCE( "Zdot;", "\U0000017b" ) \
+ NAMED_CHARACTER_REFERENCE( "ZeroWidthSpace;", "\U0000200b" ) \
+ NAMED_CHARACTER_REFERENCE( "Zeta;", "\U00000396" ) \
+ NAMED_CHARACTER_REFERENCE( "Zfr;", "\U00002128" ) \
+ NAMED_CHARACTER_REFERENCE( "Zopf;", "\U00002124" ) \
+ NAMED_CHARACTER_REFERENCE( "Zscr;", "\U0001d4b5" ) \
+ NAMED_CHARACTER_REFERENCE( "aacute", "\U000000e1" ) \
+ NAMED_CHARACTER_REFERENCE( "aacute;", "\U000000e1" ) \
+ NAMED_CHARACTER_REFERENCE( "abreve;", "\U00000103" ) \
+ NAMED_CHARACTER_REFERENCE( "ac;", "\U0000223e" ) \
+ NAMED_CHARACTER_REFERENCE( "acE;", "\U0000223e\U00000333" ) \
+ NAMED_CHARACTER_REFERENCE( "acd;", "\U0000223f" ) \
+ NAMED_CHARACTER_REFERENCE( "acirc", "\U000000e2" ) \
+ NAMED_CHARACTER_REFERENCE( "acirc;", "\U000000e2" ) \
+ NAMED_CHARACTER_REFERENCE( "acute", "\U000000b4" ) \
+ NAMED_CHARACTER_REFERENCE( "acute;", "\U000000b4" ) \
+ NAMED_CHARACTER_REFERENCE( "acy;", "\U00000430" ) \
+ NAMED_CHARACTER_REFERENCE( "aelig", "\U000000e6" ) \
+ NAMED_CHARACTER_REFERENCE( "aelig;", "\U000000e6" ) \
+ NAMED_CHARACTER_REFERENCE( "af;", "\U00002061" ) \
+ NAMED_CHARACTER_REFERENCE( "afr;", "\U0001d51e" ) \
+ NAMED_CHARACTER_REFERENCE( "agrave", "\U000000e0" ) \
+ NAMED_CHARACTER_REFERENCE( "agrave;", "\U000000e0" ) \
+ NAMED_CHARACTER_REFERENCE( "alefsym;", "\U00002135" ) \
+ NAMED_CHARACTER_REFERENCE( "aleph;", "\U00002135" ) \
+ NAMED_CHARACTER_REFERENCE( "alpha;", "\U000003b1" ) \
+ NAMED_CHARACTER_REFERENCE( "amacr;", "\U00000101" ) \
+ NAMED_CHARACTER_REFERENCE( "amalg;", "\U00002a3f" ) \
+ NAMED_CHARACTER_REFERENCE( "amp", "&" ) \
+ NAMED_CHARACTER_REFERENCE( "amp;", "&" ) \
+ NAMED_CHARACTER_REFERENCE( "and;", "\U00002227" ) \
+ NAMED_CHARACTER_REFERENCE( "andand;", "\U00002a55" ) \
+ NAMED_CHARACTER_REFERENCE( "andd;", "\U00002a5c" ) \
+ NAMED_CHARACTER_REFERENCE( "andslope;", "\U00002a58" ) \
+ NAMED_CHARACTER_REFERENCE( "andv;", "\U00002a5a" ) \
+ NAMED_CHARACTER_REFERENCE( "ang;", "\U00002220" ) \
+ NAMED_CHARACTER_REFERENCE( "ange;", "\U000029a4" ) \
+ NAMED_CHARACTER_REFERENCE( "angle;", "\U00002220" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsd;", "\U00002221" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdaa;", "\U000029a8" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdab;", "\U000029a9" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdac;", "\U000029aa" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdad;", "\U000029ab" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdae;", "\U000029ac" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdaf;", "\U000029ad" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdag;", "\U000029ae" ) \
+ NAMED_CHARACTER_REFERENCE( "angmsdah;", "\U000029af" ) \
+ NAMED_CHARACTER_REFERENCE( "angrt;", "\U0000221f" ) \
+ NAMED_CHARACTER_REFERENCE( "angrtvb;", "\U000022be" ) \
+ NAMED_CHARACTER_REFERENCE( "angrtvbd;", "\U0000299d" ) \
+ NAMED_CHARACTER_REFERENCE( "angsph;", "\U00002222" ) \
+ NAMED_CHARACTER_REFERENCE( "angst;", "\U000000c5" ) \
+ NAMED_CHARACTER_REFERENCE( "angzarr;", "\U0000237c" ) \
+ NAMED_CHARACTER_REFERENCE( "aogon;", "\U00000105" ) \
+ NAMED_CHARACTER_REFERENCE( "aopf;", "\U0001d552" ) \
+ NAMED_CHARACTER_REFERENCE( "ap;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "apE;", "\U00002a70" ) \
+ NAMED_CHARACTER_REFERENCE( "apacir;", "\U00002a6f" ) \
+ NAMED_CHARACTER_REFERENCE( "ape;", "\U0000224a" ) \
+ NAMED_CHARACTER_REFERENCE( "apid;", "\U0000224b" ) \
+ NAMED_CHARACTER_REFERENCE( "apos;", "'" ) \
+ NAMED_CHARACTER_REFERENCE( "approx;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "approxeq;", "\U0000224a" ) \
+ NAMED_CHARACTER_REFERENCE( "aring", "\U000000e5" ) \
+ NAMED_CHARACTER_REFERENCE( "aring;", "\U000000e5" ) \
+ NAMED_CHARACTER_REFERENCE( "ascr;", "\U0001d4b6" ) \
+ NAMED_CHARACTER_REFERENCE( "ast;", "*" ) \
+ NAMED_CHARACTER_REFERENCE( "asymp;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "asympeq;", "\U0000224d" ) \
+ NAMED_CHARACTER_REFERENCE( "atilde", "\U000000e3" ) \
+ NAMED_CHARACTER_REFERENCE( "atilde;", "\U000000e3" ) \
+ NAMED_CHARACTER_REFERENCE( "auml", "\U000000e4" ) \
+ NAMED_CHARACTER_REFERENCE( "auml;", "\U000000e4" ) \
+ NAMED_CHARACTER_REFERENCE( "awconint;", "\U00002233" ) \
+ NAMED_CHARACTER_REFERENCE( "awint;", "\U00002a11" ) \
+ NAMED_CHARACTER_REFERENCE( "bNot;", "\U00002aed" ) \
+ NAMED_CHARACTER_REFERENCE( "backcong;", "\U0000224c" ) \
+ NAMED_CHARACTER_REFERENCE( "backepsilon;", "\U000003f6" ) \
+ NAMED_CHARACTER_REFERENCE( "backprime;", "\U00002035" ) \
+ NAMED_CHARACTER_REFERENCE( "backsim;", "\U0000223d" ) \
+ NAMED_CHARACTER_REFERENCE( "backsimeq;", "\U000022cd" ) \
+ NAMED_CHARACTER_REFERENCE( "barvee;", "\U000022bd" ) \
+ NAMED_CHARACTER_REFERENCE( "barwed;", "\U00002305" ) \
+ NAMED_CHARACTER_REFERENCE( "barwedge;", "\U00002305" ) \
+ NAMED_CHARACTER_REFERENCE( "bbrk;", "\U000023b5" ) \
+ NAMED_CHARACTER_REFERENCE( "bbrktbrk;", "\U000023b6" ) \
+ NAMED_CHARACTER_REFERENCE( "bcong;", "\U0000224c" ) \
+ NAMED_CHARACTER_REFERENCE( "bcy;", "\U00000431" ) \
+ NAMED_CHARACTER_REFERENCE( "bdquo;", "\U0000201e" ) \
+ NAMED_CHARACTER_REFERENCE( "becaus;", "\U00002235" ) \
+ NAMED_CHARACTER_REFERENCE( "because;", "\U00002235" ) \
+ NAMED_CHARACTER_REFERENCE( "bemptyv;", "\U000029b0" ) \
+ NAMED_CHARACTER_REFERENCE( "bepsi;", "\U000003f6" ) \
+ NAMED_CHARACTER_REFERENCE( "bernou;", "\U0000212c" ) \
+ NAMED_CHARACTER_REFERENCE( "beta;", "\U000003b2" ) \
+ NAMED_CHARACTER_REFERENCE( "beth;", "\U00002136" ) \
+ NAMED_CHARACTER_REFERENCE( "between;", "\U0000226c" ) \
+ NAMED_CHARACTER_REFERENCE( "bfr;", "\U0001d51f" ) \
+ NAMED_CHARACTER_REFERENCE( "bigcap;", "\U000022c2" ) \
+ NAMED_CHARACTER_REFERENCE( "bigcirc;", "\U000025ef" ) \
+ NAMED_CHARACTER_REFERENCE( "bigcup;", "\U000022c3" ) \
+ NAMED_CHARACTER_REFERENCE( "bigodot;", "\U00002a00" ) \
+ NAMED_CHARACTER_REFERENCE( "bigoplus;", "\U00002a01" ) \
+ NAMED_CHARACTER_REFERENCE( "bigotimes;", "\U00002a02" ) \
+ NAMED_CHARACTER_REFERENCE( "bigsqcup;", "\U00002a06" ) \
+ NAMED_CHARACTER_REFERENCE( "bigstar;", "\U00002605" ) \
+ NAMED_CHARACTER_REFERENCE( "bigtriangledown;", "\U000025bd" ) \
+ NAMED_CHARACTER_REFERENCE( "bigtriangleup;", "\U000025b3" ) \
+ NAMED_CHARACTER_REFERENCE( "biguplus;", "\U00002a04" ) \
+ NAMED_CHARACTER_REFERENCE( "bigvee;", "\U000022c1" ) \
+ NAMED_CHARACTER_REFERENCE( "bigwedge;", "\U000022c0" ) \
+ NAMED_CHARACTER_REFERENCE( "bkarow;", "\U0000290d" ) \
+ NAMED_CHARACTER_REFERENCE( "blacklozenge;", "\U000029eb" ) \
+ NAMED_CHARACTER_REFERENCE( "blacksquare;", "\U000025aa" ) \
+ NAMED_CHARACTER_REFERENCE( "blacktriangle;", "\U000025b4" ) \
+ NAMED_CHARACTER_REFERENCE( "blacktriangledown;", "\U000025be" ) \
+ NAMED_CHARACTER_REFERENCE( "blacktriangleleft;", "\U000025c2" ) \
+ NAMED_CHARACTER_REFERENCE( "blacktriangleright;", "\U000025b8" ) \
+ NAMED_CHARACTER_REFERENCE( "blank;", "\U00002423" ) \
+ NAMED_CHARACTER_REFERENCE( "blk12;", "\U00002592" ) \
+ NAMED_CHARACTER_REFERENCE( "blk14;", "\U00002591" ) \
+ NAMED_CHARACTER_REFERENCE( "blk34;", "\U00002593" ) \
+ NAMED_CHARACTER_REFERENCE( "block;", "\U00002588" ) \
+ NAMED_CHARACTER_REFERENCE( "bne;", "=\U000020e5" ) \
+ NAMED_CHARACTER_REFERENCE( "bnequiv;", "\U00002261\U000020e5" ) \
+ NAMED_CHARACTER_REFERENCE( "bnot;", "\U00002310" ) \
+ NAMED_CHARACTER_REFERENCE( "bopf;", "\U0001d553" ) \
+ NAMED_CHARACTER_REFERENCE( "bot;", "\U000022a5" ) \
+ NAMED_CHARACTER_REFERENCE( "bottom;", "\U000022a5" ) \
+ NAMED_CHARACTER_REFERENCE( "bowtie;", "\U000022c8" ) \
+ NAMED_CHARACTER_REFERENCE( "boxDL;", "\U00002557" ) \
+ NAMED_CHARACTER_REFERENCE( "boxDR;", "\U00002554" ) \
+ NAMED_CHARACTER_REFERENCE( "boxDl;", "\U00002556" ) \
+ NAMED_CHARACTER_REFERENCE( "boxDr;", "\U00002553" ) \
+ NAMED_CHARACTER_REFERENCE( "boxH;", "\U00002550" ) \
+ NAMED_CHARACTER_REFERENCE( "boxHD;", "\U00002566" ) \
+ NAMED_CHARACTER_REFERENCE( "boxHU;", "\U00002569" ) \
+ NAMED_CHARACTER_REFERENCE( "boxHd;", "\U00002564" ) \
+ NAMED_CHARACTER_REFERENCE( "boxHu;", "\U00002567" ) \
+ NAMED_CHARACTER_REFERENCE( "boxUL;", "\U0000255d" ) \
+ NAMED_CHARACTER_REFERENCE( "boxUR;", "\U0000255a" ) \
+ NAMED_CHARACTER_REFERENCE( "boxUl;", "\U0000255c" ) \
+ NAMED_CHARACTER_REFERENCE( "boxUr;", "\U00002559" ) \
+ NAMED_CHARACTER_REFERENCE( "boxV;", "\U00002551" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVH;", "\U0000256c" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVL;", "\U00002563" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVR;", "\U00002560" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVh;", "\U0000256b" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVl;", "\U00002562" ) \
+ NAMED_CHARACTER_REFERENCE( "boxVr;", "\U0000255f" ) \
+ NAMED_CHARACTER_REFERENCE( "boxbox;", "\U000029c9" ) \
+ NAMED_CHARACTER_REFERENCE( "boxdL;", "\U00002555" ) \
+ NAMED_CHARACTER_REFERENCE( "boxdR;", "\U00002552" ) \
+ NAMED_CHARACTER_REFERENCE( "boxdl;", "\U00002510" ) \
+ NAMED_CHARACTER_REFERENCE( "boxdr;", "\U0000250c" ) \
+ NAMED_CHARACTER_REFERENCE( "boxh;", "\U00002500" ) \
+ NAMED_CHARACTER_REFERENCE( "boxhD;", "\U00002565" ) \
+ NAMED_CHARACTER_REFERENCE( "boxhU;", "\U00002568" ) \
+ NAMED_CHARACTER_REFERENCE( "boxhd;", "\U0000252c" ) \
+ NAMED_CHARACTER_REFERENCE( "boxhu;", "\U00002534" ) \
+ NAMED_CHARACTER_REFERENCE( "boxminus;", "\U0000229f" ) \
+ NAMED_CHARACTER_REFERENCE( "boxplus;", "\U0000229e" ) \
+ NAMED_CHARACTER_REFERENCE( "boxtimes;", "\U000022a0" ) \
+ NAMED_CHARACTER_REFERENCE( "boxuL;", "\U0000255b" ) \
+ NAMED_CHARACTER_REFERENCE( "boxuR;", "\U00002558" ) \
+ NAMED_CHARACTER_REFERENCE( "boxul;", "\U00002518" ) \
+ NAMED_CHARACTER_REFERENCE( "boxur;", "\U00002514" ) \
+ NAMED_CHARACTER_REFERENCE( "boxv;", "\U00002502" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvH;", "\U0000256a" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvL;", "\U00002561" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvR;", "\U0000255e" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvh;", "\U0000253c" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvl;", "\U00002524" ) \
+ NAMED_CHARACTER_REFERENCE( "boxvr;", "\U0000251c" ) \
+ NAMED_CHARACTER_REFERENCE( "bprime;", "\U00002035" ) \
+ NAMED_CHARACTER_REFERENCE( "breve;", "\U000002d8" ) \
+ NAMED_CHARACTER_REFERENCE( "brvbar", "\U000000a6" ) \
+ NAMED_CHARACTER_REFERENCE( "brvbar;", "\U000000a6" ) \
+ NAMED_CHARACTER_REFERENCE( "bscr;", "\U0001d4b7" ) \
+ NAMED_CHARACTER_REFERENCE( "bsemi;", "\U0000204f" ) \
+ NAMED_CHARACTER_REFERENCE( "bsim;", "\U0000223d" ) \
+ NAMED_CHARACTER_REFERENCE( "bsime;", "\U000022cd" ) \
+ NAMED_CHARACTER_REFERENCE( "bsol;", "\\" ) \
+ NAMED_CHARACTER_REFERENCE( "bsolb;", "\U000029c5" ) \
+ NAMED_CHARACTER_REFERENCE( "bsolhsub;", "\U000027c8" ) \
+ NAMED_CHARACTER_REFERENCE( "bull;", "\U00002022" ) \
+ NAMED_CHARACTER_REFERENCE( "bullet;", "\U00002022" ) \
+ NAMED_CHARACTER_REFERENCE( "bump;", "\U0000224e" ) \
+ NAMED_CHARACTER_REFERENCE( "bumpE;", "\U00002aae" ) \
+ NAMED_CHARACTER_REFERENCE( "bumpe;", "\U0000224f" ) \
+ NAMED_CHARACTER_REFERENCE( "bumpeq;", "\U0000224f" ) \
+ NAMED_CHARACTER_REFERENCE( "cacute;", "\U00000107" ) \
+ NAMED_CHARACTER_REFERENCE( "cap;", "\U00002229" ) \
+ NAMED_CHARACTER_REFERENCE( "capand;", "\U00002a44" ) \
+ NAMED_CHARACTER_REFERENCE( "capbrcup;", "\U00002a49" ) \
+ NAMED_CHARACTER_REFERENCE( "capcap;", "\U00002a4b" ) \
+ NAMED_CHARACTER_REFERENCE( "capcup;", "\U00002a47" ) \
+ NAMED_CHARACTER_REFERENCE( "capdot;", "\U00002a40" ) \
+ NAMED_CHARACTER_REFERENCE( "caps;", "\U00002229\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "caret;", "\U00002041" ) \
+ NAMED_CHARACTER_REFERENCE( "caron;", "\U000002c7" ) \
+ NAMED_CHARACTER_REFERENCE( "ccaps;", "\U00002a4d" ) \
+ NAMED_CHARACTER_REFERENCE( "ccaron;", "\U0000010d" ) \
+ NAMED_CHARACTER_REFERENCE( "ccedil", "\U000000e7" ) \
+ NAMED_CHARACTER_REFERENCE( "ccedil;", "\U000000e7" ) \
+ NAMED_CHARACTER_REFERENCE( "ccirc;", "\U00000109" ) \
+ NAMED_CHARACTER_REFERENCE( "ccups;", "\U00002a4c" ) \
+ NAMED_CHARACTER_REFERENCE( "ccupssm;", "\U00002a50" ) \
+ NAMED_CHARACTER_REFERENCE( "cdot;", "\U0000010b" ) \
+ NAMED_CHARACTER_REFERENCE( "cedil", "\U000000b8" ) \
+ NAMED_CHARACTER_REFERENCE( "cedil;", "\U000000b8" ) \
+ NAMED_CHARACTER_REFERENCE( "cemptyv;", "\U000029b2" ) \
+ NAMED_CHARACTER_REFERENCE( "cent", "\U000000a2" ) \
+ NAMED_CHARACTER_REFERENCE( "cent;", "\U000000a2" ) \
+ NAMED_CHARACTER_REFERENCE( "centerdot;", "\U000000b7" ) \
+ NAMED_CHARACTER_REFERENCE( "cfr;", "\U0001d520" ) \
+ NAMED_CHARACTER_REFERENCE( "chcy;", "\U00000447" ) \
+ NAMED_CHARACTER_REFERENCE( "check;", "\U00002713" ) \
+ NAMED_CHARACTER_REFERENCE( "checkmark;", "\U00002713" ) \
+ NAMED_CHARACTER_REFERENCE( "chi;", "\U000003c7" ) \
+ NAMED_CHARACTER_REFERENCE( "cir;", "\U000025cb" ) \
+ NAMED_CHARACTER_REFERENCE( "cirE;", "\U000029c3" ) \
+ NAMED_CHARACTER_REFERENCE( "circ;", "\U000002c6" ) \
+ NAMED_CHARACTER_REFERENCE( "circeq;", "\U00002257" ) \
+ NAMED_CHARACTER_REFERENCE( "circlearrowleft;", "\U000021ba" ) \
+ NAMED_CHARACTER_REFERENCE( "circlearrowright;", "\U000021bb" ) \
+ NAMED_CHARACTER_REFERENCE( "circledR;", "\U000000ae" ) \
+ NAMED_CHARACTER_REFERENCE( "circledS;", "\U000024c8" ) \
+ NAMED_CHARACTER_REFERENCE( "circledast;", "\U0000229b" ) \
+ NAMED_CHARACTER_REFERENCE( "circledcirc;", "\U0000229a" ) \
+ NAMED_CHARACTER_REFERENCE( "circleddash;", "\U0000229d" ) \
+ NAMED_CHARACTER_REFERENCE( "cire;", "\U00002257" ) \
+ NAMED_CHARACTER_REFERENCE( "cirfnint;", "\U00002a10" ) \
+ NAMED_CHARACTER_REFERENCE( "cirmid;", "\U00002aef" ) \
+ NAMED_CHARACTER_REFERENCE( "cirscir;", "\U000029c2" ) \
+ NAMED_CHARACTER_REFERENCE( "clubs;", "\U00002663" ) \
+ NAMED_CHARACTER_REFERENCE( "clubsuit;", "\U00002663" ) \
+ NAMED_CHARACTER_REFERENCE( "colon;", ":" ) \
+ NAMED_CHARACTER_REFERENCE( "colone;", "\U00002254" ) \
+ NAMED_CHARACTER_REFERENCE( "coloneq;", "\U00002254" ) \
+ NAMED_CHARACTER_REFERENCE( "comma;", "," ) \
+ NAMED_CHARACTER_REFERENCE( "commat;", "\U00000040" ) \
+ NAMED_CHARACTER_REFERENCE( "comp;", "\U00002201" ) \
+ NAMED_CHARACTER_REFERENCE( "compfn;", "\U00002218" ) \
+ NAMED_CHARACTER_REFERENCE( "complement;", "\U00002201" ) \
+ NAMED_CHARACTER_REFERENCE( "complexes;", "\U00002102" ) \
+ NAMED_CHARACTER_REFERENCE( "cong;", "\U00002245" ) \
+ NAMED_CHARACTER_REFERENCE( "congdot;", "\U00002a6d" ) \
+ NAMED_CHARACTER_REFERENCE( "conint;", "\U0000222e" ) \
+ NAMED_CHARACTER_REFERENCE( "copf;", "\U0001d554" ) \
+ NAMED_CHARACTER_REFERENCE( "coprod;", "\U00002210" ) \
+ NAMED_CHARACTER_REFERENCE( "copy", "\U000000a9" ) \
+ NAMED_CHARACTER_REFERENCE( "copy;", "\U000000a9" ) \
+ NAMED_CHARACTER_REFERENCE( "copysr;", "\U00002117" ) \
+ NAMED_CHARACTER_REFERENCE( "crarr;", "\U000021b5" ) \
+ NAMED_CHARACTER_REFERENCE( "cross;", "\U00002717" ) \
+ NAMED_CHARACTER_REFERENCE( "cscr;", "\U0001d4b8" ) \
+ NAMED_CHARACTER_REFERENCE( "csub;", "\U00002acf" ) \
+ NAMED_CHARACTER_REFERENCE( "csube;", "\U00002ad1" ) \
+ NAMED_CHARACTER_REFERENCE( "csup;", "\U00002ad0" ) \
+ NAMED_CHARACTER_REFERENCE( "csupe;", "\U00002ad2" ) \
+ NAMED_CHARACTER_REFERENCE( "ctdot;", "\U000022ef" ) \
+ NAMED_CHARACTER_REFERENCE( "cudarrl;", "\U00002938" ) \
+ NAMED_CHARACTER_REFERENCE( "cudarrr;", "\U00002935" ) \
+ NAMED_CHARACTER_REFERENCE( "cuepr;", "\U000022de" ) \
+ NAMED_CHARACTER_REFERENCE( "cuesc;", "\U000022df" ) \
+ NAMED_CHARACTER_REFERENCE( "cularr;", "\U000021b6" ) \
+ NAMED_CHARACTER_REFERENCE( "cularrp;", "\U0000293d" ) \
+ NAMED_CHARACTER_REFERENCE( "cup;", "\U0000222a" ) \
+ NAMED_CHARACTER_REFERENCE( "cupbrcap;", "\U00002a48" ) \
+ NAMED_CHARACTER_REFERENCE( "cupcap;", "\U00002a46" ) \
+ NAMED_CHARACTER_REFERENCE( "cupcup;", "\U00002a4a" ) \
+ NAMED_CHARACTER_REFERENCE( "cupdot;", "\U0000228d" ) \
+ NAMED_CHARACTER_REFERENCE( "cupor;", "\U00002a45" ) \
+ NAMED_CHARACTER_REFERENCE( "cups;", "\U0000222a\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "curarr;", "\U000021b7" ) \
+ NAMED_CHARACTER_REFERENCE( "curarrm;", "\U0000293c" ) \
+ NAMED_CHARACTER_REFERENCE( "curlyeqprec;", "\U000022de" ) \
+ NAMED_CHARACTER_REFERENCE( "curlyeqsucc;", "\U000022df" ) \
+ NAMED_CHARACTER_REFERENCE( "curlyvee;", "\U000022ce" ) \
+ NAMED_CHARACTER_REFERENCE( "curlywedge;", "\U000022cf" ) \
+ NAMED_CHARACTER_REFERENCE( "curren", "\U000000a4" ) \
+ NAMED_CHARACTER_REFERENCE( "curren;", "\U000000a4" ) \
+ NAMED_CHARACTER_REFERENCE( "curvearrowleft;", "\U000021b6" ) \
+ NAMED_CHARACTER_REFERENCE( "curvearrowright;", "\U000021b7" ) \
+ NAMED_CHARACTER_REFERENCE( "cuvee;", "\U000022ce" ) \
+ NAMED_CHARACTER_REFERENCE( "cuwed;", "\U000022cf" ) \
+ NAMED_CHARACTER_REFERENCE( "cwconint;", "\U00002232" ) \
+ NAMED_CHARACTER_REFERENCE( "cwint;", "\U00002231" ) \
+ NAMED_CHARACTER_REFERENCE( "cylcty;", "\U0000232d" ) \
+ NAMED_CHARACTER_REFERENCE( "dArr;", "\U000021d3" ) \
+ NAMED_CHARACTER_REFERENCE( "dHar;", "\U00002965" ) \
+ NAMED_CHARACTER_REFERENCE( "dagger;", "\U00002020" ) \
+ NAMED_CHARACTER_REFERENCE( "daleth;", "\U00002138" ) \
+ NAMED_CHARACTER_REFERENCE( "darr;", "\U00002193" ) \
+ NAMED_CHARACTER_REFERENCE( "dash;", "\U00002010" ) \
+ NAMED_CHARACTER_REFERENCE( "dashv;", "\U000022a3" ) \
+ NAMED_CHARACTER_REFERENCE( "dbkarow;", "\U0000290f" ) \
+ NAMED_CHARACTER_REFERENCE( "dblac;", "\U000002dd" ) \
+ NAMED_CHARACTER_REFERENCE( "dcaron;", "\U0000010f" ) \
+ NAMED_CHARACTER_REFERENCE( "dcy;", "\U00000434" ) \
+ NAMED_CHARACTER_REFERENCE( "dd;", "\U00002146" ) \
+ NAMED_CHARACTER_REFERENCE( "ddagger;", "\U00002021" ) \
+ NAMED_CHARACTER_REFERENCE( "ddarr;", "\U000021ca" ) \
+ NAMED_CHARACTER_REFERENCE( "ddotseq;", "\U00002a77" ) \
+ NAMED_CHARACTER_REFERENCE( "deg", "\U000000b0" ) \
+ NAMED_CHARACTER_REFERENCE( "deg;", "\U000000b0" ) \
+ NAMED_CHARACTER_REFERENCE( "delta;", "\U000003b4" ) \
+ NAMED_CHARACTER_REFERENCE( "demptyv;", "\U000029b1" ) \
+ NAMED_CHARACTER_REFERENCE( "dfisht;", "\U0000297f" ) \
+ NAMED_CHARACTER_REFERENCE( "dfr;", "\U0001d521" ) \
+ NAMED_CHARACTER_REFERENCE( "dharl;", "\U000021c3" ) \
+ NAMED_CHARACTER_REFERENCE( "dharr;", "\U000021c2" ) \
+ NAMED_CHARACTER_REFERENCE( "diam;", "\U000022c4" ) \
+ NAMED_CHARACTER_REFERENCE( "diamond;", "\U000022c4" ) \
+ NAMED_CHARACTER_REFERENCE( "diamondsuit;", "\U00002666" ) \
+ NAMED_CHARACTER_REFERENCE( "diams;", "\U00002666" ) \
+ NAMED_CHARACTER_REFERENCE( "die;", "\U000000a8" ) \
+ NAMED_CHARACTER_REFERENCE( "digamma;", "\U000003dd" ) \
+ NAMED_CHARACTER_REFERENCE( "disin;", "\U000022f2" ) \
+ NAMED_CHARACTER_REFERENCE( "div;", "\U000000f7" ) \
+ NAMED_CHARACTER_REFERENCE( "divide", "\U000000f7" ) \
+ NAMED_CHARACTER_REFERENCE( "divide;", "\U000000f7" ) \
+ NAMED_CHARACTER_REFERENCE( "divideontimes;", "\U000022c7" ) \
+ NAMED_CHARACTER_REFERENCE( "divonx;", "\U000022c7" ) \
+ NAMED_CHARACTER_REFERENCE( "djcy;", "\U00000452" ) \
+ NAMED_CHARACTER_REFERENCE( "dlcorn;", "\U0000231e" ) \
+ NAMED_CHARACTER_REFERENCE( "dlcrop;", "\U0000230d" ) \
+ NAMED_CHARACTER_REFERENCE( "dollar;", "\U00000024" ) \
+ NAMED_CHARACTER_REFERENCE( "dopf;", "\U0001d555" ) \
+ NAMED_CHARACTER_REFERENCE( "dot;", "\U000002d9" ) \
+ NAMED_CHARACTER_REFERENCE( "doteq;", "\U00002250" ) \
+ NAMED_CHARACTER_REFERENCE( "doteqdot;", "\U00002251" ) \
+ NAMED_CHARACTER_REFERENCE( "dotminus;", "\U00002238" ) \
+ NAMED_CHARACTER_REFERENCE( "dotplus;", "\U00002214" ) \
+ NAMED_CHARACTER_REFERENCE( "dotsquare;", "\U000022a1" ) \
+ NAMED_CHARACTER_REFERENCE( "doublebarwedge;", "\U00002306" ) \
+ NAMED_CHARACTER_REFERENCE( "downarrow;", "\U00002193" ) \
+ NAMED_CHARACTER_REFERENCE( "downdownarrows;", "\U000021ca" ) \
+ NAMED_CHARACTER_REFERENCE( "downharpoonleft;", "\U000021c3" ) \
+ NAMED_CHARACTER_REFERENCE( "downharpoonright;", "\U000021c2" ) \
+ NAMED_CHARACTER_REFERENCE( "drbkarow;", "\U00002910" ) \
+ NAMED_CHARACTER_REFERENCE( "drcorn;", "\U0000231f" ) \
+ NAMED_CHARACTER_REFERENCE( "drcrop;", "\U0000230c" ) \
+ NAMED_CHARACTER_REFERENCE( "dscr;", "\U0001d4b9" ) \
+ NAMED_CHARACTER_REFERENCE( "dscy;", "\U00000455" ) \
+ NAMED_CHARACTER_REFERENCE( "dsol;", "\U000029f6" ) \
+ NAMED_CHARACTER_REFERENCE( "dstrok;", "\U00000111" ) \
+ NAMED_CHARACTER_REFERENCE( "dtdot;", "\U000022f1" ) \
+ NAMED_CHARACTER_REFERENCE( "dtri;", "\U000025bf" ) \
+ NAMED_CHARACTER_REFERENCE( "dtrif;", "\U000025be" ) \
+ NAMED_CHARACTER_REFERENCE( "duarr;", "\U000021f5" ) \
+ NAMED_CHARACTER_REFERENCE( "duhar;", "\U0000296f" ) \
+ NAMED_CHARACTER_REFERENCE( "dwangle;", "\U000029a6" ) \
+ NAMED_CHARACTER_REFERENCE( "dzcy;", "\U0000045f" ) \
+ NAMED_CHARACTER_REFERENCE( "dzigrarr;", "\U000027ff" ) \
+ NAMED_CHARACTER_REFERENCE( "eDDot;", "\U00002a77" ) \
+ NAMED_CHARACTER_REFERENCE( "eDot;", "\U00002251" ) \
+ NAMED_CHARACTER_REFERENCE( "eacute", "\U000000e9" ) \
+ NAMED_CHARACTER_REFERENCE( "eacute;", "\U000000e9" ) \
+ NAMED_CHARACTER_REFERENCE( "easter;", "\U00002a6e" ) \
+ NAMED_CHARACTER_REFERENCE( "ecaron;", "\U0000011b" ) \
+ NAMED_CHARACTER_REFERENCE( "ecir;", "\U00002256" ) \
+ NAMED_CHARACTER_REFERENCE( "ecirc", "\U000000ea" ) \
+ NAMED_CHARACTER_REFERENCE( "ecirc;", "\U000000ea" ) \
+ NAMED_CHARACTER_REFERENCE( "ecolon;", "\U00002255" ) \
+ NAMED_CHARACTER_REFERENCE( "ecy;", "\U0000044d" ) \
+ NAMED_CHARACTER_REFERENCE( "edot;", "\U00000117" ) \
+ NAMED_CHARACTER_REFERENCE( "ee;", "\U00002147" ) \
+ NAMED_CHARACTER_REFERENCE( "efDot;", "\U00002252" ) \
+ NAMED_CHARACTER_REFERENCE( "efr;", "\U0001d522" ) \
+ NAMED_CHARACTER_REFERENCE( "eg;", "\U00002a9a" ) \
+ NAMED_CHARACTER_REFERENCE( "egrave", "\U000000e8" ) \
+ NAMED_CHARACTER_REFERENCE( "egrave;", "\U000000e8" ) \
+ NAMED_CHARACTER_REFERENCE( "egs;", "\U00002a96" ) \
+ NAMED_CHARACTER_REFERENCE( "egsdot;", "\U00002a98" ) \
+ NAMED_CHARACTER_REFERENCE( "el;", "\U00002a99" ) \
+ NAMED_CHARACTER_REFERENCE( "elinters;", "\U000023e7" ) \
+ NAMED_CHARACTER_REFERENCE( "ell;", "\U00002113" ) \
+ NAMED_CHARACTER_REFERENCE( "els;", "\U00002a95" ) \
+ NAMED_CHARACTER_REFERENCE( "elsdot;", "\U00002a97" ) \
+ NAMED_CHARACTER_REFERENCE( "emacr;", "\U00000113" ) \
+ NAMED_CHARACTER_REFERENCE( "empty;", "\U00002205" ) \
+ NAMED_CHARACTER_REFERENCE( "emptyset;", "\U00002205" ) \
+ NAMED_CHARACTER_REFERENCE( "emptyv;", "\U00002205" ) \
+ NAMED_CHARACTER_REFERENCE( "emsp13;", "\U00002004" ) \
+ NAMED_CHARACTER_REFERENCE( "emsp14;", "\U00002005" ) \
+ NAMED_CHARACTER_REFERENCE( "emsp;", "\U00002003" ) \
+ NAMED_CHARACTER_REFERENCE( "eng;", "\U0000014b" ) \
+ NAMED_CHARACTER_REFERENCE( "ensp;", "\U00002002" ) \
+ NAMED_CHARACTER_REFERENCE( "eogon;", "\U00000119" ) \
+ NAMED_CHARACTER_REFERENCE( "eopf;", "\U0001d556" ) \
+ NAMED_CHARACTER_REFERENCE( "epar;", "\U000022d5" ) \
+ NAMED_CHARACTER_REFERENCE( "eparsl;", "\U000029e3" ) \
+ NAMED_CHARACTER_REFERENCE( "eplus;", "\U00002a71" ) \
+ NAMED_CHARACTER_REFERENCE( "epsi;", "\U000003b5" ) \
+ NAMED_CHARACTER_REFERENCE( "epsilon;", "\U000003b5" ) \
+ NAMED_CHARACTER_REFERENCE( "epsiv;", "\U000003f5" ) \
+ NAMED_CHARACTER_REFERENCE( "eqcirc;", "\U00002256" ) \
+ NAMED_CHARACTER_REFERENCE( "eqcolon;", "\U00002255" ) \
+ NAMED_CHARACTER_REFERENCE( "eqsim;", "\U00002242" ) \
+ NAMED_CHARACTER_REFERENCE( "eqslantgtr;", "\U00002a96" ) \
+ NAMED_CHARACTER_REFERENCE( "eqslantless;", "\U00002a95" ) \
+ NAMED_CHARACTER_REFERENCE( "equals;", "=" ) \
+ NAMED_CHARACTER_REFERENCE( "equest;", "\U0000225f" ) \
+ NAMED_CHARACTER_REFERENCE( "equiv;", "\U00002261" ) \
+ NAMED_CHARACTER_REFERENCE( "equivDD;", "\U00002a78" ) \
+ NAMED_CHARACTER_REFERENCE( "eqvparsl;", "\U000029e5" ) \
+ NAMED_CHARACTER_REFERENCE( "erDot;", "\U00002253" ) \
+ NAMED_CHARACTER_REFERENCE( "erarr;", "\U00002971" ) \
+ NAMED_CHARACTER_REFERENCE( "escr;", "\U0000212f" ) \
+ NAMED_CHARACTER_REFERENCE( "esdot;", "\U00002250" ) \
+ NAMED_CHARACTER_REFERENCE( "esim;", "\U00002242" ) \
+ NAMED_CHARACTER_REFERENCE( "eta;", "\U000003b7" ) \
+ NAMED_CHARACTER_REFERENCE( "eth", "\U000000f0" ) \
+ NAMED_CHARACTER_REFERENCE( "eth;", "\U000000f0" ) \
+ NAMED_CHARACTER_REFERENCE( "euml", "\U000000eb" ) \
+ NAMED_CHARACTER_REFERENCE( "euml;", "\U000000eb" ) \
+ NAMED_CHARACTER_REFERENCE( "euro;", "\U000020ac" ) \
+ NAMED_CHARACTER_REFERENCE( "excl;", "!" ) \
+ NAMED_CHARACTER_REFERENCE( "exist;", "\U00002203" ) \
+ NAMED_CHARACTER_REFERENCE( "expectation;", "\U00002130" ) \
+ NAMED_CHARACTER_REFERENCE( "exponentiale;", "\U00002147" ) \
+ NAMED_CHARACTER_REFERENCE( "fallingdotseq;", "\U00002252" ) \
+ NAMED_CHARACTER_REFERENCE( "fcy;", "\U00000444" ) \
+ NAMED_CHARACTER_REFERENCE( "female;", "\U00002640" ) \
+ NAMED_CHARACTER_REFERENCE( "ffilig;", "\U0000fb03" ) \
+ NAMED_CHARACTER_REFERENCE( "fflig;", "\U0000fb00" ) \
+ NAMED_CHARACTER_REFERENCE( "ffllig;", "\U0000fb04" ) \
+ NAMED_CHARACTER_REFERENCE( "ffr;", "\U0001d523" ) \
+ NAMED_CHARACTER_REFERENCE( "filig;", "\U0000fb01" ) \
+ NAMED_CHARACTER_REFERENCE( "fjlig;", "fj" ) \
+ NAMED_CHARACTER_REFERENCE( "flat;", "\U0000266d" ) \
+ NAMED_CHARACTER_REFERENCE( "fllig;", "\U0000fb02" ) \
+ NAMED_CHARACTER_REFERENCE( "fltns;", "\U000025b1" ) \
+ NAMED_CHARACTER_REFERENCE( "fnof;", "\U00000192" ) \
+ NAMED_CHARACTER_REFERENCE( "fopf;", "\U0001d557" ) \
+ NAMED_CHARACTER_REFERENCE( "forall;", "\U00002200" ) \
+ NAMED_CHARACTER_REFERENCE( "fork;", "\U000022d4" ) \
+ NAMED_CHARACTER_REFERENCE( "forkv;", "\U00002ad9" ) \
+ NAMED_CHARACTER_REFERENCE( "fpartint;", "\U00002a0d" ) \
+ NAMED_CHARACTER_REFERENCE( "frac12", "\U000000bd" ) \
+ NAMED_CHARACTER_REFERENCE( "frac12;", "\U000000bd" ) \
+ NAMED_CHARACTER_REFERENCE( "frac13;", "\U00002153" ) \
+ NAMED_CHARACTER_REFERENCE( "frac14", "\U000000bc" ) \
+ NAMED_CHARACTER_REFERENCE( "frac14;", "\U000000bc" ) \
+ NAMED_CHARACTER_REFERENCE( "frac15;", "\U00002155" ) \
+ NAMED_CHARACTER_REFERENCE( "frac16;", "\U00002159" ) \
+ NAMED_CHARACTER_REFERENCE( "frac18;", "\U0000215b" ) \
+ NAMED_CHARACTER_REFERENCE( "frac23;", "\U00002154" ) \
+ NAMED_CHARACTER_REFERENCE( "frac25;", "\U00002156" ) \
+ NAMED_CHARACTER_REFERENCE( "frac34", "\U000000be" ) \
+ NAMED_CHARACTER_REFERENCE( "frac34;", "\U000000be" ) \
+ NAMED_CHARACTER_REFERENCE( "frac35;", "\U00002157" ) \
+ NAMED_CHARACTER_REFERENCE( "frac38;", "\U0000215c" ) \
+ NAMED_CHARACTER_REFERENCE( "frac45;", "\U00002158" ) \
+ NAMED_CHARACTER_REFERENCE( "frac56;", "\U0000215a" ) \
+ NAMED_CHARACTER_REFERENCE( "frac58;", "\U0000215d" ) \
+ NAMED_CHARACTER_REFERENCE( "frac78;", "\U0000215e" ) \
+ NAMED_CHARACTER_REFERENCE( "frasl;", "\U00002044" ) \
+ NAMED_CHARACTER_REFERENCE( "frown;", "\U00002322" ) \
+ NAMED_CHARACTER_REFERENCE( "fscr;", "\U0001d4bb" ) \
+ NAMED_CHARACTER_REFERENCE( "gE;", "\U00002267" ) \
+ NAMED_CHARACTER_REFERENCE( "gEl;", "\U00002a8c" ) \
+ NAMED_CHARACTER_REFERENCE( "gacute;", "\U000001f5" ) \
+ NAMED_CHARACTER_REFERENCE( "gamma;", "\U000003b3" ) \
+ NAMED_CHARACTER_REFERENCE( "gammad;", "\U000003dd" ) \
+ NAMED_CHARACTER_REFERENCE( "gap;", "\U00002a86" ) \
+ NAMED_CHARACTER_REFERENCE( "gbreve;", "\U0000011f" ) \
+ NAMED_CHARACTER_REFERENCE( "gcirc;", "\U0000011d" ) \
+ NAMED_CHARACTER_REFERENCE( "gcy;", "\U00000433" ) \
+ NAMED_CHARACTER_REFERENCE( "gdot;", "\U00000121" ) \
+ NAMED_CHARACTER_REFERENCE( "ge;", "\U00002265" ) \
+ NAMED_CHARACTER_REFERENCE( "gel;", "\U000022db" ) \
+ NAMED_CHARACTER_REFERENCE( "geq;", "\U00002265" ) \
+ NAMED_CHARACTER_REFERENCE( "geqq;", "\U00002267" ) \
+ NAMED_CHARACTER_REFERENCE( "geqslant;", "\U00002a7e" ) \
+ NAMED_CHARACTER_REFERENCE( "ges;", "\U00002a7e" ) \
+ NAMED_CHARACTER_REFERENCE( "gescc;", "\U00002aa9" ) \
+ NAMED_CHARACTER_REFERENCE( "gesdot;", "\U00002a80" ) \
+ NAMED_CHARACTER_REFERENCE( "gesdoto;", "\U00002a82" ) \
+ NAMED_CHARACTER_REFERENCE( "gesdotol;", "\U00002a84" ) \
+ NAMED_CHARACTER_REFERENCE( "gesl;", "\U000022db\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "gesles;", "\U00002a94" ) \
+ NAMED_CHARACTER_REFERENCE( "gfr;", "\U0001d524" ) \
+ NAMED_CHARACTER_REFERENCE( "gg;", "\U0000226b" ) \
+ NAMED_CHARACTER_REFERENCE( "ggg;", "\U000022d9" ) \
+ NAMED_CHARACTER_REFERENCE( "gimel;", "\U00002137" ) \
+ NAMED_CHARACTER_REFERENCE( "gjcy;", "\U00000453" ) \
+ NAMED_CHARACTER_REFERENCE( "gl;", "\U00002277" ) \
+ NAMED_CHARACTER_REFERENCE( "glE;", "\U00002a92" ) \
+ NAMED_CHARACTER_REFERENCE( "gla;", "\U00002aa5" ) \
+ NAMED_CHARACTER_REFERENCE( "glj;", "\U00002aa4" ) \
+ NAMED_CHARACTER_REFERENCE( "gnE;", "\U00002269" ) \
+ NAMED_CHARACTER_REFERENCE( "gnap;", "\U00002a8a" ) \
+ NAMED_CHARACTER_REFERENCE( "gnapprox;", "\U00002a8a" ) \
+ NAMED_CHARACTER_REFERENCE( "gne;", "\U00002a88" ) \
+ NAMED_CHARACTER_REFERENCE( "gneq;", "\U00002a88" ) \
+ NAMED_CHARACTER_REFERENCE( "gneqq;", "\U00002269" ) \
+ NAMED_CHARACTER_REFERENCE( "gnsim;", "\U000022e7" ) \
+ NAMED_CHARACTER_REFERENCE( "gopf;", "\U0001d558" ) \
+ NAMED_CHARACTER_REFERENCE( "grave;", "\U00000060" ) \
+ NAMED_CHARACTER_REFERENCE( "gscr;", "\U0000210a" ) \
+ NAMED_CHARACTER_REFERENCE( "gsim;", "\U00002273" ) \
+ NAMED_CHARACTER_REFERENCE( "gsime;", "\U00002a8e" ) \
+ NAMED_CHARACTER_REFERENCE( "gsiml;", "\U00002a90" ) \
+ NAMED_CHARACTER_REFERENCE( "gt", ">" ) \
+ NAMED_CHARACTER_REFERENCE( "gt;", ">" ) \
+ NAMED_CHARACTER_REFERENCE( "gtcc;", "\U00002aa7" ) \
+ NAMED_CHARACTER_REFERENCE( "gtcir;", "\U00002a7a" ) \
+ NAMED_CHARACTER_REFERENCE( "gtdot;", "\U000022d7" ) \
+ NAMED_CHARACTER_REFERENCE( "gtlPar;", "\U00002995" ) \
+ NAMED_CHARACTER_REFERENCE( "gtquest;", "\U00002a7c" ) \
+ NAMED_CHARACTER_REFERENCE( "gtrapprox;", "\U00002a86" ) \
+ NAMED_CHARACTER_REFERENCE( "gtrarr;", "\U00002978" ) \
+ NAMED_CHARACTER_REFERENCE( "gtrdot;", "\U000022d7" ) \
+ NAMED_CHARACTER_REFERENCE( "gtreqless;", "\U000022db" ) \
+ NAMED_CHARACTER_REFERENCE( "gtreqqless;", "\U00002a8c" ) \
+ NAMED_CHARACTER_REFERENCE( "gtrless;", "\U00002277" ) \
+ NAMED_CHARACTER_REFERENCE( "gtrsim;", "\U00002273" ) \
+ NAMED_CHARACTER_REFERENCE( "gvertneqq;", "\U00002269\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "gvnE;", "\U00002269\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "hArr;", "\U000021d4" ) \
+ NAMED_CHARACTER_REFERENCE( "hairsp;", "\U0000200a" ) \
+ NAMED_CHARACTER_REFERENCE( "half;", "\U000000bd" ) \
+ NAMED_CHARACTER_REFERENCE( "hamilt;", "\U0000210b" ) \
+ NAMED_CHARACTER_REFERENCE( "hardcy;", "\U0000044a" ) \
+ NAMED_CHARACTER_REFERENCE( "harr;", "\U00002194" ) \
+ NAMED_CHARACTER_REFERENCE( "harrcir;", "\U00002948" ) \
+ NAMED_CHARACTER_REFERENCE( "harrw;", "\U000021ad" ) \
+ NAMED_CHARACTER_REFERENCE( "hbar;", "\U0000210f" ) \
+ NAMED_CHARACTER_REFERENCE( "hcirc;", "\U00000125" ) \
+ NAMED_CHARACTER_REFERENCE( "hearts;", "\U00002665" ) \
+ NAMED_CHARACTER_REFERENCE( "heartsuit;", "\U00002665" ) \
+ NAMED_CHARACTER_REFERENCE( "hellip;", "\U00002026" ) \
+ NAMED_CHARACTER_REFERENCE( "hercon;", "\U000022b9" ) \
+ NAMED_CHARACTER_REFERENCE( "hfr;", "\U0001d525" ) \
+ NAMED_CHARACTER_REFERENCE( "hksearow;", "\U00002925" ) \
+ NAMED_CHARACTER_REFERENCE( "hkswarow;", "\U00002926" ) \
+ NAMED_CHARACTER_REFERENCE( "hoarr;", "\U000021ff" ) \
+ NAMED_CHARACTER_REFERENCE( "homtht;", "\U0000223b" ) \
+ NAMED_CHARACTER_REFERENCE( "hookleftarrow;", "\U000021a9" ) \
+ NAMED_CHARACTER_REFERENCE( "hookrightarrow;", "\U000021aa" ) \
+ NAMED_CHARACTER_REFERENCE( "hopf;", "\U0001d559" ) \
+ NAMED_CHARACTER_REFERENCE( "horbar;", "\U00002015" ) \
+ NAMED_CHARACTER_REFERENCE( "hscr;", "\U0001d4bd" ) \
+ NAMED_CHARACTER_REFERENCE( "hslash;", "\U0000210f" ) \
+ NAMED_CHARACTER_REFERENCE( "hstrok;", "\U00000127" ) \
+ NAMED_CHARACTER_REFERENCE( "hybull;", "\U00002043" ) \
+ NAMED_CHARACTER_REFERENCE( "hyphen;", "\U00002010" ) \
+ NAMED_CHARACTER_REFERENCE( "iacute", "\U000000ed" ) \
+ NAMED_CHARACTER_REFERENCE( "iacute;", "\U000000ed" ) \
+ NAMED_CHARACTER_REFERENCE( "ic;", "\U00002063" ) \
+ NAMED_CHARACTER_REFERENCE( "icirc", "\U000000ee" ) \
+ NAMED_CHARACTER_REFERENCE( "icirc;", "\U000000ee" ) \
+ NAMED_CHARACTER_REFERENCE( "icy;", "\U00000438" ) \
+ NAMED_CHARACTER_REFERENCE( "iecy;", "\U00000435" ) \
+ NAMED_CHARACTER_REFERENCE( "iexcl", "\U000000a1" ) \
+ NAMED_CHARACTER_REFERENCE( "iexcl;", "\U000000a1" ) \
+ NAMED_CHARACTER_REFERENCE( "iff;", "\U000021d4" ) \
+ NAMED_CHARACTER_REFERENCE( "ifr;", "\U0001d526" ) \
+ NAMED_CHARACTER_REFERENCE( "igrave", "\U000000ec" ) \
+ NAMED_CHARACTER_REFERENCE( "igrave;", "\U000000ec" ) \
+ NAMED_CHARACTER_REFERENCE( "ii;", "\U00002148" ) \
+ NAMED_CHARACTER_REFERENCE( "iiiint;", "\U00002a0c" ) \
+ NAMED_CHARACTER_REFERENCE( "iiint;", "\U0000222d" ) \
+ NAMED_CHARACTER_REFERENCE( "iinfin;", "\U000029dc" ) \
+ NAMED_CHARACTER_REFERENCE( "iiota;", "\U00002129" ) \
+ NAMED_CHARACTER_REFERENCE( "ijlig;", "\U00000133" ) \
+ NAMED_CHARACTER_REFERENCE( "imacr;", "\U0000012b" ) \
+ NAMED_CHARACTER_REFERENCE( "image;", "\U00002111" ) \
+ NAMED_CHARACTER_REFERENCE( "imagline;", "\U00002110" ) \
+ NAMED_CHARACTER_REFERENCE( "imagpart;", "\U00002111" ) \
+ NAMED_CHARACTER_REFERENCE( "imath;", "\U00000131" ) \
+ NAMED_CHARACTER_REFERENCE( "imof;", "\U000022b7" ) \
+ NAMED_CHARACTER_REFERENCE( "imped;", "\U000001b5" ) \
+ NAMED_CHARACTER_REFERENCE( "in;", "\U00002208" ) \
+ NAMED_CHARACTER_REFERENCE( "incare;", "\U00002105" ) \
+ NAMED_CHARACTER_REFERENCE( "infin;", "\U0000221e" ) \
+ NAMED_CHARACTER_REFERENCE( "infintie;", "\U000029dd" ) \
+ NAMED_CHARACTER_REFERENCE( "inodot;", "\U00000131" ) \
+ NAMED_CHARACTER_REFERENCE( "int;", "\U0000222b" ) \
+ NAMED_CHARACTER_REFERENCE( "intcal;", "\U000022ba" ) \
+ NAMED_CHARACTER_REFERENCE( "integers;", "\U00002124" ) \
+ NAMED_CHARACTER_REFERENCE( "intercal;", "\U000022ba" ) \
+ NAMED_CHARACTER_REFERENCE( "intlarhk;", "\U00002a17" ) \
+ NAMED_CHARACTER_REFERENCE( "intprod;", "\U00002a3c" ) \
+ NAMED_CHARACTER_REFERENCE( "iocy;", "\U00000451" ) \
+ NAMED_CHARACTER_REFERENCE( "iogon;", "\U0000012f" ) \
+ NAMED_CHARACTER_REFERENCE( "iopf;", "\U0001d55a" ) \
+ NAMED_CHARACTER_REFERENCE( "iota;", "\U000003b9" ) \
+ NAMED_CHARACTER_REFERENCE( "iprod;", "\U00002a3c" ) \
+ NAMED_CHARACTER_REFERENCE( "iquest", "\U000000bf" ) \
+ NAMED_CHARACTER_REFERENCE( "iquest;", "\U000000bf" ) \
+ NAMED_CHARACTER_REFERENCE( "iscr;", "\U0001d4be" ) \
+ NAMED_CHARACTER_REFERENCE( "isin;", "\U00002208" ) \
+ NAMED_CHARACTER_REFERENCE( "isinE;", "\U000022f9" ) \
+ NAMED_CHARACTER_REFERENCE( "isindot;", "\U000022f5" ) \
+ NAMED_CHARACTER_REFERENCE( "isins;", "\U000022f4" ) \
+ NAMED_CHARACTER_REFERENCE( "isinsv;", "\U000022f3" ) \
+ NAMED_CHARACTER_REFERENCE( "isinv;", "\U00002208" ) \
+ NAMED_CHARACTER_REFERENCE( "it;", "\U00002062" ) \
+ NAMED_CHARACTER_REFERENCE( "itilde;", "\U00000129" ) \
+ NAMED_CHARACTER_REFERENCE( "iukcy;", "\U00000456" ) \
+ NAMED_CHARACTER_REFERENCE( "iuml", "\U000000ef" ) \
+ NAMED_CHARACTER_REFERENCE( "iuml;", "\U000000ef" ) \
+ NAMED_CHARACTER_REFERENCE( "jcirc;", "\U00000135" ) \
+ NAMED_CHARACTER_REFERENCE( "jcy;", "\U00000439" ) \
+ NAMED_CHARACTER_REFERENCE( "jfr;", "\U0001d527" ) \
+ NAMED_CHARACTER_REFERENCE( "jmath;", "\U00000237" ) \
+ NAMED_CHARACTER_REFERENCE( "jopf;", "\U0001d55b" ) \
+ NAMED_CHARACTER_REFERENCE( "jscr;", "\U0001d4bf" ) \
+ NAMED_CHARACTER_REFERENCE( "jsercy;", "\U00000458" ) \
+ NAMED_CHARACTER_REFERENCE( "jukcy;", "\U00000454" ) \
+ NAMED_CHARACTER_REFERENCE( "kappa;", "\U000003ba" ) \
+ NAMED_CHARACTER_REFERENCE( "kappav;", "\U000003f0" ) \
+ NAMED_CHARACTER_REFERENCE( "kcedil;", "\U00000137" ) \
+ NAMED_CHARACTER_REFERENCE( "kcy;", "\U0000043a" ) \
+ NAMED_CHARACTER_REFERENCE( "kfr;", "\U0001d528" ) \
+ NAMED_CHARACTER_REFERENCE( "kgreen;", "\U00000138" ) \
+ NAMED_CHARACTER_REFERENCE( "khcy;", "\U00000445" ) \
+ NAMED_CHARACTER_REFERENCE( "kjcy;", "\U0000045c" ) \
+ NAMED_CHARACTER_REFERENCE( "kopf;", "\U0001d55c" ) \
+ NAMED_CHARACTER_REFERENCE( "kscr;", "\U0001d4c0" ) \
+ NAMED_CHARACTER_REFERENCE( "lAarr;", "\U000021da" ) \
+ NAMED_CHARACTER_REFERENCE( "lArr;", "\U000021d0" ) \
+ NAMED_CHARACTER_REFERENCE( "lAtail;", "\U0000291b" ) \
+ NAMED_CHARACTER_REFERENCE( "lBarr;", "\U0000290e" ) \
+ NAMED_CHARACTER_REFERENCE( "lE;", "\U00002266" ) \
+ NAMED_CHARACTER_REFERENCE( "lEg;", "\U00002a8b" ) \
+ NAMED_CHARACTER_REFERENCE( "lHar;", "\U00002962" ) \
+ NAMED_CHARACTER_REFERENCE( "lacute;", "\U0000013a" ) \
+ NAMED_CHARACTER_REFERENCE( "laemptyv;", "\U000029b4" ) \
+ NAMED_CHARACTER_REFERENCE( "lagran;", "\U00002112" ) \
+ NAMED_CHARACTER_REFERENCE( "lambda;", "\U000003bb" ) \
+ NAMED_CHARACTER_REFERENCE( "lang;", "\U000027e8" ) \
+ NAMED_CHARACTER_REFERENCE( "langd;", "\U00002991" ) \
+ NAMED_CHARACTER_REFERENCE( "langle;", "\U000027e8" ) \
+ NAMED_CHARACTER_REFERENCE( "lap;", "\U00002a85" ) \
+ NAMED_CHARACTER_REFERENCE( "laquo", "\U000000ab" ) \
+ NAMED_CHARACTER_REFERENCE( "laquo;", "\U000000ab" ) \
+ NAMED_CHARACTER_REFERENCE( "larr;", "\U00002190" ) \
+ NAMED_CHARACTER_REFERENCE( "larrb;", "\U000021e4" ) \
+ NAMED_CHARACTER_REFERENCE( "larrbfs;", "\U0000291f" ) \
+ NAMED_CHARACTER_REFERENCE( "larrfs;", "\U0000291d" ) \
+ NAMED_CHARACTER_REFERENCE( "larrhk;", "\U000021a9" ) \
+ NAMED_CHARACTER_REFERENCE( "larrlp;", "\U000021ab" ) \
+ NAMED_CHARACTER_REFERENCE( "larrpl;", "\U00002939" ) \
+ NAMED_CHARACTER_REFERENCE( "larrsim;", "\U00002973" ) \
+ NAMED_CHARACTER_REFERENCE( "larrtl;", "\U000021a2" ) \
+ NAMED_CHARACTER_REFERENCE( "lat;", "\U00002aab" ) \
+ NAMED_CHARACTER_REFERENCE( "latail;", "\U00002919" ) \
+ NAMED_CHARACTER_REFERENCE( "late;", "\U00002aad" ) \
+ NAMED_CHARACTER_REFERENCE( "lates;", "\U00002aad\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "lbarr;", "\U0000290c" ) \
+ NAMED_CHARACTER_REFERENCE( "lbbrk;", "\U00002772" ) \
+ NAMED_CHARACTER_REFERENCE( "lbrace;", "{" ) \
+ NAMED_CHARACTER_REFERENCE( "lbrack;", "[" ) \
+ NAMED_CHARACTER_REFERENCE( "lbrke;", "\U0000298b" ) \
+ NAMED_CHARACTER_REFERENCE( "lbrksld;", "\U0000298f" ) \
+ NAMED_CHARACTER_REFERENCE( "lbrkslu;", "\U0000298d" ) \
+ NAMED_CHARACTER_REFERENCE( "lcaron;", "\U0000013e" ) \
+ NAMED_CHARACTER_REFERENCE( "lcedil;", "\U0000013c" ) \
+ NAMED_CHARACTER_REFERENCE( "lceil;", "\U00002308" ) \
+ NAMED_CHARACTER_REFERENCE( "lcub;", "{" ) \
+ NAMED_CHARACTER_REFERENCE( "lcy;", "\U0000043b" ) \
+ NAMED_CHARACTER_REFERENCE( "ldca;", "\U00002936" ) \
+ NAMED_CHARACTER_REFERENCE( "ldquo;", "\U0000201c" ) \
+ NAMED_CHARACTER_REFERENCE( "ldquor;", "\U0000201e" ) \
+ NAMED_CHARACTER_REFERENCE( "ldrdhar;", "\U00002967" ) \
+ NAMED_CHARACTER_REFERENCE( "ldrushar;", "\U0000294b" ) \
+ NAMED_CHARACTER_REFERENCE( "ldsh;", "\U000021b2" ) \
+ NAMED_CHARACTER_REFERENCE( "le;", "\U00002264" ) \
+ NAMED_CHARACTER_REFERENCE( "leftarrow;", "\U00002190" ) \
+ NAMED_CHARACTER_REFERENCE( "leftarrowtail;", "\U000021a2" ) \
+ NAMED_CHARACTER_REFERENCE( "leftharpoondown;", "\U000021bd" ) \
+ NAMED_CHARACTER_REFERENCE( "leftharpoonup;", "\U000021bc" ) \
+ NAMED_CHARACTER_REFERENCE( "leftleftarrows;", "\U000021c7" ) \
+ NAMED_CHARACTER_REFERENCE( "leftrightarrow;", "\U00002194" ) \
+ NAMED_CHARACTER_REFERENCE( "leftrightarrows;", "\U000021c6" ) \
+ NAMED_CHARACTER_REFERENCE( "leftrightharpoons;", "\U000021cb" ) \
+ NAMED_CHARACTER_REFERENCE( "leftrightsquigarrow;", "\U000021ad" ) \
+ NAMED_CHARACTER_REFERENCE( "leftthreetimes;", "\U000022cb" ) \
+ NAMED_CHARACTER_REFERENCE( "leg;", "\U000022da" ) \
+ NAMED_CHARACTER_REFERENCE( "leq;", "\U00002264" ) \
+ NAMED_CHARACTER_REFERENCE( "leqq;", "\U00002266" ) \
+ NAMED_CHARACTER_REFERENCE( "leqslant;", "\U00002a7d" ) \
+ NAMED_CHARACTER_REFERENCE( "les;", "\U00002a7d" ) \
+ NAMED_CHARACTER_REFERENCE( "lescc;", "\U00002aa8" ) \
+ NAMED_CHARACTER_REFERENCE( "lesdot;", "\U00002a7f" ) \
+ NAMED_CHARACTER_REFERENCE( "lesdoto;", "\U00002a81" ) \
+ NAMED_CHARACTER_REFERENCE( "lesdotor;", "\U00002a83" ) \
+ NAMED_CHARACTER_REFERENCE( "lesg;", "\U000022da\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "lesges;", "\U00002a93" ) \
+ NAMED_CHARACTER_REFERENCE( "lessapprox;", "\U00002a85" ) \
+ NAMED_CHARACTER_REFERENCE( "lessdot;", "\U000022d6" ) \
+ NAMED_CHARACTER_REFERENCE( "lesseqgtr;", "\U000022da" ) \
+ NAMED_CHARACTER_REFERENCE( "lesseqqgtr;", "\U00002a8b" ) \
+ NAMED_CHARACTER_REFERENCE( "lessgtr;", "\U00002276" ) \
+ NAMED_CHARACTER_REFERENCE( "lesssim;", "\U00002272" ) \
+ NAMED_CHARACTER_REFERENCE( "lfisht;", "\U0000297c" ) \
+ NAMED_CHARACTER_REFERENCE( "lfloor;", "\U0000230a" ) \
+ NAMED_CHARACTER_REFERENCE( "lfr;", "\U0001d529" ) \
+ NAMED_CHARACTER_REFERENCE( "lg;", "\U00002276" ) \
+ NAMED_CHARACTER_REFERENCE( "lgE;", "\U00002a91" ) \
+ NAMED_CHARACTER_REFERENCE( "lhard;", "\U000021bd" ) \
+ NAMED_CHARACTER_REFERENCE( "lharu;", "\U000021bc" ) \
+ NAMED_CHARACTER_REFERENCE( "lharul;", "\U0000296a" ) \
+ NAMED_CHARACTER_REFERENCE( "lhblk;", "\U00002584" ) \
+ NAMED_CHARACTER_REFERENCE( "ljcy;", "\U00000459" ) \
+ NAMED_CHARACTER_REFERENCE( "ll;", "\U0000226a" ) \
+ NAMED_CHARACTER_REFERENCE( "llarr;", "\U000021c7" ) \
+ NAMED_CHARACTER_REFERENCE( "llcorner;", "\U0000231e" ) \
+ NAMED_CHARACTER_REFERENCE( "llhard;", "\U0000296b" ) \
+ NAMED_CHARACTER_REFERENCE( "lltri;", "\U000025fa" ) \
+ NAMED_CHARACTER_REFERENCE( "lmidot;", "\U00000140" ) \
+ NAMED_CHARACTER_REFERENCE( "lmoust;", "\U000023b0" ) \
+ NAMED_CHARACTER_REFERENCE( "lmoustache;", "\U000023b0" ) \
+ NAMED_CHARACTER_REFERENCE( "lnE;", "\U00002268" ) \
+ NAMED_CHARACTER_REFERENCE( "lnap;", "\U00002a89" ) \
+ NAMED_CHARACTER_REFERENCE( "lnapprox;", "\U00002a89" ) \
+ NAMED_CHARACTER_REFERENCE( "lne;", "\U00002a87" ) \
+ NAMED_CHARACTER_REFERENCE( "lneq;", "\U00002a87" ) \
+ NAMED_CHARACTER_REFERENCE( "lneqq;", "\U00002268" ) \
+ NAMED_CHARACTER_REFERENCE( "lnsim;", "\U000022e6" ) \
+ NAMED_CHARACTER_REFERENCE( "loang;", "\U000027ec" ) \
+ NAMED_CHARACTER_REFERENCE( "loarr;", "\U000021fd" ) \
+ NAMED_CHARACTER_REFERENCE( "lobrk;", "\U000027e6" ) \
+ NAMED_CHARACTER_REFERENCE( "longleftarrow;", "\U000027f5" ) \
+ NAMED_CHARACTER_REFERENCE( "longleftrightarrow;", "\U000027f7" ) \
+ NAMED_CHARACTER_REFERENCE( "longmapsto;", "\U000027fc" ) \
+ NAMED_CHARACTER_REFERENCE( "longrightarrow;", "\U000027f6" ) \
+ NAMED_CHARACTER_REFERENCE( "looparrowleft;", "\U000021ab" ) \
+ NAMED_CHARACTER_REFERENCE( "looparrowright;", "\U000021ac" ) \
+ NAMED_CHARACTER_REFERENCE( "lopar;", "\U00002985" ) \
+ NAMED_CHARACTER_REFERENCE( "lopf;", "\U0001d55d" ) \
+ NAMED_CHARACTER_REFERENCE( "loplus;", "\U00002a2d" ) \
+ NAMED_CHARACTER_REFERENCE( "lotimes;", "\U00002a34" ) \
+ NAMED_CHARACTER_REFERENCE( "lowast;", "\U00002217" ) \
+ NAMED_CHARACTER_REFERENCE( "lowbar;", "_" ) \
+ NAMED_CHARACTER_REFERENCE( "loz;", "\U000025ca" ) \
+ NAMED_CHARACTER_REFERENCE( "lozenge;", "\U000025ca" ) \
+ NAMED_CHARACTER_REFERENCE( "lozf;", "\U000029eb" ) \
+ NAMED_CHARACTER_REFERENCE( "lpar;", "(" ) \
+ NAMED_CHARACTER_REFERENCE( "lparlt;", "\U00002993" ) \
+ NAMED_CHARACTER_REFERENCE( "lrarr;", "\U000021c6" ) \
+ NAMED_CHARACTER_REFERENCE( "lrcorner;", "\U0000231f" ) \
+ NAMED_CHARACTER_REFERENCE( "lrhar;", "\U000021cb" ) \
+ NAMED_CHARACTER_REFERENCE( "lrhard;", "\U0000296d" ) \
+ NAMED_CHARACTER_REFERENCE( "lrm;", "\U0000200e" ) \
+ NAMED_CHARACTER_REFERENCE( "lrtri;", "\U000022bf" ) \
+ NAMED_CHARACTER_REFERENCE( "lsaquo;", "\U00002039" ) \
+ NAMED_CHARACTER_REFERENCE( "lscr;", "\U0001d4c1" ) \
+ NAMED_CHARACTER_REFERENCE( "lsh;", "\U000021b0" ) \
+ NAMED_CHARACTER_REFERENCE( "lsim;", "\U00002272" ) \
+ NAMED_CHARACTER_REFERENCE( "lsime;", "\U00002a8d" ) \
+ NAMED_CHARACTER_REFERENCE( "lsimg;", "\U00002a8f" ) \
+ NAMED_CHARACTER_REFERENCE( "lsqb;", "[" ) \
+ NAMED_CHARACTER_REFERENCE( "lsquo;", "\U00002018" ) \
+ NAMED_CHARACTER_REFERENCE( "lsquor;", "\U0000201a" ) \
+ NAMED_CHARACTER_REFERENCE( "lstrok;", "\U00000142" ) \
+ NAMED_CHARACTER_REFERENCE( "lt", "<" ) \
+ NAMED_CHARACTER_REFERENCE( "lt;", "<" ) \
+ NAMED_CHARACTER_REFERENCE( "ltcc;", "\U00002aa6" ) \
+ NAMED_CHARACTER_REFERENCE( "ltcir;", "\U00002a79" ) \
+ NAMED_CHARACTER_REFERENCE( "ltdot;", "\U000022d6" ) \
+ NAMED_CHARACTER_REFERENCE( "lthree;", "\U000022cb" ) \
+ NAMED_CHARACTER_REFERENCE( "ltimes;", "\U000022c9" ) \
+ NAMED_CHARACTER_REFERENCE( "ltlarr;", "\U00002976" ) \
+ NAMED_CHARACTER_REFERENCE( "ltquest;", "\U00002a7b" ) \
+ NAMED_CHARACTER_REFERENCE( "ltrPar;", "\U00002996" ) \
+ NAMED_CHARACTER_REFERENCE( "ltri;", "\U000025c3" ) \
+ NAMED_CHARACTER_REFERENCE( "ltrie;", "\U000022b4" ) \
+ NAMED_CHARACTER_REFERENCE( "ltrif;", "\U000025c2" ) \
+ NAMED_CHARACTER_REFERENCE( "lurdshar;", "\U0000294a" ) \
+ NAMED_CHARACTER_REFERENCE( "luruhar;", "\U00002966" ) \
+ NAMED_CHARACTER_REFERENCE( "lvertneqq;", "\U00002268\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "lvnE;", "\U00002268\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "mDDot;", "\U0000223a" ) \
+ NAMED_CHARACTER_REFERENCE( "macr", "\U000000af" ) \
+ NAMED_CHARACTER_REFERENCE( "macr;", "\U000000af" ) \
+ NAMED_CHARACTER_REFERENCE( "male;", "\U00002642" ) \
+ NAMED_CHARACTER_REFERENCE( "malt;", "\U00002720" ) \
+ NAMED_CHARACTER_REFERENCE( "maltese;", "\U00002720" ) \
+ NAMED_CHARACTER_REFERENCE( "map;", "\U000021a6" ) \
+ NAMED_CHARACTER_REFERENCE( "mapsto;", "\U000021a6" ) \
+ NAMED_CHARACTER_REFERENCE( "mapstodown;", "\U000021a7" ) \
+ NAMED_CHARACTER_REFERENCE( "mapstoleft;", "\U000021a4" ) \
+ NAMED_CHARACTER_REFERENCE( "mapstoup;", "\U000021a5" ) \
+ NAMED_CHARACTER_REFERENCE( "marker;", "\U000025ae" ) \
+ NAMED_CHARACTER_REFERENCE( "mcomma;", "\U00002a29" ) \
+ NAMED_CHARACTER_REFERENCE( "mcy;", "\U0000043c" ) \
+ NAMED_CHARACTER_REFERENCE( "mdash;", "\U00002014" ) \
+ NAMED_CHARACTER_REFERENCE( "measuredangle;", "\U00002221" ) \
+ NAMED_CHARACTER_REFERENCE( "mfr;", "\U0001d52a" ) \
+ NAMED_CHARACTER_REFERENCE( "mho;", "\U00002127" ) \
+ NAMED_CHARACTER_REFERENCE( "micro", "\U000000b5" ) \
+ NAMED_CHARACTER_REFERENCE( "micro;", "\U000000b5" ) \
+ NAMED_CHARACTER_REFERENCE( "mid;", "\U00002223" ) \
+ NAMED_CHARACTER_REFERENCE( "midast;", "*" ) \
+ NAMED_CHARACTER_REFERENCE( "midcir;", "\U00002af0" ) \
+ NAMED_CHARACTER_REFERENCE( "middot", "\U000000b7" ) \
+ NAMED_CHARACTER_REFERENCE( "middot;", "\U000000b7" ) \
+ NAMED_CHARACTER_REFERENCE( "minus;", "\U00002212" ) \
+ NAMED_CHARACTER_REFERENCE( "minusb;", "\U0000229f" ) \
+ NAMED_CHARACTER_REFERENCE( "minusd;", "\U00002238" ) \
+ NAMED_CHARACTER_REFERENCE( "minusdu;", "\U00002a2a" ) \
+ NAMED_CHARACTER_REFERENCE( "mlcp;", "\U00002adb" ) \
+ NAMED_CHARACTER_REFERENCE( "mldr;", "\U00002026" ) \
+ NAMED_CHARACTER_REFERENCE( "mnplus;", "\U00002213" ) \
+ NAMED_CHARACTER_REFERENCE( "models;", "\U000022a7" ) \
+ NAMED_CHARACTER_REFERENCE( "mopf;", "\U0001d55e" ) \
+ NAMED_CHARACTER_REFERENCE( "mp;", "\U00002213" ) \
+ NAMED_CHARACTER_REFERENCE( "mscr;", "\U0001d4c2" ) \
+ NAMED_CHARACTER_REFERENCE( "mstpos;", "\U0000223e" ) \
+ NAMED_CHARACTER_REFERENCE( "mu;", "\U000003bc" ) \
+ NAMED_CHARACTER_REFERENCE( "multimap;", "\U000022b8" ) \
+ NAMED_CHARACTER_REFERENCE( "mumap;", "\U000022b8" ) \
+ NAMED_CHARACTER_REFERENCE( "nGg;", "\U000022d9\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nGt;", "\U0000226b\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nGtv;", "\U0000226b\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nLeftarrow;", "\U000021cd" ) \
+ NAMED_CHARACTER_REFERENCE( "nLeftrightarrow;", "\U000021ce" ) \
+ NAMED_CHARACTER_REFERENCE( "nLl;", "\U000022d8\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nLt;", "\U0000226a\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nLtv;", "\U0000226a\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nRightarrow;", "\U000021cf" ) \
+ NAMED_CHARACTER_REFERENCE( "nVDash;", "\U000022af" ) \
+ NAMED_CHARACTER_REFERENCE( "nVdash;", "\U000022ae" ) \
+ NAMED_CHARACTER_REFERENCE( "nabla;", "\U00002207" ) \
+ NAMED_CHARACTER_REFERENCE( "nacute;", "\U00000144" ) \
+ NAMED_CHARACTER_REFERENCE( "nang;", "\U00002220\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nap;", "\U00002249" ) \
+ NAMED_CHARACTER_REFERENCE( "napE;", "\U00002a70\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "napid;", "\U0000224b\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "napos;", "\U00000149" ) \
+ NAMED_CHARACTER_REFERENCE( "napprox;", "\U00002249" ) \
+ NAMED_CHARACTER_REFERENCE( "natur;", "\U0000266e" ) \
+ NAMED_CHARACTER_REFERENCE( "natural;", "\U0000266e" ) \
+ NAMED_CHARACTER_REFERENCE( "naturals;", "\U00002115" ) \
+ NAMED_CHARACTER_REFERENCE( "nbsp", "\U000000a0" ) \
+ NAMED_CHARACTER_REFERENCE( "nbsp;", "\U000000a0" ) \
+ NAMED_CHARACTER_REFERENCE( "nbump;", "\U0000224e\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nbumpe;", "\U0000224f\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "ncap;", "\U00002a43" ) \
+ NAMED_CHARACTER_REFERENCE( "ncaron;", "\U00000148" ) \
+ NAMED_CHARACTER_REFERENCE( "ncedil;", "\U00000146" ) \
+ NAMED_CHARACTER_REFERENCE( "ncong;", "\U00002247" ) \
+ NAMED_CHARACTER_REFERENCE( "ncongdot;", "\U00002a6d\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "ncup;", "\U00002a42" ) \
+ NAMED_CHARACTER_REFERENCE( "ncy;", "\U0000043d" ) \
+ NAMED_CHARACTER_REFERENCE( "ndash;", "\U00002013" ) \
+ NAMED_CHARACTER_REFERENCE( "ne;", "\U00002260" ) \
+ NAMED_CHARACTER_REFERENCE( "neArr;", "\U000021d7" ) \
+ NAMED_CHARACTER_REFERENCE( "nearhk;", "\U00002924" ) \
+ NAMED_CHARACTER_REFERENCE( "nearr;", "\U00002197" ) \
+ NAMED_CHARACTER_REFERENCE( "nearrow;", "\U00002197" ) \
+ NAMED_CHARACTER_REFERENCE( "nedot;", "\U00002250\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nequiv;", "\U00002262" ) \
+ NAMED_CHARACTER_REFERENCE( "nesear;", "\U00002928" ) \
+ NAMED_CHARACTER_REFERENCE( "nesim;", "\U00002242\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nexist;", "\U00002204" ) \
+ NAMED_CHARACTER_REFERENCE( "nexists;", "\U00002204" ) \
+ NAMED_CHARACTER_REFERENCE( "nfr;", "\U0001d52b" ) \
+ NAMED_CHARACTER_REFERENCE( "ngE;", "\U00002267\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nge;", "\U00002271" ) \
+ NAMED_CHARACTER_REFERENCE( "ngeq;", "\U00002271" ) \
+ NAMED_CHARACTER_REFERENCE( "ngeqq;", "\U00002267\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "ngeqslant;", "\U00002a7e\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nges;", "\U00002a7e\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "ngsim;", "\U00002275" ) \
+ NAMED_CHARACTER_REFERENCE( "ngt;", "\U0000226f" ) \
+ NAMED_CHARACTER_REFERENCE( "ngtr;", "\U0000226f" ) \
+ NAMED_CHARACTER_REFERENCE( "nhArr;", "\U000021ce" ) \
+ NAMED_CHARACTER_REFERENCE( "nharr;", "\U000021ae" ) \
+ NAMED_CHARACTER_REFERENCE( "nhpar;", "\U00002af2" ) \
+ NAMED_CHARACTER_REFERENCE( "ni;", "\U0000220b" ) \
+ NAMED_CHARACTER_REFERENCE( "nis;", "\U000022fc" ) \
+ NAMED_CHARACTER_REFERENCE( "nisd;", "\U000022fa" ) \
+ NAMED_CHARACTER_REFERENCE( "niv;", "\U0000220b" ) \
+ NAMED_CHARACTER_REFERENCE( "njcy;", "\U0000045a" ) \
+ NAMED_CHARACTER_REFERENCE( "nlArr;", "\U000021cd" ) \
+ NAMED_CHARACTER_REFERENCE( "nlE;", "\U00002266\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nlarr;", "\U0000219a" ) \
+ NAMED_CHARACTER_REFERENCE( "nldr;", "\U00002025" ) \
+ NAMED_CHARACTER_REFERENCE( "nle;", "\U00002270" ) \
+ NAMED_CHARACTER_REFERENCE( "nleftarrow;", "\U0000219a" ) \
+ NAMED_CHARACTER_REFERENCE( "nleftrightarrow;", "\U000021ae" ) \
+ NAMED_CHARACTER_REFERENCE( "nleq;", "\U00002270" ) \
+ NAMED_CHARACTER_REFERENCE( "nleqq;", "\U00002266\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nleqslant;", "\U00002a7d\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nles;", "\U00002a7d\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nless;", "\U0000226e" ) \
+ NAMED_CHARACTER_REFERENCE( "nlsim;", "\U00002274" ) \
+ NAMED_CHARACTER_REFERENCE( "nlt;", "\U0000226e" ) \
+ NAMED_CHARACTER_REFERENCE( "nltri;", "\U000022ea" ) \
+ NAMED_CHARACTER_REFERENCE( "nltrie;", "\U000022ec" ) \
+ NAMED_CHARACTER_REFERENCE( "nmid;", "\U00002224" ) \
+ NAMED_CHARACTER_REFERENCE( "nopf;", "\U0001d55f" ) \
+ NAMED_CHARACTER_REFERENCE( "not", "\U000000ac" ) \
+ NAMED_CHARACTER_REFERENCE( "not;", "\U000000ac" ) \
+ NAMED_CHARACTER_REFERENCE( "notin;", "\U00002209" ) \
+ NAMED_CHARACTER_REFERENCE( "notinE;", "\U000022f9\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "notindot;", "\U000022f5\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "notinva;", "\U00002209" ) \
+ NAMED_CHARACTER_REFERENCE( "notinvb;", "\U000022f7" ) \
+ NAMED_CHARACTER_REFERENCE( "notinvc;", "\U000022f6" ) \
+ NAMED_CHARACTER_REFERENCE( "notni;", "\U0000220c" ) \
+ NAMED_CHARACTER_REFERENCE( "notniva;", "\U0000220c" ) \
+ NAMED_CHARACTER_REFERENCE( "notnivb;", "\U000022fe" ) \
+ NAMED_CHARACTER_REFERENCE( "notnivc;", "\U000022fd" ) \
+ NAMED_CHARACTER_REFERENCE( "npar;", "\U00002226" ) \
+ NAMED_CHARACTER_REFERENCE( "nparallel;", "\U00002226" ) \
+ NAMED_CHARACTER_REFERENCE( "nparsl;", "\U00002afd\U000020e5" ) \
+ NAMED_CHARACTER_REFERENCE( "npart;", "\U00002202\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "npolint;", "\U00002a14" ) \
+ NAMED_CHARACTER_REFERENCE( "npr;", "\U00002280" ) \
+ NAMED_CHARACTER_REFERENCE( "nprcue;", "\U000022e0" ) \
+ NAMED_CHARACTER_REFERENCE( "npre;", "\U00002aaf\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nprec;", "\U00002280" ) \
+ NAMED_CHARACTER_REFERENCE( "npreceq;", "\U00002aaf\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nrArr;", "\U000021cf" ) \
+ NAMED_CHARACTER_REFERENCE( "nrarr;", "\U0000219b" ) \
+ NAMED_CHARACTER_REFERENCE( "nrarrc;", "\U00002933\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nrarrw;", "\U0000219d\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nrightarrow;", "\U0000219b" ) \
+ NAMED_CHARACTER_REFERENCE( "nrtri;", "\U000022eb" ) \
+ NAMED_CHARACTER_REFERENCE( "nrtrie;", "\U000022ed" ) \
+ NAMED_CHARACTER_REFERENCE( "nsc;", "\U00002281" ) \
+ NAMED_CHARACTER_REFERENCE( "nsccue;", "\U000022e1" ) \
+ NAMED_CHARACTER_REFERENCE( "nsce;", "\U00002ab0\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nscr;", "\U0001d4c3" ) \
+ NAMED_CHARACTER_REFERENCE( "nshortmid;", "\U00002224" ) \
+ NAMED_CHARACTER_REFERENCE( "nshortparallel;", "\U00002226" ) \
+ NAMED_CHARACTER_REFERENCE( "nsim;", "\U00002241" ) \
+ NAMED_CHARACTER_REFERENCE( "nsime;", "\U00002244" ) \
+ NAMED_CHARACTER_REFERENCE( "nsimeq;", "\U00002244" ) \
+ NAMED_CHARACTER_REFERENCE( "nsmid;", "\U00002224" ) \
+ NAMED_CHARACTER_REFERENCE( "nspar;", "\U00002226" ) \
+ NAMED_CHARACTER_REFERENCE( "nsqsube;", "\U000022e2" ) \
+ NAMED_CHARACTER_REFERENCE( "nsqsupe;", "\U000022e3" ) \
+ NAMED_CHARACTER_REFERENCE( "nsub;", "\U00002284" ) \
+ NAMED_CHARACTER_REFERENCE( "nsubE;", "\U00002ac5\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nsube;", "\U00002288" ) \
+ NAMED_CHARACTER_REFERENCE( "nsubset;", "\U00002282\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nsubseteq;", "\U00002288" ) \
+ NAMED_CHARACTER_REFERENCE( "nsubseteqq;", "\U00002ac5\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nsucc;", "\U00002281" ) \
+ NAMED_CHARACTER_REFERENCE( "nsucceq;", "\U00002ab0\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nsup;", "\U00002285" ) \
+ NAMED_CHARACTER_REFERENCE( "nsupE;", "\U00002ac6\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "nsupe;", "\U00002289" ) \
+ NAMED_CHARACTER_REFERENCE( "nsupset;", "\U00002283\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nsupseteq;", "\U00002289" ) \
+ NAMED_CHARACTER_REFERENCE( "nsupseteqq;", "\U00002ac6\U00000338" ) \
+ NAMED_CHARACTER_REFERENCE( "ntgl;", "\U00002279" ) \
+ NAMED_CHARACTER_REFERENCE( "ntilde", "\U000000f1" ) \
+ NAMED_CHARACTER_REFERENCE( "ntilde;", "\U000000f1" ) \
+ NAMED_CHARACTER_REFERENCE( "ntlg;", "\U00002278" ) \
+ NAMED_CHARACTER_REFERENCE( "ntriangleleft;", "\U000022ea" ) \
+ NAMED_CHARACTER_REFERENCE( "ntrianglelefteq;", "\U000022ec" ) \
+ NAMED_CHARACTER_REFERENCE( "ntriangleright;", "\U000022eb" ) \
+ NAMED_CHARACTER_REFERENCE( "ntrianglerighteq;", "\U000022ed" ) \
+ NAMED_CHARACTER_REFERENCE( "nu;", "\U000003bd" ) \
+ NAMED_CHARACTER_REFERENCE( "num;", "#" ) \
+ NAMED_CHARACTER_REFERENCE( "numero;", "\U00002116" ) \
+ NAMED_CHARACTER_REFERENCE( "numsp;", "\U00002007" ) \
+ NAMED_CHARACTER_REFERENCE( "nvDash;", "\U000022ad" ) \
+ NAMED_CHARACTER_REFERENCE( "nvHarr;", "\U00002904" ) \
+ NAMED_CHARACTER_REFERENCE( "nvap;", "\U0000224d\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvdash;", "\U000022ac" ) \
+ NAMED_CHARACTER_REFERENCE( "nvge;", "\U00002265\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvgt;", ">\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvinfin;", "\U000029de" ) \
+ NAMED_CHARACTER_REFERENCE( "nvlArr;", "\U00002902" ) \
+ NAMED_CHARACTER_REFERENCE( "nvle;", "\U00002264\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvlt;", "<\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvltrie;", "\U000022b4\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvrArr;", "\U00002903" ) \
+ NAMED_CHARACTER_REFERENCE( "nvrtrie;", "\U000022b5\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nvsim;", "\U0000223c\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "nwArr;", "\U000021d6" ) \
+ NAMED_CHARACTER_REFERENCE( "nwarhk;", "\U00002923" ) \
+ NAMED_CHARACTER_REFERENCE( "nwarr;", "\U00002196" ) \
+ NAMED_CHARACTER_REFERENCE( "nwarrow;", "\U00002196" ) \
+ NAMED_CHARACTER_REFERENCE( "nwnear;", "\U00002927" ) \
+ NAMED_CHARACTER_REFERENCE( "oS;", "\U000024c8" ) \
+ NAMED_CHARACTER_REFERENCE( "oacute", "\U000000f3" ) \
+ NAMED_CHARACTER_REFERENCE( "oacute;", "\U000000f3" ) \
+ NAMED_CHARACTER_REFERENCE( "oast;", "\U0000229b" ) \
+ NAMED_CHARACTER_REFERENCE( "ocir;", "\U0000229a" ) \
+ NAMED_CHARACTER_REFERENCE( "ocirc", "\U000000f4" ) \
+ NAMED_CHARACTER_REFERENCE( "ocirc;", "\U000000f4" ) \
+ NAMED_CHARACTER_REFERENCE( "ocy;", "\U0000043e" ) \
+ NAMED_CHARACTER_REFERENCE( "odash;", "\U0000229d" ) \
+ NAMED_CHARACTER_REFERENCE( "odblac;", "\U00000151" ) \
+ NAMED_CHARACTER_REFERENCE( "odiv;", "\U00002a38" ) \
+ NAMED_CHARACTER_REFERENCE( "odot;", "\U00002299" ) \
+ NAMED_CHARACTER_REFERENCE( "odsold;", "\U000029bc" ) \
+ NAMED_CHARACTER_REFERENCE( "oelig;", "\U00000153" ) \
+ NAMED_CHARACTER_REFERENCE( "ofcir;", "\U000029bf" ) \
+ NAMED_CHARACTER_REFERENCE( "ofr;", "\U0001d52c" ) \
+ NAMED_CHARACTER_REFERENCE( "ogon;", "\U000002db" ) \
+ NAMED_CHARACTER_REFERENCE( "ograve", "\U000000f2" ) \
+ NAMED_CHARACTER_REFERENCE( "ograve;", "\U000000f2" ) \
+ NAMED_CHARACTER_REFERENCE( "ogt;", "\U000029c1" ) \
+ NAMED_CHARACTER_REFERENCE( "ohbar;", "\U000029b5" ) \
+ NAMED_CHARACTER_REFERENCE( "ohm;", "\U000003a9" ) \
+ NAMED_CHARACTER_REFERENCE( "oint;", "\U0000222e" ) \
+ NAMED_CHARACTER_REFERENCE( "olarr;", "\U000021ba" ) \
+ NAMED_CHARACTER_REFERENCE( "olcir;", "\U000029be" ) \
+ NAMED_CHARACTER_REFERENCE( "olcross;", "\U000029bb" ) \
+ NAMED_CHARACTER_REFERENCE( "oline;", "\U0000203e" ) \
+ NAMED_CHARACTER_REFERENCE( "olt;", "\U000029c0" ) \
+ NAMED_CHARACTER_REFERENCE( "omacr;", "\U0000014d" ) \
+ NAMED_CHARACTER_REFERENCE( "omega;", "\U000003c9" ) \
+ NAMED_CHARACTER_REFERENCE( "omicron;", "\U000003bf" ) \
+ NAMED_CHARACTER_REFERENCE( "omid;", "\U000029b6" ) \
+ NAMED_CHARACTER_REFERENCE( "ominus;", "\U00002296" ) \
+ NAMED_CHARACTER_REFERENCE( "oopf;", "\U0001d560" ) \
+ NAMED_CHARACTER_REFERENCE( "opar;", "\U000029b7" ) \
+ NAMED_CHARACTER_REFERENCE( "operp;", "\U000029b9" ) \
+ NAMED_CHARACTER_REFERENCE( "oplus;", "\U00002295" ) \
+ NAMED_CHARACTER_REFERENCE( "or;", "\U00002228" ) \
+ NAMED_CHARACTER_REFERENCE( "orarr;", "\U000021bb" ) \
+ NAMED_CHARACTER_REFERENCE( "ord;", "\U00002a5d" ) \
+ NAMED_CHARACTER_REFERENCE( "order;", "\U00002134" ) \
+ NAMED_CHARACTER_REFERENCE( "orderof;", "\U00002134" ) \
+ NAMED_CHARACTER_REFERENCE( "ordf", "\U000000aa" ) \
+ NAMED_CHARACTER_REFERENCE( "ordf;", "\U000000aa" ) \
+ NAMED_CHARACTER_REFERENCE( "ordm", "\U000000ba" ) \
+ NAMED_CHARACTER_REFERENCE( "ordm;", "\U000000ba" ) \
+ NAMED_CHARACTER_REFERENCE( "origof;", "\U000022b6" ) \
+ NAMED_CHARACTER_REFERENCE( "oror;", "\U00002a56" ) \
+ NAMED_CHARACTER_REFERENCE( "orslope;", "\U00002a57" ) \
+ NAMED_CHARACTER_REFERENCE( "orv;", "\U00002a5b" ) \
+ NAMED_CHARACTER_REFERENCE( "oscr;", "\U00002134" ) \
+ NAMED_CHARACTER_REFERENCE( "oslash", "\U000000f8" ) \
+ NAMED_CHARACTER_REFERENCE( "oslash;", "\U000000f8" ) \
+ NAMED_CHARACTER_REFERENCE( "osol;", "\U00002298" ) \
+ NAMED_CHARACTER_REFERENCE( "otilde", "\U000000f5" ) \
+ NAMED_CHARACTER_REFERENCE( "otilde;", "\U000000f5" ) \
+ NAMED_CHARACTER_REFERENCE( "otimes;", "\U00002297" ) \
+ NAMED_CHARACTER_REFERENCE( "otimesas;", "\U00002a36" ) \
+ NAMED_CHARACTER_REFERENCE( "ouml", "\U000000f6" ) \
+ NAMED_CHARACTER_REFERENCE( "ouml;", "\U000000f6" ) \
+ NAMED_CHARACTER_REFERENCE( "ovbar;", "\U0000233d" ) \
+ NAMED_CHARACTER_REFERENCE( "par;", "\U00002225" ) \
+ NAMED_CHARACTER_REFERENCE( "para", "\U000000b6" ) \
+ NAMED_CHARACTER_REFERENCE( "para;", "\U000000b6" ) \
+ NAMED_CHARACTER_REFERENCE( "parallel;", "\U00002225" ) \
+ NAMED_CHARACTER_REFERENCE( "parsim;", "\U00002af3" ) \
+ NAMED_CHARACTER_REFERENCE( "parsl;", "\U00002afd" ) \
+ NAMED_CHARACTER_REFERENCE( "part;", "\U00002202" ) \
+ NAMED_CHARACTER_REFERENCE( "pcy;", "\U0000043f" ) \
+ NAMED_CHARACTER_REFERENCE( "percnt;", "%" ) \
+ NAMED_CHARACTER_REFERENCE( "period;", "." ) \
+ NAMED_CHARACTER_REFERENCE( "permil;", "\U00002030" ) \
+ NAMED_CHARACTER_REFERENCE( "perp;", "\U000022a5" ) \
+ NAMED_CHARACTER_REFERENCE( "pertenk;", "\U00002031" ) \
+ NAMED_CHARACTER_REFERENCE( "pfr;", "\U0001d52d" ) \
+ NAMED_CHARACTER_REFERENCE( "phi;", "\U000003c6" ) \
+ NAMED_CHARACTER_REFERENCE( "phiv;", "\U000003d5" ) \
+ NAMED_CHARACTER_REFERENCE( "phmmat;", "\U00002133" ) \
+ NAMED_CHARACTER_REFERENCE( "phone;", "\U0000260e" ) \
+ NAMED_CHARACTER_REFERENCE( "pi;", "\U000003c0" ) \
+ NAMED_CHARACTER_REFERENCE( "pitchfork;", "\U000022d4" ) \
+ NAMED_CHARACTER_REFERENCE( "piv;", "\U000003d6" ) \
+ NAMED_CHARACTER_REFERENCE( "planck;", "\U0000210f" ) \
+ NAMED_CHARACTER_REFERENCE( "planckh;", "\U0000210e" ) \
+ NAMED_CHARACTER_REFERENCE( "plankv;", "\U0000210f" ) \
+ NAMED_CHARACTER_REFERENCE( "plus;", "+" ) \
+ NAMED_CHARACTER_REFERENCE( "plusacir;", "\U00002a23" ) \
+ NAMED_CHARACTER_REFERENCE( "plusb;", "\U0000229e" ) \
+ NAMED_CHARACTER_REFERENCE( "pluscir;", "\U00002a22" ) \
+ NAMED_CHARACTER_REFERENCE( "plusdo;", "\U00002214" ) \
+ NAMED_CHARACTER_REFERENCE( "plusdu;", "\U00002a25" ) \
+ NAMED_CHARACTER_REFERENCE( "pluse;", "\U00002a72" ) \
+ NAMED_CHARACTER_REFERENCE( "plusmn", "\U000000b1" ) \
+ NAMED_CHARACTER_REFERENCE( "plusmn;", "\U000000b1" ) \
+ NAMED_CHARACTER_REFERENCE( "plussim;", "\U00002a26" ) \
+ NAMED_CHARACTER_REFERENCE( "plustwo;", "\U00002a27" ) \
+ NAMED_CHARACTER_REFERENCE( "pm;", "\U000000b1" ) \
+ NAMED_CHARACTER_REFERENCE( "pointint;", "\U00002a15" ) \
+ NAMED_CHARACTER_REFERENCE( "popf;", "\U0001d561" ) \
+ NAMED_CHARACTER_REFERENCE( "pound", "\U000000a3" ) \
+ NAMED_CHARACTER_REFERENCE( "pound;", "\U000000a3" ) \
+ NAMED_CHARACTER_REFERENCE( "pr;", "\U0000227a" ) \
+ NAMED_CHARACTER_REFERENCE( "prE;", "\U00002ab3" ) \
+ NAMED_CHARACTER_REFERENCE( "prap;", "\U00002ab7" ) \
+ NAMED_CHARACTER_REFERENCE( "prcue;", "\U0000227c" ) \
+ NAMED_CHARACTER_REFERENCE( "pre;", "\U00002aaf" ) \
+ NAMED_CHARACTER_REFERENCE( "prec;", "\U0000227a" ) \
+ NAMED_CHARACTER_REFERENCE( "precapprox;", "\U00002ab7" ) \
+ NAMED_CHARACTER_REFERENCE( "preccurlyeq;", "\U0000227c" ) \
+ NAMED_CHARACTER_REFERENCE( "preceq;", "\U00002aaf" ) \
+ NAMED_CHARACTER_REFERENCE( "precnapprox;", "\U00002ab9" ) \
+ NAMED_CHARACTER_REFERENCE( "precneqq;", "\U00002ab5" ) \
+ NAMED_CHARACTER_REFERENCE( "precnsim;", "\U000022e8" ) \
+ NAMED_CHARACTER_REFERENCE( "precsim;", "\U0000227e" ) \
+ NAMED_CHARACTER_REFERENCE( "prime;", "\U00002032" ) \
+ NAMED_CHARACTER_REFERENCE( "primes;", "\U00002119" ) \
+ NAMED_CHARACTER_REFERENCE( "prnE;", "\U00002ab5" ) \
+ NAMED_CHARACTER_REFERENCE( "prnap;", "\U00002ab9" ) \
+ NAMED_CHARACTER_REFERENCE( "prnsim;", "\U000022e8" ) \
+ NAMED_CHARACTER_REFERENCE( "prod;", "\U0000220f" ) \
+ NAMED_CHARACTER_REFERENCE( "profalar;", "\U0000232e" ) \
+ NAMED_CHARACTER_REFERENCE( "profline;", "\U00002312" ) \
+ NAMED_CHARACTER_REFERENCE( "profsurf;", "\U00002313" ) \
+ NAMED_CHARACTER_REFERENCE( "prop;", "\U0000221d" ) \
+ NAMED_CHARACTER_REFERENCE( "propto;", "\U0000221d" ) \
+ NAMED_CHARACTER_REFERENCE( "prsim;", "\U0000227e" ) \
+ NAMED_CHARACTER_REFERENCE( "prurel;", "\U000022b0" ) \
+ NAMED_CHARACTER_REFERENCE( "pscr;", "\U0001d4c5" ) \
+ NAMED_CHARACTER_REFERENCE( "psi;", "\U000003c8" ) \
+ NAMED_CHARACTER_REFERENCE( "puncsp;", "\U00002008" ) \
+ NAMED_CHARACTER_REFERENCE( "qfr;", "\U0001d52e" ) \
+ NAMED_CHARACTER_REFERENCE( "qint;", "\U00002a0c" ) \
+ NAMED_CHARACTER_REFERENCE( "qopf;", "\U0001d562" ) \
+ NAMED_CHARACTER_REFERENCE( "qprime;", "\U00002057" ) \
+ NAMED_CHARACTER_REFERENCE( "qscr;", "\U0001d4c6" ) \
+ NAMED_CHARACTER_REFERENCE( "quaternions;", "\U0000210d" ) \
+ NAMED_CHARACTER_REFERENCE( "quatint;", "\U00002a16" ) \
+ NAMED_CHARACTER_REFERENCE( "quest;", "?" ) \
+ NAMED_CHARACTER_REFERENCE( "questeq;", "\U0000225f" ) \
+ NAMED_CHARACTER_REFERENCE( "quot", "\"" ) \
+ NAMED_CHARACTER_REFERENCE( "quot;", "\"" ) \
+ NAMED_CHARACTER_REFERENCE( "rAarr;", "\U000021db" ) \
+ NAMED_CHARACTER_REFERENCE( "rArr;", "\U000021d2" ) \
+ NAMED_CHARACTER_REFERENCE( "rAtail;", "\U0000291c" ) \
+ NAMED_CHARACTER_REFERENCE( "rBarr;", "\U0000290f" ) \
+ NAMED_CHARACTER_REFERENCE( "rHar;", "\U00002964" ) \
+ NAMED_CHARACTER_REFERENCE( "race;", "\U0000223d\U00000331" ) \
+ NAMED_CHARACTER_REFERENCE( "racute;", "\U00000155" ) \
+ NAMED_CHARACTER_REFERENCE( "radic;", "\U0000221a" ) \
+ NAMED_CHARACTER_REFERENCE( "raemptyv;", "\U000029b3" ) \
+ NAMED_CHARACTER_REFERENCE( "rang;", "\U000027e9" ) \
+ NAMED_CHARACTER_REFERENCE( "rangd;", "\U00002992" ) \
+ NAMED_CHARACTER_REFERENCE( "range;", "\U000029a5" ) \
+ NAMED_CHARACTER_REFERENCE( "rangle;", "\U000027e9" ) \
+ NAMED_CHARACTER_REFERENCE( "raquo", "\U000000bb" ) \
+ NAMED_CHARACTER_REFERENCE( "raquo;", "\U000000bb" ) \
+ NAMED_CHARACTER_REFERENCE( "rarr;", "\U00002192" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrap;", "\U00002975" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrb;", "\U000021e5" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrbfs;", "\U00002920" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrc;", "\U00002933" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrfs;", "\U0000291e" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrhk;", "\U000021aa" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrlp;", "\U000021ac" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrpl;", "\U00002945" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrsim;", "\U00002974" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrtl;", "\U000021a3" ) \
+ NAMED_CHARACTER_REFERENCE( "rarrw;", "\U0000219d" ) \
+ NAMED_CHARACTER_REFERENCE( "ratail;", "\U0000291a" ) \
+ NAMED_CHARACTER_REFERENCE( "ratio;", "\U00002236" ) \
+ NAMED_CHARACTER_REFERENCE( "rationals;", "\U0000211a" ) \
+ NAMED_CHARACTER_REFERENCE( "rbarr;", "\U0000290d" ) \
+ NAMED_CHARACTER_REFERENCE( "rbbrk;", "\U00002773" ) \
+ NAMED_CHARACTER_REFERENCE( "rbrace;", "}" ) \
+ NAMED_CHARACTER_REFERENCE( "rbrack;", "]" ) \
+ NAMED_CHARACTER_REFERENCE( "rbrke;", "\U0000298c" ) \
+ NAMED_CHARACTER_REFERENCE( "rbrksld;", "\U0000298e" ) \
+ NAMED_CHARACTER_REFERENCE( "rbrkslu;", "\U00002990" ) \
+ NAMED_CHARACTER_REFERENCE( "rcaron;", "\U00000159" ) \
+ NAMED_CHARACTER_REFERENCE( "rcedil;", "\U00000157" ) \
+ NAMED_CHARACTER_REFERENCE( "rceil;", "\U00002309" ) \
+ NAMED_CHARACTER_REFERENCE( "rcub;", "}" ) \
+ NAMED_CHARACTER_REFERENCE( "rcy;", "\U00000440" ) \
+ NAMED_CHARACTER_REFERENCE( "rdca;", "\U00002937" ) \
+ NAMED_CHARACTER_REFERENCE( "rdldhar;", "\U00002969" ) \
+ NAMED_CHARACTER_REFERENCE( "rdquo;", "\U0000201d" ) \
+ NAMED_CHARACTER_REFERENCE( "rdquor;", "\U0000201d" ) \
+ NAMED_CHARACTER_REFERENCE( "rdsh;", "\U000021b3" ) \
+ NAMED_CHARACTER_REFERENCE( "real;", "\U0000211c" ) \
+ NAMED_CHARACTER_REFERENCE( "realine;", "\U0000211b" ) \
+ NAMED_CHARACTER_REFERENCE( "realpart;", "\U0000211c" ) \
+ NAMED_CHARACTER_REFERENCE( "reals;", "\U0000211d" ) \
+ NAMED_CHARACTER_REFERENCE( "rect;", "\U000025ad" ) \
+ NAMED_CHARACTER_REFERENCE( "reg", "\U000000ae" ) \
+ NAMED_CHARACTER_REFERENCE( "reg;", "\U000000ae" ) \
+ NAMED_CHARACTER_REFERENCE( "rfisht;", "\U0000297d" ) \
+ NAMED_CHARACTER_REFERENCE( "rfloor;", "\U0000230b" ) \
+ NAMED_CHARACTER_REFERENCE( "rfr;", "\U0001d52f" ) \
+ NAMED_CHARACTER_REFERENCE( "rhard;", "\U000021c1" ) \
+ NAMED_CHARACTER_REFERENCE( "rharu;", "\U000021c0" ) \
+ NAMED_CHARACTER_REFERENCE( "rharul;", "\U0000296c" ) \
+ NAMED_CHARACTER_REFERENCE( "rho;", "\U000003c1" ) \
+ NAMED_CHARACTER_REFERENCE( "rhov;", "\U000003f1" ) \
+ NAMED_CHARACTER_REFERENCE( "rightarrow;", "\U00002192" ) \
+ NAMED_CHARACTER_REFERENCE( "rightarrowtail;", "\U000021a3" ) \
+ NAMED_CHARACTER_REFERENCE( "rightharpoondown;", "\U000021c1" ) \
+ NAMED_CHARACTER_REFERENCE( "rightharpoonup;", "\U000021c0" ) \
+ NAMED_CHARACTER_REFERENCE( "rightleftarrows;", "\U000021c4" ) \
+ NAMED_CHARACTER_REFERENCE( "rightleftharpoons;", "\U000021cc" ) \
+ NAMED_CHARACTER_REFERENCE( "rightrightarrows;", "\U000021c9" ) \
+ NAMED_CHARACTER_REFERENCE( "rightsquigarrow;", "\U0000219d" ) \
+ NAMED_CHARACTER_REFERENCE( "rightthreetimes;", "\U000022cc" ) \
+ NAMED_CHARACTER_REFERENCE( "ring;", "\U000002da" ) \
+ NAMED_CHARACTER_REFERENCE( "risingdotseq;", "\U00002253" ) \
+ NAMED_CHARACTER_REFERENCE( "rlarr;", "\U000021c4" ) \
+ NAMED_CHARACTER_REFERENCE( "rlhar;", "\U000021cc" ) \
+ NAMED_CHARACTER_REFERENCE( "rlm;", "\U0000200f" ) \
+ NAMED_CHARACTER_REFERENCE( "rmoust;", "\U000023b1" ) \
+ NAMED_CHARACTER_REFERENCE( "rmoustache;", "\U000023b1" ) \
+ NAMED_CHARACTER_REFERENCE( "rnmid;", "\U00002aee" ) \
+ NAMED_CHARACTER_REFERENCE( "roang;", "\U000027ed" ) \
+ NAMED_CHARACTER_REFERENCE( "roarr;", "\U000021fe" ) \
+ NAMED_CHARACTER_REFERENCE( "robrk;", "\U000027e7" ) \
+ NAMED_CHARACTER_REFERENCE( "ropar;", "\U00002986" ) \
+ NAMED_CHARACTER_REFERENCE( "ropf;", "\U0001d563" ) \
+ NAMED_CHARACTER_REFERENCE( "roplus;", "\U00002a2e" ) \
+ NAMED_CHARACTER_REFERENCE( "rotimes;", "\U00002a35" ) \
+ NAMED_CHARACTER_REFERENCE( "rpar;", ")" ) \
+ NAMED_CHARACTER_REFERENCE( "rpargt;", "\U00002994" ) \
+ NAMED_CHARACTER_REFERENCE( "rppolint;", "\U00002a12" ) \
+ NAMED_CHARACTER_REFERENCE( "rrarr;", "\U000021c9" ) \
+ NAMED_CHARACTER_REFERENCE( "rsaquo;", "\U0000203a" ) \
+ NAMED_CHARACTER_REFERENCE( "rscr;", "\U0001d4c7" ) \
+ NAMED_CHARACTER_REFERENCE( "rsh;", "\U000021b1" ) \
+ NAMED_CHARACTER_REFERENCE( "rsqb;", "]" ) \
+ NAMED_CHARACTER_REFERENCE( "rsquo;", "\U00002019" ) \
+ NAMED_CHARACTER_REFERENCE( "rsquor;", "\U00002019" ) \
+ NAMED_CHARACTER_REFERENCE( "rthree;", "\U000022cc" ) \
+ NAMED_CHARACTER_REFERENCE( "rtimes;", "\U000022ca" ) \
+ NAMED_CHARACTER_REFERENCE( "rtri;", "\U000025b9" ) \
+ NAMED_CHARACTER_REFERENCE( "rtrie;", "\U000022b5" ) \
+ NAMED_CHARACTER_REFERENCE( "rtrif;", "\U000025b8" ) \
+ NAMED_CHARACTER_REFERENCE( "rtriltri;", "\U000029ce" ) \
+ NAMED_CHARACTER_REFERENCE( "ruluhar;", "\U00002968" ) \
+ NAMED_CHARACTER_REFERENCE( "rx;", "\U0000211e" ) \
+ NAMED_CHARACTER_REFERENCE( "sacute;", "\U0000015b" ) \
+ NAMED_CHARACTER_REFERENCE( "sbquo;", "\U0000201a" ) \
+ NAMED_CHARACTER_REFERENCE( "sc;", "\U0000227b" ) \
+ NAMED_CHARACTER_REFERENCE( "scE;", "\U00002ab4" ) \
+ NAMED_CHARACTER_REFERENCE( "scap;", "\U00002ab8" ) \
+ NAMED_CHARACTER_REFERENCE( "scaron;", "\U00000161" ) \
+ NAMED_CHARACTER_REFERENCE( "sccue;", "\U0000227d" ) \
+ NAMED_CHARACTER_REFERENCE( "sce;", "\U00002ab0" ) \
+ NAMED_CHARACTER_REFERENCE( "scedil;", "\U0000015f" ) \
+ NAMED_CHARACTER_REFERENCE( "scirc;", "\U0000015d" ) \
+ NAMED_CHARACTER_REFERENCE( "scnE;", "\U00002ab6" ) \
+ NAMED_CHARACTER_REFERENCE( "scnap;", "\U00002aba" ) \
+ NAMED_CHARACTER_REFERENCE( "scnsim;", "\U000022e9" ) \
+ NAMED_CHARACTER_REFERENCE( "scpolint;", "\U00002a13" ) \
+ NAMED_CHARACTER_REFERENCE( "scsim;", "\U0000227f" ) \
+ NAMED_CHARACTER_REFERENCE( "scy;", "\U00000441" ) \
+ NAMED_CHARACTER_REFERENCE( "sdot;", "\U000022c5" ) \
+ NAMED_CHARACTER_REFERENCE( "sdotb;", "\U000022a1" ) \
+ NAMED_CHARACTER_REFERENCE( "sdote;", "\U00002a66" ) \
+ NAMED_CHARACTER_REFERENCE( "seArr;", "\U000021d8" ) \
+ NAMED_CHARACTER_REFERENCE( "searhk;", "\U00002925" ) \
+ NAMED_CHARACTER_REFERENCE( "searr;", "\U00002198" ) \
+ NAMED_CHARACTER_REFERENCE( "searrow;", "\U00002198" ) \
+ NAMED_CHARACTER_REFERENCE( "sect", "\U000000a7" ) \
+ NAMED_CHARACTER_REFERENCE( "sect;", "\U000000a7" ) \
+ NAMED_CHARACTER_REFERENCE( "semi;", ";" ) \
+ NAMED_CHARACTER_REFERENCE( "seswar;", "\U00002929" ) \
+ NAMED_CHARACTER_REFERENCE( "setminus;", "\U00002216" ) \
+ NAMED_CHARACTER_REFERENCE( "setmn;", "\U00002216" ) \
+ NAMED_CHARACTER_REFERENCE( "sext;", "\U00002736" ) \
+ NAMED_CHARACTER_REFERENCE( "sfr;", "\U0001d530" ) \
+ NAMED_CHARACTER_REFERENCE( "sfrown;", "\U00002322" ) \
+ NAMED_CHARACTER_REFERENCE( "sharp;", "\U0000266f" ) \
+ NAMED_CHARACTER_REFERENCE( "shchcy;", "\U00000449" ) \
+ NAMED_CHARACTER_REFERENCE( "shcy;", "\U00000448" ) \
+ NAMED_CHARACTER_REFERENCE( "shortmid;", "\U00002223" ) \
+ NAMED_CHARACTER_REFERENCE( "shortparallel;", "\U00002225" ) \
+ NAMED_CHARACTER_REFERENCE( "shy", "\U000000ad" ) \
+ NAMED_CHARACTER_REFERENCE( "shy;", "\U000000ad" ) \
+ NAMED_CHARACTER_REFERENCE( "sigma;", "\U000003c3" ) \
+ NAMED_CHARACTER_REFERENCE( "sigmaf;", "\U000003c2" ) \
+ NAMED_CHARACTER_REFERENCE( "sigmav;", "\U000003c2" ) \
+ NAMED_CHARACTER_REFERENCE( "sim;", "\U0000223c" ) \
+ NAMED_CHARACTER_REFERENCE( "simdot;", "\U00002a6a" ) \
+ NAMED_CHARACTER_REFERENCE( "sime;", "\U00002243" ) \
+ NAMED_CHARACTER_REFERENCE( "simeq;", "\U00002243" ) \
+ NAMED_CHARACTER_REFERENCE( "simg;", "\U00002a9e" ) \
+ NAMED_CHARACTER_REFERENCE( "simgE;", "\U00002aa0" ) \
+ NAMED_CHARACTER_REFERENCE( "siml;", "\U00002a9d" ) \
+ NAMED_CHARACTER_REFERENCE( "simlE;", "\U00002a9f" ) \
+ NAMED_CHARACTER_REFERENCE( "simne;", "\U00002246" ) \
+ NAMED_CHARACTER_REFERENCE( "simplus;", "\U00002a24" ) \
+ NAMED_CHARACTER_REFERENCE( "simrarr;", "\U00002972" ) \
+ NAMED_CHARACTER_REFERENCE( "slarr;", "\U00002190" ) \
+ NAMED_CHARACTER_REFERENCE( "smallsetminus;", "\U00002216" ) \
+ NAMED_CHARACTER_REFERENCE( "smashp;", "\U00002a33" ) \
+ NAMED_CHARACTER_REFERENCE( "smeparsl;", "\U000029e4" ) \
+ NAMED_CHARACTER_REFERENCE( "smid;", "\U00002223" ) \
+ NAMED_CHARACTER_REFERENCE( "smile;", "\U00002323" ) \
+ NAMED_CHARACTER_REFERENCE( "smt;", "\U00002aaa" ) \
+ NAMED_CHARACTER_REFERENCE( "smte;", "\U00002aac" ) \
+ NAMED_CHARACTER_REFERENCE( "smtes;", "\U00002aac\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "softcy;", "\U0000044c" ) \
+ NAMED_CHARACTER_REFERENCE( "sol;", "/" ) \
+ NAMED_CHARACTER_REFERENCE( "solb;", "\U000029c4" ) \
+ NAMED_CHARACTER_REFERENCE( "solbar;", "\U0000233f" ) \
+ NAMED_CHARACTER_REFERENCE( "sopf;", "\U0001d564" ) \
+ NAMED_CHARACTER_REFERENCE( "spades;", "\U00002660" ) \
+ NAMED_CHARACTER_REFERENCE( "spadesuit;", "\U00002660" ) \
+ NAMED_CHARACTER_REFERENCE( "spar;", "\U00002225" ) \
+ NAMED_CHARACTER_REFERENCE( "sqcap;", "\U00002293" ) \
+ NAMED_CHARACTER_REFERENCE( "sqcaps;", "\U00002293\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "sqcup;", "\U00002294" ) \
+ NAMED_CHARACTER_REFERENCE( "sqcups;", "\U00002294\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsub;", "\U0000228f" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsube;", "\U00002291" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsubset;", "\U0000228f" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsubseteq;", "\U00002291" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsup;", "\U00002290" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsupe;", "\U00002292" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsupset;", "\U00002290" ) \
+ NAMED_CHARACTER_REFERENCE( "sqsupseteq;", "\U00002292" ) \
+ NAMED_CHARACTER_REFERENCE( "squ;", "\U000025a1" ) \
+ NAMED_CHARACTER_REFERENCE( "square;", "\U000025a1" ) \
+ NAMED_CHARACTER_REFERENCE( "squarf;", "\U000025aa" ) \
+ NAMED_CHARACTER_REFERENCE( "squf;", "\U000025aa" ) \
+ NAMED_CHARACTER_REFERENCE( "srarr;", "\U00002192" ) \
+ NAMED_CHARACTER_REFERENCE( "sscr;", "\U0001d4c8" ) \
+ NAMED_CHARACTER_REFERENCE( "ssetmn;", "\U00002216" ) \
+ NAMED_CHARACTER_REFERENCE( "ssmile;", "\U00002323" ) \
+ NAMED_CHARACTER_REFERENCE( "sstarf;", "\U000022c6" ) \
+ NAMED_CHARACTER_REFERENCE( "star;", "\U00002606" ) \
+ NAMED_CHARACTER_REFERENCE( "starf;", "\U00002605" ) \
+ NAMED_CHARACTER_REFERENCE( "straightepsilon;", "\U000003f5" ) \
+ NAMED_CHARACTER_REFERENCE( "straightphi;", "\U000003d5" ) \
+ NAMED_CHARACTER_REFERENCE( "strns;", "\U000000af" ) \
+ NAMED_CHARACTER_REFERENCE( "sub;", "\U00002282" ) \
+ NAMED_CHARACTER_REFERENCE( "subE;", "\U00002ac5" ) \
+ NAMED_CHARACTER_REFERENCE( "subdot;", "\U00002abd" ) \
+ NAMED_CHARACTER_REFERENCE( "sube;", "\U00002286" ) \
+ NAMED_CHARACTER_REFERENCE( "subedot;", "\U00002ac3" ) \
+ NAMED_CHARACTER_REFERENCE( "submult;", "\U00002ac1" ) \
+ NAMED_CHARACTER_REFERENCE( "subnE;", "\U00002acb" ) \
+ NAMED_CHARACTER_REFERENCE( "subne;", "\U0000228a" ) \
+ NAMED_CHARACTER_REFERENCE( "subplus;", "\U00002abf" ) \
+ NAMED_CHARACTER_REFERENCE( "subrarr;", "\U00002979" ) \
+ NAMED_CHARACTER_REFERENCE( "subset;", "\U00002282" ) \
+ NAMED_CHARACTER_REFERENCE( "subseteq;", "\U00002286" ) \
+ NAMED_CHARACTER_REFERENCE( "subseteqq;", "\U00002ac5" ) \
+ NAMED_CHARACTER_REFERENCE( "subsetneq;", "\U0000228a" ) \
+ NAMED_CHARACTER_REFERENCE( "subsetneqq;", "\U00002acb" ) \
+ NAMED_CHARACTER_REFERENCE( "subsim;", "\U00002ac7" ) \
+ NAMED_CHARACTER_REFERENCE( "subsub;", "\U00002ad5" ) \
+ NAMED_CHARACTER_REFERENCE( "subsup;", "\U00002ad3" ) \
+ NAMED_CHARACTER_REFERENCE( "succ;", "\U0000227b" ) \
+ NAMED_CHARACTER_REFERENCE( "succapprox;", "\U00002ab8" ) \
+ NAMED_CHARACTER_REFERENCE( "succcurlyeq;", "\U0000227d" ) \
+ NAMED_CHARACTER_REFERENCE( "succeq;", "\U00002ab0" ) \
+ NAMED_CHARACTER_REFERENCE( "succnapprox;", "\U00002aba" ) \
+ NAMED_CHARACTER_REFERENCE( "succneqq;", "\U00002ab6" ) \
+ NAMED_CHARACTER_REFERENCE( "succnsim;", "\U000022e9" ) \
+ NAMED_CHARACTER_REFERENCE( "succsim;", "\U0000227f" ) \
+ NAMED_CHARACTER_REFERENCE( "sum;", "\U00002211" ) \
+ NAMED_CHARACTER_REFERENCE( "sung;", "\U0000266a" ) \
+ NAMED_CHARACTER_REFERENCE( "sup1", "\U000000b9" ) \
+ NAMED_CHARACTER_REFERENCE( "sup1;", "\U000000b9" ) \
+ NAMED_CHARACTER_REFERENCE( "sup2", "\U000000b2" ) \
+ NAMED_CHARACTER_REFERENCE( "sup2;", "\U000000b2" ) \
+ NAMED_CHARACTER_REFERENCE( "sup3", "\U000000b3" ) \
+ NAMED_CHARACTER_REFERENCE( "sup3;", "\U000000b3" ) \
+ NAMED_CHARACTER_REFERENCE( "sup;", "\U00002283" ) \
+ NAMED_CHARACTER_REFERENCE( "supE;", "\U00002ac6" ) \
+ NAMED_CHARACTER_REFERENCE( "supdot;", "\U00002abe" ) \
+ NAMED_CHARACTER_REFERENCE( "supdsub;", "\U00002ad8" ) \
+ NAMED_CHARACTER_REFERENCE( "supe;", "\U00002287" ) \
+ NAMED_CHARACTER_REFERENCE( "supedot;", "\U00002ac4" ) \
+ NAMED_CHARACTER_REFERENCE( "suphsol;", "\U000027c9" ) \
+ NAMED_CHARACTER_REFERENCE( "suphsub;", "\U00002ad7" ) \
+ NAMED_CHARACTER_REFERENCE( "suplarr;", "\U0000297b" ) \
+ NAMED_CHARACTER_REFERENCE( "supmult;", "\U00002ac2" ) \
+ NAMED_CHARACTER_REFERENCE( "supnE;", "\U00002acc" ) \
+ NAMED_CHARACTER_REFERENCE( "supne;", "\U0000228b" ) \
+ NAMED_CHARACTER_REFERENCE( "supplus;", "\U00002ac0" ) \
+ NAMED_CHARACTER_REFERENCE( "supset;", "\U00002283" ) \
+ NAMED_CHARACTER_REFERENCE( "supseteq;", "\U00002287" ) \
+ NAMED_CHARACTER_REFERENCE( "supseteqq;", "\U00002ac6" ) \
+ NAMED_CHARACTER_REFERENCE( "supsetneq;", "\U0000228b" ) \
+ NAMED_CHARACTER_REFERENCE( "supsetneqq;", "\U00002acc" ) \
+ NAMED_CHARACTER_REFERENCE( "supsim;", "\U00002ac8" ) \
+ NAMED_CHARACTER_REFERENCE( "supsub;", "\U00002ad4" ) \
+ NAMED_CHARACTER_REFERENCE( "supsup;", "\U00002ad6" ) \
+ NAMED_CHARACTER_REFERENCE( "swArr;", "\U000021d9" ) \
+ NAMED_CHARACTER_REFERENCE( "swarhk;", "\U00002926" ) \
+ NAMED_CHARACTER_REFERENCE( "swarr;", "\U00002199" ) \
+ NAMED_CHARACTER_REFERENCE( "swarrow;", "\U00002199" ) \
+ NAMED_CHARACTER_REFERENCE( "swnwar;", "\U0000292a" ) \
+ NAMED_CHARACTER_REFERENCE( "szlig", "\U000000df" ) \
+ NAMED_CHARACTER_REFERENCE( "szlig;", "\U000000df" ) \
+ NAMED_CHARACTER_REFERENCE( "target;", "\U00002316" ) \
+ NAMED_CHARACTER_REFERENCE( "tau;", "\U000003c4" ) \
+ NAMED_CHARACTER_REFERENCE( "tbrk;", "\U000023b4" ) \
+ NAMED_CHARACTER_REFERENCE( "tcaron;", "\U00000165" ) \
+ NAMED_CHARACTER_REFERENCE( "tcedil;", "\U00000163" ) \
+ NAMED_CHARACTER_REFERENCE( "tcy;", "\U00000442" ) \
+ NAMED_CHARACTER_REFERENCE( "tdot;", "\U000020db" ) \
+ NAMED_CHARACTER_REFERENCE( "telrec;", "\U00002315" ) \
+ NAMED_CHARACTER_REFERENCE( "tfr;", "\U0001d531" ) \
+ NAMED_CHARACTER_REFERENCE( "there4;", "\U00002234" ) \
+ NAMED_CHARACTER_REFERENCE( "therefore;", "\U00002234" ) \
+ NAMED_CHARACTER_REFERENCE( "theta;", "\U000003b8" ) \
+ NAMED_CHARACTER_REFERENCE( "thetasym;", "\U000003d1" ) \
+ NAMED_CHARACTER_REFERENCE( "thetav;", "\U000003d1" ) \
+ NAMED_CHARACTER_REFERENCE( "thickapprox;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "thicksim;", "\U0000223c" ) \
+ NAMED_CHARACTER_REFERENCE( "thinsp;", "\U00002009" ) \
+ NAMED_CHARACTER_REFERENCE( "thkap;", "\U00002248" ) \
+ NAMED_CHARACTER_REFERENCE( "thksim;", "\U0000223c" ) \
+ NAMED_CHARACTER_REFERENCE( "thorn", "\U000000fe" ) \
+ NAMED_CHARACTER_REFERENCE( "thorn;", "\U000000fe" ) \
+ NAMED_CHARACTER_REFERENCE( "tilde;", "\U000002dc" ) \
+ NAMED_CHARACTER_REFERENCE( "times", "\U000000d7" ) \
+ NAMED_CHARACTER_REFERENCE( "times;", "\U000000d7" ) \
+ NAMED_CHARACTER_REFERENCE( "timesb;", "\U000022a0" ) \
+ NAMED_CHARACTER_REFERENCE( "timesbar;", "\U00002a31" ) \
+ NAMED_CHARACTER_REFERENCE( "timesd;", "\U00002a30" ) \
+ NAMED_CHARACTER_REFERENCE( "tint;", "\U0000222d" ) \
+ NAMED_CHARACTER_REFERENCE( "toea;", "\U00002928" ) \
+ NAMED_CHARACTER_REFERENCE( "top;", "\U000022a4" ) \
+ NAMED_CHARACTER_REFERENCE( "topbot;", "\U00002336" ) \
+ NAMED_CHARACTER_REFERENCE( "topcir;", "\U00002af1" ) \
+ NAMED_CHARACTER_REFERENCE( "topf;", "\U0001d565" ) \
+ NAMED_CHARACTER_REFERENCE( "topfork;", "\U00002ada" ) \
+ NAMED_CHARACTER_REFERENCE( "tosa;", "\U00002929" ) \
+ NAMED_CHARACTER_REFERENCE( "tprime;", "\U00002034" ) \
+ NAMED_CHARACTER_REFERENCE( "trade;", "\U00002122" ) \
+ NAMED_CHARACTER_REFERENCE( "triangle;", "\U000025b5" ) \
+ NAMED_CHARACTER_REFERENCE( "triangledown;", "\U000025bf" ) \
+ NAMED_CHARACTER_REFERENCE( "triangleleft;", "\U000025c3" ) \
+ NAMED_CHARACTER_REFERENCE( "trianglelefteq;", "\U000022b4" ) \
+ NAMED_CHARACTER_REFERENCE( "triangleq;", "\U0000225c" ) \
+ NAMED_CHARACTER_REFERENCE( "triangleright;", "\U000025b9" ) \
+ NAMED_CHARACTER_REFERENCE( "trianglerighteq;", "\U000022b5" ) \
+ NAMED_CHARACTER_REFERENCE( "tridot;", "\U000025ec" ) \
+ NAMED_CHARACTER_REFERENCE( "trie;", "\U0000225c" ) \
+ NAMED_CHARACTER_REFERENCE( "triminus;", "\U00002a3a" ) \
+ NAMED_CHARACTER_REFERENCE( "triplus;", "\U00002a39" ) \
+ NAMED_CHARACTER_REFERENCE( "trisb;", "\U000029cd" ) \
+ NAMED_CHARACTER_REFERENCE( "tritime;", "\U00002a3b" ) \
+ NAMED_CHARACTER_REFERENCE( "trpezium;", "\U000023e2" ) \
+ NAMED_CHARACTER_REFERENCE( "tscr;", "\U0001d4c9" ) \
+ NAMED_CHARACTER_REFERENCE( "tscy;", "\U00000446" ) \
+ NAMED_CHARACTER_REFERENCE( "tshcy;", "\U0000045b" ) \
+ NAMED_CHARACTER_REFERENCE( "tstrok;", "\U00000167" ) \
+ NAMED_CHARACTER_REFERENCE( "twixt;", "\U0000226c" ) \
+ NAMED_CHARACTER_REFERENCE( "twoheadleftarrow;", "\U0000219e" ) \
+ NAMED_CHARACTER_REFERENCE( "twoheadrightarrow;", "\U000021a0" ) \
+ NAMED_CHARACTER_REFERENCE( "uArr;", "\U000021d1" ) \
+ NAMED_CHARACTER_REFERENCE( "uHar;", "\U00002963" ) \
+ NAMED_CHARACTER_REFERENCE( "uacute", "\U000000fa" ) \
+ NAMED_CHARACTER_REFERENCE( "uacute;", "\U000000fa" ) \
+ NAMED_CHARACTER_REFERENCE( "uarr;", "\U00002191" ) \
+ NAMED_CHARACTER_REFERENCE( "ubrcy;", "\U0000045e" ) \
+ NAMED_CHARACTER_REFERENCE( "ubreve;", "\U0000016d" ) \
+ NAMED_CHARACTER_REFERENCE( "ucirc", "\U000000fb" ) \
+ NAMED_CHARACTER_REFERENCE( "ucirc;", "\U000000fb" ) \
+ NAMED_CHARACTER_REFERENCE( "ucy;", "\U00000443" ) \
+ NAMED_CHARACTER_REFERENCE( "udarr;", "\U000021c5" ) \
+ NAMED_CHARACTER_REFERENCE( "udblac;", "\U00000171" ) \
+ NAMED_CHARACTER_REFERENCE( "udhar;", "\U0000296e" ) \
+ NAMED_CHARACTER_REFERENCE( "ufisht;", "\U0000297e" ) \
+ NAMED_CHARACTER_REFERENCE( "ufr;", "\U0001d532" ) \
+ NAMED_CHARACTER_REFERENCE( "ugrave", "\U000000f9" ) \
+ NAMED_CHARACTER_REFERENCE( "ugrave;", "\U000000f9" ) \
+ NAMED_CHARACTER_REFERENCE( "uharl;", "\U000021bf" ) \
+ NAMED_CHARACTER_REFERENCE( "uharr;", "\U000021be" ) \
+ NAMED_CHARACTER_REFERENCE( "uhblk;", "\U00002580" ) \
+ NAMED_CHARACTER_REFERENCE( "ulcorn;", "\U0000231c" ) \
+ NAMED_CHARACTER_REFERENCE( "ulcorner;", "\U0000231c" ) \
+ NAMED_CHARACTER_REFERENCE( "ulcrop;", "\U0000230f" ) \
+ NAMED_CHARACTER_REFERENCE( "ultri;", "\U000025f8" ) \
+ NAMED_CHARACTER_REFERENCE( "umacr;", "\U0000016b" ) \
+ NAMED_CHARACTER_REFERENCE( "uml", "\U000000a8" ) \
+ NAMED_CHARACTER_REFERENCE( "uml;", "\U000000a8" ) \
+ NAMED_CHARACTER_REFERENCE( "uogon;", "\U00000173" ) \
+ NAMED_CHARACTER_REFERENCE( "uopf;", "\U0001d566" ) \
+ NAMED_CHARACTER_REFERENCE( "uparrow;", "\U00002191" ) \
+ NAMED_CHARACTER_REFERENCE( "updownarrow;", "\U00002195" ) \
+ NAMED_CHARACTER_REFERENCE( "upharpoonleft;", "\U000021bf" ) \
+ NAMED_CHARACTER_REFERENCE( "upharpoonright;", "\U000021be" ) \
+ NAMED_CHARACTER_REFERENCE( "uplus;", "\U0000228e" ) \
+ NAMED_CHARACTER_REFERENCE( "upsi;", "\U000003c5" ) \
+ NAMED_CHARACTER_REFERENCE( "upsih;", "\U000003d2" ) \
+ NAMED_CHARACTER_REFERENCE( "upsilon;", "\U000003c5" ) \
+ NAMED_CHARACTER_REFERENCE( "upuparrows;", "\U000021c8" ) \
+ NAMED_CHARACTER_REFERENCE( "urcorn;", "\U0000231d" ) \
+ NAMED_CHARACTER_REFERENCE( "urcorner;", "\U0000231d" ) \
+ NAMED_CHARACTER_REFERENCE( "urcrop;", "\U0000230e" ) \
+ NAMED_CHARACTER_REFERENCE( "uring;", "\U0000016f" ) \
+ NAMED_CHARACTER_REFERENCE( "urtri;", "\U000025f9" ) \
+ NAMED_CHARACTER_REFERENCE( "uscr;", "\U0001d4ca" ) \
+ NAMED_CHARACTER_REFERENCE( "utdot;", "\U000022f0" ) \
+ NAMED_CHARACTER_REFERENCE( "utilde;", "\U00000169" ) \
+ NAMED_CHARACTER_REFERENCE( "utri;", "\U000025b5" ) \
+ NAMED_CHARACTER_REFERENCE( "utrif;", "\U000025b4" ) \
+ NAMED_CHARACTER_REFERENCE( "uuarr;", "\U000021c8" ) \
+ NAMED_CHARACTER_REFERENCE( "uuml", "\U000000fc" ) \
+ NAMED_CHARACTER_REFERENCE( "uuml;", "\U000000fc" ) \
+ NAMED_CHARACTER_REFERENCE( "uwangle;", "\U000029a7" ) \
+ NAMED_CHARACTER_REFERENCE( "vArr;", "\U000021d5" ) \
+ NAMED_CHARACTER_REFERENCE( "vBar;", "\U00002ae8" ) \
+ NAMED_CHARACTER_REFERENCE( "vBarv;", "\U00002ae9" ) \
+ NAMED_CHARACTER_REFERENCE( "vDash;", "\U000022a8" ) \
+ NAMED_CHARACTER_REFERENCE( "vangrt;", "\U0000299c" ) \
+ NAMED_CHARACTER_REFERENCE( "varepsilon;", "\U000003f5" ) \
+ NAMED_CHARACTER_REFERENCE( "varkappa;", "\U000003f0" ) \
+ NAMED_CHARACTER_REFERENCE( "varnothing;", "\U00002205" ) \
+ NAMED_CHARACTER_REFERENCE( "varphi;", "\U000003d5" ) \
+ NAMED_CHARACTER_REFERENCE( "varpi;", "\U000003d6" ) \
+ NAMED_CHARACTER_REFERENCE( "varpropto;", "\U0000221d" ) \
+ NAMED_CHARACTER_REFERENCE( "varr;", "\U00002195" ) \
+ NAMED_CHARACTER_REFERENCE( "varrho;", "\U000003f1" ) \
+ NAMED_CHARACTER_REFERENCE( "varsigma;", "\U000003c2" ) \
+ NAMED_CHARACTER_REFERENCE( "varsubsetneq;", "\U0000228a\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "varsubsetneqq;", "\U00002acb\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "varsupsetneq;", "\U0000228b\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "varsupsetneqq;", "\U00002acc\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "vartheta;", "\U000003d1" ) \
+ NAMED_CHARACTER_REFERENCE( "vartriangleleft;", "\U000022b2" ) \
+ NAMED_CHARACTER_REFERENCE( "vartriangleright;", "\U000022b3" ) \
+ NAMED_CHARACTER_REFERENCE( "vcy;", "\U00000432" ) \
+ NAMED_CHARACTER_REFERENCE( "vdash;", "\U000022a2" ) \
+ NAMED_CHARACTER_REFERENCE( "vee;", "\U00002228" ) \
+ NAMED_CHARACTER_REFERENCE( "veebar;", "\U000022bb" ) \
+ NAMED_CHARACTER_REFERENCE( "veeeq;", "\U0000225a" ) \
+ NAMED_CHARACTER_REFERENCE( "vellip;", "\U000022ee" ) \
+ NAMED_CHARACTER_REFERENCE( "verbar;", "|" ) \
+ NAMED_CHARACTER_REFERENCE( "vert;", "|" ) \
+ NAMED_CHARACTER_REFERENCE( "vfr;", "\U0001d533" ) \
+ NAMED_CHARACTER_REFERENCE( "vltri;", "\U000022b2" ) \
+ NAMED_CHARACTER_REFERENCE( "vnsub;", "\U00002282\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "vnsup;", "\U00002283\U000020d2" ) \
+ NAMED_CHARACTER_REFERENCE( "vopf;", "\U0001d567" ) \
+ NAMED_CHARACTER_REFERENCE( "vprop;", "\U0000221d" ) \
+ NAMED_CHARACTER_REFERENCE( "vrtri;", "\U000022b3" ) \
+ NAMED_CHARACTER_REFERENCE( "vscr;", "\U0001d4cb" ) \
+ NAMED_CHARACTER_REFERENCE( "vsubnE;", "\U00002acb\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "vsubne;", "\U0000228a\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "vsupnE;", "\U00002acc\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "vsupne;", "\U0000228b\U0000fe00" ) \
+ NAMED_CHARACTER_REFERENCE( "vzigzag;", "\U0000299a" ) \
+ NAMED_CHARACTER_REFERENCE( "wcirc;", "\U00000175" ) \
+ NAMED_CHARACTER_REFERENCE( "wedbar;", "\U00002a5f" ) \
+ NAMED_CHARACTER_REFERENCE( "wedge;", "\U00002227" ) \
+ NAMED_CHARACTER_REFERENCE( "wedgeq;", "\U00002259" ) \
+ NAMED_CHARACTER_REFERENCE( "weierp;", "\U00002118" ) \
+ NAMED_CHARACTER_REFERENCE( "wfr;", "\U0001d534" ) \
+ NAMED_CHARACTER_REFERENCE( "wopf;", "\U0001d568" ) \
+ NAMED_CHARACTER_REFERENCE( "wp;", "\U00002118" ) \
+ NAMED_CHARACTER_REFERENCE( "wr;", "\U00002240" ) \
+ NAMED_CHARACTER_REFERENCE( "wreath;", "\U00002240" ) \
+ NAMED_CHARACTER_REFERENCE( "wscr;", "\U0001d4cc" ) \
+ NAMED_CHARACTER_REFERENCE( "xcap;", "\U000022c2" ) \
+ NAMED_CHARACTER_REFERENCE( "xcirc;", "\U000025ef" ) \
+ NAMED_CHARACTER_REFERENCE( "xcup;", "\U000022c3" ) \
+ NAMED_CHARACTER_REFERENCE( "xdtri;", "\U000025bd" ) \
+ NAMED_CHARACTER_REFERENCE( "xfr;", "\U0001d535" ) \
+ NAMED_CHARACTER_REFERENCE( "xhArr;", "\U000027fa" ) \
+ NAMED_CHARACTER_REFERENCE( "xharr;", "\U000027f7" ) \
+ NAMED_CHARACTER_REFERENCE( "xi;", "\U000003be" ) \
+ NAMED_CHARACTER_REFERENCE( "xlArr;", "\U000027f8" ) \
+ NAMED_CHARACTER_REFERENCE( "xlarr;", "\U000027f5" ) \
+ NAMED_CHARACTER_REFERENCE( "xmap;", "\U000027fc" ) \
+ NAMED_CHARACTER_REFERENCE( "xnis;", "\U000022fb" ) \
+ NAMED_CHARACTER_REFERENCE( "xodot;", "\U00002a00" ) \
+ NAMED_CHARACTER_REFERENCE( "xopf;", "\U0001d569" ) \
+ NAMED_CHARACTER_REFERENCE( "xoplus;", "\U00002a01" ) \
+ NAMED_CHARACTER_REFERENCE( "xotime;", "\U00002a02" ) \
+ NAMED_CHARACTER_REFERENCE( "xrArr;", "\U000027f9" ) \
+ NAMED_CHARACTER_REFERENCE( "xrarr;", "\U000027f6" ) \
+ NAMED_CHARACTER_REFERENCE( "xscr;", "\U0001d4cd" ) \
+ NAMED_CHARACTER_REFERENCE( "xsqcup;", "\U00002a06" ) \
+ NAMED_CHARACTER_REFERENCE( "xuplus;", "\U00002a04" ) \
+ NAMED_CHARACTER_REFERENCE( "xutri;", "\U000025b3" ) \
+ NAMED_CHARACTER_REFERENCE( "xvee;", "\U000022c1" ) \
+ NAMED_CHARACTER_REFERENCE( "xwedge;", "\U000022c0" ) \
+ NAMED_CHARACTER_REFERENCE( "yacute", "\U000000fd" ) \
+ NAMED_CHARACTER_REFERENCE( "yacute;", "\U000000fd" ) \
+ NAMED_CHARACTER_REFERENCE( "yacy;", "\U0000044f" ) \
+ NAMED_CHARACTER_REFERENCE( "ycirc;", "\U00000177" ) \
+ NAMED_CHARACTER_REFERENCE( "ycy;", "\U0000044b" ) \
+ NAMED_CHARACTER_REFERENCE( "yen", "\U000000a5" ) \
+ NAMED_CHARACTER_REFERENCE( "yen;", "\U000000a5" ) \
+ NAMED_CHARACTER_REFERENCE( "yfr;", "\U0001d536" ) \
+ NAMED_CHARACTER_REFERENCE( "yicy;", "\U00000457" ) \
+ NAMED_CHARACTER_REFERENCE( "yopf;", "\U0001d56a" ) \
+ NAMED_CHARACTER_REFERENCE( "yscr;", "\U0001d4ce" ) \
+ NAMED_CHARACTER_REFERENCE( "yucy;", "\U0000044e" ) \
+ NAMED_CHARACTER_REFERENCE( "yuml", "\U000000ff" ) \
+ NAMED_CHARACTER_REFERENCE( "yuml;", "\U000000ff" ) \
+ NAMED_CHARACTER_REFERENCE( "zacute;", "\U0000017a" ) \
+ NAMED_CHARACTER_REFERENCE( "zcaron;", "\U0000017e" ) \
+ NAMED_CHARACTER_REFERENCE( "zcy;", "\U00000437" ) \
+ NAMED_CHARACTER_REFERENCE( "zdot;", "\U0000017c" ) \
+ NAMED_CHARACTER_REFERENCE( "zeetrf;", "\U00002128" ) \
+ NAMED_CHARACTER_REFERENCE( "zeta;", "\U000003b6" ) \
+ NAMED_CHARACTER_REFERENCE( "zfr;", "\U0001d537" ) \
+ NAMED_CHARACTER_REFERENCE( "zhcy;", "\U00000436" ) \
+ NAMED_CHARACTER_REFERENCE( "zigrarr;", "\U000021dd" ) \
+ NAMED_CHARACTER_REFERENCE( "zopf;", "\U0001d56b" ) \
+ NAMED_CHARACTER_REFERENCE( "zscr;", "\U0001d4cf" ) \
+ NAMED_CHARACTER_REFERENCE( "zwj;", "\U0000200d" ) \
+ NAMED_CHARACTER_REFERENCE( "zwnj;", "\U0000200c" )
+
+static NSArray *_entities;
+static NSArray *_values;
+
+static NSString * NamedEntityNames[] = {
+#define NAMED_CHARACTER_REFERENCE( name, value ) @name,
+ NAMED_CHARACTER_REFERENCES
+#undef NAMED_CHARACTER_REFERENCE
+};
+
+static NSString * NamedEntityValues[] = {
+#define NAMED_CHARACTER_REFERENCE( name, value ) @value,
+ NAMED_CHARACTER_REFERENCES
+#undef NAMED_CHARACTER_REFERENCE
+};
+
+@implementation HTMLTokenizerEntities
+
++ (void)initialize
+{
+ if (self == [HTMLTokenizerEntities class]) {
+
+ NSUInteger count = sizeof(NamedEntityNames) / sizeof(NamedEntityNames[0]);
+
+ _entities = [[NSArray alloc] initWithObjects:NamedEntityNames count:count];
+ _values = [[NSArray alloc] initWithObjects:NamedEntityValues count:count];
+
+ }
+}
+
++ (NSArray *)entities
+{
+ return _entities;
+}
+
++ (NSString *)replacementAtIndex:(NSUInteger)index
+{
+ return [_values objectAtIndex:index];
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeVisitor.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeVisitor.m
new file mode 100644
index 0000000..2ad1074
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeVisitor.m
@@ -0,0 +1,63 @@
+//
+// HTMLTreeVisitor.m
+// HTMLKit
+//
+// Created by Iska on 30.07.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import "HTMLTreeVisitor.h"
+#import "HTMLNode.h"
+#import "HTMLTreeWalker.h"
+
+@interface HTMLTreeVisitor()
+{
+ HTMLNode *_root;
+ HTMLTreeWalker *_treeWalker;
+}
+@end
+
+@implementation HTMLTreeVisitor
+
+- (instancetype)initWithNode:(HTMLNode *)node
+{
+ self = [super init];
+ if (self) {
+ _root = node;
+ _treeWalker = [[HTMLTreeWalker alloc] initWithNode:node];
+ }
+ return self;
+}
+
+- (void)walkWithNodeVisitor:(id)visitor
+{
+ HTMLNode *currentNode = _treeWalker.currentNode;
+ while (currentNode) {
+ [visitor enter:currentNode];
+ if (currentNode.hasChildNodes) {
+ currentNode = [_treeWalker firstChild];
+ continue;
+ }
+
+ HTMLNode *next = [_treeWalker nextSibling];
+ if (next) {
+ [visitor leave:currentNode];
+ currentNode = next;
+ continue;
+ }
+
+ while (!next && _treeWalker.currentNode != _root) {
+ [visitor leave:_treeWalker.currentNode];
+ currentNode = [_treeWalker parentNode];
+ next = [_treeWalker nextSibling];
+ }
+ [visitor leave:currentNode];
+ currentNode = _treeWalker.currentNode;
+
+ if (currentNode == _root) {
+ break;
+ }
+ }
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeWalker.m b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeWalker.m
new file mode 100644
index 0000000..0e21ed0
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/HTMLTreeWalker.m
@@ -0,0 +1,236 @@
+//
+// HTMLTreeWalker.m
+// HTMLKit
+//
+// Created by Iska on 05/06/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLTreeWalker.h"
+#import "HTMLNode.h"
+#import "HTMLNodeFilter.h"
+#import "HTMLNodeTraversal.h"
+
+typedef NS_ENUM(short, HTMLTreeWalkerChildrenType)
+{
+ HTMLTreeWalkerChildrenTypeFirst,
+ HTMLTreeWalkerChildrenTypeLast
+};
+
+typedef NS_ENUM(short, HTMLTreeWalkerSiblingsType)
+{
+ HTMLTreeWalkerSiblingsTypeNext,
+ HTMLTreeWalkerSiblingsTypePrevious
+};
+
+@implementation HTMLTreeWalker
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithNode:(HTMLNode *)node
+{
+ return [self initWithNode:node filter:nil];
+}
+
+- (instancetype)initWithNode:(HTMLNode *)node
+ filter:(id)filter
+{
+ return [self initWithNode:node showOptions:HTMLNodeFilterShowAll filter:filter];
+}
+
+- (instancetype)initWithNode:(HTMLNode *)node
+ showOptions:(HTMLNodeFilterShowOptions)showOptions
+ filter:(id)filter
+{
+ self = [super init];
+ if (self) {
+ _root = node;
+ _filter = filter;
+ _whatToShow = showOptions;
+ _currentNode = _root;
+ }
+ return self;
+}
+
+#pragma mark - Traversal
+
+- (HTMLNode *)parentNode
+{
+ HTMLNode *node = _currentNode;
+
+ while (node != nil && node != _root) {
+ node = node.parentNode;
+ if (node != nil && FilterNode(self.filter, self.whatToShow, node) == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+ }
+ return nil;
+}
+
+- (HTMLNode *)traverseChildrenOfType:(HTMLTreeWalkerChildrenType)type
+{
+ HTMLNode *node = _currentNode;
+
+ node = (type == HTMLTreeWalkerChildrenTypeFirst) ? node.firstChild : node.lastChild;
+
+ while (node != nil) {
+ HTMLNodeFilterValue result = FilterNode(self.filter, self.whatToShow, node);
+ if (result == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+
+ if (result == HTMLNodeFilterSkip) {
+ HTMLNode *child = (type == HTMLTreeWalkerChildrenTypeFirst) ? node.firstChild : node.lastChild;
+ if (child != nil) {
+ node = child;
+ continue;
+ }
+ }
+
+ while (node != nil) {
+ HTMLNode *sibling = (type == HTMLTreeWalkerChildrenTypeFirst) ? node.nextSibling : node.previousSibling;
+ if (sibling != nil) {
+ node = sibling;
+ break;
+ }
+
+ HTMLNode *parent = node.parentNode;
+ if (parent == nil || parent == _root || parent == _currentNode) {
+ return nil;
+ }
+ node = parent;
+ }
+ }
+
+ return nil;
+}
+
+- (HTMLNode *)firstChild
+{
+ return [self traverseChildrenOfType:HTMLTreeWalkerChildrenTypeFirst];
+}
+
+- (HTMLNode *)lastChild
+{
+ return [self traverseChildrenOfType:HTMLTreeWalkerChildrenTypeLast];
+}
+
+- (HTMLNode *)traverseSiblingsOfType:(HTMLTreeWalkerSiblingsType)type
+{
+ HTMLNode *node = _currentNode;
+
+ if (node == _root) {
+ return nil;
+ }
+
+ while (YES) {
+ HTMLNode *sibling = (type == HTMLTreeWalkerSiblingsTypeNext) ? node.nextSibling : node.previousSibling;
+ while (sibling != nil) {
+ node = sibling;
+ HTMLNodeFilterValue result = FilterNode(self.filter, self.whatToShow, node);
+ if (result == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+
+ sibling = (type == HTMLTreeWalkerSiblingsTypeNext) ? node.firstChild : node.lastChild;
+ if (result == HTMLNodeFilterReject || sibling == nil) {
+ sibling = (type == HTMLTreeWalkerSiblingsTypeNext) ? node.nextSibling : node.previousSibling;
+ }
+ }
+
+ node = node.parentNode;
+ if (node == nil || node == _root) {
+ return nil;
+ }
+
+ if (FilterNode(self.filter, self.whatToShow, node) == HTMLNodeFilterAccept) {
+ return nil;
+ }
+ }
+
+ return nil;
+}
+
+- (HTMLNode *)previousSibling
+{
+ return [self traverseSiblingsOfType:HTMLTreeWalkerSiblingsTypePrevious];
+}
+
+- (HTMLNode *)nextSibling
+{
+ return [self traverseSiblingsOfType:HTMLTreeWalkerSiblingsTypeNext];
+}
+
+- (HTMLNode *)previousNode
+{
+ HTMLNode *node = _currentNode;
+
+ while (node != _root) {
+ HTMLNode *sibling = node.previousSibling;
+
+ while (sibling != nil) {
+ node = sibling;
+
+ HTMLNodeFilterValue result = FilterNode(self.filter, self.whatToShow, node);
+ while (result != HTMLNodeFilterReject && node.hasChildNodes) {
+ node = node.lastChild;
+ result = FilterNode(self.filter, self.whatToShow, node);
+ }
+
+ if (result == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+
+ sibling = node.previousSibling;
+ }
+
+ if (node == _root || node.parentNode == nil) {
+ return nil;
+ }
+
+ node = node.parentNode;
+ if (FilterNode(self.filter, self.whatToShow, node) == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+ }
+
+ return nil;
+}
+
+- (HTMLNode *)nextNode
+{
+ HTMLNode *node = _currentNode;
+
+ HTMLNodeFilterValue result = YES;
+
+ while (YES) {
+ while (result != HTMLNodeFilterReject && node.hasChildNodes) {
+ node = node.firstChild;
+ result = FilterNode(self.filter, self.whatToShow, node);
+ if (result == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+ }
+
+ HTMLNode *nextSibling;
+ while ((nextSibling = FollowingNodeSkippingChildren(node, _root)) != nil) {
+ node = nextSibling;
+ result = FilterNode(self.filter, self.whatToShow, node);
+ if (result == HTMLNodeFilterAccept) {
+ _currentNode = node;
+ return node;
+ }
+ break;
+ }
+ }
+
+ return nil;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/NSCharacterSet+HTMLKit.m b/ios/circolapp/Pods/HTMLKit/Sources/NSCharacterSet+HTMLKit.m
new file mode 100644
index 0000000..6012180
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/NSCharacterSet+HTMLKit.m
@@ -0,0 +1,43 @@
+//
+// NSCharacterSet+HTMLKit.m
+// HTMLKit
+//
+// Created by Iska on 14/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "NSCharacterSet+HTMLKit.h"
+
+@implementation NSCharacterSet (HTMLKit)
+
++ (instancetype)htmlkit_HTMLWhitespaceCharacterSet
+{
+ static NSCharacterSet *set = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ set = [NSCharacterSet characterSetWithCharactersInString:@" \t\n\r\f"];
+ });
+ return set;
+}
+
++ (instancetype)htmlkit_HTMLHexNumberCharacterSet
+{
+ static NSCharacterSet *set = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789ABCDEFabcdef"];
+ });
+ return set;
+}
+
++ (instancetype)htmlkit_CSSNthExpressionCharacterSet
+{
+ static NSCharacterSet *set = nil;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ set = [NSCharacterSet characterSetWithCharactersInString:@" 0123456789nN-+"];
+ });
+ return set;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/NSString+HTMLKit.m b/ios/circolapp/Pods/HTMLKit/Sources/NSString+HTMLKit.m
new file mode 100644
index 0000000..33663ca
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/NSString+HTMLKit.m
@@ -0,0 +1,36 @@
+//
+// NSString+HTMLKit.m
+// HTMLKit
+//
+// Created by Iska on 02/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "NSString+HTMLKit.h"
+
+NS_INLINE BOOL isHtmlWhitespaceChar(unichar c)
+{
+ return c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r';
+}
+
+@implementation NSString (HTMLKit)
+
+- (BOOL)htmlkit_isHTMLWhitespaceString
+{
+ return self.htmlkit_leadingHTMLWhitespaceLength == self.length;
+}
+
+- (NSUInteger)htmlkit_leadingHTMLWhitespaceLength
+{
+ size_t idx = 0;
+ NSUInteger length = self.length;
+ while (idx < length) {
+ if (!isHtmlWhitespaceChar([self characterAtIndex:idx])) {
+ return idx;
+ }
+ idx++;
+ }
+ return idx;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/NSString+Private.m b/ios/circolapp/Pods/HTMLKit/Sources/NSString+Private.m
new file mode 100644
index 0000000..6ab7dc8
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/NSString+Private.m
@@ -0,0 +1,38 @@
+//
+// NSString+Private.m
+// HTMLKit
+//
+// Created by Iska on 26.03.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import "NSString+Private.h"
+
+@implementation NSString (Private)
+
+- (BOOL)isEqualToStringIgnoringCase:(NSString *)aString
+{
+ return [self caseInsensitiveCompare:aString] == NSOrderedSame;
+}
+
+- (BOOL)isEqualToAny:(NSString *)first, ... NS_REQUIRES_NIL_TERMINATION
+{
+ va_list list;
+ va_start(list, first);
+ for (NSString *next = first; next != nil; next = va_arg(list, NSString *)) {
+ if ([self isEqualToString:next]) {
+ return YES;
+ }
+ }
+ va_end(list);
+ return NO;
+}
+
+- (BOOL)hasPrefixIgnoringCase:(NSString *)aString
+{
+ NSRange reange = [self rangeOfString:aString
+ options:NSAnchoredSearch|NSCaseInsensitiveSearch];
+ return reange.location != NSNotFound;
+}
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSAttributeSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSAttributeSelector.h
new file mode 100644
index 0000000..7304a52
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSAttributeSelector.h
@@ -0,0 +1,72 @@
+//
+// CSSAttributeSelector.h
+// HTMLKit
+//
+// Created by Iska on 14/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ CSS Attribute Selector.
+ */
+@interface CSSAttributeSelector : CSSSelector
+
+/**
+ The selector type.
+ */
+@property (nonatomic, assign, readonly) CSSAttributeSelectorType type;
+
+/**
+ The attribute name which should be matched.
+ */
+@property (nonatomic, strong, readonly) NSString *name;
+
+/**
+ The attribute value against which should be checked.
+ */
+@property (nonatomic, strong, readonly) NSString *value;
+
+/**
+ Intializes and returns a CSS class selector.
+
+ @param className The class name to match.
+ @return A new instance of class selector.
+ */
++ (instancetype)classSelector:(NSString *)className;
+
+/**
+ Intializes and returns a CSS id selector.
+
+ @param elementId The element id to match.
+ @return A new instance of id selector.
+ */
++ (instancetype)idSelector:(NSString *)elementId;
+
+/**
+ Intializes and returns a CSS has-attribute selector.
+
+ @param attributeName The attribute name to match.
+ @return A new instance of has-attribute selector.
+ */
++ (instancetype)hasAttributeSelector:(NSString *)attributeName;
+
+/**
+ Intializes and returns a CSS attribute selector.
+
+ @param type The selector type.
+ @param name The attribute name to match.
+ @param value The value to match.
+ @return A new instance of attribute selector.
+ */
+- (instancetype)initWithType:(CSSAttributeSelectorType)type
+ attributeName:(NSString *)name
+ attrbiuteValue:(NSString *)value;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCodePoints.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCodePoints.h
new file mode 100644
index 0000000..a76dcda
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCodePoints.h
@@ -0,0 +1,144 @@
+//
+// CSSTokenizer CODEPOINTs.h
+// HTMLKit
+//
+// Created by Iska on 08/06/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+//------------------------------------------------------
+
+#define CODEPOINTS \
+ CODEPOINT( CONTROL, 0x0080 ) \
+ CODEPOINT( CHARACTER_TABULATION, 0x0009 ) \
+ CODEPOINT( LINE_FEED, 0x000A ) \
+ CODEPOINT( SPACE, 0x0020 ) \
+ CODEPOINT( QUOTATION_MARK, 0x0022 ) \
+ CODEPOINT( NUMBER_SIGN, 0x0023 ) \
+ CODEPOINT( DOLLAR_SIGN, 0x0024 ) \
+ CODEPOINT( APOSTROPHE, 0x0027 ) \
+ CODEPOINT( LEFT_PARENTHESIS, 0x0028 ) \
+ CODEPOINT( RIGHT_PARENTHESIS, 0x0029 ) \
+ CODEPOINT( ASTERIX, 0x002A ) \
+ CODEPOINT( PLUS_SIGN, 0x002B ) \
+ CODEPOINT( COMMA, 0x002C ) \
+ CODEPOINT( HYPHEN_MINUS, 0x002D ) \
+ CODEPOINT( FULL_STOP, 0x002E ) \
+ CODEPOINT( DIGIT_ZERO, 0x0030 ) \
+ CODEPOINT( DIGIT_NINE, 0x0039 ) \
+ CODEPOINT( COLON, 0x003A ) \
+ CODEPOINT( EQUALS_SIGN, 0x003D ) \
+ CODEPOINT( GREATER_THAN_SIGN, 0x003E ) \
+ CODEPOINT( LATIN_CAPITAL_LETTER_A, 0x0041 ) \
+ CODEPOINT( LATIN_CAPITAL_LETTER_F, 0x0046 ) \
+ CODEPOINT( LATIN_CAPITAL_LETTER_Z, 0x005A ) \
+ CODEPOINT( LEFT_SQUARE_BRACKET, 0x005B ) \
+ CODEPOINT( REVERSE_SOLIDUS, 0x005C ) \
+ CODEPOINT( RIGHT_SQUARE_BRACKET, 0x005D ) \
+ CODEPOINT( CIRCUMFLEX_ACCENT, 0x005E ) \
+ CODEPOINT( LOW_LINE, 0x005F ) \
+ CODEPOINT( LATIN_SMALL_LETTER_A, 0x0061 ) \
+ CODEPOINT( LATIN_SMALL_LETTER_F, 0x0066 ) \
+ CODEPOINT( LATIN_SMALL_LETTER_Z, 0x007A ) \
+ CODEPOINT( VERTICAL_LINE, 0x007C ) \
+ CODEPOINT( TILDE, 0x007E ) \
+ CODEPOINT( REPLACEMENT_CHARACTER, 0xFFFD )
+
+#define CODEPOINT( name, value ) static UniChar const name = value;
+CODEPOINTS
+#undef CODEPOINT
+
+NS_INLINE BOOL isWhitespace(UTF32Char codePoint)
+{
+ return (codePoint == CHARACTER_TABULATION ||
+ codePoint == LINE_FEED ||
+ codePoint == SPACE);
+}
+
+NS_INLINE BOOL isCombinator(UTF32Char codePoint)
+{
+ return (codePoint == SPACE ||
+ codePoint == PLUS_SIGN ||
+ codePoint == COMMA ||
+ codePoint == GREATER_THAN_SIGN ||
+ codePoint == TILDE);
+}
+
+NS_INLINE BOOL isDigit(UTF32Char codePoint)
+{
+ return codePoint >= DIGIT_ZERO && codePoint <= DIGIT_NINE;
+}
+
+NS_INLINE BOOL isHexDigit(UTF32Char codePoint)
+{
+ return ((codePoint >= DIGIT_ZERO && codePoint <= DIGIT_NINE) ||
+ (codePoint >= LATIN_CAPITAL_LETTER_A && codePoint <= LATIN_CAPITAL_LETTER_F) ||
+ (codePoint >= LATIN_SMALL_LETTER_A && codePoint <= LATIN_SMALL_LETTER_F));
+}
+
+NS_INLINE BOOL isQuote(UTF32Char codePoint)
+{
+ return codePoint == QUOTATION_MARK || codePoint == APOSTROPHE;
+}
+
+NS_INLINE BOOL isNewLine(UTF32Char codePoint)
+{
+ return codePoint == LINE_FEED;
+}
+
+NS_INLINE BOOL isNameStart(UTF32Char codePoint)
+{
+ return ((codePoint >= LATIN_CAPITAL_LETTER_A && codePoint <= LATIN_CAPITAL_LETTER_Z) ||
+ (codePoint >= LATIN_SMALL_LETTER_A && codePoint <= LATIN_SMALL_LETTER_Z) ||
+ codePoint >= CONTROL ||
+ codePoint == LOW_LINE);
+}
+
+NS_INLINE BOOL isName(UTF32Char codePoint)
+{
+ return isNameStart(codePoint) || isDigit(codePoint) || codePoint == HYPHEN_MINUS;
+}
+
+NS_INLINE BOOL isValidEscape(UTF32Char first, UTF32Char second)
+{
+ if (first != REVERSE_SOLIDUS || isNewLine(second)) {
+ return false;
+ }
+
+ return YES;
+}
+
+NS_INLINE BOOL isValidEscapedCodePoint(UTF32Char codePoint)
+{
+ return (codePoint != 0 &&
+ !(codePoint >= 0xD800 && codePoint <= 0x0DFFF) &&
+ codePoint <= 0x10FFFF);
+}
+
+NS_INLINE BOOL isValidIdentifierStart(UTF32Char first, UTF32Char second, UTF32Char third)
+{
+ if (first == HYPHEN_MINUS) {
+ if (isNameStart(second) ||
+ second == HYPHEN_MINUS ||
+ isValidEscape(second, third)) {
+ return YES;
+ } else {
+ return NO;
+ }
+ } else if (isNameStart(first)) {
+ return YES;
+ } else if (first == REVERSE_SOLIDUS) {
+ return isValidEscape(first, second);
+ } else {
+ return NO;
+ }
+}
+
+NS_INLINE void AppendCodePoint(CFMutableStringRef string, UTF32Char codePoint)
+{
+ UniChar pair[2];
+ Boolean isPair = CFStringGetSurrogatePairForLongCharacter(codePoint, pair);
+ CFStringAppendCharacters(string, pair, isPair ? 2 : 1);
+}
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCombinatorSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCombinatorSelector.h
new file mode 100644
index 0000000..158bc63
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCombinatorSelector.h
@@ -0,0 +1,52 @@
+//
+// CSSCombinatorSelector.h
+// HTMLKit
+//
+// Created by Iska on 12/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ CSS Combinator Selector.
+ */
+@interface CSSCombinatorSelector : CSSSelector
+
+/**
+ Initializes and returns a CSS child-of-element selector, e.g. 'div > p'
+
+ @param selector The selector matching the parent element.
+ @return A new instance of the child of element selector.
+ */
++ (instancetype)childOfElementCombinator:(CSSSelector *)selector;
+
+/**
+ Initializes and returns a CSS descendant-of-element selector, e.g. 'div p'
+
+ @param selector The selector matching the ancestor element.
+ @return A new instance of the descendant of element selector.
+ */
++ (instancetype)descendantOfElementCombinator:(CSSSelector *)selector;
+
+/**
+ Initializes and returns a CSS adjacent sibling selector, e.g. 'p + a'
+
+ @param selector The selector matching the adjacent sibling element.
+ @return A new instance of the adjacent sibling selector.
+ */
++ (instancetype)adjacentSiblingCombinator:(CSSSelector *)selector;
+
+/**
+ Initializes and returns a CSS general sibling selector, e.g. 'p ~ a'
+
+ @param selector The selector matching the general sibling element.
+ @return A new instance of the general sibling selector.
+ */
++ (instancetype)generalSiblingCombinator:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCompoundSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCompoundSelector.h
new file mode 100644
index 0000000..501811d
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSCompoundSelector.h
@@ -0,0 +1,43 @@
+//
+// CSSCompoundSelector.h
+// HTMLKit
+//
+// Created by Iska on 18/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A Compound Selector, groups other selectors with a 'all-of' or 'any-of' relationship.
+ */
+@interface CSSCompoundSelector : CSSSelector
+
+/**
+ Initializes and returns a new compound selector matching only elements that match all of the specified selectors.
+
+ @param selectors The selectors list.
+ @return A new instance of the All-Of selector.
+ */
++ (instancetype)andSelector:(NSArray *)selectors;
+
+/**
+ Initializes and returns a new compound selector matching all elements that match at least one of the specified selectors.
+
+ @param selectors The selectors list.
+ @return A new instance of the Any-Of selector.
+ */
++ (instancetype)orSelector:(NSArray *)selectors;
+
+/**
+ Add the specified selector to the compound.
+
+ @param selector The selector to add.
+ */
+- (void)addSelector:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSInputStream.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSInputStream.h
new file mode 100644
index 0000000..7b423e7
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSInputStream.h
@@ -0,0 +1,62 @@
+//
+// CSSInputStream.h
+// HTMLKit
+//
+// Created by Iska on 07/06/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLInputStreamReader.h"
+
+/**
+ The CSS Inpute Stream.
+
+ Extends the HTML Input Stream with methods relevant to CSS selectors tokenizing/parsing.
+ */
+@interface CSSInputStream : HTMLInputStreamReader
+
+/**
+ Consumes leading whitespace characters.
+ */
+- (void)consumeWhitespace;
+
+/**
+ Consumes a CSS identifier.
+ http://www.w3.org/TR/css-syntax-3/#consume-an-ident-like-token
+ http://www.w3.org/TR/css-syntax-3/#consume-a-string-token
+ http://www.w3.org/TR/css-syntax-3/#would-start-an-identifier
+
+ @return A consumed identifier, `nil` if the stream doesn't start with a valid identifier.
+ */
+- (NSString *)consumeIdentifier;
+
+/**
+ Consumes characters until the specified code-point is met.
+
+ @param endingCodePoint The code-point at which the input stream stops consuming.
+ @return The consumed string, `nil` nothing was consumed.
+ */
+- (NSString *)consumeStringWithEndingCodePoint:(UTF32Char)endingCodePoint;
+
+/**
+ Consumes an escaped code point.
+ http://www.w3.org/TR/css-syntax-3/#consume-an-escaped-code-point
+ http://www.w3.org/TR/css-syntax-3/#starts-with-a-valid-escape
+
+ @return The value of the escaped code-point.
+ */
+- (UTF32Char)consumeEscapedCodePoint;
+
+/**
+ Consumes a CSS selector combinator.
+
+ @return The consumed combinator, `nil` if nothing was consumed.
+ */
+- (NSString *)consumeCombinator;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionParser.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionParser.h
new file mode 100644
index 0000000..e99de22
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionParser.h
@@ -0,0 +1,31 @@
+//
+// CSSNthExpression.h
+// HTMLKit
+//
+// Created by Iska on 10/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "CSSSelectors.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The Nth-Expression Parser.
+
+ Parses CSS nth-expressions, e.g. '-2n+3', 'odd', ...etc.
+ */
+@interface CSSNthExpressionParser : NSObject
+
+/**
+ Parses a CSS nth-exrepssion string.
+
+ @param expression The expression string to parse.
+ @see CSSNthExpression
+ */
++ (CSSNthExpression)parseExpression:(NSString *)expression;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionSelector.h
new file mode 100644
index 0000000..6ad7538
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSNthExpressionSelector.h
@@ -0,0 +1,72 @@
+//
+// CSSNthExpressionSelector.h
+// HTMLKit
+//
+// Created by Iska on 10/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ CSS Nth-Expression Selector.
+ */
+@interface CSSNthExpressionSelector : CSSSelector
+
+/**
+ The pseudo-class name.
+ */
+@property (nonatomic, strong, readonly) NSString *className;
+
+/**
+ The nth-expression.
+
+ @see CSSNthExpression
+ */
+@property (nonatomic, assign, readonly) CSSNthExpression expression;
+
+/**
+ Initializes a new CSS nth-child selector, e.g. ':nth-child(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Child selector for the specified expression.
+
+ @see CSSNthExpression
+ */
++ (instancetype)nthChildSelector:(CSSNthExpression)expression;
+
+/**
+ Initializes a new CSS nth-last-child selector, e.g. ':nth-last-child(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Last-Child selector for the specified expression.
+
+ @see CSSNthExpression
+ */
++ (instancetype)nthLastChildSelector:(CSSNthExpression)expression;
+
+/**
+ Initializes a new CSS nth-of-type selector, e.g. ':nth-of-type(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Of-Type selector for the specified expression.
+
+ @see CSSNthExpression
+ */
++ (instancetype)nthOfTypeSelector:(CSSNthExpression)expression;
+
+/**
+ Initializes a new CSS nth-last-of-type selector, e.g. ':nth-last-of-type(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Last-Of-Type selector for the specified expression.
+
+ @see CSSNthExpression
+ */
++ (instancetype)nthLastOfTypeSelector:(CSSNthExpression)expression;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoClassSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoClassSelector.h
new file mode 100644
index 0000000..a65a3ae
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoClassSelector.h
@@ -0,0 +1,34 @@
+//
+// CSSPseudoClassSelector.h
+// HTMLKit
+//
+// Created by Iska on 06/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ Base class for CSS Pseudo Class Selectors. This is just a simple named wrapper around another selector.
+ */
+@interface CSSPseudoClassSelector : CSSSelector
+
+/**
+ The pseudo-class name.
+ */
+@property (nonatomic, strong, readonly) NSString *className;
+
+/**
+ Initializes and return a new pseudo-class selector.
+
+ @param className The pseudo class name.
+ @param selector The underlying selector.
+ @return A new instance of a pseudo-class selector.
+ */
+- (instancetype)initWithClassName:(NSString *)className selector:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoFunctionSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoFunctionSelector.h
new file mode 100644
index 0000000..9bd36d2
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSPseudoFunctionSelector.h
@@ -0,0 +1,38 @@
+//
+// CSSPseudoFunctionSelector.h
+// HTMLKit
+//
+// Created by Iska on 07/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ CSS Pseudo-Function Selector
+ */
+@interface CSSPseudoFunctionSelector : CSSSelector
+
+/**
+ Initializes and returns a CSS nagation selector, e.g. ':not(div)'
+
+ @param selector The selector which should be negated.
+ @return A new instance of the negation selector.
+ */
++ (instancetype)notSelector:(CSSSelector *)selector;
+
+/**
+ Initializes and returns a CSS has-descendant selector, e.g. 'div:has(p)'
+
+ @discussion 'div:has(p)' matches all <div> elements which have a descendant <p> element.
+
+ @param selector The selector matching a descendant element.
+ @return A new instance of the has-descendant selector.
+ */
++ (instancetype)hasSelector:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelector.h
new file mode 100644
index 0000000..474b8a3
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelector.h
@@ -0,0 +1,90 @@
+//
+// HTMLSelector.h
+// HTMLKit
+//
+// Created by Iska on 02/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Attribute Selector Type
+
+/**
+ Attribute selector type.
+ */
+typedef NS_ENUM(NSUInteger, CSSAttributeSelectorType)
+{
+ /** Attribute exists: '[src]' */
+ CSSAttributeSelectorExists,
+
+ /** Attribute has exact value: '[title="HTMLKit"]' */
+ CSSAttributeSelectorExactMatch,
+
+ /** Attribute includes value: '[title~="foo"]' */
+ CSSAttributeSelectorIncludes,
+
+ /** Attribute's value begins with: '[title^="HTML"]' */
+ CSSAttributeSelectorBegins,
+
+ /** Attribute's value ends with: '[title$="Kit"]' */
+ CSSAttributeSelectorEnds,
+
+ /** Attribute's value ends with: '[title*="ML"]' */
+ CSSAttributeSelectorContains,
+
+ /** Attribute's value ends with: '[title|="en"]' */
+ CSSAttributeSelectorHyphen,
+
+ /** Attribute's value does not equal: '[title!="foo"]' */
+ CSSAttributeSelectorNot
+};
+
+#pragma mark - CSS Nth-Expression
+
+/**
+ CSS Nth-Expression
+ */
+typedef struct CSSNthExpression
+{
+ NSInteger an;
+ NSInteger b;
+} CSSNthExpression;
+
+NS_INLINE CSSNthExpression CSSNthExpressionMake(NSInteger an, NSInteger b) {
+ return (CSSNthExpression){ .an = an, .b = b };
+}
+
+extern const CSSNthExpression CSSNthExpressionOdd;
+extern const CSSNthExpression CSSNthExpressionEven;
+extern NSString * _Nonnull NSStringFromNthExpression(CSSNthExpression expression);
+
+#pragma mark - Base Selector Class
+
+@class HTMLElement;
+
+/**
+ Base class for all CSS Selector implementations
+ */
+@interface CSSSelector : NSObject
+
+/**
+ Initializes and returns a new instance of CSS Selector.
+
+ @param string The selector string which will be parsed.
+ @return A new instance of a parsed CSS Selector, `nil` if the string is not a valid selector string.
+ */
++ (nullable instancetype)selectorWithString:(NSString *)string;
+
+/**
+ Implementations should override this method to provide the selector-sprecific logic for matching elements.
+
+ @abstract Use one of the concrete subclasses.
+ */
+- (BOOL)acceptElement:(HTMLElement *)element;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorBlock.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorBlock.h
new file mode 100644
index 0000000..6a36f1f
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorBlock.h
@@ -0,0 +1,31 @@
+//
+// CSSSelectorBlock.h
+// HTMLKit
+//
+// Created by Iska on 20/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLElement;
+
+/**
+ A block-based CSS Selector implementation
+ */
+@interface CSSSelectorBlock : CSSSelector
+
+/**
+ Initializes and returns a new block-based selector.
+
+ @param name The name of the selector.
+ @param block The block that should match desired elements.
+ @return A new instance of the block-based selector.
+ */
+- (instancetype)initWithName:(NSString *)name block:(BOOL (^)(HTMLElement *))block;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorParser.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorParser.h
new file mode 100644
index 0000000..efe8633
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectorParser.h
@@ -0,0 +1,36 @@
+//
+// CSSSelectorParser.h
+// HTMLKit
+//
+// Created by Iska on 02/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class CSSSelector;
+
+/**
+ The CSS Selectors Parser.
+
+ Parses CSS Level 3 Selectors:
+ http://www.w3.org/TR/css3-selectors/
+ */
+@interface CSSSelectorParser : NSObject
+
+/**
+ Parses a CSS3 selector string.
+
+ @param string The CSS3 selector string.
+ @param error If an error occurs, upon return contains an `NSError` object that describes the problem.
+ @return A parsed CSSSelector, `nil` if an error occurred.
+
+ @see CSSelector
+ */
++ (nullable CSSSelector *)parseSelector:(NSString *)string error:(NSError **)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectors.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectors.h
new file mode 100644
index 0000000..c6e8a1f
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSSelectors.h
@@ -0,0 +1,277 @@
+//
+// CSSSelectors.h
+// HTMLKit
+//
+// Created by Iska on 14/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "CSSSelector.h"
+#import "CSSTypeSelector.h"
+#import "CSSAttributeSelector.h"
+#import "CSSPseudoClassSelector.h"
+#import "CSSPseudoFunctionSelector.h"
+#import "CSSNthExpressionSelector.h"
+#import "CSSCombinatorSelector.h"
+#import "CSSCompoundSelector.h"
+#import "CSSSelectorBlock.h"
+#import "CSSStructuralPseudoSelectors.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - Type Selectors
+
+/**
+ Universal CSS selector: '*'
+
+ @return The universal CSS selector.
+ */
+extern CSSSelector * universalSelector(void);
+
+/**
+ CSS type selector, e.g. 'div', 'p', ...etc.
+
+ @param type The element type.
+ @return Type selector for the specified type.
+ */
+extern CSSSelector * typeSelector(NSString *type);
+
+#pragma mark - Atribute Selectors
+
+/**
+ CSS id selector, e.g. '#someId'
+
+ @param elementId The element id.
+ @return Id selector for the specified element id.
+ */
+extern CSSSelector * idSelector(NSString *elementId);
+
+/**
+ CSS class selector, e.g. '.someClass'
+
+ @param className The class name.
+ @return Class selector for the specified class name.
+ */
+extern CSSSelector * classSelector(NSString *className);
+
+/**
+ CSS has-attribute selector, e.g. '[href]'
+
+ @param attribute The attribute.
+ @return Has-Attribute selector for the specified attribute.
+ */
+extern CSSSelector * hasAttributeSelector(NSString *attribute);
+
+/**
+ CSS attribute selector, e.g. '[src*="html"]', '[class^="top"]', '[title&="HTML"]', ...etc.
+
+ @param type The attribute selector type.
+ @param attribute The attribute.
+ @param value The value of the attribute.
+ @return Attribute selector.
+
+ @see CSSAttributeSelectorType
+ */
+extern CSSSelector * attributeSelector(CSSAttributeSelectorType type,
+ NSString *attribute,
+ NSString *value);
+
+#pragma mark - Nth-Expression Selectors
+
+/**
+ CSS nth-child selector, e.g. ':nth-child(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Child selector for the specified expression.
+
+ @see CSSNthExpression
+ */
+extern CSSSelector * nthChildSelector(CSSNthExpression expression);
+
+/**
+ CSS nth-last-child selector, e.g. ':nth-last-child(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Last-Child selector for the specified expression.
+
+ @see CSSNthExpression
+ */
+extern CSSSelector * nthLastChildSelector(CSSNthExpression expression);
+
+/**
+ CSS nth-of-type selector, e.g. ':nth-of-type(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Of-Type selector for the specified expression.
+
+ @see CSSNthExpression
+ */
+extern CSSSelector * nthOfTypeSelector(CSSNthExpression expression);
+
+/**
+ CSS nth-last-of-type selector, e.g. ':nth-last-of-type(2n+3)'
+
+ @param expression The nth-expression.
+ @return Nth-Last-Of-Type selector for the specified expression.
+
+ @see CSSNthExpression
+ */
+extern CSSSelector * nthLastOfTypeSelector(CSSNthExpression expression);
+
+/**
+ CSS odd-child selector: ':nth-child(odd)'
+
+ This is analogous to ':nth-child(2n+1)'
+
+ @return Odd-Child selector.
+ */
+extern CSSSelector * oddSelector(void);
+
+/**
+ CSS even-child selector: ':nth-child(even)'
+
+ This is analogous to ':nth-child(2n)'
+
+ @return Even-Child selector.
+ */
+extern CSSSelector * evenSlector(void);
+
+/**
+ CSS first-child selector: ':nth-child(1)'
+
+ @return First-Child selector.
+ */
+extern CSSSelector * firstChildSelector(void);
+
+/**
+ CSS first-child selector: ':nth-last-child(1)'
+
+ @return First-Child selector.
+ */
+extern CSSSelector * lastChildSelector(void);
+
+/**
+ CSS first-of-type selector: ':nth-first-of-type(1)'
+
+ @return First-Of-Type selector.
+ */
+extern CSSSelector * firstOfTypeSelector(void);
+
+/**
+ CSS last-of-type selector: ':nth-last-of-type(1)'
+
+ @return Last-Of-Type selector.
+ */
+extern CSSSelector * lastOfTypeSelector(void);
+
+/**
+ CSS only-child selector: ':first-child:last-child'
+
+ @return Only-Child selector.
+ */
+extern CSSSelector * onlyChildSelector(void);
+
+/**
+ CSS only-of-type selector: ':first-of-type:last-of-type'
+
+ @return Only-Of-Type selector.
+ */
+extern CSSSelector * onlyOfTypeSelector(void);
+
+#pragma mark - Combinators
+
+/**
+ CSS child-of-element selector, e.g. 'div > p'
+
+ @param selector The selector matching the parent element.
+ @return A child of element selector.
+ */
+extern CSSSelector * childOfElementSelector(CSSSelector *selector);
+
+/**
+ CSS descendant-of-element selector, e.g. 'div p'
+
+ @param selector The selector matching the ancestor element.
+ @return A descendant of element selector.
+ */
+extern CSSSelector * descendantOfElementSelector(CSSSelector *selector);
+
+/**
+ CSS adjacent sibling selector, e.g. 'p + a'
+
+ @param selector The selector matching the adjacent sibling element.
+ @return A adjacent sibling selector.
+ */
+extern CSSSelector * adjacentSiblingSelector(CSSSelector *selector);
+
+/**
+ CSS general sibling selector, e.g. 'p ~ a'
+
+ @param selector The selector matching the general sibling element.
+ @return A general sibling selector.
+ */
+extern CSSSelector * generalSiblingSelector(CSSSelector *selector);
+
+#pragma mark - Pseudo Functions
+
+/**
+ CSS nagation selector: ':not(div)'
+
+ @param selector The selector which should be negated.
+ @return A negation selector.
+ */
+extern CSSSelector * not(CSSSelector *selector);
+
+/**
+ CSS has-descendant selector, e.g. 'div:has(p)'
+
+ @discussion 'div:has(p)' matches all <div> elements which have a descendant <p> element.
+
+ @param selector The selector matching a descendant element.
+ @return A has-descendant selector.
+ */
+extern CSSSelector * has(CSSSelector *selector);
+
+#pragma mark - Compound Selectors
+
+/**
+ A compound selector matching only elements that match all of the specified selectors.
+
+ @param selectors The selectors list.
+ @return All-Of selector.
+ */
+extern CSSSelector * allOf(NSArray *selectors);
+
+/**
+ A compound selector matching all elements that match at least one of the specified selectors.
+
+ @param selectors The selectors list.
+ @return Any-Of selector.
+ */
+extern CSSSelector * anyOf(NSArray *selectors);
+
+#pragma mark - Pseudo
+
+/**
+ Creates a new named-pseudo selector.
+
+ @discussion The name specified when creating a selector is prefixed with colon.
+
+ @param name The name of the selector.
+ @param selector The underlying selector.
+ @return A named-pseudo selector.
+ */
+extern CSSSelector * namedPseudoSelector(NSString *name, CSSSelector *selector);
+
+#pragma mark - Block
+
+/**
+ Creates a new named selector with a specified block.
+
+ @param name The name of the selector.
+ @param acceptBlock The block which provides the implementation for the accept-element logic.
+ @return A named-block selector.
+ */
+extern CSSSelector * namedBlockSelector(NSString *name, BOOL (^ acceptBlock)(HTMLElement *element));
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSStructuralPseudoSelectors.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSStructuralPseudoSelectors.h
new file mode 100644
index 0000000..1b75b1a
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSStructuralPseudoSelectors.h
@@ -0,0 +1,147 @@
+//
+// CSSStructuralPseudoSelector.h
+// HTMLKit
+//
+// Created by Iska on 11/10/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+@class CSSSelector;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ @return Root element selector: ':root'
+ */
+extern CSSSelector * rootSelector(void);
+
+/**
+ @return Empy element selector: ':empty'
+ */
+extern CSSSelector * emptySelector(void);
+
+/**
+ @return A parent element selector: ':parent'
+ */
+extern CSSSelector * parentSelector(void);
+
+/**
+ @return A button element selector: ':button'
+ */
+extern CSSSelector * buttonSelector(void);
+
+/**
+ @return A checkbox element selector: ':checkbox'
+ */
+extern CSSSelector * checkboxSelector(void);
+
+/**
+ @return A file element selector: ':file'
+ */
+extern CSSSelector * fileSelector(void);
+
+/**
+ @return A header element selector: ':header'
+ */
+extern CSSSelector * headerSelector(void);
+
+/**
+ @return An image element selector: ':image'
+ */
+extern CSSSelector * imageSelector(void);
+
+/**
+ @return A parent element selector: ':parent'
+ */
+extern CSSSelector * inputSelector(void);
+
+/**
+ @return A link element selector: ':link'
+ */
+extern CSSSelector * linkSelector(void);
+
+/**
+ @return A password element selector: ':password'
+ */
+extern CSSSelector * passwordSelector(void);
+
+/**
+ @return A radio element selector: ':radio'
+ */
+extern CSSSelector * radioSelector(void);
+
+/**
+ @return A reset element selector: ':reset'
+ */
+extern CSSSelector * resetSelector(void);
+
+/**
+ @return A submit element selector: ':submit'
+ */
+extern CSSSelector * submitSelector(void);
+
+/**
+ @return A text element selector: ':text'
+ */
+extern CSSSelector * textSelector(void);
+
+/**
+ @return An enabled element selector: ':enabled'
+ */
+extern CSSSelector * enabledSelector(void);
+
+/**
+ @return A disabled element selector: ':disabled'
+ */
+extern CSSSelector * disabledSelector(void);
+
+/**
+ @return A checked element selector: ':checked'
+ */
+extern CSSSelector * checkedSelector(void);
+
+/**
+ @return An optional element selector: ':optional'
+ */
+extern CSSSelector * optionalSelector(void);
+
+/**
+ @return A required element selector: ':required'
+ */
+extern CSSSelector * requiredSelector(void);
+
+/**
+ Less-than selector, e.g. 'lt(2)'
+
+ Selects all elements at an index less than the specified index. A negative index counts backwards from the last element.
+
+ @param index The zero-based index of the element to match.
+ @return A Less-Than selector.
+ */
+extern CSSSelector * ltSelector(NSInteger index);
+
+/**
+ Greater-than selector, e.g. 'gt(2)'
+
+ Selects all elements at an index greater than the specified index. A negative index counts backwards from the
+ last element.
+
+ @param index The zero-based index of the element to match.
+ @return A Greater-Than selector.
+ */
+extern CSSSelector * gtSelector(NSInteger index);
+
+/**
+ Equal selector, e.g. 'eq(3)'
+
+ Selects the element at the specified index. A negative index counts backwards from the last element.
+
+ @param index The zero-based index of the element to match.
+ @return An Equal selector.
+ */
+extern CSSSelector * eqSelector(NSInteger index);
+
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/CSSTypeSelector.h b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSTypeSelector.h
new file mode 100644
index 0000000..15c66c0
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/CSSTypeSelector.h
@@ -0,0 +1,41 @@
+//
+// CSSTypeSelector.h
+// HTMLKit
+//
+// Created by Iska on 13/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "CSSSelector.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ CSS Type Selector.
+ */
+@interface CSSTypeSelector : CSSSelector
+
+/**
+ The type of elements being matched.
+ */
+@property (nonatomic, strong, readonly) NSString *type;
+
+/**
+ Returns the universal selector.
+
+ @return A new instance of a universal selector that matches all elements.
+ */
++ (instancetype)universalSelector;
+
+/**
+ Initializes a new selector for the specified type.
+
+ @param type The type of elements that should be matched.
+ @return A new instance of a type selector.
+ */
+- (instancetype)initWithType:(NSString *)type;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData+Private.h
new file mode 100644
index 0000000..762a0d5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData+Private.h
@@ -0,0 +1,28 @@
+//
+// HTMLCharacterData+Private.h
+// HTMLKit
+//
+// Created by Iska on 26/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLCharacterData.h"
+#import "HTMLNode.h"
+
+/**
+ Private HTML Character Data methods which are not intended for public API.
+ */
+@interface HTMLCharacterData ()
+
+/**
+ Designated initializer of the HTML CharacterData, which, however, should not be used directly. It is intended to be
+ called only by subclasses, i.e. HTMLText and HTMLComment.
+
+ @param name The node's name.
+ @param type The node's type.
+ @param data The node's data string.
+ @return A new instance of a HTML CharacterData.
+ */
+- (instancetype)initWithName:(NSString *)name type:(HTMLNodeType)type data:(NSString *)data NS_DESIGNATED_INITIALIZER;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData.h
new file mode 100644
index 0000000..302d2c5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterData.h
@@ -0,0 +1,32 @@
+//
+// HTMLCharacterData.h
+// HTMLKit
+//
+// Created by Iska on 26/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML CharacterData
+
+ https://dom.spec.whatwg.org/#characterdata
+ */
+@interface HTMLCharacterData : HTMLNode
+
+/** @brief The associated data string. */
+@property (nonatomic, copy, readonly) NSString *data;
+
+- (void)setData:(NSString *)data;
+- (void)appendData:(NSString *)data;
+- (void)insertData:(NSString *)data atOffset:(NSUInteger)offset;
+- (void)deleteDataInRange:(NSRange)range;
+- (void)replaceDataInRange:(NSRange)range withData:(NSString *)data;
+- (NSString *)substringDataWithRange:(NSRange)range;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterToken.h
new file mode 100644
index 0000000..20ebd19
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCharacterToken.h
@@ -0,0 +1,81 @@
+//
+// HTMLCharacterToken.h
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+
+/**
+ HTML Character Token
+ */
+@interface HTMLCharacterToken : HTMLToken
+
+/** @brief The characters in this token. */
+@property (nonatomic, copy) NSString *characters;
+
+/**
+ Initializes a new character token.
+
+ @param string The string with which to initialize the token.
+ @return A new instance of a character token.
+ */
+- (instancetype)initWithString:(NSString *)string;
+
+/**
+ Appends the given string to this token.
+
+ @param string The string to append.
+ */
+- (void)appendString:(NSString *)string;
+
+/**
+ Checks whether this token is a whitespace character token.
+
+ @discussion HTML whitespace characters are: CHARACTER TABULATION U+0009, LINE FEED U+000A, FORM FEED U+000C,
+ CARRIAGE RETURN U+000D, and SPACE U+0020
+
+ @return `YES` if this token contains only whitespace characters, `NO` otherwise.
+ */
+- (BOOL)isWhitespaceToken;
+
+/**
+ Checks whether this token is empty.
+
+ @return `YES` if this token is empty, `NO` otherwise.
+ */
+- (BOOL)isEmpty;
+
+/**
+ Retains all leading whitespace characters in this token.
+ */
+- (void)retainLeadingWhitespace;
+
+/**
+ Trims all leading whitespace characters in this token.
+ */
+- (void)trimLeadingWhitespace;
+
+/**
+ Trims the characters in this token from a given index
+
+ @param index The start index from which to trim the token.
+ */
+- (void)trimFormIndex:(NSUInteger)index;
+
+/**
+ Splits this token retaining only characters after the leading whitespace. The leading whitespace characters are then
+ returned a new characters token.
+
+ @return A characters token with leading whitespace characters. Returns 'nil` if no leading whitespace exists.
+ */
+- (HTMLCharacterToken *)tokenBySplitingLeadingWhiteSpace;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLComment.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLComment.h
new file mode 100644
index 0000000..d9ab331
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLComment.h
@@ -0,0 +1,28 @@
+//
+// HTMLComment.h
+// HTMLKit
+//
+// Created by Iska on 25/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLCharacterData.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Comment node
+ */
+@interface HTMLComment : HTMLCharacterData
+
+/**
+ Initializes a new HTML comment node.
+
+ @param data The comment string.
+ @return A new isntance of a HTML comment node.
+ */
+- (instancetype)initWithData:(NSString *)data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCommentToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCommentToken.h
new file mode 100644
index 0000000..5c43f1e
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLCommentToken.h
@@ -0,0 +1,39 @@
+//
+// HTMLCommentToken.h
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+
+/**
+ HTML Comment Token
+ */
+@interface HTMLCommentToken : HTMLToken
+
+/** @brief The comment string in this token. */
+@property (nonatomic, copy) NSString *data;
+
+/**
+ Initializes a new comment token.
+
+ @param data The string with which to initialize the token.
+ @return A new instance of a comment token.
+ */
+- (instancetype)initWithData:(NSString *)data;
+
+/**
+ Appends the given string to this token.
+
+ @param string The string to append.
+ */
+- (void)appendStringToData:(NSString *)string;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOCTYPEToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOCTYPEToken.h
new file mode 100644
index 0000000..d54d991
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOCTYPEToken.h
@@ -0,0 +1,62 @@
+//
+// HTMLDOCTYPEToken.h
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+
+/**
+ HTML DOCTYPE Token
+ */
+@interface HTMLDOCTYPEToken : HTMLToken
+
+/** @brief The DOCTYPE's name. */
+@property (nonatomic, copy) NSString *name;
+
+/** @brief The DOCTYPE's public identifier. */
+@property (nonatomic, strong) NSMutableString *publicIdentifier;
+
+/** @brief The DOCTYPE's system identifier. */
+@property (nonatomic, strong) NSMutableString *systemIdentifier;
+
+/** @brief Flag whether this DOCTYPE forces quirks mode. */
+@property (nonatomic, assign) BOOL forceQuirks;
+
+/**
+ Initializes a new DOCTYPE token.
+
+ @param name The name with which to initialize the token.
+ @return A new instance of a DOCTYPE token.
+ */
+- (instancetype)initWithName:(NSString *)name;
+
+/**
+ Appends the given string to this DOCTYPE's name.
+
+ @param string The string to append.
+ */
+- (void)appendStringToName:(NSString *)string;
+
+/**
+ Appends the given string to this DOCTYPE's public identifier.
+
+ @param string The string to append.
+ */
+- (void)appendStringToPublicIdentifier:(NSString *)string;
+
+/**
+ Appends the given string to this DOCTYPE's system identifier.
+
+ @param string The string to append.
+ */
+- (void)appendStringToSystemIdentifier:(NSString *)string;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOM.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOM.h
new file mode 100644
index 0000000..77f0594
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOM.h
@@ -0,0 +1,29 @@
+//
+// HTMLNodes.h
+// HTMLKit
+//
+// Created by Iska on 27/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+#import "HTMLDocument.h"
+#import "HTMLDocumentType.h"
+#import "HTMLDocumentFragment.h"
+#import "HTMLElement.h"
+#import "HTMLCharacterData.h"
+#import "HTMLComment.h"
+#import "HTMLText.h"
+#import "HTMLTemplate.h"
+#import "HTMLRange.h"
+#import "HTMLDOMTokenList.h"
+#import "HTMLNodeIterator.h"
+#import "HTMLTreeVisitor.h"
+#import "HTMLTreeWalker.h"
+#import "HTMLNodeFilter.h"
+
+#import "HTMLKitDOMExceptions.h"
+#import "HTMLNamespaces.h"
+#import "HTMLQuirksMode.h"
+
+#import "HTMLOrderedDictionary.h"
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMTokenList.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMTokenList.h
new file mode 100644
index 0000000..326998a
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMTokenList.h
@@ -0,0 +1,108 @@
+//
+// HTMLDOMTokenList.h
+// HTMLKit
+//
+// Created by Iska on 30/11/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLElement;
+
+/**
+ A HTML DOM Token List.
+
+ The DOM Token List is used for manipulating an element's attributes that contain muliplte values separated by a space.
+
+ https://dom.spec.whatwg.org/#interface-domtokenlist
+ */
+@interface HTMLDOMTokenList : NSObject
+
+/** @brief The associated context element. */
+@property (nonatomic, strong, readonly) HTMLElement *element;
+
+/** @brief The associated attribute. */
+@property (nonatomic, strong, readonly) NSString *attribute;
+
+/**
+ Initializes a new DOM token list.
+
+ @param element The associated context element.
+ @param attribute The associated attribute.
+ @param value The initial attribute's value.
+ @return A new instance of the DOM token list.
+ */
+- (instancetype)initWithElement:(HTMLElement *)element attribute:(NSString *)attribute value:(NSString *)value;
+
+/**
+ @return The length of this token list
+ */
+- (NSUInteger)length;
+
+/**
+ Checks whether this list contains the given token.
+
+ @param token The token.
+ @return `YES` if the given token is in this list, `NO` otherwise.
+ */
+- (BOOL)contains:(NSString *)token;
+
+/**
+ Add the given tokens to the list.
+
+ @param tokens The tokens to add.
+ */
+- (void)add:(NSArray *)tokens;
+
+/**
+ Removes the given tokens from the list.
+
+ @param tokens The tokens to remove.
+ */
+- (void)remove:(NSArray *)tokens;
+
+/**
+ Toggles the given token.
+
+ @param token The token to toggle.
+ @return `YES` if the token was added to the list, `NO` if it was removed from it.
+ */
+- (BOOL)toggle:(NSString *)token;
+
+/**
+ Replaces the given token with new token.
+
+ @param token The token to replace.
+ @param newToken The replacement token.
+ */
+- (void)replaceToken:(NSString *)token withToken:(NSString *)newToken;
+
+/**
+ Returns the value of the token at the given index.
+
+ @param index The index at which to return the token.
+ @return The token at the given index. If index is greater than or equal to the value returned by count, an
+ NSRangeException is raised.
+ */
+- (NSString *)objectAtIndexedSubscript:(NSUInteger)index;
+
+/**
+ Set the token at the given index.
+
+ @param obj The token to set.
+ @param index The index at which to set the token. If index is greater than or equal to the value returned by count, an
+ NSRangeException is raised.
+ */
+- (void)setObject:(NSString *)obj atIndexedSubscript:(NSUInteger)index;
+
+/**
+ @return The string representation of this token list, which can be used as the attribute's value.
+ */
+- (NSString *)stringify;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMUtils.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMUtils.h
new file mode 100644
index 0000000..b792197
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDOMUtils.h
@@ -0,0 +1,15 @@
+//
+// HTMLDOMUtils.h
+// HTMLKit
+//
+// Created by Iska on 03/12/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLDOM.h"
+
+@class HTMLNode;
+
+extern HTMLNode * GetCommonAncestorContainer(HTMLNode *nodeA, HTMLNode *nodeB);
+extern NSArray * GetAncestorNodes(HTMLNode *node);
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument+Private.h
new file mode 100644
index 0000000..7678b9f
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument+Private.h
@@ -0,0 +1,99 @@
+//
+// HTMLDocument+Private.h
+// HTMLKit
+//
+// Created by Iska on 27/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLDocument.h"
+#import "HTMLNode.h"
+#import "HTMLCharacterData.h"
+#import "HTMLNodeIterator.h"
+#import "HTMLRange.h"
+#import "HTMLText.h"
+
+/**
+ Private HTML Document methods which are not intended for public API.
+ */
+@interface HTMLDocument ()
+
+@property (nonatomic, assign) HTMLDocumentReadyState readyState;
+
+/**
+ Runs the necessary steps after removing a node from the DOM.
+
+ @param oldNode The old node that was removed.
+ @param oldParent The old parent of the node that was removed.
+ @param oldPreviousSibling The old previous sibling node of the node that was removed.
+ */
+- (void)runRemovingStepsForNode:(HTMLNode *)oldNode
+ withOldParent:(HTMLNode *)oldParent
+ andOldPreviousSibling:(HTMLNode *)oldPreviousSibling;
+
+/**
+ Attaches a node iterator to this document.
+
+ @param iterator The iterator to attach.
+ */
+- (void)attachNodeIterator:(HTMLNodeIterator *)iterator;
+
+/**
+ Detaches a node interator from this document.
+
+ @param iterator The iterator to detach.
+ */
+- (void)detachNodeIterator:(HTMLNodeIterator *)iterator;
+
+
+/**
+ Attaches a range to this document.
+
+ @param range The range to attach.
+ */
+- (void)attachRange:(HTMLRange *)range;
+
+/**
+ Detaches a range from this document.
+
+ @param range The range to detach.
+ */
+- (void)detachRange:(HTMLRange *)range;
+
+/**
+ Callback on removing text from a CharacterData node.
+
+ @param node The CharacterData node.
+ @param offset The offset at which the data was removed.
+ @param length The length of the data that was removed.
+ */
+- (void)didRemoveCharacterDataInNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length;
+
+/**
+ Callback on adding text from a CharacterData node.
+
+ @param node The CharacterData node.
+ @param offset The offset at which the data was added.
+ @param length The length of the data that was added.
+ */
+- (void)didAddCharacterDataToNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length;
+
+/**
+ Callback on inserting a new text node when an old text node is split.
+
+ @param newNode The new text node after splitting.
+ @param parent The parent where newNode was inserted.
+ @param node The old text node that was split.
+ @param offset The offset of splitting.
+ */
+- (void)didInsertNewTextNode:(HTMLText *)newNode intoParent:(HTMLNode *)parent afterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset;
+
+/**
+ Callback for clamping current ranges whose end boundary is after the text node upon splitting it.
+
+ @param node The text node that was split.
+ @param offset The offset of splitting
+ */
+- (void)clampRangesAfterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument.h
new file mode 100644
index 0000000..dc6972a
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocument.h
@@ -0,0 +1,98 @@
+//
+// HTMLDocument.h
+// HTMLKit
+//
+// Created by Iska on 25/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+#import "HTMLDocumentType.h"
+#import "HTMLQuirksMode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The document's ready state. The document is `Loading` while being parsed, `Complete` otherwise. The `Interactive` state
+ is not supported.
+ */
+typedef NS_ENUM(short, HTMLDocumentReadyState)
+{
+ HTMLDocumentLoading,
+ HTMLDocumentInteractive, // Not used
+ HTMLDocumentComplete
+};
+
+/**
+ The HTML Document. This is the root of a parsed DOM tree.
+
+ https://html.spec.whatwg.org/multipage/dom.html#documents
+ */
+@interface HTMLDocument : HTMLNode
+
+/**
+ The document's DOCTYPE.
+
+ @see HTMLDocumentType
+ */
+@property (nonatomic, strong, nullable) HTMLDocumentType *documentType;
+
+/**
+ The document's quirks mode.
+
+ @see HTMLQuirksMode
+ */
+@property (nonatomic, assign) HTMLQuirksMode quirksMode;
+
+/**
+ The document's ready state.
+
+ @see HTMLDocumentReadyState
+ */
+@property (nonatomic, assign, readonly) HTMLDocumentReadyState readyState;
+
+/**
+ The document's root element, which is the first element in tree order, if any. Usually it is the element.
+ */
+@property (nonatomic, strong, nullable) HTMLElement *rootElement;
+
+/**
+ The document element, i.e. the element, if it exists.
+ */
+@property (nonatomic, strong, nullable) HTMLElement *documentElement;
+
+/**
+ The document's element, if it exists.
+ */
+@property (nonatomic, strong, nullable) HTMLElement *head;
+
+/**
+ The document's element, if it exists.
+ */
+@property (nonatomic, strong, nullable) HTMLElement *body;
+
+/**
+ Retunrs a new HTML Document instance with the given HTML string.
+
+ @param string The HTML string to parse into a document.
+ */
++ (instancetype)documentWithString:(NSString *)string;
+
+/**
+ Adopts a given node into this document, i.e. the document becomes the new owner of the node. Raises a HTMLKitNotSupportedError
+ exception if node is an instance of HTMLDocument.
+
+ @param node The node to adopt.
+ @return The adopted node
+ */
+- (HTMLNode *)adoptNode:(HTMLNode *)node;
+
+/**
+ Returns the associated HTML Document proxy instance, which owns the template contents of all its template elements.
+ https://html.spec.whatwg.org/multipage/scripting.html#associated-inert-template-document
+ */
+- (HTMLDocument *)associatedInertTemplateDocument;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentFragment.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentFragment.h
new file mode 100644
index 0000000..8211cac
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentFragment.h
@@ -0,0 +1,31 @@
+//
+// HTMLDocumentFragment.h
+// HTMLKit
+//
+// Created by Iska on 12/04/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Document Fragment. Represents a minimal document object that has no parent. It is used as a light-weight
+ version of Document
+
+ https://dom.spec.whatwg.org/#interface-documentfragment
+ */
+@interface HTMLDocumentFragment : HTMLNode
+
+/**
+ Initializes a new document fragment with the given document as owner.
+
+ @param document The owner document.
+ @return A new instance of a document fragment.
+ */
+- (instancetype)initWithDocument:(nullable HTMLDocument *)document;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentType.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentType.h
new file mode 100644
index 0000000..ac82d84
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLDocumentType.h
@@ -0,0 +1,64 @@
+//
+// HTMLDocumentType.h
+// HTMLKit
+//
+// Created by Iska on 25/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+#import "HTMLQuirksMode.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Document Type node. There is only one valid document type, which is ``.
+
+ Other DOCTYPES, e.g.
+ are obsolete but permitted.
+
+ https://dom.spec.whatwg.org/#interface-documenttype
+ */
+@interface HTMLDocumentType : HTMLNode
+
+/**
+ The public identifier
+ */
+@property (nonatomic, copy, readonly) NSString *publicIdentifier;
+
+/**
+ The system identifier
+ */
+@property (nonatomic, copy, readonly) NSString *systemIdentifier;
+
+/**
+ Initializes and returns a new isntance of a Document Type node.
+
+ @param name The name.
+ @param publicIdentifier The public identifier.
+ @param systemIdentifier The system identigier
+ @return A new document type instance.
+ */
+- (instancetype)initWithName:(NSString *)name
+ publicIdentifier:(nullable NSString *)publicIdentifier
+ systemIdentifier:(nullable NSString *)systemIdentifier;
+
+/**
+ Checks whether this DOCTYPE is valid.
+
+ @return `YES` if this is a valid DOCTYPE, `NO` otherwise.
+ */
+- (BOOL)isValid;
+
+/**
+ Return the quirks mode of this DOCTYPE.
+
+ @return The quirks mode.
+
+ @see HTMLQuirksMode
+ */
+- (HTMLQuirksMode)quirksMode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLEOFToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLEOFToken.h
new file mode 100644
index 0000000..369f315
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLEOFToken.h
@@ -0,0 +1,23 @@
+//
+// HTMLEOFToken.h
+// HTMLKit
+//
+// Created by Iska on 15/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import "HTMLToken.h"
+
+/**
+ A HTML EOF Token.
+ */
+@interface HTMLEOFToken : HTMLToken
+
+/** Returns the singleton instance of the EOF Token. */
++ (instancetype)token;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElement.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElement.h
new file mode 100644
index 0000000..2d0b3f5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElement.h
@@ -0,0 +1,123 @@
+//
+// HTMLElement.h
+// HTMLKit
+//
+// Created by Iska on 05/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLNamespaces.h"
+#import "HTMLNode.h"
+#import "HTMLDOMTokenList.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Element.
+
+ https://html.spec.whatwg.org/multipage/dom.html#elements
+ https://html.spec.whatwg.org/multipage/syntax.html#elements-2
+ */
+@interface HTMLElement : HTMLNode
+
+/**
+ The namesapce of this element.
+
+ @see HTMLNamespace
+ */
+@property (nonatomic, assign, readonly) HTMLNamespace htmlNamespace;
+
+/**
+ The elemen's tag name.
+ */
+@property (nonatomic, copy, readonly) NSString *tagName;
+
+/**
+ The elemen's id attribute value. Empty string if the element has no id attribute.
+ */
+@property (nonatomic, copy) NSString *elementId;
+
+/**
+ The elemen's class attribute value. Empty string if the element has no class attribute.
+ */
+@property (nonatomic, copy) NSString *className;
+
+/**
+ The element's class attribute as a DOM Token List
+
+ @see HTMLDOMTokenList
+ */
+@property (nonatomic, strong, readonly) HTMLDOMTokenList *classList;
+
+/**
+ The element's attribites.
+ */
+@property (nonatomic, strong) NSMutableDictionary *attributes;
+
+/**
+ @warning Use one of the initWithTagName: methods instead.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Initializes a new HTML element with the given tag name.
+
+ @param tagName The tag name.
+ @return A new HTML element.
+ */
+- (instancetype)initWithTagName:(NSString *)tagName;
+
+/**
+ Initializes a new HTML element with the given tag name and attributes.
+
+ @param tagName The tag name.
+ @param attributes The attributes.
+ @return A new HTML element.
+ */
+- (instancetype)initWithTagName:(NSString *)tagName attributes:(nullable NSDictionary *)attributes;
+
+/**
+ Initializes a new HTML element with the given tag name, namespace, and attributes.
+
+ @param tagName The tag name.
+ @param htmlNamespace The HTML namespace.
+ @param attributes The attributes.
+ @return A new HTML element.
+ */
+- (instancetype)initWithTagName:(NSString *)tagName namespace:(HTMLNamespace)htmlNamespace attributes:(nullable NSDictionary *)attributes;
+
+/**
+ Checks whether this element has an attribute with the given name.
+
+ @param name The attribute name.
+ @return `YES` if the element has such an attributes, `NO` otherwise.
+ */
+- (BOOL)hasAttribute:(NSString *)name;
+
+/**
+ Returns the value of the attribute with the given name.
+
+ @param name The attribute's name.
+ @return The attribute's value, `nil` if the element doesn't have such attribute.
+ */
+- (nullable NSString *)objectForKeyedSubscript:(NSString *)name;
+
+/**
+ Set the value of the attribute with the given name.
+
+ @param value The value to set.
+ @param attribute The attribute's name.
+ */
+- (void)setObject:(NSString *)value forKeyedSubscript:(NSString *)attribute;
+
+/**
+ Removes the attribute with the given name.
+
+ @param name The attribute to remove.
+ */
+- (void)removeAttribute:(NSString *)name;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementAdjustment.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementAdjustment.h
new file mode 100644
index 0000000..907fa7e
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementAdjustment.h
@@ -0,0 +1,142 @@
+//
+// HTMLElementAdjustment.h
+// HTMLKit
+//
+// Created by Iska on 14/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import "HTMLElement.h"
+#import "HTMLTokens.h"
+#import "HTMLNamespaces.h"
+#import "NSString+HTMLKit.h"
+
+NS_INLINE void AdjustMathMLAttributes(HTMLTagToken *token)
+{
+ NSString *lowercase = token.attributes[@"definitionurl"];
+ if (lowercase != nil) {
+ [token.attributes replaceKey:@"definitionurl" withKey:@"definitionURL"];
+ }
+}
+
+NS_INLINE void AdjustSVGAttributes(HTMLTagToken *token)
+{
+ if (token.attributes == nil) {
+ 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"};
+
+ HTMLOrderedDictionary *adjusted = [HTMLOrderedDictionary new];
+ for (id key in token.attributes) {
+ NSString *replacement = replacements[key] ?: key;
+ adjusted[replacement] = token.attributes[key];
+ }
+ token.attributes = adjusted;
+}
+
+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"};
+
+ NSString *replacement = replacements[token.tagName] ?: token.tagName;
+ token.tagName = replacement;
+}
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementTypes.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementTypes.h
new file mode 100644
index 0000000..53b7b6b
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLElementTypes.h
@@ -0,0 +1,66 @@
+//
+// HTMLElementTypes.h
+// HTMLKit
+//
+// Created by Iska on 19/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import "HTMLNode+Private.h"
+#import "HTMLElement.h"
+#import "HTMLNamespaces.h"
+#import "NSString+Private.h"
+
+NS_INLINE BOOL IsNodeMathMLTextIntegrationPoint(HTMLElement *node)
+{
+ return (node.htmlNamespace == HTMLNamespaceMathML && [node.tagName isEqualToAny:@"mi", @"mo", @"mn", @"ms", @"mtext", nil]);
+}
+
+NS_INLINE BOOL IsNodeHTMLIntegrationPoint(HTMLElement *node)
+{
+ if (node.htmlNamespace == HTMLNamespaceMathML && [node.tagName isEqualToString:@"annotation-xml"]) {
+ NSString *encoding = node.attributes[@"encoding"];
+ return [encoding isEqualToStringIgnoringCase:@"text/html"] || [encoding isEqualToStringIgnoringCase:@"application/xhtml+xml"];
+ } else if (node.htmlNamespace == HTMLNamespaceSVG) {
+ return [node.tagName isEqualToAny:@"foreignObject", @"desc", @"title", nil];
+ }
+ return NO;
+}
+
+NS_INLINE BOOL IsSpecialElement(HTMLElement *element)
+{
+ if (element.htmlNamespace == HTMLNamespaceHTML) {
+ return [element.tagName isEqualToAny:@"address", @"applet", @"area", @"article",
+ @"aside", @"base", @"basefont", @"bgsound", @"blockquote", @"body", @"br",
+ @"button", @"caption", @"center", @"col", @"colgroup", @"dd", @"details",
+ @"dir", @"div", @"dl", @"dt", @"embed", @"fieldset", @"figcaption",
+ @"figure", @"footer", @"form", @"frame", @"frameset", @"h1", @"h2", @"h3",
+ @"h4", @"h5", @"h6", @"head", @"header", @"hgroup", @"hr", @"html", @"iframe",
+ @"img", @"input", @"li", @"link", @"listing", @"main", @"marquee",
+ @"menu", @"meta", @"nav", @"noembed", @"noframes", @"noscript",
+ @"object", @"ol", @"p", @"param", @"plaintext", @"pre", @"script", @"section",
+ @"select", @"source", @"style", @"summary", @"table", @"tbody", @"td",
+ @"template", @"textarea", @"tfoot", @"th", @"thead", @"title", @"tr",
+ @"track", @"ul", @"wbr", @"xmp", nil];
+ } else if (element.htmlNamespace == HTMLNamespaceMathML) {
+ return [element.tagName isEqualToAny:@"mi", @"mo", @"mn", @"ms", @"mtext", @"annotation-xml", nil];
+ } else if (element.htmlNamespace == HTMLNamespaceSVG) {
+ return [element.tagName isEqualToAny:@"foreignObject", @"desc", @"title", nil];
+ }
+ return NO;
+}
+
+NS_INLINE BOOL DoesNodeSerializeAsVoid(HTMLNode *node)
+{
+ if (node.nodeType != HTMLNodeElement) {
+ return false;
+ }
+
+ return [node.asElement.tagName isEqualToAny:@"area", @"base", @"basefont", @"bgsound", @"br", @"col", @"embed",
+ @"frame", @"hr", @"img", @"input", @"keygen", @"link", @"meta", @"param", @"source", @"track", @"wbr", nil];
+}
+
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLInputStreamReader.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLInputStreamReader.h
new file mode 100644
index 0000000..d018e00
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLInputStreamReader.h
@@ -0,0 +1,168 @@
+//
+// HTMLInputStreamReader.h
+// HTMLKit
+//
+// Created by Iska on 15/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+/**
+ Typedef for the error callback block.
+
+ @param code The standarized error-code
+ @param details The string describing the reason of the reported error.
+ */
+typedef void (^ HTMLStreamReaderErrorCallback)(NSString *code, NSString *details);
+
+/**
+ * HTML Input Stream Reader processor conforming to the HTML standard
+ * http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#preprocessing-the-input-stream
+ */
+@interface HTMLInputStreamReader : NSObject
+
+/** @brief The underlying string with which this stream reader was initialized */
+@property (nonatomic, readonly) NSString *string;
+
+/** @brief The current scan location */
+@property (nonatomic, readonly) NSUInteger currentLocation;
+
+/** @brief An error callback block, which gets called when encountering errors while reading the stream */
+@property (nonatomic, copy) HTMLStreamReaderErrorCallback errorCallback;
+
+/**
+ Initializes a new Input Stream Reader with the given string.
+
+ @param string The HTML string
+ @return A new instance of the Input Stream Reader.
+ */
+- (id)initWithString:(NSString *)string;
+
+/**
+ Returns the current input character.
+
+ @return The current code point in the input stream as a `UTF32Char`.
+ */
+- (UTF32Char)currentInputCharacter;
+
+/**
+ Returns the next input character without consuming it.
+
+ @return The next code point in the input stream as a `UTF32Char`. Returns `EOF` if the stream is fully consumed.
+ */
+- (UTF32Char)nextInputCharacter;
+
+/**
+ Returns the input character at a given offset without consuming it.
+
+ @param offset The offset of the character.
+ @return The code point in the input stream as a `UTF32Char` at the given offset.
+ */
+- (UTF32Char)inputCharacterPointAtOffset:(NSUInteger)offset;
+
+/**
+ Consumes and returns the next input character. Consuming a characters advances the current scan location of the
+ input stream.
+
+ @return The next code point in the input stream as a `UTF32Char`. Returns `EOF` if the stream is fully consumed.
+ */
+- (UTF32Char)consumeNextInputCharacter;
+
+/**
+ Causes the next input character to return the current input character.
+ */
+- (void)reconsumeCurrentInputCharacter;
+
+/** @brief Unconsumes the current input character. */
+- (void)unconsumeCurrentInputCharacter;
+
+/**
+ Consumes the given character at the current location.
+
+ @param character The character to consume.
+ @return YES if the given character was consumed at the current location, NO otherwise.
+ */
+- (BOOL)consumeCharacter:(UTF32Char)character;
+
+/**
+ Consumes characters at the current location matching an unsigned number.
+
+ @param result Upon return, contains the consumed unsigned number. Pass `NULL` to skip over an unsigned number at the
+ current location.
+ @return YES if an unsigned number could be consumed at the current location, NO otherwise.
+ */
+- (BOOL)consumeNumber:(unsigned long long *)result;
+
+/**
+ Consumes characters at the current location matching a decimal number.
+
+ @param result Upon return, contains the consumed decimal number. Pass `NULL` to skip over a decimal number at the
+ current location.
+ @return YES if a decimal number could be consumed at the current location, NO otherwise.
+ */
+- (BOOL)consumeDecimalNumber:(NSDecimal *)result;
+
+/**
+ Consumes characters at the current location matching a hexadecimal number.
+
+ @param result Upon return, contains the consumed hexadecimal number. Pass `NULL` to skip over a hexadecimal number at
+ the current location.
+ @return YES if a hexadecimal number could be consumed at the current location, NO otherwise.
+ */
+- (BOOL)consumeHexNumber:(unsigned long long *)result;
+
+/**
+ Consumes the given string at the current location.
+
+ @param string The string to consume.
+ @param caseSensitive YES if the string's case should be ignored, NO otherwise
+ @return YES if the given string was consumed at the current location, NO otherwise.
+ */
+- (BOOL)consumeString:(NSString *)string caseSensitive:(BOOL)caseSensitive;
+
+/**
+ Consumes characters starting at the current location until any character in a given string is encountered.
+
+ @param characters The string containing the characters to consume up to.
+ @return A string containing the consumed characters. Returns `nil` if none were consumed.
+ */
+- (NSString *)consumeCharactersUpToCharactersInString:(NSString *)characters;
+
+/**
+ Consumes characters starting at the current location until a given string is encountered.
+
+ @param string The string to consume up to.
+ @return A string containing the consumed characters. Returns `nil` if none were consumed.
+ */
+- (NSString *)consumeCharactersUpToString:(NSString *)string;
+
+/**
+ Consumes characters as long as the match the characters in the given string starting at the current location.
+
+ @param characters A string with the characters to consume.
+ @return A string containing the consumed characters. Returns `nil` if none were found.
+ */
+- (NSString *)consumeCharactersInString:(NSString *)characters;
+
+/**
+ Consumes alphanumeric characters starting at the current location.
+
+ @return A string containing the consumed alphanumeric characters. Returns `nil` if none were found.
+ */
+- (NSString *)consumeAlphanumericCharacters;
+
+/** @brief Marks the current stream scan location. */
+- (void)markCurrentLocation;
+
+/** @brief Resets the stream's scan location to the previously marked location. */
+- (void)rewindToMarkedLocation;
+
+/** @brief Resets the stream to its begining. */
+- (void)reset;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKit.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKit.h
new file mode 100644
index 0000000..b8adcc5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKit.h
@@ -0,0 +1,28 @@
+//
+// HTMLKit.h
+// HTMLKit
+//
+// Created by Iska on 15/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import
+
+//! Project version number for HTMLKit.
+extern double HTMLKitVersionNumber;
+
+//! Project version string for HTMLKit.
+extern const unsigned char HTMLKitVersionString[];
+
+#import "HTMLDOM.h"
+#import "HTMLParser.h"
+#import "HTMLSerializer.h"
+#import "HTMLKitErrorDomain.h"
+#import "HTMLOrderedDictionary.h"
+
+#import "CSSSelectors.h"
+#import "CSSSelectorParser.h"
+#import "CSSNthExpressionParser.h"
+
+#import "NSString+HTMLKit.h"
+#import "NSCharacterSet+HTMLKit.h"
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitDOMExceptions.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitDOMExceptions.h
new file mode 100644
index 0000000..4e357cc
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitDOMExceptions.h
@@ -0,0 +1,21 @@
+//
+// HTMLKitExceptions.h
+// HTMLKit
+//
+// Created by Iska on 17/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+extern NSString * const HTMLKitHierarchyRequestError;
+extern NSString * const HTMLKitNotFoundError;
+extern NSString * const HTMLKitNotSupportedError;
+
+extern NSString * const HTMLKitSyntaxError;
+extern NSString * const HTMLKitInvalidCharacterError;
+
+extern NSString * const HTMLKitInvalidNodeTypeError;
+extern NSString * const HTMLKitIndexSizeError;
+extern NSString * const HTMLKitWrongDocumentError;
+extern NSString * const HTMLKitInvalidStateError;
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitErrorDomain.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitErrorDomain.h
new file mode 100644
index 0000000..98ca6f8
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLKitErrorDomain.h
@@ -0,0 +1,23 @@
+//
+// HTMLKitErrorDomain.h
+// HTMLKit
+//
+// Created by Iska on 24/11/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+#ifndef HTMLKitErrorDomain_h
+#define HTMLKitErrorDomain_h
+
+static NSString *const HTMLKitErrorDomain = @"HTMLKit";
+static NSString *const HTMLKitSelectorErrorDomain = @"HTMLKitSelector";
+
+static NSString *const CSSSelectorStringKey = @"CSSSelectorString";
+static NSString *const CSSSelectorErrorLocationKey = @"CSSSelectorErrorLocation";
+
+NS_ENUM(NSInteger)
+{
+ HTMLKitSelectorParseError = 4200
+};
+
+#endif /* HTMLKitErrorDomain_h */
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLListOfActiveFormattingElements.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLListOfActiveFormattingElements.h
new file mode 100644
index 0000000..0a18193
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLListOfActiveFormattingElements.h
@@ -0,0 +1,139 @@
+//
+// HTMLListOfActiveFormattingElements.h
+// HTMLKit
+//
+// Created by Iska on 22/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLElement.h"
+
+/**
+ The List of Active Formatting Elements. It is used to handle mis-nested formatting element tags.
+
+ https://html.spec.whatwg.org/multipage/syntax.html#the-list-of-active-formatting-elements
+ */
+@interface HTMLListOfActiveFormattingElements : NSObject
+
+/**
+ Returns the object at the specified index.
+
+ @param index An index within the bounds of the list.
+ @return The node located at index.
+ */
+- (id)objectAtIndexedSubscript:(NSUInteger)index;
+
+/**
+ Replaces the object at the index with the new object.
+
+ @param obj The node with which to replace the object at given index in the list.
+ @param idx The index of the object to be replaced.
+ */
+- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
+
+/**
+ Returns the index of the given node in the list.
+
+ @param node The node.
+ @return The index of the given node in the list.
+ */
+- (NSUInteger)indexOfElement:(id)node;
+
+/**
+ Adds the given element to the list.
+
+ @param element The element to add.
+ */
+- (void)addElement:(HTMLElement *)element;
+
+/**
+ Removes the given element from the list.
+
+ @param element The element to remove.
+ */
+- (void)removeElement:(id)element;
+
+/**
+ Checks whether the given element is in the list.
+
+ @param element The element to check.
+ @return `YES` if element is in the list, `NO` otherwise.
+ */
+- (BOOL)containsElement:(id)element;
+
+/**
+ Inserts the given element at the index into the list.
+
+ @param element The element to insert.
+ @param index The index at which the element should be inserted.
+ */
+- (void)insertElement:(HTMLElement *)element atIndex:(NSUInteger)index;
+
+/**
+ Replaces the element at the given index in the list with the new element.
+
+ @param index The index of the element to be replaced.
+ @param element The element with which to replace the element at given index in the list.
+ */
+- (void)replaceElementAtIndex:(NSUInteger)index withElement:(HTMLElement *)element;
+
+/**
+ Returns the last element in this list.
+
+ @return The last entry.
+ */
+- (id)lastEntry;
+
+/**
+ Adds a marker to the end of this list
+ */
+- (void)addMarker;
+
+/**
+ Clears all elements from the end of this list upto the last marker.
+ */
+- (void)clearUptoLastMarker;
+
+/**
+ Returns the last element in the list having the given tag name, that is between the end of the list and the last marker
+ in the list, if any, or the start of the list otherwise.
+
+ @param tagName The tag name.
+ @return The formatting element.
+ */
+- (HTMLElement *)formattingElementWithTagName:(NSString *)tagName;
+
+/**
+ Returns the count of elements in this list.
+
+ @return The elements count.
+ */
+- (NSUInteger)count;
+
+/**
+ Checks whether this list is empty.
+
+ @return `YES` if the stack is empty, `NO` otherwise.
+ */
+- (BOOL)isEmpty;
+
+/**
+ Return an object enumerator over this list.
+
+ @return An enumerator
+ */
+- (NSEnumerator *)enumerator;
+
+/**
+ Return an object enumerator over this list.
+
+ @return An enumerator
+ */
+- (NSEnumerator *)reverseObjectEnumerator;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLMarker.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLMarker.h
new file mode 100644
index 0000000..7acd23b
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLMarker.h
@@ -0,0 +1,27 @@
+//
+// HTMLMarker.h
+// HTMLKit
+//
+// Created by Iska on 02/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+/**
+ A Maker that is used in the List of Active Formatting Elements.
+
+ @see HTMLListOfActiveFormattingElements
+ */
+@interface HTMLMarker : NSObject
+
+/**
+ Returns the singleton instance of the Marker.
+ */
++ (instancetype)marker;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNamespaces.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNamespaces.h
new file mode 100644
index 0000000..fb7badd
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNamespaces.h
@@ -0,0 +1,23 @@
+//
+// HTMLNamespaces.h
+// HTMLKit
+//
+// Created by Iska on 03/11/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+/**
+ HTML Namespaces
+ https://html.spec.whatwg.org/multipage/infrastructure.html#namespaces
+ */
+typedef NS_ENUM(NSInteger, HTMLNamespace)
+{
+ /** The default HTML namespace. */
+ HTMLNamespaceHTML,
+
+ /** The namespace for most of the elements. */
+ HTMLNamespaceMathML,
+
+ /** The namespace for most of the elements. */
+ HTMLNamespaceSVG
+};
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode+Private.h
new file mode 100644
index 0000000..920edaa
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode+Private.h
@@ -0,0 +1,73 @@
+//
+// HTMLNode+Private.h
+// HTMLKit
+//
+// Created by Iska on 20/12/15.
+// Copyright © 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import "HTMLNode.h"
+
+@class HTMLText;
+@class HTMLComment;
+@class HTMLDocumentType;
+
+/**
+ Private HTML Node methods which are not intended for public API.
+ */
+@interface HTMLNode ()
+
+/**
+ A read-write redeclaration of the same property in the public API.
+ */
+@property (nonatomic, weak) HTMLDocument *ownerDocument;
+
+/**
+ A read-write redeclaration of the same property in the public API.
+ */
+@property (nonatomic, weak) HTMLNode *parentNode;
+
+/**
+ Designated initializer of the HTML Node, which, however, should not be used directly. It is intended to be called only
+ by subclasses.
+
+ @abstract Use concrete subclasses of the HTML Node.
+
+ @param name The node's name.
+ @param type The node's type.
+ @return A new instance of a HTML Node.
+ */
+- (instancetype)initWithName:(NSString *)name type:(HTMLNodeType)type NS_DESIGNATED_INITIALIZER;
+
+/**
+ Casts this node to a HTML Element. This cast should only be performed after the appropriate check.
+ */
+- (HTMLElement *)asElement;
+
+/**
+ Casts this node to a HTML Text. This cast should only be performed after the appropriate check.
+ */
+- (HTMLText *)asText;
+
+/**
+ Casts this node to a HTML Comment. This cast should only be performed after the appropriate check.
+ */
+- (HTMLComment *)asComment;
+
+/**
+ Casts this node to a HTML Document Type. This cast should only be performed after the appropriate check.
+ */
+- (HTMLDocumentType *)asDocumentType;
+
+/**
+ Returns the same string representation of the DOM tree rooted at this node that is used by html5lib-tests.
+
+ @disucssion This method is indended for testing purposes.
+ */
+- (NSString *)treeDescription;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode.h
new file mode 100644
index 0000000..0909006
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNode.h
@@ -0,0 +1,458 @@
+//
+// HTMLNode.h
+// HTMLKit
+//
+// Created by Iska on 24/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLNodeIterator.h"
+#import "HTMLTreeVisitor.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The HTML node type
+ */
+typedef NS_ENUM(short, HTMLNodeType)
+{
+ HTMLNodeElement = 1,
+ HTMLNodeText = 3,
+ HTMLNodeProcessingInstruction = 7,
+ HTMLNodeComment = 8,
+ HTMLNodeDocument = 9,
+ HTMLNodeDocumentType = 10,
+ HTMLNodeDocumentFragment = 11,
+};
+
+/**
+ A node's position in the HTML document when compared with other nodes.
+ */
+typedef NS_OPTIONS(unsigned short, HTMLDocumentPosition)
+{
+ HTMLDocumentPositionEquivalent = 0x0,
+ HTMLDocumentPositionDisconnected = 0x01,
+ HTMLDocumentPositionPreceding = 0x02,
+ HTMLDocumentPositionFollowing = 0x04,
+ HTMLDocumentPositionContains = 0x08,
+ HTMLDocumentPositionContainedBy = 0x10,
+ HTMLDocumentPositionImplementationSpecific = 0x20
+};
+
+@class HTMLDocument;
+@class HTMLElement;
+@class CSSSelector;
+
+/**
+ A HTML Node, the base class for all HTML DOM entities.
+
+ HTMLKit provides a partial implementation of the WHATWG DOM specification: https://dom.spec.whatwg.org/
+ */
+@interface HTMLNode : NSObject
+
+/**
+ The node type.
+
+ @see HTMLNodeType
+ */
+@property (nonatomic, assign, readonly) HTMLNodeType nodeType;
+
+/**
+ The node name as described in https://dom.spec.whatwg.org/#dom-node-nodename
+
+ @warning This is not the HTML Element tag name.
+ */
+@property (nonatomic, strong, readonly) NSString *name;
+
+/**
+ The owner document of this node.
+
+ @see HTMLDocument
+ */
+@property (nonatomic, weak, readonly, nullable) HTMLDocument *ownerDocument;
+
+/**
+ The root node of this node, if any.
+ */
+@property (nonatomic, weak, readonly, nullable) HTMLNode *rootNode;
+
+/**
+ The parent node of this node, if any.
+ */
+@property (nonatomic, weak, readonly, nullable) HTMLNode *parentNode;
+
+/**
+ The parent element of this node, if any.
+
+ @discussion This property returns nil if the parent is a non-element node.
+ */
+@property (nonatomic, weak, readonly, nullable) HTMLElement *parentElement;
+
+/**
+ A read-only ordered set of child nodes.
+ */
+@property (nonatomic, strong, readonly) NSOrderedSet *childNodes;
+
+/**
+ The first child node, if any.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLNode *firstChild;
+
+/**
+ The last child node, if any.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLNode *lastChild;
+
+/**
+ The previous sibling node in the document, if any.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLNode *previousSibling;
+
+/**
+ The next sibling node in the document, if any.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLNode *nextSibling;
+
+/**
+ The previous sibling element in the document, if any.
+
+ @discussion Previous non-element nodes will be skipped till an element is found.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLElement *previousSiblingElement;
+
+/**
+ The next sibling element in the document, if any.
+
+ @discussion Next non-element nodes will be skipped till an element is found.
+ */
+@property (nonatomic, strong, readonly, nullable) HTMLElement *nextSiblingElement;
+
+/**
+ The index of this node.
+ */
+@property (nonatomic, readonly, assign) NSUInteger index;
+
+/**
+ The text content of this node.
+ */
+@property (nonatomic, copy) NSString *textContent;
+
+/**
+ The outer HTML string.
+ */
+@property (nonatomic, strong, readonly) NSString *outerHTML;
+
+/**
+ The inner HTML string.
+ */
+@property (nonatomic, copy) NSString *innerHTML;
+
+/**
+ The length of the node as described in https://dom.spec.whatwg.org/#concept-node-length
+ */
+@property (nonatomic, assign) NSUInteger length;
+
+/**
+ @abstract Use concrete subclasses of the HTML Node.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Checks whether this node has child nodes.
+
+ @return `YES` if this node has any children, `NO` otherwise.
+ */
+- (BOOL)hasChildNodes;
+
+/**
+ Checks whether this node has child nodes of the given type.
+
+ @param type The type to check.
+ @return `YES` if this node has any children of the given type, `NO` otherwise.
+ */
+- (BOOL)hasChildNodeOfType:(HTMLNodeType)type;
+
+/**
+ Returns the cound of child nodes.
+
+ @return The child nodes count.
+ */
+- (NSUInteger)childNodesCount;
+
+/**
+ Checks whether the node is empty as described in https://dom.spec.whatwg.org/#concept-node-length
+
+ @return `YES` if the node is empty, `NO` otherwise.
+ */
+- (BOOL)isEmpty;
+
+/**
+ Clones this node.
+
+ @param deep If `YES` then also clones child nodes. Otherwise a shallow clone is returned, which behaves the same as `copy`.
+ @return A clone of this node.
+ */
+- (instancetype)cloneNodeDeep:(BOOL)deep;
+
+/**
+ Returns the child node at a given index.
+
+ @param index The index at which to return the child node.
+ @return The child node at a index. If index is greater than or equal to the value returned by count, an
+ NSRangeException is raised.
+ */
+- (HTMLNode *)childNodeAtIndex:(NSUInteger)index;
+
+/**
+ Returns the index of the given child node in the set of child nodes.
+
+ @param node The node.
+ @return The index of the given node in the children set.
+ */
+- (NSUInteger)indexOfChildNode:(HTMLNode *)node;
+
+/**
+ Returns the cound of child elements.
+
+ @discussion This method count only nodes of type HTMLNodeElement.
+
+ @return The child elements count.
+ */
+- (NSUInteger)childElementsCount;
+
+/**
+ Returns the child element at a given index.
+
+ @param index The index at which to return the child element.
+ @return The child element at a index. If index is greater than or equal to the value returned by count, an
+ NSRangeException is raised.
+ */
+- (HTMLElement *)childElementAtIndex:(NSUInteger)index;
+
+/**
+ Returns the index of the given child element in the set of child nodes.
+
+ @param element The element.
+ @return The index of the given element in the children set.
+ */
+- (NSUInteger)indexOfChildElement:(HTMLElement *)element;
+
+/**
+ Prepends the given node to the set of child nodes.
+
+ @param node The node to prepend.
+ @return The node being prepended.
+ */
+- (HTMLNode *)prependNode:(HTMLNode *)node;
+
+/**
+ Prepends the given array of nodes to the set of child nodes.
+
+ @param nodes The nodes to prepend.
+ */
+- (void)prependNodes:(NSArray *)nodes;
+
+/**
+ Appends the given node to the set of child nodes.
+
+ @param node The node to append.
+ @return The node being appended.
+ */
+- (HTMLNode *)appendNode:(HTMLNode *)node;
+
+/**
+ Appends the given array of nodes to the set of child nodes.
+
+ @param nodes The nodes to append.
+ */
+- (void)appendNodes:(NSArray *)nodes;
+
+/**
+ Inserts a given node before a child node.
+
+ @param node The node to insert.
+ @param child A reference child node before which the new node should be inserted. If child is `nil` then the new node
+ will be inserted as the last child node.
+ @return The node being inserted.
+ */
+- (HTMLNode *)insertNode:(HTMLNode *)node beforeChildNode:(nullable HTMLNode *)child;
+
+/**
+ Replaces a given child node whith new node.
+
+ @param child The child node to replace.
+ @param replacement The replacement node.
+ @return The replacement node.
+ */
+- (HTMLNode *)replaceChildNode:(HTMLNode *)child withNode:(HTMLNode *)replacement;
+
+/**
+ Replaces all child nodes with the given node.
+
+ @param node The node which will replace all child nodes.
+ */
+- (void)replaceAllChildNodesWithNode:(HTMLNode *)node;
+
+/**
+ Removes this node from its parent.
+
+ @discussion This will detach the node from its parent and in turn from its previous document.
+ */
+- (void)removeFromParentNode;
+
+/**
+ Removes the given child node from children.
+
+ @param node The node to remove.
+ */
+- (HTMLNode *)removeChildNode:(HTMLNode *)node;
+
+/**
+ Removes the child node at index from children.
+
+ @param index The index of the node to remove.
+ */
+- (HTMLNode *)removeChildNodeAtIndex:(NSUInteger)index;
+
+/**
+ Changes children ownership from this node to the given node.
+
+ @discussion Running this method will append all children of this node to the given node. This node will have no children
+ afterwards.
+
+ @param node The node which will reparent children of this node.
+ */
+- (void)reparentChildNodesIntoNode:(HTMLNode *)node;
+
+/**
+ Removes all child nodes.
+ */
+- (void)removeAllChildNodes;
+
+/**
+ Compares the position of this node with the given node in the document.
+
+ @param node The node with which to comapre the position.
+ @return The HTMLDocumentPosition of this node in relation to the given node.
+
+ @see HTMLDocumentPosition
+ */
+- (HTMLDocumentPosition)compareDocumentPositionWithNode:(HTMLNode *)node;
+
+/**
+ Checks whether this node is descendant of the given node.
+
+ @param node The node to check.
+ @return `YES` if this node is descendant of the gicen node, `NO` otherwsie.
+ */
+- (BOOL)isDescendantOfNode:(HTMLNode *)node;
+
+/**
+ Checks whether this node contains the given node. This performs an `invlusive ancestor` check, i.e. it returns `YES`
+ if the given node is the same object as this node.
+
+ @param node The node to check.
+ @return `YES` if this node contains the given node, `NO` otherwsie.
+ */
+- (BOOL)containsNode:(HTMLNode *)node;
+
+/**
+ Enumerates and applies `block` on each child node.
+
+ @block The block to run for each child node.
+ */
+- (void)enumerateChildNodesUsingBlock:(void (^)(HTMLNode *node, NSUInteger idx, BOOL *stop))block;
+
+/**
+ Enumerates and applies `block` on each child element.
+
+ @discussion This method only enumerates child elements.
+
+ @block The block to run for each child element.
+ */
+- (void)enumerateChildElementsUsingBlock:(void (^)(HTMLElement *element, NSUInteger idx, BOOL *stop))block;
+
+/**
+ Returns a node iterator rooted at this node whith no filter and HTMLNodeFilterShowAll.
+
+ @return A new node iterator whose root is this node.
+
+ @see HTMLNodeIterator
+ @see HTMLNodeFilterShowOptions
+ */
+- (HTMLNodeIterator *)nodeIterator;
+
+/**
+ Returns a node iterator rooted at this node.
+
+ @param showOptions The iterator's show options.
+ @param filter The iterator's filter.
+ @return A new node iterator whose root is this node.
+
+ @see HTMLNodeIterator
+ @see HTMLNodeFilterShowOptions
+ */
+- (HTMLNodeIterator *)nodeIteratorWithShowOptions:(HTMLNodeFilterShowOptions)showOptions
+ filter:(nullable id)filter;
+
+/**
+ Returns a node iterator rooted at this node.
+
+ @param showOptions The iterator's show options.
+ @param filter The iterator's filter block.
+ @return A new node iterator whose root is this node.
+
+ @see HTMLNodeIterator
+ @see HTMLNodeFilterShowOptions
+ */
+- (HTMLNodeIterator *)nodeIteratorWithShowOptions:(HTMLNodeFilterShowOptions)showOptions
+ filterBlock:(HTMLNodeFilterValue (^)(HTMLNode *node))filter;
+
+/**
+ Returns the first element in the DOM tree rooted at this node, that is matched by the given selector string.
+
+ @param selector The CSS seletor string.
+ @return The first element that is matched by the parsed selector. Rerturns `nil` if the selector could not be parsed
+ or no element was matched.
+
+ @see firstElementMatchingSelector:
+ @see CSSSelector
+ */
+- (nullable HTMLElement *)querySelector:(NSString *)selector;
+
+/**
+ Returns all elements in the DOM tree rooted at this node, that are matched by the given selector string.
+
+ @param selector The CSS seletor string.
+ @return The elements that are matched by the parsed selector. Rerturns an empty array if the selector could not be parsed
+ or no elements were matched.
+
+ @see elementsMatchingSelector:
+ @see CSSSelector
+ */
+- (NSArray *)querySelectorAll:(NSString *)selector;
+
+/**
+ Returns the first element in the DOM tree rooted at this node, that is matched by the given selector.
+
+ @param selector The CSS seletor.
+ @return The first element that is matched by the parsed selector. Rerturns `nil` if no element was matched.
+
+ @see CSSSelector
+ */
+- (nullable HTMLElement *)firstElementMatchingSelector:(CSSSelector *)selector;
+
+/**
+ Returns all elements in the DOM tree rooted at this node, that are matched by the given selector.
+
+ @param selector The CSS seletor.
+ @return The elements that are matched by the parsed selector. Rerturns an empty array if no elements were matched.
+
+ @see CSSSelector
+ */
+- (NSArray *)elementsMatchingSelector:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeFilter.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeFilter.h
new file mode 100644
index 0000000..611bcc2
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeFilter.h
@@ -0,0 +1,98 @@
+//
+// HTMLNodeFilter.h
+// HTMLKit
+//
+// Created by Iska on 27/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The node filter's value when applied to a given HTML node. The node filter can either accept a node, skip it, or
+ reject it. Rejecting a node means skipping the node itself and all of it descendants.
+ */
+typedef NS_ENUM(unsigned short, HTMLNodeFilterValue)
+{
+ HTMLNodeFilterAccept = 1,
+ HTMLNodeFilterReject = 2,
+ HTMLNodeFilterSkip = 3
+};
+
+/**
+ The show options for the HTML node iterator and tree walker.
+
+ @see HTMLNodeIterator
+ @see HTMLTreeWalker
+ */
+typedef NS_OPTIONS(unsigned long, HTMLNodeFilterShowOptions)
+{
+ HTMLNodeFilterShowAll = 0xFFFFFFFF,
+ HTMLNodeFilterShowElement = 0x1,
+ HTMLNodeFilterShowText = 0x4,
+ HTMLNodeFilterShowComment = 0x80,
+ HTMLNodeFilterShowDocument = 0x100,
+ HTMLNodeFilterShowDocumentType = 0x200,
+ HTMLNodeFilterShowDocumentFragment = 0x400
+};
+
+
+#pragma mark - Node Filter
+
+@class HTMLNode;
+
+/**
+ A HTML Node Filter which can be used with a node iterator or a tree walker.
+
+ @see HTMLNodeIterator
+ @see HTMLTreeWalker
+ */
+@protocol HTMLNodeFilter
+@required
+/**
+ The implementation should return a HTMLNodeFilterValue to indicate accepting, skipping or rejecting a node.
+
+ @param node The node to be filtered.
+ @return `HTMLNodeFilterAccept` if accepted, `HTMLNodeFilterSkip` if skipped, or `HTMLNodeFilterReject` if rejected.
+ */
+- (HTMLNodeFilterValue)acceptNode:(HTMLNode *)node;
+
+@end
+
+#pragma mark - Block Filter
+
+/**
+ A concrete block-based HTML Node Filter implementation.
+ */
+@interface HTMLNodeFilterBlock : NSObject
+
+/**
+ Initializes and returns a new instance of this filter.
+
+ @param block The block to apply on each node to be filtered.
+ */
++ (instancetype)filterWithBlock:(HTMLNodeFilterValue (^)(HTMLNode *node))block;
+
+@end
+
+#pragma mark - CSS Selector Filter
+
+@class CSSSelector;
+
+/**
+ A concrete css-selector-based HTML Node Filter implementation.
+ */
+@interface HTMLSelectorNodeFilter : NSObject
+
+/**
+ Initializes and returns a new instance of this filter.
+
+ @param selector The selector to apply on each node to be filtered.
+ */
++ (instancetype)filterWithSelector:(CSSSelector *)selector;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator+Private.h
new file mode 100644
index 0000000..3714eac
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator+Private.h
@@ -0,0 +1,28 @@
+//
+// HTMLNodeIterator+Private.h
+// HTMLKit
+//
+// Created by Iska on 27/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNodeIterator.h"
+#import "HTMLNode.h"
+
+/**
+ Private HTML Node Iterator methods which are not intended for public API.
+ */
+@interface HTMLNodeIterator (Private)
+
+/**
+ Runs the necessary steps after removing a node from the DOM.
+
+ @param oldNode The old node that was removed.
+ @param oldParent The old parent of the node that was removed.
+ @param oldPreviousSibling The old previous sibling node of the node that was removed.
+ */
+- (void)runRemovingStepsForNode:(HTMLNode *)oldNode
+ withOldParent:(HTMLNode *)oldParent
+ andOldPreviousSibling:(HTMLNode *)oldPreviousSibling;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator.h
new file mode 100644
index 0000000..ecf34ed
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeIterator.h
@@ -0,0 +1,95 @@
+//
+// HTMLNodeIterator.h
+// HTMLKit
+//
+// Created by Iska on 27/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLNodeFilter.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLNode;
+
+/**
+ A HTML Node Iterator, which iterates the nodes in the DOM in tree order, i.e. depth-first traversal of the tree.
+
+ https://dom.spec.whatwg.org/#interface-nodeiterator
+ */
+@interface HTMLNodeIterator : NSEnumerator
+
+/**
+ The root element of this iterator, i.e. the traversed tree is rooted at this element.
+ */
+@property (nonatomic, strong, readonly) HTMLNode *root;
+
+/**
+ The current reference node.
+ */
+@property (nonatomic, strong, readonly) HTMLNode *referenceNode;
+
+/**
+ Whether the iterator's pointer is before the reference node.
+ */
+@property (nonatomic, assign, readonly) BOOL pointerBeforeReferenceNode;
+
+/**
+ The iterator's show options. These options control what types of elements are shown or skipped during iteration.
+
+ @see HTMLNodeFilterShowOptions
+ */
+@property (nonatomic, assign, readonly) HTMLNodeFilterShowOptions whatToShow;
+
+/**
+ A node filter, that is applied to each node during iteration.
+
+ @see HTMLNodeFilter
+ */
+@property (nonatomic, strong, readonly, nullable) id filter;
+
+
+/**
+ Initializes a new node iterator with no filter and HTMLNodeFilterShowAll show options.
+
+ @param node The root node.
+ @return A new instance of a node iterator.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node;
+
+/**
+ Initializes a new node iterator with HTMLNodeFilterShowAll show options.
+
+ @param node The root node.
+ @param filter The node filter to use.
+ @return A new instance of a node iterator.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node
+ filter:(nullable id)filter;
+
+/**
+ Initializes a new node iterator.
+
+ @param node The root node.
+ @param showOptions The show options for the iterator.
+ @param filter The node filter to use.
+ @return A new instance of a node iterator.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node
+ showOptions:(HTMLNodeFilterShowOptions)showOptions
+ filter:(nullable id)filter;
+
+/**
+ @return The next iterated node in tree order, `nil` if there are no more nodes to iterate.
+ */
+- (nullable HTMLNode *)nextNode;
+
+/**
+ @return The previous iterated node in tree order, `nil` if there are no more nodes to iterate.
+ */
+- (nullable HTMLNode *)previousNode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeTraversal.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeTraversal.h
new file mode 100644
index 0000000..bd40058
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeTraversal.h
@@ -0,0 +1,21 @@
+//
+// HTMLNodeTraversal.h
+// HTMLKit
+//
+// Created by Iska on 05/06/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLNodeFilter.h"
+
+@class HTMLNode;
+
+extern HTMLNode * PrecedingNode(HTMLNode *node, HTMLNode *root);
+extern HTMLNode * FollowingNode(HTMLNode *node, HTMLNode *root);
+extern HTMLNode * FollowingNodeSkippingChildren(HTMLNode *node, HTMLNode *root);
+extern HTMLNodeFilterValue FilterNode(id filter, HTMLNodeFilterShowOptions whatToShow, HTMLNode *node);
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeVisitor.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeVisitor.h
new file mode 100644
index 0000000..3f78f57
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLNodeVisitor.h
@@ -0,0 +1,59 @@
+//
+// HTMLNodeVisitor.h
+// HTMLKit
+//
+// Created by Iska on 30.07.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLNode;
+
+#pragma mark - Node Visitor
+
+/**
+ A HTML Node Visitor which can be used with a tree visitor.
+
+ @see HTMLTreeVisitor
+ */
+@protocol HTMLNodeVisitor
+@required
+
+/**
+ Called when visiting the node for the first time
+
+ @param node The node that is beaing visited for the first time.
+ */
+- (void)enter:(HTMLNode *)node;
+
+/**
+ Called when leaving a previously entered node, i.e. when all its child nodes are visited.
+
+ @param node The node that beaing leaved.
+ */
+- (void)leave:(HTMLNode *)node;
+
+@end
+
+#pragma mark - Block Node Visitor
+
+/**
+ A concrete block-based HTML Node Visitor implementation.
+ */
+@interface HTMLNodeVisitorBlock : NSObject
+
+/**
+ Initializes and returns a new instance of this visitor.
+
+ @param enterBlock The block to apply on entering a visited node.
+ @param leaveBlock The block to apply on leaving a visited node.
+ */
++ (instancetype)visitorWithEnterBlock:(void (^)(HTMLNode *node))enterBlock
+ leaveBlock:(void (^)(HTMLNode *node))leaveBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLOrderedDictionary.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLOrderedDictionary.h
new file mode 100644
index 0000000..b3b427a
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLOrderedDictionary.h
@@ -0,0 +1,90 @@
+//
+// HTMLOrderedDictionary.h
+// HTMLKit
+//
+// Created by Iska on 14/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ An ordered mutable dictionary, that preserves the order of its keys.
+ */
+@interface HTMLOrderedDictionary : NSMutableDictionary
+
+/**
+ Returns the object at the specified index.
+
+ @param index An index within the bounds of the dictionary.
+ @return The object located at index.
+ */
+- (ObjectType)objectAtIndex:(NSUInteger)index;
+
+/**
+ Sets the object for the given key at the specified index.
+
+ @param anObject The object.
+ @param aKey The key.
+ @param index An index within the bounds of the dictionary.
+ */
+- (void)setObject:(ObjectType)anObject forKey:(KeyType)aKey atIndex:(NSUInteger)index;
+
+/**
+ Removes the key-value pair located at the specified index.
+
+ @param index An index within the bounds of the dictionary.
+ */
+- (void)removeObjectAtIndex:(NSUInteger)index;
+
+/**
+ Replaces the key-value pair located at the specified index.
+
+ @param index An index within the bounds of the dictionary.
+ @param anObject The new object.
+ @param aKey The new key.
+ */
+- (void)replaceKeyValueAtIndex:(NSUInteger)index withObject:(ObjectType)anObject andKey:(KeyType)aKey;
+
+/**
+ Replaces a key keeping the same object.
+
+ @param aKey The old key to replace.
+ @param newKey The new key.
+ */
+- (void)replaceKey:(KeyType)aKey withKey:(KeyType)newKey;
+
+/**
+ Returns the index of the given key in the dictionary.
+
+ @param aKey The key.
+ @return The index of the given key in the dictionary.
+ */
+- (NSUInteger)indexOfKey:(KeyType)aKey;
+
+/**
+ Returns the object at the specified index.
+
+ @param index An index within the bounds of the dictionary.
+ @return The object located at index.
+ */
+- (ObjectType)objectAtIndexedSubscript:(NSUInteger)index;
+
+/**
+ Replaces the object at the index with the new object.
+
+ @param obj The obj with which to replace the object at given index in the dictionary.
+ @param index The index of the object to be replaced.
+ */
+- (void)setObject:(ObjectType)obj atIndexedSubscript:(NSUInteger)index;
+
+/**
+ @return A reverse key enumerator.
+ */
+- (NSEnumerator *)reverseKeyEnumerator;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParseErrorToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParseErrorToken.h
new file mode 100644
index 0000000..8b46e24
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParseErrorToken.h
@@ -0,0 +1,39 @@
+//
+// HTMLParseErrorToken.h
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+
+/**
+ HTML Parse Error Token
+ */
+@interface HTMLParseErrorToken : HTMLToken
+
+/** @brief The parse error's code as specified at https://html.spec.whatwg.org/multipage/parsing.html#parse-errors. */
+@property (nonatomic, strong, readonly) NSString *code;
+
+/** @brief Additional detailed error information. */
+@property (nonatomic, strong, readonly) NSString *details;
+
+/** @brief The error's location in the stream. */
+@property (nonatomic, assign, readonly) NSUInteger location;
+
+/**
+ Initializes a new Parse Error token.
+
+ @param code The parse error's as specified at https://html.spec.whatwg.org/multipage/parsing.html#parse-errors.
+ @param location The error's location in the stream.
+ @return A new instance of a parse error token.
+ */
+- (instancetype)initWithCode:(NSString *)code details:(NSString *)details location:(NSUInteger)location;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser+Private.h
new file mode 100644
index 0000000..35db646
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser+Private.h
@@ -0,0 +1,23 @@
+//
+// HTLMLParser+Private.h
+// HTMLKit
+//
+// Created by Iska on 27/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLParser.h"
+#import "HTMLElement.h"
+
+/**
+ Private HTML Parser properties & methods which are not intended for public API.
+ */
+@interface HTMLParser (Private)
+
+/**
+ The adjusted current node in the context of HTML parsing as described in:
+ https://html.spec.whatwg.org/#adjusted-current-node
+ */
+@property (nonatomic, strong, readonly) HTMLElement *adjustedCurrentNode;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser.h
new file mode 100644
index 0000000..d5fe596
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParser.h
@@ -0,0 +1,74 @@
+//
+// HTMLParser.h
+// HTMLKit
+//
+// Created by Iska on 04/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLElement.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The HTML Parser.
+ Parses HTML strings to valid HTML documents and/or fragments. This parser implements the WHATWG specification:
+ https://html.spec.whatwg.org/multipage/syntax.html#tree-construction
+
+ @see HTMLDocument
+ @see HTMLElement
+ */
+@interface HTMLParser : NSObject
+
+/**
+ An array of errors that occurred during document parsing.
+ */
+@property (nonatomic, strong, readonly) NSArray *parseErrors;
+
+/**
+ The parsed HTML Document.
+
+ @see HTMLDocument
+ */
+@property (nonatomic, strong, readonly) HTMLDocument *document;
+
+/**
+ Intializes a new parser instance with a given HTML string.
+
+ @discussion The parser assumes a UTF-8 encoded string and does not implement the encoding sniffing algorithm that is
+ described under the following section of the specification:
+ https://html.spec.whatwg.org/multipage/syntax.html#determining-the-character-encoding
+
+ @param string The HTML string to parse
+ @return A new instance of the HTML parser.
+ */
+- (instancetype)initWithString:(NSString *)string;
+
+/**
+ Runs the parsing algorithm and generates a valid HTML document object.
+
+ @return A HTML document object that is the result of parsing the HTML string, with which this parser instance was
+ initialized
+
+ @see HTMLDocument
+ */
+- (HTMLDocument *)parseDocument;
+
+/**
+ Runs the HTML fragment parsing algorithm with the provided context element. The algorithm is sprecified under the
+ following section: https://html.spec.whatwg.org/multipage/syntax.html#parsing-html-fragments
+
+ @discussion The fragment parsing algorithm can be run multiple times with different context elements on the same parser
+ instance. In this case the parser will reset its internal state and re-run the parsing algorithm.
+
+ @param contextElement A context element used for parsing a HTML fragment
+ @return An array of HTML elements, that are the result of parsing the given HTML string with the given context element.
+
+ @see HTMLElement
+ */
+- (NSArray *)parseFragmentWithContextElement:(HTMLElement *)contextElement;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParserInsertionModes.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParserInsertionModes.h
new file mode 100644
index 0000000..c86dde0
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLParserInsertionModes.h
@@ -0,0 +1,43 @@
+//
+// HTMLParserInsertionMode.h
+// HTMLKit
+//
+// Created by Iska on 05/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#define INSERTION_MODES \
+ MODE_ENTRY( HTMLInsertionModeInitial, = 0 ) \
+ MODE_ENTRY( HTMLInsertionModeBeforeHTML, ) \
+ MODE_ENTRY( HTMLInsertionModeBeforeHead, ) \
+ MODE_ENTRY( HTMLInsertionModeInHead, ) \
+ MODE_ENTRY( HTMLInsertionModeInHeadNoscript, ) \
+ MODE_ENTRY( HTMLInsertionModeAfterHead, ) \
+ MODE_ENTRY( HTMLInsertionModeInBody, ) \
+ MODE_ENTRY( HTMLInsertionModeText, ) \
+ MODE_ENTRY( HTMLInsertionModeInTable, ) \
+ MODE_ENTRY( HTMLInsertionModeInTableText, ) \
+ MODE_ENTRY( HTMLInsertionModeInCaption, ) \
+ MODE_ENTRY( HTMLInsertionModeInColumnGroup, ) \
+ MODE_ENTRY( HTMLInsertionModeInTableBody, ) \
+ MODE_ENTRY( HTMLInsertionModeInRow, ) \
+ MODE_ENTRY( HTMLInsertionModeInCell, ) \
+ MODE_ENTRY( HTMLInsertionModeInSelect, ) \
+ MODE_ENTRY( HTMLInsertionModeInSelectInTable, ) \
+ MODE_ENTRY( HTMLInsertionModeInTemplate, ) \
+ MODE_ENTRY( HTMLInsertionModeAfterBody, ) \
+ MODE_ENTRY( HTMLInsertionModeInFrameset, ) \
+ MODE_ENTRY( HTMLInsertionModeAfterFrameset, ) \
+ MODE_ENTRY( HTMLInsertionModeAfterAfterBody, ) \
+ MODE_ENTRY( HTMLInsertionModeAfterAfterFrameset, ) \
+
+typedef NS_ENUM(NSUInteger, HTMLInsertionMode)
+{
+#define MODE_ENTRY( name, value ) name value,
+ INSERTION_MODES
+#undef MODE_ENTRY
+};
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLQuirksMode.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLQuirksMode.h
new file mode 100644
index 0000000..4b127d0
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLQuirksMode.h
@@ -0,0 +1,83 @@
+//
+// HTMLQuirksMode.h
+// HTMLKit
+//
+// Created by Iska on 28/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+/**
+ HTML quirks modes
+ https://html.spec.whatwg.org/multipage/infrastructure.html#quirks-mode
+ */
+typedef NS_ENUM(short, HTMLQuirksMode)
+{
+ HTMLQuirksModeNoQuirks,
+ HTMLQuirksModeQuirks,
+ HTMLQuirksModeLimitedQuirks
+};
+
+#define QUIRKS_MODE_PREFIXES \
+ QUIRKS_ENTRY( "+//Silmaril//dtd html Pro v0r11 19970101//" ) \
+ QUIRKS_ENTRY( "-//AS//DTD HTML 3.0 asWedit + extensions//" ) \
+ QUIRKS_ENTRY( "-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0 Level 1//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0 Level 2//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0 Strict Level 1//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0 Strict Level 2//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0 Strict//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.0//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 2.1E//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 3.0//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 3.2 Final//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 3.2//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML 3//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Level 0//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Level 1//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Level 2//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Level 3//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Strict Level 0//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Strict Level 1//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Strict Level 2//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Strict Level 3//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML Strict//" ) \
+ QUIRKS_ENTRY( "-//IETF//DTD HTML//" ) \
+ QUIRKS_ENTRY( "-//Metrius//DTD Metrius Presentational//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 2.0 HTML//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 2.0 Tables//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 3.0 HTML//" ) \
+ QUIRKS_ENTRY( "-//Microsoft//DTD Internet Explorer 3.0 Tables//" ) \
+ QUIRKS_ENTRY( "-//Netscape Comm. Corp.//DTD HTML//" ) \
+ QUIRKS_ENTRY( "-//Netscape Comm. Corp.//DTD Strict HTML//" ) \
+ QUIRKS_ENTRY( "-//O'Reilly and Associates//DTD HTML 2.0//" ) \
+ QUIRKS_ENTRY( "-//O'Reilly and Associates//DTD HTML Extended 1.0//" ) \
+ QUIRKS_ENTRY( "-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//" ) \
+ QUIRKS_ENTRY( "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//" ) \
+ QUIRKS_ENTRY( "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//" ) \
+ QUIRKS_ENTRY( "-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//" ) \
+ QUIRKS_ENTRY( "-//Spyglass//DTD HTML 2.0 Extended//" ) \
+ QUIRKS_ENTRY( "-//Sun Microsystems Corp.//DTD HotJava HTML//" ) \
+ QUIRKS_ENTRY( "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 3 1995-03-24//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 3.2 Draft//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 3.2 Final//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 3.2//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 3.2S Draft//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 4.0 Frameset//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML 4.0 Transitional//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML Experimental 19960712//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD HTML Experimental 970421//" ) \
+ QUIRKS_ENTRY( "-//W3C//DTD W3 HTML//" ) \
+ QUIRKS_ENTRY( "-//W3O//DTD W3 HTML 3.0//" ) \
+ QUIRKS_ENTRY( "-//WebTechs//DTD Mozilla HTML 2.0//" ) \
+ QUIRKS_ENTRY( "-//WebTechs//DTD Mozilla HTML//" )
+
+static NSString * HTMLQuirksModePrefixes[] = {
+#define QUIRKS_ENTRY( prefix ) @prefix,
+ QUIRKS_MODE_PREFIXES
+#undef QUIRKS_ENTRY
+};
+
+extern BOOL QuirksModePrefixMatch(NSString *publicIdentifier);
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange+Private.h
new file mode 100644
index 0000000..e745578
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange+Private.h
@@ -0,0 +1,61 @@
+//
+// HTMLRange+Private.h
+// HTMLKit
+//
+// Created by Iska on 27/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLRange.h"
+#import "HTMLCharacterData.h"
+
+@interface HTMLRange ()
+
+/**
+ Runs the necessary steps after removing data from a character data node that may be a range's boundary.
+
+ @param node The character data node.
+ @param offset The offset at which the data was removed.
+ @param length The length of the data that was removed.
+ */
+- (void)didRemoveCharacterDataInNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length;
+
+/**
+ Runs the necessary steps after adding data to a character data node that may be a range's boundary.
+
+ @param node The character data node.
+ @param offset The offset at which the data was added.
+ @param length The length of the data that was added.
+ */
+- (void)didAddCharacterDataToNode:(HTMLCharacterData *)node atOffset:(NSUInteger)offset withLength:(NSUInteger)length;
+
+/**
+ Runs the necessary steps after inserting a new text node when an old text node is split.
+
+ @param newNode The new text node after splitting.
+ @param parent The parent where newNode was inserted.
+ @param node The old text node that was split.
+ @param offset The offset of splitting.
+ */
+- (void)didInsertNewTextNode:(HTMLText *)newNode intoParent:(HTMLNode *)parent afterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset;
+
+/**
+ Runs the necessary steps to clamp the range whose end boundary is after the text node upon splitting it.
+
+ @param node The text node that was split.
+ @param offset The offset of splitting
+ */
+- (void)clampRangesAfterSplittingTextNode:(HTMLText *)node atOffset:(NSUInteger)offset;
+
+/**
+ Runs the necessary steps after removing a node from the DOM.
+
+ @param oldNode The old node that was removed.
+ @param oldParent The old parent of the node that was removed.
+@param oldPreviousSibling The old previous sibling node of the node that was removed.
+ */
+- (void)runRemovingStepsForNode:(HTMLNode *)oldNode
+ withOldParent:(HTMLNode *)oldParent
+ andOldPreviousSibling:(HTMLNode *)oldPreviousSibling;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange.h
new file mode 100644
index 0000000..3cc4950
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLRange.h
@@ -0,0 +1,265 @@
+//
+// HTMLRange.h
+// HTMLKit
+//
+// Created by Iska on 20/11/16.
+// Copyright © 2016 BrainCookie. All rights reserved.
+//
+
+#import "HTMLNode.h"
+#import "HTMLDocumentFragment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ The comparison method of range boundaries
+
+ - HTMLRangeComparisonMethodStartToStart: Compares the start boundary-point of sourceRange to the start boundary-point of this range.
+ - HTMLRangeComparisonMethodStartToEnd: Compares the start boundary-point of sourceRange to the end boundary-point of this range.
+ - HTMLRangeComparisonMethodEndToEnd: Compares the end boundary-point of sourceRange to the end boundary-point of this range.
+ - HTMLRangeComparisonMethodEndToStart: Compares the end boundary-point of sourceRange to the start boundary-point of this range.
+ */
+typedef NS_ENUM(unsigned short, HTMLRangeComparisonMethod)
+{
+ HTMLRangeComparisonMethodStartToStart = 0,
+ HTMLRangeComparisonMethodStartToEnd = 1,
+ HTMLRangeComparisonMethodEndToEnd = 2,
+ HTMLRangeComparisonMethodEndToStart = 3
+};
+
+#pragma mark - DOM Range
+
+/**
+ A HTML Range, represents a sequence of content within a node tree.
+ Each range has a start and an end which are boundary points.
+ A boundary point is a tuple consisting of a node and a non-negative numeric offset.
+
+ https://dom.spec.whatwg.org/#ranges
+ */
+@interface HTMLRange : NSObject
+
+/**
+ The node of the start boundary point.
+ */
+@property (nonatomic, readonly, strong) HTMLNode *startContainer;
+
+/**
+ The offset of the start boundary point.
+ */
+@property (nonatomic, readonly, assign) NSUInteger startOffset;
+
+/**
+ The node of the end boundary point.
+ */
+@property (nonatomic, readonly, strong) HTMLNode *endContainer;
+
+/**
+ The offset of the end boundary point.
+ */
+@property (nonatomic, readonly, assign) NSUInteger endOffset;
+
+/**
+ Checks whether the range is collapsed, i.e. if start is the same as end.
+
+ @return `YES` if the range is collapsed, `NO` otherwise.
+ */
+@property (nonatomic, readonly, assign, getter=isCollapsed) BOOL collapsed;
+
+/**
+ The common container node that contains both start and end nodes.
+ */
+@property (nonatomic, readonly, weak) HTMLNode *commonAncestorContainer;
+
+/**
+ @abstract A range is always associated with a HTML Document. Use `initWithDocument:` initializer instead.
+ */
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ Initializes a new range instance for the given document.
+
+ @param document The HTML doucment for which the range will be constructed.
+ @return A new HTML Range instance.
+ */
+- (instancetype)initWithDocument:(HTMLDocument *)document;
+
+/**
+ Deprecated due to typo.
+ */
+- (instancetype)initWithDowcument:(HTMLDocument *)document __attribute__((deprecated("Replaced by -initWithDocument:")));
+
+/**
+ Initializes a new range instance for the given document and boundaries.
+
+ @param document The HTML doucment for which the range will be constructed.
+ @param startContainer The node for the start boundary
+ @param startOffset The offset of the start boundary
+ @param endContainer The node for the end boundary
+ @param endOffset The offset of the end boundary
+ @return A new HTML Range instance.
+ */
+- (instancetype)initWithDocument:(HTMLDocument *)document
+ startContainer:(HTMLNode *)startContainer startOffset:(NSUInteger)startOffset
+ endContainer:(HTMLNode *)endContainer endOffset:(NSUInteger)endOffset;
+
+/**
+ Deprecated due to typo.
+ */
+- (instancetype)initWithDowcument:(HTMLDocument *)document
+ startContainer:(HTMLNode *)startContainer startOffset:(NSUInteger)startOffset
+ endContainer:(HTMLNode *)endContainer endOffset:(NSUInteger)endOffset
+ __attribute__((deprecated("Replaced by -initWithDocument:startContainer:startOffset:endContainer:endOffset:")));
+
+/**
+ Sets the start boundary.
+
+ @param node The new node of the start boundary.
+ @param offset The new offset of the start boundary.
+ */
+- (void)setStartNode:(HTMLNode *)node startOffset:(NSUInteger)offset;
+
+/**
+ Sets the end boundary.
+
+ @param node The new node of the end boundary.
+ @param offset The new offset of the end boundary.
+ */
+- (void)setEndNode:(HTMLNode *)node endOffset:(NSUInteger)offset;
+
+/**
+ Sets the start boundary before the given node.
+
+ @param node The node before which the boundary will be set.
+ */
+- (void)setStartBeforeNode:(HTMLNode *)node;
+
+/**
+ Sets the start boundary after the given node.
+
+ @param node The node after which the boundary will be set.
+ */
+- (void)setStartAfterNode:(HTMLNode *)node;
+
+/**
+ Sets the end boundary before the given node.
+
+ @param node The node before which the boundary will be set.
+ */
+- (void)setEndBeforeNode:(HTMLNode *)node;
+
+/**
+ Sets the end boundary after the given node.
+
+ @param node The node after which the boundary will be set.
+ */
+- (void)setEndAfterNode:(HTMLNode *)node;
+
+/**
+ Collapses this range to its start.
+ */
+- (void)collapseToStart;
+
+/**
+ Collapses this range to its end.
+ */
+- (void)collapseToEnd;
+
+/**
+ Selects the given node in the range.
+
+ @param node The node to select
+ */
+- (void)selectNode:(HTMLNode *)node;
+
+/**
+ Selects the node's contents in the range.
+
+ @param node The node to select the contents.
+ */
+- (void)selectNodeContents:(HTMLNode *)node;
+
+/**
+ Compares the boundary points of the given range with this range.
+
+ @param method The comparison method.
+ @param sourceRange The source range for comparison.
+ @return `NSOrderedAscending` if ordered before, `NSOrderedSame` if ordered same, `NSOrderedDescending` otherwise.
+
+ @see HTMLRangeComparisonMethod
+ */
+- (NSComparisonResult)compareBoundaryPoints:(HTMLRangeComparisonMethod)method sourceRange:(HTMLRange *)sourceRange;
+
+/**
+ Compares the given point (reference node, offset) with this range.
+
+ @param node The node to compare with this range.
+ @param offset The offset inside the reference node.
+ @return `NSOrderedAscending`, `NSOrderedSame`, or `NSOrderedDescending` depending on whether the node is before, the same as, or after this range.
+ */
+- (NSComparisonResult)comparePoint:(HTMLNode *)node offset:(NSUInteger)offset;
+
+/**
+ Checks if the given point (reference node, offset) is in this range.
+
+ @param node The node to compare with this range.
+ @param offset The offset inside the reference node.
+ @return `YES` if the given point is in this range, `NO` otherwise.
+ */
+- (BOOL)containsPoint:(HTMLNode *)node offset:(NSUInteger)offset;
+
+/**
+ Checks if the given node intersects this range.
+
+ @param node The node to compare with this range.
+ @return `YES` if the given node intersects the range, `NO` otherwise.
+ */
+- (BOOL)intersectsNode:(HTMLNode *)node;
+
+/**
+ Deletes the contents represented by this range from the associated document.
+ */
+- (void)deleteContents;
+
+/**
+ Extracts the contents represented by this range from the associated document.
+
+ @return A document fragment with the extracted contents.
+ */
+- (HTMLDocumentFragment *)extractContents;
+
+/**
+ Clones the contents represented by this range in the associated document.
+
+ @return A document fragment with the cloned contents.
+ */
+- (HTMLDocumentFragment *)cloneContents;
+
+/**
+ Inserts the given node at the start of this range.
+
+ If the node is being added to a text node, then the text node is split at the insertion point and the given node
+ is inserted between the resulting text nodes.
+
+ @param node The node to insert.
+ */
+- (void)insertNode:(HTMLNode *)node;
+
+/**
+ Surrounds the contents of this range with the given node.
+
+ The range's boundaries will placed around the given node, i.e. start is before and end is after newParent.
+
+ @param newParent The new parent node which will surround the range.
+ */
+- (void)surroundContents:(HTMLNode *)newParent;
+
+/**
+ The stringifier of the range.
+
+ @return The text contents of the range.
+ */
+- (NSString *)textContent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLSerializer.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLSerializer.h
new file mode 100644
index 0000000..13b2e91
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLSerializer.h
@@ -0,0 +1,45 @@
+//
+// HTMLSerializer.h
+// HTMLKit
+//
+// Created by Iska on 28.07.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLNode;
+
+/**
+ The scope for HTML Serialization.
+ */
+typedef NS_ENUM(unsigned short, HTMLSerializationScope)
+{
+ HTMLSerializationScopeIncludeRoot = 1,
+ HTMLSerializationScopeChildrenOnly = 2
+};
+
+/**
+ A HTML DOM Serializer. Used to serialize HTML Tree rooted at a given node with the desired scope:
+
+ - IncludeRoot scope includes the given node into the serialized result, e.g. HTML Node's `outerHTML`
+ - ChildrenOnly scope serializes only the child nodes of the given node, e.g. HTML Node's `innerHTML`
+
+ https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments
+ */
+@interface HTMLSerializer : NSObject
+
+/**
+ Serializes the given node with the given scope.
+
+ @param node The root node of the tree to serialize
+ @param scope The scope for serialization
+ */
++ (NSString *)serializeNode:(HTMLNode *)node scope:(HTMLSerializationScope)scope;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLStackOfOpenElements.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLStackOfOpenElements.h
new file mode 100644
index 0000000..d379841
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLStackOfOpenElements.h
@@ -0,0 +1,213 @@
+//
+// HTMLStackOfOpenElements.h
+// HTMLKit
+//
+// Created by Iska on 08/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLElement.h"
+
+/**
+ The Stack of Open Elements. The stack grows downwards; the topmost node on the stack is the first one added to the
+ stack, and the bottommost node of the stack is the most recently added node in the stack
+
+ https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements
+ */
+@interface HTMLStackOfOpenElements : NSObject
+
+/** @brief The current node in the stack. It is the bottommost node. */
+- (HTMLElement *)currentNode;
+
+/** @brief The first node in the stack. */
+- (HTMLElement *)firstNode;
+
+/** @brief The last node in the stack. */
+- (HTMLElement *)lastNode;
+
+/**
+ Returns the object at the specified index.
+
+ @param index An index within the bounds of the stack.
+ @return The node located at index.
+ */
+- (id)objectAtIndexedSubscript:(NSUInteger)index;
+
+/**
+ Replaces the object at the index with the new object.
+
+ @param obj The node with which to replace the object at given index in the stack.
+ @param idx The index of the object to be replaced.
+ */
+- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
+
+/**
+ Returns the index of the given node in the stack.
+
+ @param node The node.
+ @return The index of the given node in the stack.
+ */
+- (NSUInteger)indexOfElement:(id)node;
+
+/**
+ Pushes the given element onto the stack.
+
+ @param element The element.
+ */
+- (void)pushElement:(HTMLElement *)element;
+
+/**
+ Removes the given element from the stack.
+
+ @param element The element.
+ */
+- (void)removeElement:(id)element;
+
+/**
+ Checks whether the given element is in the stack.
+
+ @param element The element.
+ @return `YES` if the element is in the stack, `NO` otherwise.
+ */
+- (BOOL)containsElement:(id)element;
+
+/**
+ Checks whether an element with the given tag name is in the stack.
+
+ @param tagName The element's tag name.
+ @return `YES` if such an element is in the stack, `NO` otherwise.
+ */
+- (BOOL)containsElementWithTagName:(NSString *)tagName;
+
+/**
+ Inserts the given element at the index into the stack.
+
+ @param element The element to insert.
+ @param index The index at which the element should be inserted.
+ */
+- (void)insertElement:(HTMLElement *)element atIndex:(NSUInteger)index;
+
+/**
+ Replaces the element at the given index in the stack with the new element.
+
+ @param index The index of the element to be replaced.
+ @param element The element with which to replace the element at given index in the stack.
+ */
+- (void)replaceElementAtIndex:(NSUInteger)index withElement:(HTMLElement *)element;
+
+/**
+ Pops current node from the stack.
+ */
+- (void)popCurrentNode;
+
+/**
+ Pops elements from the stack until an element with the given tag name is poped.
+
+ @param tagName The tag name.
+ */
+- (void)popElementsUntilElementPoppedWithTagName:(NSString *)tagName;
+
+/**
+ Pops elements from the stack until an element with any of the given tag names is poped.
+
+ @param tagNames The tag names.
+ */
+- (void)popElementsUntilAnElementPoppedWithAnyOfTagNames:(NSArray *)tagNames;
+
+/**
+ Pops elements from the stack until the given element is poped.
+
+ @param element The element.
+ */
+- (void)popElementsUntilElementPopped:(HTMLElement *)element;
+
+/**
+ Pops elements from the stack until a template element is poped.
+ */
+- (void)popElementsUntilTemplateElementPopped;
+
+/**
+ Clears the stack to a table context
+
+ https://html.spec.whatwg.org/multipage/syntax.html#clear-the-stack-back-to-a-table-context
+ */
+- (void)clearBackToTableContext;
+
+/**
+ Clears the stack to a table body context
+
+ https://html.spec.whatwg.org/multipage/syntax.html#clear-the-stack-back-to-a-table-body-context
+ */
+- (void)clearBackToTableBodyContext;
+
+/**
+ Clears the stack to a table context
+
+ https://html.spec.whatwg.org/multipage/syntax.html#clear-the-stack-back-to-a-table-row-context
+ */
+- (void)clearBackToTableRowContext;
+
+/**
+ Pops all nodes from the stack.
+ */
+- (void)popAll;
+
+/**
+ Methods for checking whether the stack contains elements in speccific scopes:
+
+ https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-the-specific-scope
+ */
+- (HTMLElement *)hasElementInScopeWithTagName:(NSString *)tagName;
+- (HTMLElement *)hasHeaderElementInScope;
+- (HTMLElement *)hasElementInTableScopeWithTagName:(NSString *)tagName;
+- (HTMLElement *)hasElementInTableScopeWithAnyOfTagNames:(NSArray *)tagNames;
+- (HTMLElement *)hasElementInListItemScopeWithTagName:(NSString *)tagName;
+- (HTMLElement *)hasElementInButtonScopeWithTagName:(NSString *)tagName;
+- (HTMLElement *)hasElementInSelectScopeWithTagName:(NSString *)tagName;
+
+/**
+ Returns the furthest block after a given index.
+
+ @discussion The furthest block is the topmost node in the stack of open elements that is lower in the stack than
+ formatting element, and is an element in the special category. This is used in the adoption agency algorithm:
+ https://html.spec.whatwg.org/multipage/syntax.html#adoption-agency-algorithm
+
+ @param index The index.
+ @return The furthest block after index.
+ */
+- (HTMLElement *)furthestBlockAfterIndex:(NSUInteger)index;
+
+/**
+ Returns the count of elements in this stack.
+
+ @return The elements count.
+ */
+- (NSUInteger)count;
+
+/**
+ Checks whether this stack is empty.
+
+ @return `YES` if the stack is empty, `NO` otherwise.
+ */
+- (BOOL)isEmpy;
+
+/**
+ Return an object enumerator over this stack.
+
+ @return An enumerator
+ */
+- (NSEnumerator *)enumerator;
+
+/**
+ Return a reverse object enumerator over this stack.
+
+ @return A reverse enumerator
+ */
+- (NSEnumerator *)reverseObjectEnumerator;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTagToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTagToken.h
new file mode 100644
index 0000000..287f1ec
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTagToken.h
@@ -0,0 +1,69 @@
+//
+// HTMLTagToken.h
+// HTMLKit
+//
+// Created by Iska on 23/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+#import "HTMLOrderedDictionary.h"
+
+/**
+ HTML Tag Token
+ */
+@interface HTMLTagToken : HTMLToken
+
+/** @brief The tag name. */
+@property (nonatomic, copy) NSString *tagName;
+
+/** @brief The tag's attributes. */
+@property (nonatomic, strong) HTMLOrderedDictionary *attributes;
+
+/** @brief Flag whether this tag is self-closing. */
+@property (nonatomic, assign, getter = isSelfClosing) BOOL selfClosing;
+
+/**
+ Initializes a new tag token.
+
+ @param tagName The tag's name.
+ @return A new instance of a tag token.
+ */
+- (instancetype)initWithTagName:(NSString *)tagName;
+
+/**
+ Initializes a new tag token.
+
+ @param tagName The tag's name.
+ @param attributes The tag's attributes.
+ @return A new instance of a tag token.
+ */
+- (instancetype)initWithTagName:(NSString *)tagName attributes:(NSMutableDictionary *)attributes;
+
+/**
+ Appends the given string to this token's name.
+
+ @param string The string to append.
+ */
+- (void)appendStringToTagName:(NSString *)string;
+
+@end
+
+/**
+ HTML Start Tag Token
+ */
+@interface HTMLStartTagToken : HTMLTagToken
+
+@end
+
+/**
+ HTML End Tag Token
+ */
+@interface HTMLEndTagToken : HTMLTagToken
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTemplate.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTemplate.h
new file mode 100644
index 0000000..2cf1682
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTemplate.h
@@ -0,0 +1,30 @@
+//
+// HTMLTemplate.h
+// HTMLKit
+//
+// Created by Iska on 12/04/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLElement.h"
+#import "HTMLDocumentFragment.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Template node.
+
+ https://html.spec.whatwg.org/multipage/scripting.html#the-template-element
+ */
+@interface HTMLTemplate : HTMLElement
+
+/**
+ The content of the template.
+
+ @see HTMLDocumentFragment
+ */
+@property (nonatomic, strong) HTMLDocumentFragment *content;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLText.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLText.h
new file mode 100644
index 0000000..4e8c6d6
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLText.h
@@ -0,0 +1,37 @@
+//
+// HTMLText.h
+// HTMLKit
+//
+// Created by Iska on 26/02/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import "HTMLCharacterData.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ A HTML Text node
+ */
+@interface HTMLText : HTMLCharacterData
+
+/**
+ Initializes a new HTML text node.
+
+ @param data The text string.
+ @return A new isntance of a HTML text node.
+ */
+- (instancetype)initWithData:(NSString *)data;
+
+/**
+ Appends the string to this text node.
+
+ @param string The string to append.
+ */
+- (void)appendString:(NSString *)string __attribute__((deprecated("Use `appendData:` instead.")));
+
+- (HTMLText *)splitTextAtOffset:(NSUInteger)offset;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLToken.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLToken.h
new file mode 100644
index 0000000..32d5b87
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLToken.h
@@ -0,0 +1,112 @@
+//
+// HTMLToken.h
+// HTMLKit
+//
+// Created by Iska on 20/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+@class HTMLDOCTYPEToken;
+@class HTMLTagToken;
+@class HTMLStartTagToken;
+@class HTMLEndTagToken;
+@class HTMLCommentToken;
+@class HTMLCharacterToken;
+@class HTMLParseErrorToken;
+
+/** @brief Returns YES if both arguments are `nil` or equal, NO otherwise. */
+NS_INLINE BOOL bothNilOrEqual(id first, id second) {
+ return (first == nil && second == nil) || ([first isEqual:second]);
+}
+
+/** @brief The token type. */
+typedef NS_ENUM(NSUInteger, HTMLTokenType)
+{
+ HTMLTokenTypeCharacter,
+ HTMLTokenTypeComment,
+ HTMLTokenTypeDoctype,
+ HTMLTokenTypeEndTag,
+ HTMLTokenTypeEOF,
+ HTMLTokenTypeParseError,
+ HTMLTokenTypeStartTag
+};
+
+/**
+ Base class for HTML Tokens emitted by the Tokenizer.
+
+ @see HTMLTokenizer
+ */
+@interface HTMLToken : NSObject
+
+@property (nonatomic, assign) HTMLTokenType type;
+
+/** @brief YES if this token is DOCTYPE token. NO otherwise */
+- (BOOL)isDoctypeToken;
+
+/** @brief YES if this token is Start Tag token. NO otherwise */
+- (BOOL)isStartTagToken;
+
+/** @brief YES if this token is End Tag token. NO otherwise */
+- (BOOL)isEndTagToken;
+
+/** @brief YES if this token is Comment token. NO otherwise */
+- (BOOL)isCommentToken;
+
+/** @brief YES if this token is Character token. NO otherwise */
+- (BOOL)isCharacterToken;
+
+/** @brief YES if this token is EOF token. NO otherwise */
+- (BOOL)isEOFToken;
+
+/** @brief YES if this token is Parse Error token. NO otherwise */
+- (BOOL)isParseError;
+
+/**
+ @brief Casts this token to DOCTYPE token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLDOCTYPEToken *)asDoctypeToken;
+
+/**
+ @brief Casts this token to Tag token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLTagToken *)asTagToken;
+
+/**
+ @brief Casts this token to Start Tag token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLStartTagToken *)asStartTagToken;
+
+/**
+ @brief Casts this token to End Tag token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLEndTagToken *)asEndTagToken;
+
+/**
+ @brief Casts this token to Comment token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLCommentToken *)asCommentToken;
+
+/**
+ @brief Casts this token to Character token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLCharacterToken *)asCharacterToken;
+
+/**
+ @brief Casts this token to Parse Error token.
+ @warning This is a convenience method and should be paired with the appropriate check.
+ */
+- (HTMLParseErrorToken *)asParseError;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizer.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizer.h
new file mode 100644
index 0000000..ccb0f85
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizer.h
@@ -0,0 +1,64 @@
+//
+// HTMLTokenizer.h
+// HTMLKit
+//
+// Created by Iska on 19/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+#import "HTMLToken.h"
+#import "HTMLTokenizerStates.h"
+
+@class HTMLParser;
+
+/**
+ Typedef for the parse error callback block.
+
+ @param token The parse error token.
+ */
+typedef void (^ HTMLTokenizerParseErrorCallback)(HTMLParseErrorToken *token);
+
+/**
+ * HTML Tokenizer
+ * https://html.spec.whatwg.org/multipage/syntax.html#tokenization
+ */
+@interface HTMLTokenizer : NSEnumerator
+
+/** @brief The underlying string with which this tokenizer was initialized. */
+@property (nonatomic, readonly) NSString *string;
+
+/**
+ The current tokenizer state.
+
+ @see HTMLTokenizerState
+ */
+@property (nonatomic, assign) HTMLTokenizerState state;
+
+/**
+ The associated HTML Parser instance.
+
+ @see HTMLParser
+ */
+@property (nonatomic, weak) HTMLParser *parser;
+
+/**
+ An error callback block, which gets called when encountering parse errors while tokenizing the stream
+
+ Parse error tokens are dropped if the callback is `nil`.
+ */
+@property (nonatomic, copy) HTMLTokenizerParseErrorCallback parseErrorCallback;
+
+/**
+ Initializes a new Tokenizer with the given string.
+
+ @param string The HTML string
+ @return A new instance of the Tokenizer.
+ */
+- (instancetype)initWithString:(NSString *)string;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerCharacters.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerCharacters.h
new file mode 100644
index 0000000..cec6c6c
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerCharacters.h
@@ -0,0 +1,199 @@
+//
+// Header.h
+// HTMLKit
+//
+// Created by Iska on 20/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+#define CHARACTERS \
+ CHAR( NULL_CHAR, 0x0000 ) \
+ CHAR( CHARACTER_TABULATION, 0x0009 ) \
+ CHAR( LINE_FEED, 0x000A ) \
+ CHAR( FORM_FEED, 0x000C ) \
+ CHAR( CARRIAGE_RETURN, 0x000D ) \
+ CHAR( SPACE, 0x0020 ) \
+ CHAR( EXCLAMATION_MARK, 0x0021 ) \
+ CHAR( QUOTATION_MARK, 0x0022 ) \
+ CHAR( NUMBER_SIGN, 0x0023 ) \
+ CHAR( AMPERSAND, 0x0026 ) \
+ CHAR( APOSTROPHE, 0x0027 ) \
+ CHAR( SOLIDUS, 0x002F ) \
+ CHAR( DIGIT_ZERO, 0x0030 ) \
+ CHAR( DIGIT_NINE, 0x0039 ) \
+ CHAR( LATIN_CAPITAL_LETTER_A, 0x0041 ) \
+ CHAR( LATIN_CAPITAL_LETTER_F, 0x0046 ) \
+ CHAR( LATIN_CAPITAL_LETTER_P, 0x0050 ) \
+ CHAR( LATIN_CAPITAL_LETTER_S, 0x0053 ) \
+ CHAR( LATIN_CAPITAL_LETTER_X, 0x0058 ) \
+ CHAR( LATIN_CAPITAL_LETTER_Z, 0x005A ) \
+ CHAR( RIGHT_SQUARE_BRACKET, 0x005D ) \
+ CHAR( GRAVE_ACCENT, 0x0060 ) \
+ CHAR( LATIN_SMALL_LETTER_A, 0x0061 ) \
+ CHAR( LATIN_SMALL_LETTER_F, 0x0066 ) \
+ CHAR( LATIN_SMALL_LETTER_P, 0x0070 ) \
+ CHAR( LATIN_SMALL_LETTER_S, 0x0073 ) \
+ CHAR( LATIN_SMALL_LETTER_X, 0x0078 ) \
+ CHAR( LATIN_SMALL_LETTER_Z, 0x007A ) \
+ CHAR( HYPHEN_MINUS, 0x002D ) \
+ CHAR( SEMICOLON, 0x003B ) \
+ CHAR( LESS_THAN_SIGN, 0x003C ) \
+ CHAR( EQUALS_SIGN, 0x003D ) \
+ CHAR( GREATER_THAN_SIGN, 0x003E ) \
+ CHAR( QUESTION_MARK, 0x003F ) \
+ CHAR( REPLACEMENT_CHAR, 0xFFFD )
+
+#define CHAR( name, value ) static UTF32Char const name = value;
+CHARACTERS
+#undef CHAR
+
+#define NUMERIC_REPLACEMENT_CHARACTERS \
+ CHAR( 0x0080, 0x20AC /* EURO SIGN */ ) \
+ CHAR( 0x0081, 0x0000 /* NO REPLACEMENT */ ) \
+ CHAR( 0x0082, 0x201A /* SINGLE LOW-9 QUOTATION MARK */ ) \
+ CHAR( 0x0083, 0x0192 /* LATIN SMALL LETTER F WITH HOOK */ ) \
+ CHAR( 0x0084, 0x201E /* DOUBLE LOW-9 QUOTATION MARK */ ) \
+ CHAR( 0x0085, 0x2026 /* HORIZONTAL ELLIPSIS */ ) \
+ CHAR( 0x0086, 0x2020 /* DAGGER */ ) \
+ CHAR( 0x0087, 0x2021 /* DOUBLE DAGGER */ ) \
+ CHAR( 0x0088, 0x02C6 /* MODIFIER LETTER CIRCUMFLEX ACCENT */ ) \
+ CHAR( 0x0089, 0x2030 /* PER MILLE SIGN */ ) \
+ CHAR( 0x008A, 0x0160 /* LATIN CAPITAL LETTER S WITH CARON */ ) \
+ CHAR( 0x008B, 0x2039 /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ ) \
+ CHAR( 0x008C, 0x0152 /* LATIN CAPITAL LIGATURE OE */ ) \
+ CHAR( 0x008D, 0x0000 /* NO REPLACEMENT */ ) \
+ CHAR( 0x008E, 0x017D /* LATIN CAPITAL LETTER Z WITH CARON */ ) \
+ CHAR( 0x008F, 0x0000 /* NO REPLACEMENT */ ) \
+ CHAR( 0x0090, 0x0000 /* NO REPLACEMENT */ ) \
+ CHAR( 0x0091, 0x2018 /* LEFT SINGLE QUOTATION MARK */ ) \
+ CHAR( 0x0092, 0x2019 /* RIGHT SINGLE QUOTATION MARK */ ) \
+ CHAR( 0x0093, 0x201C /* LEFT DOUBLE QUOTATION MARK */ ) \
+ CHAR( 0x0094, 0x201D /* RIGHT DOUBLE QUOTATION MARK */ ) \
+ CHAR( 0x0095, 0x2022 /* BULLET */ ) \
+ CHAR( 0x0096, 0x2013 /* EN DASH */ ) \
+ CHAR( 0x0097, 0x2014 /* EM DASH */ ) \
+ CHAR( 0x0098, 0x02DC /* SMALL TILDE */ ) \
+ CHAR( 0x0099, 0x2122 /* TRADE MARK SIGN */ ) \
+ CHAR( 0x009A, 0x0161 /* LATIN SMALL LETTER S WITH CARON */ ) \
+ CHAR( 0x009B, 0x203A /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ ) \
+ CHAR( 0x009C, 0x0153 /* LATIN SMALL LIGATURE OE */ ) \
+ CHAR( 0x009D, 0x0000 /* NO REPLACEMENT */ ) \
+ CHAR( 0x009E, 0x017E /* LATIN SMALL LETTER Z WITH CARON */ ) \
+ CHAR( 0x009F, 0x0178 /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ )
+
+static unichar NumericReplacementTable[] = {
+#define CHAR( character, replacement ) replacement,
+NUMERIC_REPLACEMENT_CHARACTERS
+#undef CHAR
+};
+
+NS_INLINE BOOL isControlCharacter(unsigned long long character)
+{
+ return ((character >= 0x0001 && character <= 0x0008) ||
+ character == 0x000B ||
+ (character >= 0x000E && character <= 0x001F) ||
+ (character >= 0x007F && character <= 0x009F));
+}
+
+NS_INLINE BOOL isNoncharacter(unsigned long long character)
+{
+ return ((character >= 0xFDD0 && character <= 0xFDEF) ||
+ character == 0xFFFE ||
+ character == 0xFFFF ||
+ character == 0x1FFFE ||
+ character == 0x1FFFF ||
+ character == 0x2FFFE ||
+ character == 0x2FFFF ||
+ character == 0x3FFFE ||
+ character == 0x3FFFF ||
+ character == 0x4FFFE ||
+ character == 0x4FFFF ||
+ character == 0x5FFFE ||
+ character == 0x5FFFF ||
+ character == 0x6FFFE ||
+ character == 0x6FFFF ||
+ character == 0x7FFFE ||
+ character == 0x7FFFF ||
+ character == 0x8FFFE ||
+ character == 0x8FFFF ||
+ character == 0x9FFFE ||
+ character == 0x9FFFF ||
+ character == 0xAFFFE ||
+ character == 0xAFFFF ||
+ character == 0xBFFFE ||
+ character == 0xBFFFF ||
+ character == 0xCFFFE ||
+ character == 0xCFFFF ||
+ character == 0xDFFFE ||
+ character == 0xDFFFF ||
+ character == 0xEFFFE ||
+ character == 0xEFFFF ||
+ character == 0xFFFFE ||
+ character == 0xFFFFF ||
+ character == 0x10FFFE ||
+ character == 0x10FFFF);
+}
+
+NS_INLINE BOOL isDigit(UTF32Char character)
+{
+ return (character >= DIGIT_ZERO && character <= DIGIT_NINE);
+}
+
+NS_INLINE BOOL isHexDigit(UTF32Char character)
+{
+ return ((character >= DIGIT_ZERO && character <= DIGIT_NINE) ||
+ (character >= LATIN_CAPITAL_LETTER_A && character <= LATIN_CAPITAL_LETTER_F) ||
+ (character >= LATIN_SMALL_LETTER_A && character <= LATIN_SMALL_LETTER_F));
+}
+
+NS_INLINE BOOL isUpperHexDigit(UTF32Char character)
+{
+ return ((character >= LATIN_CAPITAL_LETTER_A && character <= LATIN_CAPITAL_LETTER_F) ||
+ (character >= DIGIT_ZERO && character <= DIGIT_NINE));
+}
+
+NS_INLINE BOOL isLowerHexDigit(UTF32Char character)
+{
+ return ((character >= LATIN_SMALL_LETTER_A && character <= LATIN_SMALL_LETTER_F) ||
+ (character >= DIGIT_ZERO && character <= DIGIT_NINE));
+}
+
+NS_INLINE BOOL isAlphanumeric(UTF32Char character)
+{
+ return ((character >= DIGIT_ZERO && character <= DIGIT_NINE) ||
+ (character >= LATIN_CAPITAL_LETTER_A && character <= LATIN_CAPITAL_LETTER_Z) ||
+ (character >= LATIN_SMALL_LETTER_A && character <= LATIN_SMALL_LETTER_Z));
+}
+
+NS_INLINE BOOL isStringAlphanumeric(NSString *string)
+{
+ NSCharacterSet *set = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
+
+ return ([string rangeOfCharacterFromSet:set].location == NSNotFound);
+}
+
+NS_INLINE BOOL isSurrogate(unsigned long long character)
+{
+ return (character >= 0xD800 && character <= 0xDFFF);
+}
+
+NS_INLINE unichar NumericReplacementCharacter(UTF32Char character)
+{
+ if (character >= 0x0080 && character <= 0x009F) {
+ return NumericReplacementTable[character - 0x0080];
+ } else {
+ return NULL_CHAR;
+ }
+}
+
+NS_INLINE NSString * StringFromUniChar(unichar character)
+{
+ return [[NSString alloc] initWithCharacters:&character length:1];
+}
+
+NS_INLINE NSString * StringFromUTF32Char(UTF32Char character)
+{
+ unichar pair[2];
+ Boolean isPair = CFStringGetSurrogatePairForLongCharacter(character, pair);
+ return [[NSString alloc] initWithCharacters:(const unichar *)&pair length:(isPair ? 2 : 1)];
+}
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerEntities.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerEntities.h
new file mode 100644
index 0000000..1a82ec5
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerEntities.h
@@ -0,0 +1,32 @@
+//
+// HTMLTokenizerEntities.h
+// HTMLKit
+//
+// Created by Iska on 11/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+/**
+ HTML character reference entitites
+ https://html.spec.whatwg.org/multipage/syntax.html#named-character-references
+ */
+@interface HTMLTokenizerEntities : NSObject
+
+/** @brief All character reference entitites. */
++ (NSArray *)entities;
+
+/**
+ Returns the replacement entity at the given index.
+
+ @param index The index of the character reference.
+ @return The replacement character reference entitiy.
+ */
++ (NSString *)replacementAtIndex:(NSUInteger)index;
+
+@end
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerStates.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerStates.h
new file mode 100644
index 0000000..661d49e
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokenizerStates.h
@@ -0,0 +1,101 @@
+//
+// HTMLTokenizerStates.h
+// HTMLKit
+//
+// Created by Iska on 20/09/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#define TOKENIZER_STATES \
+ STATE_ENTRY( HTMLTokenizerStateData, = 0) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATA, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXT, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptData, ) \
+ STATE_ENTRY( HTMLTokenizerStatePLAINTEXT, ) \
+ STATE_ENTRY( HTMLTokenizerStateTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATALessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATAEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateRCDATAEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateRAWTEXTEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapeStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapeStartDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscaped, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedDashDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedEndTagOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataEscapedEndTagName, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapeStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscaped, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedDashDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapedLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateScriptDataDoubleEscapeEnd, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterAttributeName, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeAttributeValue, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAttributeValueUnquoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateCharacterReferenceInAttributeValue, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterAttributeValueQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateSelfClosingStartTag, ) \
+ STATE_ENTRY( HTMLTokenizerStateBogusComment, ) \
+ STATE_ENTRY( HTMLTokenizerStateMarkupDeclarationOpen, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentStartDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateComment, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentLessThanSign, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentLessThanSignBang, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentLessThanSignBangDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentLessThanSignBangDashDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEndDash, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEnd, ) \
+ STATE_ENTRY( HTMLTokenizerStateCommentEndBang, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPE, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEName, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEPublicKeyword, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPEPublicIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEPublicIdentifierDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPEPublicIdentifierSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPEPublicIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateBetweenDOCTYPEPublicAndSystemIdentifiers, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPESystemKeyword, ) \
+ STATE_ENTRY( HTMLTokenizerStateBeforeDOCTYPESystemIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPESystemIdentifierDoubleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateDOCTYPESystemIdentifierSingleQuoted, ) \
+ STATE_ENTRY( HTMLTokenizerStateAfterDOCTYPESystemIdentifier, ) \
+ STATE_ENTRY( HTMLTokenizerStateBogusDOCTYPE, ) \
+ STATE_ENTRY( HTMLTokenizerStateCDATASection, ) \
+ STATE_ENTRY( HTMLTokenizerStateCDATASectionBracket, ) \
+ STATE_ENTRY( HTMLTokenizerStateCDATASectionEnd, ) \
+ STATE_ENTRY( HTMLTokenizerStateCharacterReference, ) \
+ STATE_ENTRY( HTMLTokenizerStateNamedCharacterReference, ) \
+ STATE_ENTRY( HTMLTokenizerStateAmbiguousAmpersand, ) \
+ STATE_ENTRY( HTMLTokenizerStateNumericCharacterReference, ) \
+ STATE_ENTRY( HTMLTokenizerStateHexadecimalCharacterReferenceStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateDecimalCharacterReferenceStart, ) \
+ STATE_ENTRY( HTMLTokenizerStateHexadecimalCharacterReference, ) \
+ STATE_ENTRY( HTMLTokenizerStateDecimalCharacterReference, ) \
+ STATE_ENTRY( HTMLTokenizerStateNumericCharacterReferenceEnd, )
+
+typedef NS_ENUM(NSUInteger, HTMLTokenizerState)
+{
+#define STATE_ENTRY( name, value ) name value,
+ TOKENIZER_STATES
+#undef STATE_ENTRY
+};
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokens.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokens.h
new file mode 100644
index 0000000..6450e9f
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTokens.h
@@ -0,0 +1,19 @@
+//
+// HTMLTokens.h
+// HTMLKit
+//
+// Created by Iska on 25/10/14.
+// Copyright (c) 2014 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import "HTMLToken.h"
+#import "HTMLCharacterToken.h"
+#import "HTMLCommentToken.h"
+#import "HTMLDOCTYPEToken.h"
+#import "HTMLParseErrorToken.h"
+#import "HTMLTagToken.h"
+#import "HTMLEOFToken.h"
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeVisitor.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeVisitor.h
new file mode 100644
index 0000000..c4e457c
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeVisitor.h
@@ -0,0 +1,44 @@
+//
+// HTMLTreeVisitor.h
+// HTMLKit
+//
+// Created by Iska on 30.07.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLNodeVisitor.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLNode;
+
+/**
+ A HTML Tree Visitor that walks the DOM in tree order. Nodes are visited exacly once
+
+ The provided node visitor is called for each node twice, once when entering the node,
+ and once again when leaving the node.
+
+ @see HTMLNodeVisitor
+ */
+@interface HTMLTreeVisitor : NSObject
+
+/**
+ Initializes a new tree visitor with.
+
+ @param node The root node.
+
+ @return A new instance of a tree visitor.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node;
+
+/**
+ Walks the DOM tree rooted at the provided node with the given node visitor.
+
+ @param visitor A HTMLNodeVisitor implementation.
+ */
+- (void)walkWithNodeVisitor:(id)visitor;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeWalker.h b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeWalker.h
new file mode 100644
index 0000000..2faaca1
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/HTMLTreeWalker.h
@@ -0,0 +1,115 @@
+//
+// HTMLTreeWalker.h
+// HTMLKit
+//
+// Created by Iska on 05/06/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+#import "HTMLNodeFilter.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HTMLNode;
+
+/**
+ A HTML Tree Walker. Used to "walk" the DOM tree in all directions, i.e. it can traverse from a given node to its parent,
+ child, next, or previous sibling.
+
+ https://dom.spec.whatwg.org/#interface-treewalker
+ */
+@interface HTMLTreeWalker : NSObject
+
+/**
+ The root element of this tree walker, i.e. the traversed tree is rooted at this element.
+ */
+@property (nonatomic, strong, readonly) HTMLNode *root;
+
+/**
+ The iterator's show options. These options control what types of elements are shown or skipped during tree walking.
+
+ @see HTMLNodeFilterShowOptions
+ */
+@property (nonatomic, assign, readonly) HTMLNodeFilterShowOptions whatToShow;
+
+/**
+ A node filter, that is applied to each node during tree walking.
+
+ @see HTMLNodeFilter
+ */
+@property (nonatomic, strong, readonly, nullable) id filter;
+
+/**
+ The current node at which this walker is standing.
+ */
+@property (nonatomic, strong) HTMLNode *currentNode;
+
+/**
+ Initializes a new tree walker with no filter and HTMLNodeFilterShowAll show options.
+
+ @param node The root node.
+ @return A new instance of a tree walker.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node;
+
+/**
+ Initializes a new tree walker with HTMLNodeFilterShowAll show options.
+
+ @param node The root node.
+ @param filter The node filter to use.
+ @return A new instance of a tree walker.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node
+ filter:(nullable id)filter;
+
+/**
+ Initializes a new tree walker.
+
+ @param node The root node.
+ @param showOptions The show options for the walker.
+ @param filter The node filter to use.
+ @return A new instance of a tree walker.
+ */
+- (instancetype)initWithNode:(HTMLNode *)node
+ showOptions:(HTMLNodeFilterShowOptions)showOptions
+ filter:(nullable id)filter;
+
+/**
+ The parent node of the current node.
+ */
+- (nullable HTMLNode *)parentNode;
+
+/**
+ The first child node of the current node.
+ */
+- (nullable HTMLNode *)firstChild;
+
+/**
+ The last child node of the current node.
+ */
+- (nullable HTMLNode *)lastChild;
+
+/**
+ The previous sibling node of the current node.
+ */
+- (nullable HTMLNode *)previousSibling;
+
+/**
+ The next sibling node of the current node.
+ */
+- (nullable HTMLNode *)nextSibling;
+
+/**
+ The previous node of the current node in tree order.
+ */
+- (nullable HTMLNode *)previousNode;
+
+/**
+ The next node of the current node in tree order.
+ */
+- (nullable HTMLNode *)nextNode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/NSCharacterSet+HTMLKit.h b/ios/circolapp/Pods/HTMLKit/Sources/include/NSCharacterSet+HTMLKit.h
new file mode 100644
index 0000000..05dea35
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/NSCharacterSet+HTMLKit.h
@@ -0,0 +1,37 @@
+//
+// NSCharacterSet+HTMLKit.h
+// HTMLKit
+//
+// Created by Iska on 14/05/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ NSCharacterSet category for HTML-related methods.
+ */
+@interface NSCharacterSet (HTMLKit)
+
+/**
+ A character set for HTML whitespace characters: CHARACTER TABULATION U+0009, LINE FEED U+000A, FORM FEED U+000C,
+ CARRIAGE RETURN U+000D, and SPACE U+0020.
+ */
+
++ (instancetype)htmlkit_HTMLWhitespaceCharacterSet;
+
+/**
+ A character set for HTML HEX-Number characters: The digits 0-9, latin small letters a-f, and latin capital letters A-F.
+ */
++ (instancetype)htmlkit_HTMLHexNumberCharacterSet;
+
+/**
+ A character set for CSS Nth-Expression: The digits 0-9, space, latin small n, latin capital N, plus sing and minus sign.
+ */
++ (instancetype)htmlkit_CSSNthExpressionCharacterSet;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+HTMLKit.h b/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+HTMLKit.h
new file mode 100644
index 0000000..b86ff47
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+HTMLKit.h
@@ -0,0 +1,32 @@
+//
+// NSString+HTMLKit.h
+// HTMLKit
+//
+// Created by Iska on 02/03/15.
+// Copyright (c) 2015 BrainCookie. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ NSStirng category for HTML-related methods.
+ */
+@interface NSString (HTMLKit)
+
+/**
+ Checks whether this string is a HTML whitespace string.
+
+ @return `YES` if this string is a HTML whitespace string, `NO` otherwise.
+ */
+- (BOOL)htmlkit_isHTMLWhitespaceString;
+
+/**
+ @return The length of the leading HTML whitespace characters in this string.
+ */
+- (NSUInteger)htmlkit_leadingHTMLWhitespaceLength;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+Private.h b/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+Private.h
new file mode 100644
index 0000000..27a7ba3
--- /dev/null
+++ b/ios/circolapp/Pods/HTMLKit/Sources/include/NSString+Private.h
@@ -0,0 +1,41 @@
+//
+// NSString+Private.h
+// HTMLKit
+//
+// Created by Iska on 26.03.19.
+// Copyright © 2019 BrainCookie. All rights reserved.
+//
+
+///------------------------------------------------------
+/// HTMLKit private header
+///------------------------------------------------------
+
+#import
+
+/**
+ NSStirng category for common helper methods.
+ */
+@interface NSString (Private)
+
+/**
+ Checks whether this string is equal to another ignoring the case.
+
+ @return `YES` if the two string are equal ignroing the case, `NO` otherwise.
+ */
+- (BOOL)isEqualToStringIgnoringCase:(NSString *)aString;
+
+/**
+ Checks whether this string is equal to any of the given strings.
+
+ @return `YES` if there is an equal string, `NO` otherwise.
+ */
+- (BOOL)isEqualToAny:(NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
+
+/**
+ Checks whether this string has a prefix ignoring the case.
+
+ @return `YES` if this string has a given prefix ignroing the case, `NO` otherwise.
+ */
+- (BOOL)hasPrefixIgnoringCase:(NSString *)aString;
+
+@end
diff --git a/ios/circolapp/Pods/Local Podspecs/shared.podspec.json b/ios/circolapp/Pods/Local Podspecs/shared.podspec.json
new file mode 100644
index 0000000..58461a7
--- /dev/null
+++ b/ios/circolapp/Pods/Local Podspecs/shared.podspec.json
@@ -0,0 +1,44 @@
+{
+ "name": "shared",
+ "version": "1.0",
+ "homepage": "Link to a Kotlin/Native module homepage",
+ "source": {
+ "git": "Not Published",
+ "tag": "Cocoapods/shared/1.0"
+ },
+ "authors": "",
+ "license": "",
+ "summary": "Shared module for Circolapp",
+ "static_framework": true,
+ "vendored_frameworks": "build/cocoapods/framework/Shared.framework",
+ "libraries": "c++",
+ "module_name": "shared_umbrella",
+ "dependencies": {
+ "HTMLKit": [
+ "~> 3.1.0"
+ ]
+ },
+ "pod_target_xcconfig": {
+ "KOTLIN_TARGET[sdk=iphonesimulator*]": "ios_x64",
+ "KOTLIN_TARGET[sdk=iphoneos*]": "ios_arm",
+ "KOTLIN_TARGET[sdk=watchsimulator*]": "watchos_x86",
+ "KOTLIN_TARGET[sdk=watchos*]": "watchos_arm",
+ "KOTLIN_TARGET[sdk=appletvsimulator*]": "tvos_x64",
+ "KOTLIN_TARGET[sdk=appletvos*]": "tvos_arm64",
+ "KOTLIN_TARGET[sdk=macosx*]": "macos_x64"
+ },
+ "script_phases": [
+ {
+ "name": "Build shared",
+ "execution_position": "before_compile",
+ "shell_path": "/bin/sh",
+ "script": " set -ev\n REPO_ROOT=\"$PODS_TARGET_SRCROOT\"\n \"$REPO_ROOT/../gradlew\" -p \"$REPO_ROOT\" :shared:syncFramework -Pkotlin.native.cocoapods.target=$KOTLIN_TARGET -Pkotlin.native.cocoapods.configuration=$CONFIGURATION -Pkotlin.native.cocoapods.cflags=\"$OTHER_CFLAGS\" -Pkotlin.native.cocoapods.paths.headers=\"$HEADER_SEARCH_PATHS\" -Pkotlin.native.cocoapods.paths.frameworks=\"$FRAMEWORK_SEARCH_PATHS\"\n"
+ }
+ ],
+ "platforms": {
+ "osx": null,
+ "ios": null,
+ "tvos": null,
+ "watchos": null
+ }
+}
diff --git a/ios/circolapp/Pods/Manifest.lock b/ios/circolapp/Pods/Manifest.lock
new file mode 100644
index 0000000..ec5b81a
--- /dev/null
+++ b/ios/circolapp/Pods/Manifest.lock
@@ -0,0 +1,23 @@
+PODS:
+ - HTMLKit (3.1.0)
+ - shared (1.0):
+ - HTMLKit (~> 3.1.0)
+
+DEPENDENCIES:
+ - shared (from `../../shared`)
+
+SPEC REPOS:
+ trunk:
+ - HTMLKit
+
+EXTERNAL SOURCES:
+ shared:
+ :path: "../../shared"
+
+SPEC CHECKSUMS:
+ HTMLKit: 4ed10a911462cbf972329ec6aaaa827208dfd70c
+ shared: fb3154b4def038b2b13aa88e01dd9f91bb2de9b5
+
+PODFILE CHECKSUM: 90ac34abdd7012dde25705873407c94d0f26fa6b
+
+COCOAPODS: 1.10.0
diff --git a/ios/circolapp/Pods/Pods.xcodeproj/project.pbxproj b/ios/circolapp/Pods/Pods.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..222709a
--- /dev/null
+++ b/ios/circolapp/Pods/Pods.xcodeproj/project.pbxproj
@@ -0,0 +1,1241 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 51;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 8777C9F6889E59EFFD631D80AEE9048B /* shared */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 04AE69E59986E67B68C41FD4EFDFC355 /* Build configuration list for PBXAggregateTarget "shared" */;
+ buildPhases = (
+ FA211E11DA9BA8600516AEC37F42CEA0 /* [CP-User] Build shared */,
+ );
+ dependencies = (
+ 648DAE6800FE0036D8A1F4491322F8C6 /* PBXTargetDependency */,
+ );
+ name = shared;
+ productName = shared;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 038848D5D62ED189A285C324C2CC7D3A /* NSCharacterSet+HTMLKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 87951E59BFA991F46899206464CF404A /* NSCharacterSet+HTMLKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 05C3E06855DC8179081C39D789A8B1F0 /* CSSStructuralPseudoSelectors.h in Headers */ = {isa = PBXBuildFile; fileRef = 788B5128A897EAB2AFBFA6E8BFA1D695 /* CSSStructuralPseudoSelectors.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 068F555130A1713846DCD274395A5371 /* HTMLTokenizerStates.h in Headers */ = {isa = PBXBuildFile; fileRef = CC0991CF9EA8BA9CAB5F871A783CAD95 /* HTMLTokenizerStates.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 07543B35DE65261F2B3EB2114609806D /* CSSPseudoClassSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 807835D1DCEB0DDCE07F5B3EAF4718D3 /* CSSPseudoClassSelector.m */; };
+ 089591E0DBAEAAD118517074F91B9C7E /* HTMLTokenizer.m in Sources */ = {isa = PBXBuildFile; fileRef = F44851238962046485D274D2D0EED69B /* HTMLTokenizer.m */; };
+ 09C3DD867776CE90FC70EE185A11525F /* HTMLTokenizerEntities.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C06DB2A8E864C358762D65EC0A7FDD6 /* HTMLTokenizerEntities.m */; };
+ 0C0971BC747C823F6E1D80EA806F7BCC /* HTMLOrderedDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 60485B71EE491381ABC3D8A2ADFD6598 /* HTMLOrderedDictionary.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0E7966C68D66DFC8F5034B1337D3DA8D /* HTMLNodeIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = D25E1364EC9745225A69341BFB507B69 /* HTMLNodeIterator.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 0E868C32881D2AFC3F83720449AE3DBE /* HTMLQuirksMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 588AB2806A93F89CA15C526068A342C2 /* HTMLQuirksMode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1133D82E4A202C44D93CA728CCF8B1A9 /* HTMLNodeTraversal.m in Sources */ = {isa = PBXBuildFile; fileRef = BD1F43F894774ED4E84CCF6C22431CEE /* HTMLNodeTraversal.m */; };
+ 1254DE0E9C537E071D9F10D9862E2AA3 /* HTMLDocumentType.m in Sources */ = {isa = PBXBuildFile; fileRef = F64E5DE666382B64E6F7F073BD105F71 /* HTMLDocumentType.m */; };
+ 15F2A99F78A3DAC5CC20E2C2DA4A2FC2 /* HTMLNode.m in Sources */ = {isa = PBXBuildFile; fileRef = E592DF62D483C86FF2542B06D7B71516 /* HTMLNode.m */; };
+ 15F6D319E31616757F1ACD5765A90CE0 /* HTMLDOCTYPEToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BE6A04D22D80896904C1DB4C7E7404B /* HTMLDOCTYPEToken.m */; };
+ 1793C3BE1ED8253BC4134EA1A253DFE2 /* HTMLDOMUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 08127DDF37F0577B339CA89DDFB648CD /* HTMLDOMUtils.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 19EB3671E3647F2FB2B9246246174ECC /* Pods-circolapp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF16168FDD9EB3D4AE88668C3CB08D09 /* Pods-circolapp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1A3E6368CD99234A2FB4C67F40D90282 /* HTMLTreeVisitor.m in Sources */ = {isa = PBXBuildFile; fileRef = D80B26D43AEEE5F8C7A3CDFBA5BE8AA9 /* HTMLTreeVisitor.m */; };
+ 1ACBB4793541AEBF22F6A89EA0C447F7 /* HTMLStackOfOpenElements.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C773B4EB6681533DE2BC5F9EB080AE9 /* HTMLStackOfOpenElements.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 1B2958A9A764A7ED6119B58E2DAF50FD /* HTMLElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E04B16638699BC43717547FCC70B8F06 /* HTMLElement.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1C3ADC96E5FEB81BBD414A11930EA00E /* HTMLText.h in Headers */ = {isa = PBXBuildFile; fileRef = 69CBCD6A63F470DFDEB889AA3F383FA8 /* HTMLText.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 1CB71DEAE348197CB16E8FFDB2D5A92A /* CSSCombinatorSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = F13CF0E66F98D3E077AF2D0A7259D24F /* CSSCombinatorSelector.m */; };
+ 1F4931628E1D4A5089916468D8569F98 /* CSSTypeSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E997E6BB09D55AD3B59813EAB449067 /* CSSTypeSelector.m */; };
+ 1FC973CF679B92965414C269EACAE033 /* HTMLNodeIterator+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CC4EBFA4DA64BAA0D07A3DDF6B3B6C97 /* HTMLNodeIterator+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 22AA0D6E0A8B8154D4950A7AF01E0866 /* HTMLMarker.h in Headers */ = {isa = PBXBuildFile; fileRef = F80280F7EEF715F077199718AC3E280F /* HTMLMarker.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 247670222CBF2220BC39A64B22F4CBCE /* HTMLSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = C61AA2B5E8EE9A82BC232228663F5891 /* HTMLSerializer.m */; };
+ 2926F8630F9DA391F7636E5B5A0F7557 /* HTMLKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 323577F8E8029F5A9462DFFF2956754E /* HTMLKit-dummy.m */; };
+ 2AA86826B1EED2516EF1F635D76C9608 /* HTMLRange+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 46A85F31835568DAA40A97B8F2759417 /* HTMLRange+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 2BC7C2898F080D547D1034ADB8BD6D29 /* HTMLCommentToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D78EBE6310923F7A78C5406A04CA5E2 /* HTMLCommentToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 2D071552241CC029A419968648207918 /* HTMLElementAdjustment.h in Headers */ = {isa = PBXBuildFile; fileRef = BEC27C9A7B29A024253B788F05C013A7 /* HTMLElementAdjustment.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 2DB1857958030319B83BAE0DDDB2D6FA /* HTMLTagToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F8544048EF646186E6BEDEF05F25E304 /* HTMLTagToken.m */; };
+ 2DF99D4BCDF69CB88FA93EEC98525C99 /* HTMLTagToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F56F889CE5267A27B9EBAC112E281E7 /* HTMLTagToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 2E8AEFE15398667EDAC9160FFB4FC1AA /* HTMLRange.m in Sources */ = {isa = PBXBuildFile; fileRef = C1C47F071829A7E6908A99720B425B14 /* HTMLRange.m */; };
+ 2F69DB88ADA7407710426F2CFA0DF1D8 /* CSSSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 43E6A0F42759E73BC49D1D2A7D9012AA /* CSSSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 2FC31BE5B685BFD1E8D09ABC5143D96C /* HTMLOrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8E0FE4A11FE712625F1A40DBADCFF0 /* HTMLOrderedDictionary.m */; };
+ 30AD3AA41298DB92EEA5C855876918FD /* HTMLDocumentFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = 53D8E2BF7A67912F91D24CCE3C7F813D /* HTMLDocumentFragment.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 30FA2054A1D1A1909C6A576D375F3D34 /* NSCharacterSet+HTMLKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 54446C4D4DE47F67B49BBE2B0A2CCCE9 /* NSCharacterSet+HTMLKit.m */; };
+ 337E3639C45768BA3D91494DE4CE13A6 /* NSString+HTMLKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 66864699A99E946F6168F97A30509EE7 /* NSString+HTMLKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 35D6347C9D2E2944E1B05BB9182B04EA /* HTMLCharacterToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 10C4994C6943905373ED93FCACF86CA7 /* HTMLCharacterToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 37802E9225ABF2AD97AAF455DF51E1D3 /* HTMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F2CBF92D33986C8715D89D55B45FF8A /* HTMLParser.m */; };
+ 3B4D77D7B33C2D27CA80D0FA66AD572A /* HTMLMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BABE617B3697B8BACDE8BE3C1ACCBD7 /* HTMLMarker.m */; };
+ 3B9C07BCDCEB7B2C0266A1D7370D3326 /* HTMLDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EB71F686B790CFCBE65663F88E1F7E2 /* HTMLDocument.m */; };
+ 3FF5337706648B3C2368437B4A0BB20C /* CSSNthExpressionParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 213281C7B3F7F9F409EB7AB9553AA764 /* CSSNthExpressionParser.m */; };
+ 41A122C3E9214179A4886653409B09FC /* HTMLElementTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF518B4844BEAC8D295F916D31689B6 /* HTMLElementTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 41E10EE4932151CC321A465538DCDE75 /* HTMLKitErrorDomain.h in Headers */ = {isa = PBXBuildFile; fileRef = 588711CA518CFF7DB737AA09710B346D /* HTMLKitErrorDomain.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 43014E1B8687ECB3DF0C545F9A01BC25 /* CSSInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E5121587EFF7C99F60966834525E3220 /* CSSInputStream.m */; };
+ 46EC1FF90ECC6E61E7831D7BF7D6B91D /* CSSPseudoClassSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = E45D4535C33C2106994806B7E84E460E /* CSSPseudoClassSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4960347B078294511ADB0AE4CA9250CF /* HTMLCharacterToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 79E772EDD0AACDF2F4AA72D32DB49D36 /* HTMLCharacterToken.m */; };
+ 496FC59E7A590CA43EC7201963BC39AE /* HTMLCommentToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B3D8EF0B61D8E19178A29B2BC52A768 /* HTMLCommentToken.m */; };
+ 4C46BE52C7D412DFD77AA119A54841FC /* CSSAttributeSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A6E0F7F7714694101C9398CCB535D49 /* CSSAttributeSelector.m */; };
+ 4CB6977EEA02A7B5E14036340759CCBA /* CSSSelectors.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FEC0E385AEC8099D8315EEAB6ED103 /* CSSSelectors.m */; };
+ 4EE25F10E0A85004708299D5FD35C4E9 /* HTMLNamespaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 0778F4E7FB2B669AB233666517A3CCC5 /* HTMLNamespaces.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5471749C4CF0B455B9C127888491B35B /* HTMLListOfActiveFormattingElements.h in Headers */ = {isa = PBXBuildFile; fileRef = E364B578379F56E7C949A944A9CF79CF /* HTMLListOfActiveFormattingElements.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 54991BAAC0F537E05F53D447B76F044E /* HTMLKitDOMExceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 63EEDCD1914FD93F387D94F1ED5F2BFF /* HTMLKitDOMExceptions.m */; };
+ 54E0E7DBAB6DF7ADA07A06B99BB1BCC8 /* HTMLNodeIterator.m in Sources */ = {isa = PBXBuildFile; fileRef = DD67B74EFEBF313FFC65A55849A5376B /* HTMLNodeIterator.m */; };
+ 5AE34DD4CC46A7BF18EDB1C4797EAFAD /* HTMLTemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A2E0E0AF88E3AAB78072B64582BAFA /* HTMLTemplate.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 5C41DAD11C8D5C27707A9D641C9D592A /* CSSNthExpressionSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 10F3AE88712CC7AD87BFBC6913A1D05D /* CSSNthExpressionSelector.m */; };
+ 5C4BA615876D251FFD639754914F67A0 /* NSString+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = D823C0AB1F22BD596688F5BDD4C17272 /* NSString+Private.m */; };
+ 5E2F1F0A2212AEFC8C1C994ECF8B7F99 /* CSSInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F72756BBB2F75A0F17D0DA2E66E7C76 /* CSSInputStream.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 60DD1CFD9FF49FA25ACA24721184B370 /* HTMLTreeVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F90600038159A008CC4566B3940F352 /* HTMLTreeVisitor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6154CC4F2512A94A83D76747D0194B47 /* CSSSelectorBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = E5496F12A54929D95EDB6002055E4E7B /* CSSSelectorBlock.m */; };
+ 621DA754D7EACD4816DAD8615E657825 /* CSSSelectorBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E4FE014AD4FE94E19C2390FF07C6B6 /* CSSSelectorBlock.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 62731AC919CCC34640B842C8B0DA8FDF /* HTMLSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDA2E5A6AD556410AF7E355DD2F0ECD /* HTMLSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 64918E10093DBD6E73B4453D775AEB70 /* HTMLDOMTokenList.m in Sources */ = {isa = PBXBuildFile; fileRef = DC88C09DD941B6E0621209289854127D /* HTMLDOMTokenList.m */; };
+ 65A96B98762327564F0EA8F34F8D5C4F /* NSString+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E665689EC0D8D51E2DB234A6BEE6CB /* NSString+Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 65FEF07281CED148E1F3035338104914 /* HTMLNodeVisitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 52C67A8EC9CB9B1E736407A0BABE59B1 /* HTMLNodeVisitor.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 68684645C192C0BE835F3D0312FEDD30 /* HTMLCharacterData.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ECBF6D64FC119B179C67E07ADD981D2 /* HTMLCharacterData.m */; };
+ 687A7E9DF47AEE17702C922162052D3D /* CSSCombinatorSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D16F01B4145BD1E6616143102D2DEEC /* CSSCombinatorSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 6A14F8B58F5986D4D670A75E8167DD2F /* HTMLTokenizerEntities.h in Headers */ = {isa = PBXBuildFile; fileRef = 26A538DF5CE6DD03E5DA17B6F0FEBFD4 /* HTMLTokenizerEntities.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 6AB9412A65610C8A56D3E10D7A92CB31 /* HTMLDOCTYPEToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 526039880450D3201656B4E5DDEF8F7D /* HTMLDOCTYPEToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 726D377BE3CAFAACD56309A234DC9523 /* CSSStructuralPseudoSelectors.m in Sources */ = {isa = PBXBuildFile; fileRef = F65FF35D4E080A82330604E95E57880C /* CSSStructuralPseudoSelectors.m */; };
+ 72D42970127D6D2E356D5C7DD6A9CAC1 /* HTMLKitDOMExceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = A33BE7A00363628902933CA5E003B3C7 /* HTMLKitDOMExceptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 78A8858F46C4FF4394A8850E5FAFA028 /* CSSPseudoFunctionSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = F8502ABD83C51C9253C2FBDD4B83DA04 /* CSSPseudoFunctionSelector.m */; };
+ 7995F79B359D09CBB56175A2949D5F4B /* HTMLDocumentFragment.m in Sources */ = {isa = PBXBuildFile; fileRef = 69DD17E8138FB6ABEEBA615A27A3B3CC /* HTMLDocumentFragment.m */; };
+ 7BF737FC09F0648E3A5C138742D198CA /* HTMLDOM.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E4921753946ADCD586A0F4EB2F25E7 /* HTMLDOM.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 7DFF921C758696A54C472B391ACBD4BE /* CSSCompoundSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = C3115FD63DA3654918C5DEC74351BE69 /* CSSCompoundSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 80BE5A55A778D0BFECA3109A5F17E7C9 /* HTMLDocumentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 6003B693F057B33DEA18B8E9439AEECE /* HTMLDocumentType.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 816A5CD6DFEB9E20A18E0C4C63A2E642 /* HTMLToken.m in Sources */ = {isa = PBXBuildFile; fileRef = AA45CF4EAC7A99D2D7DECCE0382E2293 /* HTMLToken.m */; };
+ 83228904A0B47AE72965A66DED9A3441 /* HTMLInputStreamReader.m in Sources */ = {isa = PBXBuildFile; fileRef = DACCF83278E5DAA0A4B17FC542DEA201 /* HTMLInputStreamReader.m */; };
+ 8360E68489B24A21850CF9ED9C9B186A /* HTMLEOFToken.m in Sources */ = {isa = PBXBuildFile; fileRef = F37B91F20E840E24200A36C21C78C4EB /* HTMLEOFToken.m */; };
+ 845BE6EA182C074B3490F520A923C4FA /* HTMLListOfActiveFormattingElements.m in Sources */ = {isa = PBXBuildFile; fileRef = 48539D8C5CC835B79C1E084DBED805B1 /* HTMLListOfActiveFormattingElements.m */; };
+ 872D6E498DD573853FE025FA09E443A9 /* HTMLComment.h in Headers */ = {isa = PBXBuildFile; fileRef = 83979DA8E5219881363F47D6B0A2A6DC /* HTMLComment.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8779454889E83F938364A97B4C5D8951 /* HTMLNodeTraversal.h in Headers */ = {isa = PBXBuildFile; fileRef = D9ED4107FD8E8E47E4C94F779EEB887B /* HTMLNodeTraversal.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 8B751DCF057CC48A38C3E62342C00F0D /* HTMLCharacterData.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C449EDB567A9D07735F27163C5C701 /* HTMLCharacterData.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 8E100E2CB8690E811B6CFB23112A4C4B /* HTMLDOMUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = AC5CB41A17DE87BCC0CB75D8D62B2473 /* HTMLDOMUtils.m */; };
+ 8EBB8E44881F8CCBFDFBF4114BABE1E5 /* HTMLParseErrorToken.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C33E44677EF2ADA2DFB6C7AB21DD60 /* HTMLParseErrorToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 9328BFAA00AC8B9B8581908E1FD467CC /* HTMLKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 1003E11A6CD4DE97D5280AAFEB1DA6BD /* HTMLKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 95AA463EB563ADBD7653687EAFE07863 /* HTMLTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4140029567D9B1EB9559998E1C2EBC13 /* HTMLTokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 9641CD9C68A3E47FC33E2B845432AAA7 /* HTMLTreeWalker.m in Sources */ = {isa = PBXBuildFile; fileRef = EC12D39B0C1AEC78E99FCBE3EDB0FC86 /* HTMLTreeWalker.m */; };
+ 96768A16E4D4D0540F2586C2BDEEAC4D /* HTMLEOFToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 607019FC43CF38BE4F8B5A1CA80006D4 /* HTMLEOFToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 9770C78888036EFCF5D9F263C344052F /* HTMLInputStreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A1A6D58B748B096F725A9BF634033E3 /* HTMLInputStreamReader.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ A064553DE1BCF58DB3F2F063C2C33853 /* HTMLTreeWalker.h in Headers */ = {isa = PBXBuildFile; fileRef = BD39CEC78D5D86BE6A6B1D5F2D94352F /* HTMLTreeWalker.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A216A99B8C878BB3CF4903B08768E86D /* HTMLParser+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7597E197037C0BC298152777EA2EA5FA /* HTMLParser+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ A2295AAD6FA68B3A93BB41DD906E5CFE /* CSSNthExpressionParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4CB09FEBA92D7BA3F96150C34F0228 /* CSSNthExpressionParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ A4D7E68B9A78C0842058BEF25DA96367 /* HTMLDocument+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F52FF5E2BECB07C1F141F329DF3062F7 /* HTMLDocument+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ AA4CB9505092477C341F297AA433209F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ ABA60F368DB1DBC561A901199CE2D5EB /* HTMLNode+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E2E7CA717B6B3B7DCF09DBDD64C5F56 /* HTMLNode+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ AF815058852915CDE640D979D1F3D19B /* CSSCodePoints.h in Headers */ = {isa = PBXBuildFile; fileRef = 6630EB507BA947B6878EBCB3E67A66FE /* CSSCodePoints.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ AF93BEDE4A742D0670902AAA2B8F1825 /* HTMLElement.m in Sources */ = {isa = PBXBuildFile; fileRef = FA520FE989AAEC01EE5EA8A8B5C60411 /* HTMLElement.m */; };
+ B3BCF330195B8B8ED06E297FA0043256 /* CSSSelectors.h in Headers */ = {isa = PBXBuildFile; fileRef = C653AE108E5754F69498E252C441B9D6 /* CSSSelectors.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B45F3F30B18E91E4EC6B3B5BCE72AC21 /* HTMLText.m in Sources */ = {isa = PBXBuildFile; fileRef = D496DB9BC8028AE2CDBB9EA8BFB57966 /* HTMLText.m */; };
+ BA5BEBF07D3CC61C99E603873FB620E0 /* HTMLKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F40EF55F0394959BB6A0302A0AC7FDEF /* HTMLKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BB0F4F6B3CAA9004436C328BF9EA4609 /* CSSAttributeSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 03994542FE65D145D4CD58E099099A18 /* CSSAttributeSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ BEB7A6BF719ED9CF0C2A4D96680F7B4D /* HTMLTokens.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F41859CC06C2AE7609A2A3F5446C1FA /* HTMLTokens.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ C2F883F18F118A64D26C58D41431D9F8 /* HTMLDOMTokenList.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DE79111B66BB0C0DBB20FE368011429 /* HTMLDOMTokenList.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CA87AA8DC54DEC0F8071E142E0D6D236 /* CSSPseudoFunctionSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 28828CF49D713284D0D20312E3D60F4C /* CSSPseudoFunctionSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CC29562ABC3780EBF69E620997446FBD /* CSSSelectorParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DC52F6E5FF289E667972337E7B4C606 /* CSSSelectorParser.m */; };
+ CCE49048EF7AC17ED1174B99384FBD1C /* HTMLParserInsertionModes.h in Headers */ = {isa = PBXBuildFile; fileRef = 9320BC1220238754F88D10688C77D431 /* HTMLParserInsertionModes.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ CCE50C8D53F71EB375EC097E4550164B /* CSSSelectorParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F29711CE1EBBD434C6E94671DC412A /* CSSSelectorParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ CD38F5B7528811236C409F0AA8BCDD64 /* HTMLTemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = FDCE25220F48C06527AB5FBE65395D17 /* HTMLTemplate.m */; };
+ CD8976D166B5DAE4F9E0647BE1768AB0 /* HTMLTokenizerCharacters.h in Headers */ = {isa = PBXBuildFile; fileRef = 89338A3F783918C1339FB829E980F25C /* HTMLTokenizerCharacters.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ D3AA0B1D9FC83D0BC9B8B9F3155058DB /* CSSSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ACA0F2182D1E87EADE5BCA60DB524B4 /* CSSSelector.m */; };
+ D45BE59EB63CF87111EFA9548D5CE471 /* HTMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 83781FCC78648B2B8E11D9CC9D120F34 /* HTMLParser.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ D5EC9515D7FFABC2B82C09517D8B1A95 /* HTMLCharacterData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C481794EA0CFF9A950376F2E5EC8E08 /* HTMLCharacterData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ D6CD14D3DF8596B30912485EDCA02C94 /* CSSNthExpressionSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 192C0A5AB4DCAF2B45EE51CDB929B9E0 /* CSSNthExpressionSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ DC48A0293F395439BF37E37B23F00BEC /* HTMLNodeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = DB00ECB3C6307D98C76FC0FF9D7EBC5B /* HTMLNodeFilter.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ DD00A4962D61F7DC379EB5A507190E11 /* Pods-circolapp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D9156A8CD10D6AC09FD4B510CB2C386 /* Pods-circolapp-dummy.m */; };
+ E0EDA95C7999E96A3F6D233648C16543 /* HTMLToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 6023ED79024C7FDA53EC92281727599E /* HTMLToken.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ E20A182FCC3B1A9BCF21C37E641866EC /* HTMLNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 8306329320801805CDA54A64D3FDE135 /* HTMLNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ E3CE7376177A06132033C9437262F026 /* HTMLNodeVisitor.m in Sources */ = {isa = PBXBuildFile; fileRef = 401217ADEE961C1EA8C11AAF1631FAB3 /* HTMLNodeVisitor.m */; };
+ E3FA7CAEC3E2D7F83C30016227B0E68A /* HTMLComment.m in Sources */ = {isa = PBXBuildFile; fileRef = DE90A14783D08D59F759BD7F3CC893E1 /* HTMLComment.m */; };
+ E5ED1C7866406B2ED7C4C35951C550A1 /* CSSTypeSelector.h in Headers */ = {isa = PBXBuildFile; fileRef = 6021E5D41238F536EADC4CC9129E89E4 /* CSSTypeSelector.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ E7CAF39076F37BCD25A77EABA8841CB5 /* HTMLQuircksMode.m in Sources */ = {isa = PBXBuildFile; fileRef = 02C1685A955351F2CF318948E682637A /* HTMLQuircksMode.m */; };
+ EE8621324F42E1281FF84779255A6085 /* HTMLNodeFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A7C17886E7106A14C4EB9888EF193F /* HTMLNodeFilter.m */; };
+ EFD38194F6E9114340A3A92F91CA1CDA /* HTMLDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = E04F8AB621AFAE76E59DB89A04F7B1D5 /* HTMLDocument.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F100AFA512326A66E7FC6128C3A2CB3F /* HTMLParseErrorToken.m in Sources */ = {isa = PBXBuildFile; fileRef = BAAD9BF7019614AB964F34ABC7FCEA65 /* HTMLParseErrorToken.m */; };
+ F4A81C3C9D7F786D0023A843E4DA3DAD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */; };
+ F55E6DF3787A79DA0CFB800485F46CC1 /* HTMLStackOfOpenElements.m in Sources */ = {isa = PBXBuildFile; fileRef = 7391B3B73270ECA590356D8413A6727A /* HTMLStackOfOpenElements.m */; };
+ F78000A16144247C9CD4643004E3E65E /* HTMLRange.h in Headers */ = {isa = PBXBuildFile; fileRef = C25DFD4697CD15AD7A34909178B34B96 /* HTMLRange.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ F8567FFAE1F25F53270793D20B81C0DF /* NSString+HTMLKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F3BB3020B2545C7651879F4F7330FA1 /* NSString+HTMLKit.m */; };
+ F8D753DEE0D2238D62DA45A500245843 /* CSSCompoundSelector.m in Sources */ = {isa = PBXBuildFile; fileRef = 943F7154477DEDAF9173D9F58C684EEB /* CSSCompoundSelector.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 4BFD95A4E643C7881472568BA5AFC5C5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D6807B82082F2598A4BABD0A6B657D10;
+ remoteInfo = HTMLKit;
+ };
+ AC42C80ADA39383712AAF44851460D2F /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D6807B82082F2598A4BABD0A6B657D10;
+ remoteInfo = HTMLKit;
+ };
+ D08C17AFDD8ECDD3AD31AAD52F6507C8 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 8777C9F6889E59EFFD631D80AEE9048B;
+ remoteInfo = shared;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 02C1685A955351F2CF318948E682637A /* HTMLQuircksMode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLQuircksMode.m; path = Sources/HTMLQuircksMode.m; sourceTree = ""; };
+ 03994542FE65D145D4CD58E099099A18 /* CSSAttributeSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSAttributeSelector.h; path = Sources/include/CSSAttributeSelector.h; sourceTree = ""; };
+ 04B41F5C381485FFF855CA713D16C10B /* HTMLKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HTMLKit.release.xcconfig; sourceTree = ""; };
+ 0778F4E7FB2B669AB233666517A3CCC5 /* HTMLNamespaces.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLNamespaces.h; path = Sources/include/HTMLNamespaces.h; sourceTree = ""; };
+ 08127DDF37F0577B339CA89DDFB648CD /* HTMLDOMUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLDOMUtils.h; path = Sources/include/HTMLDOMUtils.h; sourceTree = ""; };
+ 0A6E0F7F7714694101C9398CCB535D49 /* CSSAttributeSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSAttributeSelector.m; path = Sources/CSSAttributeSelector.m; sourceTree = ""; };
+ 0AF518B4844BEAC8D295F916D31689B6 /* HTMLElementTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLElementTypes.h; path = Sources/include/HTMLElementTypes.h; sourceTree = ""; };
+ 0D808069E281F38E3230BBEA646A3AF6 /* Pods-circolapp-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-circolapp-acknowledgements.markdown"; sourceTree = ""; };
+ 0D9156A8CD10D6AC09FD4B510CB2C386 /* Pods-circolapp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-circolapp-dummy.m"; sourceTree = ""; };
+ 0EB71F686B790CFCBE65663F88E1F7E2 /* HTMLDocument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLDocument.m; path = Sources/HTMLDocument.m; sourceTree = ""; };
+ 1003E11A6CD4DE97D5280AAFEB1DA6BD /* HTMLKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLKit.h; path = Sources/include/HTMLKit.h; sourceTree = ""; };
+ 10C4994C6943905373ED93FCACF86CA7 /* HTMLCharacterToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLCharacterToken.h; path = Sources/include/HTMLCharacterToken.h; sourceTree = ""; };
+ 10F3AE88712CC7AD87BFBC6913A1D05D /* CSSNthExpressionSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSNthExpressionSelector.m; path = Sources/CSSNthExpressionSelector.m; sourceTree = ""; };
+ 192C0A5AB4DCAF2B45EE51CDB929B9E0 /* CSSNthExpressionSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSNthExpressionSelector.h; path = Sources/include/CSSNthExpressionSelector.h; sourceTree = ""; };
+ 1A9F1571B919B98B217C85FCC793A853 /* HTMLKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HTMLKit.modulemap; sourceTree = ""; };
+ 1B3D8EF0B61D8E19178A29B2BC52A768 /* HTMLCommentToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLCommentToken.m; path = Sources/HTMLCommentToken.m; sourceTree = ""; };
+ 1D78EBE6310923F7A78C5406A04CA5E2 /* HTMLCommentToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLCommentToken.h; path = Sources/include/HTMLCommentToken.h; sourceTree = ""; };
+ 1DC52F6E5FF289E667972337E7B4C606 /* CSSSelectorParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSSelectorParser.m; path = Sources/CSSSelectorParser.m; sourceTree = ""; };
+ 20090293D4AE249A79E878C2E7F52482 /* HTMLKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HTMLKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 213281C7B3F7F9F409EB7AB9553AA764 /* CSSNthExpressionParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSNthExpressionParser.m; path = Sources/CSSNthExpressionParser.m; sourceTree = ""; };
+ 26A538DF5CE6DD03E5DA17B6F0FEBFD4 /* HTMLTokenizerEntities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTokenizerEntities.h; path = Sources/include/HTMLTokenizerEntities.h; sourceTree = ""; };
+ 28828CF49D713284D0D20312E3D60F4C /* CSSPseudoFunctionSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSPseudoFunctionSelector.h; path = Sources/include/CSSPseudoFunctionSelector.h; sourceTree = ""; };
+ 2CBF3423732E09EBA22B63D8B7C5B994 /* Pods-circolapp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-circolapp.modulemap"; sourceTree = ""; };
+ 30731450BFCC3EB4E5FC4C0A3349E042 /* Pods-circolapp-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-circolapp-frameworks.sh"; sourceTree = ""; };
+ 30CA595A56CBBDB20AB043D2DB2A7BF5 /* HTMLKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HTMLKit-prefix.pch"; sourceTree = ""; };
+ 323577F8E8029F5A9462DFFF2956754E /* HTMLKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HTMLKit-dummy.m"; sourceTree = ""; };
+ 401217ADEE961C1EA8C11AAF1631FAB3 /* HTMLNodeVisitor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLNodeVisitor.m; path = Sources/HTMLNodeVisitor.m; sourceTree = ""; };
+ 4140029567D9B1EB9559998E1C2EBC13 /* HTMLTokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTokenizer.h; path = Sources/include/HTMLTokenizer.h; sourceTree = ""; };
+ 43E6A0F42759E73BC49D1D2A7D9012AA /* CSSSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSSelector.h; path = Sources/include/CSSSelector.h; sourceTree = ""; };
+ 449D7DC6B7BF767FC92501888B60EC6E /* shared.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = shared.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+ 46A85F31835568DAA40A97B8F2759417 /* HTMLRange+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "HTMLRange+Private.h"; path = "Sources/include/HTMLRange+Private.h"; sourceTree = ""; };
+ 48539D8C5CC835B79C1E084DBED805B1 /* HTMLListOfActiveFormattingElements.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLListOfActiveFormattingElements.m; path = Sources/HTMLListOfActiveFormattingElements.m; sourceTree = ""; };
+ 4C06DB2A8E864C358762D65EC0A7FDD6 /* HTMLTokenizerEntities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLTokenizerEntities.m; path = Sources/HTMLTokenizerEntities.m; sourceTree = ""; };
+ 4C773B4EB6681533DE2BC5F9EB080AE9 /* HTMLStackOfOpenElements.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLStackOfOpenElements.h; path = Sources/include/HTMLStackOfOpenElements.h; sourceTree = ""; };
+ 4D16F01B4145BD1E6616143102D2DEEC /* CSSCombinatorSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSCombinatorSelector.h; path = Sources/include/CSSCombinatorSelector.h; sourceTree = ""; };
+ 4DE79111B66BB0C0DBB20FE368011429 /* HTMLDOMTokenList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLDOMTokenList.h; path = Sources/include/HTMLDOMTokenList.h; sourceTree = ""; };
+ 4F2CBF92D33986C8715D89D55B45FF8A /* HTMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLParser.m; path = Sources/HTMLParser.m; sourceTree = ""; };
+ 4F56F889CE5267A27B9EBAC112E281E7 /* HTMLTagToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTagToken.h; path = Sources/include/HTMLTagToken.h; sourceTree = ""; };
+ 4F72756BBB2F75A0F17D0DA2E66E7C76 /* CSSInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSInputStream.h; path = Sources/include/CSSInputStream.h; sourceTree = ""; };
+ 4F72C0102B3B07761E54D8428FB138E6 /* Pods_circolapp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_circolapp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 526039880450D3201656B4E5DDEF8F7D /* HTMLDOCTYPEToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLDOCTYPEToken.h; path = Sources/include/HTMLDOCTYPEToken.h; sourceTree = ""; };
+ 52C67A8EC9CB9B1E736407A0BABE59B1 /* HTMLNodeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLNodeVisitor.h; path = Sources/include/HTMLNodeVisitor.h; sourceTree = ""; };
+ 53D8E2BF7A67912F91D24CCE3C7F813D /* HTMLDocumentFragment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLDocumentFragment.h; path = Sources/include/HTMLDocumentFragment.h; sourceTree = ""; };
+ 54446C4D4DE47F67B49BBE2B0A2CCCE9 /* NSCharacterSet+HTMLKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSCharacterSet+HTMLKit.m"; path = "Sources/NSCharacterSet+HTMLKit.m"; sourceTree = ""; };
+ 588711CA518CFF7DB737AA09710B346D /* HTMLKitErrorDomain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLKitErrorDomain.h; path = Sources/include/HTMLKitErrorDomain.h; sourceTree = ""; };
+ 588AB2806A93F89CA15C526068A342C2 /* HTMLQuirksMode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLQuirksMode.h; path = Sources/include/HTMLQuirksMode.h; sourceTree = ""; };
+ 5ACA0F2182D1E87EADE5BCA60DB524B4 /* CSSSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSSelector.m; path = Sources/CSSSelector.m; sourceTree = ""; };
+ 5BABE617B3697B8BACDE8BE3C1ACCBD7 /* HTMLMarker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLMarker.m; path = Sources/HTMLMarker.m; sourceTree = ""; };
+ 5C481794EA0CFF9A950376F2E5EC8E08 /* HTMLCharacterData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "HTMLCharacterData+Private.h"; path = "Sources/include/HTMLCharacterData+Private.h"; sourceTree = ""; };
+ 5E2E7CA717B6B3B7DCF09DBDD64C5F56 /* HTMLNode+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "HTMLNode+Private.h"; path = "Sources/include/HTMLNode+Private.h"; sourceTree = ""; };
+ 6003B693F057B33DEA18B8E9439AEECE /* HTMLDocumentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLDocumentType.h; path = Sources/include/HTMLDocumentType.h; sourceTree = ""; };
+ 6021E5D41238F536EADC4CC9129E89E4 /* CSSTypeSelector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSTypeSelector.h; path = Sources/include/CSSTypeSelector.h; sourceTree = ""; };
+ 6023ED79024C7FDA53EC92281727599E /* HTMLToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLToken.h; path = Sources/include/HTMLToken.h; sourceTree = ""; };
+ 60485B71EE491381ABC3D8A2ADFD6598 /* HTMLOrderedDictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLOrderedDictionary.h; path = Sources/include/HTMLOrderedDictionary.h; sourceTree = ""; };
+ 607019FC43CF38BE4F8B5A1CA80006D4 /* HTMLEOFToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLEOFToken.h; path = Sources/include/HTMLEOFToken.h; sourceTree = ""; };
+ 607156B5F1ADCD6FC5AFAC2A8E73AD23 /* Pods-circolapp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-circolapp.debug.xcconfig"; sourceTree = ""; };
+ 63A7C17886E7106A14C4EB9888EF193F /* HTMLNodeFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLNodeFilter.m; path = Sources/HTMLNodeFilter.m; sourceTree = ""; };
+ 63EEDCD1914FD93F387D94F1ED5F2BFF /* HTMLKitDOMExceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLKitDOMExceptions.m; path = Sources/HTMLKitDOMExceptions.m; sourceTree = ""; };
+ 64F29711CE1EBBD434C6E94671DC412A /* CSSSelectorParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSSelectorParser.h; path = Sources/include/CSSSelectorParser.h; sourceTree = ""; };
+ 6630EB507BA947B6878EBCB3E67A66FE /* CSSCodePoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSCodePoints.h; path = Sources/include/CSSCodePoints.h; sourceTree = ""; };
+ 66864699A99E946F6168F97A30509EE7 /* NSString+HTMLKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+HTMLKit.h"; path = "Sources/include/NSString+HTMLKit.h"; sourceTree = ""; };
+ 69CBCD6A63F470DFDEB889AA3F383FA8 /* HTMLText.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLText.h; path = Sources/include/HTMLText.h; sourceTree = ""; };
+ 69DD17E8138FB6ABEEBA615A27A3B3CC /* HTMLDocumentFragment.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLDocumentFragment.m; path = Sources/HTMLDocumentFragment.m; sourceTree = ""; };
+ 6A4CB09FEBA92D7BA3F96150C34F0228 /* CSSNthExpressionParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSNthExpressionParser.h; path = Sources/include/CSSNthExpressionParser.h; sourceTree = ""; };
+ 6DDA2E5A6AD556410AF7E355DD2F0ECD /* HTMLSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLSerializer.h; path = Sources/include/HTMLSerializer.h; sourceTree = ""; };
+ 6F3BB3020B2545C7651879F4F7330FA1 /* NSString+HTMLKit.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+HTMLKit.m"; path = "Sources/NSString+HTMLKit.m"; sourceTree = ""; };
+ 6F41859CC06C2AE7609A2A3F5446C1FA /* HTMLTokens.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTokens.h; path = Sources/include/HTMLTokens.h; sourceTree = ""; };
+ 73010CC983E3809BECEE5348DA1BB8C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };
+ 7391B3B73270ECA590356D8413A6727A /* HTMLStackOfOpenElements.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLStackOfOpenElements.m; path = Sources/HTMLStackOfOpenElements.m; sourceTree = ""; };
+ 7597E197037C0BC298152777EA2EA5FA /* HTMLParser+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "HTMLParser+Private.h"; path = "Sources/include/HTMLParser+Private.h"; sourceTree = ""; };
+ 75FAF134DAF14E022784190C57DCC103 /* shared.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.release.xcconfig; sourceTree = ""; };
+ 788B5128A897EAB2AFBFA6E8BFA1D695 /* CSSStructuralPseudoSelectors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSStructuralPseudoSelectors.h; path = Sources/include/CSSStructuralPseudoSelectors.h; sourceTree = ""; };
+ 79E772EDD0AACDF2F4AA72D32DB49D36 /* HTMLCharacterToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLCharacterToken.m; path = Sources/HTMLCharacterToken.m; sourceTree = ""; };
+ 7A1A6D58B748B096F725A9BF634033E3 /* HTMLInputStreamReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLInputStreamReader.h; path = Sources/include/HTMLInputStreamReader.h; sourceTree = ""; };
+ 7BE6A04D22D80896904C1DB4C7E7404B /* HTMLDOCTYPEToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLDOCTYPEToken.m; path = Sources/HTMLDOCTYPEToken.m; sourceTree = ""; };
+ 7E6E2469580B6A9887A2CE120467AD25 /* Pods-circolapp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-circolapp.release.xcconfig"; sourceTree = ""; };
+ 807835D1DCEB0DDCE07F5B3EAF4718D3 /* CSSPseudoClassSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSPseudoClassSelector.m; path = Sources/CSSPseudoClassSelector.m; sourceTree = ""; };
+ 8306329320801805CDA54A64D3FDE135 /* HTMLNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLNode.h; path = Sources/include/HTMLNode.h; sourceTree = ""; };
+ 83781FCC78648B2B8E11D9CC9D120F34 /* HTMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLParser.h; path = Sources/include/HTMLParser.h; sourceTree = ""; };
+ 83979DA8E5219881363F47D6B0A2A6DC /* HTMLComment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLComment.h; path = Sources/include/HTMLComment.h; sourceTree = ""; };
+ 87951E59BFA991F46899206464CF404A /* NSCharacterSet+HTMLKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSCharacterSet+HTMLKit.h"; path = "Sources/include/NSCharacterSet+HTMLKit.h"; sourceTree = ""; };
+ 89338A3F783918C1339FB829E980F25C /* HTMLTokenizerCharacters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTokenizerCharacters.h; path = Sources/include/HTMLTokenizerCharacters.h; sourceTree = ""; };
+ 8E8E0FE4A11FE712625F1A40DBADCFF0 /* HTMLOrderedDictionary.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLOrderedDictionary.m; path = Sources/HTMLOrderedDictionary.m; sourceTree = ""; };
+ 9320BC1220238754F88D10688C77D431 /* HTMLParserInsertionModes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLParserInsertionModes.h; path = Sources/include/HTMLParserInsertionModes.h; sourceTree = ""; };
+ 943F7154477DEDAF9173D9F58C684EEB /* CSSCompoundSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSCompoundSelector.m; path = Sources/CSSCompoundSelector.m; sourceTree = ""; };
+ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
+ 9E997E6BB09D55AD3B59813EAB449067 /* CSSTypeSelector.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CSSTypeSelector.m; path = Sources/CSSTypeSelector.m; sourceTree = ""; };
+ 9ECBF6D64FC119B179C67E07ADD981D2 /* HTMLCharacterData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLCharacterData.m; path = Sources/HTMLCharacterData.m; sourceTree = ""; };
+ 9F90600038159A008CC4566B3940F352 /* HTMLTreeVisitor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTreeVisitor.h; path = Sources/include/HTMLTreeVisitor.h; sourceTree = ""; };
+ A101BC7B991A7EB335AD9AB17D6193E2 /* Pods-circolapp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-circolapp-Info.plist"; sourceTree = ""; };
+ A33BE7A00363628902933CA5E003B3C7 /* HTMLKitDOMExceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLKitDOMExceptions.h; path = Sources/include/HTMLKitDOMExceptions.h; sourceTree = ""; };
+ A662CBC4D8B33E0AB0D150E19409D673 /* HTMLKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HTMLKit-Info.plist"; sourceTree = ""; };
+ A8A2E0E0AF88E3AAB78072B64582BAFA /* HTMLTemplate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTemplate.h; path = Sources/include/HTMLTemplate.h; sourceTree = ""; };
+ AA45CF4EAC7A99D2D7DECCE0382E2293 /* HTMLToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLToken.m; path = Sources/HTMLToken.m; sourceTree = ""; };
+ AC5CB41A17DE87BCC0CB75D8D62B2473 /* HTMLDOMUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLDOMUtils.m; path = Sources/HTMLDOMUtils.m; sourceTree = ""; };
+ B16CE6D8F957F89D00CC1A1B27909262 /* Pods-circolapp-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-circolapp-acknowledgements.plist"; sourceTree = ""; };
+ B2C33E44677EF2ADA2DFB6C7AB21DD60 /* HTMLParseErrorToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLParseErrorToken.h; path = Sources/include/HTMLParseErrorToken.h; sourceTree = ""; };
+ B2E4FE014AD4FE94E19C2390FF07C6B6 /* CSSSelectorBlock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CSSSelectorBlock.h; path = Sources/include/CSSSelectorBlock.h; sourceTree = ""; };
+ B7134F970D53F33E79A4EAAEF18F7C1A /* shared.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = shared.debug.xcconfig; sourceTree = ""; };
+ BAAD9BF7019614AB964F34ABC7FCEA65 /* HTMLParseErrorToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLParseErrorToken.m; path = Sources/HTMLParseErrorToken.m; sourceTree = ""; };
+ BD1F43F894774ED4E84CCF6C22431CEE /* HTMLNodeTraversal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = HTMLNodeTraversal.m; path = Sources/HTMLNodeTraversal.m; sourceTree = ""; };
+ BD39CEC78D5D86BE6A6B1D5F2D94352F /* HTMLTreeWalker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLTreeWalker.h; path = Sources/include/HTMLTreeWalker.h; sourceTree = ""; };
+ BEC27C9A7B29A024253B788F05C013A7 /* HTMLElementAdjustment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = HTMLElementAdjustment.h; path = Sources/include/HTMLElementAdjustment.h; sourceTree = "