efront 4.0.38 → 4.0.39
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/BigNumber.js +9 -1
- package/coms/basic/mark.js +47 -17
- package/coms/basic/mark_test.js +7 -1
- package/coms/basic/pinyin.js +466 -0
- package/coms/compile/Javascript.js +5 -0
- package/coms/docs/codetext.xht +1 -1
- package/coms/zimoli/table.md +4 -0
- package/docs//345/267/245/345/205/267//346/225/260/345/200/274/346/215/242/347/256/227.xht +46 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/BigNumber.js
CHANGED
|
@@ -82,7 +82,13 @@ class BigNumber {
|
|
|
82
82
|
if (system_scale <= 36) {
|
|
83
83
|
value = value.toLowerCase();
|
|
84
84
|
}
|
|
85
|
+
var sign = false;
|
|
85
86
|
for (var v of value) {
|
|
87
|
+
if (v === "-") {
|
|
88
|
+
sign = !sign;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (v === '+') continue;
|
|
86
92
|
if (v === '.') {
|
|
87
93
|
dotOccurs = true;
|
|
88
94
|
continue;
|
|
@@ -97,12 +103,13 @@ class BigNumber {
|
|
|
97
103
|
num = BigNumber.add(BigNumber.prd(num, scale), vmap[v]);
|
|
98
104
|
}
|
|
99
105
|
}
|
|
106
|
+
if (sign) num = '-' + num;
|
|
100
107
|
this.value = num;
|
|
101
108
|
}
|
|
102
109
|
static DECIMAL_DIGIT = 120;
|
|
103
110
|
toString(system_scale) {
|
|
104
111
|
system_scale |= 0;
|
|
105
|
-
if (!system_scale || system_scale === 10) return this.value;
|
|
112
|
+
if (!system_scale || system_scale === 10) return this.value || "0";
|
|
106
113
|
if (system_scale <= 1 || system_scale > 36) throw new Error("进制错误!");
|
|
107
114
|
var [s, n, m] = prepare(this.value);
|
|
108
115
|
var dist = [];
|
|
@@ -121,6 +128,7 @@ class BigNumber {
|
|
|
121
128
|
if (++c > BigNumber.DECIMAL_DIGIT || !m) break;
|
|
122
129
|
}
|
|
123
130
|
}
|
|
131
|
+
if (!dist.length) dist.push("0");
|
|
124
132
|
if (s) dist.unshift('-');
|
|
125
133
|
return dist.join('');
|
|
126
134
|
};
|
package/coms/basic/mark.js
CHANGED
|
@@ -1,32 +1,62 @@
|
|
|
1
|
-
var
|
|
1
|
+
var _pinyin = null;
|
|
2
|
+
Promise.resolve(init("pinyin")).then(py => _pinyin = py);
|
|
3
|
+
var isABC = a => /^[a-zA-Z]$/.test(a);
|
|
4
|
+
var couple = function (source, marker, pinyin) {
|
|
5
|
+
var isLike = function () {
|
|
6
|
+
var is = isABC(s), im = isABC(m);
|
|
7
|
+
if (is && im) return s.toLowerCase() === m.toLowerCase();
|
|
8
|
+
if (im) {
|
|
9
|
+
if (pinyin.py(s).indexOf(m.toLowerCase()) < 0) return false;
|
|
10
|
+
var py = pinyin.pinyin(s).split('|');
|
|
11
|
+
var i = 2;
|
|
12
|
+
var t = c2 + ct;
|
|
13
|
+
for (var p of py) {
|
|
14
|
+
while (i + t <= marker.length && p.indexOf(marker.slice(t, i + t).toLowerCase()) === 0) i++;
|
|
15
|
+
}
|
|
16
|
+
c2 += i - 2;
|
|
17
|
+
dt = setDt();
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
};
|
|
22
|
+
var setDt = function () {
|
|
23
|
+
var d1 = len1 - c1;
|
|
24
|
+
var d2 = len2 - c2;
|
|
25
|
+
return d1 > d2 ? d2 : d1;
|
|
26
|
+
};
|
|
2
27
|
var len1 = source.length;
|
|
3
28
|
var len2 = marker.length;
|
|
4
29
|
var match = "", begin1 = len1, begin2 = len2;
|
|
30
|
+
var end2 = begin2;
|
|
5
31
|
for (var cx = -len1, dx = len2; cx < dx; cx++) {
|
|
6
32
|
var c1 = cx >= 0 ? 0 : -cx;
|
|
7
33
|
var c2 = cx >= 0 ? cx : 0;
|
|
8
|
-
var
|
|
9
|
-
var d2 = len2 - c2;
|
|
34
|
+
var cc = c2;
|
|
10
35
|
var start = 0, end = 0;
|
|
11
|
-
for (var ct = 0, dt =
|
|
12
|
-
|
|
36
|
+
for (var ct = 0, dt = setDt(); ct < dt; ct++) {
|
|
37
|
+
var s = source[c1 + ct];
|
|
38
|
+
var m = marker[c2 + ct];
|
|
39
|
+
if (s === m || pinyin && isLike()) {
|
|
13
40
|
end = ct + 1;
|
|
14
41
|
if (end === dt && end - start > match.length) {
|
|
15
42
|
match = source.slice(c1 + start, c1 + end);
|
|
16
43
|
begin1 = c1 + start;
|
|
17
|
-
begin2 =
|
|
44
|
+
begin2 = cc + start;
|
|
45
|
+
end2 = c2 + end;
|
|
18
46
|
}
|
|
19
47
|
} else {
|
|
20
48
|
if (end - start > match.length) {
|
|
21
49
|
match = source.slice(c1 + start, c1 + end);
|
|
22
50
|
begin1 = c1 + start;
|
|
23
|
-
begin2 =
|
|
51
|
+
begin2 = cc + start;
|
|
52
|
+
end2 = c2 + end;
|
|
24
53
|
}
|
|
54
|
+
cc = c2;
|
|
25
55
|
start = ct + 1;
|
|
26
56
|
}
|
|
27
57
|
}
|
|
28
58
|
}
|
|
29
|
-
return [match, begin1, begin2];
|
|
59
|
+
return [match, begin1, begin2, end2];
|
|
30
60
|
};
|
|
31
61
|
var MARK_PRE1, MARK_PRE2, _PRE1, _PRE2 = _PRE1 = "<b>";
|
|
32
62
|
var MARK_AFT1, MARK_AFT2, _AFT1, _AFT2 = _AFT1 = "</b>";
|
|
@@ -52,31 +82,31 @@ var power = function (source, search) {
|
|
|
52
82
|
if (!search || !source) {
|
|
53
83
|
return [0, source];
|
|
54
84
|
}
|
|
55
|
-
var matchers = couple(source, search);
|
|
85
|
+
var matchers = couple(source, search, _pinyin);
|
|
56
86
|
var match_text = matchers[0];
|
|
57
|
-
var
|
|
87
|
+
var match_start = matchers[1];
|
|
58
88
|
if (search.length === 1) {
|
|
59
89
|
var p = 0;
|
|
60
|
-
var res = source.replace(new RegExp(search.replace(/[\\\*\?\+\(\)\[]/g, "\\$&"), "
|
|
90
|
+
var res = source.replace(new RegExp(search.replace(/[\\\*\?\+\(\)\[]/g, "\\$&"), "ig"), (m, i) => {
|
|
61
91
|
if (!p) p = .1 / (1 + i);
|
|
62
|
-
return MARK_PRE1 +
|
|
92
|
+
return MARK_PRE1 + m + MARK_AFT1;
|
|
63
93
|
});
|
|
64
94
|
return [p, res];
|
|
65
95
|
}
|
|
66
|
-
if (
|
|
67
|
-
var match_text_pre = source.slice(0,
|
|
68
|
-
var match_text_aft = source.slice(
|
|
96
|
+
if (matchers[3] - matchers[2] > 1) {
|
|
97
|
+
var match_text_pre = source.slice(0, match_start);
|
|
98
|
+
var match_text_aft = source.slice(match_start + match_text.length);
|
|
69
99
|
var pp = 0, ap = 0;
|
|
70
100
|
var p = match_text.length;
|
|
71
101
|
p = match_text.length;
|
|
72
|
-
if (
|
|
102
|
+
if (match_start) p += .1 / match_start - .2;
|
|
73
103
|
if (match_text_pre.length > 1) {
|
|
74
104
|
[pp, match_text_pre] = power(match_text_pre, search);
|
|
75
105
|
}
|
|
76
106
|
if (match_text_aft.length > 1) {
|
|
77
107
|
[ap, match_text_aft] = power(match_text_aft, search);
|
|
78
108
|
}
|
|
79
|
-
if (
|
|
109
|
+
if (matchers[3] - matchers[2] !== search.length) {
|
|
80
110
|
p += (pp + ap) / source.length / search.length * .01 - .2;
|
|
81
111
|
}
|
|
82
112
|
return [p, match_text_pre.concat(MARK_PRE1, match_text, MARK_AFT1, match_text_aft)];
|
package/coms/basic/mark_test.js
CHANGED