efront 4.0.40 → 4.0.41
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/coms/basic/decodeGBK.js +14 -1
- package/coms/basic/encodeUTF8.js +1 -0
- package/coms/compile/Javascript.js +31 -15
- package/coms/compile/Javascript_test.js +3 -0
- package/coms/compile/common.js +0 -1
- package/coms/compile/patchlist.js +5 -0
- package/coms/compile/patchname.js +9 -0
- package/docs//345/267/245/345/205/267//345/255/227/347/254/246/351/233/206/346/243/200/346/237/245.xht +72 -14
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/decodeGBK.js
CHANGED
|
@@ -55,11 +55,24 @@ var ex = [
|
|
|
55
55
|
];
|
|
56
56
|
var map = [];
|
|
57
57
|
var inc = 0, codeindex = 0;
|
|
58
|
+
var pam = Object.create(null);
|
|
58
59
|
while (ex.length) {
|
|
59
60
|
inc += ex.shift();
|
|
60
61
|
var tmp = inc + ex.shift();
|
|
61
|
-
while (inc <= tmp) map[inc
|
|
62
|
+
while (inc <= tmp) pam[map[inc] = txt[codeindex++]] = inc++;
|
|
62
63
|
}
|
|
64
|
+
decodeGBK.codeFor = function (string) {
|
|
65
|
+
var dist = [];
|
|
66
|
+
for (var cx = 0, dx = string.length; cx < dx; cx++) {
|
|
67
|
+
var c = pam[string.charAt(cx)] || string.charCodeAt(cx);
|
|
68
|
+
if (c > 0x7f) {
|
|
69
|
+
dist.push(c >> 8, c & 0xff);
|
|
70
|
+
} else {
|
|
71
|
+
dist.push(c);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return dist;
|
|
75
|
+
};
|
|
63
76
|
|
|
64
77
|
function decodeGBK(buff) {
|
|
65
78
|
var temp = 0;
|
package/coms/basic/encodeUTF8.js
CHANGED
|
@@ -504,7 +504,7 @@ var removeImport = function (c, i, code) {
|
|
|
504
504
|
var { used, envs, vars } = code;
|
|
505
505
|
if (next && next.type !== QUOTED) {
|
|
506
506
|
var [dec, map, o] = getDeclared(c.next);
|
|
507
|
-
if (
|
|
507
|
+
if (!o) throw new Error("代码结构异常!");
|
|
508
508
|
if (o.type !== STRAP || o.text !== 'from') throw new Error("缺少from语句");
|
|
509
509
|
var oi = code.indexOf(o, i);
|
|
510
510
|
}
|
|
@@ -534,20 +534,31 @@ var removeImport = function (c, i, code) {
|
|
|
534
534
|
relink(q[1]);
|
|
535
535
|
setqueue(q[1]);
|
|
536
536
|
if (!dec) return;
|
|
537
|
-
var name =
|
|
537
|
+
var name = null;
|
|
538
538
|
var na = dec.attributes[0];
|
|
539
539
|
o.type = STAMP;
|
|
540
540
|
o.text = '=';
|
|
541
541
|
c.text = 'var';
|
|
542
|
-
|
|
543
|
-
if (
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
542
|
+
dec.forEach(function (name1, i) {
|
|
543
|
+
if (typeof name1 === 'string' && name1 !== '*') {
|
|
544
|
+
if (na[i] === '*') {
|
|
545
|
+
if (name) {
|
|
546
|
+
used[name1].forEach(u => {
|
|
547
|
+
u.text = u.text.replace(/^[^\.\[]+/, name);
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
else name = name1;
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
if (!name) name = name1;
|
|
554
|
+
used[name1].forEach(u => {
|
|
555
|
+
compile$patchname(name, u, ".default");
|
|
556
|
+
});
|
|
557
|
+
}
|
|
547
558
|
}
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
|
|
559
|
+
})
|
|
560
|
+
if (!name) {
|
|
561
|
+
name = strings.decode(q[1].last.text)
|
|
551
562
|
.replace(/\.[^\.\/\\]+$/, '')
|
|
552
563
|
.split(/[\/\\\:\{\}\[\]\.\+\-\*\/\!\~\|\:;,'"`\(\)\>\<\?\^%&\s]+/)
|
|
553
564
|
.filter(a => !!a).pop();
|
|
@@ -557,16 +568,19 @@ var removeImport = function (c, i, code) {
|
|
|
557
568
|
name = name.replace(/\d+$/, '') + ++id;
|
|
558
569
|
}
|
|
559
570
|
used[name] = [];
|
|
560
|
-
|
|
561
|
-
|
|
571
|
+
}
|
|
572
|
+
dec.forEach(function (d) {
|
|
573
|
+
if (d instanceof Array) d.forEach((dn, i) => {
|
|
574
|
+
var da = d.attributes[i][0];
|
|
562
575
|
if (used[dn]) used[dn].forEach(u => {
|
|
563
|
-
|
|
576
|
+
if (used[name].indexOf(u) >= 0) return;
|
|
577
|
+
patchname(name, u, da);
|
|
564
578
|
used[name].push(u);
|
|
565
579
|
});
|
|
566
580
|
delete used[dn];
|
|
567
581
|
delete vars[dn];
|
|
568
582
|
});
|
|
569
|
-
}
|
|
583
|
+
});
|
|
570
584
|
var u = { type: EXPRESS, text: name };
|
|
571
585
|
code.splice(i + 1, oi - i - 1, u);
|
|
572
586
|
used[name].push(u);
|
|
@@ -628,7 +642,9 @@ var removeExport = function (c, i, code) {
|
|
|
628
642
|
var nn = n.next;
|
|
629
643
|
var d = nn.text;
|
|
630
644
|
if (used[d]) used[d].forEach(a => {
|
|
631
|
-
if (!a.kind)
|
|
645
|
+
if (!a.kind) {
|
|
646
|
+
patchname('exports.', a);
|
|
647
|
+
}
|
|
632
648
|
});
|
|
633
649
|
delete used[d];
|
|
634
650
|
delete envs[d];
|
|
@@ -6,6 +6,9 @@ var testFix = function (a, e) {
|
|
|
6
6
|
}
|
|
7
7
|
testFix(`import a from "a";console.log(a)`, 'var a = require("a"); console.log(a.default)');
|
|
8
8
|
testFix(`import {a} from "a";console.log(a)`, 'var a1 = require("a"); console.log(a1.a)');
|
|
9
|
+
testFix(`import a,{a as b} from "a";console.log(a,b)`, 'var a = require("a"); console.log(a.default, a.a)');
|
|
10
|
+
testFix(`import * as a,{a as b},c from "a";console.log(a,b,c)`, 'var a = require("a"); console.log(a, a.a, a.default)');
|
|
11
|
+
testFix(`import * as a,{a as b},c from "a";console.log(a,...b,...c)`, 'var a = require("a"); console.log(a, ...a.a, ...a.default)');
|
|
9
12
|
testFix(`console.log(import("a"))`, 'console.log(require("a"))');
|
|
10
13
|
testFix(`import("a")`, 'require("a")');
|
|
11
14
|
testFix(`import "windows.inc"`, 'require("windows.inc")');
|
package/coms/compile/common.js
CHANGED
|
@@ -1265,7 +1265,6 @@ var canbeTemp = function (body, strip = false) {
|
|
|
1265
1265
|
return o.type === EXPRESS && (strip || !/[\.\[]/.test(o.text)) || o.type === VALUE || o.type === QUOTED && !o.length;
|
|
1266
1266
|
};
|
|
1267
1267
|
|
|
1268
|
-
|
|
1269
1268
|
module.exports = {
|
|
1270
1269
|
/* 1 */COMMENT,
|
|
1271
1270
|
/* 2 */SPACE,
|
|
@@ -10,9 +10,16 @@
|
|
|
10
10
|
display: inline-block;
|
|
11
11
|
position: relative;
|
|
12
12
|
vertical-align: top;
|
|
13
|
+
padding-bottom: 44px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
field:nth-child(n+2) [textarea] {
|
|
17
|
+
border: 1px solid #999;
|
|
18
|
+
outline: none;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
label {
|
|
22
|
+
margin-top: -44px;
|
|
16
23
|
padding: 0 20px;
|
|
17
24
|
}
|
|
18
25
|
|
|
@@ -25,7 +32,7 @@
|
|
|
25
32
|
|
|
26
33
|
[textarea] {
|
|
27
34
|
width: 100%;
|
|
28
|
-
height:
|
|
35
|
+
height: 100%;
|
|
29
36
|
display: block;
|
|
30
37
|
border: 1.2px solid;
|
|
31
38
|
overflow-x: hidden;
|
|
@@ -50,25 +57,46 @@
|
|
|
50
57
|
|
|
51
58
|
button {
|
|
52
59
|
padding: 0 20px;
|
|
60
|
+
margin-left: 20px;
|
|
53
61
|
}
|
|
54
62
|
</style>
|
|
55
63
|
<h2>${i18n`字符集检查工具`}</h2>
|
|
56
|
-
<div style="text-align: right;padding: 0 20px;">
|
|
57
|
-
<button @click="check">${i18n
|
|
64
|
+
<div style="text-align: right;padding: 0 20px;margin-top: -30px;">
|
|
65
|
+
<button @click="encode=utf8;check()">${i18n`检查utf8`}</button>
|
|
66
|
+
<button @click="encode=gbk;check()">${i18n`检查gbk`}</button>
|
|
58
67
|
</div>
|
|
59
68
|
<div>
|
|
60
69
|
<field>
|
|
61
|
-
<label>${i18n
|
|
70
|
+
<label>${i18n`要检查的字符集区间(双字节以内)`}</label>
|
|
62
71
|
<padding>
|
|
63
72
|
<div textarea contenteditable="true" -model="ranges"></div>
|
|
64
73
|
</padding>
|
|
65
74
|
</field>
|
|
66
75
|
<field>
|
|
67
|
-
<label>${i18n`当前浏览器支持的字符集区间`}
|
|
76
|
+
<label>${i18n`当前浏览器支持的字符集区间`}</label>
|
|
68
77
|
<padding>
|
|
69
78
|
<div textarea contenteditable="true" -model="result"></div>
|
|
70
79
|
</padding>
|
|
71
80
|
</field>
|
|
81
|
+
<field style="width: 100%;">
|
|
82
|
+
<label><span -bind="encode.name"></span>${i18n`编码`}</label>
|
|
83
|
+
<padding>
|
|
84
|
+
<div textarea contenteditable="true" -model="result8"></div>
|
|
85
|
+
</padding>
|
|
86
|
+
</field>
|
|
87
|
+
<field>
|
|
88
|
+
<label>${i18n`识别为unicode后的字符`}</label>
|
|
89
|
+
<padding>
|
|
90
|
+
<div textarea contenteditable="true" -model="resultu"></div>
|
|
91
|
+
</padding>
|
|
92
|
+
</field>
|
|
93
|
+
<field>
|
|
94
|
+
<label>${i18n`识别为gbk后的字符`}</label>
|
|
95
|
+
<padding>
|
|
96
|
+
<div textarea contenteditable="true" -model="resultk"></div>
|
|
97
|
+
</padding>
|
|
98
|
+
</field>
|
|
99
|
+
|
|
72
100
|
</div>
|
|
73
101
|
<script>
|
|
74
102
|
var checkOne = function (one) {
|
|
@@ -95,9 +123,9 @@
|
|
|
95
123
|
var str = hex.replace(/^[xu]/, '').replace(/^\{([\s\S]+)\}$/, '$1');
|
|
96
124
|
return parseInt(str, 16);
|
|
97
125
|
}
|
|
126
|
+
var reg = /\\(x[0-9a-f]{2}|u[0-9a-f]{4}|u\{[0-9a-f]+\})/ig;
|
|
98
127
|
var check = async function () {
|
|
99
128
|
var elem = alert(i18n`正在检查`, false);
|
|
100
|
-
var reg = /\\(x[0-9a-f]{2}|u[0-9a-f]{4}|u\{[0-9a-f]+\})/ig;
|
|
101
129
|
var dist0 = [];
|
|
102
130
|
ranges.replace(/<\/?\w+\/?>/g, '').replace(new RegExp(`${reg.source}(?:-${reg.source})?|${/[\s\S]/.source}`, 'ig'), function (_, a, b) {
|
|
103
131
|
dist0.push([_, a, b]);
|
|
@@ -142,16 +170,46 @@
|
|
|
142
170
|
}
|
|
143
171
|
dist.push(temp.join(''))
|
|
144
172
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
173
|
+
var w = a => `<a>${a}</a>`;
|
|
174
|
+
var n = a => a;
|
|
175
|
+
var marks = dist.map((a, i) => a.toUpperCase() === dist1[i][0].toUpperCase() ? n : w);
|
|
176
|
+
result = dist.map((a, i) => {
|
|
177
|
+
if (marks[i] === n) return a;
|
|
178
|
+
dist1[i][0] = `<w>${dist1[i][0]}</w>`;
|
|
179
|
+
return `<a>${a}</a>`;
|
|
180
|
+
}).join('')
|
|
181
|
+
elem.setText(i18n`正在生成报告`);
|
|
151
182
|
ranges = dist1.map(a => a[0]).join("");
|
|
152
|
-
|
|
183
|
+
var hex = a => a ? a < 0xf ? "0" + a.toString(16) : a.toString(16) : '';
|
|
184
|
+
var utf8 = [];
|
|
185
|
+
var gbk = [];
|
|
186
|
+
var unc = [];
|
|
187
|
+
dist.forEach((a, i) => {
|
|
188
|
+
var [start, end = start] = a.split('-');
|
|
189
|
+
var m = marks[i];
|
|
190
|
+
for (var cx = fromHex(start.slice(1)), dx = fromHex(end.slice(1)); cx <= dx; cx++) {
|
|
191
|
+
var u = encode.do(String.fromCharCode(cx));
|
|
192
|
+
utf8.push(m(u.map(hex).join('')));
|
|
193
|
+
gbk.push(m(decodeGBK(u)));
|
|
194
|
+
try {
|
|
195
|
+
unc.push(m(decodeUTF8(u)));
|
|
196
|
+
} catch (e) { }
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
result8 = utf8.join(" ").toUpperCase();
|
|
200
|
+
resultu = unc.join(' ');
|
|
201
|
+
resultk = gbk.join(' ');
|
|
202
|
+
elem.setText(i18n`检查完成`, 600);
|
|
153
203
|
}
|
|
154
|
-
var
|
|
204
|
+
var utf8 = { name: 'utf8', do: encodeUTF8 };
|
|
205
|
+
var gbk = { name: 'gbk', do: decodeGBK.codeFor };
|
|
206
|
+
var encode = {};
|
|
207
|
+
var target = 'utf8';
|
|
208
|
+
var results = '';
|
|
209
|
+
var result8 = '';
|
|
210
|
+
var resultk = '';
|
|
211
|
+
var resultu = '';
|
|
212
|
+
var ranges = "我要这铁棒有何用" + /\xAA\xB5\xBA\xC0-\xD5\xD8-\xF2\xF8-\u02af\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA/.source
|
|
155
213
|
var result = '';
|
|
156
214
|
|
|
157
215
|
</script>
|