|
1 | 1 | //TODO: handle comments |
2 | | -function readDocType(xmlData, i){ |
3 | | - |
| 2 | +function readDocType(xmlData, i) { |
| 3 | + |
4 | 4 | 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; |
13 | 12 | let angleBracketsCount = 1; |
14 | 13 | let hasBody = false, entity = false, comment = false; |
15 | 14 | let exp = ""; |
16 | | - for(;i<xmlData.length;i++){ |
| 15 | + for (; i < xmlData.length; i++) { |
17 | 16 | 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 | + ) { |
27 | 26 | i += 7; |
28 | 27 | 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 | + ) { |
39 | 38 | //Not supported |
40 | 39 | 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 | + ) { |
51 | 50 | //Not supported |
52 | 51 | 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 | + ) { |
64 | 63 | //Not supported |
65 | 64 | 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 | + ) { |
71 | 70 | comment = true; |
72 | | - }else{ |
| 71 | + } else { |
73 | 72 | throw new Error("Invalid DOCTYPE"); |
74 | 73 | } |
75 | 74 | angleBracketsCount++; |
76 | 75 | exp = ""; |
77 | 76 | } 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] === "-") { |
80 | 79 | comment = false; |
81 | | - }else{ |
| 80 | + } else { |
82 | 81 | throw new Error(`Invalid XML comment in DOCTYPE`); |
83 | 82 | } |
84 | | - }else if(entity){ |
| 83 | + } else if (entity) { |
85 | 84 | parseEntityExp(exp, entities); |
86 | 85 | entity = false; |
87 | 86 | } |
88 | 87 | angleBracketsCount--; |
89 | 88 | if (angleBracketsCount === 0) { |
90 | | - break; |
| 89 | + break; |
91 | 90 | } |
92 | | - }else if( xmlData[i] === '['){ |
| 91 | + } else if (xmlData[i] === '[') { |
93 | 92 | hasBody = true; |
94 | | - }else{ |
| 93 | + } else { |
95 | 94 | exp += xmlData[i]; |
96 | 95 | } |
97 | 96 | } |
98 | | - if(angleBracketsCount !== 0){ |
| 97 | + if (angleBracketsCount !== 0) { |
99 | 98 | throw new Error(`Unclosed DOCTYPE`); |
100 | 99 | } |
101 | | - }else{ |
| 100 | + } else { |
102 | 101 | throw new Error(`Invalid Tag instead of DOCTYPE`); |
103 | 102 | } |
104 | | - return {entities, i}; |
| 103 | + return { entities, i }; |
105 | 104 | } |
106 | 105 |
|
107 | 106 | const entityRegex = RegExp("^\\s([a-zA-z0-9]+)[ \\t](['\"])([^&]+)\\2"); |
108 | | -function parseEntityExp(exp, entities){ |
| 107 | +function parseEntityExp(exp, entities) { |
109 | 108 | 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"), |
113 | 112 | val: match[3] |
114 | 113 | }; |
115 | 114 | } |
|
0 commit comments