Skip to content

Commit 519b9e0

Browse files
author
mengshuang
committed
toHtml 属性过滤
1 parent d4d3adf commit 519b9e0

File tree

8 files changed

+4532
-655
lines changed

8 files changed

+4532
-655
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "html2obj",
3-
"version": "1.0.8",
3+
"version": "1.0.9",
44
"description": "pure js,html to obj,obj to html",
55
"main": "./src/html2obj.js",
66
"scripts": {

src/DocTypeReader.js

Lines changed: 70 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,114 @@
11
//TODO: handle comments
2-
function readDocType(xmlData, i){
3-
2+
function readDocType(xmlData, i) {
3+
44
const entities = {};
5-
if( xmlData[i + 3] === 'O' &&
6-
xmlData[i + 4] === 'C' &&
7-
xmlData[i + 5] === 'T' &&
8-
xmlData[i + 6] === 'Y' &&
9-
xmlData[i + 7] === 'P' &&
10-
xmlData[i + 8] === 'E')
11-
{
12-
i = i+9;
5+
if (xmlData[i + 3] === 'O' &&
6+
xmlData[i + 4] === 'C' &&
7+
xmlData[i + 5] === 'T' &&
8+
xmlData[i + 6] === 'Y' &&
9+
xmlData[i + 7] === 'P' &&
10+
xmlData[i + 8] === 'E') {
11+
i = i + 9;
1312
let angleBracketsCount = 1;
1413
let hasBody = false, entity = false, comment = false;
1514
let exp = "";
16-
for(;i<xmlData.length;i++){
15+
for (; i < xmlData.length; i++) {
1716
if (xmlData[i] === '<') {
18-
if( hasBody &&
19-
xmlData[i+1] === '!' &&
20-
xmlData[i+2] === 'E' &&
21-
xmlData[i+3] === 'N' &&
22-
xmlData[i+4] === 'T' &&
23-
xmlData[i+5] === 'I' &&
24-
xmlData[i+6] === 'T' &&
25-
xmlData[i+7] === 'Y'
26-
){
17+
if (hasBody &&
18+
xmlData[i + 1] === '!' &&
19+
xmlData[i + 2] === 'E' &&
20+
xmlData[i + 3] === 'N' &&
21+
xmlData[i + 4] === 'T' &&
22+
xmlData[i + 5] === 'I' &&
23+
xmlData[i + 6] === 'T' &&
24+
xmlData[i + 7] === 'Y'
25+
) {
2726
i += 7;
2827
entity = true;
29-
}else if( hasBody &&
30-
xmlData[i+1] === '!' &&
31-
xmlData[i+2] === 'E' &&
32-
xmlData[i+3] === 'L' &&
33-
xmlData[i+4] === 'E' &&
34-
xmlData[i+5] === 'M' &&
35-
xmlData[i+6] === 'E' &&
36-
xmlData[i+7] === 'N' &&
37-
xmlData[i+8] === 'T'
38-
){
28+
} else if (hasBody &&
29+
xmlData[i + 1] === '!' &&
30+
xmlData[i + 2] === 'E' &&
31+
xmlData[i + 3] === 'L' &&
32+
xmlData[i + 4] === 'E' &&
33+
xmlData[i + 5] === 'M' &&
34+
xmlData[i + 6] === 'E' &&
35+
xmlData[i + 7] === 'N' &&
36+
xmlData[i + 8] === 'T'
37+
) {
3938
//Not supported
4039
i += 8;
41-
}else if( hasBody &&
42-
xmlData[i+1] === '!' &&
43-
xmlData[i+2] === 'A' &&
44-
xmlData[i+3] === 'T' &&
45-
xmlData[i+4] === 'T' &&
46-
xmlData[i+5] === 'L' &&
47-
xmlData[i+6] === 'I' &&
48-
xmlData[i+7] === 'S' &&
49-
xmlData[i+8] === 'T'
50-
){
40+
} else if (hasBody &&
41+
xmlData[i + 1] === '!' &&
42+
xmlData[i + 2] === 'A' &&
43+
xmlData[i + 3] === 'T' &&
44+
xmlData[i + 4] === 'T' &&
45+
xmlData[i + 5] === 'L' &&
46+
xmlData[i + 6] === 'I' &&
47+
xmlData[i + 7] === 'S' &&
48+
xmlData[i + 8] === 'T'
49+
) {
5150
//Not supported
5251
i += 8;
53-
}else if( hasBody &&
54-
xmlData[i+1] === '!' &&
55-
xmlData[i+2] === 'N' &&
56-
xmlData[i+3] === 'O' &&
57-
xmlData[i+4] === 'T' &&
58-
xmlData[i+5] === 'A' &&
59-
xmlData[i+6] === 'T' &&
60-
xmlData[i+7] === 'I' &&
61-
xmlData[i+8] === 'O' &&
62-
xmlData[i+9] === 'N'
63-
){
52+
} else if (hasBody &&
53+
xmlData[i + 1] === '!' &&
54+
xmlData[i + 2] === 'N' &&
55+
xmlData[i + 3] === 'O' &&
56+
xmlData[i + 4] === 'T' &&
57+
xmlData[i + 5] === 'A' &&
58+
xmlData[i + 6] === 'T' &&
59+
xmlData[i + 7] === 'I' &&
60+
xmlData[i + 8] === 'O' &&
61+
xmlData[i + 9] === 'N'
62+
) {
6463
//Not supported
6564
i += 9;
66-
}else if( //comment
67-
xmlData[i+1] === '!' &&
68-
xmlData[i+2] === '-' &&
69-
xmlData[i+3] === '-'
70-
){
65+
} else if ( //comment
66+
xmlData[i + 1] === '!' &&
67+
xmlData[i + 2] === '-' &&
68+
xmlData[i + 3] === '-'
69+
) {
7170
comment = true;
72-
}else{
71+
} else {
7372
throw new Error("Invalid DOCTYPE");
7473
}
7574
angleBracketsCount++;
7675
exp = "";
7776
} else if (xmlData[i] === '>') {
78-
if(comment){
79-
if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){
77+
if (comment) {
78+
if (xmlData[i - 1] === "-" && xmlData[i - 2] === "-") {
8079
comment = false;
81-
}else{
80+
} else {
8281
throw new Error(`Invalid XML comment in DOCTYPE`);
8382
}
84-
}else if(entity){
83+
} else if (entity) {
8584
parseEntityExp(exp, entities);
8685
entity = false;
8786
}
8887
angleBracketsCount--;
8988
if (angleBracketsCount === 0) {
90-
break;
89+
break;
9190
}
92-
}else if( xmlData[i] === '['){
91+
} else if (xmlData[i] === '[') {
9392
hasBody = true;
94-
}else{
93+
} else {
9594
exp += xmlData[i];
9695
}
9796
}
98-
if(angleBracketsCount !== 0){
97+
if (angleBracketsCount !== 0) {
9998
throw new Error(`Unclosed DOCTYPE`);
10099
}
101-
}else{
100+
} else {
102101
throw new Error(`Invalid Tag instead of DOCTYPE`);
103102
}
104-
return {entities, i};
103+
return { entities, i };
105104
}
106105

107106
const entityRegex = RegExp("^\\s([a-zA-z0-9]+)[ \\t](['\"])([^&]+)\\2");
108-
function parseEntityExp(exp, entities){
107+
function parseEntityExp(exp, entities) {
109108
const match = entityRegex.exec(exp);
110-
if(match){
111-
entities[ match[1] ] = {
112-
regx : RegExp( `&${match[1]};`,"g"),
109+
if (match) {
110+
entities[match[1]] = {
111+
regx: RegExp(`&${match[1]};`, "g"),
113112
val: match[3]
114113
};
115114
}

0 commit comments

Comments
 (0)