@@ -71,6 +71,10 @@ var DATA_STATE = 'DATA_STATE',
71
71
COMMENT_START_STATE = 'COMMENT_START_STATE' ,
72
72
COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE' ,
73
73
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' ,
74
78
COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE' ,
75
79
COMMENT_END_STATE = 'COMMENT_END_STATE' ,
76
80
COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE' ,
@@ -1573,25 +1577,14 @@ _[COMMENT_START_STATE] = function commentStartState(cp) {
1573
1577
if ( cp === $ . HYPHEN_MINUS )
1574
1578
this . state = COMMENT_START_DASH_STATE ;
1575
1579
1576
- else if ( cp === $ . NULL ) {
1577
- this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1578
- this . state = COMMENT_STATE ;
1579
- }
1580
-
1581
1580
else if ( cp === $ . GREATER_THAN_SIGN ) {
1581
+ this . _err ( ERR . abruptComment ) ;
1582
1582
this . state = DATA_STATE ;
1583
1583
this . _emitCurrentToken ( ) ;
1584
1584
}
1585
1585
1586
- else if ( cp === $ . EOF ) {
1587
- this . _emitCurrentToken ( ) ;
1588
- this . _emitEOFToken ( ) ;
1589
- }
1590
-
1591
- else {
1592
- this . currentToken . data += toChar ( cp ) ;
1593
- this . state = COMMENT_STATE ;
1594
- }
1586
+ else
1587
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1595
1588
} ;
1596
1589
1597
1590
@@ -1601,26 +1594,21 @@ _[COMMENT_START_DASH_STATE] = function commentStartDashState(cp) {
1601
1594
if ( cp === $ . HYPHEN_MINUS )
1602
1595
this . state = COMMENT_END_STATE ;
1603
1596
1604
- else if ( cp === $ . NULL ) {
1605
- this . currentToken . data += '-' ;
1606
- this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1607
- this . state = COMMENT_STATE ;
1608
- }
1609
-
1610
1597
else if ( cp === $ . GREATER_THAN_SIGN ) {
1598
+ this . _err ( ERR . abruptComment ) ;
1611
1599
this . state = DATA_STATE ;
1612
1600
this . _emitCurrentToken ( ) ;
1613
1601
}
1614
1602
1615
1603
else if ( cp === $ . EOF ) {
1604
+ this . _err ( ERR . eofInComment ) ;
1616
1605
this . _emitCurrentToken ( ) ;
1617
1606
this . _emitEOFToken ( ) ;
1618
1607
}
1619
1608
1620
1609
else {
1621
1610
this . currentToken . data += '-' ;
1622
- this . currentToken . data += toChar ( cp ) ;
1623
- this . state = COMMENT_STATE ;
1611
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1624
1612
}
1625
1613
} ;
1626
1614
@@ -1631,10 +1619,18 @@ _[COMMENT_STATE] = function commentState(cp) {
1631
1619
if ( cp === $ . HYPHEN_MINUS )
1632
1620
this . state = COMMENT_END_DASH_STATE ;
1633
1621
1634
- else if ( cp === $ . NULL )
1622
+ else if ( cp === $ . LESS_THAN_SIGN ) {
1623
+ this . currentToken . data += '<' ;
1624
+ this . state = COMMENT_LESS_THAN_SIGN_STATE ;
1625
+ }
1626
+
1627
+ else if ( cp === $ . NULL ) {
1628
+ this . _err ( ERR . unexpectedNullCharacter ) ;
1635
1629
this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1630
+ }
1636
1631
1637
1632
else if ( cp === $ . EOF ) {
1633
+ this . _err ( ERR . eofInComment ) ;
1638
1634
this . _emitCurrentToken ( ) ;
1639
1635
this . _emitEOFToken ( ) ;
1640
1636
}
@@ -1644,27 +1640,68 @@ _[COMMENT_STATE] = function commentState(cp) {
1644
1640
} ;
1645
1641
1646
1642
1643
+ // Comment less-than sign state
1644
+ //------------------------------------------------------------------
1645
+ _ [ COMMENT_LESS_THAN_SIGN_STATE ] = function commentLessThanSignState ( cp ) {
1646
+ if ( cp === $ . EXCLAMATION_MARK ) {
1647
+ this . currentToken . data += '!' ;
1648
+ this . state = COMMENT_LESS_THAN_SIGN_BANG_STATE ;
1649
+ }
1650
+
1651
+ else if ( cp === $ . LESS_THAN_SIGN )
1652
+ this . currentToken . data += '!' ;
1653
+
1654
+ else
1655
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1656
+ } ;
1657
+
1658
+
1659
+ // Comment less-than sign bang state
1660
+ //------------------------------------------------------------------
1661
+ _ [ COMMENT_LESS_THAN_SIGN_BANG_STATE ] = function commentLessThanSignBangState ( cp ) {
1662
+ if ( cp === $ . HYPHEN_MINUS )
1663
+ this . state = COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE ;
1664
+
1665
+ else
1666
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1667
+ } ;
1668
+
1669
+
1670
+ // Comment less-than sign bang dash state
1671
+ //------------------------------------------------------------------
1672
+ _ [ COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE ] = function commentLessThanSignBangDashState ( cp ) {
1673
+ if ( cp === $ . HYPHEN_MINUS )
1674
+ this . state = COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE ;
1675
+
1676
+ else
1677
+ this . _reconsumeInState ( COMMENT_END_DASH_STATE ) ;
1678
+ } ;
1679
+
1680
+
1681
+ // Comment less-than sign bang dash dash state
1682
+ //------------------------------------------------------------------
1683
+ _ [ COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE ] = function commentLessThanSignBangDashDashState ( cp ) {
1684
+ if ( cp !== $ . GREATER_THAN_SIGN && cp !== $ . EOF )
1685
+ this . _err ( ERR . nestedComment ) ;
1686
+
1687
+ this . _reconsumeInState ( COMMENT_END_STATE ) ;
1688
+ } ;
1689
+
1690
+
1647
1691
// Comment end dash state
1648
1692
//------------------------------------------------------------------
1649
1693
_ [ COMMENT_END_DASH_STATE ] = function commentEndDashState ( cp ) {
1650
1694
if ( cp === $ . HYPHEN_MINUS )
1651
1695
this . state = COMMENT_END_STATE ;
1652
1696
1653
- else if ( cp === $ . NULL ) {
1654
- this . currentToken . data += '-' ;
1655
- this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1656
- this . state = COMMENT_STATE ;
1657
- }
1658
-
1659
1697
else if ( cp === $ . EOF ) {
1660
1698
this . _emitCurrentToken ( ) ;
1661
1699
this . _emitEOFToken ( ) ;
1662
1700
}
1663
1701
1664
1702
else {
1665
1703
this . currentToken . data += '-' ;
1666
- this . currentToken . data += toChar ( cp ) ;
1667
- this . state = COMMENT_STATE ;
1704
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1668
1705
}
1669
1706
} ;
1670
1707
@@ -1683,21 +1720,14 @@ _[COMMENT_END_STATE] = function commentEndState(cp) {
1683
1720
else if ( cp === $ . HYPHEN_MINUS )
1684
1721
this . currentToken . data += '-' ;
1685
1722
1686
- else if ( cp === $ . NULL ) {
1687
- this . currentToken . data += '--' ;
1688
- this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1689
- this . state = COMMENT_STATE ;
1690
- }
1691
-
1692
1723
else if ( cp === $ . EOF ) {
1693
1724
this . _emitCurrentToken ( ) ;
1694
1725
this . _emitEOFToken ( ) ;
1695
1726
}
1696
1727
1697
1728
else {
1698
1729
this . currentToken . data += '--' ;
1699
- this . currentToken . data += toChar ( cp ) ;
1700
- this . state = COMMENT_STATE ;
1730
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1701
1731
}
1702
1732
} ;
1703
1733
@@ -1715,21 +1745,14 @@ _[COMMENT_END_BANG_STATE] = function commentEndBangState(cp) {
1715
1745
this . _emitCurrentToken ( ) ;
1716
1746
}
1717
1747
1718
- else if ( cp === $ . NULL ) {
1719
- this . currentToken . data += '--!' ;
1720
- this . currentToken . data += UNICODE . REPLACEMENT_CHARACTER ;
1721
- this . state = COMMENT_STATE ;
1722
- }
1723
-
1724
1748
else if ( cp === $ . EOF ) {
1725
1749
this . _emitCurrentToken ( ) ;
1726
1750
this . _emitEOFToken ( ) ;
1727
1751
}
1728
1752
1729
1753
else {
1730
1754
this . currentToken . data += '--!' ;
1731
- this . currentToken . data += toChar ( cp ) ;
1732
- this . state = COMMENT_STATE ;
1755
+ this . _reconsumeInState ( COMMENT_STATE ) ;
1733
1756
}
1734
1757
} ;
1735
1758
0 commit comments