Skip to content

Commit 7a3442f

Browse files
committed
Add Comment less-than sign bang dash dash state errors.
1 parent a68c520 commit 7a3442f

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

lib/common/error_codes.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ module.exports = {
1414
eofBeforeEndTagName: 'eof-before-end-tag-name',
1515
cdataInHtmlContent: 'cdata-in-html-content',
1616
malformedComment: 'malformed-comment',
17-
eofInScriptHtmlComment: 'eof-in-script-html-comment'
17+
eofInScriptHtmlComment: 'eof-in-script-html-comment',
18+
nestedComment: 'nested-comment'
1819
};

lib/tokenizer/index.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ var DATA_STATE = 'DATA_STATE',
7171
COMMENT_START_STATE = 'COMMENT_START_STATE',
7272
COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE',
7373
COMMENT_STATE = 'COMMENT_STATE',
74+
COMMENT_LESS_THAN_SIGN_STATE = 'COMMENT_LESS_THAN_SIGN_STATE',
75+
COMMENT_LESS_THAN_SIGN_BANG_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_STATE',
76+
COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE',
77+
COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE',
7478
COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE',
7579
COMMENT_END_STATE = 'COMMENT_END_STATE',
7680
COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE',
@@ -1631,6 +1635,11 @@ _[COMMENT_STATE] = function commentState(cp) {
16311635
if (cp === $.HYPHEN_MINUS)
16321636
this.state = COMMENT_END_DASH_STATE;
16331637

1638+
else if (cp === $.LESS_THAN_SIGN) {
1639+
this.currentToken.data += '<';
1640+
this.state = COMMENT_LESS_THAN_SIGN_STATE;
1641+
}
1642+
16341643
else if (cp === $.NULL)
16351644
this.currentToken.data += UNICODE.REPLACEMENT_CHARACTER;
16361645

@@ -1644,6 +1653,54 @@ _[COMMENT_STATE] = function commentState(cp) {
16441653
};
16451654

16461655

1656+
// Comment less-than sign state
1657+
//------------------------------------------------------------------
1658+
_[COMMENT_LESS_THAN_SIGN_STATE] = function commentLessThanSignState(cp) {
1659+
if (cp === $.EXCLAMATION_MARK) {
1660+
this.currentToken.data += '!';
1661+
this.state = COMMENT_LESS_THAN_SIGN_BANG_STATE;
1662+
}
1663+
1664+
else if (cp === $.LESS_THAN_SIGN)
1665+
this.currentToken.data += '!';
1666+
1667+
else
1668+
this._reconsumeInState(COMMENT_STATE);
1669+
};
1670+
1671+
1672+
// Comment less-than sign bang state
1673+
//------------------------------------------------------------------
1674+
_[COMMENT_LESS_THAN_SIGN_BANG_STATE] = function commentLessThanSignBangState(cp) {
1675+
if (cp === $.HYPHEN_MINUS)
1676+
this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE;
1677+
1678+
else
1679+
this._reconsumeInState(COMMENT_STATE);
1680+
};
1681+
1682+
1683+
// Comment less-than sign bang dash state
1684+
//------------------------------------------------------------------
1685+
_[COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE] = function commentLessThanSignBangDashState(cp) {
1686+
if (cp === $.HYPHEN_MINUS)
1687+
this.state = COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE;
1688+
1689+
else
1690+
this._reconsumeInState(COMMENT_END_DASH_STATE);
1691+
};
1692+
1693+
1694+
// Comment less-than sign bang dash dash state
1695+
//------------------------------------------------------------------
1696+
_[COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE] = function commentLessThanSignBangDashDashState(cp) {
1697+
if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF)
1698+
this._err(ERR.nestedComment);
1699+
1700+
this._reconsumeInState(COMMENT_END_STATE);
1701+
};
1702+
1703+
16471704
// Comment end dash state
16481705
//------------------------------------------------------------------
16491706
_[COMMENT_END_DASH_STATE] = function commentEndDashState(cp) {

0 commit comments

Comments
 (0)