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.
Files changed (67) hide show
  1. package/coms/basic/Matrix.js +3 -1
  2. package/coms/basic/color.js +258 -78
  3. package/coms/basic/color_test.js +23 -2
  4. package/coms/basic/crc.js +6 -2
  5. package/coms/basic/data.js +3 -3
  6. package/coms/basic/decodeASN1.js +2 -2
  7. package/coms/basic/math.js +321 -0
  8. package/coms/basic/math.md +265 -0
  9. package/coms/basic/math_test.xht +56 -0
  10. package/coms/basic/pinyin.js +40 -0
  11. package/coms/basic/pinyin_test.js +40 -0
  12. package/coms/basic/renderExpress.js +2 -2
  13. package/coms/basic/renderExpress_test.js +1 -0
  14. package/coms/basic/wait.js +1 -1
  15. package/coms/basic_/JSON.js +24 -4
  16. package/coms/compile/Html.js +1 -0
  17. package/coms/compile/Javascript.js +14 -0
  18. package/coms/compile/Javascript_test.js +4 -3
  19. package/coms/compile/Program.js +82 -45
  20. package/coms/compile/autoenum.js +498 -138
  21. package/coms/compile/autoenum_test.js +70 -4
  22. package/coms/compile/autoeval.js +616 -18
  23. package/coms/compile/autoeval_test.js +55 -2
  24. package/coms/compile/common.js +27 -15
  25. package/coms/compile/common_test.js +12 -2
  26. package/coms/compile/downLevel.js +60 -7
  27. package/coms/compile/downLevel_test.js +22 -8
  28. package/coms/compile/powermap.js +2 -2
  29. package/coms/compile/rescan.js +2 -2
  30. package/coms/compile/scanner2.js +25 -1
  31. package/coms/compile/translate.js +18 -7
  32. package/coms/compile/unstruct.js +44 -2
  33. package/coms/compile/unstruct_test.js +14 -9
  34. package/coms/compile//347/256/227/345/274/217.js +276 -0
  35. package/coms/compile//347/256/227/345/274/217_test.js +26 -0
  36. package/coms/compile//347/264/240/351/246/250.js +60 -23
  37. package/coms/compile//347/264/240/351/246/250_test.js +8 -3
  38. package/coms/docs/markdown.js +4 -0
  39. package/coms/frame/ChatRTC.js +60 -18
  40. package/coms/frame/chat-rtc.xht +20 -18
  41. package/coms/frame/chat.js +38 -21
  42. package/coms/frame/chat.less +8 -3
  43. package/coms/reptile/colors.js +1 -0
  44. package/coms/zimoli/prompt.js +12 -2
  45. package/coms/zimoli/render.js +0 -1
  46. package/coms//350/214/250/350/217/260//344/270/212/350/211/262.xht +4 -0
  47. package/coms//350/214/250/350/217/260//346/240/207/347/255/276/345/214/226.js +14 -4
  48. package/package.json +24 -24
  49. package/public/efront.js +1 -2
  50. package/public//346/226/207/344/273/266/347/263/273/347/273/237//344/270/273/351/241/265.jsp +2 -2
  51. package/tools/build-efront +22 -0
  52. package/tools/build-efront.bat +22 -0
  53. package/tools/build-efront.js +64 -0
  54. package/tools/build-setup.bat +9 -0
  55. package/tools/buildEmoji.js +17 -0
  56. package/tools/electron.js +37 -0
  57. package/tools/empty.js +11 -0
  58. package/tools/fixBuffer.js +41 -0
  59. package/tools/install-all.js +46 -0
  60. package/tools/makeUseStrict.js +35 -0
  61. package/tools/readHelpersFromTypescript.js +82 -0
  62. package/tools/reload.js +20 -0
  63. package/tools/run-efront.bat +14 -0
  64. package/tools/toCRLF.js +30 -0
  65. package/tools/unwrap-typescript.js +28 -0
  66. package/tools/update-libs.bat +86 -0
  67. package/tools/write-utf8.js +39 -0
@@ -315,4 +315,6 @@ function olinde(v, vector) {
315
315
  }
316
316
  return v;
317
317
  }
318
- Matrix.norm = norm;
318
+ Matrix.norm = norm;
319
+ Matrix.cross3 = cross3;
320
+ Matrix.cross2 = cross2;
@@ -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 [v_r, v_g, v_b] = [.299, .587, .114];
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, q, s] = [r, g, b].sort(number_sort);
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 hsl2rgb([h, s, l]) {
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].map(t => t2rgb(t, p, q) * 255);
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
- if (hslReg.test(color)) {
227
- var [_, H, S, L, a] = hslReg.exec(color);
228
- H = parseFloat(H);
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
- } else if (rgbHex2.test(color)) {
241
- var [_, R, G, B, A] = rgbHex2.exec(color).map(a => parseInt(a, 16));
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 mode([r, g, b]) {
454
+ function norm([r, g, b]) {
278
455
  return sqrt(r * r + g * g + b * b);
279
456
  }
280
- function single(c, u) {
281
- if (!u) var u = 1 / mode(c);
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?\s*\([\,\.\d\s%]+\)|#[\da-f]{3,8}/ig;
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) || rgbHex.test(text) || rgbHex2.test(text) || hslReg.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 *= v_r;
346
- g *= v_g;
347
- b *= v_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,
@@ -1,4 +1,4 @@
1
- function color_test() {
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, table = new Array(256);
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;
@@ -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 = data.setInstance;
1202
- data.getItem = data.getInstance;
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));
@@ -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|\+\d{4})$/, function (_, yy, MM, dd, hh, mm, ss, zone) {
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|\+\d{4})$/,
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;