). Such a tag is treated as a regular end
tag.
+
| unknown-named-character-reference
| This error occurs if the parser encounters an StorageEventInit : EventInit {
the tag name state.
U+003F QUESTION MARK (?)
- This is an unexpected-question-mark-instead-of-tag-name
- parse error. Create a comment token whose data is the empty string.
- Reconsume in the bogus comment state.
+ Switch to the processing instruction open state.
EOF
This is an eof-before-tag-name
@@ -138266,7 +138299,7 @@ dictionary StorageEventInit : EventInit {
Switch to the data state. Emit the current comment token.
EOF
- Emit the comment. Emit an end-of-file token.
+ Emit the current comment token. Emit an end-of-file token.
U+0000 NULL
This is an StorageEventInit : EventInit {
+ Processing instruction open state
+
+
+ Consume the next input character:
+
+
+ - ASCII alpha
+ - Create a processing instruction token whose target and data are both the empty string.
+ Reconsume in the processing instruction target state.
+
+
- EOF
+ - This is an eof-before-pi-target
+ parse error. Emit a comment token whose data is the "?" string.
+
+ - Anything else
+ - This is an invalid-first-character-of-pi-target
+ parse error. Create a comment token whose data is the "?" string.
+ Reconsume in the bogus comment state.
+
+
+
+
+
+ Processing instruction target state
+
+
+ Consume the next input character:
+
+
+ - U+0009 CHARACTER TABULATION (tab)
+ - U+000A LINE FEED (LF)
+ - U+000C FORM FEED (FF)
+
+ - U+0020 SPACE
+ - Switch to the after processing instruction target state.
+
+ - U+003F QUESTION MARK (?)
+ - Switch to the processing instruction question mark state.
+
+ - U+003E GREATER-THAN SIGN (>)
+ - Switch to the data state. Emit the processing instruction token.
+
+ - ASCII upper alpha
+ - Append the lowercase version of the current input character (add 0x0020 to the
+ character's code point) to the current processing instruction token's target.
+
+ - U+0000 NULL
+ - This is an unexpected-null-character parse
+ error. Append a U+FFFD REPLACEMENT CHARACTER character to the current processing instruction token's target.
+
+ - EOF
+ - This is an eof-in-pi parse error.
+ Emit the current processing instruction token.
+
+ - Anything else
+ - Append the current input character to the current processing instruction token's target.
+
+
+
+
+
+ After processing instruction target state
+
+
+ Consume the next input character:
+
+
+ - U+0009 CHARACTER TABULATION (tab)
+ - U+000A LINE FEED (LF)
+ - U+000C FORM FEED (FF)
+
+ - U+0020 SPACE
+ - Ignore the character.
+
+ - U+003F QUESTION MARK (?)
+ - Switch to the processing instruction question mark state.
+
+ - U+003E GREATER-THAN SIGN (>)
+ - Switch to the data state. Emit the processing instruction token.
+
+ - EOF
+ - This is an eof-in-pi parse error.
+ Emit the current processing instruction token.
+
+ - Anything else
+ - Reconsume in the processing instruction data state.
+
+
+
+
+
+ Processing instruction data state
+
+
+ Consume the next input character:
+
+
+ - U+003F QUESTION MARK (?)
+ - Switch to the processing instruction question mark state.
+
+ - U+003E GREATER-THAN SIGN (>)
+ - Switch to the data state. Emit the processing instruction token.
+
+ - EOF
+ - This is an eof-in-pi parse error.
+ Emit the current processing instruction token.
+
+ - Anything else
+ - Append the current input character to the current processing instruction token's data.
+
+
+
+
+
+ Processing instruction question mark state
+
+
+ Consume the next input character:
+
+
+ - U+003E GREATER-THAN SIGN (>)
+ - Switch to the data state. Emit the processing instruction token.
+
+ - EOF
+ - This is an eof-in-pi parse error.
+ Emit the current processing instruction token.
+
+ - Anything else
+ - This is an unexpected-question-mark-in-pi
+ parse error. Reconsume in the processing instruction data state.
+
+
+
+
+
Character reference state
@@ -140098,6 +140268,24 @@ document.body.appendChild(text);
+
+ When the steps below require the user agent to insert a processing instruction while
+ processing a processing instruction token, the user agent must run the following steps:
+
+
+ Let target be the target given in the comment token being processed.
+
+ Let data be the data given in the comment token being processed.
+
+ Create a ProcessingInstruction node whose target is target, data is data, and node document is the
+ same as that of the node in which the adjusted insertion location finds itself.
+
+ Insert the newly created node at the adjusted insertion location.
+
+
+
Parsing elements that contain only text
@@ -140178,6 +140366,12 @@ document.body.appendChild(text);
Insert a comment as the last child of the Document object.
+ A processing instruction token
+
+ Insert a processing instruction as the last child of the Document
+ object.
+
+
A DOCTYPE token
If the DOCTYPE token's name is not "html", or the token's public
@@ -140321,6 +140515,12 @@ document.body.appendChild(text);
Insert a comment as the last child of the Document object.
+ A processing instruction token
+
+ Insert a processing instruction as the last child of the Document
+ object.
+
+
A character token that is one of U+0009 CHARACTER TABULATION, U+000A LINE FEED (LF), U+000C
FORM FEED (FF), U+000D CARRIAGE RETURN (CR), or U+0020 SPACE
@@ -140385,6 +140585,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -140457,6 +140662,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -140861,6 +141071,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -140984,6 +141199,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -142345,6 +142565,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -142672,6 +142897,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -143201,6 +143431,12 @@ document.body.appendChild(text);
open elements (the html element).
+ A processing instruction token
+
+ Insert a processing instruction as the last child of the first element in the
+ stack of open elements (the html element).
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -143254,6 +143490,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -143339,6 +143580,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
@@ -143389,6 +143635,12 @@ document.body.appendChild(text);
Insert a comment as the last child of the Document object.
+ A processing instruction token
+
+ Insert a processing instruction as the last child of the Document
+ object.
+
+
A DOCTYPE token
A character token that is one of U+0009 CHARACTER TABULATION, U+000A LINE FEED (LF), U+000C
FORM FEED (FF), U+000D CARRIAGE RETURN (CR), or U+0020 SPACE
@@ -143426,6 +143678,12 @@ document.body.appendChild(text);
Insert a comment as the last child of the Document object.
+ A processing instruction token
+
+ Insert a processing instruction as the last child of the Document
+ object.
+
+
A DOCTYPE token
A character token that is one of U+0009 CHARACTER TABULATION, U+000A LINE FEED (LF), U+000C
FORM FEED (FF), U+000D CARRIAGE RETURN (CR), or U+0020 SPACE
@@ -143487,6 +143745,11 @@ document.body.appendChild(text);
Insert a comment.
+ A processing instruction token
+
+ Insert a processing instruction.
+
+
A DOCTYPE token
Parse error. Ignore the token.
From d785561625e4326f31a9c6764af39f7aee1d9043 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 09:31:58 +0100
Subject: [PATCH 02/21] Emit end-of-file tokens
---
source | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/source b/source
index 02d46e85b03..f14ba314d14 100644
--- a/source
+++ b/source
@@ -138333,8 +138333,8 @@ dictionary StorageEventInit : EventInit {
an element in the HTML namespace, then switch to the CDATA section
state. Otherwise, this is a cdata-in-html-content parse
- error. Create a comment token whose data is the "[CDATA[" string. Switch to the
- bogus comment state.
+ error. Create a comment token whose data is " [CDATA[". Switch to
+ the bogus comment state.
Anything else
This is an StorageEventInit : EventInit {
EOF
This is an eof-before-pi-target
- parse error. Emit a comment token whose data is the "?" string.
+ parse error. Emit a comment token whose data is "?". Emit an
+ end-of-file token.
Anything else
This is an invalid-first-character-of-pi-target
- parse error. Create a comment token whose data is the "?" string.
+ parse error. Create a comment token whose data is "?".
Reconsume in the bogus comment state.
@@ -139270,7 +139271,7 @@ dictionary StorageEventInit : EventInit {
Switch to the processing instruction question mark state.
U+003E GREATER-THAN SIGN (>)
- Switch to the data state. Emit the processing instruction token.
+ Switch to the data state. Emit the current processing instruction token.
ASCII upper alpha
Append the lowercase version of the current input character (add 0x0020 to the
@@ -139283,7 +139284,7 @@ dictionary StorageEventInit : EventInit {
EOF
This is an eof-in-pi parse error.
- Emit the current processing instruction token.
+ Emit the current processing instruction token. Emit an end-of-file token.
Anything else
Append the current input character to the current processing instruction token's target.
@@ -139313,7 +139314,7 @@ dictionary StorageEventInit : EventInit {
EOF
This is an eof-in-pi parse error.
- Emit the current processing instruction token.
+ Emit the current processing instruction token. Emit an end-of-file token.
Anything else
Reconsume in the processing instruction data state.
@@ -139336,7 +139337,7 @@ dictionary StorageEventInit : EventInit {
EOF
This is an eof-in-pi parse error.
- Emit the current processing instruction token.
+ Emit the current processing instruction token. Emit an end-of-file token.
Anything else
Append the current input character to the current processing instruction token's data.
@@ -139356,7 +139357,7 @@ dictionary StorageEventInit : EventInit {
EOF
This is an eof-in-pi parse error.
- Emit the current processing instruction token.
+ Emit the current processing instruction token. Emit an end-of-file token.
Anything else
This is an
Date: Sat, 31 Jan 2026 12:53:53 +0100
Subject: [PATCH 03/21] Use temporary buffer to disallow StorageEventInit : EventInit {
- ASCII alpha
- - Create a processing instruction token whose target and data are both the empty string.
+
- Create a processing instruction token whose target and data are both the empty string. Set
+ the temporary buffer to the empty string.
Reconsume in the processing instruction target state.
- EOF
@@ -139265,29 +139266,36 @@ dictionary StorageEventInit : EventInit {
- U+000C FORM FEED (FF)
- U+0020 SPACE
- - Switch to the after processing instruction target state.
-
- U+003F QUESTION MARK (?)
- - Switch to the processing instruction question mark state.
-
- U+003E GREATER-THAN SIGN (>)
- - Switch to the data state. Emit the current processing instruction token.
+ - If the current processing instruction token's target is "
xml" or
+ "xml-stylesheet", discard the current processing instruction token,
+ create a comment token whose data is the concatenation of "?" and the
+ temporary buffer, and reconsume in the
+ bogus comment state. Othwerwise, reconsume in the after
+ processing instruction target state.
- ASCII upper alpha
- Append the lowercase version of the current input character (add 0x0020 to the
- character's code point) to the current processing instruction token's target.
+ character's code point) to the current processing instruction token's target. Append the
+ current input character to the temporary
+ buffer.
U+0000 NULL
This is an unexpected-null-character parse
- error. Append a U+FFFD REPLACEMENT CHARACTER character to the current processing instruction token's target.
+ error. Append a U+FFFD REPLACEMENT CHARACTER character to the current processing
+ instruction token's target. Append a U+FFFD REPLACEMENT CHARACTER character to the temporary buffer.
EOF
This is an eof-in-pi parse error.
Emit the current processing instruction token. Emit an end-of-file token.
Anything else
- Append the current input character to the current processing instruction token's target.
+ Append the current input character to the current processing instruction token's
+ target. Append the current input character to the temporary buffer.
@@ -139310,7 +139318,7 @@ dictionary StorageEventInit : EventInit {
Switch to the processing instruction question mark state.
U+003E GREATER-THAN SIGN (>)
- Switch to the data state. Emit the processing instruction token.
+ Switch to the data state. Emit the current processing instruction token.
EOF
This is an eof-in-pi parse error.
@@ -139333,7 +139341,7 @@ dictionary StorageEventInit : EventInit {
Switch to the processing instruction question mark state.
U+003E GREATER-THAN SIGN (>)
- Switch to the data state. Emit the processing instruction token.
+ Switch to the data state. Emit the current processing instruction token.
EOF
This is an eof-in-pi parse error.
From 3e24e4ed02ab3a23ece504874e64226cff3a4605 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 13:16:34 +0100
Subject: [PATCH 04/21] Update the syntax section
---
source | 17 ++++++++---------
1 file changed, 8 insertions(+), 9 deletions(-)
diff --git a/source b/source
index b2a7f8ba1da..28a350fa2f7 100644
--- a/source
+++ b/source
@@ -134771,27 +134771,26 @@ dictionary StorageEventInit : EventInit {
Processing instructions
- Processing instructions mark locations in
- a document for further processing.
+ A processing instruction marks a location in a document for further processing.
- A processing instructions must have the following format:
+ Processing instructions must have the following format:
- - The string "
<?".
+ - "
<?".
- A target, consisting of ASCII alphanumeric
characters.
- - One or more ASCII whitespace.
+ - Zero or more ASCII whitespace. If there is to be text in the next step, there
+ must be one or more ASCII whitespace.
- Optionally, text, with the additional restriction that the
- text must not contain a U+003E GREATER-THAN SIGN character (>), nor end with a U+003F QUESTION
- MARK character (?).
+ text must not contain U+003E (>), nor end with U+003F (?).
- - Optionally, a U+003F QUESTION MARK character (?).
+ - Optionally, U+003F (?).
- - A U+003E GREATER-THAN SIGN character (>).
+ - U+003E (>).
From 06dfd680cf9d26748fb2f29f04201a830ece0fd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 13:29:38 +0100
Subject: [PATCH 05/21] Shorten code points in prose
---
source | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/source b/source
index 28a350fa2f7..54f44996a5c 100644
--- a/source
+++ b/source
@@ -135088,8 +135088,8 @@ dictionary StorageEventInit : EventInit {
This error occurs if the parser encounters a code point that is not an
ASCII alpha where first code point of a processing instruction target is expected. The preceding
- U+003F (?) code point and all content that follows up to a U+003E (>) code point (if present)
- or to the end of the input stream is treated as a comment.
+ U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the end of the
+ input stream is treated as a comment.
| invalid-first-character-of-tag-name
@@ -135381,10 +135381,9 @@ dictionary StorageEventInit : EventInit {
|
| unexpected-question-mark-in-pi
- | This error occurs if the parser encounters a U+003F (?) code point that is
- not immediately followed by a U+003E (>) code point in a processing instruction (e.g., <?marker? >). In this case the parser behaves as if it encountered
- ASCII whitespace.
+ | This error occurs if the parser encounters a U+003F (?) that is not immediately followed
+ by a U+003E (>) in a processing instruction (e.g., <?marker? >).
+ In this case the parser behaves as if it encountered ASCII whitespace.
|
unknown-named-character-reference
From f87fd45de6be18c9614b8d0376d92898be0b4aa6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 19:37:24 +0100
Subject: [PATCH 06/21] Add an easter egg
---
source | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/source b/source
index 54f44996a5c..86c2d8e4452 100644
--- a/source
+++ b/source
@@ -139313,7 +139313,7 @@ dictionary StorageEventInit : EventInit {
Ignore the character.
U+003F QUESTION MARK (?)
- Switch to the processing instruction question mark state.
+ Switch to the processing instruction questionable state.
U+003E GREATER-THAN SIGN (>)
Switch to the data state. Emit the current processing instruction token.
@@ -139336,7 +139336,7 @@ dictionary StorageEventInit : EventInit {
- U+003F QUESTION MARK (?)
- - Switch to the processing instruction question mark state.
+ - Switch to the processing instruction questionable state.
- U+003E GREATER-THAN SIGN (>)
- Switch to the data state. Emit the current processing instruction token.
@@ -139352,7 +139352,7 @@ dictionary StorageEventInit : EventInit {
- Processing instruction question mark state
+ Processing instruction questionable state
Consume the next input character:
From 6b9f62465a34852a619099d1aa7a35db465467e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 21:13:42 +0100
Subject: [PATCH 07/21] Drop the unexpected-question-mark-in-pi error; append
the ? like in XML
---
source | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/source b/source
index 86c2d8e4452..d9bde46f2da 100644
--- a/source
+++ b/source
@@ -135379,12 +135379,6 @@ dictionary StorageEventInit : EventInit {
id="foo">). In this case the parser behaves as if it encountered ASCII
whitespace.
-
- | unexpected-question-mark-in-pi
- | This error occurs if the parser encounters a U+003F (?) that is not immediately followed
- by a U+003E (>) in a processing instruction (e.g., <?marker? >).
- In this case the parser behaves as if it encountered ASCII whitespace.
-
|
| unknown-named-character-reference
| This error occurs if the parser encounters an StorageEventInit : EventInit {
Emit the current processing instruction token. Emit an end-of-file token.
- Anything else
- - This is an unexpected-question-mark-in-pi
- parse error. Reconsume in the processing instruction data state.
+ - Append U+003F (?) to the current processing instruction token's data. Reconsume
+ in the processing instruction data state.
From 6b4c1e8e08a7a70f0dfe24eda6e58aa23f6f12c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 22:11:33 +0100
Subject: [PATCH 08/21] Expand on syntax; make xml and xml-stylesheet targets
an error
---
source | 68 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 55 insertions(+), 13 deletions(-)
diff --git a/source b/source
index d9bde46f2da..c267d113f27 100644
--- a/source
+++ b/source
@@ -134779,22 +134779,52 @@ dictionary StorageEventInit : EventInit {
- "
<?".
- - A target, consisting of ASCII alphanumeric
- characters.
+ - A target.
- - Zero or more ASCII whitespace. If there is to be text in the next step, there
- must be one or more ASCII whitespace.
+ - Zero or more ASCII whitespace. If there is to be data in the next step, there must be one or more ASCII
+ whitespace.
- - Optionally, text, with the additional restriction that the
- text must not contain U+003E (>), nor end with U+003F (?).
+ - Optionally, data.
- Optionally, U+003F (?).
- U+003E (>).
-
- TODO compare and contrast to XML processing instructions.
+ The target consists of ASCII alphanumeric
+ and U+002D (-) code points. It must start with an ASCII alpha and must not be an
+ ASCII case-insensitive match for "xml" or
+ "xml-stylesheet".
+
+ The data is text, with the
+ additional restriction that the text must not contain U+003E (>), nor end with U+003F (?).
+
+
+
+ Processing instructions in the HTML syntax have some notable differences to
+ processing instructions in XML:
+
+
+ In HTML, the target can be written with any mix of ASCII
+ lower and ASCII upper alphas, but is converted
+ to lowercase by the parser, similar to tag names. In XML, the processing instruction target case
+ is preserved.
+
+ In HTML, a processing instruction can end with ">" or
+ "?>", while in XML it can only end with
+ "?>". This is for compatibility with previously specified behavior of
+ the "<?" syntax, which was treated as a bogus comment, ending with
+ ">".
+
+ In HTML, "<?xml ...?>" and
+ "<?xml-stylesheet ...?>" specifically are not parsed as processing
+ instructions but instead treated as bogus comments.
+ This is for compatibility with existing HTML content, where such syntax is relatively common
+ but should have no effect.
+
+
@@ -135116,6 +135146,17 @@ dictionary StorageEventInit : EventInit {
alpha, a wide range of code points (including ASCII digits) is allowed in
subsequent positions.
+ |
+ | invalid-pi-target
+ |
+ This error occurs if the parser encounters a processing
+ instruction target that is "xml" or
+ "xml-stylesheet".
+ ASCII alpha where first code point of a processing instruction target is expected. The preceding
+ U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the end of the
+ input stream is treated as a comment.
+
|
| missing-attribute-value
| This error occurs if the parser encounters a U+003E (>) code point where an
@@ -139261,11 +139302,12 @@ dictionary StorageEventInit : EventInit {
- U+003F QUESTION MARK (?)
- U+003E GREATER-THAN SIGN (>)
- If the current processing instruction token's target is "
xml" or
- "xml-stylesheet", discard the current processing instruction token,
- create a comment token whose data is the concatenation of "?" and the
- temporary buffer, and reconsume in the
- bogus comment state. Othwerwise, reconsume in the after
- processing instruction target state.
+ "xml-stylesheet", this is an invalid-pi-target parse error;
+ discard the current processing instruction token, create a comment token whose data is the
+ concatenation of "?" and the temporary
+ buffer, and reconsume in the bogus comment state. Othwerwise,
+ reconsume in the after processing instruction target state.
- ASCII upper alpha
- Append the lowercase version of the current input character (add 0x0020 to the
From 205c1d7cf67cfbc7a40bf6cbe67fac80f61f4ad3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 31 Jan 2026 22:33:04 +0100
Subject: [PATCH 09/21] Expand error names (still not the longest)
---
source | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/source b/source
index c267d113f27..0cea871ee12 100644
--- a/source
+++ b/source
@@ -135025,7 +135025,7 @@ dictionary StorageEventInit : EventInit {
tag.
- | eof-before-pi-target
+ | eof-before-processing-instruction-target
| This error occurs if the parser encounters the end of the input stream
where a processing instruction target is expected. The parser treats this as a comment with
the text "?".
@@ -135113,7 +135113,7 @@ dictionary StorageEventInit : EventInit {
to quirks mode.
|
- | invalid-first-character-of-pi-target
+ | invalid-first-character-of-processing-instruction-target
|
This error occurs if the parser encounters a code point that is not an
ASCII alpha where first code point of a StorageEventInit : EventInit {
subsequent positions.
|
- | invalid-pi-target
+ | invalid-processing-instruction-target
|
This error occurs if the parser encounters a processing
instruction target that is "xml" or
@@ -139275,12 +139275,12 @@ dictionary StorageEventInit : EventInit {
Reconsume in the processing instruction target state.
- EOF
- - This is an eof-before-pi-target
+
- This is an eof-before-processing-instruction-target
parse error. Emit a comment token whose data is "
?". Emit an
end-of-file token.
- Anything else
- - This is an invalid-first-character-of-pi-target
+
- This is an invalid-first-character-of-processing-instruction-target
parse error. Create a comment token whose data is "
?".
Reconsume in the bogus comment state.
@@ -139303,11 +139303,12 @@ dictionary StorageEventInit : EventInit {
- U+003E GREATER-THAN SIGN (>)
- If the current processing instruction token's target is "
xml" or
"xml-stylesheet", this is an invalid-pi-target parse error;
- discard the current processing instruction token, create a comment token whose data is the
- concatenation of "?" and the temporary
- buffer, and reconsume in the bogus comment state. Othwerwise,
- reconsume in the after processing instruction target state.
+ data-x="parse-error-invalid-processing-instruction-target">invalid-processing-instruction-target
+ parse error; discard the current processing instruction token, create a comment
+ token whose data is the concatenation of "?" and the temporary buffer, and reconsume in the bogus
+ comment state. Othwerwise, reconsume in the after processing
+ instruction target state.
- ASCII upper alpha
- Append the lowercase version of the current input character (add 0x0020 to the
From b8d6d03adafd4fe5b7388f0ff6041fcb3b844e6a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Mon, 2 Feb 2026 15:44:15 +0100
Subject: [PATCH 10/21] s/Othwerwise/Otherwise/
---
source | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source b/source
index 0cea871ee12..dfb0b9284e4 100644
--- a/source
+++ b/source
@@ -139307,8 +139307,8 @@ dictionary StorageEventInit : EventInit {
parse error; discard the current processing instruction token, create a comment
token whose data is the concatenation of "
?" and the temporary buffer, and reconsume in the bogus
- comment state. Othwerwise, reconsume in the after processing
- instruction target state.
+ comment state. Otherwise, reconsume in the after processing instruction
+ target state.
- ASCII upper alpha
- Append the lowercase version of the current input character (add 0x0020 to the
From e1f818297ccecbcc9fe6ca62794b443273b6eccf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Tue, 3 Feb 2026 11:14:30 +0100
Subject: [PATCH 11/21] s/comment/processing instruction/
---
source | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/source b/source
index dfb0b9284e4..85eb22d7443 100644
--- a/source
+++ b/source
@@ -140316,9 +140316,11 @@ document.body.appendChild(text);
processing a processing instruction token, the user agent must run the following steps:
- Let target be the target given in the comment token being processed.
+ Let target be the target given in the processing instruction token being
+ processed.
- Let data be the data given in the comment token being processed.
+ Let data be the data given in the processing instruction token being
+ processed.
Create a ProcessingInstruction node whose target is target,
Date: Wed, 4 Feb 2026 18:49:52 +0100
Subject: [PATCH 12/21] Expand eof-in-pi error (missed before)
---
source | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/source b/source
index 85eb22d7443..fb2ca366a2c 100644
--- a/source
+++ b/source
@@ -135057,7 +135057,7 @@ dictionary StorageEventInit : EventInit {
document preamble, the parser sets the Document to quirks mode.
- | eof-in-pi
+ | eof-in-processing-instruction
| This error occurs if the parser encounters the end of the input stream in a
processing instruction. The parser treats
such processing instructions as if they are closed immediately before the end of the input
@@ -139324,8 +139324,9 @@ dictionary StorageEventInit : EventInit {
data-x="temporary buffer">temporary buffer.
- EOF
- - This is an eof-in-pi parse error.
- Emit the current processing instruction token. Emit an end-of-file token.
+ - This is an eof-in-processing-instruction
+ parse error. Emit the current processing instruction token. Emit an end-of-file
+ token.
- Anything else
- Append the current input character to the current processing instruction token's
@@ -139356,8 +139357,9 @@ dictionary StorageEventInit : EventInit {
- Switch to the data state. Emit the current processing instruction token.
- EOF
- - This is an eof-in-pi parse error.
- Emit the current processing instruction token. Emit an end-of-file token.
+ - This is an eof-in-processing-instruction
+ parse error. Emit the current processing instruction token. Emit an end-of-file
+ token.
- Anything else
- Reconsume in the processing instruction data state.
@@ -139379,8 +139381,9 @@ dictionary StorageEventInit : EventInit {
- Switch to the data state. Emit the current processing instruction token.
- EOF
- - This is an eof-in-pi parse error.
- Emit the current processing instruction token. Emit an end-of-file token.
+ - This is an eof-in-processing-instruction
+ parse error. Emit the current processing instruction token. Emit an end-of-file
+ token.
- Anything else
- Append the current input character to the current processing instruction token's data.
@@ -139399,8 +139402,9 @@ dictionary StorageEventInit : EventInit {
- Switch to the data state. Emit the processing instruction token.
- EOF
- - This is an eof-in-pi parse error.
- Emit the current processing instruction token. Emit an end-of-file token.
+ - This is an eof-in-processing-instruction
+ parse error. Emit the current processing instruction token. Emit an end-of-file
+ token.
- Anything else
- Append U+003F (?) to the current processing instruction token's data. Reconsume
From 2cfc613970524ae2aba3f0b72ca1c4354810e695 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Wed, 4 Feb 2026 19:02:18 +0100
Subject: [PATCH 13/21] Drop PIs for eof-in-processing-instruction
---
source | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/source b/source
index fb2ca366a2c..7a0619bfbf5 100644
--- a/source
+++ b/source
@@ -135024,12 +135024,6 @@ dictionary StorageEventInit : EventInit {
code point (e.g.,
</div/>). Such a tag is treated as a regular end
tag.
-
- | eof-before-processing-instruction-target
- | This error occurs if the parser encounters the end of the input stream
- where a processing instruction target is expected. The parser treats this as a comment with
- the text "?".
-
|
| eof-before-tag-name
| This error occurs if the parser encounters the end of the input stream
@@ -135059,9 +135053,9 @@ dictionary StorageEventInit : EventInit {
|
| eof-in-processing-instruction
| This error occurs if the parser encounters the end of the input stream in a
- processing instruction. The parser treats
- such processing instructions as if they are closed immediately before the end of the input
- stream.
+ processing instruction (e.g., <? or <?marker name=). Such processing
+ instructions are ignored.
|
eof-in-script-html-comment-like-text
@@ -139275,9 +139269,8 @@ dictionary StorageEventInit : EventInit {
Reconsume in the processing instruction target state.
- EOF
- - This is an eof-before-processing-instruction-target
- parse error. Emit a comment token whose data is "
?". Emit an
- end-of-file token.
+ - This is an eof-in-processing-instruction
+ parse error. Emit an end-of-file token.
- Anything else
- This is an invalid-first-character-of-processing-instruction-target
@@ -139325,8 +139318,7 @@ dictionary StorageEventInit : EventInit {
- EOF
- This is an eof-in-processing-instruction
- parse error. Emit the current processing instruction token. Emit an end-of-file
- token.
+ parse error. Emit an end-of-file token.
- Anything else
- Append the current input character to the current processing instruction token's
@@ -139358,8 +139350,7 @@ dictionary StorageEventInit : EventInit {
- EOF
- This is an eof-in-processing-instruction
- parse error. Emit the current processing instruction token. Emit an end-of-file
- token.
+ parse error. Emit an end-of-file token.
- Anything else
- Reconsume in the processing instruction data state.
@@ -139382,8 +139373,7 @@ dictionary StorageEventInit : EventInit {
- EOF
- This is an eof-in-processing-instruction
- parse error. Emit the current processing instruction token. Emit an end-of-file
- token.
+ parse error. Emit an end-of-file token.
- Anything else
- Append the current input character to the current processing instruction token's data.
@@ -139403,8 +139393,7 @@ dictionary StorageEventInit : EventInit {
- EOF
- This is an eof-in-processing-instruction
- parse error. Emit the current processing instruction token. Emit an end-of-file
- token.
+ parse error. Emit an end-of-file token.
- Anything else
- Append U+003F (?) to the current processing instruction token's data. Reconsume
From adabda9f4d91e9fb96b55e4605d8af1ace47dd7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Wed, 4 Feb 2026 19:13:05 +0100
Subject: [PATCH 14/21] Avoid should
---
source | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source b/source
index 7a0619bfbf5..351ede785e7 100644
--- a/source
+++ b/source
@@ -134821,8 +134821,8 @@ dictionary StorageEventInit : EventInit {
In HTML, "<?xml ...?>" and
"<?xml-stylesheet ...?>" specifically are not parsed as processing
instructions but instead treated as bogus comments.
- This is for compatibility with existing HTML content, where such syntax is relatively common
- but should have no effect.
+ This is for compatibility with existing HTML content, where such syntax is relatively common,
+ but has no effect.
From 64f133a0801f941ee40cdfdaddb90f26342f3f28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Wed, 4 Feb 2026 23:36:15 +0100
Subject: [PATCH 15/21] Require PI target to be alphanumeric+hyphens or it
becomes a comment
---
source | 43 ++++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/source b/source
index 351ede785e7..25efeb0177a 100644
--- a/source
+++ b/source
@@ -135005,6 +135005,15 @@ dictionary StorageEventInit : EventInit {
as-is except C1 control references that are replaced according to the numeric character
reference end state.
+
+ | disallowed-processing-instruction-target
+ |
+ This error occurs if the parser encounters an ASCII case-insensitive match
+ for "xml" or "xml-stylesheet" where a processing instruction target that is expected. The
+ preceding U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the
+ end of the input stream is treated as a comment.
+
|
| duplicate-attribute
| This error occurs if the parser encounters an StorageEventInit : EventInit {
| invalid-first-character-of-processing-instruction-target
|
This error occurs if the parser encounters a code point that is not an
- ASCII alpha where first code point of a ASCII alpha where the first code point of a processing instruction target is expected. The preceding
U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the end of the
input stream is treated as a comment.
@@ -135119,7 +135128,7 @@ dictionary StorageEventInit : EventInit {
| invalid-first-character-of-tag-name
|
This error occurs if the parser encounters a code point that is not an
- ASCII alpha where first code point of a start
+ ASCII alpha where the first code point of a start
tag name or an end tag name is expected. If a
start tag was expected such code point and a preceding U+003C (<) is treated as text
content, and all content that follows is treated as markup. Whereas, if an end tag was
@@ -135143,10 +135152,8 @@ dictionary StorageEventInit : EventInit {
| invalid-processing-instruction-target
|
- This error occurs if the parser encounters a processing
- instruction target that is "xml" or
- "xml-stylesheet".
- ASCII alpha where first code point of a This error occurs if the parser encounters a code point that is not an
+ ASCII alphanumeric or U+002D (-) where a processing instruction target is expected. The preceding
U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the end of the
input stream is treated as a comment.
@@ -139295,8 +139302,8 @@ dictionary StorageEventInit : EventInit {
- U+003F QUESTION MARK (?)
- U+003E GREATER-THAN SIGN (>)
- If the current processing instruction token's target is "
xml" or
- "xml-stylesheet", this is an invalid-processing-instruction-target
+ "xml-stylesheet", this is a disallowed-processing-instruction-target
parse error; discard the current processing instruction token, create a comment
token whose data is the concatenation of "?" and the temporary buffer, and reconsume in the bogus
@@ -139309,21 +139316,23 @@ dictionary StorageEventInit : EventInit {
current input character to the temporary
buffer.
- - U+0000 NULL
- - This is an unexpected-null-character parse
- error. Append a U+FFFD REPLACEMENT CHARACTER character to the current processing
- instruction token's target. Append a U+FFFD REPLACEMENT CHARACTER character to the temporary buffer.
+ - ASCII lower alpha
+ - ASCII digit
+ - U+002D HYPHEN-MINUS (-)
+ - Append the current input character to the current processing instruction
+ token's target. Append the current input character to the temporary buffer.
- EOF
- This is an eof-in-processing-instruction
parse error. Emit an end-of-file token.
- Anything else
- - Append the current input character to the current processing instruction token's
- target. Append the current input character to the temporary buffer.
+ - This is an invalid-processing-instruction-target
+ parse error. Discard the current processing instruction token. Create a comment
+ token whose data is the concatenation of "
?" and the temporary buffer. Reconsume in the bogus
+ comment state.
From 5aebf7ea78de73806e07f81ccdfec774bf693e87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Thu, 5 Feb 2026 23:14:55 +0100
Subject: [PATCH 16/21] Editorial: use the temporary buffer until token type is
decided (never discard)
---
source | 65 +++++++++++++++++++++++++++++++++-------------------------
1 file changed, 37 insertions(+), 28 deletions(-)
diff --git a/source b/source
index 25efeb0177a..cdaf64b797d 100644
--- a/source
+++ b/source
@@ -135008,11 +135008,11 @@ dictionary StorageEventInit : EventInit {
| disallowed-processing-instruction-target
|
- This error occurs if the parser encounters an ASCII case-insensitive match
- for "xml" or "xml-stylesheet" where a processing instruction target that is expected. The
- preceding U+003F (?) and all content that follows up to a U+003E (>) (if present) or to the
- end of the input stream is treated as a comment.
+ This error occurs if the parser encounters a processing
+ instruction target that is an ASCII case-insensitive match for "xml" or "xml-stylesheet". The preceding U+003F (?) and
+ all content that follows up to a U+003E (>) (if present) or to the end of the input
+ stream is treated as a comment.
|
duplicate-attribute
@@ -139271,8 +139271,7 @@ dictionary StorageEventInit : EventInit {
- ASCII alpha
- - Create a processing instruction token whose target and data are both the empty string. Set
- the temporary buffer to the empty string.
+
- Set the temporary buffer to the empty string.
Reconsume in the processing instruction target state.
- EOF
@@ -139301,26 +139300,37 @@ dictionary StorageEventInit : EventInit {
- U+0020 SPACE
- U+003F QUESTION MARK (?)
- U+003E GREATER-THAN SIGN (>)
- - If the current processing instruction token's target is "
xml" or
- "xml-stylesheet", this is a disallowed-processing-instruction-target
- parse error; discard the current processing instruction token, create a comment
- token whose data is the concatenation of "?" and the temporary buffer, and reconsume in the bogus
- comment state. Otherwise, reconsume in the after processing instruction
- target state.
+ -
+
Let target be the temporary buffer,
+ converted to ASCII lowercase.
- - ASCII upper alpha
- - Append the lowercase version of the current input character (add 0x0020 to the
- character's code point) to the current processing instruction token's target. Append the
- current input character to the temporary
- buffer.
+ If target is "xml" or "xml-stylesheet":
- - ASCII lower alpha
- - ASCII digit
+
+ This is a disallowed-processing-instruction-target
+ parse error.
+
+ Create a comment token whose data is the concatenation of "?" and
+ the temporary buffer.
+
+ Reconsume in the bogus comment state.
+
+
+ Otherwise:
+
+
+ Create a processing instruction token whose target is target and data is the
+ empty string.
+
+ Reconsume in the after processing instruction target
+ state.
+
+
+
+ - ASCII alphanumeric
- U+002D HYPHEN-MINUS (-)
- - Append the current input character to the current processing instruction
- token's target. Append the current input character to the temporary buffer.
- EOF
@@ -139329,10 +139339,9 @@ dictionary StorageEventInit : EventInit {
- Anything else
- This is an invalid-processing-instruction-target
- parse error. Discard the current processing instruction token. Create a comment
- token whose data is the concatenation of "
?" and the temporary buffer. Reconsume in the bogus
- comment state.
+ parse error. Create a comment token whose data is the concatenation of "?" and the temporary buffer.
+ Reconsume in the bogus comment state.
From e7be184a53cdd37b39f4471987b51f6d7b07abc2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Sat, 7 Feb 2026 00:54:28 +0100
Subject: [PATCH 17/21] Preserve PI target case and replace with comment on
error
---
source | 58 ++++++++++++++++++++++++++++++----------------------------
1 file changed, 30 insertions(+), 28 deletions(-)
diff --git a/source b/source
index cdaf64b797d..98393b70d5a 100644
--- a/source
+++ b/source
@@ -137110,6 +137110,25 @@ dictionary StorageEventInit : EventInit {
character token otherwise.
+
+ To replace processing instruction with comment:
+
+
+ Assert: The current token is a processing instruction token whose data is the
+ empty string.
+
+ Let consumed be the current processing instruction token's target.
+
+ -
+
Create a comment token whose data is "?".
+
+ This replaces the processing instruction token, which is never emitted.
+
+
+ Append consumed to the current comment token's data.
+
+
+
Before each step of the tokenizer, the user agent must first check
the parser pause flag. If it is true, then the tokenizer must abort the processing of
@@ -137266,7 +137285,8 @@ dictionary StorageEventInit : EventInit {
the tag name state.
- U+003F QUESTION MARK (?)
- - Switch to the processing instruction open state.
+ - Create a processing instruction token whose target and data are both the empty string. Switch
+ to the processing instruction open state.
- EOF
- This is an eof-before-tag-name
@@ -139271,8 +139291,8 @@ dictionary StorageEventInit : EventInit {
- ASCII alpha
- - Set the temporary buffer to the empty string.
- Reconsume in the processing instruction target state.
+
- Append the current input character to the current processing instruction
+ token's target. Switch to the processing instruction target state.
- EOF
- This is an eof-in-processing-instruction
@@ -139280,7 +139300,7 @@ dictionary StorageEventInit : EventInit {
- Anything else
- This is an invalid-first-character-of-processing-instruction-target
- parse error. Create a comment token whose data is "
?".
+ parse error. Replace processing instruction with comment.
Reconsume in the bogus comment state.
@@ -139301,18 +139321,14 @@ dictionary StorageEventInit : EventInit {
- U+003F QUESTION MARK (?)
- U+003E GREATER-THAN SIGN (>)
-
-
Let target be the temporary buffer,
- converted to ASCII lowercase.
-
- If target is "xml" or "xml-stylesheet":
+ If the current processing instruction token's target is "xml" or
+ "xml-stylesheet":
This is a disallowed-processing-instruction-target
parse error.
- Create a comment token whose data is the concatenation of "?" and
- the temporary buffer.
+ Replace processing instruction with comment.
Reconsume in the bogus comment state.
@@ -139320,9 +139336,6 @@ dictionary StorageEventInit : EventInit {
Otherwise:
- Create a processing instruction token whose target is target and data is the
- empty string.
-
Reconsume in the after processing instruction target
state.
@@ -139330,8 +139343,8 @@ dictionary StorageEventInit : EventInit {
- ASCII alphanumeric
- U+002D HYPHEN-MINUS (-)
- - Append the current input character to the temporary buffer.
+ - Append the current input character to the current processing instruction
+ token's target.
- EOF
- This is an eof-in-processing-instruction
@@ -139339,8 +139352,7 @@ dictionary StorageEventInit : EventInit {
- Anything else
- This is an invalid-processing-instruction-target
- parse error. Create a comment token whose data is the concatenation of "
?" and the temporary buffer.
+ parse error. Replace processing instruction with comment.
Reconsume in the bogus comment state.
@@ -139360,16 +139372,6 @@ dictionary StorageEventInit : EventInit {
- U+0020 SPACE
- Ignore the character.
- - U+003F QUESTION MARK (?)
- - Switch to the processing instruction questionable state.
-
- - U+003E GREATER-THAN SIGN (>)
- - Switch to the data state. Emit the current processing instruction token.
-
- - EOF
- - This is an eof-in-processing-instruction
- parse error. Emit an end-of-file token.
-
- Anything else
- Reconsume in the processing instruction data state.
From 4deed122373d939f3b7e9449aa12bc6c49883323 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Tue, 10 Feb 2026 21:17:32 +0100
Subject: [PATCH 18/21] Make target case-sensitive in syntax and error desc
---
source | 20 +++++++-------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/source b/source
index 98393b70d5a..7e85a77fbac 100644
--- a/source
+++ b/source
@@ -134792,10 +134792,9 @@ dictionary StorageEventInit : EventInit {
- U+003E (>).
- The target consists of ASCII alphanumeric
- and U+002D (-) code points. It must start with an ASCII alpha and must not be an
- ASCII case-insensitive match for "xml" or
- "xml-stylesheet".
+ The target consists of ASCII alphanumeric and
+ U+002D (-) code points. It must start with an ASCII alpha and must not equal "xml" or "xml-stylesheet".
The data is text, with the
additional restriction that the text must not contain U+003E (>), nor end with U+003F (?).
@@ -134806,11 +134805,6 @@ dictionary StorageEventInit : EventInit {
processing instructions in XML:
- In HTML, the target can be written with any mix of ASCII
- lower and ASCII upper alphas, but is converted
- to lowercase by the parser, similar to tag names. In XML, the processing instruction target case
- is preserved.
-
In HTML, a processing instruction can end with ">" or
"?>", while in XML it can only end with
"?>". This is for compatibility with previously specified behavior of
@@ -135009,10 +135003,10 @@ dictionary StorageEventInit : EventInit {
disallowed-processing-instruction-target
|
This error occurs if the parser encounters a processing
- instruction target that is an ASCII case-insensitive match for "xml" or "xml-stylesheet". The preceding U+003F (?) and
- all content that follows up to a U+003E (>) (if present) or to the end of the input
- stream is treated as a comment.
+ instruction target that is "xml" or "xml-stylesheet". The preceding U+003F (?) and all content that follows up to
+ a U+003E (>) (if present) or to the end of the input stream is treated as a
+ comment.
|
duplicate-attribute
From 85030c62806448226e44f4c4542b05dbf76b51eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Tue, 10 Feb 2026 21:24:47 +0100
Subject: [PATCH 19/21] leave out "but has no effect"
---
source | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source b/source
index 7e85a77fbac..2697206f42a 100644
--- a/source
+++ b/source
@@ -134815,8 +134815,8 @@ dictionary StorageEventInit : EventInit {
In HTML, "<?xml ...?>" and
"<?xml-stylesheet ...?>" specifically are not parsed as processing
instructions but instead treated as bogus comments.
- This is for compatibility with existing HTML content, where such syntax is relatively common,
- but has no effect.
+ This is for compatibility with existing HTML content, where such syntax is relatively
+ common.
From 65216c4d1a0b0630f98bb04f93ff2e172fab8f08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Philip=20J=C3=A4genstedt?=
Date: Tue, 10 Feb 2026 21:31:13 +0100
Subject: [PATCH 20/21] lowercase after assert
---
source | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source b/source
index 2697206f42a..9fd80281d26 100644
--- a/source
+++ b/source
@@ -137108,7 +137108,7 @@ dictionary StorageEventInit : EventInit {
To replace processing instruction with comment:
- Assert: The current token is a processing instruction token whose data is the
+ Assert: the current token is a processing instruction token whose data is the
empty string.
Let consumed be the current processing instruction token's target.
@@ -143268,7 +143268,7 @@ document.body.appendChild(text);
- A start tag whose tag name is one of: "caption", "col",
"colgroup", "tbody", "td", "tfoot", "th", "thead", "tr"
-
-
Assert: The stack of open elements has a td or th element in table scope.
| | | | | | | | | |