efront 4.35.8 → 4.36.1

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.
@@ -6,15 +6,18 @@ const {
6
6
  createString,
7
7
  } = require("./common");
8
8
  var powermap = require("./powermap");
9
- var number_rep = /^([+-]?[\d\.]+)(?:e([+-]?\d+))?$/;
9
+ var number_rep = /^([+-]?[\d\.]+)(?:e([+-]?\d+))?([ijkn]*)$/;
10
+ var 三角函数 = `sin,cos,tan,cot,sec,csc,arcsin,arccos,arctan,arccot,arcsec,arccsc`.split(',');
10
11
  class Math extends Program {
11
- number_reg = /^(\d+(?:\.\d+){0,2}|(?:\.\d+){1,2}|(?:\d+\.){1,3})\.*(?:e[+-]?\d+)?$/;
12
+ number_reg = /^(\d+(?:\.\d+){0,2}|(?:\.\d+){1,2}|(?:\d+\.){1,3})\.*(?:e[+-]?\d+)?[ijkn]*$/;
12
13
  powermap = Object.assign({}, powermap);
13
14
  value_reg = /^(false|true|null|Infinity|NaN|undefined|eval|this|arguments)$/;
15
+ straps = 三角函数;
14
16
  constructor() {
15
17
  super();
16
18
  var pmap = this.powermap;
17
19
  pmap["+-"] = pmap["-+"] = powermap["+"];
20
+ pmap["+."] = powermap["?."];
18
21
  pmap["×"] = pmap[".*"] = powermap["*"];
19
22
  pmap["≈"] = pmap["~="] = pmap["=="];
20
23
  pmap["≉"] = pmap["!≈"] = pmap["!~="] = pmap["~!="] = pmap["=="];
@@ -23,7 +26,13 @@ class Math extends Program {
23
26
  pmap["^"] = powermap["**"];
24
27
  pmap["_"] = powermap["?."];
25
28
  pmap["'"] = powermap["?."];
26
- this.stamps.push('\\', '_');
29
+ var newp = powermap['new'];
30
+ 三角函数.forEach(k => {
31
+ pmap[k] = newp;
32
+ })
33
+ pmap["$"] = pmap["@"] = powermap["!"];
34
+ this.stamps.push('\\', '_', "@", "$");
35
+ this.scopes.push(["|", "|"])
27
36
  }
28
37
  }
29
38
  Math.prototype.createScoped = createScoped;
@@ -49,10 +58,10 @@ var make = function (pt, left, right) {
49
58
  if (left) left = uncup(left);
50
59
  if (right) right = uncup(right);
51
60
  if (isNull(left)) {
52
- return { [pt]: right instanceof Array ? ["", right] : right };
61
+ return { [pt]: right instanceof Array && !right.iscup ? ["", right] : right };
53
62
  }
54
63
  if (isNull(right)) {
55
- return { [pt]: [left] };
64
+ return { [pt]: left instanceof Array && left.iscup ? left : [left] };
56
65
  }
57
66
  if (left[pt]) {
58
67
  left[pt].push(right);
@@ -94,20 +103,29 @@ var getRows = function (code) {
94
103
  var trs = [];
95
104
  var maxsize = 0;
96
105
  for (var r of rows) {
97
- var row = split(r, ',').map(toFlat);
106
+ var row = getArgs(r);
98
107
  maxsize = row.length;
99
108
  trs.push(row);
100
109
  }
101
110
  rows.maxsize = maxsize;
111
+ trs.iscup = true;
102
112
  return trs;
103
113
  }
104
114
  var getArgs = function (a) {
105
- return split(a, ',').map(a => {
115
+ var res = [];
116
+ res.iscup = true;
117
+ split(a, ',').forEach(a => {
106
118
  var cells = createExpressList(a);
107
119
  if (!cells[cells.length - 1]?.first) cells.pop();
108
- if (cells.length === 1) return toFlat(cells[0]);
109
- return cells.map(toFlat);
120
+ if (cells.length === 1) {
121
+ res.push(toFlat(cells[0]));
122
+ return;
123
+ }
124
+ cells.map(toFlat).forEach(a => {
125
+ res.push(a);
126
+ });
110
127
  });
128
+ return res;
111
129
  }
112
130
  var uncup = function (cup) {
113
131
  if (cup.iscup && cup.length <= 1) cup = cup[0];
@@ -142,7 +160,8 @@ var toFlat = function (exp) {
142
160
  for (var cx = 0, dx = exp.length; cx < dx; cx++) {
143
161
  var e = exp[cx];
144
162
  if (e.type & (SPACE | COMMENT)) continue;
145
- if (e.type & STAMP) {
163
+ if (e.type & (STAMP | STRAP)) {
164
+ if (e.text === '.') e.text = "+.";
146
165
  var p = pmap[e.text] || 0;
147
166
  if ((!p0 || p > p0 || !left.length) && !e.ion) {
148
167
  cache.push(left, e.text, p0);
@@ -183,6 +202,10 @@ var toFlat = function (exp) {
183
202
  else if (f instanceof Object) {
184
203
  left.push(make("", f, args));
185
204
  }
205
+ else if (/\d\.$/.test(f) && args.length === 1 && args[0]['/']) {
206
+ f = f.replace(/\.$/, '');
207
+ left.push(make("+.", f, args))
208
+ }
186
209
  else {
187
210
  left.push({ [f]: args });
188
211
  }
@@ -213,25 +236,32 @@ var toFlat = function (exp) {
213
236
  else {
214
237
  args.push(ions);
215
238
  }
216
- left = [make("**", left, ...args)];
239
+ left = [make("^*", left, args)];
217
240
  }
218
241
  else {
219
- left = [make("**", left, ions)];
242
+ if (ions === '*' && left[0]["["] && left.length === 1) {
243
+ ions = "H";
244
+ }
245
+ left = [make("^*", left, ions)];
220
246
  }
221
247
  }
222
248
  else {
223
249
  var args = getArgs(e);
224
250
  // 下标
225
- left = [make("_", left, ...args)];
251
+ left = [make("_", left, args)];
226
252
  }
227
253
  left.iscup = true;
228
254
  }
229
255
  else {
230
256
  // 矩阵
231
- left.push(getRows(e));
257
+ left.push(make("[", null, getRows(e)));
232
258
  }
233
259
  }
234
260
  else if (e.entry === "{") {
261
+ left.push(make("{", null, getRows(e)));
262
+ }
263
+ else if (e.entry === '|') {
264
+ left.push(make("^|", getRows(e)));
235
265
  }
236
266
  }
237
267
  else {
@@ -241,9 +271,9 @@ var toFlat = function (exp) {
241
271
  }
242
272
  if (e.isdigit) a: {
243
273
  var et = e.text;
244
- var [, a, e10] = number_rep.exec(et);
274
+ var [, a, e10, s] = number_rep.exec(et);
245
275
  var b = a.split('.');
246
- if (b.length > 2 || e10) {
276
+ if (b.length > 2) {
247
277
  var nrep = b[2] || b[1];
248
278
  var npre = b[0];
249
279
  if (b[2]) {
@@ -257,15 +287,29 @@ var toFlat = function (exp) {
257
287
  if (String(+nrep) === nrep) nrep = +nrep;
258
288
  var v = [npre, nrep];
259
289
  if (b.length > (b[2] ? 4 : b[1] ? 3 : 2)) v.push(b.slice(b[2] ? 3 : b[1] ? 2 : 1, b.length).join('.') + ".");
260
- else if (e10) v.push('');
290
+ else if (e10 || s) v.push('');
261
291
  if (e10) {
262
292
  if (String(+e10) === e10) e10 = +e10;
263
293
  v.push(e10);
264
294
  }
295
+ else if (s) v.push('');
296
+ if (s) v.push(s);
265
297
  v = { "..": v };
266
298
  left.push(v);
267
299
  continue;
268
300
  }
301
+ else if (s || e10) {
302
+ if (String(+a) === a) a = +a;
303
+ var v = [a];
304
+ if (e10) {
305
+ if (String(+e10) === e10) e10 = +e10;
306
+ v.push(e10);
307
+ }
308
+ if (s) v.push(s);
309
+ v = { ".": v };
310
+ left.push(v);
311
+ continue;
312
+ }
269
313
  var v = +a;
270
314
  if (/^\+/.test(et)) {
271
315
  if (String(v) !== a.slice(1)) break a;
@@ -275,7 +319,11 @@ var toFlat = function (exp) {
275
319
  left.push(v);
276
320
  continue;
277
321
  }
278
- left.push(e.text);
322
+ var text = e.text;
323
+ if (e.type === QUOTED) {
324
+ text = strings.decode(text);
325
+ }
326
+ left.push(text);
279
327
  }
280
328
  }
281
329
  if (!left.length) {
@@ -290,29 +338,37 @@ var toFlat = function (exp) {
290
338
  }
291
339
  return uncup(left);
292
340
  }
293
-
294
- function main(text) {
295
- var code = scanner2(text, math);
341
+ function seprate(code, addrow) {
296
342
  var rows = split(code, ';');
297
343
  var res = [];
298
344
  res.iscup = true;
299
345
  for (var r of rows) {
300
346
  var cells = split(r, ',');
347
+ var cup = addrow ? res : [];
301
348
  for (var c of cells) {
302
349
  var exps = createExpressList(c);
303
350
  for (var e of exps) {
304
351
  var a = toFlat(e);
305
352
  if (!a) continue;
306
353
  if (a.iscup) {
307
- for (var b of a) res.push(b, ' ');
354
+ if (addrow) for (var b of a) cup.push(b, ' ');
355
+ else for (var b of a) cup.push(a);
308
356
  }
309
- else res.push(a, ' ');
357
+ else if (addrow) cup.push(a, ' ');
358
+ else cup.push(a);
310
359
  }
311
- if (res.length) res[res.length - 1] = ', ';
360
+ if (addrow && cup.length) cup[res.length - 1] = ', ';
361
+ }
362
+ if (cup.length) {
363
+ if (addrow) cup[res.length - 1] = '\r\n';
364
+ else res.push(cup.length === 1 ? cup[0] : cup);
312
365
  }
313
- if (res.length) res[res.length - 1] = '\r\n';
314
366
  }
315
- res.pop();
367
+ if (addrow) res.pop();
316
368
  return uncup(res);
317
369
  }
370
+ function main(text) {
371
+ var code = scanner2(text, math);
372
+ return seprate(code, true);
373
+ }
318
374
  main.MathScript = Math;
@@ -28,5 +28,10 @@ t(`group(
28
28
  x+y=10 tab(circle,1),
29
29
  x*y=25 tab(circle,2)
30
30
  )`)
31
+ t(`a + -2`);
32
+ t(`2+3i`);
31
33
  t.debug = true;
32
- t(`a + -2`);
34
+ t(`@1`);
35
+ t(`#1`);
36
+ t(`_1`);
37
+ t("1*|11|")
@@ -214,7 +214,7 @@ var wrapColor = function (k) {
214
214
  var f = color[k];
215
215
  macros[k] = function (c) {
216
216
  if (color.isColor(c)) return f(...arguments);
217
- return `${k}(${Array.apply(null, arguments).join(',')})`;
217
+ return `${k}(${Array.prototype.join.call(arguments, ',')})`;
218
218
  };
219
219
  };
220
220
 
@@ -33,12 +33,15 @@ var replaceArg = function (arg) {
33
33
  }
34
34
  return arg;
35
35
  };
36
- function build(func, argNames, argsArr) {
36
+ function build(func, argNames, argsArr, isWrapper) {
37
37
  var newf = String(func).replace(regexps, rep);
38
- return Function.apply(null, argNames.map(replaceArg).concat("return " + newf))
38
+ if (isWrapper) newf = newf.replace(/^\s*function[\s\S]*?\{([\s\S]*)\}\s*$/, "$1");
39
+ else newf = "return " + newf;
40
+ return Function.apply(null, argNames.map(replaceArg).concat(newf))
39
41
  .apply(this, argsArr.map(replaceArg));
40
42
  }
41
43
  var arriswise = function (func, args = []) {
44
+ var isWrapper = func === args[args.length - 3];
42
45
  if (isFunction(args.slice)) {
43
46
  // 兼容老方法
44
47
  var argArr = args.slice(args.length - 3 >>> 1);
@@ -46,8 +49,9 @@ var arriswise = function (func, args = []) {
46
49
  return build.call(arguments[2] || this, func,
47
50
  args.slice(0, args.length - 3 >>> 1),
48
51
  argArr,
52
+ isWrapper
49
53
  );
50
54
  }
51
55
  var allArgumentsNames = args[args.length - 1];
52
- return build.call(this, func, allArgumentsNames, [].slice.call(args, 0));
56
+ return build.call(this, func, allArgumentsNames, [].slice.call(args, 0), isWrapper);
53
57
  };
@@ -650,8 +650,7 @@ function ylist(container, generator, $Y) {
650
650
  var allArgumentsNames = arguments[arguments.length - 1];
651
651
  if (allArgumentsNames.done) return ylist;
652
652
  allArgumentsNames.done = true;
653
- var xlist = arriswise.call(this, arguments[arguments.length - 3], arguments).apply(this, arguments);
654
-
653
+ var xlist = arriswise.call(this, arguments[arguments.length - 3], arguments);
655
654
  var getGeneratorFromArray = function (source) {
656
655
  return function (index) {
657
656
  if (index >= source.length || index < 0) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.35.8",
3
+ "version": "4.36.1",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {