1 | 'use strict';
|
2 |
|
3 | const version = '13.3.0';
|
4 |
|
5 | const isBuffer = Buffer.isBuffer;
|
6 |
|
7 | const freeze = Object.freeze;
|
8 |
|
9 | const undefined$1 = void 0;
|
10 |
|
11 | const hasOwnProperty = Object.prototype.hasOwnProperty;
|
12 |
|
13 | const create = Object.create;
|
14 |
|
15 | const Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
16 |
|
17 | var ownKeys = typeof Reflect==='object' ? Reflect.ownKeys : Object.getOwnPropertyNames;
|
18 | const NULL = (
|
19 |
|
20 | function () {
|
21 | var assign = Object.assign || function assign (target, source) {
|
22 | for ( var key in source ) {
|
23 | if ( hasOwnProperty.call(source, key) ) { target[key] = source[key]; }
|
24 | }
|
25 | return target;
|
26 | };
|
27 | var DESCRIPTOR = create(null);
|
28 | DESCRIPTOR.enumerable = true;
|
29 | DESCRIPTOR.configurable = true;
|
30 | function getOwnPropertyDescriptors (object) {
|
31 | var descriptorMap = create(null);
|
32 | for ( var keys = ownKeys(object), length = keys.length, index = 0; index<length; ++index ) {
|
33 | var key = keys[index];
|
34 | var nullDescriptor = create(DESCRIPTOR);
|
35 | var protoDescriptor = Object_getOwnPropertyDescriptor(object, key);
|
36 | if ( protoDescriptor.hasOwnProperty('value') ) {
|
37 | nullDescriptor.value = protoDescriptor.value;
|
38 | nullDescriptor.writable = true;
|
39 | }
|
40 | else {
|
41 | nullDescriptor.get = protoDescriptor.get;
|
42 | nullDescriptor.set = protoDescriptor.set;
|
43 | }
|
44 | descriptorMap[key] = nullDescriptor;
|
45 | }
|
46 | return descriptorMap;
|
47 | }
|
48 | var NULL = function (object, define) {
|
49 | if ( object ) {
|
50 | return define
|
51 | ? create(null, getOwnPropertyDescriptors(object))
|
52 | : assign( create(null), object);
|
53 | }
|
54 | };
|
55 | delete NULL.name;
|
56 |
|
57 | NULL.prototype = null;
|
58 | freeze(NULL);
|
59 | return NULL;
|
60 | }()
|
61 |
|
62 | );
|
63 |
|
64 | const assign = Object.assign;
|
65 |
|
66 | const toStringTag = typeof Symbol!=='undefined' ? Symbol.toStringTag : undefined;
|
67 |
|
68 | const defineProperty = Object.defineProperty;
|
69 |
|
70 | const seal = Object.seal;
|
71 |
|
72 | const Default = (
|
73 |
|
74 | function Default (exports, addOnOrigin) {
|
75 | return function Module (exports, addOnOrigin) {
|
76 | if ( !addOnOrigin ) { addOnOrigin = exports; exports = create(null); }
|
77 | if ( assign ) { assign(exports, addOnOrigin); }
|
78 | else { for ( var key in addOnOrigin ) { if ( hasOwnProperty.call(addOnOrigin, key) ) { exports[key] = addOnOrigin[key]; } } }
|
79 | exports['default'] = exports;
|
80 | typeof exports==='function' && exports.prototype && seal(exports.prototype);
|
81 | if ( toStringTag ) {
|
82 | var descriptor = create(null);
|
83 | descriptor.value = 'Module';
|
84 | defineProperty(exports, toStringTag, descriptor);
|
85 | }
|
86 | return freeze(exports);
|
87 | }(exports, addOnOrigin);
|
88 | }
|
89 |
|
90 | );
|
91 |
|
92 |
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 | var Cf = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/g;
|
104 |
|
105 | var CANT_IN_SINGLE_QUOTE = /[\n\r'\\\u2028\u2029]/g;
|
106 | function staticallyEscape (cant_in_single_quote ) {
|
107 | return CHAR_TO_ESCAPED[cant_in_single_quote];
|
108 | }
|
109 |
|
110 | var CHAR_TO_ESCAPED = { '\n': '\\n', '\r': '\\r', '\'': '\\\'', '\\': '\\\\', '\u2028': '\\u2028', '\u2029': '\\u2029' };
|
111 | function dynamicallyEscape (char_in_cf ) {
|
112 | if ( char_in_cf.length>1 ) {
|
113 | return dynamicallyEscape(char_in_cf.charAt(0))+dynamicallyEscape(char_in_cf.charAt(1));
|
114 | }
|
115 | var hex = char_in_cf.charCodeAt(0).toString(16).toUpperCase();
|
116 | switch ( hex.length ) {
|
117 | case 4:
|
118 | return '\\u'+hex;
|
119 | case 3:
|
120 | return '\\u0'+hex;
|
121 | case 2:
|
122 | return '\\x'+hex;
|
123 | }
|
124 | return '\\x0'+hex;
|
125 | }
|
126 |
|
127 |
|
128 |
|
129 | function StringLiteral (string ) {
|
130 | return '\''
|
131 | +string
|
132 | .replace(CANT_IN_SINGLE_QUOTE, staticallyEscape )
|
133 | .replace(Cf, dynamicallyEscape )
|
134 | +'\'';
|
135 | }
|
136 |
|
137 |
|
138 |
|
139 | const from = (
|
140 |
|
141 | typeof Buffer==='function' && hasOwnProperty.call(Buffer, 'from') ? Buffer.from : undefined$1
|
142 |
|
143 | );
|
144 |
|
145 | const RegExp_prototype = RegExp.prototype;
|
146 |
|
147 |
|
148 |
|
149 |
|
150 |
|
151 |
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 | var NON_SCALAR = (
|
159 | 'unicode' in RegExp_prototype
|
160 | ? RegExp('[\\uD800-\\uDFFF]', 'u')
|
161 | : /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/
|
162 | );
|
163 |
|
164 | function buffer2object (buffer , options ) {
|
165 |
|
166 | var length = buffer.length;
|
167 | if ( !length ) { return { BOM: '', UTF: '', string: '' }; }
|
168 |
|
169 | var encoding ;
|
170 | var swapped ;
|
171 | var BOM ;
|
172 | var UTF ;
|
173 |
|
174 | var throwError = !options || options.throwError!==false;
|
175 |
|
176 | var firstByte = buffer[0];
|
177 | if ( firstByte===0xEF ) {
|
178 | if ( length>2 && buffer[1]===0xBB && buffer[2]===0xBF ) {
|
179 | if ( !options || options.stripBOM!==false ) { buffer = buffer.slice(3); }
|
180 | BOM = '\uFEFF';
|
181 | UTF = '8';
|
182 | }
|
183 | else {
|
184 | if ( throwError ) { throw Error('残破的 UTF-8 BOM 头'); }
|
185 | BOM = '';
|
186 | UTF = '';
|
187 | }
|
188 | }
|
189 | else if ( firstByte===0xFF ) {
|
190 | if ( length>1 && buffer[1]===0xFE ) {
|
191 | if ( throwError && length%2 ) { throw Error('UTF-16 的字节数必须为 2 的倍数'); }
|
192 | if ( !options || options.stripBOM!==false ) { buffer = buffer.slice(2); }
|
193 | encoding = 'ucs2';
|
194 | BOM = '\uFEFF';
|
195 | UTF = '16LE';
|
196 | }
|
197 | else {
|
198 | if ( throwError ) { throw Error('残破的 UTF-16LE BOM 头'); }
|
199 | BOM = '';
|
200 | UTF = '';
|
201 | }
|
202 | }
|
203 | else if ( firstByte===0xFE ) {
|
204 | if ( length>1 && buffer[1]===0xFF ) {
|
205 | if ( throwError && length%2 ) { throw Error('UTF-16 的字节数必须为 2 的倍数'); }
|
206 | buffer.swap16();
|
207 | if ( options ) {
|
208 | if ( !options.swappable ) { swapped = buffer; }
|
209 | if ( options.stripBOM!==false ) { buffer = buffer.slice(2); }
|
210 | }
|
211 | else {
|
212 | swapped = buffer;
|
213 | buffer = buffer.slice(2);
|
214 | }
|
215 | encoding = 'ucs2';
|
216 | BOM = '\uFEFF';
|
217 | UTF = '16BE';
|
218 | }
|
219 | else {
|
220 | if ( throwError ) { throw Error('残破的 UTF-16BE BOM 头'); }
|
221 | BOM = '';
|
222 | UTF = '';
|
223 | }
|
224 | }
|
225 | else if ( options && options.startsWithASCII ) {
|
226 | if ( firstByte===0x00 ) {
|
227 | if ( throwError ) {
|
228 | if ( length>2 && buffer[2]===0x00 ) { throw Error('暂不支持 UTF-32 编码'); }
|
229 | if ( length%2 ) { throw Error('UTF-16 的字节数必须为 2 的倍数'); }
|
230 | }
|
231 | buffer.swap16();
|
232 | if ( !options.swappable ) { swapped = buffer; }
|
233 | encoding = 'ucs2';
|
234 | UTF = '16BE';
|
235 | }
|
236 | else if ( length>1 && buffer[1]===0x00 ) {
|
237 | if ( throwError ) {
|
238 | if ( length>3 && buffer[3]===0x00 ) { throw Error('暂不支持 UTF-32 编码'); }
|
239 | if ( length%2 ) { throw Error('UTF-16 的字节数必须为 2 的倍数'); }
|
240 | }
|
241 | encoding = 'ucs2';
|
242 | UTF = '16LE';
|
243 | }
|
244 | else {
|
245 | UTF = '8';
|
246 | }
|
247 | BOM = '';
|
248 | }
|
249 | else {
|
250 | BOM = '';
|
251 | UTF = '';
|
252 | }
|
253 |
|
254 | var string = encoding ? buffer.toString(encoding) : buffer.toString();
|
255 | if ( throwError ) {
|
256 | if ( from(string, encoding).equals(buffer) ) {
|
257 | swapped && swapped.swap16();
|
258 | if ( NON_SCALAR.test(string) ) { throw Error('代理对码点不能单独出现'); }
|
259 | }
|
260 | else {
|
261 | swapped && swapped.swap16();
|
262 | throw Error('文件中存在超出 Unicode 表示范围的内容');
|
263 | }
|
264 | }
|
265 | else { swapped && swapped.swap16(); }
|
266 | return { BOM, UTF, string };
|
267 |
|
268 | }
|
269 |
|
270 |
|
271 |
|
272 | const slice = Array.prototype.slice;
|
273 |
|
274 |
|
275 |
|
276 |
|
277 |
|
278 |
|
279 |
|
280 |
|
281 |
|
282 |
|
283 |
|
284 |
|
285 | var NT = /[\n\t]/g;
|
286 |
|
287 | function Source (raw , substitutions ) {
|
288 | var source = raw[0];
|
289 | for ( var length = substitutions.length, index = 0; index<length; ) {
|
290 | var substitution = substitutions[index];
|
291 | source += ( substitution instanceof RegExp ? substitution.source : substitution )+raw[++index];
|
292 | }
|
293 | return source.replace(NT, '');
|
294 | }
|
295 |
|
296 |
|
297 | function newRegExp (flags_template ) {
|
298 | return typeof flags_template==='string'
|
299 | ? function newRegExp (template ) {
|
300 | return new RegExp(
|
301 | Source(
|
302 | template.raw,
|
303 | slice.call(arguments, 1)
|
304 | ),
|
305 | flags_template
|
306 | );
|
307 | }
|
308 | : new RegExp(
|
309 | Source(
|
310 | flags_template.raw,
|
311 | slice.call(arguments, 1)
|
312 | )
|
313 | );
|
314 | }
|
315 |
|
316 |
|
317 |
|
318 | const NONCHARACTER = newRegExp('u')`[
|
319 | \uFDD0-\uFDEF
|
320 | \uFFFE\u{1FFFE}\u{2FFFE}\u{3FFFE}\u{4FFFE}\u{5FFFE}\u{6FFFE}\u{7FFFE}\u{8FFFE}\u{9FFFE}\u{AFFFE}\u{BFFFE}\u{CFFFE}\u{DFFFE}\u{EFFFE}\u{FFFFE}\u{10FFFE}
|
321 | \uFFFF\u{1FFFF}\u{2FFFF}\u{3FFFF}\u{4FFFF}\u{5FFFF}\u{6FFFF}\u{7FFFF}\u{8FFFF}\u{9FFFF}\u{AFFFF}\u{BFFFF}\u{CFFFF}\u{DFFFF}\u{EFFFF}\u{FFFFF}\u{10FFFF}
|
322 | ]`;
|
323 | const CONTROL_CHARACTER = /[\x01-\x08\x0B\x0E-\x1F\x7F-\x9F]/;
|
324 |
|
325 | const ASCII_WHITESPACE = /[\t\n\f\r ]/;
|
326 | const ASCII_ALPHA = /[a-zA-Z]/;
|
327 |
|
328 | const TOKENS = /[^\s=;]+/g;
|
329 | const AliasName = /[A-Z][\w\-]*/;
|
330 | const localOrComponentName = /[A-Za-z][A-Za-z0-9\-]*/;
|
331 | const localName$1 = /[a-z][a-z0-9\-]*/;
|
332 | const className = /[\w\-]+/;
|
333 |
|
334 | const ATTRIBUTE_NAME = /[^\0\t\n\f\r "'<>/=]+/;
|
335 | const UNQUOTED_ATTRIBUTE_VALUE = /[^\0\t\n\f\r "'=<>`]+/;
|
336 | const ATTRIBUTE_NAME_VALUE = newRegExp`
|
337 | (${ATTRIBUTE_NAME})
|
338 | ${ASCII_WHITESPACE}*
|
339 | =
|
340 | ${ASCII_WHITESPACE}*
|
341 | (
|
342 | "[^"]*"
|
343 | |
|
344 | '[^']*'
|
345 | |
|
346 | ${UNQUOTED_ATTRIBUTE_VALUE}
|
347 | )`;
|
348 | const ATTRIBUTE = newRegExp('g')`
|
349 | ${ATTRIBUTE_NAME}
|
350 | (?:
|
351 | ${ASCII_WHITESPACE}*
|
352 | =
|
353 | ${ASCII_WHITESPACE}*
|
354 | (?:
|
355 | "[^\0"]*"
|
356 | |
|
357 | '[^\0']*'
|
358 | |
|
359 | ${UNQUOTED_ATTRIBUTE_VALUE}
|
360 | )
|
361 | )?`;
|
362 |
|
363 | const TAG_NAME = newRegExp`${ASCII_ALPHA}[^\0\t\n\f\r />]*`;
|
364 | const TAG = newRegExp`
|
365 | ^
|
366 | <
|
367 | (/?)
|
368 | (${TAG_NAME})
|
369 | ((?:
|
370 | ${ASCII_WHITESPACE}+
|
371 | ${ATTRIBUTE}
|
372 | )*)
|
373 | ${ASCII_WHITESPACE}*
|
374 | (/?)
|
375 | >
|
376 | `;
|
377 |
|
378 | const TAG_EMIT_CHAR = /[\t\n\f\r />]/;
|
379 | const TAG_LIKE = newRegExp`
|
380 | <
|
381 | (?:
|
382 | /?${TAG_NAME}${TAG_EMIT_CHAR}
|
383 | |
|
384 | [!?]
|
385 | )
|
386 | `;
|
387 |
|
388 | const IS_TAG = newRegExp`
|
389 | ^
|
390 | <
|
391 | /?
|
392 | ${TAG_NAME}
|
393 | ${TAG_EMIT_CHAR}
|
394 | `;
|
395 |
|
396 | const isArray = Array.isArray;
|
397 |
|
398 |
|
399 |
|
400 |
|
401 |
|
402 |
|
403 |
|
404 |
|
405 |
|
406 |
|
407 |
|
408 |
|
409 | var clearRegExp = '$_' in RegExp
|
410 | ? function () {
|
411 | var REGEXP = /^/;
|
412 | return function clearRegExp (value ) {
|
413 | REGEXP.test('');
|
414 | return value;
|
415 | };
|
416 | }()
|
417 | : function clearRegExp (value ) {
|
418 | return value;
|
419 | };
|
420 |
|
421 | var NEED_TO_ESCAPE_IN_REGEXP = /^[$()*+\-.?[\\\]^{|]/;
|
422 | var SURROGATE_PAIR = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/;
|
423 | var GROUP = create(null);
|
424 |
|
425 | function groupify (branches , uFlag , noEscape ) {
|
426 | var group = create(null);
|
427 | var appendBranch = uFlag ? appendPointBranch : appendCodeBranch;
|
428 | for ( var length = branches.length, index = 0; index<length; ++index ) { appendBranch(group, branches[index]); }
|
429 | return sourcify(group, !noEscape);
|
430 | }
|
431 | function appendPointBranch (group , branch ) {
|
432 | if ( branch ) {
|
433 | var char = SURROGATE_PAIR.test(branch) ? branch.slice(0, 2) : branch.charAt(0);
|
434 | appendPointBranch(group[char] || ( group[char] = create(null) ), branch.slice(char.length));
|
435 | }
|
436 | else { group[''] = GROUP; }
|
437 | }
|
438 |
|
439 | function appendCodeBranch (group , branch ) {
|
440 | if ( branch ) {
|
441 | var char = branch.charAt(0);
|
442 | appendCodeBranch(group[char] || ( group[char] = create(null) ), branch.slice(1));
|
443 | }
|
444 | else { group[''] = GROUP; }
|
445 | }
|
446 |
|
447 | function sourcify (group , needEscape ) {
|
448 | var branches = [];
|
449 | var singleCharactersBranch = [];
|
450 | var noEmptyBranch = true;
|
451 | for ( var char in group ) {
|
452 | if ( char ) {
|
453 | var sub_branches = sourcify(group[char], needEscape);
|
454 | if ( needEscape && NEED_TO_ESCAPE_IN_REGEXP.test(char) ) { char = '\\'+char; }
|
455 | sub_branches ? branches.push(char+sub_branches) : singleCharactersBranch.push(char);
|
456 | }
|
457 | else { noEmptyBranch = false; }
|
458 | }
|
459 | singleCharactersBranch.length && branches.unshift(singleCharactersBranch.length===1 ? singleCharactersBranch[0] : '['+singleCharactersBranch.join('')+']');
|
460 | return branches.length===0
|
461 | ? ''
|
462 | : ( branches.length===1 && ( singleCharactersBranch.length || noEmptyBranch )
|
463 | ? branches[0]
|
464 | : '(?:'+branches.join('|')+')'
|
465 | )
|
466 | +( noEmptyBranch ? '' : '?' );
|
467 | }
|
468 |
|
469 |
|
470 |
|
471 | var FLAGS = /\/([a-fh-z]*)g([a-fh-z]*)$/;
|
472 |
|
473 | function removeGlobal (regExp ) {
|
474 | var flags = FLAGS.exec(''+regExp);
|
475 | return flags ? RegExp(regExp, flags[1]+flags[2]) : regExp;
|
476 | }
|
477 |
|
478 | function EOL (allow , disallow_uniform , uniform_disallow ) {
|
479 |
|
480 | var DISALLOW ;
|
481 | var FIRST ;
|
482 | if ( typeof disallow_uniform==='object' ) {
|
483 | DISALLOW = isArray(disallow_uniform) ? RegExp(groupify(disallow_uniform)) : removeGlobal(disallow_uniform);
|
484 | FIRST = !uniform_disallow;
|
485 | }
|
486 | else if ( typeof uniform_disallow==='object' ) {
|
487 | DISALLOW = isArray(uniform_disallow) ? RegExp(groupify(uniform_disallow)) : removeGlobal(uniform_disallow);
|
488 | FIRST = !disallow_uniform;
|
489 | }
|
490 | else {
|
491 | FIRST = !( uniform_disallow || disallow_uniform );
|
492 | }
|
493 | var ALLOW = isArray(allow)
|
494 | ? FIRST
|
495 | ? RegExp(groupify(allow))
|
496 | : RegExp(groupify(allow), 'g')
|
497 | : allow;
|
498 |
|
499 | return function EOL (string ) {
|
500 | if ( DISALLOW && DISALLOW.test(string) ) { throw clearRegExp(SyntaxError)('存在禁用换行符'); }
|
501 | var eols = clearRegExp(string.match(ALLOW)) ;
|
502 | if ( !eols ) { return ''; }
|
503 | if ( FIRST ) { return eols[0]; }
|
504 | var eol = eols[0];
|
505 | for ( var length = eols.length, index = 1; index<length; ++index ) { if ( eols[index]!==eol ) { throw SyntaxError('存在多种换行符'); } }
|
506 | return eol;
|
507 | };
|
508 |
|
509 | }
|
510 |
|
511 | var LF = '\n';
|
512 | var FF = '\f';
|
513 | var CRLF = '\r\n';
|
514 | var CR = '\r';
|
515 | var LS = '\u2028';
|
516 | var PS = '\u2029';
|
517 |
|
518 |
|
519 |
|
520 | const checkNewline = (
|
521 |
|
522 | function RETURN (value) {
|
523 | return value;
|
524 | }
|
525 |
|
526 | );
|
527 |
|
528 | const VOID_ELEMENTS = /^(?:area|b(?:r|ase)|co(?:l|mmand)|embed|hr|i(?:mg|nput)|keygen|link|meta|param|source|track|wbr)$/i;
|
529 |
|
530 | const RAW_TEXT_ELEMENTS = /^s(?:cript|tyle)$/i;
|
531 |
|
532 | const ESCAPABLE_RAW_TEXT_ELEMENTS = /^t(?:extarea|itle)$/i;
|
533 |
|
534 | const FOREIGN_ELEMENTS = /^(?:s(?:vg|witch|ymbol)|animate|c(?:ircle|lippath|ursor)|de(?:fs|sc)|ellipse|f(?:ilter|o(?:nt\-face|reignObject))|g(?:lyph)?|image|line|m(?:a(?:rker|sk)|issing\-glyph)|p(?:at(?:h|tern)|oly(?:gon|line))|rect|t(?:ext(?:path)?|span)|use|view)$/i;
|
535 |
|
536 | const NON_ASCII = /[^\x00-\x7F]/u;
|
537 | const NON_TAB = /[^\t\x20]/g;
|
538 |
|
539 | function Snippet (whole , errorPosition ) {
|
540 |
|
541 | const linesAroundError = [];
|
542 | const linesBeforeError = whole.slice(0, errorPosition).split('\n');
|
543 | const errorLineNumber = linesBeforeError.length;
|
544 |
|
545 | if ( errorLineNumber>1 ) {
|
546 | linesAroundError.push({
|
547 | number: errorLineNumber-1+'',
|
548 | value: linesBeforeError[errorLineNumber-2],
|
549 | });
|
550 | }
|
551 |
|
552 | const errorLineEnd = whole.indexOf('\n', errorPosition);
|
553 | linesAroundError.push({
|
554 | number: errorLineNumber+'',
|
555 | value: linesBeforeError[errorLineNumber-1]+( errorLineEnd<0
|
556 | ? whole.slice(errorPosition)
|
557 | : whole.slice(errorPosition, errorLineEnd)
|
558 | ),
|
559 | });
|
560 | linesAroundError.push({
|
561 | number: '',
|
562 | value: linesBeforeError[errorLineNumber-1].replace(NON_ASCII, '\u3000').replace(NON_TAB, '\x20')+'^',
|
563 | });
|
564 |
|
565 | let maxLengthOfLineNumber ;
|
566 | if ( errorLineEnd<0 ) { maxLengthOfLineNumber = ( errorLineNumber+'' ).length; }
|
567 | else {
|
568 | maxLengthOfLineNumber = ( errorLineNumber+1+'' ).length;
|
569 | const nextEnd = whole.indexOf('\n', errorLineEnd+1);
|
570 | const next = nextEnd<0
|
571 | ? whole.slice(errorLineEnd+1)
|
572 | : whole.slice(errorLineEnd+1, nextEnd);
|
573 | linesAroundError.push({
|
574 | number: errorLineNumber+1+'',
|
575 | value: next,
|
576 | });
|
577 | }
|
578 |
|
579 | const errorSnippet = [];
|
580 | for ( let { number, value } of linesAroundError ) {
|
581 | number = number ? number.padStart(maxLengthOfLineNumber, '0') : ' '.repeat(maxLengthOfLineNumber);
|
582 | errorSnippet.push(`${number}\t|${value}`);
|
583 | }
|
584 | return errorSnippet.join('\n');
|
585 |
|
586 | }
|
587 |
|
588 | const throwSyntaxError = (
|
589 |
|
590 | function throwSyntaxError (message) {
|
591 | throw SyntaxError(message);
|
592 | }
|
593 |
|
594 | );
|
595 |
|
596 | const fromCodePoint = String.fromCodePoint;
|
597 |
|
598 | const SEMICOLON_ENTITIES = NULL({
|
599 | Aacute: 'Á',
|
600 | aacute: 'á',
|
601 | Abreve: 'Ă',
|
602 | abreve: 'ă',
|
603 | ac: '∾',
|
604 | acd: '∿',
|
605 | acE: '∾̳',
|
606 | Acirc: 'Â',
|
607 | acirc: 'â',
|
608 | acute: '´',
|
609 | Acy: 'А',
|
610 | acy: 'а',
|
611 | AElig: 'Æ',
|
612 | aelig: 'æ',
|
613 | af: '\u2061',
|
614 | Afr: '𝔄',
|
615 | afr: '𝔞',
|
616 | Agrave: 'À',
|
617 | agrave: 'à',
|
618 | alefsym: 'ℵ',
|
619 | aleph: 'ℵ',
|
620 | Alpha: 'Α',
|
621 | alpha: 'α',
|
622 | Amacr: 'Ā',
|
623 | amacr: 'ā',
|
624 | amalg: '⨿',
|
625 | amp: '&',
|
626 | AMP: '&',
|
627 | andand: '⩕',
|
628 | And: '⩓',
|
629 | and: '∧',
|
630 | andd: '⩜',
|
631 | andslope: '⩘',
|
632 | andv: '⩚',
|
633 | ang: '∠',
|
634 | ange: '⦤',
|
635 | angle: '∠',
|
636 | angmsdaa: '⦨',
|
637 | angmsdab: '⦩',
|
638 | angmsdac: '⦪',
|
639 | angmsdad: '⦫',
|
640 | angmsdae: '⦬',
|
641 | angmsdaf: '⦭',
|
642 | angmsdag: '⦮',
|
643 | angmsdah: '⦯',
|
644 | angmsd: '∡',
|
645 | angrt: '∟',
|
646 | angrtvb: '⊾',
|
647 | angrtvbd: '⦝',
|
648 | angsph: '∢',
|
649 | angst: 'Å',
|
650 | angzarr: '⍼',
|
651 | Aogon: 'Ą',
|
652 | aogon: 'ą',
|
653 | Aopf: '𝔸',
|
654 | aopf: '𝕒',
|
655 | apacir: '⩯',
|
656 | ap: '≈',
|
657 | apE: '⩰',
|
658 | ape: '≊',
|
659 | apid: '≋',
|
660 | apos: '\'',
|
661 | ApplyFunction: '\u2061',
|
662 | approx: '≈',
|
663 | approxeq: '≊',
|
664 | Aring: 'Å',
|
665 | aring: 'å',
|
666 | Ascr: '𝒜',
|
667 | ascr: '𝒶',
|
668 | Assign: '≔',
|
669 | ast: '*',
|
670 | asymp: '≈',
|
671 | asympeq: '≍',
|
672 | Atilde: 'Ã',
|
673 | atilde: 'ã',
|
674 | Auml: 'Ä',
|
675 | auml: 'ä',
|
676 | awconint: '∳',
|
677 | awint: '⨑',
|
678 | backcong: '≌',
|
679 | backepsilon: '϶',
|
680 | backprime: '‵',
|
681 | backsim: '∽',
|
682 | backsimeq: '⋍',
|
683 | Backslash: '∖',
|
684 | Barv: '⫧',
|
685 | barvee: '⊽',
|
686 | barwed: '⌅',
|
687 | Barwed: '⌆',
|
688 | barwedge: '⌅',
|
689 | bbrk: '⎵',
|
690 | bbrktbrk: '⎶',
|
691 | bcong: '≌',
|
692 | Bcy: 'Б',
|
693 | bcy: 'б',
|
694 | bdquo: '„',
|
695 | becaus: '∵',
|
696 | because: '∵',
|
697 | Because: '∵',
|
698 | bemptyv: '⦰',
|
699 | bepsi: '϶',
|
700 | bernou: 'ℬ',
|
701 | Bernoullis: 'ℬ',
|
702 | Beta: 'Β',
|
703 | beta: 'β',
|
704 | beth: 'ℶ',
|
705 | between: '≬',
|
706 | Bfr: '𝔅',
|
707 | bfr: '𝔟',
|
708 | bigcap: '⋂',
|
709 | bigcirc: '◯',
|
710 | bigcup: '⋃',
|
711 | bigodot: '⨀',
|
712 | bigoplus: '⨁',
|
713 | bigotimes: '⨂',
|
714 | bigsqcup: '⨆',
|
715 | bigstar: '★',
|
716 | bigtriangledown: '▽',
|
717 | bigtriangleup: '△',
|
718 | biguplus: '⨄',
|
719 | bigvee: '⋁',
|
720 | bigwedge: '⋀',
|
721 | bkarow: '⤍',
|
722 | blacklozenge: '⧫',
|
723 | blacksquare: '▪',
|
724 | blacktriangle: '▴',
|
725 | blacktriangledown: '▾',
|
726 | blacktriangleleft: '◂',
|
727 | blacktriangleright: '▸',
|
728 | blank: '␣',
|
729 | blk12: '▒',
|
730 | blk14: '░',
|
731 | blk34: '▓',
|
732 | block: '█',
|
733 | bne: '=⃥',
|
734 | bnequiv: '≡⃥',
|
735 | bNot: '⫭',
|
736 | bnot: '⌐',
|
737 | Bopf: '𝔹',
|
738 | bopf: '𝕓',
|
739 | bot: '⊥',
|
740 | bottom: '⊥',
|
741 | bowtie: '⋈',
|
742 | boxbox: '⧉',
|
743 | boxdl: '┐',
|
744 | boxdL: '╕',
|
745 | boxDl: '╖',
|
746 | boxDL: '╗',
|
747 | boxdr: '┌',
|
748 | boxdR: '╒',
|
749 | boxDr: '╓',
|
750 | boxDR: '╔',
|
751 | boxh: '─',
|
752 | boxH: '═',
|
753 | boxhd: '┬',
|
754 | boxHd: '╤',
|
755 | boxhD: '╥',
|
756 | boxHD: '╦',
|
757 | boxhu: '┴',
|
758 | boxHu: '╧',
|
759 | boxhU: '╨',
|
760 | boxHU: '╩',
|
761 | boxminus: '⊟',
|
762 | boxplus: '⊞',
|
763 | boxtimes: '⊠',
|
764 | boxul: '┘',
|
765 | boxuL: '╛',
|
766 | boxUl: '╜',
|
767 | boxUL: '╝',
|
768 | boxur: '└',
|
769 | boxuR: '╘',
|
770 | boxUr: '╙',
|
771 | boxUR: '╚',
|
772 | boxv: '│',
|
773 | boxV: '║',
|
774 | boxvh: '┼',
|
775 | boxvH: '╪',
|
776 | boxVh: '╫',
|
777 | boxVH: '╬',
|
778 | boxvl: '┤',
|
779 | boxvL: '╡',
|
780 | boxVl: '╢',
|
781 | boxVL: '╣',
|
782 | boxvr: '├',
|
783 | boxvR: '╞',
|
784 | boxVr: '╟',
|
785 | boxVR: '╠',
|
786 | bprime: '‵',
|
787 | breve: '˘',
|
788 | Breve: '˘',
|
789 | brvbar: '¦',
|
790 | bscr: '𝒷',
|
791 | Bscr: 'ℬ',
|
792 | bsemi: '⁏',
|
793 | bsim: '∽',
|
794 | bsime: '⋍',
|
795 | bsolb: '⧅',
|
796 | bsol: '\\',
|
797 | bsolhsub: '⟈',
|
798 | bull: '•',
|
799 | bullet: '•',
|
800 | bump: '≎',
|
801 | bumpE: '⪮',
|
802 | bumpe: '≏',
|
803 | Bumpeq: '≎',
|
804 | bumpeq: '≏',
|
805 | Cacute: 'Ć',
|
806 | cacute: 'ć',
|
807 | capand: '⩄',
|
808 | capbrcup: '⩉',
|
809 | capcap: '⩋',
|
810 | cap: '∩',
|
811 | Cap: '⋒',
|
812 | capcup: '⩇',
|
813 | capdot: '⩀',
|
814 | CapitalDifferentialD: 'ⅅ',
|
815 | caps: '∩︀',
|
816 | caret: '⁁',
|
817 | caron: 'ˇ',
|
818 | Cayleys: 'ℭ',
|
819 | ccaps: '⩍',
|
820 | Ccaron: 'Č',
|
821 | ccaron: 'č',
|
822 | Ccedil: 'Ç',
|
823 | ccedil: 'ç',
|
824 | Ccirc: 'Ĉ',
|
825 | ccirc: 'ĉ',
|
826 | Cconint: '∰',
|
827 | ccups: '⩌',
|
828 | ccupssm: '⩐',
|
829 | Cdot: 'Ċ',
|
830 | cdot: 'ċ',
|
831 | cedil: '¸',
|
832 | Cedilla: '¸',
|
833 | cemptyv: '⦲',
|
834 | cent: '¢',
|
835 | centerdot: '·',
|
836 | CenterDot: '·',
|
837 | cfr: '𝔠',
|
838 | Cfr: 'ℭ',
|
839 | CHcy: 'Ч',
|
840 | chcy: 'ч',
|
841 | check: '✓',
|
842 | checkmark: '✓',
|
843 | Chi: 'Χ',
|
844 | chi: 'χ',
|
845 | circ: 'ˆ',
|
846 | circeq: '≗',
|
847 | circlearrowleft: '↺',
|
848 | circlearrowright: '↻',
|
849 | circledast: '⊛',
|
850 | circledcirc: '⊚',
|
851 | circleddash: '⊝',
|
852 | CircleDot: '⊙',
|
853 | circledR: '®',
|
854 | circledS: 'Ⓢ',
|
855 | CircleMinus: '⊖',
|
856 | CirclePlus: '⊕',
|
857 | CircleTimes: '⊗',
|
858 | cir: '○',
|
859 | cirE: '⧃',
|
860 | cire: '≗',
|
861 | cirfnint: '⨐',
|
862 | cirmid: '⫯',
|
863 | cirscir: '⧂',
|
864 | ClockwiseContourIntegral: '∲',
|
865 | CloseCurlyDoubleQuote: '”',
|
866 | CloseCurlyQuote: '’',
|
867 | clubs: '♣',
|
868 | clubsuit: '♣',
|
869 | colon: ':',
|
870 | Colon: '∷',
|
871 | Colone: '⩴',
|
872 | colone: '≔',
|
873 | coloneq: '≔',
|
874 | comma: ',',
|
875 | commat: '@',
|
876 | comp: '∁',
|
877 | compfn: '∘',
|
878 | complement: '∁',
|
879 | complexes: 'ℂ',
|
880 | cong: '≅',
|
881 | congdot: '⩭',
|
882 | Congruent: '≡',
|
883 | conint: '∮',
|
884 | Conint: '∯',
|
885 | ContourIntegral: '∮',
|
886 | copf: '𝕔',
|
887 | Copf: 'ℂ',
|
888 | coprod: '∐',
|
889 | Coproduct: '∐',
|
890 | copy: '©',
|
891 | COPY: '©',
|
892 | copysr: '℗',
|
893 | CounterClockwiseContourIntegral: '∳',
|
894 | crarr: '↵',
|
895 | cross: '✗',
|
896 | Cross: '⨯',
|
897 | Cscr: '𝒞',
|
898 | cscr: '𝒸',
|
899 | csub: '⫏',
|
900 | csube: '⫑',
|
901 | csup: '⫐',
|
902 | csupe: '⫒',
|
903 | ctdot: '⋯',
|
904 | cudarrl: '⤸',
|
905 | cudarrr: '⤵',
|
906 | cuepr: '⋞',
|
907 | cuesc: '⋟',
|
908 | cularr: '↶',
|
909 | cularrp: '⤽',
|
910 | cupbrcap: '⩈',
|
911 | cupcap: '⩆',
|
912 | CupCap: '≍',
|
913 | cup: '∪',
|
914 | Cup: '⋓',
|
915 | cupcup: '⩊',
|
916 | cupdot: '⊍',
|
917 | cupor: '⩅',
|
918 | cups: '∪︀',
|
919 | curarr: '↷',
|
920 | curarrm: '⤼',
|
921 | curlyeqprec: '⋞',
|
922 | curlyeqsucc: '⋟',
|
923 | curlyvee: '⋎',
|
924 | curlywedge: '⋏',
|
925 | curren: '¤',
|
926 | curvearrowleft: '↶',
|
927 | curvearrowright: '↷',
|
928 | cuvee: '⋎',
|
929 | cuwed: '⋏',
|
930 | cwconint: '∲',
|
931 | cwint: '∱',
|
932 | cylcty: '⌭',
|
933 | dagger: '†',
|
934 | Dagger: '‡',
|
935 | daleth: 'ℸ',
|
936 | darr: '↓',
|
937 | Darr: '↡',
|
938 | dArr: '⇓',
|
939 | dash: '‐',
|
940 | Dashv: '⫤',
|
941 | dashv: '⊣',
|
942 | dbkarow: '⤏',
|
943 | dblac: '˝',
|
944 | Dcaron: 'Ď',
|
945 | dcaron: 'ď',
|
946 | Dcy: 'Д',
|
947 | dcy: 'д',
|
948 | ddagger: '‡',
|
949 | ddarr: '⇊',
|
950 | DD: 'ⅅ',
|
951 | dd: 'ⅆ',
|
952 | DDotrahd: '⤑',
|
953 | ddotseq: '⩷',
|
954 | deg: '°',
|
955 | Del: '∇',
|
956 | Delta: 'Δ',
|
957 | delta: 'δ',
|
958 | demptyv: '⦱',
|
959 | dfisht: '⥿',
|
960 | Dfr: '𝔇',
|
961 | dfr: '𝔡',
|
962 | dHar: '⥥',
|
963 | dharl: '⇃',
|
964 | dharr: '⇂',
|
965 | DiacriticalAcute: '´',
|
966 | DiacriticalDot: '˙',
|
967 | DiacriticalDoubleAcute: '˝',
|
968 | DiacriticalGrave: '`',
|
969 | DiacriticalTilde: '˜',
|
970 | diam: '⋄',
|
971 | diamond: '⋄',
|
972 | Diamond: '⋄',
|
973 | diamondsuit: '♦',
|
974 | diams: '♦',
|
975 | die: '¨',
|
976 | DifferentialD: 'ⅆ',
|
977 | digamma: 'ϝ',
|
978 | disin: '⋲',
|
979 | div: '÷',
|
980 | divide: '÷',
|
981 | divideontimes: '⋇',
|
982 | divonx: '⋇',
|
983 | DJcy: 'Ђ',
|
984 | djcy: 'ђ',
|
985 | dlcorn: '⌞',
|
986 | dlcrop: '⌍',
|
987 | dollar: '$',
|
988 | Dopf: '𝔻',
|
989 | dopf: '𝕕',
|
990 | Dot: '¨',
|
991 | dot: '˙',
|
992 | DotDot: '⃜',
|
993 | doteq: '≐',
|
994 | doteqdot: '≑',
|
995 | DotEqual: '≐',
|
996 | dotminus: '∸',
|
997 | dotplus: '∔',
|
998 | dotsquare: '⊡',
|
999 | doublebarwedge: '⌆',
|
1000 | DoubleContourIntegral: '∯',
|
1001 | DoubleDot: '¨',
|
1002 | DoubleDownArrow: '⇓',
|
1003 | DoubleLeftArrow: '⇐',
|
1004 | DoubleLeftRightArrow: '⇔',
|
1005 | DoubleLeftTee: '⫤',
|
1006 | DoubleLongLeftArrow: '⟸',
|
1007 | DoubleLongLeftRightArrow: '⟺',
|
1008 | DoubleLongRightArrow: '⟹',
|
1009 | DoubleRightArrow: '⇒',
|
1010 | DoubleRightTee: '⊨',
|
1011 | DoubleUpArrow: '⇑',
|
1012 | DoubleUpDownArrow: '⇕',
|
1013 | DoubleVerticalBar: '∥',
|
1014 | DownArrowBar: '⤓',
|
1015 | downarrow: '↓',
|
1016 | DownArrow: '↓',
|
1017 | Downarrow: '⇓',
|
1018 | DownArrowUpArrow: '⇵',
|
1019 | DownBreve: '̑',
|
1020 | downdownarrows: '⇊',
|
1021 | downharpoonleft: '⇃',
|
1022 | downharpoonright: '⇂',
|
1023 | DownLeftRightVector: '⥐',
|
1024 | DownLeftTeeVector: '⥞',
|
1025 | DownLeftVectorBar: '⥖',
|
1026 | DownLeftVector: '↽',
|
1027 | DownRightTeeVector: '⥟',
|
1028 | DownRightVectorBar: '⥗',
|
1029 | DownRightVector: '⇁',
|
1030 | DownTeeArrow: '↧',
|
1031 | DownTee: '⊤',
|
1032 | drbkarow: '⤐',
|
1033 | drcorn: '⌟',
|
1034 | drcrop: '⌌',
|
1035 | Dscr: '𝒟',
|
1036 | dscr: '𝒹',
|
1037 | DScy: 'Ѕ',
|
1038 | dscy: 'ѕ',
|
1039 | dsol: '⧶',
|
1040 | Dstrok: 'Đ',
|
1041 | dstrok: 'đ',
|
1042 | dtdot: '⋱',
|
1043 | dtri: '▿',
|
1044 | dtrif: '▾',
|
1045 | duarr: '⇵',
|
1046 | duhar: '⥯',
|
1047 | dwangle: '⦦',
|
1048 | DZcy: 'Џ',
|
1049 | dzcy: 'џ',
|
1050 | dzigrarr: '⟿',
|
1051 | Eacute: 'É',
|
1052 | eacute: 'é',
|
1053 | easter: '⩮',
|
1054 | Ecaron: 'Ě',
|
1055 | ecaron: 'ě',
|
1056 | Ecirc: 'Ê',
|
1057 | ecirc: 'ê',
|
1058 | ecir: '≖',
|
1059 | ecolon: '≕',
|
1060 | Ecy: 'Э',
|
1061 | ecy: 'э',
|
1062 | eDDot: '⩷',
|
1063 | Edot: 'Ė',
|
1064 | edot: 'ė',
|
1065 | eDot: '≑',
|
1066 | ee: 'ⅇ',
|
1067 | efDot: '≒',
|
1068 | Efr: '𝔈',
|
1069 | efr: '𝔢',
|
1070 | eg: '⪚',
|
1071 | Egrave: 'È',
|
1072 | egrave: 'è',
|
1073 | egs: '⪖',
|
1074 | egsdot: '⪘',
|
1075 | el: '⪙',
|
1076 | Element: '∈',
|
1077 | elinters: '⏧',
|
1078 | ell: 'ℓ',
|
1079 | els: '⪕',
|
1080 | elsdot: '⪗',
|
1081 | Emacr: 'Ē',
|
1082 | emacr: 'ē',
|
1083 | empty: '∅',
|
1084 | emptyset: '∅',
|
1085 | EmptySmallSquare: '◻',
|
1086 | emptyv: '∅',
|
1087 | EmptyVerySmallSquare: '▫',
|
1088 | emsp13: ' ',
|
1089 | emsp14: ' ',
|
1090 | emsp: ' ',
|
1091 | ENG: 'Ŋ',
|
1092 | eng: 'ŋ',
|
1093 | ensp: ' ',
|
1094 | Eogon: 'Ę',
|
1095 | eogon: 'ę',
|
1096 | Eopf: '𝔼',
|
1097 | eopf: '𝕖',
|
1098 | epar: '⋕',
|
1099 | eparsl: '⧣',
|
1100 | eplus: '⩱',
|
1101 | epsi: 'ε',
|
1102 | Epsilon: 'Ε',
|
1103 | epsilon: 'ε',
|
1104 | epsiv: 'ϵ',
|
1105 | eqcirc: '≖',
|
1106 | eqcolon: '≕',
|
1107 | eqsim: '≂',
|
1108 | eqslantgtr: '⪖',
|
1109 | eqslantless: '⪕',
|
1110 | Equal: '⩵',
|
1111 | equals: '=',
|
1112 | EqualTilde: '≂',
|
1113 | equest: '≟',
|
1114 | Equilibrium: '⇌',
|
1115 | equiv: '≡',
|
1116 | equivDD: '⩸',
|
1117 | eqvparsl: '⧥',
|
1118 | erarr: '⥱',
|
1119 | erDot: '≓',
|
1120 | escr: 'ℯ',
|
1121 | Escr: 'ℰ',
|
1122 | esdot: '≐',
|
1123 | Esim: '⩳',
|
1124 | esim: '≂',
|
1125 | Eta: 'Η',
|
1126 | eta: 'η',
|
1127 | ETH: 'Ð',
|
1128 | eth: 'ð',
|
1129 | Euml: 'Ë',
|
1130 | euml: 'ë',
|
1131 | euro: '€',
|
1132 | excl: '!',
|
1133 | exist: '∃',
|
1134 | Exists: '∃',
|
1135 | expectation: 'ℰ',
|
1136 | exponentiale: 'ⅇ',
|
1137 | ExponentialE: 'ⅇ',
|
1138 | fallingdotseq: '≒',
|
1139 | Fcy: 'Ф',
|
1140 | fcy: 'ф',
|
1141 | female: '♀',
|
1142 | ffilig: 'ffi',
|
1143 | fflig: 'ff',
|
1144 | ffllig: 'ffl',
|
1145 | Ffr: '𝔉',
|
1146 | ffr: '𝔣',
|
1147 | filig: 'fi',
|
1148 | FilledSmallSquare: '◼',
|
1149 | FilledVerySmallSquare: '▪',
|
1150 | fjlig: 'fj',
|
1151 | flat: '♭',
|
1152 | fllig: 'fl',
|
1153 | fltns: '▱',
|
1154 | fnof: 'ƒ',
|
1155 | Fopf: '𝔽',
|
1156 | fopf: '𝕗',
|
1157 | forall: '∀',
|
1158 | ForAll: '∀',
|
1159 | fork: '⋔',
|
1160 | forkv: '⫙',
|
1161 | Fouriertrf: 'ℱ',
|
1162 | fpartint: '⨍',
|
1163 | frac12: '½',
|
1164 | frac13: '⅓',
|
1165 | frac14: '¼',
|
1166 | frac15: '⅕',
|
1167 | frac16: '⅙',
|
1168 | frac18: '⅛',
|
1169 | frac23: '⅔',
|
1170 | frac25: '⅖',
|
1171 | frac34: '¾',
|
1172 | frac35: '⅗',
|
1173 | frac38: '⅜',
|
1174 | frac45: '⅘',
|
1175 | frac56: '⅚',
|
1176 | frac58: '⅝',
|
1177 | frac78: '⅞',
|
1178 | frasl: '⁄',
|
1179 | frown: '⌢',
|
1180 | fscr: '𝒻',
|
1181 | Fscr: 'ℱ',
|
1182 | gacute: 'ǵ',
|
1183 | Gamma: 'Γ',
|
1184 | gamma: 'γ',
|
1185 | Gammad: 'Ϝ',
|
1186 | gammad: 'ϝ',
|
1187 | gap: '⪆',
|
1188 | Gbreve: 'Ğ',
|
1189 | gbreve: 'ğ',
|
1190 | Gcedil: 'Ģ',
|
1191 | Gcirc: 'Ĝ',
|
1192 | gcirc: 'ĝ',
|
1193 | Gcy: 'Г',
|
1194 | gcy: 'г',
|
1195 | Gdot: 'Ġ',
|
1196 | gdot: 'ġ',
|
1197 | ge: '≥',
|
1198 | gE: '≧',
|
1199 | gEl: '⪌',
|
1200 | gel: '⋛',
|
1201 | geq: '≥',
|
1202 | geqq: '≧',
|
1203 | geqslant: '⩾',
|
1204 | gescc: '⪩',
|
1205 | ges: '⩾',
|
1206 | gesdot: '⪀',
|
1207 | gesdoto: '⪂',
|
1208 | gesdotol: '⪄',
|
1209 | gesl: '⋛︀',
|
1210 | gesles: '⪔',
|
1211 | Gfr: '𝔊',
|
1212 | gfr: '𝔤',
|
1213 | gg: '≫',
|
1214 | Gg: '⋙',
|
1215 | ggg: '⋙',
|
1216 | gimel: 'ℷ',
|
1217 | GJcy: 'Ѓ',
|
1218 | gjcy: 'ѓ',
|
1219 | gla: '⪥',
|
1220 | gl: '≷',
|
1221 | glE: '⪒',
|
1222 | glj: '⪤',
|
1223 | gnap: '⪊',
|
1224 | gnapprox: '⪊',
|
1225 | gne: '⪈',
|
1226 | gnE: '≩',
|
1227 | gneq: '⪈',
|
1228 | gneqq: '≩',
|
1229 | gnsim: '⋧',
|
1230 | Gopf: '𝔾',
|
1231 | gopf: '𝕘',
|
1232 | grave: '`',
|
1233 | GreaterEqual: '≥',
|
1234 | GreaterEqualLess: '⋛',
|
1235 | GreaterFullEqual: '≧',
|
1236 | GreaterGreater: '⪢',
|
1237 | GreaterLess: '≷',
|
1238 | GreaterSlantEqual: '⩾',
|
1239 | GreaterTilde: '≳',
|
1240 | Gscr: '𝒢',
|
1241 | gscr: 'ℊ',
|
1242 | gsim: '≳',
|
1243 | gsime: '⪎',
|
1244 | gsiml: '⪐',
|
1245 | gtcc: '⪧',
|
1246 | gtcir: '⩺',
|
1247 | gt: '>',
|
1248 | GT: '>',
|
1249 | Gt: '≫',
|
1250 | gtdot: '⋗',
|
1251 | gtlPar: '⦕',
|
1252 | gtquest: '⩼',
|
1253 | gtrapprox: '⪆',
|
1254 | gtrarr: '⥸',
|
1255 | gtrdot: '⋗',
|
1256 | gtreqless: '⋛',
|
1257 | gtreqqless: '⪌',
|
1258 | gtrless: '≷',
|
1259 | gtrsim: '≳',
|
1260 | gvertneqq: '≩︀',
|
1261 | gvnE: '≩︀',
|
1262 | Hacek: 'ˇ',
|
1263 | hairsp: ' ',
|
1264 | half: '½',
|
1265 | hamilt: 'ℋ',
|
1266 | HARDcy: 'Ъ',
|
1267 | hardcy: 'ъ',
|
1268 | harrcir: '⥈',
|
1269 | harr: '↔',
|
1270 | hArr: '⇔',
|
1271 | harrw: '↭',
|
1272 | Hat: '^',
|
1273 | hbar: 'ℏ',
|
1274 | Hcirc: 'Ĥ',
|
1275 | hcirc: 'ĥ',
|
1276 | hearts: '♥',
|
1277 | heartsuit: '♥',
|
1278 | hellip: '…',
|
1279 | hercon: '⊹',
|
1280 | hfr: '𝔥',
|
1281 | Hfr: 'ℌ',
|
1282 | HilbertSpace: 'ℋ',
|
1283 | hksearow: '⤥',
|
1284 | hkswarow: '⤦',
|
1285 | hoarr: '⇿',
|
1286 | homtht: '∻',
|
1287 | hookleftarrow: '↩',
|
1288 | hookrightarrow: '↪',
|
1289 | hopf: '𝕙',
|
1290 | Hopf: 'ℍ',
|
1291 | horbar: '―',
|
1292 | HorizontalLine: '─',
|
1293 | hscr: '𝒽',
|
1294 | Hscr: 'ℋ',
|
1295 | hslash: 'ℏ',
|
1296 | Hstrok: 'Ħ',
|
1297 | hstrok: 'ħ',
|
1298 | HumpDownHump: '≎',
|
1299 | HumpEqual: '≏',
|
1300 | hybull: '⁃',
|
1301 | hyphen: '‐',
|
1302 | Iacute: 'Í',
|
1303 | iacute: 'í',
|
1304 | ic: '\u2063',
|
1305 | Icirc: 'Î',
|
1306 | icirc: 'î',
|
1307 | Icy: 'И',
|
1308 | icy: 'и',
|
1309 | Idot: 'İ',
|
1310 | IEcy: 'Е',
|
1311 | iecy: 'е',
|
1312 | iexcl: '¡',
|
1313 | iff: '⇔',
|
1314 | ifr: '𝔦',
|
1315 | Ifr: 'ℑ',
|
1316 | Igrave: 'Ì',
|
1317 | igrave: 'ì',
|
1318 | ii: 'ⅈ',
|
1319 | iiiint: '⨌',
|
1320 | iiint: '∭',
|
1321 | iinfin: '⧜',
|
1322 | iiota: '℩',
|
1323 | IJlig: 'IJ',
|
1324 | ijlig: 'ij',
|
1325 | Imacr: 'Ī',
|
1326 | imacr: 'ī',
|
1327 | image: 'ℑ',
|
1328 | ImaginaryI: 'ⅈ',
|
1329 | imagline: 'ℐ',
|
1330 | imagpart: 'ℑ',
|
1331 | imath: 'ı',
|
1332 | Im: 'ℑ',
|
1333 | imof: '⊷',
|
1334 | imped: 'Ƶ',
|
1335 | Implies: '⇒',
|
1336 | incare: '℅',
|
1337 | 'in': '∈',
|
1338 | infin: '∞',
|
1339 | infintie: '⧝',
|
1340 | inodot: 'ı',
|
1341 | intcal: '⊺',
|
1342 | int: '∫',
|
1343 | Int: '∬',
|
1344 | integers: 'ℤ',
|
1345 | Integral: '∫',
|
1346 | intercal: '⊺',
|
1347 | Intersection: '⋂',
|
1348 | intlarhk: '⨗',
|
1349 | intprod: '⨼',
|
1350 | InvisibleComma: '\u2063',
|
1351 | InvisibleTimes: '\u2062',
|
1352 | IOcy: 'Ё',
|
1353 | iocy: 'ё',
|
1354 | Iogon: 'Į',
|
1355 | iogon: 'į',
|
1356 | Iopf: '𝕀',
|
1357 | iopf: '𝕚',
|
1358 | Iota: 'Ι',
|
1359 | iota: 'ι',
|
1360 | iprod: '⨼',
|
1361 | iquest: '¿',
|
1362 | iscr: '𝒾',
|
1363 | Iscr: 'ℐ',
|
1364 | isin: '∈',
|
1365 | isindot: '⋵',
|
1366 | isinE: '⋹',
|
1367 | isins: '⋴',
|
1368 | isinsv: '⋳',
|
1369 | isinv: '∈',
|
1370 | it: '\u2062',
|
1371 | Itilde: 'Ĩ',
|
1372 | itilde: 'ĩ',
|
1373 | Iukcy: 'І',
|
1374 | iukcy: 'і',
|
1375 | Iuml: 'Ï',
|
1376 | iuml: 'ï',
|
1377 | Jcirc: 'Ĵ',
|
1378 | jcirc: 'ĵ',
|
1379 | Jcy: 'Й',
|
1380 | jcy: 'й',
|
1381 | Jfr: '𝔍',
|
1382 | jfr: '𝔧',
|
1383 | jmath: 'ȷ',
|
1384 | Jopf: '𝕁',
|
1385 | jopf: '𝕛',
|
1386 | Jscr: '𝒥',
|
1387 | jscr: '𝒿',
|
1388 | Jsercy: 'Ј',
|
1389 | jsercy: 'ј',
|
1390 | Jukcy: 'Є',
|
1391 | jukcy: 'є',
|
1392 | Kappa: 'Κ',
|
1393 | kappa: 'κ',
|
1394 | kappav: 'ϰ',
|
1395 | Kcedil: 'Ķ',
|
1396 | kcedil: 'ķ',
|
1397 | Kcy: 'К',
|
1398 | kcy: 'к',
|
1399 | Kfr: '𝔎',
|
1400 | kfr: '𝔨',
|
1401 | kgreen: 'ĸ',
|
1402 | KHcy: 'Х',
|
1403 | khcy: 'х',
|
1404 | KJcy: 'Ќ',
|
1405 | kjcy: 'ќ',
|
1406 | Kopf: '𝕂',
|
1407 | kopf: '𝕜',
|
1408 | Kscr: '𝒦',
|
1409 | kscr: '𝓀',
|
1410 | lAarr: '⇚',
|
1411 | Lacute: 'Ĺ',
|
1412 | lacute: 'ĺ',
|
1413 | laemptyv: '⦴',
|
1414 | lagran: 'ℒ',
|
1415 | Lambda: 'Λ',
|
1416 | lambda: 'λ',
|
1417 | lang: '⟨',
|
1418 | Lang: '⟪',
|
1419 | langd: '⦑',
|
1420 | langle: '⟨',
|
1421 | lap: '⪅',
|
1422 | Laplacetrf: 'ℒ',
|
1423 | laquo: '«',
|
1424 | larrb: '⇤',
|
1425 | larrbfs: '⤟',
|
1426 | larr: '←',
|
1427 | Larr: '↞',
|
1428 | lArr: '⇐',
|
1429 | larrfs: '⤝',
|
1430 | larrhk: '↩',
|
1431 | larrlp: '↫',
|
1432 | larrpl: '⤹',
|
1433 | larrsim: '⥳',
|
1434 | larrtl: '↢',
|
1435 | latail: '⤙',
|
1436 | lAtail: '⤛',
|
1437 | lat: '⪫',
|
1438 | late: '⪭',
|
1439 | lates: '⪭︀',
|
1440 | lbarr: '⤌',
|
1441 | lBarr: '⤎',
|
1442 | lbbrk: '❲',
|
1443 | lbrace: '{',
|
1444 | lbrack: '[',
|
1445 | lbrke: '⦋',
|
1446 | lbrksld: '⦏',
|
1447 | lbrkslu: '⦍',
|
1448 | Lcaron: 'Ľ',
|
1449 | lcaron: 'ľ',
|
1450 | Lcedil: 'Ļ',
|
1451 | lcedil: 'ļ',
|
1452 | lceil: '⌈',
|
1453 | lcub: '{',
|
1454 | Lcy: 'Л',
|
1455 | lcy: 'л',
|
1456 | ldca: '⤶',
|
1457 | ldquo: '“',
|
1458 | ldquor: '„',
|
1459 | ldrdhar: '⥧',
|
1460 | ldrushar: '⥋',
|
1461 | ldsh: '↲',
|
1462 | le: '≤',
|
1463 | lE: '≦',
|
1464 | LeftAngleBracket: '⟨',
|
1465 | LeftArrowBar: '⇤',
|
1466 | leftarrow: '←',
|
1467 | LeftArrow: '←',
|
1468 | Leftarrow: '⇐',
|
1469 | LeftArrowRightArrow: '⇆',
|
1470 | leftarrowtail: '↢',
|
1471 | LeftCeiling: '⌈',
|
1472 | LeftDoubleBracket: '⟦',
|
1473 | LeftDownTeeVector: '⥡',
|
1474 | LeftDownVectorBar: '⥙',
|
1475 | LeftDownVector: '⇃',
|
1476 | LeftFloor: '⌊',
|
1477 | leftharpoondown: '↽',
|
1478 | leftharpoonup: '↼',
|
1479 | leftleftarrows: '⇇',
|
1480 | leftrightarrow: '↔',
|
1481 | LeftRightArrow: '↔',
|
1482 | Leftrightarrow: '⇔',
|
1483 | leftrightarrows: '⇆',
|
1484 | leftrightharpoons: '⇋',
|
1485 | leftrightsquigarrow: '↭',
|
1486 | LeftRightVector: '⥎',
|
1487 | LeftTeeArrow: '↤',
|
1488 | LeftTee: '⊣',
|
1489 | LeftTeeVector: '⥚',
|
1490 | leftthreetimes: '⋋',
|
1491 | LeftTriangleBar: '⧏',
|
1492 | LeftTriangle: '⊲',
|
1493 | LeftTriangleEqual: '⊴',
|
1494 | LeftUpDownVector: '⥑',
|
1495 | LeftUpTeeVector: '⥠',
|
1496 | LeftUpVectorBar: '⥘',
|
1497 | LeftUpVector: '↿',
|
1498 | LeftVectorBar: '⥒',
|
1499 | LeftVector: '↼',
|
1500 | lEg: '⪋',
|
1501 | leg: '⋚',
|
1502 | leq: '≤',
|
1503 | leqq: '≦',
|
1504 | leqslant: '⩽',
|
1505 | lescc: '⪨',
|
1506 | les: '⩽',
|
1507 | lesdot: '⩿',
|
1508 | lesdoto: '⪁',
|
1509 | lesdotor: '⪃',
|
1510 | lesg: '⋚︀',
|
1511 | lesges: '⪓',
|
1512 | lessapprox: '⪅',
|
1513 | lessdot: '⋖',
|
1514 | lesseqgtr: '⋚',
|
1515 | lesseqqgtr: '⪋',
|
1516 | LessEqualGreater: '⋚',
|
1517 | LessFullEqual: '≦',
|
1518 | LessGreater: '≶',
|
1519 | lessgtr: '≶',
|
1520 | LessLess: '⪡',
|
1521 | lesssim: '≲',
|
1522 | LessSlantEqual: '⩽',
|
1523 | LessTilde: '≲',
|
1524 | lfisht: '⥼',
|
1525 | lfloor: '⌊',
|
1526 | Lfr: '𝔏',
|
1527 | lfr: '𝔩',
|
1528 | lg: '≶',
|
1529 | lgE: '⪑',
|
1530 | lHar: '⥢',
|
1531 | lhard: '↽',
|
1532 | lharu: '↼',
|
1533 | lharul: '⥪',
|
1534 | lhblk: '▄',
|
1535 | LJcy: 'Љ',
|
1536 | ljcy: 'љ',
|
1537 | llarr: '⇇',
|
1538 | ll: '≪',
|
1539 | Ll: '⋘',
|
1540 | llcorner: '⌞',
|
1541 | Lleftarrow: '⇚',
|
1542 | llhard: '⥫',
|
1543 | lltri: '◺',
|
1544 | Lmidot: 'Ŀ',
|
1545 | lmidot: 'ŀ',
|
1546 | lmoustache: '⎰',
|
1547 | lmoust: '⎰',
|
1548 | lnap: '⪉',
|
1549 | lnapprox: '⪉',
|
1550 | lne: '⪇',
|
1551 | lnE: '≨',
|
1552 | lneq: '⪇',
|
1553 | lneqq: '≨',
|
1554 | lnsim: '⋦',
|
1555 | loang: '⟬',
|
1556 | loarr: '⇽',
|
1557 | lobrk: '⟦',
|
1558 | longleftarrow: '⟵',
|
1559 | LongLeftArrow: '⟵',
|
1560 | Longleftarrow: '⟸',
|
1561 | longleftrightarrow: '⟷',
|
1562 | LongLeftRightArrow: '⟷',
|
1563 | Longleftrightarrow: '⟺',
|
1564 | longmapsto: '⟼',
|
1565 | longrightarrow: '⟶',
|
1566 | LongRightArrow: '⟶',
|
1567 | Longrightarrow: '⟹',
|
1568 | looparrowleft: '↫',
|
1569 | looparrowright: '↬',
|
1570 | lopar: '⦅',
|
1571 | Lopf: '𝕃',
|
1572 | lopf: '𝕝',
|
1573 | loplus: '⨭',
|
1574 | lotimes: '⨴',
|
1575 | lowast: '∗',
|
1576 | lowbar: '_',
|
1577 | LowerLeftArrow: '↙',
|
1578 | LowerRightArrow: '↘',
|
1579 | loz: '◊',
|
1580 | lozenge: '◊',
|
1581 | lozf: '⧫',
|
1582 | lpar: '(',
|
1583 | lparlt: '⦓',
|
1584 | lrarr: '⇆',
|
1585 | lrcorner: '⌟',
|
1586 | lrhar: '⇋',
|
1587 | lrhard: '⥭',
|
1588 | lrm: '\u200E',
|
1589 | lrtri: '⊿',
|
1590 | lsaquo: '‹',
|
1591 | lscr: '𝓁',
|
1592 | Lscr: 'ℒ',
|
1593 | lsh: '↰',
|
1594 | Lsh: '↰',
|
1595 | lsim: '≲',
|
1596 | lsime: '⪍',
|
1597 | lsimg: '⪏',
|
1598 | lsqb: '[',
|
1599 | lsquo: '‘',
|
1600 | lsquor: '‚',
|
1601 | Lstrok: 'Ł',
|
1602 | lstrok: 'ł',
|
1603 | ltcc: '⪦',
|
1604 | ltcir: '⩹',
|
1605 | lt: '<',
|
1606 | LT: '<',
|
1607 | Lt: '≪',
|
1608 | ltdot: '⋖',
|
1609 | lthree: '⋋',
|
1610 | ltimes: '⋉',
|
1611 | ltlarr: '⥶',
|
1612 | ltquest: '⩻',
|
1613 | ltri: '◃',
|
1614 | ltrie: '⊴',
|
1615 | ltrif: '◂',
|
1616 | ltrPar: '⦖',
|
1617 | lurdshar: '⥊',
|
1618 | luruhar: '⥦',
|
1619 | lvertneqq: '≨︀',
|
1620 | lvnE: '≨︀',
|
1621 | macr: '¯',
|
1622 | male: '♂',
|
1623 | malt: '✠',
|
1624 | maltese: '✠',
|
1625 | Map: '⤅',
|
1626 | map: '↦',
|
1627 | mapsto: '↦',
|
1628 | mapstodown: '↧',
|
1629 | mapstoleft: '↤',
|
1630 | mapstoup: '↥',
|
1631 | marker: '▮',
|
1632 | mcomma: '⨩',
|
1633 | Mcy: 'М',
|
1634 | mcy: 'м',
|
1635 | mdash: '—',
|
1636 | mDDot: '∺',
|
1637 | measuredangle: '∡',
|
1638 | MediumSpace: ' ',
|
1639 | Mellintrf: 'ℳ',
|
1640 | Mfr: '𝔐',
|
1641 | mfr: '𝔪',
|
1642 | mho: '℧',
|
1643 | micro: 'µ',
|
1644 | midast: '*',
|
1645 | midcir: '⫰',
|
1646 | mid: '∣',
|
1647 | middot: '·',
|
1648 | minusb: '⊟',
|
1649 | minus: '−',
|
1650 | minusd: '∸',
|
1651 | minusdu: '⨪',
|
1652 | MinusPlus: '∓',
|
1653 | mlcp: '⫛',
|
1654 | mldr: '…',
|
1655 | mnplus: '∓',
|
1656 | models: '⊧',
|
1657 | Mopf: '𝕄',
|
1658 | mopf: '𝕞',
|
1659 | mp: '∓',
|
1660 | mscr: '𝓂',
|
1661 | Mscr: 'ℳ',
|
1662 | mstpos: '∾',
|
1663 | Mu: 'Μ',
|
1664 | mu: 'μ',
|
1665 | multimap: '⊸',
|
1666 | mumap: '⊸',
|
1667 | nabla: '∇',
|
1668 | Nacute: 'Ń',
|
1669 | nacute: 'ń',
|
1670 | nang: '∠⃒',
|
1671 | nap: '≉',
|
1672 | napE: '⩰̸',
|
1673 | napid: '≋̸',
|
1674 | napos: 'ʼn',
|
1675 | napprox: '≉',
|
1676 | natural: '♮',
|
1677 | naturals: 'ℕ',
|
1678 | natur: '♮',
|
1679 | nbsp: ' ',
|
1680 | nbump: '≎̸',
|
1681 | nbumpe: '≏̸',
|
1682 | ncap: '⩃',
|
1683 | Ncaron: 'Ň',
|
1684 | ncaron: 'ň',
|
1685 | Ncedil: 'Ņ',
|
1686 | ncedil: 'ņ',
|
1687 | ncong: '≇',
|
1688 | ncongdot: '⩭̸',
|
1689 | ncup: '⩂',
|
1690 | Ncy: 'Н',
|
1691 | ncy: 'н',
|
1692 | ndash: '–',
|
1693 | nearhk: '⤤',
|
1694 | nearr: '↗',
|
1695 | neArr: '⇗',
|
1696 | nearrow: '↗',
|
1697 | ne: '≠',
|
1698 | nedot: '≐̸',
|
1699 | NegativeMediumSpace: '\u200B',
|
1700 | NegativeThickSpace: '\u200B',
|
1701 | NegativeThinSpace: '\u200B',
|
1702 | NegativeVeryThinSpace: '\u200B',
|
1703 | nequiv: '≢',
|
1704 | nesear: '⤨',
|
1705 | nesim: '≂̸',
|
1706 | NestedGreaterGreater: '≫',
|
1707 | NestedLessLess: '≪',
|
1708 | NewLine: '\n',
|
1709 | nexist: '∄',
|
1710 | nexists: '∄',
|
1711 | Nfr: '𝔑',
|
1712 | nfr: '𝔫',
|
1713 | ngE: '≧̸',
|
1714 | nge: '≱',
|
1715 | ngeq: '≱',
|
1716 | ngeqq: '≧̸',
|
1717 | ngeqslant: '⩾̸',
|
1718 | nges: '⩾̸',
|
1719 | nGg: '⋙̸',
|
1720 | ngsim: '≵',
|
1721 | nGt: '≫⃒',
|
1722 | ngt: '≯',
|
1723 | ngtr: '≯',
|
1724 | nGtv: '≫̸',
|
1725 | nharr: '↮',
|
1726 | nhArr: '⇎',
|
1727 | nhpar: '⫲',
|
1728 | ni: '∋',
|
1729 | nis: '⋼',
|
1730 | nisd: '⋺',
|
1731 | niv: '∋',
|
1732 | NJcy: 'Њ',
|
1733 | njcy: 'њ',
|
1734 | nlarr: '↚',
|
1735 | nlArr: '⇍',
|
1736 | nldr: '‥',
|
1737 | nlE: '≦̸',
|
1738 | nle: '≰',
|
1739 | nleftarrow: '↚',
|
1740 | nLeftarrow: '⇍',
|
1741 | nleftrightarrow: '↮',
|
1742 | nLeftrightarrow: '⇎',
|
1743 | nleq: '≰',
|
1744 | nleqq: '≦̸',
|
1745 | nleqslant: '⩽̸',
|
1746 | nles: '⩽̸',
|
1747 | nless: '≮',
|
1748 | nLl: '⋘̸',
|
1749 | nlsim: '≴',
|
1750 | nLt: '≪⃒',
|
1751 | nlt: '≮',
|
1752 | nltri: '⋪',
|
1753 | nltrie: '⋬',
|
1754 | nLtv: '≪̸',
|
1755 | nmid: '∤',
|
1756 | NoBreak: '\u2060',
|
1757 | NonBreakingSpace: ' ',
|
1758 | nopf: '𝕟',
|
1759 | Nopf: 'ℕ',
|
1760 | Not: '⫬',
|
1761 | not: '¬',
|
1762 | NotCongruent: '≢',
|
1763 | NotCupCap: '≭',
|
1764 | NotDoubleVerticalBar: '∦',
|
1765 | NotElement: '∉',
|
1766 | NotEqual: '≠',
|
1767 | NotEqualTilde: '≂̸',
|
1768 | NotExists: '∄',
|
1769 | NotGreater: '≯',
|
1770 | NotGreaterEqual: '≱',
|
1771 | NotGreaterFullEqual: '≧̸',
|
1772 | NotGreaterGreater: '≫̸',
|
1773 | NotGreaterLess: '≹',
|
1774 | NotGreaterSlantEqual: '⩾̸',
|
1775 | NotGreaterTilde: '≵',
|
1776 | NotHumpDownHump: '≎̸',
|
1777 | NotHumpEqual: '≏̸',
|
1778 | notin: '∉',
|
1779 | notindot: '⋵̸',
|
1780 | notinE: '⋹̸',
|
1781 | notinva: '∉',
|
1782 | notinvb: '⋷',
|
1783 | notinvc: '⋶',
|
1784 | NotLeftTriangleBar: '⧏̸',
|
1785 | NotLeftTriangle: '⋪',
|
1786 | NotLeftTriangleEqual: '⋬',
|
1787 | NotLess: '≮',
|
1788 | NotLessEqual: '≰',
|
1789 | NotLessGreater: '≸',
|
1790 | NotLessLess: '≪̸',
|
1791 | NotLessSlantEqual: '⩽̸',
|
1792 | NotLessTilde: '≴',
|
1793 | NotNestedGreaterGreater: '⪢̸',
|
1794 | NotNestedLessLess: '⪡̸',
|
1795 | notni: '∌',
|
1796 | notniva: '∌',
|
1797 | notnivb: '⋾',
|
1798 | notnivc: '⋽',
|
1799 | NotPrecedes: '⊀',
|
1800 | NotPrecedesEqual: '⪯̸',
|
1801 | NotPrecedesSlantEqual: '⋠',
|
1802 | NotReverseElement: '∌',
|
1803 | NotRightTriangleBar: '⧐̸',
|
1804 | NotRightTriangle: '⋫',
|
1805 | NotRightTriangleEqual: '⋭',
|
1806 | NotSquareSubset: '⊏̸',
|
1807 | NotSquareSubsetEqual: '⋢',
|
1808 | NotSquareSuperset: '⊐̸',
|
1809 | NotSquareSupersetEqual: '⋣',
|
1810 | NotSubset: '⊂⃒',
|
1811 | NotSubsetEqual: '⊈',
|
1812 | NotSucceeds: '⊁',
|
1813 | NotSucceedsEqual: '⪰̸',
|
1814 | NotSucceedsSlantEqual: '⋡',
|
1815 | NotSucceedsTilde: '≿̸',
|
1816 | NotSuperset: '⊃⃒',
|
1817 | NotSupersetEqual: '⊉',
|
1818 | NotTilde: '≁',
|
1819 | NotTildeEqual: '≄',
|
1820 | NotTildeFullEqual: '≇',
|
1821 | NotTildeTilde: '≉',
|
1822 | NotVerticalBar: '∤',
|
1823 | nparallel: '∦',
|
1824 | npar: '∦',
|
1825 | nparsl: '⫽⃥',
|
1826 | npart: '∂̸',
|
1827 | npolint: '⨔',
|
1828 | npr: '⊀',
|
1829 | nprcue: '⋠',
|
1830 | nprec: '⊀',
|
1831 | npreceq: '⪯̸',
|
1832 | npre: '⪯̸',
|
1833 | nrarrc: '⤳̸',
|
1834 | nrarr: '↛',
|
1835 | nrArr: '⇏',
|
1836 | nrarrw: '↝̸',
|
1837 | nrightarrow: '↛',
|
1838 | nRightarrow: '⇏',
|
1839 | nrtri: '⋫',
|
1840 | nrtrie: '⋭',
|
1841 | nsc: '⊁',
|
1842 | nsccue: '⋡',
|
1843 | nsce: '⪰̸',
|
1844 | Nscr: '𝒩',
|
1845 | nscr: '𝓃',
|
1846 | nshortmid: '∤',
|
1847 | nshortparallel: '∦',
|
1848 | nsim: '≁',
|
1849 | nsime: '≄',
|
1850 | nsimeq: '≄',
|
1851 | nsmid: '∤',
|
1852 | nspar: '∦',
|
1853 | nsqsube: '⋢',
|
1854 | nsqsupe: '⋣',
|
1855 | nsub: '⊄',
|
1856 | nsubE: '⫅̸',
|
1857 | nsube: '⊈',
|
1858 | nsubset: '⊂⃒',
|
1859 | nsubseteq: '⊈',
|
1860 | nsubseteqq: '⫅̸',
|
1861 | nsucc: '⊁',
|
1862 | nsucceq: '⪰̸',
|
1863 | nsup: '⊅',
|
1864 | nsupE: '⫆̸',
|
1865 | nsupe: '⊉',
|
1866 | nsupset: '⊃⃒',
|
1867 | nsupseteq: '⊉',
|
1868 | nsupseteqq: '⫆̸',
|
1869 | ntgl: '≹',
|
1870 | Ntilde: 'Ñ',
|
1871 | ntilde: 'ñ',
|
1872 | ntlg: '≸',
|
1873 | ntriangleleft: '⋪',
|
1874 | ntrianglelefteq: '⋬',
|
1875 | ntriangleright: '⋫',
|
1876 | ntrianglerighteq: '⋭',
|
1877 | Nu: 'Ν',
|
1878 | nu: 'ν',
|
1879 | num: '#',
|
1880 | numero: '№',
|
1881 | numsp: ' ',
|
1882 | nvap: '≍⃒',
|
1883 | nvdash: '⊬',
|
1884 | nvDash: '⊭',
|
1885 | nVdash: '⊮',
|
1886 | nVDash: '⊯',
|
1887 | nvge: '≥⃒',
|
1888 | nvgt: '>⃒',
|
1889 | nvHarr: '⤄',
|
1890 | nvinfin: '⧞',
|
1891 | nvlArr: '⤂',
|
1892 | nvle: '≤⃒',
|
1893 | nvlt: '<⃒',
|
1894 | nvltrie: '⊴⃒',
|
1895 | nvrArr: '⤃',
|
1896 | nvrtrie: '⊵⃒',
|
1897 | nvsim: '∼⃒',
|
1898 | nwarhk: '⤣',
|
1899 | nwarr: '↖',
|
1900 | nwArr: '⇖',
|
1901 | nwarrow: '↖',
|
1902 | nwnear: '⤧',
|
1903 | Oacute: 'Ó',
|
1904 | oacute: 'ó',
|
1905 | oast: '⊛',
|
1906 | Ocirc: 'Ô',
|
1907 | ocirc: 'ô',
|
1908 | ocir: '⊚',
|
1909 | Ocy: 'О',
|
1910 | ocy: 'о',
|
1911 | odash: '⊝',
|
1912 | Odblac: 'Ő',
|
1913 | odblac: 'ő',
|
1914 | odiv: '⨸',
|
1915 | odot: '⊙',
|
1916 | odsold: '⦼',
|
1917 | OElig: 'Œ',
|
1918 | oelig: 'œ',
|
1919 | ofcir: '⦿',
|
1920 | Ofr: '𝔒',
|
1921 | ofr: '𝔬',
|
1922 | ogon: '˛',
|
1923 | Ograve: 'Ò',
|
1924 | ograve: 'ò',
|
1925 | ogt: '⧁',
|
1926 | ohbar: '⦵',
|
1927 | ohm: 'Ω',
|
1928 | oint: '∮',
|
1929 | olarr: '↺',
|
1930 | olcir: '⦾',
|
1931 | olcross: '⦻',
|
1932 | oline: '‾',
|
1933 | olt: '⧀',
|
1934 | Omacr: 'Ō',
|
1935 | omacr: 'ō',
|
1936 | Omega: 'Ω',
|
1937 | omega: 'ω',
|
1938 | Omicron: 'Ο',
|
1939 | omicron: 'ο',
|
1940 | omid: '⦶',
|
1941 | ominus: '⊖',
|
1942 | Oopf: '𝕆',
|
1943 | oopf: '𝕠',
|
1944 | opar: '⦷',
|
1945 | OpenCurlyDoubleQuote: '“',
|
1946 | OpenCurlyQuote: '‘',
|
1947 | operp: '⦹',
|
1948 | oplus: '⊕',
|
1949 | orarr: '↻',
|
1950 | Or: '⩔',
|
1951 | or: '∨',
|
1952 | ord: '⩝',
|
1953 | order: 'ℴ',
|
1954 | orderof: 'ℴ',
|
1955 | ordf: 'ª',
|
1956 | ordm: 'º',
|
1957 | origof: '⊶',
|
1958 | oror: '⩖',
|
1959 | orslope: '⩗',
|
1960 | orv: '⩛',
|
1961 | oS: 'Ⓢ',
|
1962 | Oscr: '𝒪',
|
1963 | oscr: 'ℴ',
|
1964 | Oslash: 'Ø',
|
1965 | oslash: 'ø',
|
1966 | osol: '⊘',
|
1967 | Otilde: 'Õ',
|
1968 | otilde: 'õ',
|
1969 | otimesas: '⨶',
|
1970 | Otimes: '⨷',
|
1971 | otimes: '⊗',
|
1972 | Ouml: 'Ö',
|
1973 | ouml: 'ö',
|
1974 | ovbar: '⌽',
|
1975 | OverBar: '‾',
|
1976 | OverBrace: '⏞',
|
1977 | OverBracket: '⎴',
|
1978 | OverParenthesis: '⏜',
|
1979 | para: '¶',
|
1980 | parallel: '∥',
|
1981 | par: '∥',
|
1982 | parsim: '⫳',
|
1983 | parsl: '⫽',
|
1984 | part: '∂',
|
1985 | PartialD: '∂',
|
1986 | Pcy: 'П',
|
1987 | pcy: 'п',
|
1988 | percnt: '%',
|
1989 | period: '.',
|
1990 | permil: '‰',
|
1991 | perp: '⊥',
|
1992 | pertenk: '‱',
|
1993 | Pfr: '𝔓',
|
1994 | pfr: '𝔭',
|
1995 | Phi: 'Φ',
|
1996 | phi: 'φ',
|
1997 | phiv: 'ϕ',
|
1998 | phmmat: 'ℳ',
|
1999 | phone: '☎',
|
2000 | Pi: 'Π',
|
2001 | pi: 'π',
|
2002 | pitchfork: '⋔',
|
2003 | piv: 'ϖ',
|
2004 | planck: 'ℏ',
|
2005 | planckh: 'ℎ',
|
2006 | plankv: 'ℏ',
|
2007 | plusacir: '⨣',
|
2008 | plusb: '⊞',
|
2009 | pluscir: '⨢',
|
2010 | plus: '+',
|
2011 | plusdo: '∔',
|
2012 | plusdu: '⨥',
|
2013 | pluse: '⩲',
|
2014 | PlusMinus: '±',
|
2015 | plusmn: '±',
|
2016 | plussim: '⨦',
|
2017 | plustwo: '⨧',
|
2018 | pm: '±',
|
2019 | Poincareplane: 'ℌ',
|
2020 | pointint: '⨕',
|
2021 | popf: '𝕡',
|
2022 | Popf: 'ℙ',
|
2023 | pound: '£',
|
2024 | prap: '⪷',
|
2025 | Pr: '⪻',
|
2026 | pr: '≺',
|
2027 | prcue: '≼',
|
2028 | precapprox: '⪷',
|
2029 | prec: '≺',
|
2030 | preccurlyeq: '≼',
|
2031 | Precedes: '≺',
|
2032 | PrecedesEqual: '⪯',
|
2033 | PrecedesSlantEqual: '≼',
|
2034 | PrecedesTilde: '≾',
|
2035 | preceq: '⪯',
|
2036 | precnapprox: '⪹',
|
2037 | precneqq: '⪵',
|
2038 | precnsim: '⋨',
|
2039 | pre: '⪯',
|
2040 | prE: '⪳',
|
2041 | precsim: '≾',
|
2042 | prime: '′',
|
2043 | Prime: '″',
|
2044 | primes: 'ℙ',
|
2045 | prnap: '⪹',
|
2046 | prnE: '⪵',
|
2047 | prnsim: '⋨',
|
2048 | prod: '∏',
|
2049 | Product: '∏',
|
2050 | profalar: '⌮',
|
2051 | profline: '⌒',
|
2052 | profsurf: '⌓',
|
2053 | prop: '∝',
|
2054 | Proportional: '∝',
|
2055 | Proportion: '∷',
|
2056 | propto: '∝',
|
2057 | prsim: '≾',
|
2058 | prurel: '⊰',
|
2059 | Pscr: '𝒫',
|
2060 | pscr: '𝓅',
|
2061 | Psi: 'Ψ',
|
2062 | psi: 'ψ',
|
2063 | puncsp: ' ',
|
2064 | Qfr: '𝔔',
|
2065 | qfr: '𝔮',
|
2066 | qint: '⨌',
|
2067 | qopf: '𝕢',
|
2068 | Qopf: 'ℚ',
|
2069 | qprime: '⁗',
|
2070 | Qscr: '𝒬',
|
2071 | qscr: '𝓆',
|
2072 | quaternions: 'ℍ',
|
2073 | quatint: '⨖',
|
2074 | quest: '?',
|
2075 | questeq: '≟',
|
2076 | quot: '"',
|
2077 | QUOT: '"',
|
2078 | rAarr: '⇛',
|
2079 | race: '∽̱',
|
2080 | Racute: 'Ŕ',
|
2081 | racute: 'ŕ',
|
2082 | radic: '√',
|
2083 | raemptyv: '⦳',
|
2084 | rang: '⟩',
|
2085 | Rang: '⟫',
|
2086 | rangd: '⦒',
|
2087 | range: '⦥',
|
2088 | rangle: '⟩',
|
2089 | raquo: '»',
|
2090 | rarrap: '⥵',
|
2091 | rarrb: '⇥',
|
2092 | rarrbfs: '⤠',
|
2093 | rarrc: '⤳',
|
2094 | rarr: '→',
|
2095 | Rarr: '↠',
|
2096 | rArr: '⇒',
|
2097 | rarrfs: '⤞',
|
2098 | rarrhk: '↪',
|
2099 | rarrlp: '↬',
|
2100 | rarrpl: '⥅',
|
2101 | rarrsim: '⥴',
|
2102 | Rarrtl: '⤖',
|
2103 | rarrtl: '↣',
|
2104 | rarrw: '↝',
|
2105 | ratail: '⤚',
|
2106 | rAtail: '⤜',
|
2107 | ratio: '∶',
|
2108 | rationals: 'ℚ',
|
2109 | rbarr: '⤍',
|
2110 | rBarr: '⤏',
|
2111 | RBarr: '⤐',
|
2112 | rbbrk: '❳',
|
2113 | rbrace: '}',
|
2114 | rbrack: ']',
|
2115 | rbrke: '⦌',
|
2116 | rbrksld: '⦎',
|
2117 | rbrkslu: '⦐',
|
2118 | Rcaron: 'Ř',
|
2119 | rcaron: 'ř',
|
2120 | Rcedil: 'Ŗ',
|
2121 | rcedil: 'ŗ',
|
2122 | rceil: '⌉',
|
2123 | rcub: '}',
|
2124 | Rcy: 'Р',
|
2125 | rcy: 'р',
|
2126 | rdca: '⤷',
|
2127 | rdldhar: '⥩',
|
2128 | rdquo: '”',
|
2129 | rdquor: '”',
|
2130 | rdsh: '↳',
|
2131 | real: 'ℜ',
|
2132 | realine: 'ℛ',
|
2133 | realpart: 'ℜ',
|
2134 | reals: 'ℝ',
|
2135 | Re: 'ℜ',
|
2136 | rect: '▭',
|
2137 | reg: '®',
|
2138 | REG: '®',
|
2139 | ReverseElement: '∋',
|
2140 | ReverseEquilibrium: '⇋',
|
2141 | ReverseUpEquilibrium: '⥯',
|
2142 | rfisht: '⥽',
|
2143 | rfloor: '⌋',
|
2144 | rfr: '𝔯',
|
2145 | Rfr: 'ℜ',
|
2146 | rHar: '⥤',
|
2147 | rhard: '⇁',
|
2148 | rharu: '⇀',
|
2149 | rharul: '⥬',
|
2150 | Rho: 'Ρ',
|
2151 | rho: 'ρ',
|
2152 | rhov: 'ϱ',
|
2153 | RightAngleBracket: '⟩',
|
2154 | RightArrowBar: '⇥',
|
2155 | rightarrow: '→',
|
2156 | RightArrow: '→',
|
2157 | Rightarrow: '⇒',
|
2158 | RightArrowLeftArrow: '⇄',
|
2159 | rightarrowtail: '↣',
|
2160 | RightCeiling: '⌉',
|
2161 | RightDoubleBracket: '⟧',
|
2162 | RightDownTeeVector: '⥝',
|
2163 | RightDownVectorBar: '⥕',
|
2164 | RightDownVector: '⇂',
|
2165 | RightFloor: '⌋',
|
2166 | rightharpoondown: '⇁',
|
2167 | rightharpoonup: '⇀',
|
2168 | rightleftarrows: '⇄',
|
2169 | rightleftharpoons: '⇌',
|
2170 | rightrightarrows: '⇉',
|
2171 | rightsquigarrow: '↝',
|
2172 | RightTeeArrow: '↦',
|
2173 | RightTee: '⊢',
|
2174 | RightTeeVector: '⥛',
|
2175 | rightthreetimes: '⋌',
|
2176 | RightTriangleBar: '⧐',
|
2177 | RightTriangle: '⊳',
|
2178 | RightTriangleEqual: '⊵',
|
2179 | RightUpDownVector: '⥏',
|
2180 | RightUpTeeVector: '⥜',
|
2181 | RightUpVectorBar: '⥔',
|
2182 | RightUpVector: '↾',
|
2183 | RightVectorBar: '⥓',
|
2184 | RightVector: '⇀',
|
2185 | ring: '˚',
|
2186 | risingdotseq: '≓',
|
2187 | rlarr: '⇄',
|
2188 | rlhar: '⇌',
|
2189 | rlm: '\u200F',
|
2190 | rmoustache: '⎱',
|
2191 | rmoust: '⎱',
|
2192 | rnmid: '⫮',
|
2193 | roang: '⟭',
|
2194 | roarr: '⇾',
|
2195 | robrk: '⟧',
|
2196 | ropar: '⦆',
|
2197 | ropf: '𝕣',
|
2198 | Ropf: 'ℝ',
|
2199 | roplus: '⨮',
|
2200 | rotimes: '⨵',
|
2201 | RoundImplies: '⥰',
|
2202 | rpar: ')',
|
2203 | rpargt: '⦔',
|
2204 | rppolint: '⨒',
|
2205 | rrarr: '⇉',
|
2206 | Rrightarrow: '⇛',
|
2207 | rsaquo: '›',
|
2208 | rscr: '𝓇',
|
2209 | Rscr: 'ℛ',
|
2210 | rsh: '↱',
|
2211 | Rsh: '↱',
|
2212 | rsqb: ']',
|
2213 | rsquo: '’',
|
2214 | rsquor: '’',
|
2215 | rthree: '⋌',
|
2216 | rtimes: '⋊',
|
2217 | rtri: '▹',
|
2218 | rtrie: '⊵',
|
2219 | rtrif: '▸',
|
2220 | rtriltri: '⧎',
|
2221 | RuleDelayed: '⧴',
|
2222 | ruluhar: '⥨',
|
2223 | rx: '℞',
|
2224 | Sacute: 'Ś',
|
2225 | sacute: 'ś',
|
2226 | sbquo: '‚',
|
2227 | scap: '⪸',
|
2228 | Scaron: 'Š',
|
2229 | scaron: 'š',
|
2230 | Sc: '⪼',
|
2231 | sc: '≻',
|
2232 | sccue: '≽',
|
2233 | sce: '⪰',
|
2234 | scE: '⪴',
|
2235 | Scedil: 'Ş',
|
2236 | scedil: 'ş',
|
2237 | Scirc: 'Ŝ',
|
2238 | scirc: 'ŝ',
|
2239 | scnap: '⪺',
|
2240 | scnE: '⪶',
|
2241 | scnsim: '⋩',
|
2242 | scpolint: '⨓',
|
2243 | scsim: '≿',
|
2244 | Scy: 'С',
|
2245 | scy: 'с',
|
2246 | sdotb: '⊡',
|
2247 | sdot: '⋅',
|
2248 | sdote: '⩦',
|
2249 | searhk: '⤥',
|
2250 | searr: '↘',
|
2251 | seArr: '⇘',
|
2252 | searrow: '↘',
|
2253 | sect: '§',
|
2254 | semi: ';',
|
2255 | seswar: '⤩',
|
2256 | setminus: '∖',
|
2257 | setmn: '∖',
|
2258 | sext: '✶',
|
2259 | Sfr: '𝔖',
|
2260 | sfr: '𝔰',
|
2261 | sfrown: '⌢',
|
2262 | sharp: '♯',
|
2263 | SHCHcy: 'Щ',
|
2264 | shchcy: 'щ',
|
2265 | SHcy: 'Ш',
|
2266 | shcy: 'ш',
|
2267 | ShortDownArrow: '↓',
|
2268 | ShortLeftArrow: '←',
|
2269 | shortmid: '∣',
|
2270 | shortparallel: '∥',
|
2271 | ShortRightArrow: '→',
|
2272 | ShortUpArrow: '↑',
|
2273 | shy: '\xAD',
|
2274 | Sigma: 'Σ',
|
2275 | sigma: 'σ',
|
2276 | sigmaf: 'ς',
|
2277 | sigmav: 'ς',
|
2278 | sim: '∼',
|
2279 | simdot: '⩪',
|
2280 | sime: '≃',
|
2281 | simeq: '≃',
|
2282 | simg: '⪞',
|
2283 | simgE: '⪠',
|
2284 | siml: '⪝',
|
2285 | simlE: '⪟',
|
2286 | simne: '≆',
|
2287 | simplus: '⨤',
|
2288 | simrarr: '⥲',
|
2289 | slarr: '←',
|
2290 | SmallCircle: '∘',
|
2291 | smallsetminus: '∖',
|
2292 | smashp: '⨳',
|
2293 | smeparsl: '⧤',
|
2294 | smid: '∣',
|
2295 | smile: '⌣',
|
2296 | smt: '⪪',
|
2297 | smte: '⪬',
|
2298 | smtes: '⪬︀',
|
2299 | SOFTcy: 'Ь',
|
2300 | softcy: 'ь',
|
2301 | solbar: '⌿',
|
2302 | solb: '⧄',
|
2303 | sol: '/',
|
2304 | Sopf: '𝕊',
|
2305 | sopf: '𝕤',
|
2306 | spades: '♠',
|
2307 | spadesuit: '♠',
|
2308 | spar: '∥',
|
2309 | sqcap: '⊓',
|
2310 | sqcaps: '⊓︀',
|
2311 | sqcup: '⊔',
|
2312 | sqcups: '⊔︀',
|
2313 | Sqrt: '√',
|
2314 | sqsub: '⊏',
|
2315 | sqsube: '⊑',
|
2316 | sqsubset: '⊏',
|
2317 | sqsubseteq: '⊑',
|
2318 | sqsup: '⊐',
|
2319 | sqsupe: '⊒',
|
2320 | sqsupset: '⊐',
|
2321 | sqsupseteq: '⊒',
|
2322 | square: '□',
|
2323 | Square: '□',
|
2324 | SquareIntersection: '⊓',
|
2325 | SquareSubset: '⊏',
|
2326 | SquareSubsetEqual: '⊑',
|
2327 | SquareSuperset: '⊐',
|
2328 | SquareSupersetEqual: '⊒',
|
2329 | SquareUnion: '⊔',
|
2330 | squarf: '▪',
|
2331 | squ: '□',
|
2332 | squf: '▪',
|
2333 | srarr: '→',
|
2334 | Sscr: '𝒮',
|
2335 | sscr: '𝓈',
|
2336 | ssetmn: '∖',
|
2337 | ssmile: '⌣',
|
2338 | sstarf: '⋆',
|
2339 | Star: '⋆',
|
2340 | star: '☆',
|
2341 | starf: '★',
|
2342 | straightepsilon: 'ϵ',
|
2343 | straightphi: 'ϕ',
|
2344 | strns: '¯',
|
2345 | sub: '⊂',
|
2346 | Sub: '⋐',
|
2347 | subdot: '⪽',
|
2348 | subE: '⫅',
|
2349 | sube: '⊆',
|
2350 | subedot: '⫃',
|
2351 | submult: '⫁',
|
2352 | subnE: '⫋',
|
2353 | subne: '⊊',
|
2354 | subplus: '⪿',
|
2355 | subrarr: '⥹',
|
2356 | subset: '⊂',
|
2357 | Subset: '⋐',
|
2358 | subseteq: '⊆',
|
2359 | subseteqq: '⫅',
|
2360 | SubsetEqual: '⊆',
|
2361 | subsetneq: '⊊',
|
2362 | subsetneqq: '⫋',
|
2363 | subsim: '⫇',
|
2364 | subsub: '⫕',
|
2365 | subsup: '⫓',
|
2366 | succapprox: '⪸',
|
2367 | succ: '≻',
|
2368 | succcurlyeq: '≽',
|
2369 | Succeeds: '≻',
|
2370 | SucceedsEqual: '⪰',
|
2371 | SucceedsSlantEqual: '≽',
|
2372 | SucceedsTilde: '≿',
|
2373 | succeq: '⪰',
|
2374 | succnapprox: '⪺',
|
2375 | succneqq: '⪶',
|
2376 | succnsim: '⋩',
|
2377 | succsim: '≿',
|
2378 | SuchThat: '∋',
|
2379 | sum: '∑',
|
2380 | Sum: '∑',
|
2381 | sung: '♪',
|
2382 | sup1: '¹',
|
2383 | sup2: '²',
|
2384 | sup3: '³',
|
2385 | sup: '⊃',
|
2386 | Sup: '⋑',
|
2387 | supdot: '⪾',
|
2388 | supdsub: '⫘',
|
2389 | supE: '⫆',
|
2390 | supe: '⊇',
|
2391 | supedot: '⫄',
|
2392 | Superset: '⊃',
|
2393 | SupersetEqual: '⊇',
|
2394 | suphsol: '⟉',
|
2395 | suphsub: '⫗',
|
2396 | suplarr: '⥻',
|
2397 | supmult: '⫂',
|
2398 | supnE: '⫌',
|
2399 | supne: '⊋',
|
2400 | supplus: '⫀',
|
2401 | supset: '⊃',
|
2402 | Supset: '⋑',
|
2403 | supseteq: '⊇',
|
2404 | supseteqq: '⫆',
|
2405 | supsetneq: '⊋',
|
2406 | supsetneqq: '⫌',
|
2407 | supsim: '⫈',
|
2408 | supsub: '⫔',
|
2409 | supsup: '⫖',
|
2410 | swarhk: '⤦',
|
2411 | swarr: '↙',
|
2412 | swArr: '⇙',
|
2413 | swarrow: '↙',
|
2414 | swnwar: '⤪',
|
2415 | szlig: 'ß',
|
2416 | Tab: ' ',
|
2417 | target: '⌖',
|
2418 | Tau: 'Τ',
|
2419 | tau: 'τ',
|
2420 | tbrk: '⎴',
|
2421 | Tcaron: 'Ť',
|
2422 | tcaron: 'ť',
|
2423 | Tcedil: 'Ţ',
|
2424 | tcedil: 'ţ',
|
2425 | Tcy: 'Т',
|
2426 | tcy: 'т',
|
2427 | tdot: '⃛',
|
2428 | telrec: '⌕',
|
2429 | Tfr: '𝔗',
|
2430 | tfr: '𝔱',
|
2431 | there4: '∴',
|
2432 | therefore: '∴',
|
2433 | Therefore: '∴',
|
2434 | Theta: 'Θ',
|
2435 | theta: 'θ',
|
2436 | thetasym: 'ϑ',
|
2437 | thetav: 'ϑ',
|
2438 | thickapprox: '≈',
|
2439 | thicksim: '∼',
|
2440 | ThickSpace: ' ',
|
2441 | ThinSpace: ' ',
|
2442 | thinsp: ' ',
|
2443 | thkap: '≈',
|
2444 | thksim: '∼',
|
2445 | THORN: 'Þ',
|
2446 | thorn: 'þ',
|
2447 | tilde: '˜',
|
2448 | Tilde: '∼',
|
2449 | TildeEqual: '≃',
|
2450 | TildeFullEqual: '≅',
|
2451 | TildeTilde: '≈',
|
2452 | timesbar: '⨱',
|
2453 | timesb: '⊠',
|
2454 | times: '×',
|
2455 | timesd: '⨰',
|
2456 | tint: '∭',
|
2457 | toea: '⤨',
|
2458 | topbot: '⌶',
|
2459 | topcir: '⫱',
|
2460 | top: '⊤',
|
2461 | Topf: '𝕋',
|
2462 | topf: '𝕥',
|
2463 | topfork: '⫚',
|
2464 | tosa: '⤩',
|
2465 | tprime: '‴',
|
2466 | trade: '™',
|
2467 | TRADE: '™',
|
2468 | triangle: '▵',
|
2469 | triangledown: '▿',
|
2470 | triangleleft: '◃',
|
2471 | trianglelefteq: '⊴',
|
2472 | triangleq: '≜',
|
2473 | triangleright: '▹',
|
2474 | trianglerighteq: '⊵',
|
2475 | tridot: '◬',
|
2476 | trie: '≜',
|
2477 | triminus: '⨺',
|
2478 | TripleDot: '⃛',
|
2479 | triplus: '⨹',
|
2480 | trisb: '⧍',
|
2481 | tritime: '⨻',
|
2482 | trpezium: '⏢',
|
2483 | Tscr: '𝒯',
|
2484 | tscr: '𝓉',
|
2485 | TScy: 'Ц',
|
2486 | tscy: 'ц',
|
2487 | TSHcy: 'Ћ',
|
2488 | tshcy: 'ћ',
|
2489 | Tstrok: 'Ŧ',
|
2490 | tstrok: 'ŧ',
|
2491 | twixt: '≬',
|
2492 | twoheadleftarrow: '↞',
|
2493 | twoheadrightarrow: '↠',
|
2494 | Uacute: 'Ú',
|
2495 | uacute: 'ú',
|
2496 | uarr: '↑',
|
2497 | Uarr: '↟',
|
2498 | uArr: '⇑',
|
2499 | Uarrocir: '⥉',
|
2500 | Ubrcy: 'Ў',
|
2501 | ubrcy: 'ў',
|
2502 | Ubreve: 'Ŭ',
|
2503 | ubreve: 'ŭ',
|
2504 | Ucirc: 'Û',
|
2505 | ucirc: 'û',
|
2506 | Ucy: 'У',
|
2507 | ucy: 'у',
|
2508 | udarr: '⇅',
|
2509 | Udblac: 'Ű',
|
2510 | udblac: 'ű',
|
2511 | udhar: '⥮',
|
2512 | ufisht: '⥾',
|
2513 | Ufr: '𝔘',
|
2514 | ufr: '𝔲',
|
2515 | Ugrave: 'Ù',
|
2516 | ugrave: 'ù',
|
2517 | uHar: '⥣',
|
2518 | uharl: '↿',
|
2519 | uharr: '↾',
|
2520 | uhblk: '▀',
|
2521 | ulcorn: '⌜',
|
2522 | ulcorner: '⌜',
|
2523 | ulcrop: '⌏',
|
2524 | ultri: '◸',
|
2525 | Umacr: 'Ū',
|
2526 | umacr: 'ū',
|
2527 | uml: '¨',
|
2528 | UnderBar: '_',
|
2529 | UnderBrace: '⏟',
|
2530 | UnderBracket: '⎵',
|
2531 | UnderParenthesis: '⏝',
|
2532 | Union: '⋃',
|
2533 | UnionPlus: '⊎',
|
2534 | Uogon: 'Ų',
|
2535 | uogon: 'ų',
|
2536 | Uopf: '𝕌',
|
2537 | uopf: '𝕦',
|
2538 | UpArrowBar: '⤒',
|
2539 | uparrow: '↑',
|
2540 | UpArrow: '↑',
|
2541 | Uparrow: '⇑',
|
2542 | UpArrowDownArrow: '⇅',
|
2543 | updownarrow: '↕',
|
2544 | UpDownArrow: '↕',
|
2545 | Updownarrow: '⇕',
|
2546 | UpEquilibrium: '⥮',
|
2547 | upharpoonleft: '↿',
|
2548 | upharpoonright: '↾',
|
2549 | uplus: '⊎',
|
2550 | UpperLeftArrow: '↖',
|
2551 | UpperRightArrow: '↗',
|
2552 | upsi: 'υ',
|
2553 | Upsi: 'ϒ',
|
2554 | upsih: 'ϒ',
|
2555 | Upsilon: 'Υ',
|
2556 | upsilon: 'υ',
|
2557 | UpTeeArrow: '↥',
|
2558 | UpTee: '⊥',
|
2559 | upuparrows: '⇈',
|
2560 | urcorn: '⌝',
|
2561 | urcorner: '⌝',
|
2562 | urcrop: '⌎',
|
2563 | Uring: 'Ů',
|
2564 | uring: 'ů',
|
2565 | urtri: '◹',
|
2566 | Uscr: '𝒰',
|
2567 | uscr: '𝓊',
|
2568 | utdot: '⋰',
|
2569 | Utilde: 'Ũ',
|
2570 | utilde: 'ũ',
|
2571 | utri: '▵',
|
2572 | utrif: '▴',
|
2573 | uuarr: '⇈',
|
2574 | Uuml: 'Ü',
|
2575 | uuml: 'ü',
|
2576 | uwangle: '⦧',
|
2577 | vangrt: '⦜',
|
2578 | varepsilon: 'ϵ',
|
2579 | varkappa: 'ϰ',
|
2580 | varnothing: '∅',
|
2581 | varphi: 'ϕ',
|
2582 | varpi: 'ϖ',
|
2583 | varpropto: '∝',
|
2584 | varr: '↕',
|
2585 | vArr: '⇕',
|
2586 | varrho: 'ϱ',
|
2587 | varsigma: 'ς',
|
2588 | varsubsetneq: '⊊︀',
|
2589 | varsubsetneqq: '⫋︀',
|
2590 | varsupsetneq: '⊋︀',
|
2591 | varsupsetneqq: '⫌︀',
|
2592 | vartheta: 'ϑ',
|
2593 | vartriangleleft: '⊲',
|
2594 | vartriangleright: '⊳',
|
2595 | vBar: '⫨',
|
2596 | Vbar: '⫫',
|
2597 | vBarv: '⫩',
|
2598 | Vcy: 'В',
|
2599 | vcy: 'в',
|
2600 | vdash: '⊢',
|
2601 | vDash: '⊨',
|
2602 | Vdash: '⊩',
|
2603 | VDash: '⊫',
|
2604 | Vdashl: '⫦',
|
2605 | veebar: '⊻',
|
2606 | vee: '∨',
|
2607 | Vee: '⋁',
|
2608 | veeeq: '≚',
|
2609 | vellip: '⋮',
|
2610 | verbar: '|',
|
2611 | Verbar: '‖',
|
2612 | vert: '|',
|
2613 | Vert: '‖',
|
2614 | VerticalBar: '∣',
|
2615 | VerticalLine: '|',
|
2616 | VerticalSeparator: '❘',
|
2617 | VerticalTilde: '≀',
|
2618 | VeryThinSpace: ' ',
|
2619 | Vfr: '𝔙',
|
2620 | vfr: '𝔳',
|
2621 | vltri: '⊲',
|
2622 | vnsub: '⊂⃒',
|
2623 | vnsup: '⊃⃒',
|
2624 | Vopf: '𝕍',
|
2625 | vopf: '𝕧',
|
2626 | vprop: '∝',
|
2627 | vrtri: '⊳',
|
2628 | Vscr: '𝒱',
|
2629 | vscr: '𝓋',
|
2630 | vsubnE: '⫋︀',
|
2631 | vsubne: '⊊︀',
|
2632 | vsupnE: '⫌︀',
|
2633 | vsupne: '⊋︀',
|
2634 | Vvdash: '⊪',
|
2635 | vzigzag: '⦚',
|
2636 | Wcirc: 'Ŵ',
|
2637 | wcirc: 'ŵ',
|
2638 | wedbar: '⩟',
|
2639 | wedge: '∧',
|
2640 | Wedge: '⋀',
|
2641 | wedgeq: '≙',
|
2642 | weierp: '℘',
|
2643 | Wfr: '𝔚',
|
2644 | wfr: '𝔴',
|
2645 | Wopf: '𝕎',
|
2646 | wopf: '𝕨',
|
2647 | wp: '℘',
|
2648 | wr: '≀',
|
2649 | wreath: '≀',
|
2650 | Wscr: '𝒲',
|
2651 | wscr: '𝓌',
|
2652 | xcap: '⋂',
|
2653 | xcirc: '◯',
|
2654 | xcup: '⋃',
|
2655 | xdtri: '▽',
|
2656 | Xfr: '𝔛',
|
2657 | xfr: '𝔵',
|
2658 | xharr: '⟷',
|
2659 | xhArr: '⟺',
|
2660 | Xi: 'Ξ',
|
2661 | xi: 'ξ',
|
2662 | xlarr: '⟵',
|
2663 | xlArr: '⟸',
|
2664 | xmap: '⟼',
|
2665 | xnis: '⋻',
|
2666 | xodot: '⨀',
|
2667 | Xopf: '𝕏',
|
2668 | xopf: '𝕩',
|
2669 | xoplus: '⨁',
|
2670 | xotime: '⨂',
|
2671 | xrarr: '⟶',
|
2672 | xrArr: '⟹',
|
2673 | Xscr: '𝒳',
|
2674 | xscr: '𝓍',
|
2675 | xsqcup: '⨆',
|
2676 | xuplus: '⨄',
|
2677 | xutri: '△',
|
2678 | xvee: '⋁',
|
2679 | xwedge: '⋀',
|
2680 | Yacute: 'Ý',
|
2681 | yacute: 'ý',
|
2682 | YAcy: 'Я',
|
2683 | yacy: 'я',
|
2684 | Ycirc: 'Ŷ',
|
2685 | ycirc: 'ŷ',
|
2686 | Ycy: 'Ы',
|
2687 | ycy: 'ы',
|
2688 | yen: '¥',
|
2689 | Yfr: '𝔜',
|
2690 | yfr: '𝔶',
|
2691 | YIcy: 'Ї',
|
2692 | yicy: 'ї',
|
2693 | Yopf: '𝕐',
|
2694 | yopf: '𝕪',
|
2695 | Yscr: '𝒴',
|
2696 | yscr: '𝓎',
|
2697 | YUcy: 'Ю',
|
2698 | yucy: 'ю',
|
2699 | yuml: 'ÿ',
|
2700 | Yuml: 'Ÿ',
|
2701 | Zacute: 'Ź',
|
2702 | zacute: 'ź',
|
2703 | Zcaron: 'Ž',
|
2704 | zcaron: 'ž',
|
2705 | Zcy: 'З',
|
2706 | zcy: 'з',
|
2707 | Zdot: 'Ż',
|
2708 | zdot: 'ż',
|
2709 | zeetrf: 'ℨ',
|
2710 | ZeroWidthSpace: '\u200B',
|
2711 | Zeta: 'Ζ',
|
2712 | zeta: 'ζ',
|
2713 | zfr: '𝔷',
|
2714 | Zfr: 'ℨ',
|
2715 | ZHcy: 'Ж',
|
2716 | zhcy: 'ж',
|
2717 | zigrarr: '⇝',
|
2718 | zopf: '𝕫',
|
2719 | Zopf: 'ℤ',
|
2720 | Zscr: '𝒵',
|
2721 | zscr: '𝓏',
|
2722 | zwj: '\u200D',
|
2723 | zwnj: '\u200C',
|
2724 | });
|
2725 |
|
2726 | const CONTINUE_ENTITIES = NULL({ Aacute:0, aacute:0, Acirc:0, acirc:0, acute:0, AElig:0, aelig:0, Agrave:0, agrave:0, amp:0, AMP:0, Aring:0, aring:0, Atilde:0, atilde:0, Auml:0, auml:0, brvbar:0, Ccedil:0, ccedil:0, cedil:0, cent:0, copy:0, COPY:0, curren:0, deg:0, divide:0, Eacute:0, eacute:0, Ecirc:0, ecirc:0, Egrave:0, egrave:0, ETH:0, eth:0, Euml:0, euml:0, frac12:0, frac14:0, frac34:0, gt:0, GT:0, Iacute:0, iacute:0, Icirc:0, icirc:0, iexcl:0, Igrave:0, igrave:0, iquest:0, Iuml:0, iuml:0, laquo:0, lt:0, LT:0, macr:0, micro:0, middot:0, nbsp:0, not:0, Ntilde:0, ntilde:0, Oacute:0, oacute:0, Ocirc:0, ocirc:0, Ograve:0, ograve:0, ordf:0, ordm:0, Oslash:0, oslash:0, Otilde:0, otilde:0, Ouml:0, ouml:0, para:0, plusmn:0, pound:0, quot:0, QUOT:0, raquo:0, reg:0, REG:0, sect:0, shy:0, sup1:0, sup2:0, sup3:0, szlig:0, THORN:0, thorn:0, times:0, Uacute:0, uacute:0, Ucirc:0, ucirc:0, Ugrave:0, ugrave:0, uml:0, Uuml:0, uuml:0, Yacute:0, yacute:0, yen:0, yuml:0 });
|
2727 |
|
2728 | const ESCAPABLE_INNER_TEXT = /[\t\n\r\x20&<\xA0\u2000-\u200A\u2028\u2029\u202F\u3000]/g;
|
2729 | const escapableInnerTextReplacer = ($0 ) => `&#${$0.charCodeAt(0)};`;
|
2730 | function escapeInnerText (text ) { return text.replace(ESCAPABLE_INNER_TEXT, escapableInnerTextReplacer); }
|
2731 |
|
2732 | const ESCAPABLE_ATTRIBUTE_VALUE = /["&]/g;
|
2733 | const escapableAttributeValueReplacer = ($0 ) => $0==='"' ? '"' : '&';
|
2734 | function escapeAttributeValue (text ) { return text.replace(ESCAPABLE_ATTRIBUTE_VALUE, escapableAttributeValueReplacer); }
|
2735 |
|
2736 | const CONTROL_TO_CHAR = NULL({
|
2737 | 0x80: 0x20AC,
|
2738 | 0x82: 0x201A,
|
2739 | 0x83: 0x0192,
|
2740 | 0x84: 0x201E,
|
2741 | 0x85: 0x2026,
|
2742 | 0x86: 0x2020,
|
2743 | 0x87: 0x2021,
|
2744 | 0x88: 0x02C6,
|
2745 | 0x89: 0x2030,
|
2746 | 0x8A: 0x0160,
|
2747 | 0x8B: 0x2039,
|
2748 | 0x8C: 0x0152,
|
2749 | 0x8E: 0x017D,
|
2750 | 0x91: 0x2018,
|
2751 | 0x92: 0x2019,
|
2752 | 0x93: 0x201C,
|
2753 | 0x94: 0x201D,
|
2754 | 0x95: 0x2022,
|
2755 | 0x96: 0x2013,
|
2756 | 0x97: 0x2014,
|
2757 | 0x98: 0x02DC,
|
2758 | 0x99: 0x2122,
|
2759 | 0x9A: 0x0161,
|
2760 | 0x9B: 0x203A,
|
2761 | 0x9C: 0x0153,
|
2762 | 0x9E: 0x017E,
|
2763 | 0x9F: 0x0178,
|
2764 | });
|
2765 |
|
2766 | const ENTITIES_TO_TRY = /&([a-z][a-z\d]*|#(?:\d+|x[\dA-F]+));?/ig;
|
2767 |
|
2768 | function unescape_or_return (ambiguous_ampersand , inner ) {
|
2769 | if ( inner[0]==='#' ) {
|
2770 | const codePoint = ambiguous_ampersand[2]==='x'
|
2771 | ? parseInt(inner.slice(2), 16)
|
2772 | : parseInt(inner.slice(1), 10);
|
2773 | if ( codePoint===0x00 || 0xD800<=codePoint && codePoint<=0xDFFF || 0x10FFFF<codePoint ) { return '\uFFFD'; }
|
2774 | return fromCodePoint(codePoint in CONTROL_TO_CHAR ? CONTROL_TO_CHAR[codePoint ] : codePoint);
|
2775 | }
|
2776 | else {
|
2777 | if ( ambiguous_ampersand.endsWith(';') && inner in SEMICOLON_ENTITIES ) { return SEMICOLON_ENTITIES[inner]; }
|
2778 | for ( let index = inner.length; ;--index ) {
|
2779 | if ( inner.slice(0, index) in CONTINUE_ENTITIES ) {
|
2780 | return SEMICOLON_ENTITIES[ambiguous_ampersand.slice(0, index)]+ambiguous_ampersand.slice(index);
|
2781 | }
|
2782 | if ( index===1 ) { return ambiguous_ampersand; }
|
2783 | }
|
2784 | }
|
2785 | }
|
2786 |
|
2787 | const ENTITIES = /&(?:(?:([a-z][a-z\d]*)|#(?:\d+|x[\dA-F]+));?)?/ig;
|
2788 |
|
2789 | function unescape_or_throw (ambiguous_ampersand , named ) {
|
2790 | if ( ambiguous_ampersand.length===1 ) { throw SyntaxError(`孤立的“&”没有作为 HTML 实体存在`); }
|
2791 | if ( !ambiguous_ampersand.endsWith(';') ) { throw SyntaxError(`HTML 实体“${ambiguous_ampersand}”后缺少“;”`); }
|
2792 | if ( named ) {
|
2793 | if ( named in SEMICOLON_ENTITIES ) { return SEMICOLON_ENTITIES[named]; }
|
2794 | throw ReferenceError(`未知的 HTML 实体名称“${ambiguous_ampersand}”`);
|
2795 | }
|
2796 | const codePoint = ambiguous_ampersand[2]==='x' ? parseInt(ambiguous_ampersand.slice(3, -1), 16) : parseInt(ambiguous_ampersand.slice(2, -1), 10);
|
2797 | if ( codePoint===0x00 ) { throw RangeError(`HTML 实体“${ambiguous_ampersand}”数值为空(U+0000)码点`); }
|
2798 | if ( codePoint>0x10FFFF ) { throw RangeError(`HTML 实体“${ambiguous_ampersand}”数值超出了 Unicode 的最大范围(U+10FFFF)`); }
|
2799 | const unicode = fromCodePoint(codePoint);
|
2800 | if ( NON_SCALAR.test(unicode) ) { throw RangeError(`HTML 实体“${ambiguous_ampersand}”数值是单个代理对码点(U+D800〜U+DFFF)`); }
|
2801 | if ( NONCHARACTER.test(unicode) ) { throw RangeError(`HTML 实体“${ambiguous_ampersand}”数值是永久未定义字符码点(U+FDD0〜U+FDEF、U+[00-10]FFFE、U+[00-10]FFFF)`); }
|
2802 | if ( CONTROL_CHARACTER.test(unicode) || codePoint===0x0D ) { throw RangeError(`HTML 实体“${ambiguous_ampersand}”数值是除水平制表(U+0009)换行(U+000A)换页(U+000C)以外的控制字符(U+0000〜U+001F、U+007F〜U+009F)`); }
|
2803 | return unicode;
|
2804 | }
|
2805 |
|
2806 | function unescape (string , fallback ) {
|
2807 | return fallback
|
2808 | ? string.replace(ENTITIES_TO_TRY, unescape_or_return)
|
2809 | : string.replace(ENTITIES, unescape_or_throw);
|
2810 | }
|
2811 |
|
2812 | const keys = Object.keys;
|
2813 |
|
2814 | const Object_defineProperties = Object.defineProperties;
|
2815 |
|
2816 | const Reflect_apply = Reflect.apply;
|
2817 |
|
2818 | const Reflect_construct = Reflect.construct;
|
2819 |
|
2820 | const Reflect_defineProperty = Reflect.defineProperty;
|
2821 |
|
2822 | const Reflect_deleteProperty = Reflect.deleteProperty;
|
2823 |
|
2824 | const Reflect_set = Reflect.set;
|
2825 |
|
2826 | const Reflect_ownKeys = Reflect.ownKeys;
|
2827 |
|
2828 |
|
2829 |
|
2830 |
|
2831 |
|
2832 |
|
2833 |
|
2834 |
|
2835 |
|
2836 |
|
2837 |
|
2838 |
|
2839 | const Keeper = Set;
|
2840 | const target2keeper = new WeakMap;
|
2841 | const proxy2target = new WeakMap;
|
2842 | const target2proxy = new WeakMap;
|
2843 |
|
2844 | const setDescriptor = assign(create(null), {
|
2845 | value: undefined$1,
|
2846 | writable: true,
|
2847 | enumerable: true,
|
2848 | configurable: true,
|
2849 | });
|
2850 | const handlers = assign(create(null), {
|
2851 | apply (Function , thisArg , args ) {
|
2852 | return orderify(Reflect_apply(Function, thisArg, args));
|
2853 | },
|
2854 | construct (Class , args , newTarget ) {
|
2855 | return orderify(Reflect_construct(Class, args, newTarget));
|
2856 | },
|
2857 | defineProperty (target , key , descriptor ) {
|
2858 | if ( Reflect_defineProperty(target, key, PartialDescriptor(descriptor)) ) {
|
2859 | target2keeper.get(target) .add(key);
|
2860 | return true;
|
2861 | }
|
2862 | return false;
|
2863 | },
|
2864 | deleteProperty (target , key ) {
|
2865 | if ( Reflect_deleteProperty(target, key) ) {
|
2866 | target2keeper.get(target) .delete(key);
|
2867 | return true;
|
2868 | }
|
2869 | return false;
|
2870 | },
|
2871 | ownKeys (target ) {
|
2872 | return [ ...target2keeper.get(target) ];
|
2873 | },
|
2874 | set (target , key , value , receiver ) {
|
2875 | if ( key in target ) { return Reflect_set(target, key, value, receiver); }
|
2876 | setDescriptor.value = value;
|
2877 | if ( Reflect_defineProperty(target, key, setDescriptor) ) {
|
2878 | target2keeper.get(target) .add(key);
|
2879 | setDescriptor.value = undefined$1;
|
2880 | return true;
|
2881 | }
|
2882 | else {
|
2883 | setDescriptor.value = undefined$1;
|
2884 | return false;
|
2885 | }
|
2886 | },
|
2887 | });
|
2888 |
|
2889 | function newProxy (target , keeper ) {
|
2890 | target2keeper.set(target, keeper);
|
2891 | const proxy = new Proxy(target, handlers);
|
2892 | proxy2target.set(proxy, target);
|
2893 | return proxy;
|
2894 | }
|
2895 |
|
2896 | const { orderify } = {
|
2897 | orderify (object ) {
|
2898 | if ( proxy2target.has(object) ) { return object; }
|
2899 | let proxy = target2proxy.get(object) ;
|
2900 | if ( proxy ) { return proxy; }
|
2901 | proxy = newProxy(object, new Keeper(Reflect_ownKeys(object)));
|
2902 | target2proxy.set(object, proxy);
|
2903 | return proxy;
|
2904 | }
|
2905 | };
|
2906 |
|
2907 | function PartialDescriptor (source ) {
|
2908 | const target = create(null);
|
2909 | if ( source.hasOwnProperty('value') ) {
|
2910 | target.value = source.value;
|
2911 | if ( source.hasOwnProperty('writable') ) { target.writable = source.writable; }
|
2912 | }
|
2913 | else if ( source.hasOwnProperty('writable') ) { target.writable = source.writable; }
|
2914 | else if ( source.hasOwnProperty('get') ) {
|
2915 | target.get = source.get;
|
2916 | if ( source.hasOwnProperty('set') ) { target.set = source.set; }
|
2917 | }
|
2918 | else if ( source.hasOwnProperty('set') ) { target.set = source.set; }
|
2919 | if ( source.hasOwnProperty('enumerable') ) { target.enumerable = source.enumerable; }
|
2920 | if ( source.hasOwnProperty('configurable') ) { target.configurable = source.configurable; }
|
2921 | return target;
|
2922 | }
|
2923 | function InternalDescriptor (source ) {
|
2924 | const target = create(null);
|
2925 | if ( source.hasOwnProperty('value') ) {
|
2926 | target.value = source.value;
|
2927 | target.writable = source.writable;
|
2928 | }
|
2929 | else {
|
2930 | target.get = source.get;
|
2931 | target.set = source.set;
|
2932 | }
|
2933 | target.enumerable = source.enumerable;
|
2934 | target.configurable = source.configurable;
|
2935 | return target;
|
2936 | }
|
2937 |
|
2938 | const { getOwnPropertyDescriptors } = {
|
2939 | getOwnPropertyDescriptors (object ) {
|
2940 | const descriptors = create(null);
|
2941 | const keeper = new Keeper;
|
2942 | const keys = Reflect_ownKeys(object);
|
2943 | for ( let length = keys.length, index = 0; index<length; ++index ) {
|
2944 | const key = keys[index];
|
2945 | descriptors[key] = InternalDescriptor(Object_getOwnPropertyDescriptor(object, key) );
|
2946 | keeper.add(key);
|
2947 | }
|
2948 | return newProxy(descriptors, keeper);
|
2949 | }
|
2950 | };
|
2951 |
|
2952 | function keeperAddKeys (keeper , object ) {
|
2953 | const keys = Reflect_ownKeys(object);
|
2954 | for ( let length = keys.length, index = 0; index<length; ++index ) {
|
2955 | keeper.add(keys[index]);
|
2956 | }
|
2957 | }
|
2958 | function NULL_from (source , define ) {
|
2959 | const target = create(null);
|
2960 | const keeper = new Keeper;
|
2961 | if ( define ) {
|
2962 | if ( isArray(source) ) {
|
2963 | for ( let length = source.length, index = 0; index<length; ++index ) {
|
2964 | const descriptorMap = getOwnPropertyDescriptors(source[index]);
|
2965 | Object_defineProperties(target, descriptorMap);
|
2966 | keeperAddKeys(keeper, descriptorMap);
|
2967 | }
|
2968 | }
|
2969 | else {
|
2970 | const descriptorMap = getOwnPropertyDescriptors(source);
|
2971 | Object_defineProperties(target, descriptorMap);
|
2972 | keeperAddKeys(keeper, descriptorMap);
|
2973 | }
|
2974 | }
|
2975 | else {
|
2976 | if ( isArray(source) ) {
|
2977 | assign(target, ...source);
|
2978 | for ( let length = source.length, index = 0; index<length; ++index ) {
|
2979 | keeperAddKeys(keeper, source[index]);
|
2980 | }
|
2981 | }
|
2982 | else {
|
2983 | assign(target, source);
|
2984 | keeperAddKeys(keeper, source);
|
2985 | }
|
2986 | }
|
2987 | return newProxy(target, keeper);
|
2988 | }
|
2989 | function throwConstructing () { throw TypeError(`NULL cannot be invoked with 'new'`); }
|
2990 | const NULL$1 =
|
2991 |
|
2992 | function ( ) {
|
2993 | const NULL = function ( source , define ) {
|
2994 | return new.target
|
2995 | ? new.target===NULL
|
2996 | ? throwConstructing()
|
2997 | : newProxy(this, new Keeper)
|
2998 | : NULL_from(source , define );
|
2999 | };
|
3000 | NULL.prototype = null;
|
3001 |
|
3002 |
|
3003 | freeze(NULL);
|
3004 | return NULL;
|
3005 | }();
|
3006 |
|
3007 |
|
3008 |
|
3009 | class Attributes extends NULL$1 {
|
3010 |
|
3011 |
|
3012 |
|
3013 | [Symbol.toPrimitive] ( hint ) {
|
3014 | if ( hint==='number' ) { return keys(this).length; }
|
3015 | let literal = '';
|
3016 | for ( const name in this ) {
|
3017 | const value = this[name];
|
3018 | literal += value===undefined$1 ? ` ${name}` : ` ${name}="${escapeAttributeValue(value)}"`;
|
3019 | }
|
3020 | return literal;
|
3021 | }
|
3022 |
|
3023 | }
|
3024 | delete Attributes.prototype.constructor;
|
3025 |
|
3026 | freeze(Attributes.prototype);
|
3027 |
|
3028 | const ELEMENT_START = 1.1;
|
3029 | const ELEMENT_END = 1.2;
|
3030 | const ELEMENT_SELF_CLOSING = 1.3;
|
3031 | const TEXT = 3;
|
3032 | const COMMENT = 8;
|
3033 | const EOF = 0;
|
3034 |
|
3035 | function Tag (html , position , foreign ) {
|
3036 |
|
3037 | let rest ;
|
3038 |
|
3039 | if ( html.startsWith('<', position) ) {
|
3040 |
|
3041 | if ( html.startsWith('!', position+1) ) {
|
3042 | if ( !html.startsWith('--', position+2) ) { throw SyntaxError(html.startsWith('[CDATA[', position+2) && !foreign ? `“<![CDATA[”“]]>”语法只能用于 foreign 元素(MathML 或 SVG)内` : `标准的注释语法应由“<!--”而非“ <!”开启`); }
|
3043 | if ( html.startsWith('>', position+4) || html.startsWith('->', position+4) ) { throw SyntaxError(`紧随“<!--”注释开始语法之后出现的“>”或“->”会造成注释意外中断`); }
|
3044 | const end = html.indexOf('-->', position+4);
|
3045 | if ( end<0 ) { throw SyntaxError(html.includes('--!>', position+4) ? '应使用“-->”而非“--!>”关闭注释节点' : '存在未关闭的注释节点'); }
|
3046 | const data = html.slice(position+4, end);
|
3047 | if ( data.includes('--!>') ) { throw SyntaxError(`“--!>”会造成注释意外中断`); }
|
3048 | return { type: COMMENT, data, end: end+3 };
|
3049 | }
|
3050 |
|
3051 | if ( html.startsWith('?', position+1) ) { throw SyntaxError(foreign ? `不知该如何对待“<?”开启的 XML 指令/声明` : `在 HTML 上下文中,“<?”XML 指令/声明只会被作为注释对待,而且其引号属性并不安全`); }
|
3052 |
|
3053 | rest = html.slice(position);
|
3054 |
|
3055 | if ( IS_TAG.test(rest) ) {
|
3056 | const { 0: { length }, 1: endSolidus, 2: xName, 3: attributesLiteral, 4: selfClosingSolidus } = TAG.exec(rest) || throwSyntaxError('标签格式有误');
|
3057 | if ( endSolidus ) {
|
3058 | if ( attributesLiteral ) { throw SyntaxError(`结束标签中存在属性`); }
|
3059 | if ( selfClosingSolidus ) { throw SyntaxError(`结束标签中存在自关闭斜杠`); }
|
3060 | return { type: ELEMENT_END, xName, end: position+length };
|
3061 | }
|
3062 | const attributes = new Attributes;
|
3063 | if ( attributesLiteral ) {
|
3064 | for ( let name of attributesLiteral.match(ATTRIBUTE) ) {
|
3065 | let value ;
|
3066 | if ( name.includes('=') ) {
|
3067 | ( { 1: name, 2: value } = ATTRIBUTE_NAME_VALUE.exec(name) );
|
3068 | value = unescape(value.startsWith('"') || value.startsWith('\'') ? value.slice(1, -1) : value);
|
3069 | }
|
3070 | if ( name in attributes ) { throw SyntaxError(`标签中出现了重复的属性“${name}”`); }
|
3071 | else { attributes[name] = value; }
|
3072 | }
|
3073 | if ( attributesLiteral.endsWith('/') ) { throw SyntaxError(`标签结尾处的“/”有歧义,无法达到标注标签为自闭合的目的,而是会作为最后一个无引号属性值的结束字符`); }
|
3074 | }
|
3075 | return { type: selfClosingSolidus ? ELEMENT_SELF_CLOSING : ELEMENT_START, xName, attributes, end: position+length };
|
3076 | }
|
3077 |
|
3078 | }
|
3079 |
|
3080 | else { rest = html.slice(position); }
|
3081 |
|
3082 | if ( rest ) {
|
3083 | let end = rest.search(TAG_LIKE);
|
3084 | end = end<0 ? html.length : position+end;
|
3085 | return { type: TEXT, raw: html.slice(position, end), end };
|
3086 | }
|
3087 |
|
3088 | return { type: EOF, end: html.length };
|
3089 |
|
3090 | }
|
3091 |
|
3092 | const { rollup } = require('rollup') ;
|
3093 | const AcornClassFields = require('acorn-class-fields');
|
3094 | const AcornStaticClassFeatures = require('acorn-static-class-features');
|
3095 | const AcornPrivateMethods = require('acorn-private-methods');
|
3096 | function AcornStage3 (Parser ) {
|
3097 | return Parser.extend(
|
3098 | AcornClassFields,
|
3099 | AcornStaticClassFeatures,
|
3100 | AcornPrivateMethods,
|
3101 | );
|
3102 | }
|
3103 |
|
3104 | const transpileModule = require('@ltd/j-ts') ;
|
3105 | const Parser = ( require('acorn') ).Parser.extend(AcornStage3);
|
3106 | const { simple } = require('acorn-walk');
|
3107 | const findGlobals = require('@ltd/acorn-globals') ;
|
3108 | const { compile } = require('vue-template-compiler') ;
|
3109 | const { minify } = require('terser') ;
|
3110 |
|
3111 | class Block extends NULL {
|
3112 |
|
3113 | constructor (blockName , attributes , emitProperties , inner , END_TAG ) {
|
3114 | super();
|
3115 | this.blockName = blockName;
|
3116 | this.attributes = attributes;
|
3117 | if ( inner===undefined$1 ) {
|
3118 | if ( emitProperties ) {
|
3119 | if ( attributes.src===undefined$1 ) { throw SyntaxError(`自闭合功能块元素必须存在 src 属性值`); }
|
3120 | this.src = attributes.src;
|
3121 | if ( 'lang' in attributes ) { throw SyntaxError(`自闭合功能块元素不支持 lang 属性`); }
|
3122 | }
|
3123 | }
|
3124 | else {
|
3125 | this.inner = inner;
|
3126 | if ( emitProperties ) {
|
3127 | if ( 'src' in attributes ) { throw SyntaxError(`开放功能块元素不能存在 src 属性`); }
|
3128 | if ( 'lang' in attributes ) {
|
3129 | if ( !attributes.lang ) { throw SyntaxError(`开放功能块元素的 lang 属性如果设置,值不能为空`); }
|
3130 | this.lang = attributes.lang;
|
3131 | }
|
3132 | }
|
3133 | if ( END_TAG && END_TAG.test(inner) ) { throw SyntaxError(`“${blockName}”块内包含疑似结束标签的内容(注意 .vue 文件需要确保单行/多行解析模式与传统 HTML 流式解析的结果一致)`); }
|
3134 | }
|
3135 | }
|
3136 |
|
3137 | blockName ;
|
3138 | attributes ;
|
3139 |
|
3140 |
|
3141 |
|
3142 |
|
3143 | }
|
3144 |
|
3145 | const Private = (
|
3146 |
|
3147 | typeof WeakMap==='function'
|
3148 | ? function () {
|
3149 | var Weak = WeakMap;
|
3150 | var GET = create(null);
|
3151 | GET.value = Weak.prototype.get;
|
3152 | var SET = create(null);
|
3153 | SET.value = Weak.prototype.set;
|
3154 | function add (weak, THIS) {
|
3155 | var _THIS = create(null);
|
3156 | weak.set(THIS, _THIS);
|
3157 | return _THIS;
|
3158 | }
|
3159 | return function Private () {
|
3160 | var weak = defineProperty( defineProperty( new Weak, 'get', GET), 'set', SET);
|
3161 | return function _ (THIS) {
|
3162 | return weak.get(THIS) || add(weak, THIS);
|
3163 | };
|
3164 | };
|
3165 | }()
|
3166 | : function Private () { return checkNewline; }
|
3167 |
|
3168 | );
|
3169 |
|
3170 | const _ = Private
|
3171 |
|
3172 |
|
3173 |
|
3174 | ();
|
3175 |
|
3176 | const SCRIPT_END_TAG = newRegExp('i')`</script${TAG_EMIT_CHAR}`;
|
3177 |
|
3178 | const JS = newRegExp('i')`^\s*(?:
|
3179 | JS|JavaScript(?:\s*1\.\d)?
|
3180 | |
|
3181 | (?:ES|ECMAScript|ECMAS?)(?:\s*\d+)?
|
3182 | |
|
3183 | ESM
|
3184 | |
|
3185 | (?:text|application)\/(?:ECMAScript|JavaScript(?:;\s*version\s*=\s*1\.\d)?)
|
3186 | )\s*$`;
|
3187 | const TS = /^\s*T(?:S|ypeScript)\s*$/i;
|
3188 |
|
3189 | class Script extends Block {
|
3190 |
|
3191 | constructor (attributes , inner ) { super('script', attributes, true, inner, SCRIPT_END_TAG); }
|
3192 |
|
3193 | get innerJS () {
|
3194 | let inner = _(this).innerJS;
|
3195 | if ( inner===undefined$1 ) {
|
3196 | inner = this.inner;
|
3197 | if ( typeof inner!=='string' ) { throw Error(`自闭合的 script 功能块元素必须自行根据 src 属性加载 inner 值`); }
|
3198 | if ( this.lang && !JS.test(this.lang) ) {
|
3199 | if ( TS.test(this.lang) ) { inner = transpileModule(inner); }
|
3200 | else { throw Error(`script 功能块元素如果设置了非 js / ts 的 lang 属性值,那么必须自行提供转译后的 innerJS`); }
|
3201 | }
|
3202 | }
|
3203 | return inner;
|
3204 | }
|
3205 | set innerJS (value ) {
|
3206 | if ( typeof value!=='string' ) { throw TypeError(`innerJS 只能被赋值字符串`); }
|
3207 | _(this).innerJS = value;
|
3208 | }
|
3209 |
|
3210 | }
|
3211 |
|
3212 | const SELECTOR = newRegExp`^
|
3213 | \s*(?:
|
3214 | ${AliasName}\s*
|
3215 | (?:=\s*
|
3216 | (?:${localName$1}|(?=\.))
|
3217 | (?:\.${className})*
|
3218 | \s*)?;
|
3219 | \s*)*
|
3220 | $`;
|
3221 |
|
3222 | const STYLE_END_TAG = newRegExp('i')`</style${TAG_EMIT_CHAR}`;
|
3223 |
|
3224 | const CSS = /^\s*(?:text\/)?CSS\s*$/i;
|
3225 |
|
3226 | const NAME_IN_CSS = /(?<=[\s,>}{\](+~]|\*\/|^)(?:[A-Z][\w-]*)+(?=[\s,>{}[)+~#:.]|\/\*|$)/g;
|
3227 |
|
3228 | class Style extends Block {
|
3229 |
|
3230 | constructor (attributes , inner ) {
|
3231 |
|
3232 | super('style', attributes, true, inner, STYLE_END_TAG);
|
3233 |
|
3234 | const _this = _(this);
|
3235 |
|
3236 | if ( '.abbr' in attributes ) {
|
3237 | const literal = attributes['.abbr'];
|
3238 | if ( literal===undefined$1 ) { throw SyntaxError(`style 功能块元素的“.abbr”属性的缺省值写法还没有实现`); }
|
3239 | else {
|
3240 | if ( !SELECTOR.test(literal) ) { throw SyntaxError(`style 块的“.abbr”属性语法错误:\n${literal}`); }
|
3241 | const abbr = create(null) ;
|
3242 | for ( const pair of literal.split(';') ) {
|
3243 | const tokens = pair.match(TOKENS);
|
3244 | if ( tokens ) {
|
3245 | const componentName = tokens[0];
|
3246 | abbr[componentName] = tokens.length>1
|
3247 | ? tokens[1]
|
3248 | : `.__${componentName}__`;
|
3249 | }
|
3250 | }
|
3251 | _this.abbr = abbr;
|
3252 | }
|
3253 | }
|
3254 |
|
3255 | if ( 'media' in attributes ) {
|
3256 | if ( attributes.media===undefined$1 ) { throw SyntaxError(`style 功能块元素的 media 属性必须具有值`); }
|
3257 | _this.media = attributes.media;
|
3258 | }
|
3259 |
|
3260 | }
|
3261 |
|
3262 | get innerCSS () {
|
3263 | let inner = _(this).innerCSS;
|
3264 | if ( inner===undefined$1 ) {
|
3265 | inner = this.inner;
|
3266 | if ( typeof inner!=='string' ) { throw Error(`自闭合的 style 功能块元素必须自行根据 src 属性加载 inner 值`); }
|
3267 | if ( this.lang && !CSS.test(this.lang) ) { throw Error(`style 功能块元素如果设置了非 css 的 lang 属性值,那么必须自行提供转译后的 innerCSS`); }
|
3268 | }
|
3269 | const { abbr } = _(this);
|
3270 | if ( abbr ) { inner = inner.replace(NAME_IN_CSS, (componentName ) => componentName in abbr ? abbr[componentName] : componentName); }
|
3271 | return inner;
|
3272 | }
|
3273 | set innerCSS (value ) {
|
3274 | if ( typeof value!=='string' ) { throw TypeError(`innerCSS 只能被赋值字符串`); }
|
3275 | _(this).innerCSS = value;
|
3276 | }
|
3277 |
|
3278 | }
|
3279 |
|
3280 | const _parentNode = Symbol('#parentNode');
|
3281 |
|
3282 | class Node {
|
3283 |
|
3284 |
|
3285 | get parentNode () { return this[_parentNode] || null; }
|
3286 |
|
3287 | childNodes = new Array;
|
3288 |
|
3289 | get firstChild () {
|
3290 | return this.childNodes.length ? this.childNodes[0] : null;
|
3291 | }
|
3292 |
|
3293 | get lastChild () {
|
3294 | return this.childNodes.length ? this.childNodes[this.childNodes.length-1] : null;
|
3295 | }
|
3296 |
|
3297 | appendChild (node ) {
|
3298 | if ( node[_parentNode] ) { node[_parentNode] .childNodes.splice(node[_parentNode] .childNodes.indexOf(node), 1); }
|
3299 | node[_parentNode] = this;
|
3300 | this.childNodes.push(node);
|
3301 | return node;
|
3302 | }
|
3303 |
|
3304 | }
|
3305 | freeze(Node.prototype);
|
3306 |
|
3307 | class Element extends Node {
|
3308 |
|
3309 | constructor (localName , attributes , partial ) {
|
3310 | super();
|
3311 | if ( partial && localName in partial ) {
|
3312 | const { tagName, class: classNames } = partial[localName];
|
3313 | if ( classNames ) {
|
3314 | attributes.class = 'class' in attributes
|
3315 | ? attributes.class
|
3316 | ? classNames+' '+attributes.class
|
3317 | : classNames
|
3318 | : classNames;
|
3319 | }
|
3320 | localName = tagName;
|
3321 | }
|
3322 | this.localName = localName;
|
3323 | this.attributes = attributes;
|
3324 | }
|
3325 |
|
3326 | localName ;
|
3327 | attributes ;
|
3328 |
|
3329 | get outerHTML () {
|
3330 | let innerHTML = '';
|
3331 | for ( const childNode of this.childNodes ) { innerHTML += childNode.outerHTML; }
|
3332 | return innerHTML
|
3333 | ? `<${this.localName}${this.attributes}>${innerHTML}</${this.localName}>`
|
3334 | : `<${this.localName}${this.attributes} />`;
|
3335 | }
|
3336 |
|
3337 | * toSource (tab = '\t') {
|
3338 | if ( this.childNodes.length ) {
|
3339 | yield `<${this.localName}${this.attributes}>`;
|
3340 | for ( const childNode of this.childNodes ) {
|
3341 | for ( const line of childNode.toSource(tab) ) {
|
3342 | yield `${tab}${line}`;
|
3343 | }
|
3344 | }
|
3345 | yield `</${this.localName}>`;
|
3346 | }
|
3347 | else {
|
3348 | yield `<${this.localName}${this.attributes} />`;
|
3349 | }
|
3350 | }
|
3351 |
|
3352 | }
|
3353 | freeze(Element.prototype);
|
3354 |
|
3355 | const PropertyDescriptor = (
|
3356 |
|
3357 | function () {
|
3358 | function __PURE__ (value_get, set_writable, enumerable, configurable) {
|
3359 | var propertyDescriptor = create(null);
|
3360 | if ( set_writable===true ) {
|
3361 | propertyDescriptor.value = value_get;
|
3362 | propertyDescriptor.writable = true;
|
3363 | }
|
3364 | else if ( set_writable===false ) {
|
3365 | propertyDescriptor.value = value_get;
|
3366 | propertyDescriptor.writable = false;
|
3367 | }
|
3368 | else {
|
3369 | propertyDescriptor.get = value_get;
|
3370 | propertyDescriptor.set = set_writable;
|
3371 | }
|
3372 | propertyDescriptor.enumerable = enumerable;
|
3373 | propertyDescriptor.configurable = configurable;
|
3374 | return propertyDescriptor;
|
3375 | }
|
3376 | return function PropertyDescriptor (value_get, set_writable, enumerable, configurable) {
|
3377 | return __PURE__(value_get, set_writable, enumerable, configurable);
|
3378 | };
|
3379 | }()
|
3380 |
|
3381 | );
|
3382 |
|
3383 | const childNodesPropertyDescriptor = PropertyDescriptor(freeze([]), true, false, true);
|
3384 |
|
3385 | class CharacterData extends Node {
|
3386 |
|
3387 | constructor (data ) {
|
3388 | super();
|
3389 | defineProperty(this, 'childNodes', childNodesPropertyDescriptor);
|
3390 | this.data = data;
|
3391 | }
|
3392 |
|
3393 | data ;
|
3394 |
|
3395 | }
|
3396 |
|
3397 | freeze(CharacterData.prototype);
|
3398 |
|
3399 | class Text extends CharacterData {
|
3400 |
|
3401 | constructor (data = '') {
|
3402 | super(data);
|
3403 | }
|
3404 |
|
3405 | get outerHTML () {
|
3406 | return escapeInnerText(this.data);
|
3407 | }
|
3408 |
|
3409 | * toSource () {
|
3410 | yield * this.outerHTML.split(' ');
|
3411 | }
|
3412 |
|
3413 | }
|
3414 | freeze(Text.prototype);
|
3415 |
|
3416 | const NT$1 = /\n\t+/g;
|
3417 | const N = /^\n|\n$/g;
|
3418 |
|
3419 | function trimTab (raw ) {
|
3420 |
|
3421 |
|
3422 | return raw.replace(NT$1, '\n').replace(N, '');
|
3423 | }
|
3424 |
|
3425 | const delimiters_0 = '{{';
|
3426 | const delimiters_1 = '}}';
|
3427 |
|
3428 | class Mustache extends Array {
|
3429 |
|
3430 | constructor (raw , v_pre ) {
|
3431 |
|
3432 |
|
3433 | super();
|
3434 | if ( v_pre ) {
|
3435 | this.push(unescape(trimTab(raw)));
|
3436 | return;
|
3437 | }
|
3438 | for ( let index = 0, data ; ; ) {
|
3439 |
|
3440 | const insStart = raw.indexOf(delimiters_0, index);
|
3441 |
|
3442 | if ( insStart<0 ) {
|
3443 | data = unescape(trimTab(raw.slice(index)));
|
3444 | data.includes(delimiters_0) && throwSyntaxError(`对“${delimiters_0}”进行 HTML 实体转义是无效的,因为 Vue 会在解析前解码`);
|
3445 | this.push(data);
|
3446 | break;
|
3447 | }
|
3448 | data = unescape(trimTab(raw.slice(index, insStart)));
|
3449 | data.includes(delimiters_0) && throwSyntaxError(`对“${delimiters_0}”进行 HTML 实体转义是无效的,因为 Vue 会在解析前解码`);
|
3450 | this.push(data);
|
3451 |
|
3452 | const insEnd = raw.indexOf(delimiters_1, insStart+2);
|
3453 | insEnd<0 && throwSyntaxError(`template 块中存在未关闭的插值模板标记“${delimiters_0}”,虽然 Vue 会将其作为普通文字处理,但这种情况本身极有可能是误以为插值语法可以包含标签造成的`);
|
3454 | index = insStart+2;
|
3455 | data = unescape(raw.slice(index, insEnd));
|
3456 | data.includes(delimiters_1) && throwSyntaxError(`对“${delimiters_1}”进行 HTML 实体转义是无效的,因为 Vue 会在解析前解码`);
|
3457 | this.push(data);
|
3458 | index = insEnd+2;
|
3459 | }
|
3460 | }
|
3461 |
|
3462 | toExpression ( ) {
|
3463 | const expression = [];
|
3464 | let isTemplate = true;
|
3465 | for ( const each of this ) {
|
3466 | each && expression.push(isTemplate ? StringLiteral(each) : `(${each})`);
|
3467 | isTemplate = !isTemplate;
|
3468 | }
|
3469 | return expression.join('+');
|
3470 | }
|
3471 |
|
3472 | toData ( ) {
|
3473 | let data = '';
|
3474 | let isTemplate = true;
|
3475 | for ( const each of this ) {
|
3476 | if ( each ) { data += isTemplate ? each : `${delimiters_0}${each}${delimiters_1}`; }
|
3477 | isTemplate = !isTemplate;
|
3478 | }
|
3479 | return data;
|
3480 | }
|
3481 |
|
3482 | }
|
3483 |
|
3484 | const foreign_elements = RegExp(FOREIGN_ELEMENTS.source);
|
3485 | const TEXTAREA_END_TAG = newRegExp`</textarea${TAG_EMIT_CHAR}`;
|
3486 | const STYLE_END_TAG$1 = newRegExp`</STYLE${TAG_EMIT_CHAR}`;
|
3487 | const TITLE_END_TAG = newRegExp`</title${TAG_EMIT_CHAR}`;
|
3488 | const TEXTAREA = /^textarea$/i;
|
3489 | const TNS = /^[\t\n ]+$/;
|
3490 | const SOF_TNS_LT = /^[\t\n ]+</;
|
3491 | const GT_TNS_EOF = />[\t\n ]+$/;
|
3492 |
|
3493 | const _NAME = /^_[a-z]$/;
|
3494 | const _NAMES = [];
|
3495 | function Pattern (node ) {
|
3496 | switch ( node.type ) {
|
3497 | case 'Identifier':
|
3498 | if ( _NAME.test(node.name) ) { _NAMES.push(node.name); }
|
3499 | break;
|
3500 | case 'ObjectPattern':
|
3501 | for ( let { properties } = node, { length } = properties, index = 0; index<length; ++index ) {
|
3502 | const property = properties[index];
|
3503 | switch ( property.type ) {
|
3504 | case 'Property':
|
3505 | Pattern(property.value);
|
3506 | break;
|
3507 | case 'RestElement':
|
3508 | Pattern(property.argument);
|
3509 | break;
|
3510 | default:
|
3511 | throw Error(`Unrecognized pattern type: ${property.type}`);
|
3512 | }
|
3513 | }
|
3514 | break;
|
3515 | case 'ArrayPattern':
|
3516 | for ( let { elements } = node, { length } = elements, index = 0; index<length; ++index ) {
|
3517 | const element = elements[index];
|
3518 | if ( element ) { Pattern(element); }
|
3519 | }
|
3520 | break;
|
3521 | case 'RestElement':
|
3522 | Pattern(node.argument);
|
3523 | break;
|
3524 | case 'AssignmentPattern':
|
3525 | Pattern(node.left);
|
3526 | break;
|
3527 | default:
|
3528 | throw Error(`Unrecognized pattern type: ${node.type}`);
|
3529 | }
|
3530 | }
|
3531 | const forAliasRE = /(?<=^\s*(?:\(|(?!\())).*?(?=\)?\s+(?:in|of)\s+.*$)/s;
|
3532 | const parserOptions = NULL({
|
3533 | ecmaVersion: 2014 ,
|
3534 | sourceType: 'module' ,
|
3535 | allowReserved: false,
|
3536 | });
|
3537 | function _NAME_test (v_for ) {
|
3538 | const alias = forAliasRE.exec(v_for) [0];
|
3539 | let AST
|
3540 |
|
3541 |
|
3542 |
|
3543 |
|
3544 |
|
3545 |
|
3546 |
|
3547 |
|
3548 | ;
|
3549 | try { AST = Parser.parse(`(${alias})=>{}`, parserOptions) ; }
|
3550 | catch (error) {
|
3551 | const index = error.pos-1;
|
3552 | throw SyntaxError(`“v-for="${v_for}"”中的内容“${alias.slice(0, index)}”✗“${alias.slice(index)}”解析失败`);
|
3553 | }
|
3554 | const { params } = AST.body[0].expression;
|
3555 | _NAMES.length = 0;
|
3556 | params.forEach(Pattern);
|
3557 | return _NAMES.length!==0;
|
3558 | }
|
3559 |
|
3560 | let html = '';
|
3561 | let index = 0;
|
3562 | let partial ;
|
3563 |
|
3564 | function parseAppend (parentNode_xName , parentNode , V_PRE , FOREIGN ) {
|
3565 | for ( ; ; ) {
|
3566 | const tag = Tag(html, index, FOREIGN);
|
3567 | const { type } = tag;
|
3568 | if ( type===EOF ) {
|
3569 | if ( parentNode_xName ) { throw SyntaxError(`template 块中存在未关闭的 ${parentNode_xName} 标签`); }
|
3570 | index = tag.end;
|
3571 | return;
|
3572 | }
|
3573 | if ( type===TEXT ) {
|
3574 | const data = new Mustache(tag.raw , V_PRE).toData();
|
3575 | data && parentNode.appendChild(new Text(data));
|
3576 | index = tag.end;
|
3577 | continue;
|
3578 | }
|
3579 | if ( type===COMMENT ) {
|
3580 | index = tag.end;
|
3581 | continue;
|
3582 | }
|
3583 | const xName = tag.xName ;
|
3584 | if ( type===ELEMENT_END ) {
|
3585 | xName===parentNode_xName || throwSyntaxError(parentNode_xName
|
3586 | ? `在 ${parentNode_xName} 配对的结束标签出现前,出现了预期外的结束标签“</${xName}>”`
|
3587 | : `template 块中凭空出现了“</${xName}>”结束标签`
|
3588 | );
|
3589 | index = tag.end;
|
3590 | return;
|
3591 | }
|
3592 | xName==='script' && throwSyntaxError(`Vue 不允许 template 中存在 script 标签`);
|
3593 | xName==='style' && throwSyntaxError(`Vue 不允许 template 中存在 style 标签(真需要时,考虑使用 jVue 的 STYLE 函数式组件)`);
|
3594 | const attributes = tag.attributes ;
|
3595 | const v_pre = V_PRE || 'v-pre' in attributes;
|
3596 | if ( !v_pre && ( ':is' in attributes || 'v-bind:is' in attributes ) ) ;
|
3597 | else if ( !v_pre && 'is' in attributes ) {
|
3598 | if ( !foreign_elements.test(attributes.is ) && FOREIGN_ELEMENTS.test(attributes.is ) ) {
|
3599 | throw SyntaxError(`通过 is 属性,也无法避免 SVG 命名空间中的 foreign 元素的大小写变种“${attributes.is }”,不被 Vue 作为组件对待`);
|
3600 | }
|
3601 | }
|
3602 | else {
|
3603 | if ( !foreign_elements.test(xName) && FOREIGN_ELEMENTS.test(xName) ) {
|
3604 | throw SyntaxError(`SVG 命名空间中的 foreign 元素的大小写变种“${xName}”,同样不被 Vue 作为组件对待`);
|
3605 | }
|
3606 | }
|
3607 | if ( !v_pre && 'v-for' in attributes && _NAME_test(attributes['v-for'] ) ) {
|
3608 | const names = _NAMES.join('”“');
|
3609 | _NAMES.length = 0;
|
3610 | throw ReferenceError(`“v-for="${escapeAttributeValue(attributes['v-for'] )}"”中存在以下划线开头后跟字母的危险变量“${names}”,这可能使得 Vue 模板编译结果以错误的方式运行`);
|
3611 | }
|
3612 | const element = parentNode.appendChild(new Element(xName, attributes, partial));
|
3613 | index = tag.end;
|
3614 | if ( type===ELEMENT_SELF_CLOSING || VOID_ELEMENTS.test(xName) ) { continue; }
|
3615 | if ( !v_pre && ( 'v-text' in attributes || 'v-html' in attributes ) ) {
|
3616 | throw SyntaxError(`开放标签,除非自身或外层节点有 v-pre 属性,否则不能再设置 v-text 或 v-html 属性`);
|
3617 | }
|
3618 | const foreign = FOREIGN || xName==='svg' || xName==='math';
|
3619 |
|
3620 |
|
3621 | if ( xName==='textarea' || xName==='title' || xName==='STYLE' ) {
|
3622 | if ( 'v-text' in attributes || 'v-html' in attributes || v_pre ) {
|
3623 | throw SyntaxError((
|
3624 | xName==='textarea' ? `由于 Vue 不能正确对待 ${xName} 标签中的类标签文本(形如标签的文本会被剔除)` :
|
3625 | xName==='STYLE' ? `非自闭合 ${xName} 组件中的内容为了避免被 Vue 额外修正(形如标签的文本会被剔除)` :
|
3626 | xName==='title' ? `由于 Vue 不能正确对待 ${xName} 标签中的类标签文本(会试着真的作为标签解析)` :
|
3627 | ``
|
3628 | )+`,jVue 会将其编译为 v-text 属性,因此标签不能已经具备 v-text 或 v-html,且自身或外层节点不能有 v-pre 属性`);
|
3629 | }
|
3630 | let endTagStart = html.slice(index).search(
|
3631 | xName==='textarea' ? TEXTAREA_END_TAG :
|
3632 | xName==='STYLE' ? STYLE_END_TAG$1 :
|
3633 | xName==='title' ? TITLE_END_TAG :
|
3634 | null
|
3635 | );
|
3636 | endTagStart<0 && throwSyntaxError(`template 块中存在未关闭的 ${xName} 标签`);
|
3637 | endTagStart += index;
|
3638 | const expression = new Mustache(html.slice(index, endTagStart), v_pre).toExpression();
|
3639 | if ( expression ) { attributes['v-text'] = expression; }
|
3640 | index = Tag(html, index = endTagStart, foreign).end;
|
3641 | }
|
3642 | else if ( TEXTAREA.test(xName) ) {
|
3643 | throw SyntaxError(
|
3644 | `Vue 不会将 textarea 的任何大小写变种中的内容理解为正常标签嵌套,而是会剔除其内容中的标签、解除 HTML 实体转义后,作为文本内容理解,`+
|
3645 | `jVue 虽可对其进行转写(比如“<component is="${xName}">”或“<${xName} v-text="..." />”),`+
|
3646 | `但由于缺乏约定(就连 Vue 本身的这种行为,也是一种边缘情况,既谈不上合理,也不能保证一直如此对待,甚至没有在文档中言明),`+
|
3647 | `并不知道该往什么方向进行`
|
3648 | );
|
3649 | }
|
3650 | else if ( RAW_TEXT_ELEMENTS.test(xName) ) {
|
3651 | throw SyntaxError(
|
3652 | `Vue 不会将 style 或 script 的任何大小写变种中的内容理解为正常标签嵌套,而是会剔除其内容中的标签、解除 HTML 实体转义后,作为文本内容理解,`+
|
3653 | `jVue 虽可对其进行转写(比如“<component is="${xName}">”或“<${xName} v-text="..." />”),`+
|
3654 | `但由于缺乏约定(就连 Vue 本身的这种行为,也是一种边缘情况,既谈不上合理,也不能保证一直如此对待,甚至没有在文档中言明),`+
|
3655 | `并不知道该往什么方向进行(除 jVue 推荐的 STYLE 组件用来模拟 style 外)`
|
3656 | );
|
3657 | }
|
3658 | else {
|
3659 | parseAppend(xName, element, v_pre, foreign);
|
3660 | }
|
3661 | }
|
3662 | }
|
3663 |
|
3664 | class Content extends Node {
|
3665 |
|
3666 | constructor (inner , abbr ) {
|
3667 | super();
|
3668 | if ( inner ) {
|
3669 | partial = abbr;
|
3670 | html = inner;
|
3671 | index = 0;
|
3672 | try { parseAppend('', this, false, false); }
|
3673 | catch (error) {
|
3674 | error.message = `${error.message}:\n${Snippet(inner, index)}`;
|
3675 | throw error;
|
3676 | }
|
3677 | finally {
|
3678 | partial = undefined$1;
|
3679 | html = '';
|
3680 | }
|
3681 | if ( this.firstChild instanceof Text && TNS.test(this.firstChild.data) && SOF_TNS_LT.test(inner) ) { this.childNodes.shift(); }
|
3682 | if ( this.lastChild instanceof Text && TNS.test(this.lastChild.data) && GT_TNS_EOF.test(inner) ) { this.childNodes.pop(); }
|
3683 | }
|
3684 | }
|
3685 |
|
3686 | * toSource (tab = '\t') {
|
3687 | for ( const childNode of this.childNodes ) {
|
3688 | yield * childNode.toSource(tab);
|
3689 | }
|
3690 | }
|
3691 |
|
3692 | }
|
3693 |
|
3694 | const TEMPLATE_END_TAG = newRegExp('i')`</template${TAG_EMIT_CHAR}`;
|
3695 |
|
3696 | const PARTIAL = newRegExp`^
|
3697 | \s*(?:
|
3698 | ${AliasName}\s*
|
3699 | =\s*
|
3700 | ${localOrComponentName}
|
3701 | (?:\.?|(?:\.${className})*)
|
3702 | \s*;
|
3703 | \s*)*
|
3704 | $`;
|
3705 |
|
3706 | const HTML = /^(?:HTML|\s*text\/html\s*)$/i;
|
3707 |
|
3708 | class Template extends Block {
|
3709 |
|
3710 | constructor (attributes , inner ) {
|
3711 |
|
3712 | if ( inner!==undefined$1 && attributes.lang && !HTML.test(attributes.lang) ) {
|
3713 | if ( TAG_LIKE.test(inner) ) { throw SyntaxError(`.vue 文件的 template 块(非 html 状态下)中,存在可能使得正常结束判定结果模糊的标签语法标记`); }
|
3714 | super('template', attributes, true, inner, TEMPLATE_END_TAG);
|
3715 | }
|
3716 | else {
|
3717 | super('template', attributes, true, inner, null);
|
3718 | }
|
3719 |
|
3720 | const _this = _(this);
|
3721 |
|
3722 | if ( '.abbr' in attributes ) {
|
3723 | const literal = attributes['.abbr'];
|
3724 | if ( literal===undefined$1 ) { throw SyntaxError(`template 功能块元素的“.abbr”属性的缺省值写法还没有实现`); }
|
3725 | else {
|
3726 | if ( !PARTIAL.test(literal) ) { throw SyntaxError(`template 块的“.abbr”属性语法错误:\n${literal}`); }
|
3727 | const abbr = create(null) ;
|
3728 | for ( const pair of literal.split(';') ) {
|
3729 | const tokens = pair.match(TOKENS);
|
3730 | if ( tokens ) {
|
3731 | const xName = tokens[0];
|
3732 | const localName_class = tokens[1].split('.');
|
3733 | abbr[xName] = {
|
3734 | tagName: localName_class.shift() ,
|
3735 | class: localName_class.length
|
3736 | ? localName_class.join(' ') || `__${xName}__`
|
3737 | : '',
|
3738 | };
|
3739 | }
|
3740 | }
|
3741 | _this.abbr = abbr;
|
3742 | }
|
3743 | }
|
3744 |
|
3745 | if ( '.keys' in attributes ) {
|
3746 | if ( attributes['.keys']===undefined$1 ) { throw SyntaxError(`template 功能块元素的 .keys 属性必须具有值`); }
|
3747 | _this.keys = attributes['.keys'];
|
3748 | }
|
3749 |
|
3750 | if ( 'functional' in attributes ) {
|
3751 | throw Error(`jVue 暂未支持编译 functional template,因为无法设想这种实际场景,从而也无法进行相应的功能设计`);
|
3752 |
|
3753 |
|
3754 | }
|
3755 |
|
3756 | }
|
3757 |
|
3758 | get content () {
|
3759 | const _this = _(this);
|
3760 | let inner = _this.innerHTML;
|
3761 | if ( inner===undefined$1 ) {
|
3762 | inner = this.inner;
|
3763 | if ( typeof inner!=='string' ) { throw Error(`自闭合的 template 功能块元素必须自行(根据 src 属性)加载 inner 值`); }
|
3764 | if ( this.lang && !HTML.test(this.lang) ) { throw Error(`template 功能块元素如果设置了非 html 的 lang 属性值,那么必须自行提供转译后的 innerHTML`); }
|
3765 | _this.cache = inner;
|
3766 | }
|
3767 | if ( _this.content && _this.cache===inner ) { return _this.content; }
|
3768 | _this.cache = inner;
|
3769 | return _this.content = new Content(inner, _this.abbr);
|
3770 | }
|
3771 |
|
3772 | get innerHTML () {
|
3773 | const { childNodes } = this.content;
|
3774 | if ( childNodes.length!==1 ) { throw Error(`Vue 从 2.0 开始,只允许组件的 template 存在一个根节点`); }
|
3775 | const rootNode = childNodes[0];
|
3776 | if ( !( rootNode instanceof Element ) ) { throw Error(`Vue 从 2.0 开始,组件的 template 的根节点必须是元素节点`); }
|
3777 | return rootNode.outerHTML;
|
3778 | }
|
3779 | set innerHTML (value ) {
|
3780 | if ( typeof value!=='string' ) { throw TypeError(`innerHTML 只能被赋值字符串`); }
|
3781 | _(this).innerHTML = value;
|
3782 | }
|
3783 |
|
3784 | }
|
3785 |
|
3786 | class CustomBlock extends Block {
|
3787 | constructor (blockName , attributes , inner ) {
|
3788 | if ( inner===undefined$1 ) {
|
3789 | super(blockName, attributes, false, inner, null);
|
3790 | }
|
3791 | else {
|
3792 | if ( ESCAPABLE_RAW_TEXT_ELEMENTS.test(blockName) ) { throw SyntaxError(`.vue 文件中的自定义块尚没有明确的语义约定,请避免使用 textarea / title 标签及其大小写变种`); }
|
3793 | if ( TAG_LIKE.test(inner) ) { throw SyntaxError(`.vue 文件的 ${blockName} 自定义块中,存在可能使得正常结束判定结果模糊的标签语法标记`); }
|
3794 | super(blockName, attributes, false, inner, new RegExp(`^</${blockName}${TAG_EMIT_CHAR}`, 'i'));
|
3795 | }
|
3796 | }
|
3797 | }
|
3798 |
|
3799 | const SCRIPT_STYLE_TEMPLATE = /^(?:script|style|template)$/i;
|
3800 | const NON_EOL = /[^\n]+/g;
|
3801 | const NON_TAB$1 = /[^\t ]/g;
|
3802 |
|
3803 | function parseComponent (sfc , vue ) {
|
3804 |
|
3805 | let index = 0;
|
3806 |
|
3807 | function throwSyntaxError(message ) {
|
3808 | const error = SyntaxError(message);
|
3809 | error.message = `${error.message}:\n${Snippet(vue, index)}`;
|
3810 | throw error;
|
3811 | }
|
3812 |
|
3813 | for ( const length = vue.length; index!==length; ) {
|
3814 |
|
3815 | if ( vue[index]==='\n' ) {
|
3816 | ++index;
|
3817 | continue;
|
3818 | }
|
3819 |
|
3820 | const tag = Tag(vue, index, false);
|
3821 | switch ( tag.type ) {
|
3822 | case ELEMENT_START:
|
3823 | case ELEMENT_SELF_CLOSING:
|
3824 | index = tag.end;
|
3825 | break;
|
3826 | case COMMENT:
|
3827 | index = tag.end;
|
3828 | continue;
|
3829 | case TEXT:
|
3830 | throw throwSyntaxError(`.vue 文件中出现了未经标签包裹的“${tag.raw}”`);
|
3831 | case ELEMENT_END:
|
3832 | throwSyntaxError(`.vue 文件中凭空出现了“</${tag.xName}>”结束标签`);
|
3833 | }
|
3834 |
|
3835 | const blockName = tag.xName ;
|
3836 | switch ( blockName ) {
|
3837 | case 'script':
|
3838 | case 'template':
|
3839 | sfc[blockName] && throwSyntaxError(`一个 .vue 文件中只能有一个 ${blockName} 块`);
|
3840 | break;
|
3841 | case 'style':
|
3842 | break;
|
3843 | default:
|
3844 | SCRIPT_STYLE_TEMPLATE.test(blockName) && throwSyntaxError(`.vue 文件顶层的非全小写 script / style / template 标签存在歧义,请避免使用`);
|
3845 | break;
|
3846 | }
|
3847 |
|
3848 | let inner ;
|
3849 | if ( tag.type===ELEMENT_START ) {
|
3850 | VOID_ELEMENTS.test(blockName) && throwSyntaxError(`.vue 文件中的自定义块如果是 HTML void 元素(无论大小写),必须自闭合使用、并添加自闭合斜线以避免歧义(因为尚没有明确的扩展约定)`);
|
3851 | index===length && throwSyntaxError(`开始标签后缺少结束标签“</${blockName}>”`);
|
3852 | if ( vue.startsWith('\n', index) ) {
|
3853 | const innerStart = index+1;
|
3854 | const endTagStart = vue.indexOf(`\n</${blockName}>`, index)+1 || throwSyntaxError(vue.includes(`</${blockName}>`, index) ? '开始标签后紧跟换行则启用多行模式,结束标签应在后续某行的行首' : `开始标签后缺少结束标签“</${blockName}>”`);
|
3855 | index = endTagStart+3+blockName.length;
|
3856 | inner = endTagStart===innerStart || endTagStart===innerStart+1 ? '' : vue.slice(innerStart, endTagStart-1);
|
3857 | if ( blockName!=='style' ) {
|
3858 | inner =
|
3859 | checkNewline(vue.slice(0, innerStart)).replace(NON_EOL, '')+
|
3860 | inner;
|
3861 | }
|
3862 | }
|
3863 | else {
|
3864 | const innerStart = index;
|
3865 | index = vue.indexOf('\n', index);
|
3866 | if ( index<0 ) { index = length; }
|
3867 | vue.endsWith(`</${blockName}>`, index) || throwSyntaxError(`开始标签后不紧跟换行则启用单行块模式,该行应以对应的结束标签结尾`);
|
3868 | inner = vue.slice(innerStart, index-3-blockName.length);
|
3869 | if ( blockName!=='style' ) {
|
3870 | const lastLineStart = vue.lastIndexOf('\n', innerStart)+1;
|
3871 | inner =
|
3872 | checkNewline(vue.slice(0, lastLineStart)).replace(NON_EOL, '')+
|
3873 | checkNewline(vue.slice(lastLineStart, innerStart)).replace(NON_TAB$1, ' ')+
|
3874 | inner;
|
3875 | }
|
3876 | }
|
3877 | }
|
3878 |
|
3879 | if ( blockName==='template' ) { sfc.template = new Template(tag.attributes , inner); }
|
3880 | else if ( blockName==='style' ) { sfc.styles.push(new Style(tag.attributes , inner)); }
|
3881 | else if ( blockName==='script' ) { sfc.script = new Script(tag.attributes , inner); }
|
3882 | else { sfc.customBlocks.push(new CustomBlock(blockName, tag.attributes , inner)); }
|
3883 |
|
3884 | if ( index!==length ) {
|
3885 | if ( vue.startsWith('\n', index) ) { ++index; }
|
3886 | else if ( !vue.startsWith('<!', index) ) { throwSyntaxError(`顶级标签的结束标签后的同一行内不应有除注释以外的内容`); }
|
3887 | }
|
3888 |
|
3889 | }
|
3890 |
|
3891 | }
|
3892 |
|
3893 | const KEYS = /[a-z][a-z0-9]*(?:_[a-z0-9]+)*/ig;
|
3894 |
|
3895 | const byStart = (a , b ) => a.start-b.start;
|
3896 |
|
3897 | const _x = /^_(?![a-z]$)/;
|
3898 | const shorthand = new WeakSet;
|
3899 |
|
3900 |
|
3901 | const visitors = NULL({
|
3902 | ObjectExpression ({ properties } ) {
|
3903 | for ( let index = properties.length; index--; ) {
|
3904 | const property = properties[index];
|
3905 | if ( property.shorthand ) { shorthand.add(property.value); }
|
3906 | }
|
3907 | },
|
3908 | ObjectPattern ({ properties } ) {
|
3909 | for ( let index = properties.length; index--; ) {
|
3910 | const property = properties[index];
|
3911 | if ( property.shorthand ) {
|
3912 | let { value } = property;
|
3913 | if ( value.type==='AssignmentPattern' ) { value = value.left; }
|
3914 |
|
3915 | shorthand.add(value);
|
3916 | }
|
3917 | }
|
3918 | },
|
3919 | VariablePattern (identifier ) {
|
3920 | if ( identifier.name.startsWith('_') ) {
|
3921 | throw Error(`不要对实例下的下划线开头的私有属性“${identifier.name}”进行写操作!`);
|
3922 | }
|
3923 | },
|
3924 | });
|
3925 |
|
3926 | const parserOptions$1 = NULL({
|
3927 | ecmaVersion: 5 ,
|
3928 | sourceType: 'module' ,
|
3929 | allowReserved: false,
|
3930 | });
|
3931 | const minifyOptions = NULL({
|
3932 | warnings: 'verbose' ,
|
3933 | parse: NULL({
|
3934 | bare_returns: false,
|
3935 | html5_comments: false,
|
3936 | shebang: false,
|
3937 | }),
|
3938 | compress: NULL({
|
3939 | warnings: true,
|
3940 | collapse_vars: false,
|
3941 | pure_getters: false,
|
3942 | side_effects: false,
|
3943 | drop_debugger: false,
|
3944 | keep_infinity: true,
|
3945 | typeofs: false,
|
3946 | expression: true,
|
3947 | arguments: true,
|
3948 | computed_props: true,
|
3949 | }),
|
3950 | safari10: true,
|
3951 | ie8: false,
|
3952 | ecma: 5 ,
|
3953 | });
|
3954 |
|
3955 | const with_this__return_ = 'with(this){return ';
|
3956 | const with_this__return_$ = with_this__return_.length;
|
3957 | const _$1 = '}';
|
3958 | const _$ = -_$1.length;
|
3959 | const _function__c___use_strict__return_ = '(function(_c){"use strict";return ';
|
3960 | const _function__c___use_strict__return_$ = _function__c___use_strict__return_.length;
|
3961 |
|
3962 | const _VM_C_EXP = /^\(function\(([\w$]+),([\w$]+)\){"use strict";return \1=this,(\2\(.*\))}\);$/s;
|
3963 | const _C_EXP = /^\(function\(([\w$]+)\){"use strict";return (\1\(.*\))}\);$/s;
|
3964 |
|
3965 | function NecessaryStringLiteral (body ) {
|
3966 | if ( !body.startsWith(with_this__return_) || !body.endsWith(_$1) ) { throw Error(`jVue 内部错误:vue-template-compiler .compile 返回了与预期不符的内容格式`); }
|
3967 | const code = `${_function__c___use_strict__return_}${body.slice(with_this__return_$, _$)}})`;
|
3968 | const AST = Parser.parse(code, parserOptions$1);
|
3969 | const globals = findGlobals(AST);
|
3970 | if ( globals.size ) {
|
3971 |
|
3972 |
|
3973 | const _vm = '$'.repeat(body.length);
|
3974 |
|
3975 | simple(AST, visitors);
|
3976 | let _code = '';
|
3977 | let index = 0;
|
3978 | for ( const identifier of ( globals.nodes() ).sort(byStart) ) {
|
3979 |
|
3980 | if ( _x.test(identifier.name ) ) { throw Error(`不要访问实例下的下划线开头的私有属性(“${identifier.name}”)`); }
|
3981 | const { start } = identifier;
|
3982 | if ( start!==index ) { _code += code.slice(index, start); }
|
3983 | const name = code.slice(start, index = identifier.end);
|
3984 | _code += shorthand.has(identifier)
|
3985 | ? `${name}:${_vm}.${name}`
|
3986 | : `${_vm}.${name}`;
|
3987 | }
|
3988 | if ( index!==code.length ) { _code += code.slice(index); }
|
3989 |
|
3990 | const minified = minify(`(function(${_vm},_c){"use strict";return ${_vm}=this,${_code.slice(_function__c___use_strict__return_$)}`, minifyOptions);
|
3991 | if ( minified.error ) { throw minified.error; }
|
3992 | if ( minified.warnings ) { throw Error(`Terser 压缩警告:\n${minified.warnings.join('\n')}`); }
|
3993 |
|
3994 | const _vm_c_exp = _VM_C_EXP.exec(minified.code );
|
3995 | if ( !_vm_c_exp ) { throw Error(`jVue 内部设计时错误地估计了 Terser 压缩生成的内容格式:\n`+minified.code); }
|
3996 | return StringLiteral(`${_vm_c_exp[1]},${_vm_c_exp[3]}`);
|
3997 | }
|
3998 | else {
|
3999 | const minified = minify(`(function(_c){"use strict";return ${code.slice(_function__c___use_strict__return_$)}`, minifyOptions);
|
4000 | if ( minified.error ) { throw minified.error; }
|
4001 | if ( minified.warnings ) { throw Error(`Terser 压缩警告:\n${minified.warnings.join('\n')}`); }
|
4002 |
|
4003 | const _c_exp = _C_EXP.exec(minified.code );
|
4004 | if ( !_c_exp ) { throw Error(`jVue 内部设计时错误地估计了 Terser 压缩生成的内容格式:\n`+minified.code); }
|
4005 | return StringLiteral(`,${_c_exp[2]}`);
|
4006 | }
|
4007 | }
|
4008 |
|
4009 | function Render (innerHTML , ES5 ) {
|
4010 | const { errors, render, staticRenderFns } = compile(innerHTML);
|
4011 | if ( errors.length ) { throw Error(`.vue template 官方编译未通过:\n${errors.join('\n')}`); }
|
4012 | minifyOptions.ecma = parserOptions$1.ecmaVersion = ES5 ? 5 : 2014 ;
|
4013 | return {
|
4014 | render: NecessaryStringLiteral(render),
|
4015 | staticRenderFns: staticRenderFns.map(NecessaryStringLiteral),
|
4016 | };
|
4017 | }
|
4018 |
|
4019 | const NULo = /^\0[0-7]/;
|
4020 | const LS_PS = /[\u2028\u2029]/g;
|
4021 | const LF_LS_PS = /[\n\u2028\u2029]/g;
|
4022 | const escape_LS_PS = ($0 ) => $0==='\u2028' ? '\\002028' : '\\002029';
|
4023 | const escape_LF_LS_PS = ($0 ) => $0==='\n' ? '
' : $0==='\u2028' ? '
' : '
';
|
4024 | function VisibleStringLiteral (id ) {
|
4025 | const literal = StringLiteral(id);
|
4026 | return id.startsWith('\0') ? ( NULo.test(id) ? `'\\x00` : `'\\0` )+literal.slice(2) : literal;
|
4027 | }
|
4028 |
|
4029 | function * From (tab , mode , styles , template , from , eol ) {
|
4030 |
|
4031 | yield `export * from ${VisibleStringLiteral(from)};${eol}`;
|
4032 | yield `import { Scope, Template, Render, StaticRenderFns } from ${VisibleStringLiteral(from)};${eol}${eol}`;
|
4033 |
|
4034 | const dynamic = !template || _(template).keys===undefined$1;
|
4035 | const scope = dynamic ? 'dynamicScope' : 'staticScope';
|
4036 | yield dynamic
|
4037 | ? `export ${mode} ${scope} = /*#__PURE__*/Scope()`
|
4038 | : `export ${mode} ${scope} = /*#__PURE__*/Scope('${( _(template ).keys .match(KEYS) || [] ).join(',')}')`;
|
4039 | for ( const style of styles ) {
|
4040 | const { innerCSS } = style;
|
4041 | for ( const line of innerCSS.split('\n') ) {
|
4042 | yield `${eol}//${line.replace(LS_PS, escape_LS_PS)}`;
|
4043 | }
|
4044 | const { media } = _(style);
|
4045 | yield media===undefined$1
|
4046 | ? `${eol}.$(${StringLiteral(innerCSS)})`
|
4047 | : `${eol}.$(${StringLiteral(innerCSS)}, ${StringLiteral(media)})`;
|
4048 | }
|
4049 | yield `;${eol}`;
|
4050 |
|
4051 | if ( !template ) { return; }
|
4052 | const { innerHTML } = template;
|
4053 | const { render, staticRenderFns } = Render(innerHTML, mode==='var');
|
4054 |
|
4055 | yield eol;
|
4056 | yield `export ${mode} template = /*#__PURE__*/Template(${StringLiteral(innerHTML)}, ${scope});${eol}`;
|
4057 | yield `export ${mode} render = /*#__PURE__*/Render(${render}, ${scope});${eol}`;
|
4058 | yield staticRenderFns.length
|
4059 | ? `export ${mode} staticRenderFns = /*#__PURE__*/StaticRenderFns([${eol}${tab}${staticRenderFns.join(`,${eol}${tab}`)}${eol}], ${scope});${eol}`
|
4060 | : `export ${mode} staticRenderFns = [];${eol}`;
|
4061 | for ( const line of template.content.toSource(tab) ) {
|
4062 | yield `//${tab}${line.replace(LF_LS_PS, escape_LF_LS_PS)}${eol}`;
|
4063 | }
|
4064 |
|
4065 | }
|
4066 |
|
4067 | const acorn = NULL({
|
4068 | ecmaVersion: 5,
|
4069 | sourceType: 'module',
|
4070 | allowAwaitOutsideFunction: true,
|
4071 | });
|
4072 | const rollupOptions = {
|
4073 | onwarn (warning ) {
|
4074 | if ( typeof warning==='string' ) { throw Error(warning); }
|
4075 | if ( warning.code!=='UNUSED_EXTERNAL_IMPORT' ) { throw warning; }
|
4076 | },
|
4077 | acorn,
|
4078 | acornInjectPlugins: [ AcornStage3 ],
|
4079 | strictDeprecations: true,
|
4080 | treeshake: false,
|
4081 | };
|
4082 |
|
4083 | const TRUE = NULL({
|
4084 | format: 'esm' ,
|
4085 | sourcemap: true,
|
4086 | });
|
4087 | const FALSE = NULL({
|
4088 | format: 'esm' ,
|
4089 | sourcemap: false,
|
4090 | });
|
4091 | const INLINE = NULL({
|
4092 | format: 'esm' ,
|
4093 | sourcemap: 'inline' ,
|
4094 | });
|
4095 |
|
4096 | async function one (sfc , { 'var': x_var, 'j-vue?*': x_from, 'j-vue': from, map = false, src, lang }
|
4097 |
|
4098 |
|
4099 |
|
4100 |
|
4101 |
|
4102 |
|
4103 | ) {
|
4104 | if ( lang ) {
|
4105 | const { script } = sfc;
|
4106 | if ( script && script.lang ) { script.innerJS = await lang(script.lang, script.inner ); }
|
4107 | }
|
4108 | const main = sfc.export('default', x_from) ;
|
4109 | let round = 1;
|
4110 | acorn.ecmaVersion = x_var==='var' ? 5 : 2014 ;
|
4111 | const bundle = await rollup(assign(create(null), rollupOptions, {
|
4112 | input: '/'+'_'.repeat(main.length),
|
4113 | external: (path ) => path!==x_from,
|
4114 | plugins: [
|
4115 | NULL({
|
4116 | resolveId (path ) {
|
4117 | if ( round===1 || path===x_from ) { return path; }
|
4118 | throw Error(path);
|
4119 | },
|
4120 | async load () {
|
4121 | if ( round===1 ) {
|
4122 | round = 2;
|
4123 | return main;
|
4124 | }
|
4125 | if ( round===3 ) { throw Error('3'); }
|
4126 | round = 3;
|
4127 | const { template, styles } = sfc;
|
4128 | if ( src ) {
|
4129 | if ( template && template.src ) { template.inner = await src(template.src); }
|
4130 | for ( const style of styles ) {
|
4131 | if ( style.src ) { style.inner = await src(style.src); }
|
4132 | }
|
4133 | }
|
4134 | if ( lang ) {
|
4135 | if ( template && template.lang ) { template.innerHTML = await lang(template.lang, template.inner ); }
|
4136 | for ( const style of styles ) {
|
4137 | if ( style.lang ) { style.innerCSS = await lang(style.lang, style.inner ); }
|
4138 | }
|
4139 | }
|
4140 | return sfc.export(x_var, from) ;
|
4141 | },
|
4142 | })
|
4143 | ],
|
4144 | }));
|
4145 | const { output } = await bundle.generate(map==='inline' ? INLINE : map===true ? TRUE : FALSE);
|
4146 | if ( output.length!==1 ) { throw Error(''+output.length); }
|
4147 | const only = output[0];
|
4148 | return map===true ? only : only.code;
|
4149 | }
|
4150 |
|
4151 | const OPTIONS = { swappable: false, stripBOM: true, startsWithASCII: true, throwError: true };
|
4152 | const VUE_EOL = EOL([ LF, CRLF, CR ], [ FF, LS, PS ], true);
|
4153 | const CR_LF = /\r\n?/g;
|
4154 |
|
4155 | class SFC extends NULL {
|
4156 |
|
4157 | bom ;
|
4158 | eol ;
|
4159 | tab ;
|
4160 |
|
4161 | constructor (vue ) {
|
4162 |
|
4163 | super();
|
4164 |
|
4165 | if ( typeof vue==='string' ) {
|
4166 | if ( NON_SCALAR.test(vue) ) { throw Error(`.vue 文件所基于的 HTML 字符流中禁止出现落单的代理对码点(U+D800〜U+DFFF)`); }
|
4167 | this.bom = '';
|
4168 | }
|
4169 | else if ( isBuffer(vue) ) {
|
4170 | try { ( { BOM: this.bom, string: vue } = buffer2object(vue, OPTIONS) ); }
|
4171 | catch (error) { throw Error(`无法解码 Buffer,请确认它是 UTF-8 或 UTF-16 编码的,并且不存在非 Unicode 标量值(U+D800〜U+DFFF 的代理对码点,或超出了 U+10FFFF)`); }
|
4172 | }
|
4173 | else { throw TypeError(`new SFC(vue) 时参数只能是 string 或 Buffer`); }
|
4174 |
|
4175 | if ( NONCHARACTER.test(vue) ) { throw Error(`.vue 文件所基于的 HTML 字符流中禁止出现永久未定义字符码点(U+FDD0〜U+FDEF、U+[00-10]FFFE、U+[00-10]FFFF)`); }
|
4176 | if ( CONTROL_CHARACTER.test(vue) ) { throw Error(`.vue 文件所基于的 HTML 字符流中禁止出现除空(U+00)、水平制表(U+09)、换行(U+0A)、换页(U+0C)、回车(U+0D)之外的控制字符(U+00〜U+1F、U+7F〜U+9F)`); }
|
4177 |
|
4178 | try { this.eol = VUE_EOL(vue); }
|
4179 | catch (error) {
|
4180 | throw SyntaxError(
|
4181 | `.vue 文件的换行符必须是 LF(U+0A)、CRLF(U+0D U+0A)或 CR(U+0D)中的唯一一个`+
|
4182 | `,而且`+
|
4183 | `不得包含对 JS 是换行符、而对 HTML 和 CSS 不是换行符的 U+2028 或 U+2029,也不得包含对 CSS 是换行符、而对 HTML 和 JS 不是换行符的 U+0C`
|
4184 | );
|
4185 | }
|
4186 | if ( CR_LF.test(this.eol) ) { vue = vue.replace(CR_LF, '\n'); }
|
4187 |
|
4188 | this.tab = vue.includes('\t') ? '\t' : '';
|
4189 |
|
4190 | parseComponent(this, vue);
|
4191 |
|
4192 | }
|
4193 |
|
4194 | script = null;
|
4195 | styles = [];
|
4196 | template = null;
|
4197 | customBlocks = [];
|
4198 |
|
4199 | export (mode
|
4200 |
|
4201 |
|
4202 |
|
4203 |
|
4204 |
|
4205 |
|
4206 | , from ) {
|
4207 | if ( typeof mode==='object' ) { return one(this, mode); }
|
4208 | const { bom, tab, eol, script, styles, template } = this;
|
4209 | if ( mode==='default' ) {
|
4210 | if ( script ) {
|
4211 | if ( script.inner===undefined$1 ) {
|
4212 | return bom
|
4213 | +`export { default } from ${StringLiteral(script.src )};`;
|
4214 | }
|
4215 | else {
|
4216 | return eol!==LF
|
4217 | ? bom+script.innerJS.split(LF).join(eol)
|
4218 | : bom+script.innerJS;
|
4219 | }
|
4220 | }
|
4221 | else {
|
4222 | if ( template ) {
|
4223 | return bom
|
4224 | +`import { template } from ${from===undefined$1 ? `'j-vue?*'` : StringLiteral(from)};${eol}`
|
4225 | +`export default { template: template };`;
|
4226 | }
|
4227 | else {
|
4228 | throw Error(`.vue 如果要 export default,至少要有 script 块或 template 块中的一个`);
|
4229 | }
|
4230 | }
|
4231 | }
|
4232 | else {
|
4233 | let code = bom;
|
4234 | for ( const chunk of From(tab, mode, styles, template, from===undefined$1 ? 'j-vue' : from, eol) ) { code += chunk; }
|
4235 | return code;
|
4236 | }
|
4237 | }
|
4238 |
|
4239 | }
|
4240 | freeze(SFC.prototype);
|
4241 |
|
4242 | const _default = Default({
|
4243 | version,
|
4244 | SFC,
|
4245 | });
|
4246 |
|
4247 | module.exports = _default;
|
4248 |
|
4249 |
|
\ | No newline at end of file |