parse5 2.1.5 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -19
- package/README.md +40 -40
- package/lib/common/doctype.js +1 -1
- package/lib/common/foreign_content.js +260 -250
- package/lib/common/html.js +0 -3
- package/lib/index.js +108 -108
- package/lib/location_info/parser_mixin.js +4 -1
- package/lib/location_info/tokenizer_mixin.js +169 -168
- package/lib/parser/index.js +2817 -2864
- package/lib/parser/open_element_stack.js +395 -382
- package/lib/sax/dev_null_stream.js +14 -14
- package/lib/sax/index.js +3 -5
- package/lib/sax/parser_feedback_simulator.js +153 -116
- package/lib/serializer/index.js +180 -180
- package/lib/serializer/stream.js +49 -49
- package/lib/tokenizer/index.js +69 -361
- package/lib/tokenizer/preprocessor.js +155 -131
- package/lib/tree_adapters/htmlparser2.js +327 -327
- package/package.json +7 -6
package/lib/tokenizer/index.js
CHANGED
|
@@ -72,16 +72,12 @@ var DATA_STATE = 'DATA_STATE',
|
|
|
72
72
|
COMMENT_END_STATE = 'COMMENT_END_STATE',
|
|
73
73
|
COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE',
|
|
74
74
|
DOCTYPE_STATE = 'DOCTYPE_STATE',
|
|
75
|
-
BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE',
|
|
76
75
|
DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE',
|
|
77
76
|
AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE',
|
|
78
|
-
AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE',
|
|
79
77
|
BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE',
|
|
80
78
|
DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE',
|
|
81
79
|
DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE',
|
|
82
|
-
AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE',
|
|
83
80
|
BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE',
|
|
84
|
-
AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE',
|
|
85
81
|
BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE',
|
|
86
82
|
DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE',
|
|
87
83
|
DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE',
|
|
@@ -110,8 +106,12 @@ function isAsciiLower(cp) {
|
|
|
110
106
|
return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;
|
|
111
107
|
}
|
|
112
108
|
|
|
109
|
+
function isAsciiLetter(cp) {
|
|
110
|
+
return isAsciiLower(cp) || isAsciiUpper(cp);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
113
|
function isAsciiAlphaNumeric(cp) {
|
|
114
|
-
return
|
|
114
|
+
return isAsciiLetter(cp) || isAsciiDigit(cp);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
function isDigit(cp, isHex) {
|
|
@@ -319,32 +319,23 @@ Tokenizer.prototype.isTempBufferEqualToScriptString = function () {
|
|
|
319
319
|
};
|
|
320
320
|
|
|
321
321
|
//Token creation
|
|
322
|
-
Tokenizer.prototype.
|
|
323
|
-
|
|
322
|
+
Tokenizer.prototype._createStartTagToken = function () {
|
|
323
|
+
this.currentToken = {
|
|
324
324
|
type: Tokenizer.START_TAG_TOKEN,
|
|
325
|
-
tagName:
|
|
325
|
+
tagName: '',
|
|
326
326
|
selfClosing: false,
|
|
327
327
|
attrs: []
|
|
328
328
|
};
|
|
329
329
|
};
|
|
330
330
|
|
|
331
|
-
Tokenizer.prototype.
|
|
332
|
-
|
|
331
|
+
Tokenizer.prototype._createEndTagToken = function () {
|
|
332
|
+
this.currentToken = {
|
|
333
333
|
type: Tokenizer.END_TAG_TOKEN,
|
|
334
|
-
tagName:
|
|
335
|
-
ignored: false,
|
|
334
|
+
tagName: '',
|
|
336
335
|
attrs: []
|
|
337
336
|
};
|
|
338
337
|
};
|
|
339
338
|
|
|
340
|
-
Tokenizer.prototype._createStartTagToken = function (tagNameFirstCh) {
|
|
341
|
-
this.currentToken = this.buildStartTagToken(tagNameFirstCh);
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
Tokenizer.prototype._createEndTagToken = function (tagNameFirstCh) {
|
|
345
|
-
this.currentToken = this.buildEndTagToken(tagNameFirstCh);
|
|
346
|
-
};
|
|
347
|
-
|
|
348
339
|
Tokenizer.prototype._createCommentToken = function () {
|
|
349
340
|
this.currentToken = {
|
|
350
341
|
type: Tokenizer.COMMENT_TOKEN,
|
|
@@ -352,10 +343,10 @@ Tokenizer.prototype._createCommentToken = function () {
|
|
|
352
343
|
};
|
|
353
344
|
};
|
|
354
345
|
|
|
355
|
-
Tokenizer.prototype._createDoctypeToken = function (
|
|
346
|
+
Tokenizer.prototype._createDoctypeToken = function (initialName) {
|
|
356
347
|
this.currentToken = {
|
|
357
348
|
type: Tokenizer.DOCTYPE_TOKEN,
|
|
358
|
-
name:
|
|
349
|
+
name: initialName,
|
|
359
350
|
forceQuirks: false,
|
|
360
351
|
publicId: null,
|
|
361
352
|
systemId: null
|
|
@@ -583,6 +574,8 @@ var _ = Tokenizer.prototype;
|
|
|
583
574
|
//12.2.4.1 Data state
|
|
584
575
|
//------------------------------------------------------------------
|
|
585
576
|
_[DATA_STATE] = function dataState(cp) {
|
|
577
|
+
this.preprocessor.dropParsedChunk();
|
|
578
|
+
|
|
586
579
|
if (cp === $.AMPERSAND)
|
|
587
580
|
this.state = CHARACTER_REFERENCE_IN_DATA_STATE;
|
|
588
581
|
|
|
@@ -622,6 +615,8 @@ _[CHARACTER_REFERENCE_IN_DATA_STATE] = function characterReferenceInDataState(cp
|
|
|
622
615
|
//12.2.4.3 RCDATA state
|
|
623
616
|
//------------------------------------------------------------------
|
|
624
617
|
_[RCDATA_STATE] = function rcdataState(cp) {
|
|
618
|
+
this.preprocessor.dropParsedChunk();
|
|
619
|
+
|
|
625
620
|
if (cp === $.AMPERSAND)
|
|
626
621
|
this.state = CHARACTER_REFERENCE_IN_RCDATA_STATE;
|
|
627
622
|
|
|
@@ -661,6 +656,8 @@ _[CHARACTER_REFERENCE_IN_RCDATA_STATE] = function characterReferenceInRcdataStat
|
|
|
661
656
|
//12.2.4.5 RAWTEXT state
|
|
662
657
|
//------------------------------------------------------------------
|
|
663
658
|
_[RAWTEXT_STATE] = function rawtextState(cp) {
|
|
659
|
+
this.preprocessor.dropParsedChunk();
|
|
660
|
+
|
|
664
661
|
if (cp === $.LESS_THAN_SIGN)
|
|
665
662
|
this.state = RAWTEXT_LESS_THAN_SIGN_STATE;
|
|
666
663
|
|
|
@@ -678,6 +675,8 @@ _[RAWTEXT_STATE] = function rawtextState(cp) {
|
|
|
678
675
|
//12.2.4.6 Script data state
|
|
679
676
|
//------------------------------------------------------------------
|
|
680
677
|
_[SCRIPT_DATA_STATE] = function scriptDataState(cp) {
|
|
678
|
+
this.preprocessor.dropParsedChunk();
|
|
679
|
+
|
|
681
680
|
if (cp === $.LESS_THAN_SIGN)
|
|
682
681
|
this.state = SCRIPT_DATA_LESS_THAN_SIGN_STATE;
|
|
683
682
|
|
|
@@ -695,6 +694,8 @@ _[SCRIPT_DATA_STATE] = function scriptDataState(cp) {
|
|
|
695
694
|
//12.2.4.7 PLAINTEXT state
|
|
696
695
|
//------------------------------------------------------------------
|
|
697
696
|
_[PLAINTEXT_STATE] = function plaintextState(cp) {
|
|
697
|
+
this.preprocessor.dropParsedChunk();
|
|
698
|
+
|
|
698
699
|
if (cp === $.NULL)
|
|
699
700
|
this._emitChar(UNICODE.REPLACEMENT_CHARACTER);
|
|
700
701
|
|
|
@@ -715,14 +716,9 @@ _[TAG_OPEN_STATE] = function tagOpenState(cp) {
|
|
|
715
716
|
else if (cp === $.SOLIDUS)
|
|
716
717
|
this.state = END_TAG_OPEN_STATE;
|
|
717
718
|
|
|
718
|
-
else if (
|
|
719
|
-
this._createStartTagToken(
|
|
720
|
-
this.
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
else if (isAsciiLower(cp)) {
|
|
724
|
-
this._createStartTagToken(toChar(cp));
|
|
725
|
-
this.state = TAG_NAME_STATE;
|
|
719
|
+
else if (isAsciiLetter(cp)) {
|
|
720
|
+
this._createStartTagToken();
|
|
721
|
+
this._reconsumeInState(TAG_NAME_STATE);
|
|
726
722
|
}
|
|
727
723
|
|
|
728
724
|
else if (cp === $.QUESTION_MARK)
|
|
@@ -738,14 +734,9 @@ _[TAG_OPEN_STATE] = function tagOpenState(cp) {
|
|
|
738
734
|
//12.2.4.9 End tag open state
|
|
739
735
|
//------------------------------------------------------------------
|
|
740
736
|
_[END_TAG_OPEN_STATE] = function endTagOpenState(cp) {
|
|
741
|
-
if (
|
|
742
|
-
this._createEndTagToken(
|
|
743
|
-
this.
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
else if (isAsciiLower(cp)) {
|
|
747
|
-
this._createEndTagToken(toChar(cp));
|
|
748
|
-
this.state = TAG_NAME_STATE;
|
|
737
|
+
if (isAsciiLetter(cp)) {
|
|
738
|
+
this._createEndTagToken();
|
|
739
|
+
this._reconsumeInState(TAG_NAME_STATE);
|
|
749
740
|
}
|
|
750
741
|
|
|
751
742
|
else if (cp === $.GREATER_THAN_SIGN)
|
|
@@ -808,16 +799,9 @@ _[RCDATA_LESS_THAN_SIGN_STATE] = function rcdataLessThanSignState(cp) {
|
|
|
808
799
|
//12.2.4.12 RCDATA end tag open state
|
|
809
800
|
//------------------------------------------------------------------
|
|
810
801
|
_[RCDATA_END_TAG_OPEN_STATE] = function rcdataEndTagOpenState(cp) {
|
|
811
|
-
if (
|
|
812
|
-
this._createEndTagToken(
|
|
813
|
-
this.
|
|
814
|
-
this.state = RCDATA_END_TAG_NAME_STATE;
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
else if (isAsciiLower(cp)) {
|
|
818
|
-
this._createEndTagToken(toChar(cp));
|
|
819
|
-
this.tempBuff.push(cp);
|
|
820
|
-
this.state = RCDATA_END_TAG_NAME_STATE;
|
|
802
|
+
if (isAsciiLetter(cp)) {
|
|
803
|
+
this._createEndTagToken();
|
|
804
|
+
this._reconsumeInState(RCDATA_END_TAG_NAME_STATE);
|
|
821
805
|
}
|
|
822
806
|
|
|
823
807
|
else {
|
|
@@ -886,16 +870,9 @@ _[RAWTEXT_LESS_THAN_SIGN_STATE] = function rawtextLessThanSignState(cp) {
|
|
|
886
870
|
//12.2.4.15 RAWTEXT end tag open state
|
|
887
871
|
//------------------------------------------------------------------
|
|
888
872
|
_[RAWTEXT_END_TAG_OPEN_STATE] = function rawtextEndTagOpenState(cp) {
|
|
889
|
-
if (
|
|
890
|
-
this._createEndTagToken(
|
|
891
|
-
this.
|
|
892
|
-
this.state = RAWTEXT_END_TAG_NAME_STATE;
|
|
893
|
-
}
|
|
894
|
-
|
|
895
|
-
else if (isAsciiLower(cp)) {
|
|
896
|
-
this._createEndTagToken(toChar(cp));
|
|
897
|
-
this.tempBuff.push(cp);
|
|
898
|
-
this.state = RAWTEXT_END_TAG_NAME_STATE;
|
|
873
|
+
if (isAsciiLetter(cp)) {
|
|
874
|
+
this._createEndTagToken();
|
|
875
|
+
this._reconsumeInState(RAWTEXT_END_TAG_NAME_STATE);
|
|
899
876
|
}
|
|
900
877
|
|
|
901
878
|
else {
|
|
@@ -970,16 +947,9 @@ _[SCRIPT_DATA_LESS_THAN_SIGN_STATE] = function scriptDataLessThanSignState(cp) {
|
|
|
970
947
|
//12.2.4.18 Script data end tag open state
|
|
971
948
|
//------------------------------------------------------------------
|
|
972
949
|
_[SCRIPT_DATA_END_TAG_OPEN_STATE] = function scriptDataEndTagOpenState(cp) {
|
|
973
|
-
if (
|
|
974
|
-
this._createEndTagToken(
|
|
975
|
-
this.
|
|
976
|
-
this.state = SCRIPT_DATA_END_TAG_NAME_STATE;
|
|
977
|
-
}
|
|
978
|
-
|
|
979
|
-
else if (isAsciiLower(cp)) {
|
|
980
|
-
this._createEndTagToken(toChar(cp));
|
|
981
|
-
this.tempBuff.push(cp);
|
|
982
|
-
this.state = SCRIPT_DATA_END_TAG_NAME_STATE;
|
|
950
|
+
if (isAsciiLetter(cp)) {
|
|
951
|
+
this._createEndTagToken();
|
|
952
|
+
this._reconsumeInState(SCRIPT_DATA_END_TAG_NAME_STATE);
|
|
983
953
|
}
|
|
984
954
|
|
|
985
955
|
else {
|
|
@@ -1141,20 +1111,10 @@ _[SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataEscapedLessThan
|
|
|
1141
1111
|
this.state = SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE;
|
|
1142
1112
|
}
|
|
1143
1113
|
|
|
1144
|
-
else if (
|
|
1145
|
-
this.tempBuff = [];
|
|
1146
|
-
this.tempBuff.push(toAsciiLowerCodePoint(cp));
|
|
1147
|
-
this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE;
|
|
1148
|
-
this._emitChar('<');
|
|
1149
|
-
this._emitCodePoint(cp);
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1152
|
-
else if (isAsciiLower(cp)) {
|
|
1114
|
+
else if (isAsciiLetter(cp)) {
|
|
1153
1115
|
this.tempBuff = [];
|
|
1154
|
-
this.tempBuff.push(cp);
|
|
1155
|
-
this.state = SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE;
|
|
1156
1116
|
this._emitChar('<');
|
|
1157
|
-
this.
|
|
1117
|
+
this._reconsumeInState(SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE);
|
|
1158
1118
|
}
|
|
1159
1119
|
|
|
1160
1120
|
else {
|
|
@@ -1167,16 +1127,9 @@ _[SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE] = function scriptDataEscapedLessThan
|
|
|
1167
1127
|
//12.2.4.26 Script data escaped end tag open state
|
|
1168
1128
|
//------------------------------------------------------------------
|
|
1169
1129
|
_[SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE] = function scriptDataEscapedEndTagOpenState(cp) {
|
|
1170
|
-
if (
|
|
1171
|
-
this._createEndTagToken(
|
|
1172
|
-
this.
|
|
1173
|
-
this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE;
|
|
1174
|
-
}
|
|
1175
|
-
|
|
1176
|
-
else if (isAsciiLower(cp)) {
|
|
1177
|
-
this._createEndTagToken(toChar(cp));
|
|
1178
|
-
this.tempBuff.push(cp);
|
|
1179
|
-
this.state = SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE;
|
|
1130
|
+
if (isAsciiLetter(cp)) {
|
|
1131
|
+
this._createEndTagToken();
|
|
1132
|
+
this._reconsumeInState(SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE);
|
|
1180
1133
|
}
|
|
1181
1134
|
|
|
1182
1135
|
else {
|
|
@@ -1377,35 +1330,17 @@ _[BEFORE_ATTRIBUTE_NAME_STATE] = function beforeAttributeNameState(cp) {
|
|
|
1377
1330
|
if (isWhitespace(cp))
|
|
1378
1331
|
return;
|
|
1379
1332
|
|
|
1380
|
-
if (cp === $.SOLIDUS)
|
|
1381
|
-
this.
|
|
1382
|
-
|
|
1383
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
1384
|
-
this.state = DATA_STATE;
|
|
1385
|
-
this._emitCurrentToken();
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
|
-
else if (isAsciiUpper(cp)) {
|
|
1389
|
-
this._createAttr(toAsciiLowerChar(cp));
|
|
1390
|
-
this.state = ATTRIBUTE_NAME_STATE;
|
|
1391
|
-
}
|
|
1333
|
+
if (cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF)
|
|
1334
|
+
this._reconsumeInState(AFTER_ATTRIBUTE_NAME_STATE);
|
|
1392
1335
|
|
|
1393
|
-
else if (cp === $.
|
|
1394
|
-
this._createAttr(
|
|
1336
|
+
else if (cp === $.EQUALS_SIGN) {
|
|
1337
|
+
this._createAttr('=');
|
|
1395
1338
|
this.state = ATTRIBUTE_NAME_STATE;
|
|
1396
1339
|
}
|
|
1397
1340
|
|
|
1398
|
-
else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN) {
|
|
1399
|
-
this._createAttr(toChar(cp));
|
|
1400
|
-
this.state = ATTRIBUTE_NAME_STATE;
|
|
1401
|
-
}
|
|
1402
|
-
|
|
1403
|
-
else if (cp === $.EOF)
|
|
1404
|
-
this._reconsumeInState(DATA_STATE);
|
|
1405
|
-
|
|
1406
1341
|
else {
|
|
1407
|
-
this._createAttr(
|
|
1408
|
-
this.
|
|
1342
|
+
this._createAttr('');
|
|
1343
|
+
this._reconsumeInState(ATTRIBUTE_NAME_STATE);
|
|
1409
1344
|
}
|
|
1410
1345
|
};
|
|
1411
1346
|
|
|
@@ -1413,20 +1348,14 @@ _[BEFORE_ATTRIBUTE_NAME_STATE] = function beforeAttributeNameState(cp) {
|
|
|
1413
1348
|
//12.2.4.35 Attribute name state
|
|
1414
1349
|
//------------------------------------------------------------------
|
|
1415
1350
|
_[ATTRIBUTE_NAME_STATE] = function attributeNameState(cp) {
|
|
1416
|
-
if (isWhitespace(cp))
|
|
1351
|
+
if (isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN || cp === $.EOF) {
|
|
1417
1352
|
this._leaveAttrName(AFTER_ATTRIBUTE_NAME_STATE);
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
this._leaveAttrName(SELF_CLOSING_START_TAG_STATE);
|
|
1353
|
+
this._unconsume();
|
|
1354
|
+
}
|
|
1421
1355
|
|
|
1422
1356
|
else if (cp === $.EQUALS_SIGN)
|
|
1423
1357
|
this._leaveAttrName(BEFORE_ATTRIBUTE_VALUE_STATE);
|
|
1424
1358
|
|
|
1425
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
1426
|
-
this._leaveAttrName(DATA_STATE);
|
|
1427
|
-
this._emitCurrentToken();
|
|
1428
|
-
}
|
|
1429
|
-
|
|
1430
1359
|
else if (isAsciiUpper(cp))
|
|
1431
1360
|
this.currentAttr.name += toAsciiLowerChar(cp);
|
|
1432
1361
|
|
|
@@ -1436,9 +1365,6 @@ _[ATTRIBUTE_NAME_STATE] = function attributeNameState(cp) {
|
|
|
1436
1365
|
else if (cp === $.NULL)
|
|
1437
1366
|
this.currentAttr.name += UNICODE.REPLACEMENT_CHARACTER;
|
|
1438
1367
|
|
|
1439
|
-
else if (cp === $.EOF)
|
|
1440
|
-
this._reconsumeInState(DATA_STATE);
|
|
1441
|
-
|
|
1442
1368
|
else
|
|
1443
1369
|
this.currentAttr.name += toChar(cp);
|
|
1444
1370
|
};
|
|
@@ -1461,27 +1387,12 @@ _[AFTER_ATTRIBUTE_NAME_STATE] = function afterAttributeNameState(cp) {
|
|
|
1461
1387
|
this._emitCurrentToken();
|
|
1462
1388
|
}
|
|
1463
1389
|
|
|
1464
|
-
else if (isAsciiUpper(cp)) {
|
|
1465
|
-
this._createAttr(toAsciiLowerChar(cp));
|
|
1466
|
-
this.state = ATTRIBUTE_NAME_STATE;
|
|
1467
|
-
}
|
|
1468
|
-
|
|
1469
|
-
else if (cp === $.NULL) {
|
|
1470
|
-
this._createAttr(UNICODE.REPLACEMENT_CHARACTER);
|
|
1471
|
-
this.state = ATTRIBUTE_NAME_STATE;
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
else if (cp === $.QUOTATION_MARK || cp === $.APOSTROPHE || cp === $.LESS_THAN_SIGN) {
|
|
1475
|
-
this._createAttr(toChar(cp));
|
|
1476
|
-
this.state = ATTRIBUTE_NAME_STATE;
|
|
1477
|
-
}
|
|
1478
|
-
|
|
1479
1390
|
else if (cp === $.EOF)
|
|
1480
1391
|
this._reconsumeInState(DATA_STATE);
|
|
1481
1392
|
|
|
1482
1393
|
else {
|
|
1483
|
-
this._createAttr(
|
|
1484
|
-
this.
|
|
1394
|
+
this._createAttr('');
|
|
1395
|
+
this._reconsumeInState(ATTRIBUTE_NAME_STATE);
|
|
1485
1396
|
}
|
|
1486
1397
|
};
|
|
1487
1398
|
|
|
@@ -1495,34 +1406,11 @@ _[BEFORE_ATTRIBUTE_VALUE_STATE] = function beforeAttributeValueState(cp) {
|
|
|
1495
1406
|
if (cp === $.QUOTATION_MARK)
|
|
1496
1407
|
this.state = ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE;
|
|
1497
1408
|
|
|
1498
|
-
else if (cp === $.AMPERSAND)
|
|
1499
|
-
this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE);
|
|
1500
|
-
|
|
1501
1409
|
else if (cp === $.APOSTROPHE)
|
|
1502
1410
|
this.state = ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE;
|
|
1503
1411
|
|
|
1504
|
-
else
|
|
1505
|
-
this.
|
|
1506
|
-
this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE;
|
|
1507
|
-
}
|
|
1508
|
-
|
|
1509
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
1510
|
-
this.state = DATA_STATE;
|
|
1511
|
-
this._emitCurrentToken();
|
|
1512
|
-
}
|
|
1513
|
-
|
|
1514
|
-
else if (cp === $.LESS_THAN_SIGN || cp === $.EQUALS_SIGN || cp === $.GRAVE_ACCENT) {
|
|
1515
|
-
this.currentAttr.value += toChar(cp);
|
|
1516
|
-
this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE;
|
|
1517
|
-
}
|
|
1518
|
-
|
|
1519
|
-
else if (cp === $.EOF)
|
|
1520
|
-
this._reconsumeInState(DATA_STATE);
|
|
1521
|
-
|
|
1522
|
-
else {
|
|
1523
|
-
this.currentAttr.value += toChar(cp);
|
|
1524
|
-
this.state = ATTRIBUTE_VALUE_UNQUOTED_STATE;
|
|
1525
|
-
}
|
|
1412
|
+
else
|
|
1413
|
+
this._reconsumeInState(ATTRIBUTE_VALUE_UNQUOTED_STATE);
|
|
1526
1414
|
};
|
|
1527
1415
|
|
|
1528
1416
|
|
|
@@ -1894,54 +1782,25 @@ _[COMMENT_END_BANG_STATE] = function commentEndBangState(cp) {
|
|
|
1894
1782
|
//12.2.4.52 DOCTYPE state
|
|
1895
1783
|
//------------------------------------------------------------------
|
|
1896
1784
|
_[DOCTYPE_STATE] = function doctypeState(cp) {
|
|
1897
|
-
if (isWhitespace(cp))
|
|
1898
|
-
this.state = BEFORE_DOCTYPE_NAME_STATE;
|
|
1899
|
-
|
|
1900
|
-
else if (cp === $.EOF) {
|
|
1901
|
-
this._createDoctypeToken();
|
|
1902
|
-
this.currentToken.forceQuirks = true;
|
|
1903
|
-
this._emitCurrentToken();
|
|
1904
|
-
this._reconsumeInState(DATA_STATE);
|
|
1905
|
-
}
|
|
1906
|
-
|
|
1907
|
-
else
|
|
1908
|
-
this._reconsumeInState(BEFORE_DOCTYPE_NAME_STATE);
|
|
1909
|
-
};
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
//12.2.4.53 Before DOCTYPE name state
|
|
1913
|
-
//------------------------------------------------------------------
|
|
1914
|
-
_[BEFORE_DOCTYPE_NAME_STATE] = function beforeDoctypeNameState(cp) {
|
|
1915
1785
|
if (isWhitespace(cp))
|
|
1916
1786
|
return;
|
|
1917
1787
|
|
|
1918
|
-
if (isAsciiUpper(cp)) {
|
|
1919
|
-
this._createDoctypeToken(toAsciiLowerChar(cp));
|
|
1920
|
-
this.state = DOCTYPE_NAME_STATE;
|
|
1921
|
-
}
|
|
1922
|
-
|
|
1923
1788
|
else if (cp === $.GREATER_THAN_SIGN) {
|
|
1924
|
-
this._createDoctypeToken();
|
|
1789
|
+
this._createDoctypeToken(null);
|
|
1925
1790
|
this.currentToken.forceQuirks = true;
|
|
1926
1791
|
this._emitCurrentToken();
|
|
1927
1792
|
this.state = DATA_STATE;
|
|
1928
1793
|
}
|
|
1929
1794
|
|
|
1930
1795
|
else if (cp === $.EOF) {
|
|
1931
|
-
this._createDoctypeToken();
|
|
1796
|
+
this._createDoctypeToken(null);
|
|
1932
1797
|
this.currentToken.forceQuirks = true;
|
|
1933
1798
|
this._emitCurrentToken();
|
|
1934
1799
|
this._reconsumeInState(DATA_STATE);
|
|
1935
1800
|
}
|
|
1936
|
-
|
|
1937
|
-
else if (cp === $.NULL) {
|
|
1938
|
-
this._createDoctypeToken(UNICODE.REPLACEMENT_CHARACTER);
|
|
1939
|
-
this.state = DOCTYPE_NAME_STATE;
|
|
1940
|
-
}
|
|
1941
|
-
|
|
1942
1801
|
else {
|
|
1943
|
-
this._createDoctypeToken(
|
|
1944
|
-
this.
|
|
1802
|
+
this._createDoctypeToken('');
|
|
1803
|
+
this._reconsumeInState(DOCTYPE_NAME_STATE);
|
|
1945
1804
|
}
|
|
1946
1805
|
};
|
|
1947
1806
|
|
|
@@ -1949,13 +1808,8 @@ _[BEFORE_DOCTYPE_NAME_STATE] = function beforeDoctypeNameState(cp) {
|
|
|
1949
1808
|
//12.2.4.54 DOCTYPE name state
|
|
1950
1809
|
//------------------------------------------------------------------
|
|
1951
1810
|
_[DOCTYPE_NAME_STATE] = function doctypeNameState(cp) {
|
|
1952
|
-
if (isWhitespace(cp))
|
|
1953
|
-
this.
|
|
1954
|
-
|
|
1955
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
1956
|
-
this._emitCurrentToken();
|
|
1957
|
-
this.state = DATA_STATE;
|
|
1958
|
-
}
|
|
1811
|
+
if (isWhitespace(cp) || cp === $.GREATER_THAN_SIGN || cp === $.EOF)
|
|
1812
|
+
this._reconsumeInState(AFTER_DOCTYPE_NAME_STATE);
|
|
1959
1813
|
|
|
1960
1814
|
else if (isAsciiUpper(cp))
|
|
1961
1815
|
this.currentToken.name += toAsciiLowerChar(cp);
|
|
@@ -1963,12 +1817,6 @@ _[DOCTYPE_NAME_STATE] = function doctypeNameState(cp) {
|
|
|
1963
1817
|
else if (cp === $.NULL)
|
|
1964
1818
|
this.currentToken.name += UNICODE.REPLACEMENT_CHARACTER;
|
|
1965
1819
|
|
|
1966
|
-
else if (cp === $.EOF) {
|
|
1967
|
-
this.currentToken.forceQuirks = true;
|
|
1968
|
-
this._emitCurrentToken();
|
|
1969
|
-
this._reconsumeInState(DATA_STATE);
|
|
1970
|
-
}
|
|
1971
|
-
|
|
1972
1820
|
else
|
|
1973
1821
|
this.currentToken.name += toChar(cp);
|
|
1974
1822
|
};
|
|
@@ -1985,22 +1833,16 @@ _[AFTER_DOCTYPE_NAME_STATE] = function afterDoctypeNameState(cp) {
|
|
|
1985
1833
|
this._emitCurrentToken();
|
|
1986
1834
|
}
|
|
1987
1835
|
|
|
1988
|
-
else if (cp === $.EOF) {
|
|
1989
|
-
this.currentToken.forceQuirks = true;
|
|
1990
|
-
this._emitCurrentToken();
|
|
1991
|
-
this._reconsumeInState(DATA_STATE);
|
|
1992
|
-
}
|
|
1993
|
-
|
|
1994
1836
|
else {
|
|
1995
1837
|
var publicMatch = this._consumeSubsequentIfMatch($$.PUBLIC_STRING, cp, false),
|
|
1996
1838
|
systemMatch = !publicMatch && this._consumeSubsequentIfMatch($$.SYSTEM_STRING, cp, false);
|
|
1997
1839
|
|
|
1998
1840
|
if (!this._ensureHibernation()) {
|
|
1999
1841
|
if (publicMatch)
|
|
2000
|
-
this.state =
|
|
1842
|
+
this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE;
|
|
2001
1843
|
|
|
2002
1844
|
else if (systemMatch)
|
|
2003
|
-
this.state =
|
|
1845
|
+
this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE;
|
|
2004
1846
|
|
|
2005
1847
|
else {
|
|
2006
1848
|
this.currentToken.forceQuirks = true;
|
|
@@ -2011,41 +1853,6 @@ _[AFTER_DOCTYPE_NAME_STATE] = function afterDoctypeNameState(cp) {
|
|
|
2011
1853
|
};
|
|
2012
1854
|
|
|
2013
1855
|
|
|
2014
|
-
//12.2.4.56 After DOCTYPE public keyword state
|
|
2015
|
-
//------------------------------------------------------------------
|
|
2016
|
-
_[AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE] = function afterDoctypePublicKeywordState(cp) {
|
|
2017
|
-
if (isWhitespace(cp))
|
|
2018
|
-
this.state = BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE;
|
|
2019
|
-
|
|
2020
|
-
else if (cp === $.QUOTATION_MARK) {
|
|
2021
|
-
this.currentToken.publicId = '';
|
|
2022
|
-
this.state = DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE;
|
|
2023
|
-
}
|
|
2024
|
-
|
|
2025
|
-
else if (cp === $.APOSTROPHE) {
|
|
2026
|
-
this.currentToken.publicId = '';
|
|
2027
|
-
this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2028
|
-
}
|
|
2029
|
-
|
|
2030
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
2031
|
-
this.currentToken.forceQuirks = true;
|
|
2032
|
-
this._emitCurrentToken();
|
|
2033
|
-
this.state = DATA_STATE;
|
|
2034
|
-
}
|
|
2035
|
-
|
|
2036
|
-
else if (cp === $.EOF) {
|
|
2037
|
-
this.currentToken.forceQuirks = true;
|
|
2038
|
-
this._emitCurrentToken();
|
|
2039
|
-
this._reconsumeInState(DATA_STATE);
|
|
2040
|
-
}
|
|
2041
|
-
|
|
2042
|
-
else {
|
|
2043
|
-
this.currentToken.forceQuirks = true;
|
|
2044
|
-
this.state = BOGUS_DOCTYPE_STATE;
|
|
2045
|
-
}
|
|
2046
|
-
};
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
1856
|
//12.2.4.57 Before DOCTYPE public identifier state
|
|
2050
1857
|
//------------------------------------------------------------------
|
|
2051
1858
|
_[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function beforeDoctypePublicIdentifierState(cp) {
|
|
@@ -2062,21 +1869,9 @@ _[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function beforeDoctypePublicIdentifi
|
|
|
2062
1869
|
this.state = DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2063
1870
|
}
|
|
2064
1871
|
|
|
2065
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
2066
|
-
this.currentToken.forceQuirks = true;
|
|
2067
|
-
this._emitCurrentToken();
|
|
2068
|
-
this.state = DATA_STATE;
|
|
2069
|
-
}
|
|
2070
|
-
|
|
2071
|
-
else if (cp === $.EOF) {
|
|
2072
|
-
this.currentToken.forceQuirks = true;
|
|
2073
|
-
this._emitCurrentToken();
|
|
2074
|
-
this._reconsumeInState(DATA_STATE);
|
|
2075
|
-
}
|
|
2076
|
-
|
|
2077
1872
|
else {
|
|
2078
1873
|
this.currentToken.forceQuirks = true;
|
|
2079
|
-
this.
|
|
1874
|
+
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
|
|
2080
1875
|
}
|
|
2081
1876
|
};
|
|
2082
1877
|
|
|
@@ -2085,7 +1880,7 @@ _[BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function beforeDoctypePublicIdentifi
|
|
|
2085
1880
|
//------------------------------------------------------------------
|
|
2086
1881
|
_[DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypePublicIdentifierDoubleQuotedState(cp) {
|
|
2087
1882
|
if (cp === $.QUOTATION_MARK)
|
|
2088
|
-
this.state =
|
|
1883
|
+
this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE;
|
|
2089
1884
|
|
|
2090
1885
|
else if (cp === $.NULL)
|
|
2091
1886
|
this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER;
|
|
@@ -2111,7 +1906,7 @@ _[DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE] = function doctypePublicIdentif
|
|
|
2111
1906
|
//------------------------------------------------------------------
|
|
2112
1907
|
_[DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypePublicIdentifierSingleQuotedState(cp) {
|
|
2113
1908
|
if (cp === $.APOSTROPHE)
|
|
2114
|
-
this.state =
|
|
1909
|
+
this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE;
|
|
2115
1910
|
|
|
2116
1911
|
else if (cp === $.NULL)
|
|
2117
1912
|
this.currentToken.publicId += UNICODE.REPLACEMENT_CHARACTER;
|
|
@@ -2133,40 +1928,6 @@ _[DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE] = function doctypePublicIdentif
|
|
|
2133
1928
|
};
|
|
2134
1929
|
|
|
2135
1930
|
|
|
2136
|
-
//12.2.4.60 After DOCTYPE public identifier state
|
|
2137
|
-
//------------------------------------------------------------------
|
|
2138
|
-
_[AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE] = function afterDoctypePublicIdentifierState(cp) {
|
|
2139
|
-
if (isWhitespace(cp))
|
|
2140
|
-
this.state = BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE;
|
|
2141
|
-
|
|
2142
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
2143
|
-
this._emitCurrentToken();
|
|
2144
|
-
this.state = DATA_STATE;
|
|
2145
|
-
}
|
|
2146
|
-
|
|
2147
|
-
else if (cp === $.QUOTATION_MARK) {
|
|
2148
|
-
this.currentToken.systemId = '';
|
|
2149
|
-
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
|
|
2150
|
-
}
|
|
2151
|
-
|
|
2152
|
-
else if (cp === $.APOSTROPHE) {
|
|
2153
|
-
this.currentToken.systemId = '';
|
|
2154
|
-
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2155
|
-
}
|
|
2156
|
-
|
|
2157
|
-
else if (cp === $.EOF) {
|
|
2158
|
-
this.currentToken.forceQuirks = true;
|
|
2159
|
-
this._emitCurrentToken();
|
|
2160
|
-
this._reconsumeInState(DATA_STATE);
|
|
2161
|
-
}
|
|
2162
|
-
|
|
2163
|
-
else {
|
|
2164
|
-
this.currentToken.forceQuirks = true;
|
|
2165
|
-
this.state = BOGUS_DOCTYPE_STATE;
|
|
2166
|
-
}
|
|
2167
|
-
};
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
1931
|
//12.2.4.61 Between DOCTYPE public and system identifiers state
|
|
2171
1932
|
//------------------------------------------------------------------
|
|
2172
1933
|
_[BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE] = function betweenDoctypePublicAndSystemIdentifiersState(cp) {
|
|
@@ -2189,50 +1950,9 @@ _[BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE] = function betweenDoctype
|
|
|
2189
1950
|
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2190
1951
|
}
|
|
2191
1952
|
|
|
2192
|
-
else if (cp === $.EOF) {
|
|
2193
|
-
this.currentToken.forceQuirks = true;
|
|
2194
|
-
this._emitCurrentToken();
|
|
2195
|
-
this._reconsumeInState(DATA_STATE);
|
|
2196
|
-
}
|
|
2197
|
-
|
|
2198
|
-
else {
|
|
2199
|
-
this.currentToken.forceQuirks = true;
|
|
2200
|
-
this.state = BOGUS_DOCTYPE_STATE;
|
|
2201
|
-
}
|
|
2202
|
-
};
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
//12.2.4.62 After DOCTYPE system keyword state
|
|
2206
|
-
//------------------------------------------------------------------
|
|
2207
|
-
_[AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE] = function afterDoctypeSystemKeywordState(cp) {
|
|
2208
|
-
if (isWhitespace(cp))
|
|
2209
|
-
this.state = BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE;
|
|
2210
|
-
|
|
2211
|
-
else if (cp === $.QUOTATION_MARK) {
|
|
2212
|
-
this.currentToken.systemId = '';
|
|
2213
|
-
this.state = DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE;
|
|
2214
|
-
}
|
|
2215
|
-
|
|
2216
|
-
else if (cp === $.APOSTROPHE) {
|
|
2217
|
-
this.currentToken.systemId = '';
|
|
2218
|
-
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2219
|
-
}
|
|
2220
|
-
|
|
2221
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
2222
|
-
this.currentToken.forceQuirks = true;
|
|
2223
|
-
this._emitCurrentToken();
|
|
2224
|
-
this.state = DATA_STATE;
|
|
2225
|
-
}
|
|
2226
|
-
|
|
2227
|
-
else if (cp === $.EOF) {
|
|
2228
|
-
this.currentToken.forceQuirks = true;
|
|
2229
|
-
this._emitCurrentToken();
|
|
2230
|
-
this._reconsumeInState(DATA_STATE);
|
|
2231
|
-
}
|
|
2232
|
-
|
|
2233
1953
|
else {
|
|
2234
1954
|
this.currentToken.forceQuirks = true;
|
|
2235
|
-
this.
|
|
1955
|
+
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
|
|
2236
1956
|
}
|
|
2237
1957
|
};
|
|
2238
1958
|
|
|
@@ -2253,21 +1973,9 @@ _[BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE] = function beforeDoctypeSystemIdentifi
|
|
|
2253
1973
|
this.state = DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE;
|
|
2254
1974
|
}
|
|
2255
1975
|
|
|
2256
|
-
else if (cp === $.GREATER_THAN_SIGN) {
|
|
2257
|
-
this.currentToken.forceQuirks = true;
|
|
2258
|
-
this._emitCurrentToken();
|
|
2259
|
-
this.state = DATA_STATE;
|
|
2260
|
-
}
|
|
2261
|
-
|
|
2262
|
-
else if (cp === $.EOF) {
|
|
2263
|
-
this.currentToken.forceQuirks = true;
|
|
2264
|
-
this._emitCurrentToken();
|
|
2265
|
-
this._reconsumeInState(DATA_STATE);
|
|
2266
|
-
}
|
|
2267
|
-
|
|
2268
1976
|
else {
|
|
2269
1977
|
this.currentToken.forceQuirks = true;
|
|
2270
|
-
this.
|
|
1978
|
+
this._reconsumeInState(BOGUS_DOCTYPE_STATE);
|
|
2271
1979
|
}
|
|
2272
1980
|
};
|
|
2273
1981
|
|