efront 3.36.2 → 3.36.3

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.
@@ -817,6 +817,7 @@ var modules = {
817
817
  load: loadModule,
818
818
  devicePixelRatio,
819
819
  renderPixelRatio,
820
+ createFunction,
820
821
  efrontsign: "",
821
822
  };
822
823
  modules.debug = function () {
@@ -13,8 +13,14 @@ var stringify = function (data) {
13
13
  var save = function (data) {
14
14
  var v = String(data);
15
15
  if (kesize.length) {
16
- var ksize = kesize[kesize.length - 1] - result[result.length - 1].length + (kesize.length << 1) + 3;
17
- v = new Array(ksize).join(" ") + v;
16
+ var isrow = /^\s*\-/.test(result[result.length - 2]);
17
+ if (isrow) {
18
+ var ksize = kesize[kesize.length - 1] - result[result.length - 1].length + 1;
19
+ }
20
+ else {
21
+ var ksize = kesize[kesize.length - 1] - result[result.length - 1].length + (kesize.length << 1);
22
+ }
23
+ v = new Array(ksize + 3).join(" ") + v;
18
24
  }
19
25
  result.push(v);
20
26
  };
@@ -0,0 +1,9 @@
1
+ var data = [
2
+ { a: 1, b: 2 },
3
+ { abcd: 2, c: 3 },
4
+ { abcdefg: 3, d: 4 },
5
+ { abcdefgh: 3, e: 5, g: { h: 1, k: 2 } },
6
+ { abcdefgh: 3, e: 5, g: [{ a: 1, b: 2 }] },
7
+ { abcdefgh: 3, e: 5, g: [{ a: 1, b: [{ c: 3, defg: 3 }] }] },
8
+ ]
9
+ console.log(YAML.stringify(data));
@@ -183,7 +183,7 @@ var isShortMethodEnd = function (o) {
183
183
 
184
184
  Javascript.prototype.setType = function (o) {
185
185
  var last = o.prev;
186
- if (o.type === EXPRESS && /^\.[^\.]/.test(o.text) && last.type === STAMP && last.text === "?") {
186
+ if (o.type === EXPRESS && /^\.[^\.]/.test(o.text) && last && last.type === STAMP && last.text === "?") {
187
187
  last = o.prev = snapExpressHead(last.prev);
188
188
  last.type = EXPRESS;
189
189
  return false;
@@ -4,4 +4,10 @@ var test = function (data, expect) {
4
4
  test(`:scope{--a:1}a{opacity:--a}`, `a{opacity:1;}`);
5
5
  test(`:scope{--b:--a;--a:1;}a{opacity:--b}`, `a{opacity:1;}`);
6
6
  test(`@a(@p,@b){@p{opacity:@b}}@a(a,1);`, `a{opacity:1;}`);
7
- test(`@a(a,1);@a(@p,@b){@p{opacity:@b}}`, `a{opacity:1;}`);
7
+ test(`@a(a,1);@a(@p,@b){@p{opacity:@b}}`, `a{opacity:1;}`);
8
+ test(`a{ b{a:1}}`,`a b{a:1;}`);
9
+ test(`a{ >b{a:1}}`,`a>b{a:1;}`);
10
+ test(`a{ &>b{a:1}}`,`a>b{a:1;}`);
11
+ test(`a{ &b{a:1}}`,`ab{a:1;}`);
12
+ test(`a{ &.b{a:1}}`,`a.b{a:1;}`);
13
+ test(`a{ &[b]{a:1}}`,`a[b]{a:1;}`);
@@ -0,0 +1,223 @@
1
+ <style>
2
+ :scope {
3
+ padding: 10px 20px;
4
+ border-radius: 3px;
5
+ display: inline-block;
6
+ background: #333;
7
+ color: #d4d4d4;
8
+ vertical-align: top;
9
+ }
10
+
11
+ strap,
12
+ value {
13
+ color: #569cd6;
14
+ }
15
+
16
+ regexp {
17
+ color: #d16969;
18
+ }
19
+
20
+ text {
21
+ color: #ce9178;
22
+ }
23
+
24
+ flow {
25
+ color: #c586c0;
26
+ }
27
+
28
+ digit {
29
+ color: #b5cea8;
30
+ }
31
+
32
+ label {
33
+ color: #569cd6;
34
+ }
35
+
36
+ @deep(@num, @color) {
37
+ deep@num {
38
+ color: @color;
39
+ }
40
+ }
41
+
42
+ @deep(0, #ffd700);
43
+ @deep(1, #da70d6);
44
+ @deep(2, #179fff);
45
+ @deep(3, #ffd700);
46
+ @deep(4, #da70d6);
47
+ @deep(5, #179fff);
48
+ @deep(6, #ffd700);
49
+ @deep(7, #da70d6);
50
+ @deep(8, #179fff);
51
+ @deep(9, #ffd700);
52
+ @deep(10, #da70d6);
53
+ @deep(11, #179fff);
54
+ @deep(12, #ffd700);
55
+ @deep(13, #da70d6);
56
+ @deep(14, #179fff);
57
+ @deep(15, #ffd700);
58
+ @deep(16, #da70d6);
59
+ @deep(17, #179fff);
60
+
61
+ express,
62
+ property {
63
+ color: #9cdcfe;
64
+ }
65
+
66
+ invoke,
67
+ method {
68
+ color: #dcdcaa;
69
+ }
70
+
71
+ predef {
72
+ color: #4ec9b0;
73
+ }
74
+
75
+ outside {
76
+ color: #4fc1ff;
77
+ }
78
+
79
+ comment {
80
+ color: #6a9955;
81
+ }
82
+ </style>
83
+ <script>
84
+ var encode = function (text) {
85
+ return text.replace(/[\<\>\|]/g, a => `&#${a.charCodeAt()};`)
86
+ };
87
+ var codecolor = function (c) {
88
+ var envs = c.envs;
89
+ var predefs = Object.create(null);
90
+ predefs.module = true;
91
+ predefs.exports = true;
92
+ predefs["module.exports"] = true;
93
+ predefs.Promise = true;
94
+ [Boolean, Number, String, Function, Object, Array, Date, RegExp, Error].forEach(p => predefs[p.name] = true);
95
+ var { STRAP, SCOPED, QUOTED, LABEL, COMMENT, STAMP, VALUE, EXPRESS, PROPERTY, PIECE } = c;
96
+ var deep = 0;
97
+ var setcolor = function (o) {
98
+ switch (o.type) {
99
+ case LABEL:
100
+ o.text = `<label>${o.text}</label>`;
101
+ break;
102
+ case QUOTED:
103
+ case PIECE:
104
+ if (!o.length) {
105
+ if (/^\//.test(o.text)) {
106
+ o.text = `<regexp>${encode(o.text)}</regexp>`;
107
+ }
108
+ else o.text = `<text>${encode(o.text)}</text>`;
109
+ break;
110
+ }
111
+ o.forEach(setcolor);
112
+ o.entry = "<text>" + o.entry;
113
+ o.leave = o.leave + "</text>";
114
+ break;
115
+ case SCOPED:
116
+ deep++;
117
+ o.forEach(setcolor);
118
+ deep--;
119
+ o.entry = `<deep${deep}>${o.entry}</deep${deep}>`;
120
+ o.leave = `<deep${deep}>${o.leave}</deep${deep}>`;
121
+ break;
122
+ case VALUE:
123
+ if (o.isdigit) o.text = `<digit>${o.text}</digit>`;
124
+ else o.text = `<value>${o.text}</value>`;
125
+ break;
126
+ case PROPERTY:
127
+ var next = o.next;
128
+ if (next && next.type === c.SCOPED && next.entry === '(') {
129
+ o.text = `<method>${o.text}</method>`;
130
+ }
131
+ else o.text = `<property>${o.text}</property>`;
132
+
133
+ break;
134
+ case EXPRESS:
135
+ var keys = o.text.split(".");
136
+ var next = o.next;
137
+ if (next && next.type === c.SCOPED && next.entry === '(') {
138
+ keys[keys.length - 1] = `<invoke>${keys[keys.length - 1]}</invoke>`;
139
+ }
140
+ var [name] = keys;
141
+ if (/^</.test(name));
142
+ else if (/^(arguments|this|super|Infinity|NaN)$/.test(name)) name = `<strap>${name}</strap>`;
143
+ else if (name in envs) name = name in predefs ? `<predef>${name}</predef>` : `<outside>${name}</outside>`;
144
+
145
+ keys[0] = name;
146
+ o.text = keys.map(k => /^\</.test(k) || !k ? k : `<express>${k}</express>`).join(".");
147
+ break;
148
+ case STRAP:
149
+ if (/^(if|else|switch|case|do|while|for|break|continue|default|import|from|as|export|try|catch|finally|await|yield|return)/.test(o.text))
150
+ o.text = `<flow>${o.text}</flow>`;
151
+ else o.text = `<strap>${o.text}</strap>`;
152
+ break;
153
+ case STAMP:
154
+ if (/^(=>)$/.test(o.text) || o.text === "*" && o.prev && o.prev.type === c.STRAP) o.text = `<strap>${encode(o.text)}</strap>`;
155
+ else if (!/^[<\/>]+$/.test(o.text));
156
+ else o.text = `<stamp>${encode(o.text)}</stamp>`;
157
+ break;
158
+ case COMMENT:
159
+ o.text = `<comment>${encode(o.text)}</comment>`;
160
+ break;
161
+ }
162
+ };
163
+ c.forEach(setcolor);
164
+
165
+ }
166
+ var typescript = new compile$Javascript;
167
+ typescript.straps = typescript.straps.concat("interface", "implements", "declare", "module", "readonly", "enum");
168
+ var codesupports = {
169
+ javascript(a) {
170
+ var c = compile$scanner2(a);
171
+ codecolor(c);
172
+ return c.toString();
173
+ },
174
+ typescript(a) {
175
+ var c = compile$scanner2(a, typescript);
176
+ codecolor(c);
177
+ return c.toString();
178
+ },
179
+ html(a) {
180
+ var code = compile$scanner2(a, 'html');
181
+ var scoped = code.scoped;
182
+ codecolor(code);
183
+ backEach(scoped.richNodes, n => {
184
+ if (n.isScript) {
185
+ var js = compile$scanner2(n.innerText);
186
+ codecolor(js);
187
+ code.splice(n.innerStart, n.innerEnd - n.innerStart, { text: js.toString() });
188
+ }
189
+ })
190
+ return code.toString();
191
+ },
192
+ css(a) {
193
+ var c = compile$scanner2(a);
194
+ codecolor(c);
195
+ return c.toString();
196
+ }
197
+ };
198
+ codesupports.cmd = codesupports.bat;
199
+ codesupports.jsx = codesupports.js = codesupports.javascript;
200
+ codesupports.tsx = codesupports.ts = codesupports.typescript;
201
+ codesupports.xml = codesupports.html;
202
+ function codetext(type, text) {
203
+ try {
204
+ type = type.toLowerCase();
205
+ if (type in codesupports) text = codesupports[type](text);
206
+ else text = encode(text);
207
+
208
+ } catch (e) {
209
+ console.error(e);
210
+ }
211
+ var codes = text.split(/\r\n|\r|\n/);
212
+ var minSpace = 0;
213
+ for (var c of codes) {
214
+ var m = /^\s*/.exec(c);
215
+ if (m && m[0].length < c.length) {
216
+ minSpace = m[0].length;
217
+ }
218
+ }
219
+ if (minSpace > 0) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
220
+ return `<code type=${type}>${codes.join("<br/>").replace(/\t/g, Array(5).join('&ensp;')).replace(/\s/g, '&ensp;')}</code> `;
221
+ }
222
+ codetext.encode = encode;
223
+ </script>
@@ -81,149 +81,10 @@ function richtext(line) {
81
81
  else a = p(line);
82
82
  if (a) content.push(a);
83
83
  }
84
- var codecolor = function (c) {
85
- var envs = c.envs;
86
- var predefs = Object.create(null);
87
- predefs.module = true;
88
- predefs.exports = true;
89
- predefs["module.exports"] = true;
90
- predefs.Promise = true;
91
- [Boolean, Number, String, Function, Object, Array, Date, RegExp, Error].forEach(p => predefs[p.name] = true);
92
- var { STRAP, SCOPED, QUOTED, LABEL, COMMENT, STAMP, VALUE, EXPRESS, PROPERTY, PIECE } = c;
93
- var deep = 0;
94
- var setcolor = function (o) {
95
- switch (o.type) {
96
- case LABEL:
97
- o.text = `<label>${o.text}</label>`;
98
- break;
99
- case QUOTED:
100
- case PIECE:
101
- if (!o.length) {
102
- if (/^\//.test(o.text)) {
103
- o.text = `<regexp>${encode(o.text)}</regexp>`;
104
- }
105
- else o.text = `<text>${encode(o.text)}</text>`;
106
- break;
107
- }
108
- o.forEach(setcolor);
109
- o.entry = "<text>" + o.entry;
110
- o.leave = o.leave + "</text>";
111
- break;
112
- case SCOPED:
113
- deep++;
114
- o.forEach(setcolor);
115
- deep--;
116
- o.entry = `<deep${deep}>${o.entry}</deep${deep}>`;
117
- o.leave = `<deep${deep}>${o.leave}</deep${deep}>`;
118
- break;
119
- case VALUE:
120
- if (o.isdigit) o.text = `<digit>${o.text}</digit>`;
121
- else o.text = `<value>${o.text}</value>`;
122
- break;
123
- case PROPERTY:
124
- var next = o.next;
125
- if (next && next.type === c.SCOPED && next.entry === '(') {
126
- o.text = `<method>${o.text}</method>`;
127
- }
128
- else o.text = `<property>${o.text}</property>`;
129
-
130
- break;
131
- case EXPRESS:
132
- var keys = o.text.split(".");
133
- var next = o.next;
134
- if (next && next.type === c.SCOPED && next.entry === '(') {
135
- keys[keys.length - 1] = `<invoke>${keys[keys.length - 1]}</invoke>`;
136
- }
137
- var [name] = keys;
138
- if (/^</.test(name));
139
- else if (/^(arguments|this|super|Infinity|NaN)$/.test(name)) name = `<strap>${name}</strap>`;
140
- else if (name in envs) name = name in predefs ? `<predef>${name}</predef>` : `<outside>${name}</outside>`;
141
-
142
- keys[0] = name;
143
- o.text = keys.map(k => /^\</.test(k) || !k ? k : `<express>${k}</express>`).join(".");
144
- break;
145
- case STRAP:
146
- if (/^(if|else|switch|case|do|while|for|break|continue|default|import|from|as|export|try|catch|finally|await|yield|return)/.test(o.text))
147
- o.text = `<flow>${o.text}</flow>`;
148
- else o.text = `<strap>${o.text}</strap>`;
149
- break;
150
- case STAMP:
151
- if (/^(=>)$/.test(o.text) || o.text === "*" && o.prev && o.prev.type === c.STRAP) o.text = `<strap>${encode(o.text)}</strap>`;
152
- else if (!/^[<\/>]+$/.test(o.text));
153
- else o.text = `<stamp>${encode(o.text)}</stamp>`;
154
- break;
155
- case COMMENT:
156
- o.text = `<comment>${encode(o.text)}</comment>`;
157
- break;
158
- }
159
- };
160
- c.forEach(setcolor);
161
-
162
- }
163
- var typescript = new compile$Javascript;
164
- typescript.straps = typescript.straps.concat("interface", "implements", "declare", "module", "readonly", "enum");
165
- var codesupports = {
166
- javascript(a) {
167
- var c = compile$scanner2(a);
168
- codecolor(c);
169
- return c.toString();
170
- },
171
- typescript(a) {
172
- var c = compile$scanner2(a, typescript);
173
- codecolor(c);
174
- return c.toString();
175
- },
176
- html(a) {
177
- var code = compile$scanner2(a, 'html');
178
- var scoped = code.scoped;
179
- codecolor(code);
180
- backEach(scoped.richNodes, n => {
181
- if (n.isScript) {
182
- var js = compile$scanner2(n.innerText);
183
- codecolor(js);
184
- code.splice(n.innerStart, n.innerEnd - n.innerStart, { text: js.toString() });
185
- }
186
- })
187
- return code.toString();
188
- },
189
- css(a) {
190
- var c = compile$scanner2(a);
191
- codecolor(c);
192
- return c.toString();
193
- }
194
- };
195
- codesupports.cmd = codesupports.bat;
196
- codesupports.jsx = codesupports.js = codesupports.javascript;
197
- codesupports.tsx = codesupports.ts = codesupports.typescript;
198
- codesupports.xml = codesupports.html;
199
- function codetext(type, text) {
200
- try {
201
- type = type.toLowerCase();
202
- if (type in codesupports) text = codesupports[type](text);
203
- else text = encode(text);
204
-
205
- } catch (e) {
206
- console.error(e);
207
- }
208
- text = text.replace(/^(\r\n|\r|\n)|\s+$/g, '');
209
- var codes = text.split(/\r\n|\r|\n/);
210
- var minSpace = 0;
211
- for (var c of codes) {
212
- var m = /^\s*/.exec(c);
213
- if (m && m[0].length < c.length) {
214
- minSpace = m[0].length;
215
- }
216
- }
217
- if (minSpace > 0) codes = codes.map(c => c.slice(minSpace));
218
- return `<code type=${type}>${codes.join("<br/>").replace(/\t/g, Array(5).join('&ensp;')).replace(/\s/g, '&ensp;')}</code> `;
219
- }
220
84
  /**
221
85
  * @type {Element}
222
86
  */
223
87
  var content;
224
- var encode = function (text) {
225
- return text.replace(/[\<\>\|]/g, a => `&#${a.charCodeAt()};`)
226
- };
227
88
  function markdown(text) {
228
89
  var c = content = [];
229
90
  text.replace(/ *(`+|\*+)(\S[\s\S]*?)\1 */g, function (_, q, c, i) {
@@ -233,16 +94,15 @@ function markdown(text) {
233
94
  if (m & 2) c = `<b>${c}</b>`;
234
95
  return c;
235
96
  }
236
- _ = encode(_.trim()).slice(1, -1);
97
+ _ = codetext.encode(_.trim()).slice(1, -1);
237
98
  if (/[\*#\.]\s/.test(text.slice(i - 1, i + 1))) _ = " " + _;
238
99
  if (q.length === 1) return `<m>${_}</m>`;
239
100
  var t = /^\S+/.exec(c);
240
- if (t) t = t[0]; c = c.slice(t.length);
101
+ if (t) t = t[0]; c = c.slice(t.length).replace(/^(\r\n|\r|\n)|\s+$/g, '');
241
102
  return codetext(t, c);
242
103
  }).replace(/\s*((&nbsp;\s*)+)/g, "$1").split(/\r\n|\r|\n/).forEach(richtext);
243
104
  list_elem = null;
244
105
  list_tag = null;
245
106
  content = null;
246
107
  return c.join('');
247
- }
248
- markdown.javascript = codetext.bind(null, 'javascript');
108
+ }
@@ -9,24 +9,14 @@ styles.info = styles.blue;
9
9
  styles.error = styles.danger = styles.red;
10
10
  styles.warn = styles.orange;
11
11
  styles.default = '#000a';
12
- var alerts = [];
13
- var clean = Cleanup(alerts);
14
- var build = function () {
15
- var sum = 0;
16
- alerts.forEach(function (elem) {
17
- if (elem.offsetTop !== sum) {
18
- elem.style.top = fromOffset(sum);
19
- };
20
- sum += elem.offsetHeight;
21
- });
22
- };
23
12
  var fontSize = 16;
24
13
  var singleHeight = fontSize * 3.125 | 0;
14
+ var container = document.createElement('alert-container');
15
+ css(container, 'height:0;left:0;right:0;transition:all 0.2s ease-out;position:absolute;')
25
16
  var _text = function (bgcolor, parameters) {
26
- var box = div();
27
- css(box, `top:${fromPixel(alerts.length ? Math.max.apply(Math, alerts.map(e => e.offsetTop + e.children[0].offsetHeight)) : 0)};height:0;line-height:${fromPixel(singleHeight - 20)};left:0;right:0;font-size:${fromPixel(fontSize)}; transition: all 0.2s ease-out;position:absolute;text-align:center;`);
28
- box.innerHTML = `<div style='width: 720px;white-space:pre-wrap;max-width:100%;display:inline-block;height:auto;padding:${fromPixel(10)} ${fromPixel(20)};background-color:${bgcolor};color:${color.pair(bgcolor, 1)};'>${[].slice.call(parameters, 0).join(", ")}</div>`;
29
- box.initialStyle = `margin-top:-${fromPixel(singleHeight)};opacity:0;`;
17
+ var box = document.createElement('div');
18
+ box.innerHTML = `<div style='padding:${fromPixel(10)} ${fromPixel(20)};background-color:${bgcolor};color:${color.pair(bgcolor, 1)};'>${[].slice.call(parameters, 0).join(", ")}</div>`;
19
+ box.initialStyle = `margin-top:-${fromPixel(singleHeight)};`;
30
20
  return box;
31
21
  };
32
22
  function alert() {
@@ -69,9 +59,8 @@ function alert() {
69
59
  if (onclose) {
70
60
  onclose.call(this, event);
71
61
  }
72
- clean(this);
73
- build();
74
62
  if (close_timer) clearTimeout(close_timer);
63
+ if (!container.children.length) remove(container);
75
64
  }
76
65
  onremove(elem, _onclose);
77
66
  var close_timer;
@@ -97,8 +86,8 @@ function alert() {
97
86
  waitclose(timeout, -100);
98
87
  }
99
88
  };
100
- alerts.push(elem);
101
- popup(elem);
89
+ if (!container.parentNode) popup(container);
90
+ appendChild(container, elem);
102
91
  return elem;
103
92
  }
104
93
  for (var k in styles) {
@@ -0,0 +1,10 @@
1
+ & {
2
+ width: 720px;
3
+ white-space: pre-wrap;
4
+ max-width: 100%;
5
+ display: block;
6
+ margin: 0 auto;
7
+ height: auto;
8
+ line-height: 1.2;
9
+ text-align: center;
10
+ }
@@ -1,8 +1,5 @@
1
1
  function data_test1() {
2
2
  var array = [{
3
- name: "王勇慧",
4
- birthday: "1992-11-13",
5
- }, {
6
3
  name: "李时珍",
7
4
  birthday: "1518-7-3"
8
5
  }, {
@@ -503,7 +503,7 @@ var directives = {
503
503
  }),
504
504
  src(src) {
505
505
  var parsedSrc = this.$src;
506
- return src2.call(this, parsedSrc ? parsedSrc.srcName : src);
506
+ return src2.call(this, parsedSrc && /[\{\[\s]/.test(src) ? parsedSrc.srcName : src);
507
507
  },
508
508
  model(search, target) {
509
509
  var getter = createGetter(this, search);
@@ -2,7 +2,7 @@
2
2
 
3
3
  var fs = require("fs").promises;
4
4
  var path = require("path");
5
- var comm_file_reg = /\.([tj]sx?|xht|md|less)$/i;
5
+ var comm_file_reg = /\.([tj]sx?|xht|md|less|html)$/i;
6
6
  var basepath = path.join(String(__efront), 'coms');
7
7
  if (req.id) {
8
8
  var compath = path.join(basepath, req.id);
package/docs/main.xht CHANGED
@@ -150,7 +150,13 @@
150
150
  var map = Object.create(null);
151
151
  var children = [];
152
152
  for (var a of c.children) {
153
- if (!/\.([jt]sx?|xht)$/i.test(a) || /_test\.([tj]sx?|xht)$/i.test(a)) {
153
+ if (/_test\.([tj]sx?|xht|html|less|md)$/i.test(a)) {
154
+ var testName = a.replace(/\.\w+$/g, '');
155
+ if (!map[testName]) map[testName] = [];
156
+ map[testName].push(a);
157
+ continue;
158
+ }
159
+ else if (!/\.([jt]sx?|xht)$/i.test(a)) {
154
160
  map[a.replace(/\.\w+$/g, a => a.toLowerCase())] = a;
155
161
  continue;
156
162
  }
@@ -159,7 +165,7 @@
159
165
  for (var cc of children) {
160
166
  cc.data = {
161
167
  mark: !!map[cc.name.replace(/\.[tj]sx?$/i, ".md")],
162
- test: !!map[cc.name.replace(/\.[tj]sx?$/i, "_test.js")],
168
+ test: map[cc.name.replace(/\.[tj]sx?$/i, "_test")],
163
169
  less: !!map[cc.name.replace(/\.[tj]sx?$/i, ".less")]
164
170
  }
165
171
  if (cc.data.less) cc.name += "<f less></f>"
package/docs/mark.xht CHANGED
@@ -55,86 +55,6 @@
55
55
  border: 1.2px solid #0007;
56
56
  }
57
57
 
58
- code {
59
- padding: 10px 20px;
60
- border-radius: 3px;
61
- display: inline-block;
62
- background: #333;
63
- color: #d4d4d4;
64
- vertical-align: top;
65
- }
66
-
67
- strap,
68
- value {
69
- color: #569cd6;
70
- }
71
-
72
- regexp {
73
- color: #d16969;
74
- }
75
-
76
- text {
77
- color: #ce9178;
78
- }
79
-
80
- flow {
81
- color: #c586c0;
82
- }
83
-
84
- digit {
85
- color: #b5cea8;
86
- }
87
-
88
- label {
89
- color: #569cd6;
90
- }
91
-
92
- @deep(@num, @color) {
93
- deep@num {
94
- color: @color;
95
- }
96
- }
97
-
98
- @deep(0, #ffd700);
99
- @deep(1, #da70d6);
100
- @deep(2, #179fff);
101
- @deep(3, #ffd700);
102
- @deep(4, #da70d6);
103
- @deep(5, #179fff);
104
- @deep(6, #ffd700);
105
- @deep(7, #da70d6);
106
- @deep(8, #179fff);
107
- @deep(9, #ffd700);
108
- @deep(10, #da70d6);
109
- @deep(11, #179fff);
110
- @deep(12, #ffd700);
111
- @deep(13, #da70d6);
112
- @deep(14, #179fff);
113
- @deep(15, #ffd700);
114
- @deep(16, #da70d6);
115
- @deep(17, #179fff);
116
-
117
- express,
118
- property {
119
- color: #9cdcfe;
120
- }
121
-
122
- invoke,
123
- method {
124
- color: #dcdcaa;
125
- }
126
-
127
- predef {
128
- color: #4ec9b0;
129
- }
130
-
131
- outside {
132
- color: #4fc1ff;
133
- }
134
-
135
- comment {
136
- color: #6a9955;
137
- }
138
58
  </style>
139
59
  <script>
140
60
  var history = [];
@@ -524,7 +524,7 @@
524
524
  var liang = 0, fanyi = {};
525
525
  for (var { lang: k, id } of supports) {
526
526
  if (!d[k]) continue;
527
- if (preMap[d[k]]) continue loop;
527
+ if (preMap[d[k]] && preMap[d[k]] !== d) continue loop;
528
528
  preMap[d[k]] = d;
529
529
  liang++;
530
530
  fanyi[id] = d[k];