efront 4.1.8 → 4.1.10
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/#loader.js +4 -2
- package/coms/basic/mark.js +17 -10
- package/coms/basic/parseKV.js +3 -3
- package/coms/compile/common.js +8 -3
- package/coms/compile/common_test.js +12 -0
- package/coms/compile/translate.js +16 -5
- package/coms/zimoli/render.js +7 -2
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/#loader.js
CHANGED
|
@@ -153,8 +153,10 @@ var readFile = function (names, then) {
|
|
|
153
153
|
return;
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
-
loadingTree[key]
|
|
157
|
-
|
|
156
|
+
if (loadingTree[key]) {
|
|
157
|
+
loadingTree[key].error = e;
|
|
158
|
+
loadingTree[key].forEach(a => a(e));
|
|
159
|
+
}
|
|
158
160
|
};
|
|
159
161
|
var tryload = function () {
|
|
160
162
|
request(url, ok, oh, version);
|
package/coms/basic/mark.js
CHANGED
|
@@ -26,7 +26,8 @@ var couple = function (source, marker, pinyin) {
|
|
|
26
26
|
};
|
|
27
27
|
var len1 = source.length;
|
|
28
28
|
var len2 = marker.length;
|
|
29
|
-
var
|
|
29
|
+
var begin1 = len1, begin2 = len2;
|
|
30
|
+
var end1 = begin1;
|
|
30
31
|
var end2 = begin2;
|
|
31
32
|
for (var cx = -len1, dx = len2; cx < dx; cx++) {
|
|
32
33
|
var c1 = cx >= 0 ? 0 : -cx;
|
|
@@ -38,17 +39,17 @@ var couple = function (source, marker, pinyin) {
|
|
|
38
39
|
var m = marker[c2 + ct];
|
|
39
40
|
if (s === m || pinyin && isLike()) {
|
|
40
41
|
end = ct + 1;
|
|
41
|
-
if (end === dt && end - start >
|
|
42
|
-
match = source.slice(c1 + start, c1 + end);
|
|
42
|
+
if (end === dt && c2 + end - cc - start > end2 - begin2) {
|
|
43
43
|
begin1 = c1 + start;
|
|
44
44
|
begin2 = cc + start;
|
|
45
45
|
end2 = c2 + end;
|
|
46
|
+
end1 = c1 + end;
|
|
46
47
|
}
|
|
47
48
|
} else {
|
|
48
|
-
if (end - start >
|
|
49
|
-
match = source.slice(c1 + start, c1 + end);
|
|
49
|
+
if (c2 + end - cc - start > end2 - begin2) {
|
|
50
50
|
begin1 = c1 + start;
|
|
51
51
|
begin2 = cc + start;
|
|
52
|
+
end1 = c1 + end;
|
|
52
53
|
end2 = c2 + end;
|
|
53
54
|
}
|
|
54
55
|
cc = c2;
|
|
@@ -56,7 +57,7 @@ var couple = function (source, marker, pinyin) {
|
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
return [
|
|
60
|
+
return [source.slice(begin1, end1), begin1, begin2, end2];
|
|
60
61
|
};
|
|
61
62
|
var MARK_PRE1, MARK_PRE2, _PRE1, _PRE2 = _PRE1 = "<b>";
|
|
62
63
|
var MARK_AFT1, MARK_AFT2, _AFT1, _AFT2 = _AFT1 = "</b>";
|
|
@@ -85,6 +86,7 @@ var power = function (source, search) {
|
|
|
85
86
|
var matchers = couple(source, search, _pinyin);
|
|
86
87
|
var match_text = matchers[0];
|
|
87
88
|
var match_start = matchers[1];
|
|
89
|
+
var match_length = matchers[3] - matchers[2];
|
|
88
90
|
if (search.length === 1) {
|
|
89
91
|
var p = 0;
|
|
90
92
|
var res = source.replace(new RegExp(search.replace(/[\\\*\?\+\(\)\[]/g, "\\$&"), "ig"), (m, i) => {
|
|
@@ -93,12 +95,11 @@ var power = function (source, search) {
|
|
|
93
95
|
});
|
|
94
96
|
return [p, res];
|
|
95
97
|
}
|
|
96
|
-
if (
|
|
98
|
+
if (match_length > 1) {
|
|
97
99
|
var match_text_pre = source.slice(0, match_start);
|
|
98
100
|
var match_text_aft = source.slice(match_start + match_text.length);
|
|
99
101
|
var pp = 0, ap = 0;
|
|
100
|
-
var p = match_text.length;
|
|
101
|
-
p = match_text.length;
|
|
102
|
+
var p = match_length !== match_text.length ? match_length - .1 : match_length;
|
|
102
103
|
if (match_start) p += .1 / match_start - .2;
|
|
103
104
|
if (match_text_pre.length > 1) {
|
|
104
105
|
[pp, match_text_pre] = power(match_text_pre, search);
|
|
@@ -106,9 +107,15 @@ var power = function (source, search) {
|
|
|
106
107
|
if (match_text_aft.length > 1) {
|
|
107
108
|
[ap, match_text_aft] = power(match_text_aft, search);
|
|
108
109
|
}
|
|
109
|
-
if (
|
|
110
|
+
if (match_length !== search.length) {
|
|
110
111
|
p += (pp + ap) / source.length / search.length * .01 - .2;
|
|
111
112
|
}
|
|
113
|
+
else if (pp >= p) {
|
|
114
|
+
p += pp / source.length / search.length * .01 - .2;
|
|
115
|
+
}
|
|
116
|
+
else if (ap >= p) {
|
|
117
|
+
p += ap / source.length / search.length * .01 - .2;
|
|
118
|
+
}
|
|
112
119
|
return [p, match_text_pre.concat(MARK_PRE1, match_text, MARK_AFT1, match_text_aft)];
|
|
113
120
|
}
|
|
114
121
|
return [0, source];
|
package/coms/basic/parseKV.js
CHANGED
|
@@ -4,11 +4,11 @@ function parseKV(string) {
|
|
|
4
4
|
var spliter, equals, decode;
|
|
5
5
|
for (var cx = 1, dx = arguments.length; cx < dx; cx++) {
|
|
6
6
|
var a = arguments[cx];
|
|
7
|
-
if (typeof a === 'string') {
|
|
7
|
+
if (typeof a === 'string' || a instanceof RegExp) {
|
|
8
8
|
if (!spliter) spliter = a;
|
|
9
9
|
else if (!equals) equals = a;
|
|
10
10
|
}
|
|
11
|
-
else {
|
|
11
|
+
else if (typeof decode === 'function') {
|
|
12
12
|
decode = a;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -21,7 +21,7 @@ function parseKV(string) {
|
|
|
21
21
|
for (var cx = 0, dx = kvs.length; cx < dx; cx++) {
|
|
22
22
|
var kv = kvs[cx];
|
|
23
23
|
if (!kv) continue;
|
|
24
|
-
var index = kv.indexOf(equals);
|
|
24
|
+
var index = equals instanceof RegExp ? equals.exec(kv).index : kv.indexOf(equals);
|
|
25
25
|
if (index < 0) index = kv.length;
|
|
26
26
|
var k = kv.slice(0, index);
|
|
27
27
|
var v = kv.slice(index + 1);
|
package/coms/compile/common.js
CHANGED
|
@@ -30,10 +30,15 @@ var skipAssignment = function (o, cx) {
|
|
|
30
30
|
while (o && o.type & (SPACE | COMMENT)) o = body[++ox];
|
|
31
31
|
cx = ox + 1;
|
|
32
32
|
}
|
|
33
|
+
else if (o.type & (SPACE | COMMENT)) o = o.next;
|
|
33
34
|
var needpunc = false;
|
|
34
35
|
var qcount = 0;
|
|
35
36
|
var ifdeep = 0;
|
|
37
|
+
var labeled = o && o.type === LABEL;
|
|
38
|
+
while (o && o.type === LABEL) next();
|
|
36
39
|
loop: while (o) switch (o.type) {
|
|
40
|
+
case LABEL:
|
|
41
|
+
if (!ifdeep) break loop;
|
|
37
42
|
case STAMP:
|
|
38
43
|
switch (o.text) {
|
|
39
44
|
case ";":
|
|
@@ -43,7 +48,7 @@ var skipAssignment = function (o, cx) {
|
|
|
43
48
|
next();
|
|
44
49
|
break;
|
|
45
50
|
case ",":
|
|
46
|
-
if (!ifdeep) break loop;
|
|
51
|
+
if (!ifdeep && !labeled) break loop;
|
|
47
52
|
needpunc = false;
|
|
48
53
|
next();
|
|
49
54
|
break;
|
|
@@ -259,7 +264,7 @@ function snapSentenceHead(o) {
|
|
|
259
264
|
break;
|
|
260
265
|
}
|
|
261
266
|
if (p.type === STAMP) {
|
|
262
|
-
if (
|
|
267
|
+
if (/=>|;/.test(p.text)) {
|
|
263
268
|
break;
|
|
264
269
|
}
|
|
265
270
|
if (/^[\?\:]$/.test(p.text)) {
|
|
@@ -1293,7 +1298,7 @@ var pickSentence = function (o) {
|
|
|
1293
1298
|
if (o && o.type === STAMP && o.prev) o = o.prev;
|
|
1294
1299
|
if (o.type === STRAP && /^(in|instanceof|as|of)$/.test(o.text) && o.prev) o = o.prev;
|
|
1295
1300
|
var h = snapSentenceHead(o);
|
|
1296
|
-
var e = skipAssignment(
|
|
1301
|
+
var e = skipAssignment(h);
|
|
1297
1302
|
var q = o.queue;
|
|
1298
1303
|
if (q) {
|
|
1299
1304
|
var qh = q.indexOf(h);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function testPickSentence(text, index, except) {
|
|
2
|
+
var code = scanner2(text);
|
|
3
|
+
assert(common.createString(common.pickSentence(code[index])), except);
|
|
4
|
+
}
|
|
5
|
+
testPickSentence(`function 九尾妖狐(){}`, 0, "function 九尾妖狐() {}")
|
|
6
|
+
testPickSentence(`function 九尾妖狐(){}`, 2, "function 九尾妖狐() {}")
|
|
7
|
+
testPickSentence(`a: function 九尾妖狐(){}`, 1, "a: function 九尾妖狐() {}")
|
|
8
|
+
testPickSentence(`a: function 九尾妖狐(){}`, 0, "a: function 九尾妖狐() {}")
|
|
9
|
+
testPickSentence(`a: function 九尾妖狐(){}`, 2, "a: function 九尾妖狐() {}")
|
|
10
|
+
testPickSentence(`a: 王天霸, 步惊云 b:叶流云, 四顾剑`, 2, "a: 王天霸, 步惊云")
|
|
11
|
+
testPickSentence(`a: 王天霸, 步惊云 b:叶流云, 四顾剑`, 4, "b: 叶流云, 四顾剑")
|
|
12
|
+
testPickSentence(`a: 王天霸, 步惊云; b:叶流云, 四顾剑`, 4, "a: 王天霸, 步惊云")
|
|
@@ -61,6 +61,11 @@ function getI18nPrefixedText(code, dist = []) {
|
|
|
61
61
|
c.fields = refilm([c.translate]);
|
|
62
62
|
dist.push(c);
|
|
63
63
|
}, 字段名);
|
|
64
|
+
if (envs.refilm_decode) get(used.refilm_decode.filter(o => o.text === 'refilm_decode').map(o => o.next), c => {
|
|
65
|
+
c.fields = refilm([c.translate]);
|
|
66
|
+
c.warn = false;
|
|
67
|
+
dist.push(c);
|
|
68
|
+
}, 字段名);
|
|
64
69
|
return dist;
|
|
65
70
|
}
|
|
66
71
|
var ctn = function (tt, t) {
|
|
@@ -86,10 +91,10 @@ function translate([imap, supports], code) {
|
|
|
86
91
|
if (a.start > b.start && a.end < b.end) return -1;
|
|
87
92
|
return 0;
|
|
88
93
|
});
|
|
89
|
-
var getm = function (tt) {
|
|
94
|
+
var getm = function (tt, warn) {
|
|
90
95
|
tt = tt.trim();
|
|
91
96
|
if (!imap[tt]) {
|
|
92
|
-
console.warn(`<yellow>${i18n`国际化翻译缺失:`}</yellow>${tt}`);
|
|
97
|
+
if (warn !== false) console.warn(`<yellow>${i18n`国际化翻译缺失:`}</yellow>${tt}`);
|
|
93
98
|
imap[tt] = supports.map(_ => tt);
|
|
94
99
|
}
|
|
95
100
|
return imap[tt].map(m => strings.encode(m || tt, '`'));
|
|
@@ -110,8 +115,14 @@ function translate([imap, supports], code) {
|
|
|
110
115
|
else if (t.transtype === 字段名) {
|
|
111
116
|
var i = t.queue.indexOf(t.prev);
|
|
112
117
|
var e = t.queue.indexOf(t, i);
|
|
113
|
-
|
|
114
|
-
|
|
118
|
+
if (t.warn === false) {
|
|
119
|
+
var ui = used.refilm_decode.indexOf(t.prev);
|
|
120
|
+
if (ui >= 0) used.refilm_decode.splice(ui, 1);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
var ui = used.refilm.indexOf(t.prev);
|
|
124
|
+
if (ui >= 0) used.refilm.splice(ui, 1);
|
|
125
|
+
}
|
|
115
126
|
if (!used.i18n) {
|
|
116
127
|
used.i18n = [];
|
|
117
128
|
code.envs.i18n = true;
|
|
@@ -127,7 +138,7 @@ function translate([imap, supports], code) {
|
|
|
127
138
|
if (a in t) v = t[a];
|
|
128
139
|
else v = scanner2(JSON.stringify(v));
|
|
129
140
|
}
|
|
130
|
-
else if (k === 'name') v = ctn(`i18n(${getm(v)})`, t);
|
|
141
|
+
else if (k === 'name') v = ctn(`i18n(${getm(v, t.warn)})`, t);
|
|
131
142
|
else v = scanner2(JSON.stringify(v));
|
|
132
143
|
o.push({ type: PROPERTY, isprop: true, text: JSON.stringify(k) }, { type: STAMP, text: ':' }, ...v, { type: STAMP, text: ',' });
|
|
133
144
|
})
|
package/coms/zimoli/render.js
CHANGED
|
@@ -472,8 +472,13 @@ var src2 = function (search) {
|
|
|
472
472
|
} else if (isEmpty(origin)) {
|
|
473
473
|
temp = "";
|
|
474
474
|
}
|
|
475
|
-
|
|
476
|
-
|
|
475
|
+
if (savedValue !== undefined && savedValue !== null) {
|
|
476
|
+
var changes = getChanges(temp, savedValue);
|
|
477
|
+
if (!changes || isEmpty(origin) && isEmpty(this.src) && isEmpty(savedValue)) return;
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
if (origin === undefined || origin === null) return;
|
|
481
|
+
}
|
|
477
482
|
savedValue = temp;
|
|
478
483
|
this.src = origin;
|
|
479
484
|
cast(this, origin);
|