efront 4.34.0 → 4.35.0
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/Matrix.js +3 -1
- package/coms/basic/color.js +258 -78
- package/coms/basic/color_test.js +23 -2
- package/coms/basic/crc.js +6 -2
- package/coms/basic/data.js +3 -3
- package/coms/basic/decodeASN1.js +2 -2
- package/coms/basic/math.js +321 -0
- package/coms/basic/math.md +265 -0
- package/coms/basic/math_test.xht +56 -0
- package/coms/basic/pinyin.js +40 -0
- package/coms/basic/pinyin_test.js +40 -0
- package/coms/basic/renderExpress.js +2 -2
- package/coms/basic/renderExpress_test.js +1 -0
- package/coms/basic/wait.js +1 -1
- package/coms/basic_/JSON.js +24 -4
- package/coms/compile/Html.js +1 -0
- package/coms/compile/Javascript.js +14 -0
- package/coms/compile/Javascript_test.js +4 -3
- package/coms/compile/Program.js +82 -45
- package/coms/compile/autoenum.js +498 -138
- package/coms/compile/autoenum_test.js +70 -4
- package/coms/compile/autoeval.js +616 -18
- package/coms/compile/autoeval_test.js +55 -2
- package/coms/compile/common.js +27 -15
- package/coms/compile/common_test.js +12 -2
- package/coms/compile/downLevel.js +60 -7
- package/coms/compile/downLevel_test.js +22 -8
- package/coms/compile/powermap.js +2 -2
- package/coms/compile/rescan.js +2 -2
- package/coms/compile/scanner2.js +25 -1
- package/coms/compile/translate.js +18 -7
- package/coms/compile/unstruct.js +44 -2
- package/coms/compile/unstruct_test.js +14 -9
- package/coms/compile//347/256/227/345/274/217.js +276 -0
- package/coms/compile//347/256/227/345/274/217_test.js +26 -0
- package/coms/compile//347/264/240/351/246/250.js +60 -23
- package/coms/compile//347/264/240/351/246/250_test.js +8 -3
- package/coms/docs/markdown.js +4 -0
- package/coms/frame/ChatRTC.js +60 -18
- package/coms/frame/chat-rtc.xht +20 -18
- package/coms/frame/chat.js +38 -21
- package/coms/frame/chat.less +8 -3
- package/coms/reptile/colors.js +1 -0
- package/coms/zimoli/prompt.js +12 -2
- package/coms/zimoli/render.js +0 -1
- package/coms//350/214/250/350/217/260//344/270/212/350/211/262.xht +4 -0
- package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +14 -4
- package/package.json +24 -24
- package/public/efront.js +1 -2
- package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
- package/tools/build-efront +22 -0
- package/tools/build-efront.bat +22 -0
- package/tools/build-efront.js +64 -0
- package/tools/build-setup.bat +9 -0
- package/tools/buildEmoji.js +17 -0
- package/tools/electron.js +37 -0
- package/tools/empty.js +11 -0
- package/tools/fixBuffer.js +41 -0
- package/tools/install-all.js +46 -0
- package/tools/makeUseStrict.js +35 -0
- package/tools/readHelpersFromTypescript.js +82 -0
- package/tools/reload.js +20 -0
- package/tools/run-efront.bat +14 -0
- package/tools/toCRLF.js +30 -0
- package/tools/unwrap-typescript.js +28 -0
- package/tools/update-libs.bat +86 -0
- package/tools/write-utf8.js +39 -0
package/coms/basic/Matrix.js
CHANGED
package/coms/basic/color.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* Created by jams on 2016/5/13.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
var { min, max, sin, cos, round, sqrt, random, PI, abs = a => a < 0 ? -a : a } = Math;
|
|
6
|
-
var [
|
|
7
|
-
|
|
5
|
+
var { min, max, sin, cos, tan, atan, round, sqrt, acos, atan2, asin, random, PI, abs = a => a < 0 ? -a : a } = Math;
|
|
6
|
+
var [r_v, g_v, b_v] = [.299, .587, .114];
|
|
7
|
+
var r_u = r_v / sqrt(r_v * r_v + g_v * g_v + b_v * b_v);
|
|
8
|
+
var g_u = g_v / sqrt(r_v * r_v + g_v * g_v + b_v * b_v);
|
|
9
|
+
var b_u = b_v / sqrt(r_v * r_v + g_v * g_v + b_v * b_v);
|
|
8
10
|
var rgb4v = function (r, g, b, v) {
|
|
9
11
|
var d = v - rgb2v(r, g, b);
|
|
10
12
|
return [r + d, g + d, b + d];
|
|
@@ -14,7 +16,7 @@ var rgb4v = function (r, g, b, v) {
|
|
|
14
16
|
var number_sort = (a, b) => a - b;
|
|
15
17
|
|
|
16
18
|
var rgb4h = function (r, g, b, h) {
|
|
17
|
-
var [p,
|
|
19
|
+
var [p, _, s] = [r, g, b].sort(number_sort);
|
|
18
20
|
var m = s - p;
|
|
19
21
|
h = (h % 360 + 360) % 360;
|
|
20
22
|
if (h < 60) {
|
|
@@ -110,38 +112,64 @@ function rotate_rgb(RGBA, theta) {
|
|
|
110
112
|
[r, g, b] = rgb4s(r, g, b, s);
|
|
111
113
|
[r, g, b] = rgb4v(r, g, b, v);
|
|
112
114
|
return [r, g, b, a];
|
|
113
|
-
// var s = rgb2s(r, g, b);
|
|
114
|
-
// var v = rgb2v(r, g, b);
|
|
115
|
-
// var u = sqrt(3) / 3;
|
|
116
|
-
// var pu = 1 / 3;
|
|
117
|
-
// var cosa = cos(theta);
|
|
118
|
-
// var sina = sin(theta);
|
|
119
|
-
// var vera = 1 - cosa;
|
|
120
|
-
// var red = (cosa + pu * vera) * r + (pu * vera - u * sina) * g + (pu * vera + u * sina) * b;
|
|
121
|
-
// var green = (pu * vera + u * sina) * r + (cosa + pu * vera) * g + (pu * vera - u * sina) * b;
|
|
122
|
-
// var blue = (pu * vera - u * sina) * r + (pu * vera + u * sina) * g + (cosa + pu * vera) * b;
|
|
123
|
-
// var m = mode([red, green, blue]);
|
|
124
|
-
// var _min = min(red, green, blue);
|
|
125
|
-
// var d = [m - red, m - green, m - blue]
|
|
126
|
-
// if (_min < 0) {
|
|
127
|
-
// var index = red < 0 ? 0 : green < 0 ? 1 : 2;
|
|
128
|
-
// var [dr, dg, db] = single(d, -_min / d[index]);
|
|
129
|
-
// } else {
|
|
130
|
-
// var _max = max(red, green, blue);
|
|
131
|
-
// if (_max > 255) {
|
|
132
|
-
// var index = red > 255 ? 0 : green > 255 ? 1 : 2;
|
|
133
|
-
// var [dr, dg, db] = single(d, (255 - _max) / d[index]);
|
|
134
|
-
// } else {
|
|
135
|
-
// var dr, dg, db = dr = dg = 0;
|
|
136
|
-
// }
|
|
137
|
-
// }
|
|
138
|
-
// red += dr;
|
|
139
|
-
// green += dg;
|
|
140
|
-
// blue += db;
|
|
141
|
-
// [red, green, blue] = rgb4s(red, green, blue, s);
|
|
142
|
-
// [red, green, blue] = rgb4v(red, green, blue, v);
|
|
143
|
-
// return [red, green, blue, a];
|
|
144
115
|
}
|
|
116
|
+
|
|
117
|
+
// function rotate_phi(x, y, z, alpha) {
|
|
118
|
+
// // 转轴为过原点的向量(-1,0,1)
|
|
119
|
+
// // 顺时针转动后中性值偏向紫色方向,与纯红纯蓝的夹角均为45度
|
|
120
|
+
// // 用于适配初始饱和度
|
|
121
|
+
// // 此向量是过三点的平面的法向量,三点为(0,0,0),(1,1,1),(1,0,1)
|
|
122
|
+
// var u = sqrt(1 / 2);
|
|
123
|
+
// var cosi = cos(alpha);
|
|
124
|
+
// var sini = sin(alpha);
|
|
125
|
+
// var veri = 1 - cosi;
|
|
126
|
+
// return [
|
|
127
|
+
// x * (cosi + veri / 2) + sini * u * y - veri * z / 2,
|
|
128
|
+
// -u * sini * x + y * cosi + -u * sini * z,
|
|
129
|
+
// -veri * x / 2 + sini * u * y + (cosi + veri / 2) * z
|
|
130
|
+
// ];
|
|
131
|
+
// }
|
|
132
|
+
|
|
133
|
+
// function rotate_3d(x, y, z, theta) {
|
|
134
|
+
// // 转轴为过原点的(1,1,1)向量
|
|
135
|
+
// // 用于调整色相
|
|
136
|
+
// // theta取正值时为逆时针转动
|
|
137
|
+
// // 在右手坐标系中,红绿蓝分别对应母指、食指、中指的指向
|
|
138
|
+
// var u = sqrt(3) / 3;
|
|
139
|
+
// var pu = 1 / 3;
|
|
140
|
+
// var cosa = cos(theta);
|
|
141
|
+
// var sina = sin(theta);
|
|
142
|
+
// var vera = 1 - cosa;
|
|
143
|
+
// var a = (cosa + pu * vera) * x + (pu * vera - u * sina) * y + (pu * vera + u * sina) * z;
|
|
144
|
+
// var b = (pu * vera + u * sina) * x + (cosa + pu * vera) * y + (pu * vera - u * sina) * z;
|
|
145
|
+
// var c = (pu * vera - u * sina) * x + (pu * vera + u * sina) * y + (cosa + pu * vera) * z;
|
|
146
|
+
// return [a, b, c];
|
|
147
|
+
// }
|
|
148
|
+
|
|
149
|
+
function rotate_(a, b, c, x, y, z, theta) {
|
|
150
|
+
var cosa = cos(theta);
|
|
151
|
+
var sina = sin(theta);
|
|
152
|
+
var vera = 1 - cosa;
|
|
153
|
+
return [
|
|
154
|
+
(vera * a * a + cosa) * x + (vera * a * b - sina * c) * y + (sina * b + vera * a * c) * z,
|
|
155
|
+
(sina * c + vera * a * b) * x + (vera * b * b + cosa) * y + (vera * b * c - sina * a) * z,
|
|
156
|
+
(vera * a * c - sina * b) * x + (sina * a + vera * b * c) * y + (vera * c * c + cosa) * z
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function rotate_3d(r_l, g_l, b_l, theta) {
|
|
161
|
+
// (.299,.587,.114)
|
|
162
|
+
return rotate_(r_u, g_u, b_u, r_l, g_l, b_l, theta);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function rotate_phi(r_l, g_l, b_l, phi) {
|
|
166
|
+
// (-.114,0,.299);
|
|
167
|
+
var b_u = b_v / sqrt(b_v * b_v + r_v * r_v);
|
|
168
|
+
var r_u = r_v / sqrt(b_v * b_v + r_v * r_v);
|
|
169
|
+
return rotate_(-b_u, 0, r_u, r_l, g_l, b_l, phi);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
145
173
|
// 对比度
|
|
146
174
|
function contrast_rgb(RGBA, ratio) {
|
|
147
175
|
var [r, g, b, a] = RGBA;
|
|
@@ -207,40 +235,189 @@ function t2rgb(t, p, q) {
|
|
|
207
235
|
if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);
|
|
208
236
|
return p;
|
|
209
237
|
}
|
|
210
|
-
function
|
|
238
|
+
function rgb4hsl(h, s, l, a) {
|
|
211
239
|
var q = l < .5 ? l * (1 + s) : l + s - l * s;
|
|
212
240
|
var p = 2 * l - q;
|
|
213
241
|
h /= 360;
|
|
214
|
-
var r = h + 1 / 3;
|
|
215
|
-
var g = h;
|
|
216
|
-
var b = h - 1 / 3;
|
|
217
|
-
return [r, g, b
|
|
242
|
+
var r = t2rgb(h + 1 / 3, p, q) * 255;
|
|
243
|
+
var g = t2rgb(h, p, q) * 255;
|
|
244
|
+
var b = t2rgb(h - 1 / 3, p, q) * 255;
|
|
245
|
+
return [r, g, b, a];
|
|
246
|
+
}
|
|
247
|
+
function hsl2rgb([h, s, l]) {
|
|
248
|
+
return rgb4hsl(h, s, l, 1);
|
|
218
249
|
}
|
|
219
|
-
function percent(a) {
|
|
250
|
+
function percent(a, total = 1) {
|
|
220
251
|
if (/%$/.test(a)) {
|
|
221
|
-
a = a.replace(/%$/, '') / 100;
|
|
252
|
+
a = a.replace(/%$/, '') / 100 * total;
|
|
222
253
|
}
|
|
223
254
|
return +a;
|
|
224
255
|
}
|
|
256
|
+
function prgb(a) {
|
|
257
|
+
return percent(a, 255);
|
|
258
|
+
}
|
|
259
|
+
function pab(a) {
|
|
260
|
+
return percent(a, 125);
|
|
261
|
+
}
|
|
262
|
+
function pc(a) {
|
|
263
|
+
return percent(a, 150);
|
|
264
|
+
}
|
|
265
|
+
function pl(a) {
|
|
266
|
+
return percent(a, 100);
|
|
267
|
+
}
|
|
268
|
+
function pkl(a) {
|
|
269
|
+
return percent(a) * 100;
|
|
270
|
+
}
|
|
271
|
+
function pkc(a) {
|
|
272
|
+
return percent(a) * 150 / 0.4;
|
|
273
|
+
}
|
|
274
|
+
function pkab(a) {
|
|
275
|
+
return percent(a) * 125 / 0.4;
|
|
276
|
+
}
|
|
277
|
+
function ph(hue) {
|
|
278
|
+
if (/deg$/i.test(hue)) {
|
|
279
|
+
return +hue.replace(/deg$/i, '');
|
|
280
|
+
}
|
|
281
|
+
if (/turn$/i.test(hue)) {
|
|
282
|
+
return hue.replace(/turn$/i, '') * 360;
|
|
283
|
+
}
|
|
284
|
+
if (/grad$/i.test(hue)) {
|
|
285
|
+
return hue.replace(/grad$/i, '') * 360 / 400;
|
|
286
|
+
}
|
|
287
|
+
if (/rad$/i.test(hue)) {
|
|
288
|
+
return hue.replace(/rad$/i, '') * 180 / PI;
|
|
289
|
+
}
|
|
290
|
+
return percent(hue, 360);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const hdelta = -60;// lch的零点色相与纯红色相的差值
|
|
294
|
+
const cangle = acos(g_u);// 灰度轴与纯绿轴的夹角
|
|
295
|
+
// const cangle = acos(sqrt(2 / 3));// 灰度轴与纯黄向量的夹角
|
|
296
|
+
// const cratio = acos(sqrt(2 / 3));// lch的纯红色与rgb纯红色的饱合度比值
|
|
297
|
+
function rgb4lch(L, c, h, a) {
|
|
298
|
+
h = (h - hdelta) / 180 * PI;
|
|
299
|
+
L = L / 100 * 255;
|
|
300
|
+
var phi = c / 150 * cangle;
|
|
301
|
+
var s = L * tan(phi);
|
|
302
|
+
var A = cos(h) * s;
|
|
303
|
+
var B = sin(h) * s;
|
|
304
|
+
var [r, g, b] = rotate_phi(B, L, A, -cangle);
|
|
305
|
+
r /= r_u;
|
|
306
|
+
g /= g_u;
|
|
307
|
+
b /= b_u;
|
|
308
|
+
return [r + .5 | 0, g + .5 | 0, b + .5 | 0, a];
|
|
309
|
+
}
|
|
310
|
+
function lch4rgb(r, g, b, a) {
|
|
311
|
+
r *= r_u;
|
|
312
|
+
g *= g_u;
|
|
313
|
+
b *= b_u;
|
|
314
|
+
var [B, L, A] = rotate_phi(r, g, b, cangle);
|
|
315
|
+
var theta = atan2(B, A) / PI * 180 + hdelta;
|
|
316
|
+
if (theta < 0) theta += 360;
|
|
317
|
+
var c = sqrt(B * B + A * A) / (L || 1);
|
|
318
|
+
c = atan(c) / cangle * 150;
|
|
319
|
+
return [
|
|
320
|
+
L / 255 * 100,
|
|
321
|
+
c,
|
|
322
|
+
theta,
|
|
323
|
+
a
|
|
324
|
+
];
|
|
325
|
+
}
|
|
326
|
+
function rgb2lch([r, g, b, a]) {
|
|
327
|
+
return lch4rgb(r, g, b, a);
|
|
328
|
+
}
|
|
329
|
+
function rgb4lab(L, A, B, a) {
|
|
330
|
+
var [L, c, h] = lch4lab(L, A, B, a);
|
|
331
|
+
return rgb4lch(L, c, h);
|
|
332
|
+
}
|
|
333
|
+
function lch4lab(L, A, B, a) {
|
|
334
|
+
var c = sqrt(A * A + B * B) / 125 * 150;
|
|
335
|
+
var h = atan2(B, A) * 180 / PI;
|
|
336
|
+
return [L, c, h, a];
|
|
337
|
+
}
|
|
338
|
+
function lab4lch(L, c, h, a) {
|
|
339
|
+
c = c / 150 * 125;
|
|
340
|
+
h = h * PI / 180;
|
|
341
|
+
var A = c * cos(h);
|
|
342
|
+
var B = c * sin(h);
|
|
343
|
+
return [L, A, B, a];
|
|
344
|
+
}
|
|
345
|
+
function lab4rgb(r, g, b, a) {
|
|
346
|
+
var [l, c, h] = lch4rgb(r, g, b);
|
|
347
|
+
return lab4lch(l, c, h, a);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
function hwb4hsv(h, s, v, a) {
|
|
351
|
+
var w = (1 - s) * v;
|
|
352
|
+
var b = 1 - v;
|
|
353
|
+
return [h, w, b, a];
|
|
354
|
+
}
|
|
355
|
+
function hsv4hwb(h, w, b, a) {
|
|
356
|
+
if (w + b > 1) {
|
|
357
|
+
var s = w + b;
|
|
358
|
+
w /= s;
|
|
359
|
+
b /= s;
|
|
360
|
+
}
|
|
361
|
+
var s = 1 - w / (1 - b);
|
|
362
|
+
var v = 1 - b;
|
|
363
|
+
return [h, s, v, a];
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
function hwb4rgb(r, g, b, a) {
|
|
367
|
+
var h = rgb2h(r, g, b);
|
|
368
|
+
var w = min(r, g, b);
|
|
369
|
+
var b = 255 - max(r, g, b);
|
|
370
|
+
return [h, w / 255, b / 255, a];
|
|
371
|
+
}
|
|
372
|
+
function rgb4hwb(h, w, b, a) {
|
|
373
|
+
if (w + b > 1) {
|
|
374
|
+
var s = w + b;
|
|
375
|
+
w /= s;
|
|
376
|
+
b /= s;
|
|
377
|
+
}
|
|
378
|
+
w *= 255;
|
|
379
|
+
b *= 255;
|
|
380
|
+
var [r, g, b] = rgb4h(w, 255 - b, w, h);
|
|
381
|
+
return [r, g, b, a];
|
|
382
|
+
}
|
|
383
|
+
function parse4(namespace, b, c, d, a) {
|
|
384
|
+
a = a ? percent(a) : 1;
|
|
385
|
+
switch (namespace.toLowerCase()) {
|
|
386
|
+
case "rgb": return [prgb(b), prgb(c), prgb(d), a];
|
|
387
|
+
case "hsl": return rgb4hsl(ph(b), percent(c), percent(d), a);
|
|
388
|
+
case "hwb": return rgb4hwb(ph(b), percent(c), percent(d), a);
|
|
389
|
+
case "lab": return rgb4lab(pl(b), pab(c), pab(d), a);
|
|
390
|
+
case "lch": return rgb4lch(pl(b), pc(c), ph(d), a);
|
|
391
|
+
case "oklch": return rgb4lch(pkl(b), pkc(c), ph(d), a);
|
|
392
|
+
case "oklab": return rgb4lab(pkl(b), pkab(c), pkab(d), a);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
225
395
|
function parse(color) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
S = percent(S);
|
|
230
|
-
L = percent(L);
|
|
231
|
-
a = percent(a);
|
|
232
|
-
[R, G, B] = hsl2rgb([H, S, L]);
|
|
233
|
-
return [R, G, B, a || 1];
|
|
234
|
-
} else if (rgbReg.test(color)) {
|
|
235
|
-
var [_, R, G, B, a] = rgbReg.exec(color);
|
|
236
|
-
return [R > 255 ? 255 : +R, G > 255 ? 255 : +G, B > 255 ? 255 : +B, a ? +a : 1];
|
|
237
|
-
} else if (rgbHex.test(color)) {
|
|
238
|
-
var [_, R, G, B, A] = rgbHex.exec(color).map(a => parseInt(a + a, 16));
|
|
396
|
+
var m = null;
|
|
397
|
+
if (m = rgbHex.exec(color)) {
|
|
398
|
+
var [_, R, G, B, A] = m.map(a => parseInt(a + a, 16));
|
|
239
399
|
return [R, G, B, A >= 0 ? A / 0xff : 1];
|
|
240
|
-
}
|
|
241
|
-
|
|
400
|
+
}
|
|
401
|
+
else if (m = rgbHex2.exec(color)) {
|
|
402
|
+
var [_, R, G, B, A] = m.map(a => parseInt(a, 16));
|
|
242
403
|
return [R, G, B, A >= 0 ? A / 0xff : 1];
|
|
243
404
|
}
|
|
405
|
+
else if (m = rgbReg.exec(color)) {
|
|
406
|
+
var [_, R, G, B, a] = m;
|
|
407
|
+
return [R > 255 ? 255 : +R, G > 255 ? 255 : +G, B > 255 ? 255 : +B, a ? percent(a) : 1];
|
|
408
|
+
}
|
|
409
|
+
else if (m = hslReg.exec(color)) {
|
|
410
|
+
var [_, H, S, L, a] = m;
|
|
411
|
+
S = percent(S);
|
|
412
|
+
L = percent(L);
|
|
413
|
+
a = a ? percent(a) : 1;
|
|
414
|
+
[R, G, B] = rgb4hsl(ph(H), S, L, a);
|
|
415
|
+
return [R, G, B, a];
|
|
416
|
+
}
|
|
417
|
+
else if (m = lablch.exec(color)) {
|
|
418
|
+
var [_, f, b, c, d, a] = m;
|
|
419
|
+
return parse4(f, b, c, d, a);
|
|
420
|
+
}
|
|
244
421
|
}
|
|
245
422
|
var maybe16 = function (n) {
|
|
246
423
|
return (n >> 4) === (n & 0xf);
|
|
@@ -274,11 +451,11 @@ function doWith(manager, color, ...args) {
|
|
|
274
451
|
function normal([r, g, b]) {
|
|
275
452
|
return [g - b, b - r, r - g];
|
|
276
453
|
}
|
|
277
|
-
function
|
|
454
|
+
function norm([r, g, b]) {
|
|
278
455
|
return sqrt(r * r + g * g + b * b);
|
|
279
456
|
}
|
|
280
|
-
function
|
|
281
|
-
if (!u) var u = 1 /
|
|
457
|
+
function unit(c, u) {
|
|
458
|
+
if (!u) var u = 1 / norm(c);
|
|
282
459
|
if (!u) {
|
|
283
460
|
u = Math.sqrt(3) / 3;
|
|
284
461
|
return [u, u, u];
|
|
@@ -293,18 +470,6 @@ function angle(c1, c2) {
|
|
|
293
470
|
c2 = normal(c2);
|
|
294
471
|
var theta = rgb2h(c2[0], c2[1], c2[2]) - rgb2h(c1[0], c1[1], c1[2]);
|
|
295
472
|
if (theta < 0) theta += 360;
|
|
296
|
-
// var [r1, g1, b1] = single(c1);
|
|
297
|
-
// var [r2, g2, b2] = single(c2);
|
|
298
|
-
// var c = [g1 * b2 - g2 * b1, b1 * r2 - b2 * r1, r1 * g2 - r2 * g1];
|
|
299
|
-
// var d = r1 * r2 + g1 * g2 + b1 * b2;
|
|
300
|
-
// var e = c[0] > 0 ? mode(c) : -mode(c);
|
|
301
|
-
// var theta = Math.asin(e > 1 ? 1 : e < -1 ? -1 : e);
|
|
302
|
-
// var phi = Math.acos(d > 1 ? 1 : d < -1 ? -1 : d);
|
|
303
|
-
// if (theta < 0) {
|
|
304
|
-
// theta = Math.PI * 2 - phi;
|
|
305
|
-
// } else {
|
|
306
|
-
// theta = phi;
|
|
307
|
-
// }
|
|
308
473
|
return theta;
|
|
309
474
|
}
|
|
310
475
|
function equal(c1, c2) {
|
|
@@ -313,14 +478,20 @@ function equal(c1, c2) {
|
|
|
313
478
|
var [r2, g2, b2, a2] = parse(c2);
|
|
314
479
|
return abs(r1 - r2) < 1 && abs(g1 - g2) < 1 && abs(b1 - b2) < 1 && abs(a1 - a2) < .01;
|
|
315
480
|
}
|
|
316
|
-
var hslReg = /^hsla?\s*\(\s*([\d\.]+(?:deg)?)\s*[,\s]\s*([\d\.]+%?)\s*[,\s]\s*([\d\.]+%?)(?:[,\/\s]\s*([\d\.]+%?))?\)$/i;
|
|
481
|
+
var hslReg = /^hsla?\s*\(\s*([\d\.]+(?:deg|turn|g?rad)?)\s*[,\s]\s*([\d\.]+%?)\s*[,\s]\s*([\d\.]+%?)(?:[,\/\s]\s*([\d\.]+%?))?\)$/i;
|
|
317
482
|
var rgbReg = /^rgba?\s*\(\s*([\d\.]+)\s*[,\s]\s*([\d\.]+)\s*[,\s]\s*([\d\.]+)(?:[,\s]\s*([\d\.]+))?\)$/i;
|
|
318
483
|
var rgbHex = /^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i;
|
|
319
484
|
var rgbHex2 = /^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i;
|
|
320
485
|
var rotated_base_color = "#d16969";
|
|
321
|
-
var colorReg = /(?:rgb|hsl)a
|
|
486
|
+
var colorReg = /(?:(?:rgb|hsl)a?|hwb|(?:ok)?(?:lab|lch))\s*\([\-\,\.\w\s%]+\)|#[\da-f]{3,8}/ig;
|
|
487
|
+
var num = /(\-?(?:\d+(?:\.\d*)?|\.\d+)(?:%|deg|turn|g?rad)?)/;
|
|
488
|
+
var lablch = new RegExp(`${/^((?:ok)?(?:lab|lch)|hwb|rgb|hsl)\s*\(/.source}${num.source}\\s+${num.source}\\s+${num.source}\\s*(?:/\\s*${num.source})?\\)`, 'i');
|
|
322
489
|
function isColor(text) {
|
|
323
|
-
return rgbReg.test(text)
|
|
490
|
+
return rgbReg.test(text)
|
|
491
|
+
|| rgbHex.test(text)
|
|
492
|
+
|| rgbHex2.test(text)
|
|
493
|
+
|| hslReg.test(text)
|
|
494
|
+
|| lablch.test(text);
|
|
324
495
|
}
|
|
325
496
|
function format(color) {
|
|
326
497
|
var c = parse(color);
|
|
@@ -342,9 +513,9 @@ var colorDesigner = {
|
|
|
342
513
|
contrast: 1
|
|
343
514
|
};
|
|
344
515
|
var rgb2v = function (r, g, b) {
|
|
345
|
-
r *=
|
|
346
|
-
g *=
|
|
347
|
-
b *=
|
|
516
|
+
r *= r_v;
|
|
517
|
+
g *= g_v;
|
|
518
|
+
b *= b_v;
|
|
348
519
|
return r + g + b;
|
|
349
520
|
};
|
|
350
521
|
var v2rgb = function (v, r, g, b) {
|
|
@@ -496,9 +667,18 @@ extend(color, {
|
|
|
496
667
|
rgb2s,
|
|
497
668
|
rgb4s,
|
|
498
669
|
rgb2hsl,
|
|
670
|
+
rgb4lch,
|
|
671
|
+
lch4rgb,
|
|
672
|
+
rgb4lab,
|
|
673
|
+
lab4rgb,
|
|
674
|
+
lab4lch,
|
|
675
|
+
lch4lab,
|
|
499
676
|
hsl2rgb,
|
|
677
|
+
rgb4hwb,
|
|
678
|
+
hwb4rgb,
|
|
500
679
|
angle,
|
|
501
680
|
parse,
|
|
681
|
+
parse4,
|
|
502
682
|
equal,
|
|
503
683
|
format,
|
|
504
684
|
stringify,
|
package/coms/basic/color_test.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function
|
|
1
|
+
function testRotate() {
|
|
2
2
|
var c = "#999933";
|
|
3
3
|
for (var cx = 0, dx = 360; cx < dx; cx++) {
|
|
4
4
|
var r = cx / dx * Math.PI * 2;
|
|
@@ -10,4 +10,25 @@ function color_test() {
|
|
|
10
10
|
console.log(c1, c2, t);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
|
+
function testConvert(to, from) {
|
|
15
|
+
for (var cx = 0, dx = 0xffffff; cx < dx; cx++) {
|
|
16
|
+
var r = cx & 0xff, g = cx >> 8 & 0xff, b = cx >> 16 & 0xff;
|
|
17
|
+
var rgb1 = [r, g, b];
|
|
18
|
+
var [c, v, t] = to.length === 1 ? to(rgb1) : to(r, g, b);
|
|
19
|
+
var [r, g, b] = from.length === 1 ? from([c, v, t]) : from(c, v, t);
|
|
20
|
+
var rgb2 = [r, g, b];
|
|
21
|
+
if (cx === 0x0000ff) console.log("纯红色", c, v, t);
|
|
22
|
+
if (cx === 0x00ff00) console.log("纯绿色", c, v, t);
|
|
23
|
+
if (cx === 0xff0000) console.log("纯蓝色", c, v, t);
|
|
24
|
+
if (!assert(rgb1, rgb2)) {
|
|
25
|
+
console.log(rgb1, rgb2, c, v, t);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// testConvert(color.rgb2hsl, color.hsl2rgb);
|
|
31
|
+
// testConvert(color.lch4rgb, color.rgb4lch);
|
|
32
|
+
testConvert(color.hwb4rgb, color.rgb4hwb);
|
|
33
|
+
// testConvert(color.lab4rgb, color.rgb4lab);
|
|
34
|
+
console.log(Matrix.cross3([1, 1, 1], [1, 1, 0]))
|
package/coms/basic/crc.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
function table(sign) {
|
|
3
|
-
var c
|
|
2
|
+
function table(sign, table = new Array(256)) {
|
|
3
|
+
var c;
|
|
4
4
|
for (var n = 0; n < 256; n++) {
|
|
5
5
|
c = n;
|
|
6
6
|
c = c & 1 ? sign ^ c >>> 1 : c >>> 1;
|
|
@@ -33,4 +33,8 @@ crc.string = function (str) {
|
|
|
33
33
|
}
|
|
34
34
|
var sign = parseInt("-52l3vk", 36);
|
|
35
35
|
var T = table(sign);
|
|
36
|
+
crc.table = T;
|
|
37
|
+
crc.init = function (sign) {
|
|
38
|
+
table(sign, T);
|
|
39
|
+
};
|
|
36
40
|
module.exports = crc;
|
package/coms/basic/data.js
CHANGED
|
@@ -1024,7 +1024,6 @@ var data = {
|
|
|
1024
1024
|
instanceDataMap[instanceId] = instance;
|
|
1025
1025
|
}
|
|
1026
1026
|
return instanceDataMap[instanceId];
|
|
1027
|
-
|
|
1028
1027
|
},
|
|
1029
1028
|
removeInstance(instanceId) {
|
|
1030
1029
|
delete instanceDataMap[instanceId];
|
|
@@ -1198,8 +1197,9 @@ var fireListener = function (instanceId, data) {
|
|
|
1198
1197
|
if (!listeners) return;
|
|
1199
1198
|
listeners.forEach(a => a(data));
|
|
1200
1199
|
};
|
|
1201
|
-
data.setItem =
|
|
1202
|
-
data.getItem =
|
|
1200
|
+
data.setItem = setItem;
|
|
1201
|
+
data.getItem = getItem;
|
|
1202
|
+
data.hasItem = hasItem;
|
|
1203
1203
|
data.seekResponse = seekResponse;
|
|
1204
1204
|
data.removeItem = data.removeInstance;
|
|
1205
1205
|
extend(dataSourceMap, getItem(sourceDataId));
|
package/coms/basic/decodeASN1.js
CHANGED
|
@@ -193,7 +193,7 @@ function decodeASN1(buff, deep = 0) {
|
|
|
193
193
|
break;
|
|
194
194
|
case 23: // utc 时间 1950 - 2049
|
|
195
195
|
showValue = !constructed;
|
|
196
|
-
if (showValue) value = new Date(decodeUTF8(value).replace(/^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(Z
|
|
196
|
+
if (showValue) value = new Date(decodeUTF8(value).replace(/^(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(Z|[\+\-]\d{4})$/, function (_, yy, MM, dd, hh, mm, ss, zone) {
|
|
197
197
|
yy = +yy;
|
|
198
198
|
if (yy < 50) yy += 100;
|
|
199
199
|
yy += 1900;
|
|
@@ -203,7 +203,7 @@ function decodeASN1(buff, deep = 0) {
|
|
|
203
203
|
case 24: // utc 时间 4位年份
|
|
204
204
|
showValue = !constructed;
|
|
205
205
|
if (showValue) value = new Date(decodeUTF8(value).replace(
|
|
206
|
-
/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}(?:\.\d+)?)(Z
|
|
206
|
+
/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}(?:\.\d+)?)(Z|[\+\-]\d{4})$/,
|
|
207
207
|
"$1-$2-$3T$4:$5:$6$7"
|
|
208
208
|
));
|
|
209
209
|
break;
|