UNPKG

112 kBJavaScriptView Raw
1'use strict';
2
3const version = '13.5.0';
4
5const isBuffer = Buffer.isBuffer;
6
7const freeze = Object.freeze;
8
9const undefined$1 = void 0;
10
11const hasOwnProperty = Object.prototype.hasOwnProperty;
12
13const create = Object.create;
14
15const Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
16
17var ownKeys = typeof Reflect==='object' ? Reflect.ownKeys : Object.getOwnPropertyNames;
18const NULL = (
19 /*! j-globals: null (internal) */
20 /*#__PURE__*/ 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 ? /*#__PURE__*/ create(null, /*#__PURE__*/ getOwnPropertyDescriptors(object))
52 : /*#__PURE__*/ assign(/*#__PURE__*/ create(null), object);
53 }
54 };
55 delete NULL.name;
56 //try { delete NULL.length; } catch (error) {}
57 NULL.prototype = null;
58 freeze(NULL);
59 return NULL;
60 }()
61 /*¡ j-globals: null (internal) */
62);
63
64const assign = Object.assign;
65
66const toStringTag = typeof Symbol!=='undefined' ? Symbol.toStringTag : undefined;
67
68const defineProperty = Object.defineProperty;
69
70const seal = Object.seal;
71
72const Default = (
73 /*! j-globals: default (internal) */
74 function Default (exports, addOnOrigin) {
75 return /*#__PURE__*/ 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 /*¡ j-globals: default (internal) */
90);
91
92/*!
93 * 模块名称:ES
94 * 模块功能:ECMAScript 语法相关共享实用程序。从属于“简计划”。
95      ECMAScript syntax util. Belong to "Plan J".
96 * 模块版本:0.8.2
97 * 许可条款:LGPL-3.0
98 * 所属作者:龙腾道 <LongTengDao@LongTengDao.com> (www.LongTengDao.com)
99 * 问题反馈:https://GitHub.com/LongTengDao/j-es/issues
100 * 项目主页:https://GitHub.com/LongTengDao/j-es/
101 */
102
103var 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
105var CANT_IN_SINGLE_QUOTE = /[\n\r'\\\u2028\u2029]/g;
106function staticallyEscape (cant_in_single_quote ) {
107 return CHAR_TO_ESCAPED[cant_in_single_quote];
108}
109
110var CHAR_TO_ESCAPED = { '\n': '\\n', '\r': '\\r', '\'': '\\\'', '\\': '\\\\', '\u2028': '\\u2028', '\u2029': '\\u2029' };
111function 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
129function StringLiteral (string ) {
130 return '\''
131 +string
132 .replace(CANT_IN_SINGLE_QUOTE, staticallyEscape )
133 .replace(Cf, dynamicallyEscape )
134 +'\'';
135}
136
137/*¡ ES */
138
139const from = (
140 /*! j-globals: Buffer.from (fallback) */
141 typeof Buffer==='function' && /*#__PURE__*/ hasOwnProperty.call(Buffer, 'from') ? Buffer.from : undefined$1
142 /*¡ j-globals: Buffer.from (fallback) */
143);
144
145const RegExp_prototype = RegExp.prototype;
146
147/*!
148 * 模块名称:j-utf
149 * 模块功能:UTF 相关共享实用程序。从属于“简计划”。
150      UTF util. Belong to "Plan J".
151 * 模块版本:3.2.0
152 * 许可条款:LGPL-3.0
153 * 所属作者:龙腾道 <LongTengDao@LongTengDao.com> (www.LongTengDao.com)
154 * 问题反馈:https://GitHub.com/LongTengDao/j-utf/issues
155 * 项目主页:https://GitHub.com/LongTengDao/j-utf/
156 */
157
158var NON_SCALAR = (
159 'unicode' in RegExp_prototype
160 ? RegExp('[\\uD800-\\uDFFF]', 'u')
161 : /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/
162);
163
164function 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/*¡ j-utf */
271
272const slice = Array.prototype.slice;
273
274/*!
275 * 模块名称:j-regexp
276 * 模块功能:可读性更好的正则表达式创建方式。从属于“简计划”。
277      More readable way for creating RegExp. Belong to "Plan J".
278 * 模块版本:6.0.0
279 * 许可条款:LGPL-3.0
280 * 所属作者:龙腾道 <LongTengDao@LongTengDao.com> (www.LongTengDao.com)
281 * 问题反馈:https://GitHub.com/LongTengDao/j-regexp/issues
282 * 项目主页:https://GitHub.com/LongTengDao/j-regexp/
283 */
284
285var NT = /[\n\t]/g;
286
287function 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
297function newRegExp (flags_template ) {
298 return typeof flags_template==='string'
299 ? function newRegExp (template ) {
300 return new RegExp(
301 /*#__PURE__*/Source(
302 template.raw,
303 /*#__PURE__*/slice.call(arguments, 1)
304 ),
305 flags_template
306 );
307 }
308 : new RegExp(
309 /*#__PURE__*/Source(
310 flags_template.raw,
311 /*#__PURE__*/slice.call(arguments, 1)
312 )
313 );
314}
315
316/*¡ j-regexp */
317
318const 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]`;
323const CONTROL_CHARACTER = /[\x01-\x08\x0B\x0E-\x1F\x7F-\x9F]/;
324
325const ASCII_WHITESPACE = /[\t\n\f\r ]/;
326const ASCII_ALPHA = /[a-zA-Z]/;
327
328const TOKENS = /[^\s=;]+/g;
329const AliasName = /[A-Z][\w\-]*/;////
330const localOrComponentName = /[A-Za-z][A-Za-z0-9\-]*/;////
331const localName$1 = /[a-z][a-z0-9\-]*/;////
332const className = /[\w\-]+/;////
333
334const ATTRIBUTE_NAME = /[^\0\t\n\f\r "'<>/=]+/;
335const UNQUOTED_ATTRIBUTE_VALUE = /[^\0\t\n\f\r "'=<>`]+/;//// /[^\t\n\f\r "'=<>`][^\t\n\f\r >]*|(?=>)/; // HTML5 以前的标准宽松一些,实际 HTML 解析则更宽松。但 jVue 目前的整体设计原则是抛出一切不规范的错误,另外顺带提示反引号这个十分特殊的 IE 漏洞的存在
336const ATTRIBUTE_NAME_VALUE = newRegExp`
337 (${ATTRIBUTE_NAME})
338 ${ASCII_WHITESPACE}*
339 =
340 ${ASCII_WHITESPACE}*
341 (
342 "[^"]*"
343 |
344 '[^']*'
345 |
346 ${UNQUOTED_ATTRIBUTE_VALUE}
347 )`;
348const 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
363const TAG_NAME = newRegExp`${ASCII_ALPHA}[^\0\t\n\f\r />]*`;
364const TAG = newRegExp`
365 ^
366 <
367 (/?)
368 (${TAG_NAME})
369 ((?:
370 ${ASCII_WHITESPACE}+
371 ${ATTRIBUTE}
372 )*)
373 ${ASCII_WHITESPACE}*
374 (/?)
375 >
376`;
377
378const TAG_EMIT_CHAR = /[\t\n\f\r />]/;
379const TAG_LIKE = newRegExp`
380 <
381 (?:
382 /?${TAG_NAME}${TAG_EMIT_CHAR}
383 |
384 [!?]
385 )
386`;
387
388const IS_TAG = newRegExp`
389 ^
390 <
391 /?
392 ${TAG_NAME}
393 ${TAG_EMIT_CHAR}
394`;
395
396const isArray = Array.isArray;
397
398/*!
399 * 模块名称:j-eol
400 * 模块功能:换行符相关共享实用程序。从属于“简计划”。
401      EOL util. Belong to "Plan J".
402 * 模块版本:1.3.0
403 * 许可条款:LGPL-3.0
404 * 所属作者:龙腾道 <LongTengDao@LongTengDao.com> (www.LongTengDao.com)
405 * 问题反馈:https://GitHub.com/LongTengDao/j-eol/issues
406 * 项目主页:https://GitHub.com/LongTengDao/j-eol/
407 */
408
409var 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
421var NEED_TO_ESCAPE_IN_REGEXP = /^[$()*+\-.?[\\\]^{|]/;
422var SURROGATE_PAIR = /^[\uD800-\uDBFF][\uDC00-\uDFFF]/;
423var GROUP = create(null);
424
425function 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}
431function 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
439function 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
447function 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/*¡ j-regexp */
470
471var FLAGS = /\/([a-fh-z]*)g([a-fh-z]*)$/;
472
473function removeGlobal (regExp ) {
474 var flags = FLAGS.exec(''+regExp);
475 return flags ? RegExp(regExp, flags[1]+flags[2]) : regExp;
476}
477
478function 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
511var LF = '\n';
512var FF = '\f';
513var CRLF = '\r\n';
514var CR = '\r';
515var LS = '\u2028';
516var PS = '\u2029';
517
518/*¡ j-eol */
519
520const checkNewline = (
521 /*! j-globals: return (internal) */
522 function RETURN (value) {
523 return value;
524 }
525 /*¡ j-globals: return (internal) */
526);
527
528const VOID_ELEMENTS = /^(?:area|b(?:r|ase)|co(?:l|mmand)|embed|hr|i(?:mg|nput)|keygen|link|meta|param|source|track|wbr)$/i;
529
530const RAW_TEXT_ELEMENTS = /^s(?:cript|tyle)$/i;
531
532const ESCAPABLE_RAW_TEXT_ELEMENTS = /^t(?:extarea|itle)$/i;
533
534const 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
536const NON_ASCII = /[^\x00-\x7F]/u;
537const NON_TAB = /[^\t\x20]/g;
538
539function 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
588const throwSyntaxError = (
589 /*! j-globals: throw.SyntaxError (internal) */
590 function throwSyntaxError (message) {
591 throw SyntaxError(message);
592 }
593 /*¡ j-globals: throw.SyntaxError (internal) */
594);
595
596const fromCodePoint = String.fromCodePoint;
597
598const SEMICOLON_ENTITIES = /*#__PURE__*/ 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
2726const CONTINUE_ENTITIES = /*#__PURE__*/ 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
2728const ESCAPABLE_INNER_TEXT = /[\t\n\r\x20&<\xA0\u2000-\u200A\u2028\u2029\u202F\u3000]/g;// 除了必须转义的,还有防止被 Vue 编译器剔除的空白
2729const escapableInnerTextReplacer = ($0 ) => `&#${$0.charCodeAt(0)};`;
2730function escapeInnerText (text ) { return text.replace(ESCAPABLE_INNER_TEXT, escapableInnerTextReplacer); }
2731
2732const ESCAPABLE_ATTRIBUTE_VALUE = /["&]/g;
2733const escapableAttributeValueReplacer = ($0 ) => $0==='"' ? '&quot;' : '&amp;';
2734function escapeAttributeValue (text ) { return text.replace(ESCAPABLE_ATTRIBUTE_VALUE, escapableAttributeValueReplacer); }
2735
2736const 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
2766const ENTITIES_TO_TRY = /&([a-z][a-z\d]*|#(?:\d+|x[\dA-F]+));?/ig;
2767
2768function 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
2787const ENTITIES = /&(?:(?:([a-z][a-z\d]*)|#(?:\d+|x[\dA-F]+));?)?/ig;
2788
2789function 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
2806function unescape (string , fallback ) {
2807 return fallback
2808 ? string.replace(ENTITIES_TO_TRY, unescape_or_return)
2809 : string.replace(ENTITIES, unescape_or_throw);
2810}
2811
2812const keys = Object.keys;
2813
2814const Object_defineProperties = Object.defineProperties;
2815
2816const Reflect_apply = Reflect.apply;
2817
2818const Reflect_construct = Reflect.construct;
2819
2820const Reflect_defineProperty = Reflect.defineProperty;
2821
2822const Reflect_deleteProperty = Reflect.deleteProperty;
2823
2824const Reflect_set = Reflect.set;
2825
2826const Reflect_ownKeys = Reflect.ownKeys;
2827
2828/*!
2829 * 模块名称:j-orderify
2830 * 模块功能:返回一个能保证给定对象的属性按此后添加顺序排列的 proxy,即使键名是 symbol,或整数 string。从属于“简计划”。
2831      Return a proxy for given object, which can guarantee own keys are in setting order, even if the key name is symbol or int string. Belong to "Plan J".
2832 * 模块版本:5.3.0
2833 * 许可条款:LGPL-3.0
2834 * 所属作者:龙腾道 <LongTengDao@LongTengDao.com> (www.LongTengDao.com)
2835 * 问题反馈:https://GitHub.com/LongTengDao/j-orderify/issues
2836 * 项目主页:https://GitHub.com/LongTengDao/j-orderify/
2837 */
2838
2839const Keeper = Set;
2840const target2keeper = new WeakMap;
2841const proxy2target = new WeakMap;
2842const target2proxy = new WeakMap;
2843
2844const setDescriptor = /*#__PURE__*/assign(create(null), {
2845 value: undefined$1,
2846 writable: true,
2847 enumerable: true,
2848 configurable: true,
2849});
2850const handlers = /*#__PURE__*/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
2889function 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
2896const { 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
2907function 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}
2923function 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
2938const { 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
2952function 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}
2958function 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}
2989function throwConstructing () { throw TypeError(`NULL cannot be invoked with 'new'`); }
2990const NULL$1 =
2991 /*#__PURE__*/
2992 function ( ) {
2993 const NULL = function ( source , define ) {
2994 return new.target
2995 ? new.target===NULL
2996 ? /*#__PURE__*/ throwConstructing()
2997 : /*#__PURE__*/ newProxy(this, new Keeper)
2998 : /*#__PURE__*/ NULL_from(source , define );
2999 };
3000 NULL.prototype = null;
3001 //delete NULL.name;
3002 //delete NULL.length;
3003 freeze(NULL);
3004 return NULL;
3005 }();
3006
3007/*¡ j-orderify */
3008
3009class 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}
3024delete Attributes.prototype.constructor;
3025
3026freeze(Attributes.prototype);
3027
3028const ELEMENT_START = 1.1;
3029const ELEMENT_END = 1.2;
3030const ELEMENT_SELF_CLOSING = 1.3;
3031const TEXT = 3;
3032const COMMENT = 8;
3033const EOF = 0;
3034
3035function 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
3092const { rollup } = require('rollup') ;
3093const AcornClassFields = require('acorn-class-fields');
3094const AcornStaticClassFeatures = require('acorn-static-class-features');
3095const AcornPrivateMethods = require('acorn-private-methods');
3096function AcornStage3 (Parser ) {
3097 return Parser.extend(
3098 AcornClassFields,
3099 AcornStaticClassFeatures,
3100 AcornPrivateMethods,
3101 );
3102}
3103
3104const transpileModule = require('@ltd/j-ts') ;
3105const Parser = ( require('acorn') ).Parser.extend(AcornStage3);
3106const { simple } = require('acorn-walk');
3107const findGlobals = require('@ltd/acorn-globals') ;
3108const { compile } = require('vue-template-compiler') ;
3109const { minify } = require('terser') ;
3110
3111class 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
3145const Private = (
3146 /*! j-globals: private (internal) */
3147 typeof WeakMap==='function'
3148 ? /*#__PURE__*/ 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 = /*#__PURE__*/ defineProperty(/*#__PURE__*/ defineProperty(/*#__PURE__*/ new Weak, 'get', GET), 'set', SET);
3161 return function _ (THIS) {
3162 return /*#__PURE__*/ weak.get(THIS) || /*#__PURE__*/ add(weak, THIS);
3163 };
3164 };
3165 }()
3166 : function Private () { return checkNewline; }
3167 /*¡ j-globals: private (internal) */
3168);
3169
3170const _ = Private
3171
3172
3173
3174 ();
3175
3176const SCRIPT_END_TAG = newRegExp('i')`</script${TAG_EMIT_CHAR}`;
3177
3178const 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*$`;
3187const TS = /^\s*T(?:S|ypeScript)\s*$/i;
3188
3189class 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
3212const SELECTOR = newRegExp`^
3213 \s*(?:
3214 ${AliasName}\s*
3215 (?:=\s*
3216 (?:${localName$1}|(?=\.))
3217 (?:\.${className})*
3218 \s*)?;
3219 \s*)*
3220$`;
3221
3222const STYLE_END_TAG = newRegExp('i')`</style${TAG_EMIT_CHAR}`;
3223
3224const CSS = /^\s*(?:text\/)?CSS\s*$/i;
3225
3226const NAME_IN_CSS = /(?<=[\s,>}{\](+~]|\*\/|^)(?:[A-Z][\w-]*)+(?=[\s,>{}[)+~#:.]|\/\*|$)/g;
3227
3228class 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
3280const _parentNode = Symbol('#parentNode');
3281
3282class 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}
3305freeze(Node.prototype);
3306
3307class 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}
3353freeze(Element.prototype);
3354
3355const PropertyDescriptor = (
3356 /*! j-globals: null.PropertyDescriptor (internal) */
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__*/ __PURE__(value_get, set_writable, enumerable, configurable);
3378 };
3379 }()
3380 /*¡ j-globals: null.PropertyDescriptor (internal) */
3381);
3382
3383const childNodesPropertyDescriptor = PropertyDescriptor(/*#__PURE__*/freeze([]), true, false, true);
3384
3385class 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
3397freeze(CharacterData.prototype);
3398
3399class 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('&#10;');
3411 }
3412
3413}
3414freeze(Text.prototype);
3415
3416const NT$1 = /\n\t+/g;
3417const N = /^\n|\n$/g;
3418
3419function trimTab (raw ) {
3420 //Entities.test(raw);// 以后如果要完全剔除“\n”,则需要要先检查解码的正确性,防止“&l”“t;”连起来
3421 //return raw.replace(/\n\t*/g, '');
3422 return raw.replace(NT$1, '\n').replace(N, '');
3423}
3424
3425const delimiters_0 = '{{';
3426const delimiters_1 = '}}';
3427
3428class Mustache extends Array {
3429
3430 constructor (raw , v_pre ) {
3431 // Vue 会优先解析 <tag>,而且还看 tagName,然后才是 {{}},这和流式解析矛盾,因此要求避免任何潜在的视觉歧义
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}`; }// 以后如果要完全剔除“\n”,则需要更复杂的保全逻辑({{'{{{'}}、{{{k:{b:'}\}\}'} } }}),避免本来没有连在一起的连到一起
3477 isTemplate = !isTemplate;
3478 }
3479 return data;
3480 }
3481
3482}
3483
3484const foreign_elements = RegExp(FOREIGN_ELEMENTS.source);
3485const TEXTAREA_END_TAG = newRegExp`</textarea${TAG_EMIT_CHAR}`;
3486const STYLE_END_TAG$1 = newRegExp`</STYLE${TAG_EMIT_CHAR}`;
3487const TITLE_END_TAG = newRegExp`</title${TAG_EMIT_CHAR}`;
3488const TEXTAREA = /^textarea$/i;
3489const TNS = /^[\t\n ]+$/;
3490const SOF_TNS_LT = /^[\t\n ]+</;
3491const GT_TNS_EOF = />[\t\n ]+$/;
3492
3493const _NAME = /^_[a-z]$/;
3494const _NAMES = [];
3495function Pattern (node ) {
3496 switch ( node.type ) {
3497 case 'Identifier':
3498 if ( _NAME.test(node.name) ) { _NAMES.push(node.name); }
3499 break;
3500 case 'ObjectPattern':// { Pattern }
3501 for ( let { properties } = node, { length } = properties, index = 0; index<length; ++index ) {
3502 const property = properties[index];
3503 switch ( property.type ) {
3504 case 'Property':// { key: valuePattern }
3505 Pattern(property.value);
3506 break;
3507 case 'RestElement':// { ...argumentPattern }
3508 Pattern(property.argument);
3509 break;
3510 default:
3511 throw Error(`Unrecognized pattern type: ${property.type}`);
3512 }
3513 }
3514 break;
3515 case 'ArrayPattern':// [ , Pattern ]
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);// [ ...argumentPattern ] (...argumentPattern)
3523 break;
3524 case 'AssignmentPattern':// leftPattern = right
3525 Pattern(node.left);
3526 break;
3527 default:
3528 throw Error(`Unrecognized pattern type: ${node.type}`);
3529 }
3530}
3531const forAliasRE = /(?<=^\s*(?:\(|(?!\())).*?(?=\)?\s+(?:in|of)\s+.*$)/s;
3532const parserOptions = NULL({
3533 ecmaVersion: 2014 ,
3534 sourceType: 'module' ,
3535 allowReserved: false,
3536});
3537function _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
3560let html = '';
3561let index = 0;
3562let partial ;
3563
3564function 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 // iframe:Vue 运行所必须的 IE9+ 刚好允许其中嵌套标签
3620 // pre
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);// 不需要改循环实现,因为层数多了 Vue 本身也会爆栈。
3660 }
3661 }
3662}
3663
3664class 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
3694const TEMPLATE_END_TAG = newRegExp('i')`</template${TAG_EMIT_CHAR}`;
3695
3696const PARTIAL = newRegExp`^
3697 \s*(?:
3698 ${AliasName}\s*
3699 =\s*
3700 ${localOrComponentName}
3701 (?:\.?|(?:\.${className})*)
3702 \s*;
3703 \s*)*
3704$`;
3705
3706const HTML = /^(?:HTML|\s*text\/html\s*)$/i;
3707
3708class 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 //if ( attributes.functional!==undefined ) { throw SyntaxError(`template 功能块元素的 functional 属性必须是空属性`); }
3753 //_this.functional = true;
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
3786class 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
3799const SCRIPT_STYLE_TEMPLATE = /^(?:script|style|template)$/i;
3800const NON_EOL = /[^\n]+/g;
3801const NON_TAB$1 = /[^\t ]/g;
3802
3803function 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
3893const KEYS = /[a-z][a-z0-9]*(?:_[a-z0-9]+)*/ig;
3894
3895const byStart = (a , b ) => a.start-b.start;
3896
3897const _x = /^_(?![a-z]$)/;
3898const shorthand = new WeakSet;
3899//const dangerous :WeakSet<Identifier> = new WeakSet;
3900//const __Proto__ :String = Object('__proto__');
3901const 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 //if ( value.name==='__proto__' ) { value.name = __Proto__; }
3915 shorthand.add(value);
3916 }
3917 }
3918 },
3919 VariablePattern (identifier ) {
3920 if ( identifier.name.startsWith('_') ) {
3921 throw Error(`不要对实例下的下划线开头的私有属性“${identifier.name}”进行写操作!`);//dangerous.add(identifier);
3922 }
3923 },
3924});
3925
3926const parserOptions$1 = NULL({
3927 ecmaVersion: 5 ,
3928 sourceType: 'module' ,
3929 allowReserved: false,
3930});
3931const 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
3955const with_this__return_ = 'with(this){return ';
3956const with_this__return_$ = with_this__return_.length;
3957const _$1 = '}';
3958const _$ = -_$1.length;
3959const _function__c___use_strict__return_ = '(function(_c){"use strict";return ';
3960const _function__c___use_strict__return_$ = _function__c___use_strict__return_.length;
3961
3962const _VM_C_EXP = /^\(function\(([\w$]+),([\w$]+)\){"use strict";return \1=this,(\2\(.*\))}\);$/s;
3963const _C_EXP = /^\(function\(([\w$]+)\){"use strict";return (\1\(.*\))}\);$/s;
3964
3965function 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 //if ( globals.has('_h') ) { throw Error(`jVue 内部设计时错误地认为新版本的 Vue 不会编译生成对“_h”的引用`); }
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 //if ( dangerous.has(identifier) ) { throw Error(`不要对实例下的下划线开头的私有属性“${identifier.name}”进行写操作!`); }
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}`//if ( shorthand.has(identifier) ) { _code += identifier.name==='__proto__' ? `['__proto__']:` : `${name}:`; }
3986 : `${_vm}.${name}`;//_code += `${_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
4009function 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
4019const NULo = /^\0[0-7]/;
4020const LS_PS = /[\u2028\u2029]/g;
4021const LF_LS_PS = /[\n\u2028\u2029]/g;
4022const escape_LS_PS = ($0 ) => $0==='\u2028' ? '\\002028' : '\\002029';
4023const escape_LF_LS_PS = ($0 ) => $0==='\n' ? '&#x0A;' : $0==='\u2028' ? '&#x2028;' : '&#x2029;';
4024function VisibleStringLiteral (id ) {
4025 const literal = StringLiteral(id);
4026 return id.startsWith('\0') ? ( NULo.test(id) ? `'\\x00` : `'\\0` )+literal.slice(2) : literal;
4027}
4028
4029function * 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
4067const acorn = NULL({
4068 ecmaVersion: 5,
4069 sourceType: 'module',
4070 allowAwaitOutsideFunction: true,
4071});
4072const 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
4083const TRUE = NULL({
4084 format: 'esm' ,
4085 sourcemap: true,
4086});
4087const FALSE = NULL({
4088 format: 'esm' ,
4089 sourcemap: false,
4090});
4091const INLINE = NULL({
4092 format: 'esm' ,
4093 sourcemap: 'inline' ,
4094});
4095
4096async 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
4151const OPTIONS = { swappable: false, stripBOM: true, startsWithASCII: true, throwError: true };
4152const VUE_EOL = EOL([ LF, CRLF, CR ], [ FF, LS, PS ], true);
4153const CR_LF = /\r\n?/g;
4154
4155class 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 `,而且`+// script 标签内容前
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}
4240freeze(SFC.prototype);
4241
4242const _default = Default({
4243 version,
4244 SFC,
4245});
4246
4247module.exports = _default;
4248
4249//# sourceMappingURL=index.js.map
\No newline at end of file