Skip to content

Commit 647a075

Browse files
committed
Formalize bogus comment state.
1 parent b159bb9 commit 647a075

File tree

1 file changed

+22
-33
lines changed

1 file changed

+22
-33
lines changed

lib/tokenizer/index.js

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ var DATA_STATE = 'DATA_STATE',
6363
AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE',
6464
SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE',
6565
BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE',
66-
BOGUS_COMMENT_STATE_CONTINUATION = 'BOGUS_COMMENT_STATE_CONTINUATION',
6766
MARKUP_DECLARATION_OPEN_STATE = 'MARKUP_DECLARATION_OPEN_STATE',
6867
COMMENT_START_STATE = 'COMMENT_START_STATE',
6968
COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE',
@@ -724,8 +723,10 @@ _[TAG_OPEN_STATE] = function tagOpenState(cp) {
724723
this._reconsumeInState(TAG_NAME_STATE);
725724
}
726725

727-
else if (cp === $.QUESTION_MARK)
726+
else if (cp === $.QUESTION_MARK) {
727+
this._createCommentToken();
728728
this._reconsumeInState(BOGUS_COMMENT_STATE);
729+
}
729730

730731
else {
731732
this._emitChar('<');
@@ -751,8 +752,10 @@ _[END_TAG_OPEN_STATE] = function endTagOpenState(cp) {
751752
this._emitChar('/');
752753
}
753754

754-
else
755+
else {
756+
this._createCommentToken();
755757
this._reconsumeInState(BOGUS_COMMENT_STATE);
758+
}
756759
};
757760

758761

@@ -1554,38 +1557,22 @@ _[SELF_CLOSING_START_TAG_STATE] = function selfClosingStartTagState(cp) {
15541557

15551558
//12.2.4.44 Bogus comment state
15561559
//------------------------------------------------------------------
1557-
_[BOGUS_COMMENT_STATE] = function bogusCommentState() {
1558-
this._createCommentToken();
1559-
this._reconsumeInState(BOGUS_COMMENT_STATE_CONTINUATION);
1560-
};
1561-
1562-
//HACK: to support streaming and make BOGUS_COMMENT_STATE reentrant we've
1563-
//introduced BOGUS_COMMENT_STATE_CONTINUATION state which will not produce
1564-
//comment token on each call.
1565-
_[BOGUS_COMMENT_STATE_CONTINUATION] = function bogusCommentStateContinuation(cp) {
1566-
while (true) {
1567-
if (cp === $.GREATER_THAN_SIGN) {
1568-
this.state = DATA_STATE;
1569-
break;
1570-
}
1571-
1572-
else if (cp === $.EOF) {
1573-
this._reconsumeInState(DATA_STATE);
1574-
break;
1575-
}
1576-
1577-
else {
1578-
this.currentToken.data += cp === $.NULL ? UNICODE.REPLACEMENT_CHARACTER : toChar(cp);
1579-
1580-
this._hibernationSnapshot();
1581-
cp = this._consume();
1560+
_[BOGUS_COMMENT_STATE] = function bogusCommentState(cp) {
1561+
if (cp === $.GREATER_THAN_SIGN) {
1562+
this.state = DATA_STATE;
1563+
this._emitCurrentToken();
1564+
}
15821565

1583-
if (this._ensureHibernation())
1584-
return;
1585-
}
1566+
else if (cp === $.EOF) {
1567+
this._reconsumeInState(DATA_STATE);
1568+
this._emitCurrentToken();
15861569
}
15871570

1588-
this._emitCurrentToken();
1571+
else if (cp === $.NULL)
1572+
this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER;
1573+
1574+
else
1575+
this.currentToken.data += toChar(cp);
15891576
};
15901577

15911578
//12.2.4.45 Markup declaration open state
@@ -1609,8 +1596,10 @@ _[MARKUP_DECLARATION_OPEN_STATE] = function markupDeclarationOpenState(cp) {
16091596
else if (cdataMatch)
16101597
this.state = CDATA_SECTION_STATE;
16111598

1612-
else
1599+
else {
1600+
this._createCommentToken();
16131601
this._reconsumeInState(BOGUS_COMMENT_STATE);
1602+
}
16141603
}
16151604
};
16161605

0 commit comments

Comments
 (0)