@@ -47,10 +47,8 @@ public enum InsertionMode {
4747// MARK: - Tag Name Sets (for fast O(1) lookups)
4848
4949private let kTableSectionTags : Set < String > = [ " tbody " , " tfoot " , " thead " ]
50- private let kTableRowTags : Set < String > = [ " tbody " , " tfoot " , " thead " , " tr " ]
5150private let kTableCellTags : Set < String > = [ " td " , " th " ]
5251private let kTableRelatedTags : Set < String > = [ " table " , " tbody " , " tfoot " , " thead " , " tr " ]
53- private let kTableAllTags : Set < String > = [ " table " , " tbody " , " tfoot " , " thead " , " tr " , " td " , " th " ]
5452private let kTableBoundaryTags : Set < String > = [ " caption " , " table " , " tbody " , " tfoot " , " thead " , " tr " , " td " , " th " ]
5553private let kHeadingTags : Set < String > = [ " h1 " , " h2 " , " h3 " , " h4 " , " h5 " , " h6 " ]
5654private let kListItemTags : Set < String > = [ " dd " , " dt " ]
@@ -114,47 +112,6 @@ private let kBlockStructureEndTags: Set<String> = [
114112 " main " , " menu " , " nav " , " ol " , " pre " , " search " , " section " , " summary " , " ul " ,
115113]
116114
117- // MARK: - TagID Sets (fast integer comparisons)
118-
119- private let kTableSectionTagIDs : Set < TagID > = [ . tbody, . tfoot, . thead]
120- private let kTableRowTagIDs : Set < TagID > = [ . tbody, . tfoot, . thead, . tr]
121- private let kTableCellTagIDs : Set < TagID > = [ . td, . th]
122- private let kTableRelatedTagIDs : Set < TagID > = [ . table, . tbody, . tfoot, . thead, . tr]
123- private let kTableAllTagIDs : Set < TagID > = [ . table, . tbody, . tfoot, . thead, . tr, . td, . th]
124- private let kTableBoundaryTagIDs : Set < TagID > = [ . caption, . table, . tbody, . tfoot, . thead, . tr, . td, . th]
125- private let kHeadingTagIDs : Set < TagID > = [ . h1, . h2, . h3, . h4, . h5, . h6]
126- private let kListItemTagIDs : Set < TagID > = [ . dd, . dt]
127- private let kHeadMetaTagIDs : Set < TagID > = [ . base, . basefont, . bgsound, . link, . meta]
128- private let kHeadStyleTagIDs : Set < TagID > = [ . noframes, . style]
129- private let kTemplateScriptTagIDs : Set < TagID > = [ . script, . template]
130- private let kVoidElementTagIDs : Set < TagID > = [ . area, . br, . embed, . img, . keygen, . wbr]
131- private let kFormattingScopeTagIDs : Set < TagID > = [ . applet, . marquee, . object]
132- private let kBreakoutTagIDs : Set < TagID > = [ . head, . body, . html, . br]
133- private let kTableContextTagIDs : Set < TagID > = [ . table, . template, . html]
134- private let kTableBodyContextTagIDs : Set < TagID > = [ . tbody, . tfoot, . thead, . template, . html]
135- private let kRowContextTagIDs : Set < TagID > = [ . tr, . template, . html]
136- private let kSelectContentTagIDs : Set < TagID > = [ . input, . textarea]
137- private let kOptionTagIDs : Set < TagID > = [ . optgroup, . option]
138- private let kRubyBaseTagIDs : Set < TagID > = [ . rb, . rtc]
139- private let kRubyTextTagIDs : Set < TagID > = [ . rp, . rt]
140- private let kSVGIntegrationTagIDs : Set < TagID > = [ . foreignObject, . desc, . title]
141- private let kMathMLIntegrationTagIDs : Set < TagID > = [ . mi, . mo, . mn, . ms, . mtext, . annotationXml]
142- private let kMediaTagIDs : Set < TagID > = [ . param, . source, . track]
143- private let kFormElementTagIDs : Set < TagID > = [ . p, . div, . span, . button, . datalist, . selectedcontent, . menuitem]
144- private let kHeadInBodyTagIDs : Set < TagID > = [ . basefont, . bgsound, . link, . meta, . noframes, . style]
145- private let kHeadNoscriptTagIDs : Set < TagID > = [ . head, . noscript]
146- private let kTableRowCellTagIDs : Set < TagID > = [ . td, . th, . tr]
147- private let kTableCaptionTagIDs : Set < TagID > = [ . caption, . col, . colgroup, . tbody, . tfoot, . thead]
148- private let kTableCaptionRowTagIDs : Set < TagID > = [ . caption, . col, . colgroup, . tbody, . tfoot, . thead, . tr]
149- private let kTableAllCellTagIDs : Set < TagID > = [ . caption, . col, . colgroup, . tbody, . td, . tfoot, . th, . thead, . tr]
150- private let kTableCaptionGroupTagIDs : Set < TagID > = [ . caption, . colgroup, . tbody, . tfoot, . thead]
151- private let kPreListingTagIDs : Set < TagID > = [ . pre, . listing]
152- private let kAddressDivPTagIDs : Set < TagID > = [ . address, . div, . p]
153- private let kBodyHtmlBrTagIDs : Set < TagID > = [ . body, . html, . br]
154- private let kBodyCaptionHtmlTagIDs : Set < TagID > = [ . body, . caption, . col, . colgroup, . html]
155- private let kBodyCaptionCellTagIDs : Set < TagID > = [ . body, . caption, . col, . colgroup, . html, . td, . th]
156- private let kBodyCaptionRowTagIDs : Set < TagID > = [ . body, . caption, . col, . colgroup, . html, . td, . th, . tr]
157-
158115// MARK: - TreeBuilder
159116
160117/// Tree builder that constructs DOM from tokens
@@ -1606,7 +1563,7 @@ public final class TreeBuilder: TokenSink {
16061563 if self . hasElementInButtonScope ( . p) {
16071564 self . closePElement ( )
16081565 }
1609- if let current = currentNode, kHeadingTagIDs . contains ( current. tagId ) {
1566+ if let current = currentNode, kHeadingTags . contains ( current. name ) {
16101567 self . emitError ( " unexpected-start-tag " )
16111568 self . popCurrentElement ( )
16121569 }
@@ -1669,7 +1626,7 @@ public final class TreeBuilder: TokenSink {
16691626 }
16701627 // Stop at special elements, but NOT address, div, or p
16711628 if SPECIAL_ELEMENTS . contains ( node. name) ,
1672- !kAddressDivPTagIDs . contains ( node. tagId )
1629+ !kAddressDivPTags . contains ( node. name )
16731630 {
16741631 break
16751632 }
@@ -2428,7 +2385,7 @@ public final class TreeBuilder: TokenSink {
24282385 // Pop until h1-h6
24292386 while let current = currentNode {
24302387 self . popCurrentElement ( )
2431- if kHeadingTagIDs . contains ( current. tagId ) {
2388+ if kHeadingTags . contains ( current. name ) {
24322389 break
24332390 }
24342391 }
@@ -2773,7 +2730,7 @@ public final class TreeBuilder: TokenSink {
27732730 // insert normally into that element.
27742731 if self . fosterParentingEnabled {
27752732 let target = self . adjustedInsertionTarget
2776- if kTableRelatedTagIDs . contains ( target. tagId ) {
2733+ if kTableRelatedTags . contains ( target. name ) {
27772734 self . fosterParentNode ( node)
27782735 }
27792736 else {
@@ -2847,7 +2804,7 @@ public final class TreeBuilder: TokenSink {
28472804
28482805 // Per spec: foster parenting for text only applies when the target is a table element
28492806 if self . fosterParentingEnabled,
2850- kTableRelatedTagIDs . contains ( target. tagId )
2807+ kTableRelatedTags . contains ( target. name )
28512808 {
28522809 self . insertCharacterWithFosterParenting ( ch)
28532810 return
@@ -2875,7 +2832,7 @@ public final class TreeBuilder: TokenSink {
28752832
28762833 // Per spec: foster parenting for text only applies when the target is a table element
28772834 if self . fosterParentingEnabled,
2878- kTableRelatedTagIDs . contains ( target. tagId )
2835+ kTableRelatedTags . contains ( target. name )
28792836 {
28802837 // Fall back to character-by-character for foster parenting
28812838 for ch in text {
@@ -3012,7 +2969,7 @@ public final class TreeBuilder: TokenSink {
30122969 /// Clear the stack back to a table context (table, template, or html)
30132970 private func clearStackBackToTableContext( ) {
30142971 while let current = currentNode {
3015- if kTableContextTagIDs . contains ( current. tagId ) {
2972+ if kTableContextTags . contains ( current. name ) {
30162973 break
30172974 }
30182975 self . popCurrentElement ( )
@@ -3022,7 +2979,7 @@ public final class TreeBuilder: TokenSink {
30222979 /// Clear the stack back to a table body context (tbody, tfoot, thead, template, or html)
30232980 private func clearStackBackToTableBodyContext( ) {
30242981 while let current = currentNode {
3025- if kTableBodyContextTagIDs . contains ( current. tagId ) {
2982+ if kTableBodyContextTags . contains ( current. name ) {
30262983 break
30272984 }
30282985 self . popCurrentElement ( )
@@ -3034,7 +2991,7 @@ public final class TreeBuilder: TokenSink {
30342991 // Per Python justhtml: requires both name match AND HTML namespace
30352992 while let current = currentNode {
30362993 let isHTML = current. namespace == nil || current. namespace == . html
3037- if kRowContextTagIDs . contains ( current. tagId ) , isHTML {
2994+ if kRowContextTags . contains ( current. name ) , isHTML {
30382995 break
30392996 }
30402997 self . popCurrentElement ( )
@@ -3154,12 +3111,12 @@ public final class TreeBuilder: TokenSink {
31543111 if scopeElements. contains ( node. name) {
31553112 // For MathML/SVG scope boundaries, check namespace
31563113 // Use module-level kMathMLIntegrationTags and kSVGIntegrationTags
3157- if kMathMLIntegrationTagIDs . contains ( node. tagId ) {
3114+ if kMathMLIntegrationTags . contains ( node. name ) {
31583115 if node. namespace == . math {
31593116 return false
31603117 }
31613118 }
3162- else if kSVGIntegrationTagIDs . contains ( node. tagId ) {
3119+ else if kSVGIntegrationTags . contains ( node. name ) {
31633120 if node. namespace == . svg {
31643121 return false
31653122 }
@@ -3221,12 +3178,12 @@ public final class TreeBuilder: TokenSink {
32213178 return true
32223179 }
32233180 if scopeElements. contains ( node. tagId) {
3224- if kMathMLIntegrationTagIDs . contains ( node. tagId ) {
3181+ if kMathMLIntegrationTags . contains ( node. name ) {
32253182 if node. namespace == . math {
32263183 return false
32273184 }
32283185 }
3229- else if kSVGIntegrationTagIDs . contains ( node. tagId ) {
3186+ else if kSVGIntegrationTags . contains ( node. name ) {
32303187 if node. namespace == . svg {
32313188 return false
32323189 }
@@ -3419,10 +3376,10 @@ public final class TreeBuilder: TokenSink {
34193376 isSpecial = SPECIAL_ELEMENTS . contains ( node. name)
34203377 }
34213378 else if node. namespace == . svg {
3422- isSpecial = kSVGIntegrationTagIDs . contains ( node. tagId )
3379+ isSpecial = kSVGIntegrationTags . contains ( node. name )
34233380 }
34243381 else if node. namespace == . math {
3425- isSpecial = kMathMLIntegrationTagIDs . contains ( node. tagId )
3382+ isSpecial = kMathMLIntegrationTags . contains ( node. name )
34263383 }
34273384 else {
34283385 isSpecial = false
0 commit comments