vue2/packages/template-compiler/browser.js

9338 lines
286 KiB
JavaScript
Raw Normal View History

2022-05-31 15:32:44 +08:00
;(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined'
? factory(exports)
: typeof define === 'function' && define.amd
? define(['exports'], factory)
: ((global =
typeof globalThis !== 'undefined' ? globalThis : global || self),
factory((global.VueTemplateCompiler = {})))
})(this, function (exports) {
'use strict'
var commonjsGlobal =
typeof globalThis !== 'undefined'
? globalThis
: typeof window !== 'undefined'
? window
: typeof global !== 'undefined'
? global
: typeof self !== 'undefined'
? self
: {}
var splitRE$1 = /\r?\n/g
var emptyRE = /^\s*$/
var needFixRE = /^(\r?\n)*[\t\s]/
var deIndent = function deindent(str) {
if (!needFixRE.test(str)) {
return str
}
var lines = str.split(splitRE$1)
var min = Infinity
var type, cur, c
for (var i = 0; i < lines.length; i++) {
var line = lines[i]
if (!emptyRE.test(line)) {
if (!type) {
c = line.charAt(0)
if (c === ' ' || c === '\t') {
type = c
cur = count(line, type)
if (cur < min) {
min = cur
}
} else {
return str
}
} else {
cur = count(line, type)
if (cur < min) {
min = cur
}
}
}
}
return lines
.map(function (line) {
return line.slice(min)
})
.join('\n')
}
function count(line, type) {
var i = 0
while (line.charAt(i) === type) {
i++
}
return i
}
var emptyObject = Object.freeze({})
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
return v === undefined || v === null
}
/**
* Check if value is primitive.
*/
function isPrimitive(value) {
return (
typeof value === 'string' ||
typeof value === 'number' ||
// $flow-disable-line
typeof value === 'symbol' ||
typeof value === 'boolean'
)
}
/**
* Quick object check - this is primarily used to tell
* objects from primitive values when we know the value
* is a JSON-compliant type.
*/
function isObject(obj) {
return obj !== null && typeof obj === 'object'
}
/**
* Get the raw type string of a value, e.g., [object Object].
*/
var _toString = Object.prototype.toString
function toRawType(value) {
return _toString.call(value).slice(8, -1)
}
/**
* Strict object type check. Only returns true
* for plain JavaScript objects.
*/
function isPlainObject(obj) {
return _toString.call(obj) === '[object Object]'
}
/**
* Check if val is a valid array index.
*/
function isValidArrayIndex(val) {
var n = parseFloat(String(val))
return n >= 0 && Math.floor(n) === n && isFinite(val)
}
/**
* Make a map and return a function for checking if a key
* is in that map.
*/
function makeMap(str, expectsLowerCase) {
var map = Object.create(null)
var list = str.split(',')
for (var i = 0; i < list.length; i++) {
map[list[i]] = true
}
return expectsLowerCase
? function (val) {
return map[val.toLowerCase()]
}
: function (val) {
return map[val]
}
}
/**
* Check if a tag is a built-in tag.
*/
var isBuiltInTag = makeMap('slot,component', true)
/**
* Check if an attribute is a reserved attribute.
*/
makeMap('key,ref,slot,slot-scope,is')
/**
* Remove an item from an array.
*/
function remove(arr, item) {
if (arr.length) {
var index = arr.indexOf(item)
if (index > -1) {
return arr.splice(index, 1)
}
}
}
/**
* Check whether an object has the property.
*/
var hasOwnProperty = Object.prototype.hasOwnProperty
function hasOwn(obj, key) {
return hasOwnProperty.call(obj, key)
}
/**
* Create a cached version of a pure function.
*/
function cached(fn) {
var cache = Object.create(null)
return function cachedFn(str) {
var hit = cache[str]
return hit || (cache[str] = fn(str))
}
}
/**
* Camelize a hyphen-delimited string.
*/
var camelizeRE = /-(\w)/g
var camelize = cached(function (str) {
return str.replace(camelizeRE, function (_, c) {
return c ? c.toUpperCase() : ''
})
})
/**
* Hyphenate a camelCase string.
*/
var hyphenateRE = /\B([A-Z])/g
var hyphenate = cached(function (str) {
return str.replace(hyphenateRE, '-$1').toLowerCase()
})
/**
* Mix properties into target object.
*/
function extend(to, _from) {
for (var key in _from) {
to[key] = _from[key]
}
return to
}
/* eslint-disable no-unused-vars */
/**
* Perform no operation.
* Stubbing args to make Flow happy without leaving useless transpiled code
* with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
*/
function noop(a, b, c) {}
/**
* Always return false.
*/
var no = function (a, b, c) {
return false
}
/* eslint-enable no-unused-vars */
/**
* Return the same value.
*/
var identity = function (_) {
return _
}
/**
* Generate a string containing static keys from compiler modules.
*/
function genStaticKeys$1(modules) {
return modules
.reduce(function (keys, m) {
return keys.concat(m.staticKeys || [])
}, [])
.join(',')
}
var isUnaryTag = makeMap(
'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
'link,meta,param,source,track,wbr'
)
// Elements that you can, intentionally, leave open
// (and which close themselves)
var canBeLeftOpenTag = makeMap(
'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'
)
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
var isNonPhrasingTag = makeMap(
'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
'title,tr,track'
)
/**
* unicode letters used for parsing html tags, component names and property paths.
* using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
* skipping \u10000-\uEFFFF due to it freezing up PhantomJS
*/
var unicodeRegExp =
/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/
/**
* Define a property.
*/
function def(obj, key, val, enumerable) {
Object.defineProperty(obj, key, {
value: val,
enumerable: !!enumerable,
writable: true,
configurable: true
})
}
/**
* Not type-checking this file because it's mostly vendor code.
*/
// Regular Expressions for parsing tags and attributes
var attribute =
/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/
var dynamicArgAttribute =
/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/
var ncname = '[a-zA-Z_][\\-\\.0-9_a-zA-Z'.concat(unicodeRegExp.source, ']*')
var qnameCapture = '((?:'.concat(ncname, '\\:)?').concat(ncname, ')')
var startTagOpen = new RegExp('^<'.concat(qnameCapture))
var startTagClose = /^\s*(\/?)>/
var endTag = new RegExp('^<\\/'.concat(qnameCapture, '[^>]*>'))
var doctype = /^<!DOCTYPE [^>]+>/i
// #7298: escape - to avoid being passed as HTML comment when inlined in page
var comment = /^<!\--/
var conditionalComment = /^<!\[/
// Special Elements (can contain anything)
var isPlainTextElement = makeMap('script,style,textarea', true)
var reCache = {}
var decodingMap = {
'&lt;': '<',
'&gt;': '>',
'&quot;': '"',
'&amp;': '&',
'&#10;': '\n',
'&#9;': '\t',
'&#39;': "'"
}
var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g
var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g
// #5992
var isIgnoreNewlineTag = makeMap('pre,textarea', true)
var shouldIgnoreFirstNewline = function (tag, html) {
return tag && isIgnoreNewlineTag(tag) && html[0] === '\n'
}
function decodeAttr(value, shouldDecodeNewlines) {
var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr
return value.replace(re, function (match) {
return decodingMap[match]
})
}
function parseHTML(html, options) {
var stack = []
var expectHTML = options.expectHTML
var isUnaryTag = options.isUnaryTag || no
var canBeLeftOpenTag = options.canBeLeftOpenTag || no
var index = 0
var last, lastTag
var _loop_1 = function () {
last = html
// Make sure we're not in a plaintext content element like script/style
if (!lastTag || !isPlainTextElement(lastTag)) {
var textEnd = html.indexOf('<')
if (textEnd === 0) {
// Comment:
if (comment.test(html)) {
var commentEnd = html.indexOf('-->')
if (commentEnd >= 0) {
if (options.shouldKeepComment) {
options.comment(
html.substring(4, commentEnd),
index,
index + commentEnd + 3
)
}
advance(commentEnd + 3)
return 'continue'
}
}
// http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
if (conditionalComment.test(html)) {
var conditionalEnd = html.indexOf(']>')
if (conditionalEnd >= 0) {
advance(conditionalEnd + 2)
return 'continue'
}
}
// Doctype:
var doctypeMatch = html.match(doctype)
if (doctypeMatch) {
advance(doctypeMatch[0].length)
return 'continue'
}
// End tag:
var endTagMatch = html.match(endTag)
if (endTagMatch) {
var curIndex = index
advance(endTagMatch[0].length)
parseEndTag(endTagMatch[1], curIndex, index)
return 'continue'
}
// Start tag:
var startTagMatch = parseStartTag()
if (startTagMatch) {
handleStartTag(startTagMatch)
if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
advance(1)
}
return 'continue'
}
}
var text = void 0,
rest = void 0,
next = void 0
if (textEnd >= 0) {
rest = html.slice(textEnd)
while (
!endTag.test(rest) &&
!startTagOpen.test(rest) &&
!comment.test(rest) &&
!conditionalComment.test(rest)
) {
// < in plain text, be forgiving and treat it as text
next = rest.indexOf('<', 1)
if (next < 0) break
textEnd += next
rest = html.slice(textEnd)
}
text = html.substring(0, textEnd)
}
if (textEnd < 0) {
text = html
}
if (text) {
advance(text.length)
}
if (options.chars && text) {
options.chars(text, index - text.length, index)
}
} else {
var endTagLength_1 = 0
var stackedTag_1 = lastTag.toLowerCase()
var reStackedTag =
reCache[stackedTag_1] ||
(reCache[stackedTag_1] = new RegExp(
'([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)',
'i'
))
var rest = html.replace(reStackedTag, function (all, text, endTag) {
endTagLength_1 = endTag.length
if (
!isPlainTextElement(stackedTag_1) &&
stackedTag_1 !== 'noscript'
) {
text = text
.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
.replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1')
}
if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
text = text.slice(1)
}
if (options.chars) {
options.chars(text)
}
return ''
})
index += html.length - rest.length
html = rest
parseEndTag(stackedTag_1, index - endTagLength_1, index)
}
if (html === last) {
options.chars && options.chars(html)
if (!stack.length && options.warn) {
options.warn(
'Mal-formatted tag at end of template: "'.concat(html, '"'),
{
start: index + html.length
}
)
}
return 'break'
}
}
while (html) {
var state_1 = _loop_1()
if (state_1 === 'break') break
}
// Clean up any remaining tags
parseEndTag()
function advance(n) {
index += n
html = html.substring(n)
}
function parseStartTag() {
var start = html.match(startTagOpen)
if (start) {
var match = {
tagName: start[1],
attrs: [],
start: index
}
advance(start[0].length)
var end = void 0,
attr = void 0
while (
!(end = html.match(startTagClose)) &&
(attr = html.match(dynamicArgAttribute) || html.match(attribute))
) {
attr.start = index
advance(attr[0].length)
attr.end = index
match.attrs.push(attr)
}
if (end) {
match.unarySlash = end[1]
advance(end[0].length)
match.end = index
return match
}
}
}
function handleStartTag(match) {
var tagName = match.tagName
var unarySlash = match.unarySlash
if (expectHTML) {
if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
parseEndTag(lastTag)
}
if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
parseEndTag(tagName)
}
}
var unary = isUnaryTag(tagName) || !!unarySlash
var l = match.attrs.length
var attrs = new Array(l)
for (var i = 0; i < l; i++) {
var args = match.attrs[i]
var value = args[3] || args[4] || args[5] || ''
var shouldDecodeNewlines =
tagName === 'a' && args[1] === 'href'
? options.shouldDecodeNewlinesForHref
: options.shouldDecodeNewlines
attrs[i] = {
name: args[1],
value: decodeAttr(value, shouldDecodeNewlines)
}
if (options.outputSourceRange) {
attrs[i].start = args.start + args[0].match(/^\s*/).length
attrs[i].end = args.end
}
}
if (!unary) {
stack.push({
tag: tagName,
lowerCasedTag: tagName.toLowerCase(),
attrs: attrs,
start: match.start,
end: match.end
})
lastTag = tagName
}
if (options.start) {
options.start(tagName, attrs, unary, match.start, match.end)
}
}
function parseEndTag(tagName, start, end) {
var pos, lowerCasedTagName
if (start == null) start = index
if (end == null) end = index
// Find the closest opened tag of the same type
if (tagName) {
lowerCasedTagName = tagName.toLowerCase()
for (pos = stack.length - 1; pos >= 0; pos--) {
if (stack[pos].lowerCasedTag === lowerCasedTagName) {
break
}
}
} else {
// If no tag name is provided, clean shop
pos = 0
}
if (pos >= 0) {
// Close all the open elements, up the stack
for (var i = stack.length - 1; i >= pos; i--) {
if ((i > pos || !tagName) && options.warn) {
options.warn(
'tag <'.concat(stack[i].tag, '> has no matching end tag.'),
{
start: stack[i].start,
end: stack[i].end
}
)
}
if (options.end) {
options.end(stack[i].tag, start, end)
}
}
// Remove the open elements from the stack
stack.length = pos
lastTag = pos && stack[pos - 1].tag
} else if (lowerCasedTagName === 'br') {
if (options.start) {
options.start(tagName, [], true, start, end)
}
} else if (lowerCasedTagName === 'p') {
if (options.start) {
options.start(tagName, [], false, start, end)
}
if (options.end) {
options.end(tagName, start, end)
}
}
}
}
var splitRE = /\r?\n/g
var replaceRE = /./g
var isSpecialTag = makeMap('script,style,template', true)
/**
* Parse a single-file component (*.vue) file into an SFC Descriptor Object.
*/
function parseComponent(content, options) {
if (options === void 0) {
options = {}
}
var sfc = {
template: null,
script: null,
styles: [],
customBlocks: [],
errors: []
}
var depth = 0
var currentBlock = null
var warn = function (msg) {
sfc.errors.push(msg)
}
if (options.outputSourceRange) {
warn = function (msg, range) {
var data = { msg: msg }
if (range.start != null) {
data.start = range.start
}
if (range.end != null) {
data.end = range.end
}
sfc.errors.push(data)
}
}
function start(tag, attrs, unary, start, end) {
if (depth === 0) {
currentBlock = {
type: tag,
content: '',
start: end,
attrs: attrs.reduce(function (cumulated, _a) {
var name = _a.name,
value = _a.value
cumulated[name] = value || true
return cumulated
}, {})
}
if (isSpecialTag(tag)) {
checkAttrs(currentBlock, attrs)
if (tag === 'style') {
sfc.styles.push(currentBlock)
} else {
sfc[tag] = currentBlock
}
} else {
// custom blocks
sfc.customBlocks.push(currentBlock)
}
}
if (!unary) {
depth++
}
}
function checkAttrs(block, attrs) {
for (var i = 0; i < attrs.length; i++) {
var attr = attrs[i]
if (attr.name === 'lang') {
block.lang = attr.value
}
if (attr.name === 'scoped') {
block.scoped = true
}
if (attr.name === 'module') {
block.module = attr.value || true
}
if (attr.name === 'src') {
block.src = attr.value
}
}
}
function end(tag, start) {
if (depth === 1 && currentBlock) {
currentBlock.end = start
var text = content.slice(currentBlock.start, currentBlock.end)
if (options.deindent !== false) {
text = deIndent(text)
}
// pad content so that linters and pre-processors can output correct
// line numbers in errors and warnings
if (currentBlock.type !== 'template' && options.pad) {
text = padContent(currentBlock, options.pad) + text
}
currentBlock.content = text
currentBlock = null
}
depth--
}
function padContent(block, pad) {
if (pad === 'space') {
return content.slice(0, block.start).replace(replaceRE, ' ')
} else {
var offset = content.slice(0, block.start).split(splitRE).length
var padChar = block.type === 'script' && !block.lang ? '//\n' : '\n'
return Array(offset).join(padChar)
}
}
parseHTML(content, {
warn: warn,
start: start,
end: end,
outputSourceRange: options.outputSourceRange
})
return sfc
}
// can we use __proto__?
var hasProto = '__proto__' in {}
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined'
var UA = inBrowser && window.navigator.userAgent.toLowerCase()
var isIE = UA && /msie|trident/.test(UA)
UA && UA.indexOf('msie 9.0') > 0
var isEdge = UA && UA.indexOf('edge/') > 0
UA && UA.indexOf('android') > 0
UA && /iphone|ipad|ipod|ios/.test(UA)
UA && /chrome\/\d+/.test(UA) && !isEdge
UA && /phantomjs/.test(UA)
UA && UA.match(/firefox\/(\d+)/)
// Firefox has a "watch" function on Object.prototype...
// @ts-expect-error firebox support
var nativeWatch = {}.watch
var supportsPassive = false
if (inBrowser) {
try {
var opts = {}
Object.defineProperty(opts, 'passive', {
get: function () {
/* istanbul ignore next */
supportsPassive = true
}
}) // https://github.com/facebook/flow/issues/285
window.addEventListener('test-passive', null, opts)
} catch (e) {}
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer
var isServerRendering = function () {
if (_isServer === undefined) {
/* istanbul ignore if */
if (!inBrowser && typeof global !== 'undefined') {
// detect presence of vue-server-renderer and avoid
// Webpack shimming the process
_isServer =
global['process'] && global['process'].env.VUE_ENV === 'server'
} else {
_isServer = false
}
}
return _isServer
}
/* istanbul ignore next */
function isNative(Ctor) {
return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
}
var hasSymbol =
typeof Symbol !== 'undefined' &&
isNative(Symbol) &&
typeof Reflect !== 'undefined' &&
isNative(Reflect.ownKeys)
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set));
else {
// a non-standard Set polyfill that only works with primitive keys.
/** @class */ ;(function () {
function Set() {
this.set = Object.create(null)
}
Set.prototype.has = function (key) {
return this.set[key] === true
}
Set.prototype.add = function (key) {
this.set[key] = true
}
Set.prototype.clear = function () {
this.set = Object.create(null)
}
return Set
})()
}
var ASSET_TYPES = ['component', 'directive', 'filter']
var LIFECYCLE_HOOKS = [
'beforeCreate',
'created',
'beforeMount',
'mounted',
'beforeUpdate',
'updated',
'beforeDestroy',
'destroyed',
'activated',
'deactivated',
'errorCaptured',
'serverPrefetch'
]
var config = {
/**
* Option merge strategies (used in core/util/options)
*/
// $flow-disable-line
optionMergeStrategies: Object.create(null),
/**
* Whether to suppress warnings.
*/
silent: false,
/**
* Show production mode tip message on boot?
*/
productionTip: 'development' !== 'production',
/**
* Whether to enable devtools
*/
devtools: 'development' !== 'production',
/**
* Whether to record perf
*/
performance: false,
/**
* Error handler for watcher errors
*/
errorHandler: null,
/**
* Warn handler for watcher warns
*/
warnHandler: null,
/**
* Ignore certain custom elements
*/
ignoredElements: [],
/**
* Custom user key aliases for v-on
*/
// $flow-disable-line
keyCodes: Object.create(null),
/**
* Check if a tag is reserved so that it cannot be registered as a
* component. This is platform-dependent and may be overwritten.
*/
isReservedTag: no,
/**
* Check if an attribute is reserved so that it cannot be used as a component
* prop. This is platform-dependent and may be overwritten.
*/
isReservedAttr: no,
/**
* Check if a tag is an unknown element.
* Platform-dependent.
*/
isUnknownElement: no,
/**
* Get the namespace of an element
*/
getTagNamespace: noop,
/**
* Parse the real tag name for the specific platform.
*/
parsePlatformTagName: identity,
/**
* Check if an attribute must be bound using property, e.g. value
* Platform-dependent.
*/
mustUseProp: no,
/**
* Perform updates asynchronously. Intended to be used by Vue Test Utils
* This will significantly reduce performance if set to false.
*/
async: true,
/**
* Exposed for legacy reasons
*/
_lifecycleHooks: LIFECYCLE_HOOKS
}
var warn$2 = noop
var tip = noop
var generateComponentTrace // work around flow check
var formatComponentName
{
var hasConsole_1 = typeof console !== 'undefined'
var classifyRE_1 = /(?:^|[-_])(\w)/g
var classify_1 = function (str) {
return str
.replace(classifyRE_1, function (c) {
return c.toUpperCase()
})
.replace(/[-_]/g, '')
}
warn$2 = function (msg, vm) {
var trace = vm ? generateComponentTrace(vm) : ''
if (hasConsole_1 && !config.silent) {
console.error('[Vue warn]: '.concat(msg).concat(trace))
}
}
tip = function (msg, vm) {
if (hasConsole_1 && !config.silent) {
console.warn(
'[Vue tip]: '.concat(msg) + (vm ? generateComponentTrace(vm) : '')
)
}
}
formatComponentName = function (vm, includeFile) {
if (vm.$root === vm) {
return '<Root>'
}
var options =
typeof vm === 'function' && vm.cid != null
? vm.options
: vm._isVue
? vm.$options || vm.constructor.options
: vm
var name = options.name || options._componentTag
var file = options.__file
if (!name && file) {
var match = file.match(/([^/\\]+)\.vue$/)
name = match && match[1]
}
return (
(name ? '<'.concat(classify_1(name), '>') : '<Anonymous>') +
(file && includeFile !== false ? ' at '.concat(file) : '')
)
}
var repeat_1 = function (str, n) {
var res = ''
while (n) {
if (n % 2 === 1) res += str
if (n > 1) str += str
n >>= 1
}
return res
}
generateComponentTrace = function (vm) {
if (vm._isVue && vm.$parent) {
var tree = []
var currentRecursiveSequence = 0
while (vm) {
if (tree.length > 0) {
var last = tree[tree.length - 1]
if (last.constructor === vm.constructor) {
currentRecursiveSequence++
vm = vm.$parent
continue
} else if (currentRecursiveSequence > 0) {
tree[tree.length - 1] = [last, currentRecursiveSequence]
currentRecursiveSequence = 0
}
}
tree.push(vm)
vm = vm.$parent
}
return (
'\n\nfound in\n\n' +
tree
.map(function (vm, i) {
return ''
.concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2))
.concat(
Array.isArray(vm)
? ''
.concat(formatComponentName(vm[0]), '... (')
.concat(vm[1], ' recursive calls)')
: formatComponentName(vm)
)
})
.join('\n')
)
} else {
return '\n\n(found in '.concat(formatComponentName(vm), ')')
}
}
}
var uid = 0
/**
* A dep is an observable that can have multiple
* directives subscribing to it.
*/
var Dep = /** @class */ (function () {
function Dep() {
this.id = uid++
this.subs = []
}
Dep.prototype.addSub = function (sub) {
this.subs.push(sub)
}
Dep.prototype.removeSub = function (sub) {
remove(this.subs, sub)
}
Dep.prototype.depend = function () {
if (Dep.target) {
Dep.target.addDep(this)
}
}
Dep.prototype.notify = function () {
// stabilize the subscriber list first
var subs = this.subs.slice()
for (var i = 0, l = subs.length; i < l; i++) {
subs[i].update()
}
}
return Dep
})()
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null
var VNode = /** @class */ (function () {
function VNode(
tag,
data,
children,
text,
elm,
context,
componentOptions,
asyncFactory
) {
this.tag = tag
this.data = data
this.children = children
this.text = text
this.elm = elm
this.ns = undefined
this.context = context
this.fnContext = undefined
this.fnOptions = undefined
this.fnScopeId = undefined
this.key = data && data.key
this.componentOptions = componentOptions
this.componentInstance = undefined
this.parent = undefined
this.raw = false
this.isStatic = false
this.isRootInsert = true
this.isComment = false
this.isCloned = false
this.isOnce = false
this.asyncFactory = asyncFactory
this.asyncMeta = undefined
this.isAsyncPlaceholder = false
}
Object.defineProperty(VNode.prototype, 'child', {
// DEPRECATED: alias for componentInstance for backwards compat.
/* istanbul ignore next */
get: function () {
return this.componentInstance
},
enumerable: false,
configurable: true
})
return VNode
})()
/*
* not type checking this file because flow doesn't play well with
* dynamically accessing methods on Array prototype
*/
var arrayProto = Array.prototype
var arrayMethods = Object.create(arrayProto)
var methodsToPatch = [
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]
/**
* Intercept mutating methods and emit events
*/
methodsToPatch.forEach(function (method) {
// cache original method
var original = arrayProto[method]
def(arrayMethods, method, function mutator() {
var args = []
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i]
}
var result = original.apply(this, args)
var ob = this.__ob__
var inserted
switch (method) {
case 'push':
case 'unshift':
inserted = args
break
case 'splice':
inserted = args.slice(2)
break
}
if (inserted) ob.observeArray(inserted)
// notify change
ob.dep.notify()
return result
})
})
var arrayKeys = Object.getOwnPropertyNames(arrayMethods)
/**
* Observer class that is attached to each observed
* object. Once attached, the observer converts the target
* object's property keys into getter/setters that
* collect dependencies and dispatch updates.
*/
var Observer = /** @class */ (function () {
function Observer(value) {
this.value = value
this.dep = new Dep()
this.vmCount = 0
def(value, '__ob__', this)
if (Array.isArray(value)) {
if (hasProto) {
protoAugment(value, arrayMethods)
} else {
copyAugment(value, arrayMethods, arrayKeys)
}
this.observeArray(value)
} else {
this.walk(value)
}
}
/**
* Walk through all properties and convert them into
* getter/setters. This method should only be called when
* value type is Object.
*/
Observer.prototype.walk = function (obj) {
var keys = Object.keys(obj)
for (var i = 0; i < keys.length; i++) {
defineReactive(obj, keys[i])
}
}
/**
* Observe a list of Array items.
*/
Observer.prototype.observeArray = function (items) {
for (var i = 0, l = items.length; i < l; i++) {
observe(items[i])
}
}
return Observer
})()
// helpers
/**
* Augment a target Object or Array by intercepting
* the prototype chain using __proto__
*/
function protoAugment(target, src) {
/* eslint-disable no-proto */
target.__proto__ = src
/* eslint-enable no-proto */
}
/**
* Augment a target Object or Array by defining
* hidden properties.
*/
/* istanbul ignore next */
function copyAugment(target, src, keys) {
for (var i = 0, l = keys.length; i < l; i++) {
var key = keys[i]
def(target, key, src[key])
}
}
/**
* Attempt to create an observer instance for a value,
* returns the new observer if successfully observed,
* or the existing observer if the value already has one.
*/
function observe(value, asRootData) {
if (!isObject(value) || value instanceof VNode) {
return
}
var ob
if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
ob = value.__ob__
} else if (
!isServerRendering() &&
(Array.isArray(value) || isPlainObject(value)) &&
Object.isExtensible(value) &&
!value._isVue
) {
ob = new Observer(value)
}
if (asRootData && ob) {
ob.vmCount++
}
return ob
}
/**
* Define a reactive property on an Object.
*/
function defineReactive(obj, key, val, customSetter, shallow) {
var dep = new Dep()
var property = Object.getOwnPropertyDescriptor(obj, key)
if (property && property.configurable === false) {
return
}
// cater for pre-defined getter/setters
var getter = property && property.get
var setter = property && property.set
if ((!getter || setter) && arguments.length === 2) {
val = obj[key]
}
var childOb = !shallow && observe(val)
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter() {
var value = getter ? getter.call(obj) : val
if (Dep.target) {
dep.depend()
if (childOb) {
childOb.dep.depend()
if (Array.isArray(value)) {
dependArray(value)
}
}
}
return value
},
set: function reactiveSetter(newVal) {
var value = getter ? getter.call(obj) : val
/* eslint-disable no-self-compare */
if (newVal === value || (newVal !== newVal && value !== value)) {
return
}
/* eslint-enable no-self-compare */
if (customSetter) {
customSetter()
}
// #7981: for accessor properties without setter
if (getter && !setter) return
if (setter) {
setter.call(obj, newVal)
} else {
val = newVal
}
childOb = !shallow && observe(newVal)
dep.notify()
}
})
}
/**
* Set a property on an object. Adds the new property and
* triggers change notification if the property doesn't
* already exist.
*/
function set(target, key, val) {
if (isUndef(target) || isPrimitive(target)) {
warn$2(
'Cannot set reactive property on undefined, null, or primitive value: '.concat(
target
)
)
}
if (Array.isArray(target) && isValidArrayIndex(key)) {
target.length = Math.max(target.length, key)
target.splice(key, 1, val)
return val
}
if (key in target && !(key in Object.prototype)) {
target[key] = val
return val
}
var ob = target.__ob__
if (target._isVue || (ob && ob.vmCount)) {
warn$2(
'Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.'
)
return val
}
if (!ob) {
target[key] = val
return val
}
defineReactive(ob.value, key, val)
ob.dep.notify()
return val
}
/**
* Collect dependencies on array elements when the array is touched, since
* we cannot intercept array element access like property getters.
*/
function dependArray(value) {
for (var e = void 0, i = 0, l = value.length; i < l; i++) {
e = value[i]
e && e.__ob__ && e.__ob__.dep.depend()
if (Array.isArray(e)) {
dependArray(e)
}
}
}
/**
* Option overwriting strategies are functions that handle
* how to merge a parent option value and a child option
* value into the final value.
*/
var strats = config.optionMergeStrategies
/**
* Options with restrictions
*/
{
strats.el = strats.propsData = function (parent, child, vm, key) {
if (!vm) {
warn$2(
'option "'.concat(key, '" can only be used during instance ') +
'creation with the `new` keyword.'
)
}
return defaultStrat(parent, child)
}
}
/**
* Helper that recursively merges two data objects together.
*/
function mergeData(to, from) {
if (!from) return to
var key, toVal, fromVal
var keys = hasSymbol ? Reflect.ownKeys(from) : Object.keys(from)
for (var i = 0; i < keys.length; i++) {
key = keys[i]
// in case the object is already observed...
if (key === '__ob__') continue
toVal = to[key]
fromVal = from[key]
if (!hasOwn(to, key)) {
set(to, key, fromVal)
} else if (
toVal !== fromVal &&
isPlainObject(toVal) &&
isPlainObject(fromVal)
) {
mergeData(toVal, fromVal)
}
}
return to
}
/**
* Data
*/
function mergeDataOrFn(parentVal, childVal, vm) {
if (!vm) {
// in a Vue.extend merge, both should be functions
if (!childVal) {
return parentVal
}
if (!parentVal) {
return childVal
}
// when parentVal & childVal are both present,
// we need to return a function that returns the
// merged result of both functions... no need to
// check if parentVal is a function here because
// it has to be a function to pass previous merges.
return function mergedDataFn() {
return mergeData(
typeof childVal === 'function' ? childVal.call(this, this) : childVal,
typeof parentVal === 'function'
? parentVal.call(this, this)
: parentVal
)
}
} else {
return function mergedInstanceDataFn() {
// instance merge
var instanceData =
typeof childVal === 'function' ? childVal.call(vm, vm) : childVal
var defaultData =
typeof parentVal === 'function' ? parentVal.call(vm, vm) : parentVal
if (instanceData) {
return mergeData(instanceData, defaultData)
} else {
return defaultData
}
}
}
}
strats.data = function (parentVal, childVal, vm) {
if (!vm) {
if (childVal && typeof childVal !== 'function') {
warn$2(
'The "data" option should be a function ' +
'that returns a per-instance value in component ' +
'definitions.',
vm
)
return parentVal
}
return mergeDataOrFn(parentVal, childVal)
}
return mergeDataOrFn(parentVal, childVal, vm)
}
/**
* Hooks and props are merged as arrays.
*/
function mergeHook(parentVal, childVal) {
var res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal
: [childVal]
: parentVal
return res ? dedupeHooks(res) : res
}
function dedupeHooks(hooks) {
var res = []
for (var i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i])
}
}
return res
}
LIFECYCLE_HOOKS.forEach(function (hook) {
strats[hook] = mergeHook
})
/**
* Assets
*
* When a vm is present (instance creation), we need to do
* a three-way merge between constructor options, instance
* options and parent options.
*/
function mergeAssets(parentVal, childVal, vm, key) {
var res = Object.create(parentVal || null)
if (childVal) {
assertObjectType(key, childVal, vm)
return extend(res, childVal)
} else {
return res
}
}
ASSET_TYPES.forEach(function (type) {
strats[type + 's'] = mergeAssets
})
/**
* Watchers.
*
* Watchers hashes should not overwrite one
* another, so we merge them as arrays.
*/
strats.watch = function (parentVal, childVal, vm, key) {
// work around Firefox's Object.prototype.watch...
//@ts-expect-error work around
if (parentVal === nativeWatch) parentVal = undefined
//@ts-expect-error work around
if (childVal === nativeWatch) childVal = undefined
/* istanbul ignore if */
if (!childVal) return Object.create(parentVal || null)
{
assertObjectType(key, childVal, vm)
}
if (!parentVal) return childVal
var ret = {}
extend(ret, parentVal)
for (var key_1 in childVal) {
var parent_1 = ret[key_1]
var child = childVal[key_1]
if (parent_1 && !Array.isArray(parent_1)) {
parent_1 = [parent_1]
}
ret[key_1] = parent_1
? parent_1.concat(child)
: Array.isArray(child)
? child
: [child]
}
return ret
}
/**
* Other object hashes.
*/
strats.props =
strats.methods =
strats.inject =
strats.computed =
function (parentVal, childVal, vm, key) {
if (childVal && 'development' !== 'production') {
assertObjectType(key, childVal, vm)
}
if (!parentVal) return childVal
var ret = Object.create(null)
extend(ret, parentVal)
if (childVal) extend(ret, childVal)
return ret
}
strats.provide = mergeDataOrFn
/**
* Default strategy.
*/
var defaultStrat = function (parentVal, childVal) {
return childVal === undefined ? parentVal : childVal
}
function assertObjectType(name, value, vm) {
if (!isPlainObject(value)) {
warn$2(
'Invalid value for option "'.concat(name, '": expected an Object, ') +
'but got '.concat(toRawType(value), '.'),
vm
)
}
}
/* globals MutationObserver */
var callbacks = []
function flushCallbacks() {
var copies = callbacks.slice(0)
callbacks.length = 0
for (var i = 0; i < copies.length; i++) {
copies[i]()
}
}
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) {
Promise.resolve()
} else if (
!isIE &&
typeof MutationObserver !== 'undefined' &&
(isNative(MutationObserver) ||
// PhantomJS and iOS 7.x
MutationObserver.toString() === '[object MutationObserverConstructor]')
) {
// Use MutationObserver where native Promise is not available,
// e.g. PhantomJS, iOS7, Android 4.4
// (#6466 MutationObserver is unreliable in IE11)
var counter_1 = 1
var observer = new MutationObserver(flushCallbacks)
var textNode_1 = document.createTextNode(String(counter_1))
observer.observe(textNode_1, {
characterData: true
})
} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate));
else;
// these are reserved for web because they are directly compiled away
// during template compilation
makeMap('style,class')
// attributes that should be using props for binding
var acceptValue = makeMap('input,textarea,option,select,progress')
var mustUseProp = function (tag, type, attr) {
return (
(attr === 'value' && acceptValue(tag) && type !== 'button') ||
(attr === 'selected' && tag === 'option') ||
(attr === 'checked' && tag === 'input') ||
(attr === 'muted' && tag === 'video')
)
}
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck')
makeMap('events,caret,typing,plaintext-only')
var isBooleanAttr = makeMap(
'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
'required,reversed,scoped,seamless,selected,sortable,' +
'truespeed,typemustmatch,visible'
)
var isHTMLTag = makeMap(
'html,body,base,head,link,meta,style,title,' +
'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
'embed,object,param,source,canvas,script,noscript,del,ins,' +
'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea,' +
'details,dialog,menu,menuitem,summary,' +
'content,element,shadow,template,blockquote,iframe,tfoot'
)
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap(
'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',
true
)
var isPreTag = function (tag) {
return tag === 'pre'
}
var isReservedTag = function (tag) {
return isHTMLTag(tag) || isSVG(tag)
}
function getTagNamespace(tag) {
if (isSVG(tag)) {
return 'svg'
}
// basic support for MathML
// note it doesn't support other MathML elements being component roots
if (tag === 'math') {
return 'math'
}
}
makeMap('text,number,password,search,email,tel,url')
var validDivisionCharRE = /[\w).+\-_$\]]/
function parseFilters(exp) {
var inSingle = false
var inDouble = false
var inTemplateString = false
var inRegex = false
var curly = 0
var square = 0
var paren = 0
var lastFilterIndex = 0
var c, prev, i, expression, filters
for (i = 0; i < exp.length; i++) {
prev = c
c = exp.charCodeAt(i)
if (inSingle) {
if (c === 0x27 && prev !== 0x5c) inSingle = false
} else if (inDouble) {
if (c === 0x22 && prev !== 0x5c) inDouble = false
} else if (inTemplateString) {
if (c === 0x60 && prev !== 0x5c) inTemplateString = false
} else if (inRegex) {
if (c === 0x2f && prev !== 0x5c) inRegex = false
} else if (
c === 0x7c && // pipe
exp.charCodeAt(i + 1) !== 0x7c &&
exp.charCodeAt(i - 1) !== 0x7c &&
!curly &&
!square &&
!paren
) {
if (expression === undefined) {
// first filter, end of expression
lastFilterIndex = i + 1
expression = exp.slice(0, i).trim()
} else {
pushFilter()
}
} else {
switch (c) {
case 0x22:
inDouble = true
break // "
case 0x27:
inSingle = true
break // '
case 0x60:
inTemplateString = true
break // `
case 0x28:
paren++
break // (
case 0x29:
paren--
break // )
case 0x5b:
square++
break // [
case 0x5d:
square--
break // ]
case 0x7b:
curly++
break // {
case 0x7d:
curly--
break // }
}
if (c === 0x2f) {
// /
var j = i - 1
var p =
// find first non-whitespace prev char
void 0
// find first non-whitespace prev char
for (; j >= 0; j--) {
p = exp.charAt(j)
if (p !== ' ') break
}
if (!p || !validDivisionCharRE.test(p)) {
inRegex = true
}
}
}
}
if (expression === undefined) {
expression = exp.slice(0, i).trim()
} else if (lastFilterIndex !== 0) {
pushFilter()
}
function pushFilter() {
;(filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim())
lastFilterIndex = i + 1
}
if (filters) {
for (i = 0; i < filters.length; i++) {
expression = wrapFilter(expression, filters[i])
}
}
return expression
}
function wrapFilter(exp, filter) {
var i = filter.indexOf('(')
if (i < 0) {
// _f: resolveFilter
return '_f("'.concat(filter, '")(').concat(exp, ')')
} else {
var name_1 = filter.slice(0, i)
var args = filter.slice(i + 1)
return '_f("'
.concat(name_1, '")(')
.concat(exp)
.concat(args !== ')' ? ',' + args : args)
}
}
var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g
var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g
var buildRegex = cached(function (delimiters) {
var open = delimiters[0].replace(regexEscapeRE, '\\$&')
var close = delimiters[1].replace(regexEscapeRE, '\\$&')
return new RegExp(open + '((?:.|\\n)+?)' + close, 'g')
})
function parseText(text, delimiters) {
//@ts-expect-error
var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE
if (!tagRE.test(text)) {
return
}
var tokens = []
var rawTokens = []
var lastIndex = (tagRE.lastIndex = 0)
var match, index, tokenValue
while ((match = tagRE.exec(text))) {
index = match.index
// push text token
if (index > lastIndex) {
rawTokens.push((tokenValue = text.slice(lastIndex, index)))
tokens.push(JSON.stringify(tokenValue))
}
// tag token
var exp = parseFilters(match[1].trim())
tokens.push('_s('.concat(exp, ')'))
rawTokens.push({ '@binding': exp })
lastIndex = index + match[0].length
}
if (lastIndex < text.length) {
rawTokens.push((tokenValue = text.slice(lastIndex)))
tokens.push(JSON.stringify(tokenValue))
}
return {
expression: tokens.join('+'),
tokens: rawTokens
}
}
/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
console.error('[Vue compiler]: '.concat(msg))
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
return modules
? modules
.map(function (m) {
return m[key]
})
.filter(function (_) {
return _
})
: []
}
function addProp(el, name, value, range, dynamic) {
;(el.props || (el.props = [])).push(
rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)
)
el.plain = false
}
function addAttr(el, name, value, range, dynamic) {
var attrs = dynamic
? el.dynamicAttrs || (el.dynamicAttrs = [])
: el.attrs || (el.attrs = [])
attrs.push(
rangeSetItem({ name: name, value: value, dynamic: dynamic }, range)
)
el.plain = false
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
el.attrsMap[name] = value
el.attrsList.push(rangeSetItem({ name: name, value: value }, range))
}
function addDirective(
el,
name,
rawName,
value,
arg,
isDynamicArg,
modifiers,
range
) {
;(el.directives || (el.directives = [])).push(
rangeSetItem(
{
name: name,
rawName: rawName,
value: value,
arg: arg,
isDynamicArg: isDynamicArg,
modifiers: modifiers
},
range
)
)
el.plain = false
}
function prependModifierMarker(symbol, name, dynamic) {
return dynamic
? '_p('.concat(name, ',"').concat(symbol, '")')
: symbol + name // mark the event as captured
}
function addHandler(
el,
name,
value,
modifiers,
important,
warn,
range,
dynamic
) {
modifiers = modifiers || emptyObject
// warn prevent and passive modifier
/* istanbul ignore if */
if (warn && modifiers.prevent && modifiers.passive) {
warn(
"passive and prevent can't be used together. " +
"Passive handler can't prevent default event.",
range
)
}
// normalize click.right and click.middle since they don't actually fire
// this is technically browser-specific, but at least for now browsers are
// the only target envs that have right/middle clicks.
if (modifiers.right) {
if (dynamic) {
name = '('.concat(name, ")==='click'?'contextmenu':(").concat(name, ')')
} else if (name === 'click') {
name = 'contextmenu'
delete modifiers.right
}
} else if (modifiers.middle) {
if (dynamic) {
name = '('.concat(name, ")==='click'?'mouseup':(").concat(name, ')')
} else if (name === 'click') {
name = 'mouseup'
}
}
// check capture modifier
if (modifiers.capture) {
delete modifiers.capture
name = prependModifierMarker('!', name, dynamic)
}
if (modifiers.once) {
delete modifiers.once
name = prependModifierMarker('~', name, dynamic)
}
/* istanbul ignore if */
if (modifiers.passive) {
delete modifiers.passive
name = prependModifierMarker('&', name, dynamic)
}
var events
if (modifiers.native) {
delete modifiers.native
events = el.nativeEvents || (el.nativeEvents = {})
} else {
events = el.events || (el.events = {})
}
var newHandler = rangeSetItem(
{ value: value.trim(), dynamic: dynamic },
range
)
if (modifiers !== emptyObject) {
newHandler.modifiers = modifiers
}
var handlers = events[name]
/* istanbul ignore if */
if (Array.isArray(handlers)) {
important ? handlers.unshift(newHandler) : handlers.push(newHandler)
} else if (handlers) {
events[name] = important ? [newHandler, handlers] : [handlers, newHandler]
} else {
events[name] = newHandler
}
el.plain = false
}
function getRawBindingAttr(el, name) {
return (
el.rawAttrsMap[':' + name] ||
el.rawAttrsMap['v-bind:' + name] ||
el.rawAttrsMap[name]
)
}
function getBindingAttr(el, name, getStatic) {
var dynamicValue =
getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name)
if (dynamicValue != null) {
return parseFilters(dynamicValue)
} else if (getStatic !== false) {
var staticValue = getAndRemoveAttr(el, name)
if (staticValue != null) {
return JSON.stringify(staticValue)
}
}
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
var val
if ((val = el.attrsMap[name]) != null) {
var list = el.attrsList
for (var i = 0, l = list.length; i < l; i++) {
if (list[i].name === name) {
list.splice(i, 1)
break
}
}
}
if (removeFromMap) {
delete el.attrsMap[name]
}
return val
}
function getAndRemoveAttrByRegex(el, name) {
var list = el.attrsList
for (var i = 0, l = list.length; i < l; i++) {
var attr = list[i]
if (name.test(attr.name)) {
list.splice(i, 1)
return attr
}
}
}
function rangeSetItem(item, range) {
if (range) {
if (range.start != null) {
item.start = range.start
}
if (range.end != null) {
item.end = range.end
}
}
return item
}
function transformNode$1(el, options) {
var warn = options.warn || baseWarn
var staticClass = getAndRemoveAttr(el, 'class')
if (staticClass) {
var res = parseText(staticClass, options.delimiters)
if (res) {
warn(
'class="'.concat(staticClass, '": ') +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div class="{{ val }}">, use <div :class="val">.',
el.rawAttrsMap['class']
)
}
}
if (staticClass) {
el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim())
}
var classBinding = getBindingAttr(el, 'class', false /* getStatic */)
if (classBinding) {
el.classBinding = classBinding
}
}
function genData$2(el) {
var data = ''
if (el.staticClass) {
data += 'staticClass:'.concat(el.staticClass, ',')
}
if (el.classBinding) {
data += 'class:'.concat(el.classBinding, ',')
}
return data
}
var klass = {
staticKeys: ['staticClass'],
transformNode: transformNode$1,
genData: genData$2
}
var parseStyleText = cached(function (cssText) {
var res = {}
var listDelimiter = /;(?![^(]*\))/g
var propertyDelimiter = /:(.+)/
cssText.split(listDelimiter).forEach(function (item) {
if (item) {
var tmp = item.split(propertyDelimiter)
tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim())
}
})
return res
})
function transformNode(el, options) {
var warn = options.warn || baseWarn
var staticStyle = getAndRemoveAttr(el, 'style')
if (staticStyle) {
/* istanbul ignore if */
{
var res = parseText(staticStyle, options.delimiters)
if (res) {
warn(
'style="'.concat(staticStyle, '": ') +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div style="{{ val }}">, use <div :style="val">.',
el.rawAttrsMap['style']
)
}
}
el.staticStyle = JSON.stringify(parseStyleText(staticStyle))
}
var styleBinding = getBindingAttr(el, 'style', false /* getStatic */)
if (styleBinding) {
el.styleBinding = styleBinding
}
}
function genData$1(el) {
var data = ''
if (el.staticStyle) {
data += 'staticStyle:'.concat(el.staticStyle, ',')
}
if (el.styleBinding) {
data += 'style:('.concat(el.styleBinding, '),')
}
return data
}
var style = {
staticKeys: ['staticStyle'],
transformNode: transformNode,
genData: genData$1
}
var he$1 = { exports: {} }
/*! https://mths.be/he v1.2.0 by @mathias | MIT license */
;(function (module, exports) {
;(function (root) {
// Detect free variables `exports`.
var freeExports = exports
// Detect free variable `module`.
var freeModule = module && module.exports == freeExports && module
// Detect free variable `global`, from Node.js or Browserified code,
// and use it as `root`.
var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal
if (
freeGlobal.global === freeGlobal ||
freeGlobal.window === freeGlobal
) {
root = freeGlobal
}
/*--------------------------------------------------------------------------*/
// All astral symbols.
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
// All ASCII symbols (not just printable ASCII) except those listed in the
// first column of the overrides table.
// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
var regexAsciiWhitelist = /[\x01-\x7F]/g
// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
// code points listed in the first column of the overrides table on
// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
var regexBmpWhitelist =
/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g
var regexEncodeNonAscii =
/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g
var encodeMap = {
'\xAD': 'shy',
'\u200C': 'zwnj',
'\u200D': 'zwj',
'\u200E': 'lrm',
'\u2063': 'ic',
'\u2062': 'it',
'\u2061': 'af',
'\u200F': 'rlm',
'\u200B': 'ZeroWidthSpace',
'\u2060': 'NoBreak',
'\u0311': 'DownBreve',
'\u20DB': 'tdot',
'\u20DC': 'DotDot',
'\t': 'Tab',
'\n': 'NewLine',
'\u2008': 'puncsp',
'\u205F': 'MediumSpace',
'\u2009': 'thinsp',
'\u200A': 'hairsp',
'\u2004': 'emsp13',
'\u2002': 'ensp',
'\u2005': 'emsp14',
'\u2003': 'emsp',
'\u2007': 'numsp',
'\xA0': 'nbsp',
'\u205F\u200A': 'ThickSpace',
'\u203E': 'oline',
_: 'lowbar',
'\u2010': 'dash',
'\u2013': 'ndash',
'\u2014': 'mdash',
'\u2015': 'horbar',
',': 'comma',
';': 'semi',
'\u204F': 'bsemi',
':': 'colon',
'\u2A74': 'Colone',
'!': 'excl',
'\xA1': 'iexcl',
'?': 'quest',
'\xBF': 'iquest',
'.': 'period',
'\u2025': 'nldr',
'\u2026': 'mldr',
'\xB7': 'middot',
"'": 'apos',
'\u2018': 'lsquo',
'\u2019': 'rsquo',
'\u201A': 'sbquo',
'\u2039': 'lsaquo',
'\u203A': 'rsaquo',
'"': 'quot',
'\u201C': 'ldquo',
'\u201D': 'rdquo',
'\u201E': 'bdquo',
'\xAB': 'laquo',
'\xBB': 'raquo',
'(': 'lpar',
')': 'rpar',
'[': 'lsqb',
']': 'rsqb',
'{': 'lcub',
'}': 'rcub',
'\u2308': 'lceil',
'\u2309': 'rceil',
'\u230A': 'lfloor',
'\u230B': 'rfloor',
'\u2985': 'lopar',
'\u2986': 'ropar',
'\u298B': 'lbrke',
'\u298C': 'rbrke',
'\u298D': 'lbrkslu',
'\u298E': 'rbrksld',
'\u298F': 'lbrksld',
'\u2990': 'rbrkslu',
'\u2991': 'langd',
'\u2992': 'rangd',
'\u2993': 'lparlt',
'\u2994': 'rpargt',
'\u2995': 'gtlPar',
'\u2996': 'ltrPar',
'\u27E6': 'lobrk',
'\u27E7': 'robrk',
'\u27E8': 'lang',
'\u27E9': 'rang',
'\u27EA': 'Lang',
'\u27EB': 'Rang',
'\u27EC': 'loang',
'\u27ED': 'roang',
'\u2772': 'lbbrk',
'\u2773': 'rbbrk',
'\u2016': 'Vert',
'\xA7': 'sect',
'\xB6': 'para',
'@': 'commat',
'*': 'ast',
'/': 'sol',
undefined: null,
'&': 'amp',
'#': 'num',
'%': 'percnt',
'\u2030': 'permil',
'\u2031': 'pertenk',
'\u2020': 'dagger',
'\u2021': 'Dagger',
'\u2022': 'bull',
'\u2043': 'hybull',
'\u2032': 'prime',
'\u2033': 'Prime',
'\u2034': 'tprime',
'\u2057': 'qprime',
'\u2035': 'bprime',
'\u2041': 'caret',
'`': 'grave',
'\xB4': 'acute',
'\u02DC': 'tilde',
'^': 'Hat',
'\xAF': 'macr',
'\u02D8': 'breve',
'\u02D9': 'dot',
'\xA8': 'die',
'\u02DA': 'ring',
'\u02DD': 'dblac',
'\xB8': 'cedil',
'\u02DB': 'ogon',
'\u02C6': 'circ',
'\u02C7': 'caron',
'\xB0': 'deg',
'\xA9': 'copy',
'\xAE': 'reg',
'\u2117': 'copysr',
'\u2118': 'wp',
'\u211E': 'rx',
'\u2127': 'mho',
'\u2129': 'iiota',
'\u2190': 'larr',
'\u219A': 'nlarr',
'\u2192': 'rarr',
'\u219B': 'nrarr',
'\u2191': 'uarr',
'\u2193': 'darr',
'\u2194': 'harr',
'\u21AE': 'nharr',
'\u2195': 'varr',
'\u2196': 'nwarr',
'\u2197': 'nearr',
'\u2198': 'searr',
'\u2199': 'swarr',
'\u219D': 'rarrw',
'\u219D\u0338': 'nrarrw',
'\u219E': 'Larr',
'\u219F': 'Uarr',
'\u21A0': 'Rarr',
'\u21A1': 'Darr',
'\u21A2': 'larrtl',
'\u21A3': 'rarrtl',
'\u21A4': 'mapstoleft',
'\u21A5': 'mapstoup',
'\u21A6': 'map',
'\u21A7': 'mapstodown',
'\u21A9': 'larrhk',
'\u21AA': 'rarrhk',
'\u21AB': 'larrlp',
'\u21AC': 'rarrlp',
'\u21AD': 'harrw',
'\u21B0': 'lsh',
'\u21B1': 'rsh',
'\u21B2': 'ldsh',
'\u21B3': 'rdsh',
'\u21B5': 'crarr',
'\u21B6': 'cularr',
'\u21B7': 'curarr',
'\u21BA': 'olarr',
'\u21BB': 'orarr',
'\u21BC': 'lharu',
'\u21BD': 'lhard',
'\u21BE': 'uharr',
'\u21BF': 'uharl',
'\u21C0': 'rharu',
'\u21C1': 'rhard',
'\u21C2': 'dharr',
'\u21C3': 'dharl',
'\u21C4': 'rlarr',
'\u21C5': 'udarr',
'\u21C6': 'lrarr',
'\u21C7': 'llarr',
'\u21C8': 'uuarr',
'\u21C9': 'rrarr',
'\u21CA': 'ddarr',
'\u21CB': 'lrhar',
'\u21CC': 'rlhar',
'\u21D0': 'lArr',
'\u21CD': 'nlArr',
'\u21D1': 'uArr',
'\u21D2': 'rArr',
'\u21CF': 'nrArr',
'\u21D3': 'dArr',
'\u21D4': 'iff',
'\u21CE': 'nhArr',
'\u21D5': 'vArr',
'\u21D6': 'nwArr',
'\u21D7': 'neArr',
'\u21D8': 'seArr',
'\u21D9': 'swArr',
'\u21DA': 'lAarr',
'\u21DB': 'rAarr',
'\u21DD': 'zigrarr',
'\u21E4': 'larrb',
'\u21E5': 'rarrb',
'\u21F5': 'duarr',
'\u21FD': 'loarr',
'\u21FE': 'roarr',
'\u21FF': 'hoarr',
'\u2200': 'forall',
'\u2201': 'comp',
'\u2202': 'part',
'\u2202\u0338': 'npart',
'\u2203': 'exist',
'\u2204': 'nexist',
'\u2205': 'empty',
'\u2207': 'Del',
'\u2208': 'in',
'\u2209': 'notin',
'\u220B': 'ni',
'\u220C': 'notni',
'\u03F6': 'bepsi',
'\u220F': 'prod',
'\u2210': 'coprod',
'\u2211': 'sum',
'+': 'plus',
'\xB1': 'pm',
'\xF7': 'div',
'\xD7': 'times',
'<': 'lt',
'\u226E': 'nlt',
'<\u20D2': 'nvlt',
'=': 'equals',
'\u2260': 'ne',
'=\u20E5': 'bne',
'\u2A75': 'Equal',
'>': 'gt',
'\u226F': 'ngt',
'>\u20D2': 'nvgt',
'\xAC': 'not',
'|': 'vert',
'\xA6': 'brvbar',
'\u2212': 'minus',
'\u2213': 'mp',
'\u2214': 'plusdo',
'\u2044': 'frasl',
'\u2216': 'setmn',
'\u2217': 'lowast',
'\u2218': 'compfn',
'\u221A': 'Sqrt',
'\u221D': 'prop',
'\u221E': 'infin',
'\u221F': 'angrt',
'\u2220': 'ang',
'\u2220\u20D2': 'nang',
'\u2221': 'angmsd',
'\u2222': 'angsph',
'\u2223': 'mid',
'\u2224': 'nmid',
'\u2225': 'par',
'\u2226': 'npar',
'\u2227': 'and',
'\u2228': 'or',
'\u2229': 'cap',
'\u2229\uFE00': 'caps',
'\u222A': 'cup',
'\u222A\uFE00': 'cups',
'\u222B': 'int',
'\u222C': 'Int',
'\u222D': 'tint',
'\u2A0C': 'qint',
'\u222E': 'oint',
'\u222F': 'Conint',
'\u2230': 'Cconint',
'\u2231': 'cwint',
'\u2232': 'cwconint',
'\u2233': 'awconint',
'\u2234': 'there4',
'\u2235': 'becaus',
'\u2236': 'ratio',
'\u2237': 'Colon',
'\u2238': 'minusd',
'\u223A': 'mDDot',
'\u223B': 'homtht',
'\u223C': 'sim',
'\u2241': 'nsim',
'\u223C\u20D2': 'nvsim',
'\u223D': 'bsim',
'\u223D\u0331': 'race',
'\u223E': 'ac',
'\u223E\u0333': 'acE',
'\u223F': 'acd',
'\u2240': 'wr',
'\u2242': 'esim',
'\u2242\u0338': 'nesim',
'\u2243': 'sime',
'\u2244': 'nsime',
'\u2245': 'cong',
'\u2247': 'ncong',
'\u2246': 'simne',
'\u2248': 'ap',
'\u2249': 'nap',
'\u224A': 'ape',
'\u224B': 'apid',
'\u224B\u0338': 'napid',
'\u224C': 'bcong',
'\u224D': 'CupCap',
'\u226D': 'NotCupCap',
'\u224D\u20D2': 'nvap',
'\u224E': 'bump',
'\u224E\u0338': 'nbump',
'\u224F': 'bumpe',
'\u224F\u0338': 'nbumpe',
'\u2250': 'doteq',
'\u2250\u0338': 'nedot',
'\u2251': 'eDot',
'\u2252': 'efDot',
'\u2253': 'erDot',
'\u2254': 'colone',
'\u2255': 'ecolon',
'\u2256': 'ecir',
'\u2257': 'cire',
'\u2259': 'wedgeq',
'\u225A': 'veeeq',
'\u225C': 'trie',
'\u225F': 'equest',
'\u2261': 'equiv',
'\u2262': 'nequiv',
'\u2261\u20E5': 'bnequiv',
'\u2264': 'le',
'\u2270': 'nle',
'\u2264\u20D2': 'nvle',
'\u2265': 'ge',
'\u2271': 'nge',
'\u2265\u20D2': 'nvge',
'\u2266': 'lE',
'\u2266\u0338': 'nlE',
'\u2267': 'gE',
'\u2267\u0338': 'ngE',
'\u2268\uFE00': 'lvnE',
'\u2268': 'lnE',
'\u2269': 'gnE',
'\u2269\uFE00': 'gvnE',
'\u226A': 'll',
'\u226A\u0338': 'nLtv',
'\u226A\u20D2': 'nLt',
'\u226B': 'gg',
'\u226B\u0338': 'nGtv',
'\u226B\u20D2': 'nGt',
'\u226C': 'twixt',
'\u2272': 'lsim',
'\u2274': 'nlsim',
'\u2273': 'gsim',
'\u2275': 'ngsim',
'\u2276': 'lg',
'\u2278': 'ntlg',
'\u2277': 'gl',
'\u2279': 'ntgl',
'\u227A': 'pr',
'\u2280': 'npr',
'\u227B': 'sc',
'\u2281': 'nsc',
'\u227C': 'prcue',
'\u22E0': 'nprcue',
'\u227D': 'sccue',
'\u22E1': 'nsccue',
'\u227E': 'prsim',
'\u227F': 'scsim',
'\u227F\u0338': 'NotSucceedsTilde',
'\u2282': 'sub',
'\u2284': 'nsub',
'\u2282\u20D2': 'vnsub',
'\u2283': 'sup',
'\u2285': 'nsup',
'\u2283\u20D2': 'vnsup',
'\u2286': 'sube',
'\u2288': 'nsube',
'\u2287': 'supe',
'\u2289': 'nsupe',
'\u228A\uFE00': 'vsubne',
'\u228A': 'subne',
'\u228B\uFE00': 'vsupne',
'\u228B': 'supne',
'\u228D': 'cupdot',
'\u228E': 'uplus',
'\u228F': 'sqsub',
'\u228F\u0338': 'NotSquareSubset',
'\u2290': 'sqsup',
'\u2290\u0338': 'NotSquareSuperset',
'\u2291': 'sqsube',
'\u22E2': 'nsqsube',
'\u2292': 'sqsupe',
'\u22E3': 'nsqsupe',
'\u2293': 'sqcap',
'\u2293\uFE00': 'sqcaps',
'\u2294': 'sqcup',
'\u2294\uFE00': 'sqcups',
'\u2295': 'oplus',
'\u2296': 'ominus',
'\u2297': 'otimes',
'\u2298': 'osol',
'\u2299': 'odot',
'\u229A': 'ocir',
'\u229B': 'oast',
'\u229D': 'odash',
'\u229E': 'plusb',
'\u229F': 'minusb',
'\u22A0': 'timesb',
'\u22A1': 'sdotb',
'\u22A2': 'vdash',
'\u22AC': 'nvdash',
'\u22A3': 'dashv',
'\u22A4': 'top',
'\u22A5': 'bot',
'\u22A7': 'models',
'\u22A8': 'vDash',
'\u22AD': 'nvDash',
'\u22A9': 'Vdash',
'\u22AE': 'nVdash',
'\u22AA': 'Vvdash',
'\u22AB': 'VDash',
'\u22AF': 'nVDash',
'\u22B0': 'prurel',
'\u22B2': 'vltri',
'\u22EA': 'nltri',
'\u22B3': 'vrtri',
'\u22EB': 'nrtri',
'\u22B4': 'ltrie',
'\u22EC': 'nltrie',
'\u22B4\u20D2': 'nvltrie',
'\u22B5': 'rtrie',
'\u22ED': 'nrtrie',
'\u22B5\u20D2': 'nvrtrie',
'\u22B6': 'origof',
'\u22B7': 'imof',
'\u22B8': 'mumap',
'\u22B9': 'hercon',
'\u22BA': 'intcal',
'\u22BB': 'veebar',
'\u22BD': 'barvee',
'\u22BE': 'angrtvb',
'\u22BF': 'lrtri',
'\u22C0': 'Wedge',
'\u22C1': 'Vee',
'\u22C2': 'xcap',
'\u22C3': 'xcup',
'\u22C4': 'diam',
'\u22C5': 'sdot',
'\u22C6': 'Star',
'\u22C7': 'divonx',
'\u22C8': 'bowtie',
'\u22C9': 'ltimes',
'\u22CA': 'rtimes',
'\u22CB': 'lthree',
'\u22CC': 'rthree',
'\u22CD': 'bsime',
'\u22CE': 'cuvee',
'\u22CF': 'cuwed',
'\u22D0': 'Sub',
'\u22D1': 'Sup',
'\u22D2': 'Cap',
'\u22D3': 'Cup',
'\u22D4': 'fork',
'\u22D5': 'epar',
'\u22D6': 'ltdot',
'\u22D7': 'gtdot',
'\u22D8': 'Ll',
'\u22D8\u0338': 'nLl',
'\u22D9': 'Gg',
'\u22D9\u0338': 'nGg',
'\u22DA\uFE00': 'lesg',
'\u22DA': 'leg',
'\u22DB': 'gel',
'\u22DB\uFE00': 'gesl',
'\u22DE': 'cuepr',
'\u22DF': 'cuesc',
'\u22E6': 'lnsim',
'\u22E7': 'gnsim',
'\u22E8': 'prnsim',
'\u22E9': 'scnsim',
'\u22EE': 'vellip',
'\u22EF': 'ctdot',
'\u22F0': 'utdot',
'\u22F1': 'dtdot',
'\u22F2': 'disin',
'\u22F3': 'isinsv',
'\u22F4': 'isins',
'\u22F5': 'isindot',
'\u22F5\u0338': 'notindot',
'\u22F6': 'notinvc',
'\u22F7': 'notinvb',
'\u22F9': 'isinE',
'\u22F9\u0338': 'notinE',
'\u22FA': 'nisd',
'\u22FB': 'xnis',
'\u22FC': 'nis',
'\u22FD': 'notnivc',
'\u22FE': 'notnivb',
'\u2305': 'barwed',
'\u2306': 'Barwed',
'\u230C': 'drcrop',
'\u230D': 'dlcrop',
'\u230E': 'urcrop',
'\u230F': 'ulcrop',
'\u2310': 'bnot',
'\u2312': 'profline',
'\u2313': 'profsurf',
'\u2315': 'telrec',
'\u2316': 'target',
'\u231C': 'ulcorn',
'\u231D': 'urcorn',
'\u231E': 'dlcorn',
'\u231F': 'drcorn',
'\u2322': 'frown',
'\u2323': 'smile',
'\u232D': 'cylcty',
'\u232E': 'profalar',
'\u2336': 'topbot',
'\u233D': 'ovbar',
'\u233F': 'solbar',
'\u237C': 'angzarr',
'\u23B0': 'lmoust',
'\u23B1': 'rmoust',
'\u23B4': 'tbrk',
'\u23B5': 'bbrk',
'\u23B6': 'bbrktbrk',
'\u23DC': 'OverParenthesis',
'\u23DD': 'UnderParenthesis',
'\u23DE': 'OverBrace',
'\u23DF': 'UnderBrace',
'\u23E2': 'trpezium',
'\u23E7': 'elinters',
'\u2423': 'blank',
'\u2500': 'boxh',
'\u2502': 'boxv',
'\u250C': 'boxdr',
'\u2510': 'boxdl',
'\u2514': 'boxur',
'\u2518': 'boxul',
'\u251C': 'boxvr',
'\u2524': 'boxvl',
'\u252C': 'boxhd',
'\u2534': 'boxhu',
'\u253C': 'boxvh',
'\u2550': 'boxH',
'\u2551': 'boxV',
'\u2552': 'boxdR',
'\u2553': 'boxDr',
'\u2554': 'boxDR',
'\u2555': 'boxdL',
'\u2556': 'boxDl',
'\u2557': 'boxDL',
'\u2558': 'boxuR',
'\u2559': 'boxUr',
'\u255A': 'boxUR',
'\u255B': 'boxuL',
'\u255C': 'boxUl',
'\u255D': 'boxUL',
'\u255E': 'boxvR',
'\u255F': 'boxVr',
'\u2560': 'boxVR',
'\u2561': 'boxvL',
'\u2562': 'boxVl',
'\u2563': 'boxVL',
'\u2564': 'boxHd',
'\u2565': 'boxhD',
'\u2566': 'boxHD',
'\u2567': 'boxHu',
'\u2568': 'boxhU',
'\u2569': 'boxHU',
'\u256A': 'boxvH',
'\u256B': 'boxVh',
'\u256C': 'boxVH',
'\u2580': 'uhblk',
'\u2584': 'lhblk',
'\u2588': 'block',
'\u2591': 'blk14',
'\u2592': 'blk12',
'\u2593': 'blk34',
'\u25A1': 'squ',
'\u25AA': 'squf',
'\u25AB': 'EmptyVerySmallSquare',
'\u25AD': 'rect',
'\u25AE': 'marker',
'\u25B1': 'fltns',
'\u25B3': 'xutri',
'\u25B4': 'utrif',
'\u25B5': 'utri',
'\u25B8': 'rtrif',
'\u25B9': 'rtri',
'\u25BD': 'xdtri',
'\u25BE': 'dtrif',
'\u25BF': 'dtri',
'\u25C2': 'ltrif',
'\u25C3': 'ltri',
'\u25CA': 'loz',
'\u25CB': 'cir',
'\u25EC': 'tridot',
'\u25EF': 'xcirc',
'\u25F8': 'ultri',
'\u25F9': 'urtri',
'\u25FA': 'lltri',
'\u25FB': 'EmptySmallSquare',
'\u25FC': 'FilledSmallSquare',
'\u2605': 'starf',
'\u2606': 'star',
'\u260E': 'phone',
'\u2640': 'female',
'\u2642': 'male',
'\u2660': 'spades',
'\u2663': 'clubs',
'\u2665': 'hearts',
'\u2666': 'diams',
'\u266A': 'sung',
'\u2713': 'check',
'\u2717': 'cross',
'\u2720': 'malt',
'\u2736': 'sext',
'\u2758': 'VerticalSeparator',
'\u27C8': 'bsolhsub',
'\u27C9': 'suphsol',
'\u27F5': 'xlarr',
'\u27F6': 'xrarr',
'\u27F7': 'xharr',
'\u27F8': 'xlArr',
'\u27F9': 'xrArr',
'\u27FA': 'xhArr',
'\u27FC': 'xmap',
'\u27FF': 'dzigrarr',
'\u2902': 'nvlArr',
'\u2903': 'nvrArr',
'\u2904': 'nvHarr',
'\u2905': 'Map',
'\u290C': 'lbarr',
'\u290D': 'rbarr',
'\u290E': 'lBarr',
'\u290F': 'rBarr',
'\u2910': 'RBarr',
'\u2911': 'DDotrahd',
'\u2912': 'UpArrowBar',
'\u2913': 'DownArrowBar',
'\u2916': 'Rarrtl',
'\u2919': 'latail',
'\u291A': 'ratail',
'\u291B': 'lAtail',
'\u291C': 'rAtail',
'\u291D': 'larrfs',
'\u291E': 'rarrfs',
'\u291F': 'larrbfs',
'\u2920': 'rarrbfs',
'\u2923': 'nwarhk',
'\u2924': 'nearhk',
'\u2925': 'searhk',
'\u2926': 'swarhk',
'\u2927': 'nwnear',
'\u2928': 'toea',
'\u2929': 'tosa',
'\u292A': 'swnwar',
'\u2933': 'rarrc',
'\u2933\u0338': 'nrarrc',
'\u2935': 'cudarrr',
'\u2936': 'ldca',
'\u2937': 'rdca',
'\u2938': 'cudarrl',
'\u2939': 'larrpl',
'\u293C': 'curarrm',
'\u293D': 'cularrp',
'\u2945': 'rarrpl',
'\u2948': 'harrcir',
'\u2949': 'Uarrocir',
'\u294A': 'lurdshar',
'\u294B': 'ldrushar',
'\u294E': 'LeftRightVector',
'\u294F': 'RightUpDownVector',
'\u2950': 'DownLeftRightVector',
'\u2951': 'LeftUpDownVector',
'\u2952': 'LeftVectorBar',
'\u2953': 'RightVectorBar',
'\u2954': 'RightUpVectorBar',
'\u2955': 'RightDownVectorBar',
'\u2956': 'DownLeftVectorBar',
'\u2957': 'DownRightVectorBar',
'\u2958': 'LeftUpVectorBar',
'\u2959': 'LeftDownVectorBar',
'\u295A': 'LeftTeeVector',
'\u295B': 'RightTeeVector',
'\u295C': 'RightUpTeeVector',
'\u295D': 'RightDownTeeVector',
'\u295E': 'DownLeftTeeVector',
'\u295F': 'DownRightTeeVector',
'\u2960': 'LeftUpTeeVector',
'\u2961': 'LeftDownTeeVector',
'\u2962': 'lHar',
'\u2963': 'uHar',
'\u2964': 'rHar',
'\u2965': 'dHar',
'\u2966': 'luruhar',
'\u2967': 'ldrdhar',
'\u2968': 'ruluhar',
'\u2969': 'rdldhar',
'\u296A': 'lharul',
'\u296B': 'llhard',
'\u296C': 'rharul',
'\u296D': 'lrhard',
'\u296E': 'udhar',
'\u296F': 'duhar',
'\u2970': 'RoundImplies',
'\u2971': 'erarr',
'\u2972': 'simrarr',
'\u2973': 'larrsim',
'\u2974': 'rarrsim',
'\u2975': 'rarrap',
'\u2976': 'ltlarr',
'\u2978': 'gtrarr',
'\u2979': 'subrarr',
'\u297B': 'suplarr',
'\u297C': 'lfisht',
'\u297D': 'rfisht',
'\u297E': 'ufisht',
'\u297F': 'dfisht',
'\u299A': 'vzigzag',
'\u299C': 'vangrt',
'\u299D': 'angrtvbd',
'\u29A4': 'ange',
'\u29A5': 'range',
'\u29A6': 'dwangle',
'\u29A7': 'uwangle',
'\u29A8': 'angmsdaa',
'\u29A9': 'angmsdab',
'\u29AA': 'angmsdac',
'\u29AB': 'angmsdad',
'\u29AC': 'angmsdae',
'\u29AD': 'angmsdaf',
'\u29AE': 'angmsdag',
'\u29AF': 'angmsdah',
'\u29B0': 'bemptyv',
'\u29B1': 'demptyv',
'\u29B2': 'cemptyv',
'\u29B3': 'raemptyv',
'\u29B4': 'laemptyv',
'\u29B5': 'ohbar',
'\u29B6': 'omid',
'\u29B7': 'opar',
'\u29B9': 'operp',
'\u29BB': 'olcross',
'\u29BC': 'odsold',
'\u29BE': 'olcir',
'\u29BF': 'ofcir',
'\u29C0': 'olt',
'\u29C1': 'ogt',
'\u29C2': 'cirscir',
'\u29C3': 'cirE',
'\u29C4': 'solb',
'\u29C5': 'bsolb',
'\u29C9': 'boxbox',
'\u29CD': 'trisb',
'\u29CE': 'rtriltri',
'\u29CF': 'LeftTriangleBar',
'\u29CF\u0338': 'NotLeftTriangleBar',
'\u29D0': 'RightTriangleBar',
'\u29D0\u0338': 'NotRightTriangleBar',
'\u29DC': 'iinfin',
'\u29DD': 'infintie',
'\u29DE': 'nvinfin',
'\u29E3': 'eparsl',
'\u29E4': 'smeparsl',
'\u29E5': 'eqvparsl',
'\u29EB': 'lozf',
'\u29F4': 'RuleDelayed',
'\u29F6': 'dsol',
'\u2A00': 'xodot',
'\u2A01': 'xoplus',
'\u2A02': 'xotime',
'\u2A04': 'xuplus',
'\u2A06': 'xsqcup',
'\u2A0D': 'fpartint',
'\u2A10': 'cirfnint',
'\u2A11': 'awint',
'\u2A12': 'rppolint',
'\u2A13': 'scpolint',
'\u2A14': 'npolint',
'\u2A15': 'pointint',
'\u2A16': 'quatint',
'\u2A17': 'intlarhk',
'\u2A22': 'pluscir',
'\u2A23': 'plusacir',
'\u2A24': 'simplus',
'\u2A25': 'plusdu',
'\u2A26': 'plussim',
'\u2A27': 'plustwo',
'\u2A29': 'mcomma',
'\u2A2A': 'minusdu',
'\u2A2D': 'loplus',
'\u2A2E': 'roplus',
'\u2A2F': 'Cross',
'\u2A30': 'timesd',
'\u2A31': 'timesbar',
'\u2A33': 'smashp',
'\u2A34': 'lotimes',
'\u2A35': 'rotimes',
'\u2A36': 'otimesas',
'\u2A37': 'Otimes',
'\u2A38': 'odiv',
'\u2A39': 'triplus',
'\u2A3A': 'triminus',
'\u2A3B': 'tritime',
'\u2A3C': 'iprod',
'\u2A3F': 'amalg',
'\u2A40': 'capdot',
'\u2A42': 'ncup',
'\u2A43': 'ncap',
'\u2A44': 'capand',
'\u2A45': 'cupor',
'\u2A46': 'cupcap',
'\u2A47': 'capcup',
'\u2A48': 'cupbrcap',
'\u2A49': 'capbrcup',
'\u2A4A': 'cupcup',
'\u2A4B': 'capcap',
'\u2A4C': 'ccups',
'\u2A4D': 'ccaps',
'\u2A50': 'ccupssm',
'\u2A53': 'And',
'\u2A54': 'Or',
'\u2A55': 'andand',
'\u2A56': 'oror',
'\u2A57': 'orslope',
'\u2A58': 'andslope',
'\u2A5A': 'andv',
'\u2A5B': 'orv',
'\u2A5C': 'andd',
'\u2A5D': 'ord',
'\u2A5F': 'wedbar',
'\u2A66': 'sdote',
'\u2A6A': 'simdot',
'\u2A6D': 'congdot',
'\u2A6D\u0338': 'ncongdot',
'\u2A6E': 'easter',
'\u2A6F': 'apacir',
'\u2A70': 'apE',
'\u2A70\u0338': 'napE',
'\u2A71': 'eplus',
'\u2A72': 'pluse',
'\u2A73': 'Esim',
'\u2A77': 'eDDot',
'\u2A78': 'equivDD',
'\u2A79': 'ltcir',
'\u2A7A': 'gtcir',
'\u2A7B': 'ltquest',
'\u2A7C': 'gtquest',
'\u2A7D': 'les',
'\u2A7D\u0338': 'nles',
'\u2A7E': 'ges',
'\u2A7E\u0338': 'nges',
'\u2A7F': 'lesdot',
'\u2A80': 'gesdot',
'\u2A81': 'lesdoto',
'\u2A82': 'gesdoto',
'\u2A83': 'lesdotor',
'\u2A84': 'gesdotol',
'\u2A85': 'lap',
'\u2A86': 'gap',
'\u2A87': 'lne',
'\u2A88': 'gne',
'\u2A89': 'lnap',
'\u2A8A': 'gnap',
'\u2A8B': 'lEg',
'\u2A8C': 'gEl',
'\u2A8D': 'lsime',
'\u2A8E': 'gsime',
'\u2A8F': 'lsimg',
'\u2A90': 'gsiml',
'\u2A91': 'lgE',
'\u2A92': 'glE',
'\u2A93': 'lesges',
'\u2A94': 'gesles',
'\u2A95': 'els',
'\u2A96': 'egs',
'\u2A97': 'elsdot',
'\u2A98': 'egsdot',
'\u2A99': 'el',
'\u2A9A': 'eg',
'\u2A9D': 'siml',
'\u2A9E': 'simg',
'\u2A9F': 'simlE',
'\u2AA0': 'simgE',
'\u2AA1': 'LessLess',
'\u2AA1\u0338': 'NotNestedLessLess',
'\u2AA2': 'GreaterGreater',
'\u2AA2\u0338': 'NotNestedGreaterGreater',
'\u2AA4': 'glj',
'\u2AA5': 'gla',
'\u2AA6': 'ltcc',
'\u2AA7': 'gtcc',
'\u2AA8': 'lescc',
'\u2AA9': 'gescc',
'\u2AAA': 'smt',
'\u2AAB': 'lat',
'\u2AAC': 'smte',
'\u2AAC\uFE00': 'smtes',
'\u2AAD': 'late',
'\u2AAD\uFE00': 'lates',
'\u2AAE': 'bumpE',
'\u2AAF': 'pre',
'\u2AAF\u0338': 'npre',
'\u2AB0': 'sce',
'\u2AB0\u0338': 'nsce',
'\u2AB3': 'prE',
'\u2AB4': 'scE',
'\u2AB5': 'prnE',
'\u2AB6': 'scnE',
'\u2AB7': 'prap',
'\u2AB8': 'scap',
'\u2AB9': 'prnap',
'\u2ABA': 'scnap',
'\u2ABB': 'Pr',
'\u2ABC': 'Sc',
'\u2ABD': 'subdot',
'\u2ABE': 'supdot',
'\u2ABF': 'subplus',
'\u2AC0': 'supplus',
'\u2AC1': 'submult',
'\u2AC2': 'supmult',
'\u2AC3': 'subedot',
'\u2AC4': 'supedot',
'\u2AC5': 'subE',
'\u2AC5\u0338': 'nsubE',
'\u2AC6': 'supE',
'\u2AC6\u0338': 'nsupE',
'\u2AC7': 'subsim',
'\u2AC8': 'supsim',
'\u2ACB\uFE00': 'vsubnE',
'\u2ACB': 'subnE',
'\u2ACC\uFE00': 'vsupnE',
'\u2ACC': 'supnE',
'\u2ACF': 'csub',
'\u2AD0': 'csup',
'\u2AD1': 'csube',
'\u2AD2': 'csupe',
'\u2AD3': 'subsup',
'\u2AD4': 'supsub',
'\u2AD5': 'subsub',
'\u2AD6': 'supsup',
'\u2AD7': 'suphsub',
'\u2AD8': 'supdsub',
'\u2AD9': 'forkv',
'\u2ADA': 'topfork',
'\u2ADB': 'mlcp',
'\u2AE4': 'Dashv',
'\u2AE6': 'Vdashl',
'\u2AE7': 'Barv',
'\u2AE8': 'vBar',
'\u2AE9': 'vBarv',
'\u2AEB': 'Vbar',
'\u2AEC': 'Not',
'\u2AED': 'bNot',
'\u2AEE': 'rnmid',
'\u2AEF': 'cirmid',
'\u2AF0': 'midcir',
'\u2AF1': 'topcir',
'\u2AF2': 'nhpar',
'\u2AF3': 'parsim',
'\u2AFD': 'parsl',
'\u2AFD\u20E5': 'nparsl',
'\u266D': 'flat',
'\u266E': 'natur',
'\u266F': 'sharp',
'\xA4': 'curren',
'\xA2': 'cent',
$: 'dollar',
'\xA3': 'pound',
'\xA5': 'yen',
'\u20AC': 'euro',
'\xB9': 'sup1',
'\xBD': 'half',
'\u2153': 'frac13',
'\xBC': 'frac14',
'\u2155': 'frac15',
'\u2159': 'frac16',
'\u215B': 'frac18',
'\xB2': 'sup2',
'\u2154': 'frac23',
'\u2156': 'frac25',
'\xB3': 'sup3',
'\xBE': 'frac34',
'\u2157': 'frac35',
'\u215C': 'frac38',
'\u2158': 'frac45',
'\u215A': 'frac56',
'\u215D': 'frac58',
'\u215E': 'frac78',
'\uD835\uDCB6': 'ascr',
'\uD835\uDD52': 'aopf',
'\uD835\uDD1E': 'afr',
'\uD835\uDD38': 'Aopf',
'\uD835\uDD04': 'Afr',
'\uD835\uDC9C': 'Ascr',
'\xAA': 'ordf',
'\xE1': 'aacute',
'\xC1': 'Aacute',
'\xE0': 'agrave',
'\xC0': 'Agrave',
'\u0103': 'abreve',
'\u0102': 'Abreve',
'\xE2': 'acirc',
'\xC2': 'Acirc',
'\xE5': 'aring',
'\xC5': 'angst',
'\xE4': 'auml',
'\xC4': 'Auml',
'\xE3': 'atilde',
'\xC3': 'Atilde',
'\u0105': 'aogon',
'\u0104': 'Aogon',
'\u0101': 'amacr',
'\u0100': 'Amacr',
'\xE6': 'aelig',
'\xC6': 'AElig',
'\uD835\uDCB7': 'bscr',
'\uD835\uDD53': 'bopf',
'\uD835\uDD1F': 'bfr',
'\uD835\uDD39': 'Bopf',
'\u212C': 'Bscr',
'\uD835\uDD05': 'Bfr',
'\uD835\uDD20': 'cfr',
'\uD835\uDCB8': 'cscr',
'\uD835\uDD54': 'copf',
'\u212D': 'Cfr',
'\uD835\uDC9E': 'Cscr',
'\u2102': 'Copf',
'\u0107': 'cacute',
'\u0106': 'Cacute',
'\u0109': 'ccirc',
'\u0108': 'Ccirc',
'\u010D': 'ccaron',
'\u010C': 'Ccaron',
'\u010B': 'cdot',
'\u010A': 'Cdot',
'\xE7': 'ccedil',
'\xC7': 'Ccedil',
'\u2105': 'incare',
'\uD835\uDD21': 'dfr',
'\u2146': 'dd',
'\uD835\uDD55': 'dopf',
'\uD835\uDCB9': 'dscr',
'\uD835\uDC9F': 'Dscr',
'\uD835\uDD07': 'Dfr',
'\u2145': 'DD',
'\uD835\uDD3B': 'Dopf',
'\u010F': 'dcaron',
'\u010E': 'Dcaron',
'\u0111': 'dstrok',
'\u0110': 'Dstrok',
'\xF0': 'eth',
'\xD0': 'ETH',
'\u2147': 'ee',
'\u212F': 'escr',
'\uD835\uDD22': 'efr',
'\uD835\uDD56': 'eopf',
'\u2130': 'Escr',
'\uD835\uDD08': 'Efr',
'\uD835\uDD3C': 'Eopf',
'\xE9': 'eacute',
'\xC9': 'Eacute',
'\xE8': 'egrave',
'\xC8': 'Egrave',
'\xEA': 'ecirc',
'\xCA': 'Ecirc',
'\u011B': 'ecaron',
'\u011A': 'Ecaron',
'\xEB': 'euml',
'\xCB': 'Euml',
'\u0117': 'edot',
'\u0116': 'Edot',
'\u0119': 'eogon',
'\u0118': 'Eogon',
'\u0113': 'emacr',
'\u0112': 'Emacr',
'\uD835\uDD23': 'ffr',
'\uD835\uDD57': 'fopf',
'\uD835\uDCBB': 'fscr',
'\uD835\uDD09': 'Ffr',
'\uD835\uDD3D': 'Fopf',
'\u2131': 'Fscr',
'\uFB00': 'fflig',
'\uFB03': 'ffilig',
'\uFB04': 'ffllig',
'\uFB01': 'filig',
fj: 'fjlig',
'\uFB02': 'fllig',
'\u0192': 'fnof',
'\u210A': 'gscr',
'\uD835\uDD58': 'gopf',
'\uD835\uDD24': 'gfr',
'\uD835\uDCA2': 'Gscr',
'\uD835\uDD3E': 'Gopf',
'\uD835\uDD0A': 'Gfr',
'\u01F5': 'gacute',
'\u011F': 'gbreve',
'\u011E': 'Gbreve',
'\u011D': 'gcirc',
'\u011C': 'Gcirc',
'\u0121': 'gdot',
'\u0120': 'Gdot',
'\u0122': 'Gcedil',
'\uD835\uDD25': 'hfr',
'\u210E': 'planckh',
'\uD835\uDCBD': 'hscr',
'\uD835\uDD59': 'hopf',
'\u210B': 'Hscr',
'\u210C': 'Hfr',
'\u210D': 'Hopf',
'\u0125': 'hcirc',
'\u0124': 'Hcirc',
'\u210F': 'hbar',
'\u0127': 'hstrok',
'\u0126': 'Hstrok',
'\uD835\uDD5A': 'iopf',
'\uD835\uDD26': 'ifr',
'\uD835\uDCBE': 'iscr',
'\u2148': 'ii',
'\uD835\uDD40': 'Iopf',
'\u2110': 'Iscr',
'\u2111': 'Im',
'\xED': 'iacute',
'\xCD': 'Iacute',
'\xEC': 'igrave',
'\xCC': 'Igrave',
'\xEE': 'icirc',
'\xCE': 'Icirc',
'\xEF': 'iuml',
'\xCF': 'Iuml',
'\u0129': 'itilde',
'\u0128': 'Itilde',
'\u0130': 'Idot',
'\u012F': 'iogon',
'\u012E': 'Iogon',
'\u012B': 'imacr',
'\u012A': 'Imacr',
'\u0133': 'ijlig',
'\u0132': 'IJlig',
'\u0131': 'imath',
'\uD835\uDCBF': 'jscr',
'\uD835\uDD5B': 'jopf',
'\uD835\uDD27': 'jfr',
'\uD835\uDCA5': 'Jscr',
'\uD835\uDD0D': 'Jfr',
'\uD835\uDD41': 'Jopf',
'\u0135': 'jcirc',
'\u0134': 'Jcirc',
'\u0237': 'jmath',
'\uD835\uDD5C': 'kopf',
'\uD835\uDCC0': 'kscr',
'\uD835\uDD28': 'kfr',
'\uD835\uDCA6': 'Kscr',
'\uD835\uDD42': 'Kopf',
'\uD835\uDD0E': 'Kfr',
'\u0137': 'kcedil',
'\u0136': 'Kcedil',
'\uD835\uDD29': 'lfr',
'\uD835\uDCC1': 'lscr',
'\u2113': 'ell',
'\uD835\uDD5D': 'lopf',
'\u2112': 'Lscr',
'\uD835\uDD0F': 'Lfr',
'\uD835\uDD43': 'Lopf',
'\u013A': 'lacute',
'\u0139': 'Lacute',
'\u013E': 'lcaron',
'\u013D': 'Lcaron',
'\u013C': 'lcedil',
'\u013B': 'Lcedil',
'\u0142': 'lstrok',
'\u0141': 'Lstrok',
'\u0140': 'lmidot',
'\u013F': 'Lmidot',
'\uD835\uDD2A': 'mfr',
'\uD835\uDD5E': 'mopf',
'\uD835\uDCC2': 'mscr',
'\uD835\uDD10': 'Mfr',
'\uD835\uDD44': 'Mopf',
'\u2133': 'Mscr',
'\uD835\uDD2B': 'nfr',
'\uD835\uDD5F': 'nopf',
'\uD835\uDCC3': 'nscr',
'\u2115': 'Nopf',
'\uD835\uDCA9': 'Nscr',
'\uD835\uDD11': 'Nfr',
'\u0144': 'nacute',
'\u0143': 'Nacute',
'\u0148': 'ncaron',
'\u0147': 'Ncaron',
'\xF1': 'ntilde',
'\xD1': 'Ntilde',
'\u0146': 'ncedil',
'\u0145': 'Ncedil',
'\u2116': 'numero',
'\u014B': 'eng',
'\u014A': 'ENG',
'\uD835\uDD60': 'oopf',
'\uD835\uDD2C': 'ofr',
'\u2134': 'oscr',
'\uD835\uDCAA': 'Oscr',
'\uD835\uDD12': 'Ofr',
'\uD835\uDD46': 'Oopf',
'\xBA': 'ordm',
'\xF3': 'oacute',
'\xD3': 'Oacute',
'\xF2': 'ograve',
'\xD2': 'Ograve',
'\xF4': 'ocirc',
'\xD4': 'Ocirc',
'\xF6': 'ouml',
'\xD6': 'Ouml',
'\u0151': 'odblac',
'\u0150': 'Odblac',
'\xF5': 'otilde',
'\xD5': 'Otilde',
'\xF8': 'oslash',
'\xD8': 'Oslash',
'\u014D': 'omacr',
'\u014C': 'Omacr',
'\u0153': 'oelig',
'\u0152': 'OElig',
'\uD835\uDD2D': 'pfr',
'\uD835\uDCC5': 'pscr',
'\uD835\uDD61': 'popf',
'\u2119': 'Popf',
'\uD835\uDD13': 'Pfr',
'\uD835\uDCAB': 'Pscr',
'\uD835\uDD62': 'qopf',
'\uD835\uDD2E': 'qfr',
'\uD835\uDCC6': 'qscr',
'\uD835\uDCAC': 'Qscr',
'\uD835\uDD14': 'Qfr',
'\u211A': 'Qopf',
'\u0138': 'kgreen',
'\uD835\uDD2F': 'rfr',
'\uD835\uDD63': 'ropf',
'\uD835\uDCC7': 'rscr',
'\u211B': 'Rscr',
'\u211C': 'Re',
'\u211D': 'Ropf',
'\u0155': 'racute',
'\u0154': 'Racute',
'\u0159': 'rcaron',
'\u0158': 'Rcaron',
'\u0157': 'rcedil',
'\u0156': 'Rcedil',
'\uD835\uDD64': 'sopf',
'\uD835\uDCC8': 'sscr',
'\uD835\uDD30': 'sfr',
'\uD835\uDD4A': 'Sopf',
'\uD835\uDD16': 'Sfr',
'\uD835\uDCAE': 'Sscr',
'\u24C8': 'oS',
'\u015B': 'sacute',
'\u015A': 'Sacute',
'\u015D': 'scirc',
'\u015C': 'Scirc',
'\u0161': 'scaron',
'\u0160': 'Scaron',
'\u015F': 'scedil',
'\u015E': 'Scedil',
'\xDF': 'szlig',
'\uD835\uDD31': 'tfr',
'\uD835\uDCC9': 'tscr',
'\uD835\uDD65': 'topf',
'\uD835\uDCAF': 'Tscr',
'\uD835\uDD17': 'Tfr',
'\uD835\uDD4B': 'Topf',
'\u0165': 'tcaron',
'\u0164': 'Tcaron',
'\u0163': 'tcedil',
'\u0162': 'Tcedil',
'\u2122': 'trade',
'\u0167': 'tstrok',
'\u0166': 'Tstrok',
'\uD835\uDCCA': 'uscr',
'\uD835\uDD66': 'uopf',
'\uD835\uDD32': 'ufr',
'\uD835\uDD4C': 'Uopf',
'\uD835\uDD18': 'Ufr',
'\uD835\uDCB0': 'Uscr',
'\xFA': 'uacute',
'\xDA': 'Uacute',
'\xF9': 'ugrave',
'\xD9': 'Ugrave',
'\u016D': 'ubreve',
'\u016C': 'Ubreve',
'\xFB': 'ucirc',
'\xDB': 'Ucirc',
'\u016F': 'uring',
'\u016E': 'Uring',
'\xFC': 'uuml',
'\xDC': 'Uuml',
'\u0171': 'udblac',
'\u0170': 'Udblac',
'\u0169': 'utilde',
'\u0168': 'Utilde',
'\u0173': 'uogon',
'\u0172': 'Uogon',
'\u016B': 'umacr',
'\u016A': 'Umacr',
'\uD835\uDD33': 'vfr',
'\uD835\uDD67': 'vopf',
'\uD835\uDCCB': 'vscr',
'\uD835\uDD19': 'Vfr',
'\uD835\uDD4D': 'Vopf',
'\uD835\uDCB1': 'Vscr',
'\uD835\uDD68': 'wopf',
'\uD835\uDCCC': 'wscr',
'\uD835\uDD34': 'wfr',
'\uD835\uDCB2': 'Wscr',
'\uD835\uDD4E': 'Wopf',
'\uD835\uDD1A': 'Wfr',
'\u0175': 'wcirc',
'\u0174': 'Wcirc',
'\uD835\uDD35': 'xfr',
'\uD835\uDCCD': 'xscr',
'\uD835\uDD69': 'xopf',
'\uD835\uDD4F': 'Xopf',
'\uD835\uDD1B': 'Xfr',
'\uD835\uDCB3': 'Xscr',
'\uD835\uDD36': 'yfr',
'\uD835\uDCCE': 'yscr',
'\uD835\uDD6A': 'yopf',
'\uD835\uDCB4': 'Yscr',
'\uD835\uDD1C': 'Yfr',
'\uD835\uDD50': 'Yopf',
'\xFD': 'yacute',
'\xDD': 'Yacute',
'\u0177': 'ycirc',
'\u0176': 'Ycirc',
'\xFF': 'yuml',
'\u0178': 'Yuml',
'\uD835\uDCCF': 'zscr',
'\uD835\uDD37': 'zfr',
'\uD835\uDD6B': 'zopf',
'\u2128': 'Zfr',
'\u2124': 'Zopf',
'\uD835\uDCB5': 'Zscr',
'\u017A': 'zacute',
'\u0179': 'Zacute',
'\u017E': 'zcaron',
'\u017D': 'Zcaron',
'\u017C': 'zdot',
'\u017B': 'Zdot',
'\u01B5': 'imped',
'\xFE': 'thorn',
'\xDE': 'THORN',
'\u0149': 'napos',
'\u03B1': 'alpha',
'\u0391': 'Alpha',
'\u03B2': 'beta',
'\u0392': 'Beta',
'\u03B3': 'gamma',
'\u0393': 'Gamma',
'\u03B4': 'delta',
'\u0394': 'Delta',
'\u03B5': 'epsi',
'\u03F5': 'epsiv',
'\u0395': 'Epsilon',
'\u03DD': 'gammad',
'\u03DC': 'Gammad',
'\u03B6': 'zeta',
'\u0396': 'Zeta',
'\u03B7': 'eta',
'\u0397': 'Eta',
'\u03B8': 'theta',
'\u03D1': 'thetav',
'\u0398': 'Theta',
'\u03B9': 'iota',
'\u0399': 'Iota',
'\u03BA': 'kappa',
'\u03F0': 'kappav',
'\u039A': 'Kappa',
'\u03BB': 'lambda',
'\u039B': 'Lambda',
'\u03BC': 'mu',
'\xB5': 'micro',
'\u039C': 'Mu',
'\u03BD': 'nu',
'\u039D': 'Nu',
'\u03BE': 'xi',
'\u039E': 'Xi',
'\u03BF': 'omicron',
'\u039F': 'Omicron',
'\u03C0': 'pi',
'\u03D6': 'piv',
'\u03A0': 'Pi',
'\u03C1': 'rho',
'\u03F1': 'rhov',
'\u03A1': 'Rho',
'\u03C3': 'sigma',
'\u03A3': 'Sigma',
'\u03C2': 'sigmaf',
'\u03C4': 'tau',
'\u03A4': 'Tau',
'\u03C5': 'upsi',
'\u03A5': 'Upsilon',
'\u03D2': 'Upsi',
'\u03C6': 'phi',
'\u03D5': 'phiv',
'\u03A6': 'Phi',
'\u03C7': 'chi',
'\u03A7': 'Chi',
'\u03C8': 'psi',
'\u03A8': 'Psi',
'\u03C9': 'omega',
'\u03A9': 'ohm',
'\u0430': 'acy',
'\u0410': 'Acy',
'\u0431': 'bcy',
'\u0411': 'Bcy',
'\u0432': 'vcy',
'\u0412': 'Vcy',
'\u0433': 'gcy',
'\u0413': 'Gcy',
'\u0453': 'gjcy',
'\u0403': 'GJcy',
'\u0434': 'dcy',
'\u0414': 'Dcy',
'\u0452': 'djcy',
'\u0402': 'DJcy',
'\u0435': 'iecy',
'\u0415': 'IEcy',
'\u0451': 'iocy',
'\u0401': 'IOcy',
'\u0454': 'jukcy',
'\u0404': 'Jukcy',
'\u0436': 'zhcy',
'\u0416': 'ZHcy',
'\u0437': 'zcy',
'\u0417': 'Zcy',
'\u0455': 'dscy',
'\u0405': 'DScy',
'\u0438': 'icy',
'\u0418': 'Icy',
'\u0456': 'iukcy',
'\u0406': 'Iukcy',
'\u0457': 'yicy',
'\u0407': 'YIcy',
'\u0439': 'jcy',
'\u0419': 'Jcy',
'\u0458': 'jsercy',
'\u0408': 'Jsercy',
'\u043A': 'kcy',
'\u041A': 'Kcy',
'\u045C': 'kjcy',
'\u040C': 'KJcy',
'\u043B': 'lcy',
'\u041B': 'Lcy',
'\u0459': 'ljcy',
'\u0409': 'LJcy',
'\u043C': 'mcy',
'\u041C': 'Mcy',
'\u043D': 'ncy',
'\u041D': 'Ncy',
'\u045A': 'njcy',
'\u040A': 'NJcy',
'\u043E': 'ocy',
'\u041E': 'Ocy',
'\u043F': 'pcy',
'\u041F': 'Pcy',
'\u0440': 'rcy',
'\u0420': 'Rcy',
'\u0441': 'scy',
'\u0421': 'Scy',
'\u0442': 'tcy',
'\u0422': 'Tcy',
'\u045B': 'tshcy',
'\u040B': 'TSHcy',
'\u0443': 'ucy',
'\u0423': 'Ucy',
'\u045E': 'ubrcy',
'\u040E': 'Ubrcy',
'\u0444': 'fcy',
'\u0424': 'Fcy',
'\u0445': 'khcy',
'\u0425': 'KHcy',
'\u0446': 'tscy',
'\u0426': 'TScy',
'\u0447': 'chcy',
'\u0427': 'CHcy',
'\u045F': 'dzcy',
'\u040F': 'DZcy',
'\u0448': 'shcy',
'\u0428': 'SHcy',
'\u0449': 'shchcy',
'\u0429': 'SHCHcy',
'\u044A': 'hardcy',
'\u042A': 'HARDcy',
'\u044B': 'ycy',
'\u042B': 'Ycy',
'\u044C': 'softcy',
'\u042C': 'SOFTcy',
'\u044D': 'ecy',
'\u042D': 'Ecy',
'\u044E': 'yucy',
'\u042E': 'YUcy',
'\u044F': 'yacy',
'\u042F': 'YAcy',
'\u2135': 'aleph',
'\u2136': 'beth',
'\u2137': 'gimel',
'\u2138': 'daleth'
}
var regexEscape = /["&'<>`]/g
var escapeMap = {
'"': '&quot;',
'&': '&amp;',
"'": '&#x27;',
'<': '&lt;',
// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
// following is not strictly necessary unless its part of a tag or an
// unquoted attribute value. Were only escaping it to support those
// situations, and for XML support.
'>': '&gt;',
// In Internet Explorer ≤ 8, the backtick character can be used
// to break out of (un)quoted attribute values or HTML comments.
// See http://html5sec.org/#102, http://html5sec.org/#108, and
// http://html5sec.org/#133.
'`': '&#x60;'
}
var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/
var regexInvalidRawCodePoint =
/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/
var regexDecode =
/&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVecto
var decodeMap = {
aacute: '\xE1',
Aacute: '\xC1',
abreve: '\u0103',
Abreve: '\u0102',
ac: '\u223E',
acd: '\u223F',
acE: '\u223E\u0333',
acirc: '\xE2',
Acirc: '\xC2',
acute: '\xB4',
acy: '\u0430',
Acy: '\u0410',
aelig: '\xE6',
AElig: '\xC6',
af: '\u2061',
afr: '\uD835\uDD1E',
Afr: '\uD835\uDD04',
agrave: '\xE0',
Agrave: '\xC0',
alefsym: '\u2135',
aleph: '\u2135',
alpha: '\u03B1',
Alpha: '\u0391',
amacr: '\u0101',
Amacr: '\u0100',
amalg: '\u2A3F',
amp: '&',
AMP: '&',
and: '\u2227',
And: '\u2A53',
andand: '\u2A55',
andd: '\u2A5C',
andslope: '\u2A58',
andv: '\u2A5A',
ang: '\u2220',
ange: '\u29A4',
angle: '\u2220',
angmsd: '\u2221',
angmsdaa: '\u29A8',
angmsdab: '\u29A9',
angmsdac: '\u29AA',
angmsdad: '\u29AB',
angmsdae: '\u29AC',
angmsdaf: '\u29AD',
angmsdag: '\u29AE',
angmsdah: '\u29AF',
angrt: '\u221F',
angrtvb: '\u22BE',
angrtvbd: '\u299D',
angsph: '\u2222',
angst: '\xC5',
angzarr: '\u237C',
aogon: '\u0105',
Aogon: '\u0104',
aopf: '\uD835\uDD52',
Aopf: '\uD835\uDD38',
ap: '\u2248',
apacir: '\u2A6F',
ape: '\u224A',
apE: '\u2A70',
apid: '\u224B',
apos: "'",
ApplyFunction: '\u2061',
approx: '\u2248',
approxeq: '\u224A',
aring: '\xE5',
Aring: '\xC5',
ascr: '\uD835\uDCB6',
Ascr: '\uD835\uDC9C',
Assign: '\u2254',
ast: '*',
asymp: '\u2248',
asympeq: '\u224D',
atilde: '\xE3',
Atilde: '\xC3',
auml: '\xE4',
Auml: '\xC4',
awconint: '\u2233',
awint: '\u2A11',
backcong: '\u224C',
backepsilon: '\u03F6',
backprime: '\u2035',
backsim: '\u223D',
backsimeq: '\u22CD',
Backslash: '\u2216',
Barv: '\u2AE7',
barvee: '\u22BD',
barwed: '\u2305',
Barwed: '\u2306',
barwedge: '\u2305',
bbrk: '\u23B5',
bbrktbrk: '\u23B6',
bcong: '\u224C',
bcy: '\u0431',
Bcy: '\u0411',
bdquo: '\u201E',
becaus: '\u2235',
because: '\u2235',
Because: '\u2235',
bemptyv: '\u29B0',
bepsi: '\u03F6',
bernou: '\u212C',
Bernoullis: '\u212C',
beta: '\u03B2',
Beta: '\u0392',
beth: '\u2136',
between: '\u226C',
bfr: '\uD835\uDD1F',
Bfr: '\uD835\uDD05',
bigcap: '\u22C2',
bigcirc: '\u25EF',
bigcup: '\u22C3',
bigodot: '\u2A00',
bigoplus: '\u2A01',
bigotimes: '\u2A02',
bigsqcup: '\u2A06',
bigstar: '\u2605',
bigtriangledown: '\u25BD',
bigtriangleup: '\u25B3',
biguplus: '\u2A04',
bigvee: '\u22C1',
bigwedge: '\u22C0',
bkarow: '\u290D',
blacklozenge: '\u29EB',
blacksquare: '\u25AA',
blacktriangle: '\u25B4',
blacktriangledown: '\u25BE',
blacktriangleleft: '\u25C2',
blacktriangleright: '\u25B8',
blank: '\u2423',
blk12: '\u2592',
blk14: '\u2591',
blk34: '\u2593',
block: '\u2588',
bne: '=\u20E5',
bnequiv: '\u2261\u20E5',
bnot: '\u2310',
bNot: '\u2AED',
bopf: '\uD835\uDD53',
Bopf: '\uD835\uDD39',
bot: '\u22A5',
bottom: '\u22A5',
bowtie: '\u22C8',
boxbox: '\u29C9',
boxdl: '\u2510',
boxdL: '\u2555',
boxDl: '\u2556',
boxDL: '\u2557',
boxdr: '\u250C',
boxdR: '\u2552',
boxDr: '\u2553',
boxDR: '\u2554',
boxh: '\u2500',
boxH: '\u2550',
boxhd: '\u252C',
boxhD: '\u2565',
boxHd: '\u2564',
boxHD: '\u2566',
boxhu: '\u2534',
boxhU: '\u2568',
boxHu: '\u2567',
boxHU: '\u2569',
boxminus: '\u229F',
boxplus: '\u229E',
boxtimes: '\u22A0',
boxul: '\u2518',
boxuL: '\u255B',
boxUl: '\u255C',
boxUL: '\u255D',
boxur: '\u2514',
boxuR: '\u2558',
boxUr: '\u2559',
boxUR: '\u255A',
boxv: '\u2502',
boxV: '\u2551',
boxvh: '\u253C',
boxvH: '\u256A',
boxVh: '\u256B',
boxVH: '\u256C',
boxvl: '\u2524',
boxvL: '\u2561',
boxVl: '\u2562',
boxVL: '\u2563',
boxvr: '\u251C',
boxvR: '\u255E',
boxVr: '\u255F',
boxVR: '\u2560',
bprime: '\u2035',
breve: '\u02D8',
Breve: '\u02D8',
brvbar: '\xA6',
bscr: '\uD835\uDCB7',
Bscr: '\u212C',
bsemi: '\u204F',
bsim: '\u223D',
bsime: '\u22CD',
bsol: '\\',
bsolb: '\u29C5',
bsolhsub: '\u27C8',
bull: '\u2022',
bullet: '\u2022',
bump: '\u224E',
bumpe: '\u224F',
bumpE: '\u2AAE',
bumpeq: '\u224F',
Bumpeq: '\u224E',
cacute: '\u0107',
Cacute: '\u0106',
cap: '\u2229',
Cap: '\u22D2',
capand: '\u2A44',
capbrcup: '\u2A49',
capcap: '\u2A4B',
capcup: '\u2A47',
capdot: '\u2A40',
CapitalDifferentialD: '\u2145',
caps: '\u2229\uFE00',
caret: '\u2041',
caron: '\u02C7',
Cayleys: '\u212D',
ccaps: '\u2A4D',
ccaron: '\u010D',
Ccaron: '\u010C',
ccedil: '\xE7',
Ccedil: '\xC7',
ccirc: '\u0109',
Ccirc: '\u0108',
Cconint: '\u2230',
ccups: '\u2A4C',
ccupssm: '\u2A50',
cdot: '\u010B',
Cdot: '\u010A',
cedil: '\xB8',
Cedilla: '\xB8',
cemptyv: '\u29B2',
cent: '\xA2',
centerdot: '\xB7',
CenterDot: '\xB7',
cfr: '\uD835\uDD20',
Cfr: '\u212D',
chcy: '\u0447',
CHcy: '\u0427',
check: '\u2713',
checkmark: '\u2713',
chi: '\u03C7',
Chi: '\u03A7',
cir: '\u25CB',
circ: '\u02C6',
circeq: '\u2257',
circlearrowleft: '\u21BA',
circlearrowright: '\u21BB',
circledast: '\u229B',
circledcirc: '\u229A',
circleddash: '\u229D',
CircleDot: '\u2299',
circledR: '\xAE',
circledS: '\u24C8',
CircleMinus: '\u2296',
CirclePlus: '\u2295',
CircleTimes: '\u2297',
cire: '\u2257',
cirE: '\u29C3',
cirfnint: '\u2A10',
cirmid: '\u2AEF',
cirscir: '\u29C2',
ClockwiseContourIntegral: '\u2232',
CloseCurlyDoubleQuote: '\u201D',
CloseCurlyQuote: '\u2019',
clubs: '\u2663',
clubsuit: '\u2663',
colon: ':',
Colon: '\u2237',
colone: '\u2254',
Colone: '\u2A74',
coloneq: '\u2254',
comma: ',',
commat: '@',
comp: '\u2201',
compfn: '\u2218',
complement: '\u2201',
complexes: '\u2102',
cong: '\u2245',
congdot: '\u2A6D',
Congruent: '\u2261',
conint: '\u222E',
Conint: '\u222F',
ContourIntegral: '\u222E',
copf: '\uD835\uDD54',
Copf: '\u2102',
coprod: '\u2210',
Coproduct: '\u2210',
copy: '\xA9',
COPY: '\xA9',
copysr: '\u2117',
CounterClockwiseContourIntegral: '\u2233',
crarr: '\u21B5',
cross: '\u2717',
Cross: '\u2A2F',
cscr: '\uD835\uDCB8',
Cscr: '\uD835\uDC9E',
csub: '\u2ACF',
csube: '\u2AD1',
csup: '\u2AD0',
csupe: '\u2AD2',
ctdot: '\u22EF',
cudarrl: '\u2938',
cudarrr: '\u2935',
cuepr: '\u22DE',
cuesc: '\u22DF',
cularr: '\u21B6',
cularrp: '\u293D',
cup: '\u222A',
Cup: '\u22D3',
cupbrcap: '\u2A48',
cupcap: '\u2A46',
CupCap: '\u224D',
cupcup: '\u2A4A',
cupdot: '\u228D',
cupor: '\u2A45',
cups: '\u222A\uFE00',
curarr: '\u21B7',
curarrm: '\u293C',
curlyeqprec: '\u22DE',
curlyeqsucc: '\u22DF',
curlyvee: '\u22CE',
curlywedge: '\u22CF',
curren: '\xA4',
curvearrowleft: '\u21B6',
curvearrowright: '\u21B7',
cuvee: '\u22CE',
cuwed: '\u22CF',
cwconint: '\u2232',
cwint: '\u2231',
cylcty: '\u232D',
dagger: '\u2020',
Dagger: '\u2021',
daleth: '\u2138',
darr: '\u2193',
dArr: '\u21D3',
Darr: '\u21A1',
dash: '\u2010',
dashv: '\u22A3',
Dashv: '\u2AE4',
dbkarow: '\u290F',
dblac: '\u02DD',
dcaron: '\u010F',
Dcaron: '\u010E',
dcy: '\u0434',
Dcy: '\u0414',
dd: '\u2146',
DD: '\u2145',
ddagger: '\u2021',
ddarr: '\u21CA',
DDotrahd: '\u2911',
ddotseq: '\u2A77',
deg: '\xB0',
Del: '\u2207',
delta: '\u03B4',
Delta: '\u0394',
demptyv: '\u29B1',
dfisht: '\u297F',
dfr: '\uD835\uDD21',
Dfr: '\uD835\uDD07',
dHar: '\u2965',
dharl: '\u21C3',
dharr: '\u21C2',
DiacriticalAcute: '\xB4',
DiacriticalDot: '\u02D9',
DiacriticalDoubleAcute: '\u02DD',
DiacriticalGrave: '`',
DiacriticalTilde: '\u02DC',
diam: '\u22C4',
diamond: '\u22C4',
Diamond: '\u22C4',
diamondsuit: '\u2666',
diams: '\u2666',
die: '\xA8',
DifferentialD: '\u2146',
digamma: '\u03DD',
disin: '\u22F2',
div: '\xF7',
divide: '\xF7',
divideontimes: '\u22C7',
divonx: '\u22C7',
djcy: '\u0452',
DJcy: '\u0402',
dlcorn: '\u231E',
dlcrop: '\u230D',
dollar: '$',
dopf: '\uD835\uDD55',
Dopf: '\uD835\uDD3B',
dot: '\u02D9',
Dot: '\xA8',
DotDot: '\u20DC',
doteq: '\u2250',
doteqdot: '\u2251',
DotEqual: '\u2250',
dotminus: '\u2238',
dotplus: '\u2214',
dotsquare: '\u22A1',
doublebarwedge: '\u2306',
DoubleContourIntegral: '\u222F',
DoubleDot: '\xA8',
DoubleDownArrow: '\u21D3',
DoubleLeftArrow: '\u21D0',
DoubleLeftRightArrow: '\u21D4',
DoubleLeftTee: '\u2AE4',
DoubleLongLeftArrow: '\u27F8',
DoubleLongLeftRightArrow: '\u27FA',
DoubleLongRightArrow: '\u27F9',
DoubleRightArrow: '\u21D2',
DoubleRightTee: '\u22A8',
DoubleUpArrow: '\u21D1',
DoubleUpDownArrow: '\u21D5',
DoubleVerticalBar: '\u2225',
downarrow: '\u2193',
Downarrow: '\u21D3',
DownArrow: '\u2193',
DownArrowBar: '\u2913',
DownArrowUpArrow: '\u21F5',
DownBreve: '\u0311',
downdownarrows: '\u21CA',
downharpoonleft: '\u21C3',
downharpoonright: '\u21C2',
DownLeftRightVector: '\u2950',
DownLeftTeeVector: '\u295E',
DownLeftVector: '\u21BD',
DownLeftVectorBar: '\u2956',
DownRightTeeVector: '\u295F',
DownRightVector: '\u21C1',
DownRightVectorBar: '\u2957',
DownTee: '\u22A4',
DownTeeArrow: '\u21A7',
drbkarow: '\u2910',
drcorn: '\u231F',
drcrop: '\u230C',
dscr: '\uD835\uDCB9',
Dscr: '\uD835\uDC9F',
dscy: '\u0455',
DScy: '\u0405',
dsol: '\u29F6',
dstrok: '\u0111',
Dstrok: '\u0110',
dtdot: '\u22F1',
dtri: '\u25BF',
dtrif: '\u25BE',
duarr: '\u21F5',
duhar: '\u296F',
dwangle: '\u29A6',
dzcy: '\u045F',
DZcy: '\u040F',
dzigrarr: '\u27FF',
eacute: '\xE9',
Eacute: '\xC9',
easter: '\u2A6E',
ecaron: '\u011B',
Ecaron: '\u011A',
ecir: '\u2256',
ecirc: '\xEA',
Ecirc: '\xCA',
ecolon: '\u2255',
ecy: '\u044D',
Ecy: '\u042D',
eDDot: '\u2A77',
edot: '\u0117',
eDot: '\u2251',
Edot: '\u0116',
ee: '\u2147',
efDot: '\u2252',
efr: '\uD835\uDD22',
Efr: '\uD835\uDD08',
eg: '\u2A9A',
egrave: '\xE8',
Egrave: '\xC8',
egs: '\u2A96',
egsdot: '\u2A98',
el: '\u2A99',
Element: '\u2208',
elinters: '\u23E7',
ell: '\u2113',
els: '\u2A95',
elsdot: '\u2A97',
emacr: '\u0113',
Emacr: '\u0112',
empty: '\u2205',
emptyset: '\u2205',
EmptySmallSquare: '\u25FB',
emptyv: '\u2205',
EmptyVerySmallSquare: '\u25AB',
emsp: '\u2003',
emsp13: '\u2004',
emsp14: '\u2005',
eng: '\u014B',
ENG: '\u014A',
ensp: '\u2002',
eogon: '\u0119',
Eogon: '\u0118',
eopf: '\uD835\uDD56',
Eopf: '\uD835\uDD3C',
epar: '\u22D5',
eparsl: '\u29E3',
eplus: '\u2A71',
epsi: '\u03B5',
epsilon: '\u03B5',
Epsilon: '\u0395',
epsiv: '\u03F5',
eqcirc: '\u2256',
eqcolon: '\u2255',
eqsim: '\u2242',
eqslantgtr: '\u2A96',
eqslantless: '\u2A95',
Equal: '\u2A75',
equals: '=',
EqualTilde: '\u2242',
equest: '\u225F',
Equilibrium: '\u21CC',
equiv: '\u2261',
equivDD: '\u2A78',
eqvparsl: '\u29E5',
erarr: '\u2971',
erDot: '\u2253',
escr: '\u212F',
Escr: '\u2130',
esdot: '\u2250',
esim: '\u2242',
Esim: '\u2A73',
eta: '\u03B7',
Eta: '\u0397',
eth: '\xF0',
ETH: '\xD0',
euml: '\xEB',
Euml: '\xCB',
euro: '\u20AC',
excl: '!',
exist: '\u2203',
Exists: '\u2203',
expectation: '\u2130',
exponentiale: '\u2147',
ExponentialE: '\u2147',
fallingdotseq: '\u2252',
fcy: '\u0444',
Fcy: '\u0424',
female: '\u2640',
ffilig: '\uFB03',
fflig: '\uFB00',
ffllig: '\uFB04',
ffr: '\uD835\uDD23',
Ffr: '\uD835\uDD09',
filig: '\uFB01',
FilledSmallSquare: '\u25FC',
FilledVerySmallSquare: '\u25AA',
fjlig: 'fj',
flat: '\u266D',
fllig: '\uFB02',
fltns: '\u25B1',
fnof: '\u0192',
fopf: '\uD835\uDD57',
Fopf: '\uD835\uDD3D',
forall: '\u2200',
ForAll: '\u2200',
fork: '\u22D4',
forkv: '\u2AD9',
Fouriertrf: '\u2131',
fpartint: '\u2A0D',
frac12: '\xBD',
frac13: '\u2153',
frac14: '\xBC',
frac15: '\u2155',
frac16: '\u2159',
frac18: '\u215B',
frac23: '\u2154',
frac25: '\u2156',
frac34: '\xBE',
frac35: '\u2157',
frac38: '\u215C',
frac45: '\u2158',
frac56: '\u215A',
frac58: '\u215D',
frac78: '\u215E',
frasl: '\u2044',
frown: '\u2322',
fscr: '\uD835\uDCBB',
Fscr: '\u2131',
gacute: '\u01F5',
gamma: '\u03B3',
Gamma: '\u0393',
gammad: '\u03DD',
Gammad: '\u03DC',
gap: '\u2A86',
gbreve: '\u011F',
Gbreve: '\u011E',
Gcedil: '\u0122',
gcirc: '\u011D',
Gcirc: '\u011C',
gcy: '\u0433',
Gcy: '\u0413',
gdot: '\u0121',
Gdot: '\u0120',
ge: '\u2265',
gE: '\u2267',
gel: '\u22DB',
gEl: '\u2A8C',
geq: '\u2265',
geqq: '\u2267',
geqslant: '\u2A7E',
ges: '\u2A7E',
gescc: '\u2AA9',
gesdot: '\u2A80',
gesdoto: '\u2A82',
gesdotol: '\u2A84',
gesl: '\u22DB\uFE00',
gesles: '\u2A94',
gfr: '\uD835\uDD24',
Gfr: '\uD835\uDD0A',
gg: '\u226B',
Gg: '\u22D9',
ggg: '\u22D9',
gimel: '\u2137',
gjcy: '\u0453',
GJcy: '\u0403',
gl: '\u2277',
gla: '\u2AA5',
glE: '\u2A92',
glj: '\u2AA4',
gnap: '\u2A8A',
gnapprox: '\u2A8A',
gne: '\u2A88',
gnE: '\u2269',
gneq: '\u2A88',
gneqq: '\u2269',
gnsim: '\u22E7',
gopf: '\uD835\uDD58',
Gopf: '\uD835\uDD3E',
grave: '`',
GreaterEqual: '\u2265',
GreaterEqualLess: '\u22DB',
GreaterFullEqual: '\u2267',
GreaterGreater: '\u2AA2',
GreaterLess: '\u2277',
GreaterSlantEqual: '\u2A7E',
GreaterTilde: '\u2273',
gscr: '\u210A',
Gscr: '\uD835\uDCA2',
gsim: '\u2273',
gsime: '\u2A8E',
gsiml: '\u2A90',
gt: '>',
Gt: '\u226B',
GT: '>',
gtcc: '\u2AA7',
gtcir: '\u2A7A',
gtdot: '\u22D7',
gtlPar: '\u2995',
gtquest: '\u2A7C',
gtrapprox: '\u2A86',
gtrarr: '\u2978',
gtrdot: '\u22D7',
gtreqless: '\u22DB',
gtreqqless: '\u2A8C',
gtrless: '\u2277',
gtrsim: '\u2273',
gvertneqq: '\u2269\uFE00',
gvnE: '\u2269\uFE00',
Hacek: '\u02C7',
hairsp: '\u200A',
half: '\xBD',
hamilt: '\u210B',
hardcy: '\u044A',
HARDcy: '\u042A',
harr: '\u2194',
hArr: '\u21D4',
harrcir: '\u2948',
harrw: '\u21AD',
Hat: '^',
hbar: '\u210F',
hcirc: '\u0125',
Hcirc: '\u0124',
hearts: '\u2665',
heartsuit: '\u2665',
hellip: '\u2026',
hercon: '\u22B9',
hfr: '\uD835\uDD25',
Hfr: '\u210C',
HilbertSpace: '\u210B',
hksearow: '\u2925',
hkswarow: '\u2926',
hoarr: '\u21FF',
homtht: '\u223B',
hookleftarrow: '\u21A9',
hookrightarrow: '\u21AA',
hopf: '\uD835\uDD59',
Hopf: '\u210D',
horbar: '\u2015',
HorizontalLine: '\u2500',
hscr: '\uD835\uDCBD',
Hscr: '\u210B',
hslash: '\u210F',
hstrok: '\u0127',
Hstrok: '\u0126',
HumpDownHump: '\u224E',
HumpEqual: '\u224F',
hybull: '\u2043',
hyphen: '\u2010',
iacute: '\xED',
Iacute: '\xCD',
ic: '\u2063',
icirc: '\xEE',
Icirc: '\xCE',
icy: '\u0438',
Icy: '\u0418',
Idot: '\u0130',
iecy: '\u0435',
IEcy: '\u0415',
iexcl: '\xA1',
iff: '\u21D4',
ifr: '\uD835\uDD26',
Ifr: '\u2111',
igrave: '\xEC',
Igrave: '\xCC',
ii: '\u2148',
iiiint: '\u2A0C',
iiint: '\u222D',
iinfin: '\u29DC',
iiota: '\u2129',
ijlig: '\u0133',
IJlig: '\u0132',
Im: '\u2111',
imacr: '\u012B',
Imacr: '\u012A',
image: '\u2111',
ImaginaryI: '\u2148',
imagline: '\u2110',
imagpart: '\u2111',
imath: '\u0131',
imof: '\u22B7',
imped: '\u01B5',
Implies: '\u21D2',
in: '\u2208',
incare: '\u2105',
infin: '\u221E',
infintie: '\u29DD',
inodot: '\u0131',
int: '\u222B',
Int: '\u222C',
intcal: '\u22BA',
integers: '\u2124',
Integral: '\u222B',
intercal: '\u22BA',
Intersection: '\u22C2',
intlarhk: '\u2A17',
intprod: '\u2A3C',
InvisibleComma: '\u2063',
InvisibleTimes: '\u2062',
iocy: '\u0451',
IOcy: '\u0401',
iogon: '\u012F',
Iogon: '\u012E',
iopf: '\uD835\uDD5A',
Iopf: '\uD835\uDD40',
iota: '\u03B9',
Iota: '\u0399',
iprod: '\u2A3C',
iquest: '\xBF',
iscr: '\uD835\uDCBE',
Iscr: '\u2110',
isin: '\u2208',
isindot: '\u22F5',
isinE: '\u22F9',
isins: '\u22F4',
isinsv: '\u22F3',
isinv: '\u2208',
it: '\u2062',
itilde: '\u0129',
Itilde: '\u0128',
iukcy: '\u0456',
Iukcy: '\u0406',
iuml: '\xEF',
Iuml: '\xCF',
jcirc: '\u0135',
Jcirc: '\u0134',
jcy: '\u0439',
Jcy: '\u0419',
jfr: '\uD835\uDD27',
Jfr: '\uD835\uDD0D',
jmath: '\u0237',
jopf: '\uD835\uDD5B',
Jopf: '\uD835\uDD41',
jscr: '\uD835\uDCBF',
Jscr: '\uD835\uDCA5',
jsercy: '\u0458',
Jsercy: '\u0408',
jukcy: '\u0454',
Jukcy: '\u0404',
kappa: '\u03BA',
Kappa: '\u039A',
kappav: '\u03F0',
kcedil: '\u0137',
Kcedil: '\u0136',
kcy: '\u043A',
Kcy: '\u041A',
kfr: '\uD835\uDD28',
Kfr: '\uD835\uDD0E',
kgreen: '\u0138',
khcy: '\u0445',
KHcy: '\u0425',
kjcy: '\u045C',
KJcy: '\u040C',
kopf: '\uD835\uDD5C',
Kopf: '\uD835\uDD42',
kscr: '\uD835\uDCC0',
Kscr: '\uD835\uDCA6',
lAarr: '\u21DA',
lacute: '\u013A',
Lacute: '\u0139',
laemptyv: '\u29B4',
lagran: '\u2112',
lambda: '\u03BB',
Lambda: '\u039B',
lang: '\u27E8',
Lang: '\u27EA',
langd: '\u2991',
langle: '\u27E8',
lap: '\u2A85',
Laplacetrf: '\u2112',
laquo: '\xAB',
larr: '\u2190',
lArr: '\u21D0',
Larr: '\u219E',
larrb: '\u21E4',
larrbfs: '\u291F',
larrfs: '\u291D',
larrhk: '\u21A9',
larrlp: '\u21AB',
larrpl: '\u2939',
larrsim: '\u2973',
larrtl: '\u21A2',
lat: '\u2AAB',
latail: '\u2919',
lAtail: '\u291B',
late: '\u2AAD',
lates: '\u2AAD\uFE00',
lbarr: '\u290C',
lBarr: '\u290E',
lbbrk: '\u2772',
lbrace: '{',
lbrack: '[',
lbrke: '\u298B',
lbrksld: '\u298F',
lbrkslu: '\u298D',
lcaron: '\u013E',
Lcaron: '\u013D',
lcedil: '\u013C',
Lcedil: '\u013B',
lceil: '\u2308',
lcub: '{',
lcy: '\u043B',
Lcy: '\u041B',
ldca: '\u2936',
ldquo: '\u201C',
ldquor: '\u201E',
ldrdhar: '\u2967',
ldrushar: '\u294B',
ldsh: '\u21B2',
le: '\u2264',
lE: '\u2266',
LeftAngleBracket: '\u27E8',
leftarrow: '\u2190',
Leftarrow: '\u21D0',
LeftArrow: '\u2190',
LeftArrowBar: '\u21E4',
LeftArrowRightArrow: '\u21C6',
leftarrowtail: '\u21A2',
LeftCeiling: '\u2308',
LeftDoubleBracket: '\u27E6',
LeftDownTeeVector: '\u2961',
LeftDownVector: '\u21C3',
LeftDownVectorBar: '\u2959',
LeftFloor: '\u230A',
leftharpoondown: '\u21BD',
leftharpoonup: '\u21BC',
leftleftarrows: '\u21C7',
leftrightarrow: '\u2194',
Leftrightarrow: '\u21D4',
LeftRightArrow: '\u2194',
leftrightarrows: '\u21C6',
leftrightharpoons: '\u21CB',
leftrightsquigarrow: '\u21AD',
LeftRightVector: '\u294E',
LeftTee: '\u22A3',
LeftTeeArrow: '\u21A4',
LeftTeeVector: '\u295A',
leftthreetimes: '\u22CB',
LeftTriangle: '\u22B2',
LeftTriangleBar: '\u29CF',
LeftTriangleEqual: '\u22B4',
LeftUpDownVector: '\u2951',
LeftUpTeeVector: '\u2960',
LeftUpVector: '\u21BF',
LeftUpVectorBar: '\u2958',
LeftVector: '\u21BC',
LeftVectorBar: '\u2952',
leg: '\u22DA',
lEg: '\u2A8B',
leq: '\u2264',
leqq: '\u2266',
leqslant: '\u2A7D',
les: '\u2A7D',
lescc: '\u2AA8',
lesdot: '\u2A7F',
lesdoto: '\u2A81',
lesdotor: '\u2A83',
lesg: '\u22DA\uFE00',
lesges: '\u2A93',
lessapprox: '\u2A85',
lessdot: '\u22D6',
lesseqgtr: '\u22DA',
lesseqqgtr: '\u2A8B',
LessEqualGreater: '\u22DA',
LessFullEqual: '\u2266',
LessGreater: '\u2276',
lessgtr: '\u2276',
LessLess: '\u2AA1',
lesssim: '\u2272',
LessSlantEqual: '\u2A7D',
LessTilde: '\u2272',
lfisht: '\u297C',
lfloor: '\u230A',
lfr: '\uD835\uDD29',
Lfr: '\uD835\uDD0F',
lg: '\u2276',
lgE: '\u2A91',
lHar: '\u2962',
lhard: '\u21BD',
lharu: '\u21BC',
lharul: '\u296A',
lhblk: '\u2584',
ljcy: '\u0459',
LJcy: '\u0409',
ll: '\u226A',
Ll: '\u22D8',
llarr: '\u21C7',
llcorner: '\u231E',
Lleftarrow: '\u21DA',
llhard: '\u296B',
lltri: '\u25FA',
lmidot: '\u0140',
Lmidot: '\u013F',
lmoust: '\u23B0',
lmoustache: '\u23B0',
lnap: '\u2A89',
lnapprox: '\u2A89',
lne: '\u2A87',
lnE: '\u2268',
lneq: '\u2A87',
lneqq: '\u2268',
lnsim: '\u22E6',
loang: '\u27EC',
loarr: '\u21FD',
lobrk: '\u27E6',
longleftarrow: '\u27F5',
Longleftarrow: '\u27F8',
LongLeftArrow: '\u27F5',
longleftrightarrow: '\u27F7',
Longleftrightarrow: '\u27FA',
LongLeftRightArrow: '\u27F7',
longmapsto: '\u27FC',
longrightarrow: '\u27F6',
Longrightarrow: '\u27F9',
LongRightArrow: '\u27F6',
looparrowleft: '\u21AB',
looparrowright: '\u21AC',
lopar: '\u2985',
lopf: '\uD835\uDD5D',
Lopf: '\uD835\uDD43',
loplus: '\u2A2D',
lotimes: '\u2A34',
lowast: '\u2217',
lowbar: '_',
LowerLeftArrow: '\u2199',
LowerRightArrow: '\u2198',
loz: '\u25CA',
lozenge: '\u25CA',
lozf: '\u29EB',
lpar: '(',
lparlt: '\u2993',
lrarr: '\u21C6',
lrcorner: '\u231F',
lrhar: '\u21CB',
lrhard: '\u296D',
lrm: '\u200E',
lrtri: '\u22BF',
lsaquo: '\u2039',
lscr: '\uD835\uDCC1',
Lscr: '\u2112',
lsh: '\u21B0',
Lsh: '\u21B0',
lsim: '\u2272',
lsime: '\u2A8D',
lsimg: '\u2A8F',
lsqb: '[',
lsquo: '\u2018',
lsquor: '\u201A',
lstrok: '\u0142',
Lstrok: '\u0141',
lt: '<',
Lt: '\u226A',
LT: '<',
ltcc: '\u2AA6',
ltcir: '\u2A79',
ltdot: '\u22D6',
lthree: '\u22CB',
ltimes: '\u22C9',
ltlarr: '\u2976',
ltquest: '\u2A7B',
ltri: '\u25C3',
ltrie: '\u22B4',
ltrif: '\u25C2',
ltrPar: '\u2996',
lurdshar: '\u294A',
luruhar: '\u2966',
lvertneqq: '\u2268\uFE00',
lvnE: '\u2268\uFE00',
macr: '\xAF',
male: '\u2642',
malt: '\u2720',
maltese: '\u2720',
map: '\u21A6',
Map: '\u2905',
mapsto: '\u21A6',
mapstodown: '\u21A7',
mapstoleft: '\u21A4',
mapstoup: '\u21A5',
marker: '\u25AE',
mcomma: '\u2A29',
mcy: '\u043C',
Mcy: '\u041C',
mdash: '\u2014',
mDDot: '\u223A',
measuredangle: '\u2221',
MediumSpace: '\u205F',
Mellintrf: '\u2133',
mfr: '\uD835\uDD2A',
Mfr: '\uD835\uDD10',
mho: '\u2127',
micro: '\xB5',
mid: '\u2223',
midast: '*',
midcir: '\u2AF0',
middot: '\xB7',
minus: '\u2212',
minusb: '\u229F',
minusd: '\u2238',
minusdu: '\u2A2A',
MinusPlus: '\u2213',
mlcp: '\u2ADB',
mldr: '\u2026',
mnplus: '\u2213',
models: '\u22A7',
mopf: '\uD835\uDD5E',
Mopf: '\uD835\uDD44',
mp: '\u2213',
mscr: '\uD835\uDCC2',
Mscr: '\u2133',
mstpos: '\u223E',
mu: '\u03BC',
Mu: '\u039C',
multimap: '\u22B8',
mumap: '\u22B8',
nabla: '\u2207',
nacute: '\u0144',
Nacute: '\u0143',
nang: '\u2220\u20D2',
nap: '\u2249',
napE: '\u2A70\u0338',
napid: '\u224B\u0338',
napos: '\u0149',
napprox: '\u2249',
natur: '\u266E',
natural: '\u266E',
naturals: '\u2115',
nbsp: '\xA0',
nbump: '\u224E\u0338',
nbumpe: '\u224F\u0338',
ncap: '\u2A43',
ncaron: '\u0148',
Ncaron: '\u0147',
ncedil: '\u0146',
Ncedil: '\u0145',
ncong: '\u2247',
ncongdot: '\u2A6D\u0338',
ncup: '\u2A42',
ncy: '\u043D',
Ncy: '\u041D',
ndash: '\u2013',
ne: '\u2260',
nearhk: '\u2924',
nearr: '\u2197',
neArr: '\u21D7',
nearrow: '\u2197',
nedot: '\u2250\u0338',
NegativeMediumSpace: '\u200B',
NegativeThickSpace: '\u200B',
NegativeThinSpace: '\u200B',
NegativeVeryThinSpace: '\u200B',
nequiv: '\u2262',
nesear: '\u2928',
nesim: '\u2242\u0338',
NestedGreaterGreater: '\u226B',
NestedLessLess: '\u226A',
NewLine: '\n',
nexist: '\u2204',
nexists: '\u2204',
nfr: '\uD835\uDD2B',
Nfr: '\uD835\uDD11',
nge: '\u2271',
ngE: '\u2267\u0338',
ngeq: '\u2271',
ngeqq: '\u2267\u0338',
ngeqslant: '\u2A7E\u0338',
nges: '\u2A7E\u0338',
nGg: '\u22D9\u0338',
ngsim: '\u2275',
ngt: '\u226F',
nGt: '\u226B\u20D2',
ngtr: '\u226F',
nGtv: '\u226B\u0338',
nharr: '\u21AE',
nhArr: '\u21CE',
nhpar: '\u2AF2',
ni: '\u220B',
nis: '\u22FC',
nisd: '\u22FA',
niv: '\u220B',
njcy: '\u045A',
NJcy: '\u040A',
nlarr: '\u219A',
nlArr: '\u21CD',
nldr: '\u2025',
nle: '\u2270',
nlE: '\u2266\u0338',
nleftarrow: '\u219A',
nLeftarrow: '\u21CD',
nleftrightarrow: '\u21AE',
nLeftrightarrow: '\u21CE',
nleq: '\u2270',
nleqq: '\u2266\u0338',
nleqslant: '\u2A7D\u0338',
nles: '\u2A7D\u0338',
nless: '\u226E',
nLl: '\u22D8\u0338',
nlsim: '\u2274',
nlt: '\u226E',
nLt: '\u226A\u20D2',
nltri: '\u22EA',
nltrie: '\u22EC',
nLtv: '\u226A\u0338',
nmid: '\u2224',
NoBreak: '\u2060',
NonBreakingSpace: '\xA0',
nopf: '\uD835\uDD5F',
Nopf: '\u2115',
not: '\xAC',
Not: '\u2AEC',
NotCongruent: '\u2262',
NotCupCap: '\u226D',
NotDoubleVerticalBar: '\u2226',
NotElement: '\u2209',
NotEqual: '\u2260',
NotEqualTilde: '\u2242\u0338',
NotExists: '\u2204',
NotGreater: '\u226F',
NotGreaterEqual: '\u2271',
NotGreaterFullEqual: '\u2267\u0338',
NotGreaterGreater: '\u226B\u0338',
NotGreaterLess: '\u2279',
NotGreaterSlantEqual: '\u2A7E\u0338',
NotGreaterTilde: '\u2275',
NotHumpDownHump: '\u224E\u0338',
NotHumpEqual: '\u224F\u0338',
notin: '\u2209',
notindot: '\u22F5\u0338',
notinE: '\u22F9\u0338',
notinva: '\u2209',
notinvb: '\u22F7',
notinvc: '\u22F6',
NotLeftTriangle: '\u22EA',
NotLeftTriangleBar: '\u29CF\u0338',
NotLeftTriangleEqual: '\u22EC',
NotLess: '\u226E',
NotLessEqual: '\u2270',
NotLessGreater: '\u2278',
NotLessLess: '\u226A\u0338',
NotLessSlantEqual: '\u2A7D\u0338',
NotLessTilde: '\u2274',
NotNestedGreaterGreater: '\u2AA2\u0338',
NotNestedLessLess: '\u2AA1\u0338',
notni: '\u220C',
notniva: '\u220C',
notnivb: '\u22FE',
notnivc: '\u22FD',
NotPrecedes: '\u2280',
NotPrecedesEqual: '\u2AAF\u0338',
NotPrecedesSlantEqual: '\u22E0',
NotReverseElement: '\u220C',
NotRightTriangle: '\u22EB',
NotRightTriangleBar: '\u29D0\u0338',
NotRightTriangleEqual: '\u22ED',
NotSquareSubset: '\u228F\u0338',
NotSquareSubsetEqual: '\u22E2',
NotSquareSuperset: '\u2290\u0338',
NotSquareSupersetEqual: '\u22E3',
NotSubset: '\u2282\u20D2',
NotSubsetEqual: '\u2288',
NotSucceeds: '\u2281',
NotSucceedsEqual: '\u2AB0\u0338',
NotSucceedsSlantEqual: '\u22E1',
NotSucceedsTilde: '\u227F\u0338',
NotSuperset: '\u2283\u20D2',
NotSupersetEqual: '\u2289',
NotTilde: '\u2241',
NotTildeEqual: '\u2244',
NotTildeFullEqual: '\u2247',
NotTildeTilde: '\u2249',
NotVerticalBar: '\u2224',
npar: '\u2226',
nparallel: '\u2226',
nparsl: '\u2AFD\u20E5',
npart: '\u2202\u0338',
npolint: '\u2A14',
npr: '\u2280',
nprcue: '\u22E0',
npre: '\u2AAF\u0338',
nprec: '\u2280',
npreceq: '\u2AAF\u0338',
nrarr: '\u219B',
nrArr: '\u21CF',
nrarrc: '\u2933\u0338',
nrarrw: '\u219D\u0338',
nrightarrow: '\u219B',
nRightarrow: '\u21CF',
nrtri: '\u22EB',
nrtrie: '\u22ED',
nsc: '\u2281',
nsccue: '\u22E1',
nsce: '\u2AB0\u0338',
nscr: '\uD835\uDCC3',
Nscr: '\uD835\uDCA9',
nshortmid: '\u2224',
nshortparallel: '\u2226',
nsim: '\u2241',
nsime: '\u2244',
nsimeq: '\u2244',
nsmid: '\u2224',
nspar: '\u2226',
nsqsube: '\u22E2',
nsqsupe: '\u22E3',
nsub: '\u2284',
nsube: '\u2288',
nsubE: '\u2AC5\u0338',
nsubset: '\u2282\u20D2',
nsubseteq: '\u2288',
nsubseteqq: '\u2AC5\u0338',
nsucc: '\u2281',
nsucceq: '\u2AB0\u0338',
nsup: '\u2285',
nsupe: '\u2289',
nsupE: '\u2AC6\u0338',
nsupset: '\u2283\u20D2',
nsupseteq: '\u2289',
nsupseteqq: '\u2AC6\u0338',
ntgl: '\u2279',
ntilde: '\xF1',
Ntilde: '\xD1',
ntlg: '\u2278',
ntriangleleft: '\u22EA',
ntrianglelefteq: '\u22EC',
ntriangleright: '\u22EB',
ntrianglerighteq: '\u22ED',
nu: '\u03BD',
Nu: '\u039D',
num: '#',
numero: '\u2116',
numsp: '\u2007',
nvap: '\u224D\u20D2',
nvdash: '\u22AC',
nvDash: '\u22AD',
nVdash: '\u22AE',
nVDash: '\u22AF',
nvge: '\u2265\u20D2',
nvgt: '>\u20D2',
nvHarr: '\u2904',
nvinfin: '\u29DE',
nvlArr: '\u2902',
nvle: '\u2264\u20D2',
nvlt: '<\u20D2',
nvltrie: '\u22B4\u20D2',
nvrArr: '\u2903',
nvrtrie: '\u22B5\u20D2',
nvsim: '\u223C\u20D2',
nwarhk: '\u2923',
nwarr: '\u2196',
nwArr: '\u21D6',
nwarrow: '\u2196',
nwnear: '\u2927',
oacute: '\xF3',
Oacute: '\xD3',
oast: '\u229B',
ocir: '\u229A',
ocirc: '\xF4',
Ocirc: '\xD4',
ocy: '\u043E',
Ocy: '\u041E',
odash: '\u229D',
odblac: '\u0151',
Odblac: '\u0150',
odiv: '\u2A38',
odot: '\u2299',
odsold: '\u29BC',
oelig: '\u0153',
OElig: '\u0152',
ofcir: '\u29BF',
ofr: '\uD835\uDD2C',
Ofr: '\uD835\uDD12',
ogon: '\u02DB',
ograve: '\xF2',
Ograve: '\xD2',
ogt: '\u29C1',
ohbar: '\u29B5',
ohm: '\u03A9',
oint: '\u222E',
olarr: '\u21BA',
olcir: '\u29BE',
olcross: '\u29BB',
oline: '\u203E',
olt: '\u29C0',
omacr: '\u014D',
Omacr: '\u014C',
omega: '\u03C9',
Omega: '\u03A9',
omicron: '\u03BF',
Omicron: '\u039F',
omid: '\u29B6',
ominus: '\u2296',
oopf: '\uD835\uDD60',
Oopf: '\uD835\uDD46',
opar: '\u29B7',
OpenCurlyDoubleQuote: '\u201C',
OpenCurlyQuote: '\u2018',
operp: '\u29B9',
oplus: '\u2295',
or: '\u2228',
Or: '\u2A54',
orarr: '\u21BB',
ord: '\u2A5D',
order: '\u2134',
orderof: '\u2134',
ordf: '\xAA',
ordm: '\xBA',
origof: '\u22B6',
oror: '\u2A56',
orslope: '\u2A57',
orv: '\u2A5B',
oS: '\u24C8',
oscr: '\u2134',
Oscr: '\uD835\uDCAA',
oslash: '\xF8',
Oslash: '\xD8',
osol: '\u2298',
otilde: '\xF5',
Otilde: '\xD5',
otimes: '\u2297',
Otimes: '\u2A37',
otimesas: '\u2A36',
ouml: '\xF6',
Ouml: '\xD6',
ovbar: '\u233D',
OverBar: '\u203E',
OverBrace: '\u23DE',
OverBracket: '\u23B4',
OverParenthesis: '\u23DC',
par: '\u2225',
para: '\xB6',
parallel: '\u2225',
parsim: '\u2AF3',
parsl: '\u2AFD',
part: '\u2202',
PartialD: '\u2202',
pcy: '\u043F',
Pcy: '\u041F',
percnt: '%',
period: '.',
permil: '\u2030',
perp: '\u22A5',
pertenk: '\u2031',
pfr: '\uD835\uDD2D',
Pfr: '\uD835\uDD13',
phi: '\u03C6',
Phi: '\u03A6',
phiv: '\u03D5',
phmmat: '\u2133',
phone: '\u260E',
pi: '\u03C0',
Pi: '\u03A0',
pitchfork: '\u22D4',
piv: '\u03D6',
planck: '\u210F',
planckh: '\u210E',
plankv: '\u210F',
plus: '+',
plusacir: '\u2A23',
plusb: '\u229E',
pluscir: '\u2A22',
plusdo: '\u2214',
plusdu: '\u2A25',
pluse: '\u2A72',
PlusMinus: '\xB1',
plusmn: '\xB1',
plussim: '\u2A26',
plustwo: '\u2A27',
pm: '\xB1',
Poincareplane: '\u210C',
pointint: '\u2A15',
popf: '\uD835\uDD61',
Popf: '\u2119',
pound: '\xA3',
pr: '\u227A',
Pr: '\u2ABB',
prap: '\u2AB7',
prcue: '\u227C',
pre: '\u2AAF',
prE: '\u2AB3',
prec: '\u227A',
precapprox: '\u2AB7',
preccurlyeq: '\u227C',
Precedes: '\u227A',
PrecedesEqual: '\u2AAF',
PrecedesSlantEqual: '\u227C',
PrecedesTilde: '\u227E',
preceq: '\u2AAF',
precnapprox: '\u2AB9',
precneqq: '\u2AB5',
precnsim: '\u22E8',
precsim: '\u227E',
prime: '\u2032',
Prime: '\u2033',
primes: '\u2119',
prnap: '\u2AB9',
prnE: '\u2AB5',
prnsim: '\u22E8',
prod: '\u220F',
Product: '\u220F',
profalar: '\u232E',
profline: '\u2312',
profsurf: '\u2313',
prop: '\u221D',
Proportion: '\u2237',
Proportional: '\u221D',
propto: '\u221D',
prsim: '\u227E',
prurel: '\u22B0',
pscr: '\uD835\uDCC5',
Pscr: '\uD835\uDCAB',
psi: '\u03C8',
Psi: '\u03A8',
puncsp: '\u2008',
qfr: '\uD835\uDD2E',
Qfr: '\uD835\uDD14',
qint: '\u2A0C',
qopf: '\uD835\uDD62',
Qopf: '\u211A',
qprime: '\u2057',
qscr: '\uD835\uDCC6',
Qscr: '\uD835\uDCAC',
quaternions: '\u210D',
quatint: '\u2A16',
quest: '?',
questeq: '\u225F',
quot: '"',
QUOT: '"',
rAarr: '\u21DB',
race: '\u223D\u0331',
racute: '\u0155',
Racute: '\u0154',
radic: '\u221A',
raemptyv: '\u29B3',
rang: '\u27E9',
Rang: '\u27EB',
rangd: '\u2992',
range: '\u29A5',
rangle: '\u27E9',
raquo: '\xBB',
rarr: '\u2192',
rArr: '\u21D2',
Rarr: '\u21A0',
rarrap: '\u2975',
rarrb: '\u21E5',
rarrbfs: '\u2920',
rarrc: '\u2933',
rarrfs: '\u291E',
rarrhk: '\u21AA',
rarrlp: '\u21AC',
rarrpl: '\u2945',
rarrsim: '\u2974',
rarrtl: '\u21A3',
Rarrtl: '\u2916',
rarrw: '\u219D',
ratail: '\u291A',
rAtail: '\u291C',
ratio: '\u2236',
rationals: '\u211A',
rbarr: '\u290D',
rBarr: '\u290F',
RBarr: '\u2910',
rbbrk: '\u2773',
rbrace: '}',
rbrack: ']',
rbrke: '\u298C',
rbrksld: '\u298E',
rbrkslu: '\u2990',
rcaron: '\u0159',
Rcaron: '\u0158',
rcedil: '\u0157',
Rcedil: '\u0156',
rceil: '\u2309',
rcub: '}',
rcy: '\u0440',
Rcy: '\u0420',
rdca: '\u2937',
rdldhar: '\u2969',
rdquo: '\u201D',
rdquor: '\u201D',
rdsh: '\u21B3',
Re: '\u211C',
real: '\u211C',
realine: '\u211B',
realpart: '\u211C',
reals: '\u211D',
rect: '\u25AD',
reg: '\xAE',
REG: '\xAE',
ReverseElement: '\u220B',
ReverseEquilibrium: '\u21CB',
ReverseUpEquilibrium: '\u296F',
rfisht: '\u297D',
rfloor: '\u230B',
rfr: '\uD835\uDD2F',
Rfr: '\u211C',
rHar: '\u2964',
rhard: '\u21C1',
rharu: '\u21C0',
rharul: '\u296C',
rho: '\u03C1',
Rho: '\u03A1',
rhov: '\u03F1',
RightAngleBracket: '\u27E9',
rightarrow: '\u2192',
Rightarrow: '\u21D2',
RightArrow: '\u2192',
RightArrowBar: '\u21E5',
RightArrowLeftArrow: '\u21C4',
rightarrowtail: '\u21A3',
RightCeiling: '\u2309',
RightDoubleBracket: '\u27E7',
RightDownTeeVector: '\u295D',
RightDownVector: '\u21C2',
RightDownVectorBar: '\u2955',
RightFloor: '\u230B',
rightharpoondown: '\u21C1',
rightharpoonup: '\u21C0',
rightleftarrows: '\u21C4',
rightleftharpoons: '\u21CC',
rightrightarrows: '\u21C9',
rightsquigarrow: '\u219D',
RightTee: '\u22A2',
RightTeeArrow: '\u21A6',
RightTeeVector: '\u295B',
rightthreetimes: '\u22CC',
RightTriangle: '\u22B3',
RightTriangleBar: '\u29D0',
RightTriangleEqual: '\u22B5',
RightUpDownVector: '\u294F',
RightUpTeeVector: '\u295C',
RightUpVector: '\u21BE',
RightUpVectorBar: '\u2954',
RightVector: '\u21C0',
RightVectorBar: '\u2953',
ring: '\u02DA',
risingdotseq: '\u2253',
rlarr: '\u21C4',
rlhar: '\u21CC',
rlm: '\u200F',
rmoust: '\u23B1',
rmoustache: '\u23B1',
rnmid: '\u2AEE',
roang: '\u27ED',
roarr: '\u21FE',
robrk: '\u27E7',
ropar: '\u2986',
ropf: '\uD835\uDD63',
Ropf: '\u211D',
roplus: '\u2A2E',
rotimes: '\u2A35',
RoundImplies: '\u2970',
rpar: ')',
rpargt: '\u2994',
rppolint: '\u2A12',
rrarr: '\u21C9',
Rrightarrow: '\u21DB',
rsaquo: '\u203A',
rscr: '\uD835\uDCC7',
Rscr: '\u211B',
rsh: '\u21B1',
Rsh: '\u21B1',
rsqb: ']',
rsquo: '\u2019',
rsquor: '\u2019',
rthree: '\u22CC',
rtimes: '\u22CA',
rtri: '\u25B9',
rtrie: '\u22B5',
rtrif: '\u25B8',
rtriltri: '\u29CE',
RuleDelayed: '\u29F4',
ruluhar: '\u2968',
rx: '\u211E',
sacute: '\u015B',
Sacute: '\u015A',
sbquo: '\u201A',
sc: '\u227B',
Sc: '\u2ABC',
scap: '\u2AB8',
scaron: '\u0161',
Scaron: '\u0160',
sccue: '\u227D',
sce: '\u2AB0',
scE: '\u2AB4',
scedil: '\u015F',
Scedil: '\u015E',
scirc: '\u015D',
Scirc: '\u015C',
scnap: '\u2ABA',
scnE: '\u2AB6',
scnsim: '\u22E9',
scpolint: '\u2A13',
scsim: '\u227F',
scy: '\u0441',
Scy: '\u0421',
sdot: '\u22C5',
sdotb: '\u22A1',
sdote: '\u2A66',
searhk: '\u2925',
searr: '\u2198',
seArr: '\u21D8',
searrow: '\u2198',
sect: '\xA7',
semi: ';',
seswar: '\u2929',
setminus: '\u2216',
setmn: '\u2216',
sext: '\u2736',
sfr: '\uD835\uDD30',
Sfr: '\uD835\uDD16',
sfrown: '\u2322',
sharp: '\u266F',
shchcy: '\u0449',
SHCHcy: '\u0429',
shcy: '\u0448',
SHcy: '\u0428',
ShortDownArrow: '\u2193',
ShortLeftArrow: '\u2190',
shortmid: '\u2223',
shortparallel: '\u2225',
ShortRightArrow: '\u2192',
ShortUpArrow: '\u2191',
shy: '\xAD',
sigma: '\u03C3',
Sigma: '\u03A3',
sigmaf: '\u03C2',
sigmav: '\u03C2',
sim: '\u223C',
simdot: '\u2A6A',
sime: '\u2243',
simeq: '\u2243',
simg: '\u2A9E',
simgE: '\u2AA0',
siml: '\u2A9D',
simlE: '\u2A9F',
simne: '\u2246',
simplus: '\u2A24',
simrarr: '\u2972',
slarr: '\u2190',
SmallCircle: '\u2218',
smallsetminus: '\u2216',
smashp: '\u2A33',
smeparsl: '\u29E4',
smid: '\u2223',
smile: '\u2323',
smt: '\u2AAA',
smte: '\u2AAC',
smtes: '\u2AAC\uFE00',
softcy: '\u044C',
SOFTcy: '\u042C',
sol: '/',
solb: '\u29C4',
solbar: '\u233F',
sopf: '\uD835\uDD64',
Sopf: '\uD835\uDD4A',
spades: '\u2660',
spadesuit: '\u2660',
spar: '\u2225',
sqcap: '\u2293',
sqcaps: '\u2293\uFE00',
sqcup: '\u2294',
sqcups: '\u2294\uFE00',
Sqrt: '\u221A',
sqsub: '\u228F',
sqsube: '\u2291',
sqsubset: '\u228F',
sqsubseteq: '\u2291',
sqsup: '\u2290',
sqsupe: '\u2292',
sqsupset: '\u2290',
sqsupseteq: '\u2292',
squ: '\u25A1',
square: '\u25A1',
Square: '\u25A1',
SquareIntersection: '\u2293',
SquareSubset: '\u228F',
SquareSubsetEqual: '\u2291',
SquareSuperset: '\u2290',
SquareSupersetEqual: '\u2292',
SquareUnion: '\u2294',
squarf: '\u25AA',
squf: '\u25AA',
srarr: '\u2192',
sscr: '\uD835\uDCC8',
Sscr: '\uD835\uDCAE',
ssetmn: '\u2216',
ssmile: '\u2323',
sstarf: '\u22C6',
star: '\u2606',
Star: '\u22C6',
starf: '\u2605',
straightepsilon: '\u03F5',
straightphi: '\u03D5',
strns: '\xAF',
sub: '\u2282',
Sub: '\u22D0',
subdot: '\u2ABD',
sube: '\u2286',
subE: '\u2AC5',
subedot: '\u2AC3',
submult: '\u2AC1',
subne: '\u228A',
subnE: '\u2ACB',
subplus: '\u2ABF',
subrarr: '\u2979',
subset: '\u2282',
Subset: '\u22D0',
subseteq: '\u2286',
subseteqq: '\u2AC5',
SubsetEqual: '\u2286',
subsetneq: '\u228A',
subsetneqq: '\u2ACB',
subsim: '\u2AC7',
subsub: '\u2AD5',
subsup: '\u2AD3',
succ: '\u227B',
succapprox: '\u2AB8',
succcurlyeq: '\u227D',
Succeeds: '\u227B',
SucceedsEqual: '\u2AB0',
SucceedsSlantEqual: '\u227D',
SucceedsTilde: '\u227F',
succeq: '\u2AB0',
succnapprox: '\u2ABA',
succneqq: '\u2AB6',
succnsim: '\u22E9',
succsim: '\u227F',
SuchThat: '\u220B',
sum: '\u2211',
Sum: '\u2211',
sung: '\u266A',
sup: '\u2283',
Sup: '\u22D1',
sup1: '\xB9',
sup2: '\xB2',
sup3: '\xB3',
supdot: '\u2ABE',
supdsub: '\u2AD8',
supe: '\u2287',
supE: '\u2AC6',
supedot: '\u2AC4',
Superset: '\u2283',
SupersetEqual: '\u2287',
suphsol: '\u27C9',
suphsub: '\u2AD7',
suplarr: '\u297B',
supmult: '\u2AC2',
supne: '\u228B',
supnE: '\u2ACC',
supplus: '\u2AC0',
supset: '\u2283',
Supset: '\u22D1',
supseteq: '\u2287',
supseteqq: '\u2AC6',
supsetneq: '\u228B',
supsetneqq: '\u2ACC',
supsim: '\u2AC8',
supsub: '\u2AD4',
supsup: '\u2AD6',
swarhk: '\u2926',
swarr: '\u2199',
swArr: '\u21D9',
swarrow: '\u2199',
swnwar: '\u292A',
szlig: '\xDF',
Tab: '\t',
target: '\u2316',
tau: '\u03C4',
Tau: '\u03A4',
tbrk: '\u23B4',
tcaron: '\u0165',
Tcaron: '\u0164',
tcedil: '\u0163',
Tcedil: '\u0162',
tcy: '\u0442',
Tcy: '\u0422',
tdot: '\u20DB',
telrec: '\u2315',
tfr: '\uD835\uDD31',
Tfr: '\uD835\uDD17',
there4: '\u2234',
therefore: '\u2234',
Therefore: '\u2234',
theta: '\u03B8',
Theta: '\u0398',
thetasym: '\u03D1',
thetav: '\u03D1',
thickapprox: '\u2248',
thicksim: '\u223C',
ThickSpace: '\u205F\u200A',
thinsp: '\u2009',
ThinSpace: '\u2009',
thkap: '\u2248',
thksim: '\u223C',
thorn: '\xFE',
THORN: '\xDE',
tilde: '\u02DC',
Tilde: '\u223C',
TildeEqual: '\u2243',
TildeFullEqual: '\u2245',
TildeTilde: '\u2248',
times: '\xD7',
timesb: '\u22A0',
timesbar: '\u2A31',
timesd: '\u2A30',
tint: '\u222D',
toea: '\u2928',
top: '\u22A4',
topbot: '\u2336',
topcir: '\u2AF1',
topf: '\uD835\uDD65',
Topf: '\uD835\uDD4B',
topfork: '\u2ADA',
tosa: '\u2929',
tprime: '\u2034',
trade: '\u2122',
TRADE: '\u2122',
triangle: '\u25B5',
triangledown: '\u25BF',
triangleleft: '\u25C3',
trianglelefteq: '\u22B4',
triangleq: '\u225C',
triangleright: '\u25B9',
trianglerighteq: '\u22B5',
tridot: '\u25EC',
trie: '\u225C',
triminus: '\u2A3A',
TripleDot: '\u20DB',
triplus: '\u2A39',
trisb: '\u29CD',
tritime: '\u2A3B',
trpezium: '\u23E2',
tscr: '\uD835\uDCC9',
Tscr: '\uD835\uDCAF',
tscy: '\u0446',
TScy: '\u0426',
tshcy: '\u045B',
TSHcy: '\u040B',
tstrok: '\u0167',
Tstrok: '\u0166',
twixt: '\u226C',
twoheadleftarrow: '\u219E',
twoheadrightarrow: '\u21A0',
uacute: '\xFA',
Uacute: '\xDA',
uarr: '\u2191',
uArr: '\u21D1',
Uarr: '\u219F',
Uarrocir: '\u2949',
ubrcy: '\u045E',
Ubrcy: '\u040E',
ubreve: '\u016D',
Ubreve: '\u016C',
ucirc: '\xFB',
Ucirc: '\xDB',
ucy: '\u0443',
Ucy: '\u0423',
udarr: '\u21C5',
udblac: '\u0171',
Udblac: '\u0170',
udhar: '\u296E',
ufisht: '\u297E',
ufr: '\uD835\uDD32',
Ufr: '\uD835\uDD18',
ugrave: '\xF9',
Ugrave: '\xD9',
uHar: '\u2963',
uharl: '\u21BF',
uharr: '\u21BE',
uhblk: '\u2580',
ulcorn: '\u231C',
ulcorner: '\u231C',
ulcrop: '\u230F',
ultri: '\u25F8',
umacr: '\u016B',
Umacr: '\u016A',
uml: '\xA8',
UnderBar: '_',
UnderBrace: '\u23DF',
UnderBracket: '\u23B5',
UnderParenthesis: '\u23DD',
Union: '\u22C3',
UnionPlus: '\u228E',
uogon: '\u0173',
Uogon: '\u0172',
uopf: '\uD835\uDD66',
Uopf: '\uD835\uDD4C',
uparrow: '\u2191',
Uparrow: '\u21D1',
UpArrow: '\u2191',
UpArrowBar: '\u2912',
UpArrowDownArrow: '\u21C5',
updownarrow: '\u2195',
Updownarrow: '\u21D5',
UpDownArrow: '\u2195',
UpEquilibrium: '\u296E',
upharpoonleft: '\u21BF',
upharpoonright: '\u21BE',
uplus: '\u228E',
UpperLeftArrow: '\u2196',
UpperRightArrow: '\u2197',
upsi: '\u03C5',
Upsi: '\u03D2',
upsih: '\u03D2',
upsilon: '\u03C5',
Upsilon: '\u03A5',
UpTee: '\u22A5',
UpTeeArrow: '\u21A5',
upuparrows: '\u21C8',
urcorn: '\u231D',
urcorner: '\u231D',
urcrop: '\u230E',
uring: '\u016F',
Uring: '\u016E',
urtri: '\u25F9',
uscr: '\uD835\uDCCA',
Uscr: '\uD835\uDCB0',
utdot: '\u22F0',
utilde: '\u0169',
Utilde: '\u0168',
utri: '\u25B5',
utrif: '\u25B4',
uuarr: '\u21C8',
uuml: '\xFC',
Uuml: '\xDC',
uwangle: '\u29A7',
vangrt: '\u299C',
varepsilon: '\u03F5',
varkappa: '\u03F0',
varnothing: '\u2205',
varphi: '\u03D5',
varpi: '\u03D6',
varpropto: '\u221D',
varr: '\u2195',
vArr: '\u21D5',
varrho: '\u03F1',
varsigma: '\u03C2',
varsubsetneq: '\u228A\uFE00',
varsubsetneqq: '\u2ACB\uFE00',
varsupsetneq: '\u228B\uFE00',
varsupsetneqq: '\u2ACC\uFE00',
vartheta: '\u03D1',
vartriangleleft: '\u22B2',
vartriangleright: '\u22B3',
vBar: '\u2AE8',
Vbar: '\u2AEB',
vBarv: '\u2AE9',
vcy: '\u0432',
Vcy: '\u0412',
vdash: '\u22A2',
vDash: '\u22A8',
Vdash: '\u22A9',
VDash: '\u22AB',
Vdashl: '\u2AE6',
vee: '\u2228',
Vee: '\u22C1',
veebar: '\u22BB',
veeeq: '\u225A',
vellip: '\u22EE',
verbar: '|',
Verbar: '\u2016',
vert: '|',
Vert: '\u2016',
VerticalBar: '\u2223',
VerticalLine: '|',
VerticalSeparator: '\u2758',
VerticalTilde: '\u2240',
VeryThinSpace: '\u200A',
vfr: '\uD835\uDD33',
Vfr: '\uD835\uDD19',
vltri: '\u22B2',
vnsub: '\u2282\u20D2',
vnsup: '\u2283\u20D2',
vopf: '\uD835\uDD67',
Vopf: '\uD835\uDD4D',
vprop: '\u221D',
vrtri: '\u22B3',
vscr: '\uD835\uDCCB',
Vscr: '\uD835\uDCB1',
vsubne: '\u228A\uFE00',
vsubnE: '\u2ACB\uFE00',
vsupne: '\u228B\uFE00',
vsupnE: '\u2ACC\uFE00',
Vvdash: '\u22AA',
vzigzag: '\u299A',
wcirc: '\u0175',
Wcirc: '\u0174',
wedbar: '\u2A5F',
wedge: '\u2227',
Wedge: '\u22C0',
wedgeq: '\u2259',
weierp: '\u2118',
wfr: '\uD835\uDD34',
Wfr: '\uD835\uDD1A',
wopf: '\uD835\uDD68',
Wopf: '\uD835\uDD4E',
wp: '\u2118',
wr: '\u2240',
wreath: '\u2240',
wscr: '\uD835\uDCCC',
Wscr: '\uD835\uDCB2',
xcap: '\u22C2',
xcirc: '\u25EF',
xcup: '\u22C3',
xdtri: '\u25BD',
xfr: '\uD835\uDD35',
Xfr: '\uD835\uDD1B',
xharr: '\u27F7',
xhArr: '\u27FA',
xi: '\u03BE',
Xi: '\u039E',
xlarr: '\u27F5',
xlArr: '\u27F8',
xmap: '\u27FC',
xnis: '\u22FB',
xodot: '\u2A00',
xopf: '\uD835\uDD69',
Xopf: '\uD835\uDD4F',
xoplus: '\u2A01',
xotime: '\u2A02',
xrarr: '\u27F6',
xrArr: '\u27F9',
xscr: '\uD835\uDCCD',
Xscr: '\uD835\uDCB3',
xsqcup: '\u2A06',
xuplus: '\u2A04',
xutri: '\u25B3',
xvee: '\u22C1',
xwedge: '\u22C0',
yacute: '\xFD',
Yacute: '\xDD',
yacy: '\u044F',
YAcy: '\u042F',
ycirc: '\u0177',
Ycirc: '\u0176',
ycy: '\u044B',
Ycy: '\u042B',
yen: '\xA5',
yfr: '\uD835\uDD36',
Yfr: '\uD835\uDD1C',
yicy: '\u0457',
YIcy: '\u0407',
yopf: '\uD835\uDD6A',
Yopf: '\uD835\uDD50',
yscr: '\uD835\uDCCE',
Yscr: '\uD835\uDCB4',
yucy: '\u044E',
YUcy: '\u042E',
yuml: '\xFF',
Yuml: '\u0178',
zacute: '\u017A',
Zacute: '\u0179',
zcaron: '\u017E',
Zcaron: '\u017D',
zcy: '\u0437',
Zcy: '\u0417',
zdot: '\u017C',
Zdot: '\u017B',
zeetrf: '\u2128',
ZeroWidthSpace: '\u200B',
zeta: '\u03B6',
Zeta: '\u0396',
zfr: '\uD835\uDD37',
Zfr: '\u2128',
zhcy: '\u0436',
ZHcy: '\u0416',
zigrarr: '\u21DD',
zopf: '\uD835\uDD6B',
Zopf: '\u2124',
zscr: '\uD835\uDCCF',
Zscr: '\uD835\uDCB5',
zwj: '\u200D',
zwnj: '\u200C'
}
var decodeMapLegacy = {
aacute: '\xE1',
Aacute: '\xC1',
acirc: '\xE2',
Acirc: '\xC2',
acute: '\xB4',
aelig: '\xE6',
AElig: '\xC6',
agrave: '\xE0',
Agrave: '\xC0',
amp: '&',
AMP: '&',
aring: '\xE5',
Aring: '\xC5',
atilde: '\xE3',
Atilde: '\xC3',
auml: '\xE4',
Auml: '\xC4',
brvbar: '\xA6',
ccedil: '\xE7',
Ccedil: '\xC7',
cedil: '\xB8',
cent: '\xA2',
copy: '\xA9',
COPY: '\xA9',
curren: '\xA4',
deg: '\xB0',
divide: '\xF7',
eacute: '\xE9',
Eacute: '\xC9',
ecirc: '\xEA',
Ecirc: '\xCA',
egrave: '\xE8',
Egrave: '\xC8',
eth: '\xF0',
ETH: '\xD0',
euml: '\xEB',
Euml: '\xCB',
frac12: '\xBD',
frac14: '\xBC',
frac34: '\xBE',
gt: '>',
GT: '>',
iacute: '\xED',
Iacute: '\xCD',
icirc: '\xEE',
Icirc: '\xCE',
iexcl: '\xA1',
igrave: '\xEC',
Igrave: '\xCC',
iquest: '\xBF',
iuml: '\xEF',
Iuml: '\xCF',
laquo: '\xAB',
lt: '<',
LT: '<',
macr: '\xAF',
micro: '\xB5',
middot: '\xB7',
nbsp: '\xA0',
not: '\xAC',
ntilde: '\xF1',
Ntilde: '\xD1',
oacute: '\xF3',
Oacute: '\xD3',
ocirc: '\xF4',
Ocirc: '\xD4',
ograve: '\xF2',
Ograve: '\xD2',
ordf: '\xAA',
ordm: '\xBA',
oslash: '\xF8',
Oslash: '\xD8',
otilde: '\xF5',
Otilde: '\xD5',
ouml: '\xF6',
Ouml: '\xD6',
para: '\xB6',
plusmn: '\xB1',
pound: '\xA3',
quot: '"',
QUOT: '"',
raquo: '\xBB',
reg: '\xAE',
REG: '\xAE',
sect: '\xA7',
shy: '\xAD',
sup1: '\xB9',
sup2: '\xB2',
sup3: '\xB3',
szlig: '\xDF',
thorn: '\xFE',
THORN: '\xDE',
times: '\xD7',
uacute: '\xFA',
Uacute: '\xDA',
ucirc: '\xFB',
Ucirc: '\xDB',
ugrave: '\xF9',
Ugrave: '\xD9',
uml: '\xA8',
uuml: '\xFC',
Uuml: '\xDC',
yacute: '\xFD',
Yacute: '\xDD',
yen: '\xA5',
yuml: '\xFF'
}
var decodeMapNumeric = {
0: '\uFFFD',
128: '\u20AC',
130: '\u201A',
131: '\u0192',
132: '\u201E',
133: '\u2026',
134: '\u2020',
135: '\u2021',
136: '\u02C6',
137: '\u2030',
138: '\u0160',
139: '\u2039',
140: '\u0152',
142: '\u017D',
145: '\u2018',
146: '\u2019',
147: '\u201C',
148: '\u201D',
149: '\u2022',
150: '\u2013',
151: '\u2014',
152: '\u02DC',
153: '\u2122',
154: '\u0161',
155: '\u203A',
156: '\u0153',
158: '\u017E',
159: '\u0178'
}
var invalidReferenceCodePoints = [
1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 64976, 64977,
64978, 64979, 64980, 64981, 64982, 64983, 64984, 64985, 64986, 64987,
64988, 64989, 64990, 64991, 64992, 64993, 64994, 64995, 64996, 64997,
64998, 64999, 65000, 65001, 65002, 65003, 65004, 65005, 65006, 65007,
65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678,
327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823,
655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502,
917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111
]
/*--------------------------------------------------------------------------*/
var stringFromCharCode = String.fromCharCode
var object = {}
var hasOwnProperty = object.hasOwnProperty
var has = function (object, propertyName) {
return hasOwnProperty.call(object, propertyName)
}
var contains = function (array, value) {
var index = -1
var length = array.length
while (++index < length) {
if (array[index] == value) {
return true
}
}
return false
}
var merge = function (options, defaults) {
if (!options) {
return defaults
}
var result = {}
var key
for (key in defaults) {
// A `hasOwnProperty` check is not needed here, since only recognized
// option names are used anyway. Any others are ignored.
result[key] = has(options, key) ? options[key] : defaults[key]
}
return result
}
// Modified version of `ucs2encode`; see https://mths.be/punycode.
var codePointToSymbol = function (codePoint, strict) {
var output = ''
if (
(codePoint >= 0xd800 && codePoint <= 0xdfff) ||
codePoint > 0x10ffff
) {
// See issue #4:
// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
// REPLACEMENT CHARACTER.”
if (strict) {
parseError(
'character reference outside the permissible Unicode range'
)
}
return '\uFFFD'
}
if (has(decodeMapNumeric, codePoint)) {
if (strict) {
parseError('disallowed character reference')
}
return decodeMapNumeric[codePoint]
}
if (strict && contains(invalidReferenceCodePoints, codePoint)) {
parseError('disallowed character reference')
}
if (codePoint > 0xffff) {
codePoint -= 0x10000
output += stringFromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800)
codePoint = 0xdc00 | (codePoint & 0x3ff)
}
output += stringFromCharCode(codePoint)
return output
}
var hexEscape = function (codePoint) {
return '&#x' + codePoint.toString(16).toUpperCase() + ';'
}
var decEscape = function (codePoint) {
return '&#' + codePoint + ';'
}
var parseError = function (message) {
throw Error('Parse error: ' + message)
}
/*--------------------------------------------------------------------------*/
var encode = function (string, options) {
options = merge(options, encode.options)
var strict = options.strict
if (strict && regexInvalidRawCodePoint.test(string)) {
parseError('forbidden code point')
}
var encodeEverything = options.encodeEverything
var useNamedReferences = options.useNamedReferences
var allowUnsafeSymbols = options.allowUnsafeSymbols
var escapeCodePoint = options.decimal ? decEscape : hexEscape
var escapeBmpSymbol = function (symbol) {
return escapeCodePoint(symbol.charCodeAt(0))
}
if (encodeEverything) {
// Encode ASCII symbols.
string = string.replace(regexAsciiWhitelist, function (symbol) {
// Use named references if requested & possible.
if (useNamedReferences && has(encodeMap, symbol)) {
return '&' + encodeMap[symbol] + ';'
}
return escapeBmpSymbol(symbol)
})
// Shorten a few escapes that represent two symbols, of which at least one
// is within the ASCII range.
if (useNamedReferences) {
string = string
.replace(/&gt;\u20D2/g, '&nvgt;')
.replace(/&lt;\u20D2/g, '&nvlt;')
.replace(/&#x66;&#x6A;/g, '&fjlig;')
}
// Encode non-ASCII symbols.
if (useNamedReferences) {
// Encode non-ASCII symbols that can be replaced with a named reference.
string = string.replace(regexEncodeNonAscii, function (string) {
// Note: there is no need to check `has(encodeMap, string)` here.
return '&' + encodeMap[string] + ';'
})
}
// Note: any remaining non-ASCII symbols are handled outside of the `if`.
} else if (useNamedReferences) {
// Apply named character references.
// Encode `<>"'&` using named character references.
if (!allowUnsafeSymbols) {
string = string.replace(regexEscape, function (string) {
return '&' + encodeMap[string] + ';' // no need to check `has()` here
})
}
// Shorten escapes that represent two symbols, of which at least one is
// `<>"'&`.
string = string
.replace(/&gt;\u20D2/g, '&nvgt;')
.replace(/&lt;\u20D2/g, '&nvlt;')
// Encode non-ASCII symbols that can be replaced with a named reference.
string = string.replace(regexEncodeNonAscii, function (string) {
// Note: there is no need to check `has(encodeMap, string)` here.
return '&' + encodeMap[string] + ';'
})
} else if (!allowUnsafeSymbols) {
// Encode `<>"'&` using hexadecimal escapes, now that theyre not handled
// using named character references.
string = string.replace(regexEscape, escapeBmpSymbol)
}
return (
string
// Encode astral symbols.
.replace(regexAstralSymbols, function ($0) {
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
var high = $0.charCodeAt(0)
var low = $0.charCodeAt(1)
var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000
return escapeCodePoint(codePoint)
})
// Encode any remaining BMP symbols that are not printable ASCII symbols
// using a hexadecimal escape.
.replace(regexBmpWhitelist, escapeBmpSymbol)
)
}
// Expose default options (so they can be overridden globally).
encode.options = {
allowUnsafeSymbols: false,
encodeEverything: false,
strict: false,
useNamedReferences: false,
decimal: false
}
var decode = function (html, options) {
options = merge(options, decode.options)
var strict = options.strict
if (strict && regexInvalidEntity.test(html)) {
parseError('malformed character reference')
}
return html.replace(
regexDecode,
function ($0, $1, $2, $3, $4, $5, $6, $7, $8) {
var codePoint
var semicolon
var decDigits
var hexDigits
var reference
var next
if ($1) {
reference = $1
// Note: there is no need to check `has(decodeMap, reference)`.
return decodeMap[reference]
}
if ($2) {
// Decode named character references without trailing `;`, e.g. `&amp`.
// This is only a parse error if it gets converted to `&`, or if it is
// followed by `=` in an attribute context.
reference = $2
next = $3
if (next && options.isAttributeValue) {
if (strict && next == '=') {
parseError('`&` did not start a character reference')
}
return $0
} else {
if (strict) {
parseError(
'named character reference was not terminated by a semicolon'
)
}
// Note: there is no need to check `has(decodeMapLegacy, reference)`.
return decodeMapLegacy[reference] + (next || '')
}
}
if ($4) {
// Decode decimal escapes, e.g. `&#119558;`.
decDigits = $4
semicolon = $5
if (strict && !semicolon) {
parseError(
'character reference was not terminated by a semicolon'
)
}
codePoint = parseInt(decDigits, 10)
return codePointToSymbol(codePoint, strict)
}
if ($6) {
// Decode hexadecimal escapes, e.g. `&#x1D306;`.
hexDigits = $6
semicolon = $7
if (strict && !semicolon) {
parseError(
'character reference was not terminated by a semicolon'
)
}
codePoint = parseInt(hexDigits, 16)
return codePointToSymbol(codePoint, strict)
}
// If were still here, `if ($7)` is implied; its an ambiguous
// ampersand for sure. https://mths.be/notes/ambiguous-ampersands
if (strict) {
parseError(
'named character reference was not terminated by a semicolon'
)
}
return $0
}
)
}
// Expose default options (so they can be overridden globally).
decode.options = {
isAttributeValue: false,
strict: false
}
var escape = function (string) {
return string.replace(regexEscape, function ($0) {
// Note: there is no need to check `has(escapeMap, $0)` here.
return escapeMap[$0]
})
}
/*--------------------------------------------------------------------------*/
var he = {
version: '1.2.0',
encode: encode,
decode: decode,
escape: escape,
unescape: decode
}
// Some AMD build optimizers, like r.js, check for specific condition patterns
// like the following:
if (freeExports && !freeExports.nodeType) {
if (freeModule) {
// in Node.js, io.js, or RingoJS v0.8.0+
freeModule.exports = he
} else {
// in Narwhal or RingoJS v0.7.0-
for (var key in he) {
has(he, key) && (freeExports[key] = he[key])
}
}
} else {
// in Rhino or a web browser
root.he = he
}
})(commonjsGlobal)
})(he$1, he$1.exports)
var he = he$1.exports
/**
* Cross-platform code generation for component v-model
*/
function genComponentModel(el, value, modifiers) {
var _a = modifiers || {},
number = _a.number,
trim = _a.trim
var baseValueExpression = '$$v'
var valueExpression = baseValueExpression
if (trim) {
valueExpression =
'(typeof '.concat(baseValueExpression, " === 'string'") +
'? '.concat(baseValueExpression, '.trim()') +
': '.concat(baseValueExpression, ')')
}
if (number) {
valueExpression = '_n('.concat(valueExpression, ')')
}
var assignment = genAssignmentCode(value, valueExpression)
el.model = {
value: '('.concat(value, ')'),
expression: JSON.stringify(value),
callback: 'function ('
.concat(baseValueExpression, ') {')
.concat(assignment, '}')
}
}
/**
* Cross-platform codegen helper for generating v-model value assignment code.
*/
function genAssignmentCode(value, assignment) {
var res = parseModel(value)
if (res.key === null) {
return ''.concat(value, '=').concat(assignment)
} else {
return '$set('
.concat(res.exp, ', ')
.concat(res.key, ', ')
.concat(assignment, ')')
}
}
/**
* Parse a v-model expression into a base path and a final key segment.
* Handles both dot-path and possible square brackets.
*
* Possible cases:
*
* - test
* - test[key]
* - test[test1[key]]
* - test["a"][key]
* - xxx.test[a[a].test1[key]]
* - test.xxx.a["asa"][test1[key]]
*
*/
var len, str, chr, index, expressionPos, expressionEndPos
function parseModel(val) {
// Fix https://github.com/vuejs/vue/pull/7730
// allow v-model="obj.val " (trailing whitespace)
val = val.trim()
len = val.length
if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
index = val.lastIndexOf('.')
if (index > -1) {
return {
exp: val.slice(0, index),
key: '"' + val.slice(index + 1) + '"'
}
} else {
return {
exp: val,
key: null
}
}
}
str = val
index = expressionPos = expressionEndPos = 0
while (!eof()) {
chr = next()
/* istanbul ignore if */
if (isStringStart(chr)) {
parseString(chr)
} else if (chr === 0x5b) {
parseBracket(chr)
}
}
return {
exp: val.slice(0, expressionPos),
key: val.slice(expressionPos + 1, expressionEndPos)
}
}
function next() {
return str.charCodeAt(++index)
}
function eof() {
return index >= len
}
function isStringStart(chr) {
return chr === 0x22 || chr === 0x27
}
function parseBracket(chr) {
var inBracket = 1
expressionPos = index
while (!eof()) {
chr = next()
if (isStringStart(chr)) {
parseString(chr)
continue
}
if (chr === 0x5b) inBracket++
if (chr === 0x5d) inBracket--
if (inBracket === 0) {
expressionEndPos = index
break
}
}
}
function parseString(chr) {
var stringQuote = chr
while (!eof()) {
chr = next()
if (chr === stringQuote) {
break
}
}
}
var onRE = /^@|^v-on:/
var dirRE = /^v-|^@|^:|^#/
var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/
var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/
var stripParensRE = /^\(|\)$/g
var dynamicArgRE = /^\[.*\]$/
var argRE = /:(.*)$/
var bindRE = /^:|^\.|^v-bind:/
var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g
var slotRE = /^v-slot(:|$)|^#/
var lineBreakRE = /[\r\n]/
var whitespaceRE = /[ \f\t\r\n]+/g
var invalidAttributeRE = /[\s"'<>\/=]/
var decodeHTMLCached = cached(he.decode)
var emptySlotScopeToken = '_empty_'
// configurable state
var warn$1
var delimiters
var transforms
var preTransforms
var postTransforms
var platformIsPreTag
var platformMustUseProp
var platformGetTagNamespace
var maybeComponent
function createASTElement(tag, attrs, parent) {
return {
type: 1,
tag: tag,
attrsList: attrs,
attrsMap: makeAttrsMap(attrs),
rawAttrsMap: {},
parent: parent,
children: []
}
}
/**
* Convert HTML string to AST.
*/
function parse(template, options) {
warn$1 = options.warn || baseWarn
platformIsPreTag = options.isPreTag || no
platformMustUseProp = options.mustUseProp || no
platformGetTagNamespace = options.getTagNamespace || no
var isReservedTag = options.isReservedTag || no
maybeComponent = function (el) {
return !!(
el.component ||
el.attrsMap[':is'] ||
el.attrsMap['v-bind:is'] ||
!(el.attrsMap.is
? isReservedTag(el.attrsMap.is)
: isReservedTag(el.tag))
)
}
transforms = pluckModuleFunction(options.modules, 'transformNode')
preTransforms = pluckModuleFunction(options.modules, 'preTransformNode')
postTransforms = pluckModuleFunction(options.modules, 'postTransformNode')
delimiters = options.delimiters
var stack = []
var preserveWhitespace = options.preserveWhitespace !== false
var whitespaceOption = options.whitespace
var root
var currentParent
var inVPre = false
var inPre = false
var warned = false
function warnOnce(msg, range) {
if (!warned) {
warned = true
warn$1(msg, range)
}
}
function closeElement(element) {
trimEndingWhitespace(element)
if (!inVPre && !element.processed) {
element = processElement(element, options)
}
// tree management
if (!stack.length && element !== root) {
// allow root elements with v-if, v-else-if and v-else
if (root.if && (element.elseif || element.else)) {
{
checkRootConstraints(element)
}
addIfCondition(root, {
exp: element.elseif,
block: element
})
} else {
warnOnce(
'Component template should contain exactly one root element. ' +
'If you are using v-if on multiple elements, ' +
'use v-else-if to chain them instead.',
{ start: element.start }
)
}
}
if (currentParent && !element.forbidden) {
if (element.elseif || element.else) {
processIfConditions(element, currentParent)
} else {
if (element.slotScope) {
// scoped slot
// keep it in the children list so that v-else(-if) conditions can
// find it as the prev node.
var name_1 = element.slotTarget || '"default"'
;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[
name_1
] = element
}
currentParent.children.push(element)
element.parent = currentParent
}
}
// final children cleanup
// filter out scoped slots
element.children = element.children.filter(function (c) {
return !c.slotScope
})
// remove trailing whitespace node again
trimEndingWhitespace(element)
// check pre state
if (element.pre) {
inVPre = false
}
if (platformIsPreTag(element.tag)) {
inPre = false
}
// apply post-transforms
for (var i = 0; i < postTransforms.length; i++) {
postTransforms[i](element, options)
}
}
function trimEndingWhitespace(el) {
// remove trailing whitespace node
if (!inPre) {
var lastNode = void 0
while (
(lastNode = el.children[el.children.length - 1]) &&
lastNode.type === 3 &&
lastNode.text === ' '
) {
el.children.pop()
}
}
}
function checkRootConstraints(el) {
if (el.tag === 'slot' || el.tag === 'template') {
warnOnce(
'Cannot use <'.concat(
el.tag,
'> as component root element because it may '
) + 'contain multiple nodes.',
{ start: el.start }
)
}
if (el.attrsMap.hasOwnProperty('v-for')) {
warnOnce(
'Cannot use v-for on stateful component root element because ' +
'it renders multiple elements.',
el.rawAttrsMap['v-for']
)
}
}
parseHTML(template, {
warn: warn$1,
expectHTML: options.expectHTML,
isUnaryTag: options.isUnaryTag,
canBeLeftOpenTag: options.canBeLeftOpenTag,
shouldDecodeNewlines: options.shouldDecodeNewlines,
shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
shouldKeepComment: options.comments,
outputSourceRange: options.outputSourceRange,
start: function (tag, attrs, unary, start, end) {
// check namespace.
// inherit parent ns if there is one
var ns =
(currentParent && currentParent.ns) || platformGetTagNamespace(tag)
// handle IE svg bug
/* istanbul ignore if */
if (isIE && ns === 'svg') {
attrs = guardIESVGBug(attrs)
}
var element = createASTElement(tag, attrs, currentParent)
if (ns) {
element.ns = ns
}
{
if (options.outputSourceRange) {
element.start = start
element.end = end
element.rawAttrsMap = element.attrsList.reduce(function (
cumulated,
attr
) {
cumulated[attr.name] = attr
return cumulated
},
{})
}
attrs.forEach(function (attr) {
if (invalidAttributeRE.test(attr.name)) {
warn$1(
'Invalid dynamic argument expression: attribute names cannot contain ' +
'spaces, quotes, <, >, / or =.',
{
start: attr.start + attr.name.indexOf('['),
end: attr.start + attr.name.length
}
)
}
})
}
if (isForbiddenTag(element) && !isServerRendering()) {
element.forbidden = true
warn$1(
'Templates should only be responsible for mapping the state to the ' +
'UI. Avoid placing tags with side-effects in your templates, such as ' +
'<'.concat(tag, '>') +
', as they will not be parsed.',
{ start: element.start }
)
}
// apply pre-transforms
for (var i = 0; i < preTransforms.length; i++) {
element = preTransforms[i](element, options) || element
}
if (!inVPre) {
processPre(element)
if (element.pre) {
inVPre = true
}
}
if (platformIsPreTag(element.tag)) {
inPre = true
}
if (inVPre) {
processRawAttrs(element)
} else if (!element.processed) {
// structural directives
processFor(element)
processIf(element)
processOnce(element)
}
if (!root) {
root = element
{
checkRootConstraints(root)
}
}
if (!unary) {
currentParent = element
stack.push(element)
} else {
closeElement(element)
}
},
end: function (tag, start, end) {
var element = stack[stack.length - 1]
// pop stack
stack.length -= 1
currentParent = stack[stack.length - 1]
if (options.outputSourceRange) {
element.end = end
}
closeElement(element)
},
chars: function (text, start, end) {
if (!currentParent) {
{
if (text === template) {
warnOnce(
'Component template requires a root element, rather than just text.',
{ start: start }
)
} else if ((text = text.trim())) {
warnOnce(
'text "'.concat(
text,
'" outside root element will be ignored.'
),
{
start: start
}
)
}
}
return
}
// IE textarea placeholder bug
/* istanbul ignore if */
if (
isIE &&
currentParent.tag === 'textarea' &&
currentParent.attrsMap.placeholder === text
) {
return
}
var children = currentParent.children
if (inPre || text.trim()) {
text = isTextTag(currentParent) ? text : decodeHTMLCached(text)
} else if (!children.length) {
// remove the whitespace-only node right after an opening tag
text = ''
} else if (whitespaceOption) {
if (whitespaceOption === 'condense') {
// in condense mode, remove the whitespace node if it contains
// line break, otherwise condense to a single space
text = lineBreakRE.test(text) ? '' : ' '
} else {
text = ' '
}
} else {
text = preserveWhitespace ? ' ' : ''
}
if (text) {
if (!inPre && whitespaceOption === 'condense') {
// condense consecutive whitespaces into single space
text = text.replace(whitespaceRE, ' ')
}
var res = void 0
var child = void 0
if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
child = {
type: 2,
expression: res.expression,
tokens: res.tokens,
text: text
}
} else if (
text !== ' ' ||
!children.length ||
children[children.length - 1].text !== ' '
) {
child = {
type: 3,
text: text
}
}
if (child) {
if (options.outputSourceRange) {
child.start = start
child.end = end
}
children.push(child)
}
}
},
comment: function (text, start, end) {
// adding anything as a sibling to the root node is forbidden
// comments should still be allowed, but ignored
if (currentParent) {
var child = {
type: 3,
text: text,
isComment: true
}
if (options.outputSourceRange) {
child.start = start
child.end = end
}
currentParent.children.push(child)
}
}
})
return root
}
function processPre(el) {
if (getAndRemoveAttr(el, 'v-pre') != null) {
el.pre = true
}
}
function processRawAttrs(el) {
var list = el.attrsList
var len = list.length
if (len) {
var attrs = (el.attrs = new Array(len))
for (var i = 0; i < len; i++) {
attrs[i] = {
name: list[i].name,
value: JSON.stringify(list[i].value)
}
if (list[i].start != null) {
attrs[i].start = list[i].start
attrs[i].end = list[i].end
}
}
} else if (!el.pre) {
// non root node in pre blocks with no attributes
el.plain = true
}
}
function processElement(element, options) {
processKey(element)
// determine whether this is a plain element after
// removing structural attributes
element.plain =
!element.key && !element.scopedSlots && !element.attrsList.length
processRef(element)
processSlotContent(element)
processSlotOutlet(element)
processComponent(element)
for (var i = 0; i < transforms.length; i++) {
element = transforms[i](element, options) || element
}
processAttrs(element)
return element
}
function processKey(el) {
var exp = getBindingAttr(el, 'key')
if (exp) {
{
if (el.tag === 'template') {
warn$1(
'<template> cannot be keyed. Place the key on real elements instead.',
getRawBindingAttr(el, 'key')
)
}
if (el.for) {
var iterator = el.iterator2 || el.iterator1
var parent_1 = el.parent
if (
iterator &&
iterator === exp &&
parent_1 &&
parent_1.tag === 'transition-group'
) {
warn$1(
'Do not use v-for index as key on <transition-group> children, ' +
'this is the same as not using keys.',
getRawBindingAttr(el, 'key'),
true /* tip */
)
}
}
}
el.key = exp
}
}
function processRef(el) {
var ref = getBindingAttr(el, 'ref')
if (ref) {
el.ref = ref
el.refInFor = checkInFor(el)
}
}
function processFor(el) {
var exp
if ((exp = getAndRemoveAttr(el, 'v-for'))) {
var res = parseFor(exp)
if (res) {
extend(el, res)
} else {
warn$1(
'Invalid v-for expression: '.concat(exp),
el.rawAttrsMap['v-for']
)
}
}
}
function parseFor(exp) {
var inMatch = exp.match(forAliasRE)
if (!inMatch) return
var res = {}
res.for = inMatch[2].trim()
var alias = inMatch[1].trim().replace(stripParensRE, '')
var iteratorMatch = alias.match(forIteratorRE)
if (iteratorMatch) {
res.alias = alias.replace(forIteratorRE, '').trim()
res.iterator1 = iteratorMatch[1].trim()
if (iteratorMatch[2]) {
res.iterator2 = iteratorMatch[2].trim()
}
} else {
res.alias = alias
}
return res
}
function processIf(el) {
var exp = getAndRemoveAttr(el, 'v-if')
if (exp) {
el.if = exp
addIfCondition(el, {
exp: exp,
block: el
})
} else {
if (getAndRemoveAttr(el, 'v-else') != null) {
el.else = true
}
var elseif = getAndRemoveAttr(el, 'v-else-if')
if (elseif) {
el.elseif = elseif
}
}
}
function processIfConditions(el, parent) {
var prev = findPrevElement(parent.children)
if (prev && prev.if) {
addIfCondition(prev, {
exp: el.elseif,
block: el
})
} else {
warn$1(
'v-'.concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', ' ') +
'used on element <'.concat(el.tag, '> without corresponding v-if.'),
el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']
)
}
}
function findPrevElement(children) {
var i = children.length
while (i--) {
if (children[i].type === 1) {
return children[i]
} else {
if (children[i].text !== ' ') {
warn$1(
'text "'.concat(
children[i].text.trim(),
'" between v-if and v-else(-if) '
) + 'will be ignored.',
children[i]
)
}
children.pop()
}
}
}
function addIfCondition(el, condition) {
if (!el.ifConditions) {
el.ifConditions = []
}
el.ifConditions.push(condition)
}
function processOnce(el) {
var once = getAndRemoveAttr(el, 'v-once')
if (once != null) {
el.once = true
}
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
var slotScope
if (el.tag === 'template') {
slotScope = getAndRemoveAttr(el, 'scope')
/* istanbul ignore if */
if (slotScope) {
warn$1(
'the "scope" attribute for scoped slots have been deprecated and ' +
'replaced by "slot-scope" since 2.5. The new "slot-scope" attribute ' +
'can also be used on plain elements in addition to <template> to ' +
'denote scoped slots.',
el.rawAttrsMap['scope'],
true
)
}
el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope')
} else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
/* istanbul ignore if */
if (el.attrsMap['v-for']) {
warn$1(
'Ambiguous combined usage of slot-scope and v-for on <'.concat(
el.tag,
'> '
) +
'(v-for takes higher priority). Use a wrapper <template> for the ' +
'scoped slot to make it clearer.',
el.rawAttrsMap['slot-scope'],
true
)
}
el.slotScope = slotScope
}
// slot="xxx"
var slotTarget = getBindingAttr(el, 'slot')
if (slotTarget) {
el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget
el.slotTargetDynamic = !!(
el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']
)
// preserve slot as an attribute for native shadow DOM compat
// only for non-scoped slots.
if (el.tag !== 'template' && !el.slotScope) {
addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'))
}
}
// 2.6 v-slot syntax
{
if (el.tag === 'template') {
// v-slot on <template>
var slotBinding = getAndRemoveAttrByRegex(el, slotRE)
if (slotBinding) {
{
if (el.slotTarget || el.slotScope) {
warn$1('Unexpected mixed usage of different slot syntaxes.', el)
}
if (el.parent && !maybeComponent(el.parent)) {
warn$1(
'<template v-slot> can only appear at the root level inside ' +
'the receiving component',
el
)
}
}
var _a = getSlotName(slotBinding),
name_2 = _a.name,
dynamic = _a.dynamic
el.slotTarget = name_2
el.slotTargetDynamic = dynamic
el.slotScope = slotBinding.value || emptySlotScopeToken // force it into a scoped slot for perf
}
} else {
// v-slot on component, denotes default slot
var slotBinding = getAndRemoveAttrByRegex(el, slotRE)
if (slotBinding) {
{
if (!maybeComponent(el)) {
warn$1(
'v-slot can only be used on components or <template>.',
slotBinding
)
}
if (el.slotScope || el.slotTarget) {
warn$1('Unexpected mixed usage of different slot syntaxes.', el)
}
if (el.scopedSlots) {
warn$1(
'To avoid scope ambiguity, the default slot should also use ' +
'<template> syntax when there are other named slots.',
slotBinding
)
}
}
// add the component's children to its default slot
var slots = el.scopedSlots || (el.scopedSlots = {})
var _b = getSlotName(slotBinding),
name_3 = _b.name,
dynamic = _b.dynamic
var slotContainer_1 = (slots[name_3] = createASTElement(
'template',
[],
el
))
slotContainer_1.slotTarget = name_3
slotContainer_1.slotTargetDynamic = dynamic
slotContainer_1.children = el.children.filter(function (c) {
if (!c.slotScope) {
c.parent = slotContainer_1
return true
}
})
slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken
// remove children as they are returned from scopedSlots now
el.children = []
// mark el non-plain so data gets generated
el.plain = false
}
}
}
}
function getSlotName(binding) {
var name = binding.name.replace(slotRE, '')
if (!name) {
if (binding.name[0] !== '#') {
name = 'default'
} else {
warn$1('v-slot shorthand syntax requires a slot name.', binding)
}
}
return dynamicArgRE.test(name)
? // dynamic [name]
{ name: name.slice(1, -1), dynamic: true }
: // static name
{ name: '"'.concat(name, '"'), dynamic: false }
}
// handle <slot/> outlets
function processSlotOutlet(el) {
if (el.tag === 'slot') {
el.slotName = getBindingAttr(el, 'name')
if (el.key) {
warn$1(
'`key` does not work on <slot> because slots are abstract outlets ' +
'and can possibly expand into multiple elements. ' +
'Use the key on a wrapping element instead.',
getRawBindingAttr(el, 'key')
)
}
}
}
function processComponent(el) {
var binding
if ((binding = getBindingAttr(el, 'is'))) {
el.component = binding
}
if (getAndRemoveAttr(el, 'inline-template') != null) {
el.inlineTemplate = true
}
}
function processAttrs(el) {
var list = el.attrsList
var i, l, name, rawName, value, modifiers, syncGen, isDynamic
for (i = 0, l = list.length; i < l; i++) {
name = rawName = list[i].name
value = list[i].value
if (dirRE.test(name)) {
// mark element as dynamic
el.hasBindings = true
// modifiers
modifiers = parseModifiers(name.replace(dirRE, ''))
// support .foo shorthand syntax for the .prop modifier
if (modifiers) {
name = name.replace(modifierRE, '')
}
if (bindRE.test(name)) {
// v-bind
name = name.replace(bindRE, '')
value = parseFilters(value)
isDynamic = dynamicArgRE.test(name)
if (isDynamic) {
name = name.slice(1, -1)
}
if (value.trim().length === 0) {
warn$1(
'The value for a v-bind expression cannot be empty. Found in "v-bind:'.concat(
name,
'"'
)
)
}
if (modifiers) {
if (modifiers.prop && !isDynamic) {
name = camelize(name)
if (name === 'innerHtml') name = 'innerHTML'
}
if (modifiers.camel && !isDynamic) {
name = camelize(name)
}
if (modifiers.sync) {
syncGen = genAssignmentCode(value, '$event')
if (!isDynamic) {
addHandler(
el,
'update:'.concat(camelize(name)),
syncGen,
null,
false,
warn$1,
list[i]
)
if (hyphenate(name) !== camelize(name)) {
addHandler(
el,
'update:'.concat(hyphenate(name)),
syncGen,
null,
false,
warn$1,
list[i]
)
}
} else {
// handler w/ dynamic event name
addHandler(
el,
'"update:"+('.concat(name, ')'),
syncGen,
null,
false,
warn$1,
list[i],
true // dynamic
)
}
}
}
if (
(modifiers && modifiers.prop) ||
(!el.component &&
platformMustUseProp(el.tag, el.attrsMap.type, name))
) {
addProp(el, name, value, list[i], isDynamic)
} else {
addAttr(el, name, value, list[i], isDynamic)
}
} else if (onRE.test(name)) {
// v-on
name = name.replace(onRE, '')
isDynamic = dynamicArgRE.test(name)
if (isDynamic) {
name = name.slice(1, -1)
}
addHandler(
el,
name,
value,
modifiers,
false,
warn$1,
list[i],
isDynamic
)
} else {
// normal directives
name = name.replace(dirRE, '')
// parse arg
var argMatch = name.match(argRE)
var arg = argMatch && argMatch[1]
isDynamic = false
if (arg) {
name = name.slice(0, -(arg.length + 1))
if (dynamicArgRE.test(arg)) {
arg = arg.slice(1, -1)
isDynamic = true
}
}
addDirective(
el,
name,
rawName,
value,
arg,
isDynamic,
modifiers,
list[i]
)
if (name === 'model') {
checkForAliasModel(el, value)
}
}
} else {
// literal attribute
{
var res = parseText(value, delimiters)
if (res) {
warn$1(
''.concat(name, '="').concat(value, '": ') +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div id="{{ val }}">, use <div :id="val">.',
list[i]
)
}
}
addAttr(el, name, JSON.stringify(value), list[i])
// #6887 firefox doesn't update muted state if set via attribute
// even immediately after element creation
if (
!el.component &&
name === 'muted' &&
platformMustUseProp(el.tag, el.attrsMap.type, name)
) {
addProp(el, name, 'true', list[i])
}
}
}
}
function checkInFor(el) {
var parent = el
while (parent) {
if (parent.for !== undefined) {
return true
}
parent = parent.parent
}
return false
}
function parseModifiers(name) {
var match = name.match(modifierRE)
if (match) {
var ret_1 = {}
match.forEach(function (m) {
ret_1[m.slice(1)] = true
})
return ret_1
}
}
function makeAttrsMap(attrs) {
var map = {}
for (var i = 0, l = attrs.length; i < l; i++) {
if (map[attrs[i].name] && !isIE && !isEdge) {
warn$1('duplicate attribute: ' + attrs[i].name, attrs[i])
}
map[attrs[i].name] = attrs[i].value
}
return map
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
return el.tag === 'script' || el.tag === 'style'
}
function isForbiddenTag(el) {
return (
el.tag === 'style' ||
(el.tag === 'script' &&
(!el.attrsMap.type || el.attrsMap.type === 'text/javascript'))
)
}
var ieNSBug = /^xmlns:NS\d+/
var ieNSPrefix = /^NS\d+:/
/* istanbul ignore next */
function guardIESVGBug(attrs) {
var res = []
for (var i = 0; i < attrs.length; i++) {
var attr = attrs[i]
if (!ieNSBug.test(attr.name)) {
attr.name = attr.name.replace(ieNSPrefix, '')
res.push(attr)
}
}
return res
}
function checkForAliasModel(el, value) {
var _el = el
while (_el) {
if (_el.for && _el.alias === value) {
warn$1(
'<'.concat(el.tag, ' v-model="').concat(value, '">: ') +
'You are binding v-model directly to a v-for iteration alias. ' +
'This will not be able to modify the v-for source array because ' +
'writing to the alias is like modifying a function local variable. ' +
'Consider using an array of objects and use v-model on an object property instead.',
el.rawAttrsMap['v-model']
)
}
_el = _el.parent
}
}
/**
* Expand input[v-model] with dynamic type bindings into v-if-else chains
* Turn this:
* <input v-model="data[type]" :type="type">
* into this:
* <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
* <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
* <input v-else :type="type" v-model="data[type]">
*/
function preTransformNode(el, options) {
if (el.tag === 'input') {
var map = el.attrsMap
if (!map['v-model']) {
return
}
var typeBinding = void 0
if (map[':type'] || map['v-bind:type']) {
typeBinding = getBindingAttr(el, 'type')
}
if (!map.type && !typeBinding && map['v-bind']) {
typeBinding = '('.concat(map['v-bind'], ').type')
}
if (typeBinding) {
var ifCondition = getAndRemoveAttr(el, 'v-if', true)
var ifConditionExtra = ifCondition ? '&&('.concat(ifCondition, ')') : ''
var hasElse = getAndRemoveAttr(el, 'v-else', true) != null
var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true)
// 1. checkbox
var branch0 = cloneASTElement(el)
// process for on the main node
processFor(branch0)
addRawAttr(branch0, 'type', 'checkbox')
processElement(branch0, options)
branch0.processed = true // prevent it from double-processed
branch0.if =
'('.concat(typeBinding, ")==='checkbox'") + ifConditionExtra
addIfCondition(branch0, {
exp: branch0.if,
block: branch0
})
// 2. add radio else-if condition
var branch1 = cloneASTElement(el)
getAndRemoveAttr(branch1, 'v-for', true)
addRawAttr(branch1, 'type', 'radio')
processElement(branch1, options)
addIfCondition(branch0, {
exp: '('.concat(typeBinding, ")==='radio'") + ifConditionExtra,
block: branch1
})
// 3. other
var branch2 = cloneASTElement(el)
getAndRemoveAttr(branch2, 'v-for', true)
addRawAttr(branch2, ':type', typeBinding)
processElement(branch2, options)
addIfCondition(branch0, {
exp: ifCondition,
block: branch2
})
if (hasElse) {
branch0.else = true
} else if (elseIfCondition) {
branch0.elseif = elseIfCondition
}
return branch0
}
}
}
function cloneASTElement(el) {
return createASTElement(el.tag, el.attrsList.slice(), el.parent)
}
var model$1 = {
preTransformNode: preTransformNode
}
var modules = [klass, style, model$1]
var warn
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
var RANGE_TOKEN = '__r'
function model(el, dir, _warn) {
warn = _warn
var value = dir.value
var modifiers = dir.modifiers
var tag = el.tag
var type = el.attrsMap.type
{
// inputs with type="file" are read only and setting the input's
// value will throw an error.
if (tag === 'input' && type === 'file') {
warn(
'<'.concat(el.tag, ' v-model="').concat(value, '" type="file">:\n') +
'File inputs are read only. Use a v-on:change listener instead.',
el.rawAttrsMap['v-model']
)
}
}
if (el.component) {
genComponentModel(el, value, modifiers)
// component v-model doesn't need extra runtime
return false
} else if (tag === 'select') {
genSelect(el, value, modifiers)
} else if (tag === 'input' && type === 'checkbox') {
genCheckboxModel(el, value, modifiers)
} else if (tag === 'input' && type === 'radio') {
genRadioModel(el, value, modifiers)
} else if (tag === 'input' || tag === 'textarea') {
genDefaultModel(el, value, modifiers)
} else {
genComponentModel(el, value, modifiers)
// component v-model doesn't need extra runtime
return false
}
// ensure runtime directive metadata
return true
}
function genCheckboxModel(el, value, modifiers) {
var number = modifiers && modifiers.number
var valueBinding = getBindingAttr(el, 'value') || 'null'
var trueValueBinding = getBindingAttr(el, 'true-value') || 'true'
var falseValueBinding = getBindingAttr(el, 'false-value') || 'false'
addProp(
el,
'checked',
'Array.isArray('.concat(value, ')') +
'?_i('.concat(value, ',').concat(valueBinding, ')>-1') +
(trueValueBinding === 'true'
? ':('.concat(value, ')')
: ':_q('.concat(value, ',').concat(trueValueBinding, ')'))
)
addHandler(
el,
'change',
'var $$a='.concat(value, ',') +
'$$el=$event.target,' +
'$$c=$$el.checked?('
.concat(trueValueBinding, '):(')
.concat(falseValueBinding, ');') +
'if(Array.isArray($$a)){' +
'var $$v='.concat(
number ? '_n(' + valueBinding + ')' : valueBinding,
','
) +
'$$i=_i($$a,$$v);' +
'if($$el.checked){$$i<0&&('.concat(
genAssignmentCode(value, '$$a.concat([$$v])'),
')}'
) +
'else{$$i>-1&&('.concat(
genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'),
')}'
) +
'}else{'.concat(genAssignmentCode(value, '$$c'), '}'),
null,
true
)
}
function genRadioModel(el, value, modifiers) {
var number = modifiers && modifiers.number
var valueBinding = getBindingAttr(el, 'value') || 'null'
valueBinding = number ? '_n('.concat(valueBinding, ')') : valueBinding
addProp(el, 'checked', '_q('.concat(value, ',').concat(valueBinding, ')'))
addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true)
}
function genSelect(el, value, modifiers) {
var number = modifiers && modifiers.number
var selectedVal =
'Array.prototype.filter' +
'.call($event.target.options,function(o){return o.selected})' +
'.map(function(o){var val = "_value" in o ? o._value : o.value;' +
'return '.concat(number ? '_n(val)' : 'val', '})')
var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]'
var code = 'var $$selectedVal = '.concat(selectedVal, ';')
code = ''.concat(code, ' ').concat(genAssignmentCode(value, assignment))
addHandler(el, 'change', code, null, true)
}
function genDefaultModel(el, value, modifiers) {
var type = el.attrsMap.type
// warn if v-bind:value conflicts with v-model
// except for inputs with v-bind:type
{
var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value']
var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type']
if (value_1 && !typeBinding) {
var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value'
warn(
''
.concat(binding, '="')
.concat(value_1, '" conflicts with v-model on the same element ') +
'because the latter already expands to a value binding internally',
el.rawAttrsMap[binding]
)
}
}
var _a = modifiers || {},
lazy = _a.lazy,
number = _a.number,
trim = _a.trim
var needCompositionGuard = !lazy && type !== 'range'
var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input'
var valueExpression = '$event.target.value'
if (trim) {
valueExpression = '$event.target.value.trim()'
}
if (number) {
valueExpression = '_n('.concat(valueExpression, ')')
}
var code = genAssignmentCode(value, valueExpression)
if (needCompositionGuard) {
code = 'if($event.target.composing)return;'.concat(code)
}
addProp(el, 'value', '('.concat(value, ')'))
addHandler(el, event, code, null, true)
if (trim || number) {
addHandler(el, 'blur', '$forceUpdate()')
}
}
function text(el, dir) {
if (dir.value) {
addProp(el, 'textContent', '_s('.concat(dir.value, ')'), dir)
}
}
function html(el, dir) {
if (dir.value) {
addProp(el, 'innerHTML', '_s('.concat(dir.value, ')'), dir)
}
}
var directives = {
model: model,
text: text,
html: html
}
var baseOptions = {
expectHTML: true,
modules: modules,
directives: directives,
isPreTag: isPreTag,
isUnaryTag: isUnaryTag,
mustUseProp: mustUseProp,
canBeLeftOpenTag: canBeLeftOpenTag,
isReservedTag: isReservedTag,
getTagNamespace: getTagNamespace,
staticKeys: genStaticKeys$1(modules)
}
var isStaticKey
var isPlatformReservedTag$1
var genStaticKeysCached = cached(genStaticKeys)
/**
* Goal of the optimizer: walk the generated template AST tree
* and detect sub-trees that are purely static, i.e. parts of
* the DOM that never needs to change.
*
* Once we detect these sub-trees, we can:
*
* 1. Hoist them into constants, so that we no longer need to
* create fresh nodes for them on each re-render;
* 2. Completely skip them in the patching process.
*/
function optimize$1(root, options) {
if (!root) return
isStaticKey = genStaticKeysCached(options.staticKeys || '')
isPlatformReservedTag$1 = options.isReservedTag || no
// first pass: mark all non-static nodes.
markStatic(root)
// second pass: mark static roots.
markStaticRoots(root, false)
}
function genStaticKeys(keys) {
return makeMap(
'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
(keys ? ',' + keys : '')
)
}
function markStatic(node) {
node.static = isStatic(node)
if (node.type === 1) {
// do not make component slot content static. this avoids
// 1. components not able to mutate slot nodes
// 2. static slot content fails for hot-reloading
if (
!isPlatformReservedTag$1(node.tag) &&
node.tag !== 'slot' &&
node.attrsMap['inline-template'] == null
) {
return
}
for (var i = 0, l = node.children.length; i < l; i++) {
var child = node.children[i]
markStatic(child)
if (!child.static) {
node.static = false
}
}
if (node.ifConditions) {
for (var i = 1, l = node.ifConditions.length; i < l; i++) {
var block = node.ifConditions[i].block
markStatic(block)
if (!block.static) {
node.static = false
}
}
}
}
}
function markStaticRoots(node, isInFor) {
if (node.type === 1) {
if (node.static || node.once) {
node.staticInFor = isInFor
}
// For a node to qualify as a static root, it should have children that
// are not just static text. Otherwise the cost of hoisting out will
// outweigh the benefits and it's better off to just always render it fresh.
if (
node.static &&
node.children.length &&
!(node.children.length === 1 && node.children[0].type === 3)
) {
node.staticRoot = true
return
} else {
node.staticRoot = false
}
if (node.children) {
for (var i = 0, l = node.children.length; i < l; i++) {
markStaticRoots(node.children[i], isInFor || !!node.for)
}
}
if (node.ifConditions) {
for (var i = 1, l = node.ifConditions.length; i < l; i++) {
markStaticRoots(node.ifConditions[i].block, isInFor)
}
}
}
}
function isStatic(node) {
if (node.type === 2) {
// expression
return false
}
if (node.type === 3) {
// text
return true
}
return !!(
node.pre ||
(!node.hasBindings && // no dynamic bindings
!node.if &&
!node.for && // not v-if or v-for or v-else
!isBuiltInTag(node.tag) && // not a built-in
isPlatformReservedTag$1(node.tag) && // not a component
!isDirectChildOfTemplateFor(node) &&
Object.keys(node).every(isStaticKey))
)
}
function isDirectChildOfTemplateFor(node) {
while (node.parent) {
node = node.parent
if (node.tag !== 'template') {
return false
}
if (node.for) {
return true
}
}
return false
}
var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/
var fnInvokeRE = /\([^)]*?\);*$/
var simplePathRE =
/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/
// KeyboardEvent.keyCode aliases
var keyCodes = {
esc: 27,
tab: 9,
enter: 13,
space: 32,
up: 38,
left: 37,
right: 39,
down: 40,
delete: [8, 46]
}
// KeyboardEvent.key aliases
var keyNames = {
// #7880: IE11 and Edge use `Esc` for Escape key name.
esc: ['Esc', 'Escape'],
tab: 'Tab',
enter: 'Enter',
// #9112: IE11 uses `Spacebar` for Space key name.
space: [' ', 'Spacebar'],
// #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
up: ['Up', 'ArrowUp'],
left: ['Left', 'ArrowLeft'],
right: ['Right', 'ArrowRight'],
down: ['Down', 'ArrowDown'],
// #9112: IE11 uses `Del` for Delete key name.
delete: ['Backspace', 'Delete', 'Del']
}
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
var genGuard = function (condition) {
return 'if('.concat(condition, ')return null;')
}
var modifierCode = {
stop: '$event.stopPropagation();',
prevent: '$event.preventDefault();',
self: genGuard('$event.target !== $event.currentTarget'),
ctrl: genGuard('!$event.ctrlKey'),
shift: genGuard('!$event.shiftKey'),
alt: genGuard('!$event.altKey'),
meta: genGuard('!$event.metaKey'),
left: genGuard("'button' in $event && $event.button !== 0"),
middle: genGuard("'button' in $event && $event.button !== 1"),
right: genGuard("'button' in $event && $event.button !== 2")
}
function genHandlers(events, isNative) {
var prefix = isNative ? 'nativeOn:' : 'on:'
var staticHandlers = ''
var dynamicHandlers = ''
for (var name_1 in events) {
var handlerCode = genHandler(events[name_1])
//@ts-expect-error
if (events[name_1] && events[name_1].dynamic) {
dynamicHandlers += ''.concat(name_1, ',').concat(handlerCode, ',')
} else {
staticHandlers += '"'.concat(name_1, '":').concat(handlerCode, ',')
}
}
staticHandlers = '{'.concat(staticHandlers.slice(0, -1), '}')
if (dynamicHandlers) {
return (
prefix +
'_d('
.concat(staticHandlers, ',[')
.concat(dynamicHandlers.slice(0, -1), '])')
)
} else {
return prefix + staticHandlers
}
}
function genHandler(handler) {
if (!handler) {
return 'function(){}'
}
if (Array.isArray(handler)) {
return '['.concat(
handler
.map(function (handler) {
return genHandler(handler)
})
.join(','),
']'
)
}
var isMethodPath = simplePathRE.test(handler.value)
var isFunctionExpression = fnExpRE.test(handler.value)
var isFunctionInvocation = simplePathRE.test(
handler.value.replace(fnInvokeRE, '')
)
if (!handler.modifiers) {
if (isMethodPath || isFunctionExpression) {
return handler.value
}
return 'function($event){'.concat(
isFunctionInvocation ? 'return '.concat(handler.value) : handler.value,
'}'
) // inline statement
} else {
var code = ''
var genModifierCode = ''
var keys = []
var _loop_1 = function (key) {
if (modifierCode[key]) {
genModifierCode += modifierCode[key]
// left/right
if (keyCodes[key]) {
keys.push(key)
}
} else if (key === 'exact') {
var modifiers_1 = handler.modifiers
genModifierCode += genGuard(
['ctrl', 'shift', 'alt', 'meta']
.filter(function (keyModifier) {
return !modifiers_1[keyModifier]
})
.map(function (keyModifier) {
return '$event.'.concat(keyModifier, 'Key')
})
.join('||')
)
} else {
keys.push(key)
}
}
for (var key in handler.modifiers) {
_loop_1(key)
}
if (keys.length) {
code += genKeyFilter(keys)
}
// Make sure modifiers like prevent and stop get executed after key filtering
if (genModifierCode) {
code += genModifierCode
}
var handlerCode = isMethodPath
? 'return '.concat(handler.value, '.apply(null, arguments)')
: isFunctionExpression
? 'return ('.concat(handler.value, ').apply(null, arguments)')
: isFunctionInvocation
? 'return '.concat(handler.value)
: handler.value
return 'function($event){'.concat(code).concat(handlerCode, '}')
}
}
function genKeyFilter(keys) {
return (
// make sure the key filters only apply to KeyboardEvents
// #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
// key events that do not have keyCode property...
"if(!$event.type.indexOf('key')&&" +
''.concat(keys.map(genFilterCode).join('&&'), ')return null;')
)
}
function genFilterCode(key) {
var keyVal = parseInt(key, 10)
if (keyVal) {
return '$event.keyCode!=='.concat(keyVal)
}
var keyCode = keyCodes[key]
var keyName = keyNames[key]
return (
'_k($event.keyCode,' +
''.concat(JSON.stringify(key), ',') +
''.concat(JSON.stringify(keyCode), ',') +
'$event.key,' +
''.concat(JSON.stringify(keyName)) +
')'
)
}
function on(el, dir) {
if (dir.modifiers) {
warn$2('v-on without argument does not support modifiers.')
}
el.wrapListeners = function (code) {
return '_g('.concat(code, ',').concat(dir.value, ')')
}
}
function bind(el, dir) {
el.wrapData = function (code) {
return '_b('
.concat(code, ",'")
.concat(el.tag, "',")
.concat(dir.value, ',')
.concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false')
.concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ')')
}
}
var baseDirectives = {
on: on,
bind: bind,
cloak: noop
}
var CodegenState = /** @class */ (function () {
function CodegenState(options) {
this.options = options
this.warn = options.warn || baseWarn
//@ts-expect-error `this.transforms ` is a different type than `options.modules.transformCode`
this.transforms = pluckModuleFunction(options.modules, 'transformCode')
this.dataGenFns = pluckModuleFunction(options.modules, 'genData')
this.directives = extend(extend({}, baseDirectives), options.directives)
var isReservedTag = options.isReservedTag || no
this.maybeComponent = function (el) {
return !!el.component || !isReservedTag(el.tag)
}
this.onceId = 0
this.staticRenderFns = []
this.pre = false
}
return CodegenState
})()
function generate$1(ast, options) {
var state = new CodegenState(options)
// fix #11483, Root level <script> tags should not be rendered.
var code = ast
? ast.tag === 'script'
? 'null'
: genElement(ast, state)
: '_c("div")'
return {
render: 'with(this){return '.concat(code, '}'),
staticRenderFns: state.staticRenderFns
}
}
function genElement(el, state) {
if (el.parent) {
el.pre = el.pre || el.parent.pre
}
if (el.staticRoot && !el.staticProcessed) {
return genStatic(el, state)
} else if (el.once && !el.onceProcessed) {
return genOnce(el, state)
} else if (el.for && !el.forProcessed) {
return genFor(el, state)
} else if (el.if && !el.ifProcessed) {
return genIf(el, state)
} else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
return genChildren(el, state) || 'void 0'
} else if (el.tag === 'slot') {
return genSlot(el, state)
} else {
// component or element
var code = void 0
if (el.component) {
code = genComponent(el.component, el, state)
} else {
var data = void 0
if (!el.plain || (el.pre && state.maybeComponent(el))) {
data = genData(el, state)
}
var children = el.inlineTemplate ? null : genChildren(el, state, true)
code = "_c('"
.concat(el.tag, "'")
.concat(
data ? ','.concat(data) : '' // data
)
.concat(
children ? ','.concat(children) : '', // children
')'
)
}
// module transforms
for (var i = 0; i < state.transforms.length; i++) {
code = state.transforms[i](el, code)
}
return code
}
}
// hoist static sub-trees out
function genStatic(el, state) {
el.staticProcessed = true
// Some elements (templates) need to behave differently inside of a v-pre
// node. All pre nodes are static roots, so we can use this as a location to
// wrap a state change and reset it upon exiting the pre node.
var originalPreState = state.pre
if (el.pre) {
state.pre = el.pre
}
state.staticRenderFns.push(
'with(this){return '.concat(genElement(el, state), '}')
)
state.pre = originalPreState
return '_m('
.concat(state.staticRenderFns.length - 1)
.concat(el.staticInFor ? ',true' : '', ')')
}
// v-once
function genOnce(el, state) {
el.onceProcessed = true
if (el.if && !el.ifProcessed) {
return genIf(el, state)
} else if (el.staticInFor) {
var key = ''
var parent_1 = el.parent
while (parent_1) {
if (parent_1.for) {
key = parent_1.key
break
}
parent_1 = parent_1.parent
}
if (!key) {
state.warn(
'v-once can only be used inside v-for that is keyed. ',
el.rawAttrsMap['v-once']
)
return genElement(el, state)
}
return '_o('
.concat(genElement(el, state), ',')
.concat(state.onceId++, ',')
.concat(key, ')')
} else {
return genStatic(el, state)
}
}
function genIf(el, state, altGen, altEmpty) {
el.ifProcessed = true // avoid recursion
return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)
}
function genIfConditions(conditions, state, altGen, altEmpty) {
if (!conditions.length) {
return altEmpty || '_e()'
}
var condition = conditions.shift()
if (condition.exp) {
return '('
.concat(condition.exp, ')?')
.concat(genTernaryExp(condition.block), ':')
.concat(genIfConditions(conditions, state, altGen, altEmpty))
} else {
return ''.concat(genTernaryExp(condition.block))
}
// v-if with v-once should generate code like (a)?_m(0):_m(1)
function genTernaryExp(el) {
return altGen
? altGen(el, state)
: el.once
? genOnce(el, state)
: genElement(el, state)
}
}
function genFor(el, state, altGen, altHelper) {
var exp = el.for
var alias = el.alias
var iterator1 = el.iterator1 ? ','.concat(el.iterator1) : ''
var iterator2 = el.iterator2 ? ','.concat(el.iterator2) : ''
if (
state.maybeComponent(el) &&
el.tag !== 'slot' &&
el.tag !== 'template' &&
!el.key
) {
state.warn(
'<'
.concat(el.tag, ' v-for="')
.concat(alias, ' in ')
.concat(exp, '">: component lists rendered with ') +
'v-for should have explicit keys. ' +
'See https://vuejs.org/guide/list.html#key for more info.',
el.rawAttrsMap['v-for'],
true /* tip */
)
}
el.forProcessed = true // avoid recursion
return (
''.concat(altHelper || '_l', '((').concat(exp, '),') +
'function('.concat(alias).concat(iterator1).concat(iterator2, '){') +
'return '.concat((altGen || genElement)(el, state)) +
'})'
)
}
function genData(el, state) {
var data = '{'
// directives first.
// directives may mutate the el's other properties before they are generated.
var dirs = genDirectives(el, state)
if (dirs) data += dirs + ','
// key
if (el.key) {
data += 'key:'.concat(el.key, ',')
}
// ref
if (el.ref) {
data += 'ref:'.concat(el.ref, ',')
}
if (el.refInFor) {
data += 'refInFor:true,'
}
// pre
if (el.pre) {
data += 'pre:true,'
}
// record original tag name for components using "is" attribute
if (el.component) {
data += 'tag:"'.concat(el.tag, '",')
}
// module data generation functions
for (var i = 0; i < state.dataGenFns.length; i++) {
data += state.dataGenFns[i](el)
}
// attributes
if (el.attrs) {
data += 'attrs:'.concat(genProps(el.attrs), ',')
}
// DOM props
if (el.props) {
data += 'domProps:'.concat(genProps(el.props), ',')
}
// event handlers
if (el.events) {
data += ''.concat(genHandlers(el.events, false), ',')
}
if (el.nativeEvents) {
data += ''.concat(genHandlers(el.nativeEvents, true), ',')
}
// slot target
// only for non-scoped slots
if (el.slotTarget && !el.slotScope) {
data += 'slot:'.concat(el.slotTarget, ',')
}
// scoped slots
if (el.scopedSlots) {
data += ''.concat(genScopedSlots(el, el.scopedSlots, state), ',')
}
// component v-model
if (el.model) {
data += 'model:{value:'
.concat(el.model.value, ',callback:')
.concat(el.model.callback, ',expression:')
.concat(el.model.expression, '},')
}
// inline-template
if (el.inlineTemplate) {
var inlineTemplate = genInlineTemplate(el, state)
if (inlineTemplate) {
data += ''.concat(inlineTemplate, ',')
}
}
data = data.replace(/,$/, '') + '}'
// v-bind dynamic argument wrap
// v-bind with dynamic arguments must be applied using the same v-bind object
// merge helper so that class/style/mustUseProp attrs are handled correctly.
if (el.dynamicAttrs) {
data = '_b('
.concat(data, ',"')
.concat(el.tag, '",')
.concat(genProps(el.dynamicAttrs), ')')
}
// v-bind data wrap
if (el.wrapData) {
data = el.wrapData(data)
}
// v-on data wrap
if (el.wrapListeners) {
data = el.wrapListeners(data)
}
return data
}
function genDirectives(el, state) {
var dirs = el.directives
if (!dirs) return
var res = 'directives:['
var hasRuntime = false
var i, l, dir, needRuntime
for (i = 0, l = dirs.length; i < l; i++) {
dir = dirs[i]
needRuntime = true
var gen = state.directives[dir.name]
if (gen) {
// compile-time directive that manipulates AST.
// returns true if it also needs a runtime counterpart.
needRuntime = !!gen(el, dir, state.warn)
}
if (needRuntime) {
hasRuntime = true
res += '{name:"'
.concat(dir.name, '",rawName:"')
.concat(dir.rawName, '"')
.concat(
dir.value
? ',value:('
.concat(dir.value, '),expression:')
.concat(JSON.stringify(dir.value))
: ''
)
.concat(
dir.arg
? ',arg:'.concat(
dir.isDynamicArg ? dir.arg : '"'.concat(dir.arg, '"')
)
: ''
)
.concat(
dir.modifiers
? ',modifiers:'.concat(JSON.stringify(dir.modifiers))
: '',
'},'
)
}
}
if (hasRuntime) {
return res.slice(0, -1) + ']'
}
}
function genInlineTemplate(el, state) {
var ast = el.children[0]
if (el.children.length !== 1 || ast.type !== 1) {
state.warn(
'Inline-template components must have exactly one child element.',
{ start: el.start }
)
}
if (ast && ast.type === 1) {
var inlineRenderFns = generate$1(ast, state.options)
return 'inlineTemplate:{render:function(){'
.concat(inlineRenderFns.render, '},staticRenderFns:[')
.concat(
inlineRenderFns.staticRenderFns
.map(function (code) {
return 'function(){'.concat(code, '}')
})
.join(','),
']}'
)
}
}
function genScopedSlots(el, slots, state) {
// by default scoped slots are considered "stable", this allows child
// components with only scoped slots to skip forced updates from parent.
// but in some cases we have to bail-out of this optimization
// for example if the slot contains dynamic names, has v-if or v-for on them...
var needsForceUpdate =
el.for ||
Object.keys(slots).some(function (key) {
var slot = slots[key]
return (
slot.slotTargetDynamic ||
slot.if ||
slot.for ||
containsSlotChild(slot) // is passing down slot from parent which may be dynamic
)
})
// #9534: if a component with scoped slots is inside a conditional branch,
// it's possible for the same component to be reused but with different
// compiled slot content. To avoid that, we generate a unique key based on
// the generated code of all the slot contents.
var needsKey = !!el.if
// OR when it is inside another scoped slot or v-for (the reactivity may be
// disconnected due to the intermediate scope variable)
// #9438, #9506
// TODO: this can be further optimized by properly analyzing in-scope bindings
// and skip force updating ones that do not actually use scope variables.
if (!needsForceUpdate) {
var parent_2 = el.parent
while (parent_2) {
if (
(parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
parent_2.for
) {
needsForceUpdate = true
break
}
if (parent_2.if) {
needsKey = true
}
parent_2 = parent_2.parent
}
}
var generatedSlots = Object.keys(slots)
.map(function (key) {
return genScopedSlot(slots[key], state)
})
.join(',')
return 'scopedSlots:_u(['
.concat(generatedSlots, ']')
.concat(needsForceUpdate ? ',null,true' : '')
.concat(
!needsForceUpdate && needsKey
? ',null,false,'.concat(hash(generatedSlots))
: '',
')'
)
}
function hash(str) {
var hash = 5381
var i = str.length
while (i) {
hash = (hash * 33) ^ str.charCodeAt(--i)
}
return hash >>> 0
}
function containsSlotChild(el) {
if (el.type === 1) {
if (el.tag === 'slot') {
return true
}
return el.children.some(containsSlotChild)
}
return false
}
function genScopedSlot(el, state) {
var isLegacySyntax = el.attrsMap['slot-scope']
if (el.if && !el.ifProcessed && !isLegacySyntax) {
return genIf(el, state, genScopedSlot, 'null')
}
if (el.for && !el.forProcessed) {
return genFor(el, state, genScopedSlot)
}
var slotScope =
el.slotScope === emptySlotScopeToken ? '' : String(el.slotScope)
var fn =
'function('.concat(slotScope, '){') +
'return '.concat(
el.tag === 'template'
? el.if && isLegacySyntax
? '('
.concat(el.if, ')?')
.concat(genChildren(el, state) || 'undefined', ':undefined')
: genChildren(el, state) || 'undefined'
: genElement(el, state),
'}'
)
// reverse proxy v-slot without scope on this.$slots
var reverseProxy = slotScope ? '' : ',proxy:true'
return '{key:'
.concat(el.slotTarget || '"default"', ',fn:')
.concat(fn)
.concat(reverseProxy, '}')
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
var children = el.children
if (children.length) {
var el_1 = children[0]
// optimize single v-for
if (
children.length === 1 &&
el_1.for &&
el_1.tag !== 'template' &&
el_1.tag !== 'slot'
) {
var normalizationType_1 = checkSkip
? state.maybeComponent(el_1)
? ',1'
: ',0'
: ''
return ''
.concat((altGenElement || genElement)(el_1, state))
.concat(normalizationType_1)
}
var normalizationType = checkSkip
? getNormalizationType(children, state.maybeComponent)
: 0
var gen_1 = altGenNode || genNode
return '['
.concat(
children
.map(function (c) {
return gen_1(c, state)
})
.join(','),
']'
)
.concat(normalizationType ? ','.concat(normalizationType) : '')
}
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
var res = 0
for (var i = 0; i < children.length; i++) {
var el = children[i]
if (el.type !== 1) {
continue
}
if (
needsNormalization(el) ||
(el.ifConditions &&
el.ifConditions.some(function (c) {
return needsNormalization(c.block)
}))
) {
res = 2
break
}
if (
maybeComponent(el) ||
(el.ifConditions &&
el.ifConditions.some(function (c) {
return maybeComponent(c.block)
}))
) {
res = 1
}
}
return res
}
function needsNormalization(el) {
return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'
}
function genNode(node, state) {
if (node.type === 1) {
return genElement(node, state)
} else if (node.type === 3 && node.isComment) {
return genComment(node)
} else {
return genText(node)
}
}
function genText(text) {
return '_v('.concat(
text.type === 2
? text.expression // no need for () because already wrapped in _s()
: transformSpecialNewlines(JSON.stringify(text.text)),
')'
)
}
function genComment(comment) {
return '_e('.concat(JSON.stringify(comment.text), ')')
}
function genSlot(el, state) {
var slotName = el.slotName || '"default"'
var children = genChildren(el, state)
var res = '_t('
.concat(slotName)
.concat(children ? ',function(){return '.concat(children, '}') : '')
var attrs =
el.attrs || el.dynamicAttrs
? genProps(
(el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) {
return {
// slot props are camelized
name: camelize(attr.name),
value: attr.value,
dynamic: attr.dynamic
}
})
)
: null
var bind = el.attrsMap['v-bind']
if ((attrs || bind) && !children) {
res += ',null'
}
if (attrs) {
res += ','.concat(attrs)
}
if (bind) {
res += ''.concat(attrs ? '' : ',null', ',').concat(bind)
}
return res + ')'
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
var children = el.inlineTemplate ? null : genChildren(el, state, true)
return '_c('
.concat(componentName, ',')
.concat(genData(el, state))
.concat(children ? ','.concat(children) : '', ')')
}
function genProps(props) {
var staticProps = ''
var dynamicProps = ''
for (var i = 0; i < props.length; i++) {
var prop = props[i]
var value = transformSpecialNewlines(prop.value)
if (prop.dynamic) {
dynamicProps += ''.concat(prop.name, ',').concat(value, ',')
} else {
staticProps += '"'.concat(prop.name, '":').concat(value, ',')
}
}
staticProps = '{'.concat(staticProps.slice(0, -1), '}')
if (dynamicProps) {
return '_d('
.concat(staticProps, ',[')
.concat(dynamicProps.slice(0, -1), '])')
} else {
return staticProps
}
}
// #3895, #4268
function transformSpecialNewlines(text) {
return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029')
}
// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
var prohibitedKeywordRE = new RegExp(
'\\b' +
(
'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
'super,throw,while,yield,delete,export,import,return,switch,default,' +
'extends,finally,continue,debugger,function,arguments'
)
.split(',')
.join('\\b|\\b') +
'\\b'
)
// these unary operators should not be used as property/method names
var unaryOperatorsRE = new RegExp(
'\\b' +
'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
'\\s*\\([^\\)]*\\)'
)
// strip strings in expressions
var stripStringRE =
/'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g
// detect problematic expressions in a template
function detectErrors(ast, warn) {
if (ast) {
checkNode(ast, warn)
}
}
function checkNode(node, warn) {
if (node.type === 1) {
for (var name_1 in node.attrsMap) {
if (dirRE.test(name_1)) {
var value = node.attrsMap[name_1]
if (value) {
var range = node.rawAttrsMap[name_1]
if (name_1 === 'v-for') {
checkFor(node, 'v-for="'.concat(value, '"'), warn, range)
} else if (name_1 === 'v-slot' || name_1[0] === '#') {
checkFunctionParameterExpression(
value,
''.concat(name_1, '="').concat(value, '"'),
warn,
range
)
} else if (onRE.test(name_1)) {
checkEvent(
value,
''.concat(name_1, '="').concat(value, '"'),
warn,
range
)
} else {
checkExpression(
value,
''.concat(name_1, '="').concat(value, '"'),
warn,
range
)
}
}
}
}
if (node.children) {
for (var i = 0; i < node.children.length; i++) {
checkNode(node.children[i], warn)
}
}
} else if (node.type === 2) {
checkExpression(node.expression, node.text, warn, node)
}
}
function checkEvent(exp, text, warn, range) {
var stripped = exp.replace(stripStringRE, '')
var keywordMatch = stripped.match(unaryOperatorsRE)
if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
warn(
'avoid using JavaScript unary operator as property name: ' +
'"'.concat(keywordMatch[0], '" in expression ').concat(text.trim()),
range
)
}
checkExpression(exp, text, warn, range)
}
function checkFor(node, text, warn, range) {
checkExpression(node.for || '', text, warn, range)
checkIdentifier(node.alias, 'v-for alias', text, warn, range)
checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range)
checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range)
}
function checkIdentifier(ident, type, text, warn, range) {
if (typeof ident === 'string') {
try {
new Function('var '.concat(ident, '=_'))
} catch (e) {
warn(
'invalid '
.concat(type, ' "')
.concat(ident, '" in expression: ')
.concat(text.trim()),
range
)
}
}
}
function checkExpression(exp, text, warn, range) {
try {
new Function('return '.concat(exp))
} catch (e) {
var keywordMatch = exp
.replace(stripStringRE, '')
.match(prohibitedKeywordRE)
if (keywordMatch) {
warn(
'avoid using JavaScript keyword as property name: ' +
'"'
.concat(keywordMatch[0], '"\n Raw expression: ')
.concat(text.trim()),
range
)
} else {
warn(
'invalid expression: '.concat(e.message, ' in\n\n') +
' '.concat(exp, '\n\n') +
' Raw expression: '.concat(text.trim(), '\n'),
range
)
}
}
}
function checkFunctionParameterExpression(exp, text, warn, range) {
try {
new Function(exp, '')
} catch (e) {
warn(
'invalid function parameter expression: '.concat(e.message, ' in\n\n') +
' '.concat(exp, '\n\n') +
' Raw expression: '.concat(text.trim(), '\n'),
range
)
}
}
var range = 2
function generateCodeFrame(source, start, end) {
if (start === void 0) {
start = 0
}
if (end === void 0) {
end = source.length
}
var lines = source.split(/\r?\n/)
var count = 0
var res = []
for (var i = 0; i < lines.length; i++) {
count += lines[i].length + 1
if (count >= start) {
for (var j = i - range; j <= i + range || end > count; j++) {
if (j < 0 || j >= lines.length) continue
res.push(
''
.concat(j + 1)
.concat(repeat(' ', 3 - String(j + 1).length), '| ')
.concat(lines[j])
)
var lineLength = lines[j].length
if (j === i) {
// push underline
var pad = start - (count - lineLength) + 1
var length_1 = end > count ? lineLength - pad : end - start
res.push(' | ' + repeat(' ', pad) + repeat('^', length_1))
} else if (j > i) {
if (end > count) {
var length_2 = Math.min(end - count, lineLength)
res.push(' | ' + repeat('^', length_2))
}
count += lineLength + 1
}
}
break
}
}
return res.join('\n')
}
function repeat(str, n) {
var result = ''
if (n > 0) {
// eslint-disable-next-line no-constant-condition
while (true) {
// eslint-disable-line
if (n & 1) result += str
n >>>= 1
if (n <= 0) break
str += str
}
}
return result
}
function createFunction(code, errors) {
try {
return new Function(code)
} catch (err) {
errors.push({ err: err, code: code })
return noop
}
}
function createCompileToFunctionFn(compile) {
var cache = Object.create(null)
return function compileToFunctions(template, options, vm) {
options = extend({}, options)
var warn = options.warn || warn$2
delete options.warn
/* istanbul ignore if */
{
// detect possible CSP restriction
try {
new Function('return 1')
} catch (e) {
if (e.toString().match(/unsafe-eval|CSP/)) {
warn(
'It seems you are using the standalone build of Vue.js in an ' +
'environment with Content Security Policy that prohibits unsafe-eval. ' +
'The template compiler cannot work in this environment. Consider ' +
'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
'templates into render functions.'
)
}
}
}
// check cache
var key = options.delimiters
? String(options.delimiters) + template
: template
if (cache[key]) {
return cache[key]
}
// compile
var compiled = compile(template, options)
// check compilation errors/tips
{
if (compiled.errors && compiled.errors.length) {
if (options.outputSourceRange) {
compiled.errors.forEach(function (e) {
warn(
'Error compiling template:\n\n'.concat(e.msg, '\n\n') +
generateCodeFrame(template, e.start, e.end),
vm
)
})
} else {
warn(
'Error compiling template:\n\n'.concat(template, '\n\n') +
compiled.errors
.map(function (e) {
return '- '.concat(e)
})
.join('\n') +
'\n',
vm
)
}
}
if (compiled.tips && compiled.tips.length) {
if (options.outputSourceRange) {
compiled.tips.forEach(function (e) {
return tip(e.msg, vm)
})
} else {
compiled.tips.forEach(function (msg) {
return tip(msg, vm)
})
}
}
}
// turn code into functions
var res = {}
var fnGenErrors = []
res.render = createFunction(compiled.render, fnGenErrors)
res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
return createFunction(code, fnGenErrors)
})
// check function generation errors.
// this should only happen if there is a bug in the compiler itself.
// mostly for codegen development use
/* istanbul ignore if */
{
if (
(!compiled.errors || !compiled.errors.length) &&
fnGenErrors.length
) {
warn(
'Failed to generate render function:\n\n' +
fnGenErrors
.map(function (_a) {
var err = _a.err,
code = _a.code
return ''.concat(err.toString(), ' in\n\n').concat(code, '\n')
})
.join('\n'),
vm
)
}
}
return (cache[key] = res)
}
}
function createCompilerCreator(baseCompile) {
return function createCompiler(baseOptions) {
function compile(template, options) {
var finalOptions = Object.create(baseOptions)
var errors = []
var tips = []
var warn = function (msg, range, tip) {
;(tip ? tips : errors).push(msg)
}
if (options) {
if (options.outputSourceRange) {
// $flow-disable-line
var leadingSpaceLength_1 = template.match(/^\s*/)[0].length
warn = function (msg, range, tip) {
var data = typeof msg === 'string' ? { msg: msg } : msg
if (range) {
if (range.start != null) {
data.start = range.start + leadingSpaceLength_1
}
if (range.end != null) {
data.end = range.end + leadingSpaceLength_1
}
}
;(tip ? tips : errors).push(data)
}
}
// merge custom modules
if (options.modules) {
finalOptions.modules = (baseOptions.modules || []).concat(
options.modules
)
}
// merge custom directives
if (options.directives) {
finalOptions.directives = extend(
Object.create(baseOptions.directives || null),
options.directives
)
}
// copy other options
for (var key in options) {
if (key !== 'modules' && key !== 'directives') {
finalOptions[key] = options[key]
}
}
}
finalOptions.warn = warn
var compiled = baseCompile(template.trim(), finalOptions)
{
detectErrors(compiled.ast, warn)
}
compiled.errors = errors
compiled.tips = tips
return compiled
}
return {
compile: compile,
compileToFunctions: createCompileToFunctionFn(compile)
}
}
}
// `createCompilerCreator` allows creating compilers that use alternative
// parser/optimizer/codegen, e.g the SSR optimizing compiler.
// Here we just export a default compiler using the default parts.
var createCompiler$1 = createCompilerCreator(function baseCompile(
template,
options
) {
var ast = parse(template.trim(), options)
if (options.optimize !== false) {
optimize$1(ast, options)
}
var code = generate$1(ast, options)
return {
ast: ast,
render: code.render,
staticRenderFns: code.staticRenderFns
}
})
var _a$1 = createCompiler$1(baseOptions),
compile$1 = _a$1.compile,
compileToFunctions$1 = _a$1.compileToFunctions
var isAttr = makeMap(
'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +
'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +
'checked,cite,class,code,codebase,color,cols,colspan,content,' +
'contenteditable,contextmenu,controls,coords,data,datetime,default,' +
'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,for,' +
'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' +
'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +
'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +
'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +
'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +
'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +
'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +
'target,title,usemap,value,width,wrap'
)
/* istanbul ignore next */
var isRenderableAttr = function (name) {
return (
isAttr(name) || name.indexOf('data-') === 0 || name.indexOf('aria-') === 0
)
}
var propsToAttrMap = {
acceptCharset: 'accept-charset',
className: 'class',
htmlFor: 'for',
httpEquiv: 'http-equiv'
}
var ESC = {
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
'&': '&amp;'
}
function escape(s) {
return s.replace(/[<>"&]/g, escapeChar)
}
function escapeChar(a) {
return ESC[a] || a
}
var plainStringRE = /^"(?:[^"\\]|\\.)*"$|^'(?:[^'\\]|\\.)*'$/
// let the model AST transform translate v-model into appropriate
// props bindings
function applyModelTransform(el, state) {
if (el.directives) {
for (var i = 0; i < el.directives.length; i++) {
var dir = el.directives[i]
if (dir.name === 'model') {
state.directives.model(el, dir, state.warn)
// remove value for textarea as its converted to text
if (el.tag === 'textarea' && el.props) {
el.props = el.props.filter(function (p) {
return p.name !== 'value'
})
}
break
}
}
}
}
function genAttrSegments(attrs) {
return attrs.map(function (_a) {
var name = _a.name,
value = _a.value
return genAttrSegment(name, value)
})
}
function genDOMPropSegments(props, attrs) {
var segments = []
props.forEach(function (_a) {
var name = _a.name,
value = _a.value
name = propsToAttrMap[name] || name.toLowerCase()
if (
isRenderableAttr(name) &&
!(
attrs &&
attrs.some(function (a) {
return a.name === name
})
)
) {
segments.push(genAttrSegment(name, value))
}
})
return segments
}
function genAttrSegment(name, value) {
if (plainStringRE.test(value)) {
// force double quote
value = value.replace(/^'|'$/g, '"')
// force enumerated attr to "true"
if (isEnumeratedAttr(name) && value !== '"false"') {
value = '"true"'
}
return {
type: RAW,
value: isBooleanAttr(name)
? ' '.concat(name, '="').concat(name, '"')
: value === '""'
? ' '.concat(name)
: ' '.concat(name, '="').concat(JSON.parse(value), '"')
}
} else {
return {
type: EXPRESSION,
value: '_ssrAttr('.concat(JSON.stringify(name), ',').concat(value, ')')
}
}
}
function genClassSegments(staticClass, classBinding) {
if (staticClass && !classBinding) {
return [
{ type: RAW, value: ' class="'.concat(JSON.parse(staticClass), '"') }
]
} else {
return [
{
type: EXPRESSION,
value: '_ssrClass('
.concat(staticClass || 'null', ',')
.concat(classBinding || 'null', ')')
}
]
}
}
function genStyleSegments(
staticStyle,
parsedStaticStyle,
styleBinding,
vShowExpression
) {
if (staticStyle && !styleBinding && !vShowExpression) {
return [
{ type: RAW, value: ' style='.concat(JSON.stringify(staticStyle)) }
]
} else {
return [
{
type: EXPRESSION,
value: '_ssrStyle('
.concat(parsedStaticStyle || 'null', ',')
.concat(styleBinding || 'null', ', ')
.concat(
vShowExpression
? '{ display: ('.concat(vShowExpression, ") ? '' : 'none' }")
: 'null',
')'
)
}
]
}
}
/**
* In SSR, the vdom tree is generated only once and never patched, so
* we can optimize most element / trees into plain string render functions.
* The SSR optimizer walks the AST tree to detect optimizable elements and trees.
*
* The criteria for SSR optimizability is quite a bit looser than static tree
* detection (which is designed for client re-render). In SSR we bail only for
* components/slots/custom directives.
*/
// optimizability constants
var optimizability = {
FALSE: 0,
FULL: 1,
SELF: 2,
CHILDREN: 3,
PARTIAL: 4 // self un-optimizable with some un-optimizable children
}
var isPlatformReservedTag
function optimize(root, options) {
if (!root) return
isPlatformReservedTag = options.isReservedTag || no
walk(root, true)
}
function walk(node, isRoot) {
if (isUnOptimizableTree(node)) {
node.ssrOptimizability = optimizability.FALSE
return
}
// root node or nodes with custom directives should always be a VNode
var selfUnoptimizable = isRoot || hasCustomDirective(node)
var check = function (child) {
if (child.ssrOptimizability !== optimizability.FULL) {
node.ssrOptimizability = selfUnoptimizable
? optimizability.PARTIAL
: optimizability.SELF
}
}
if (selfUnoptimizable) {
node.ssrOptimizability = optimizability.CHILDREN
}
if (node.type === 1) {
for (var i = 0, l = node.children.length; i < l; i++) {
var child = node.children[i]
walk(child)
check(child)
}
if (node.ifConditions) {
for (var i = 1, l = node.ifConditions.length; i < l; i++) {
var block = node.ifConditions[i].block
walk(block, isRoot)
check(block)
}
}
if (
node.ssrOptimizability == null ||
(!isRoot && (node.attrsMap['v-html'] || node.attrsMap['v-text']))
) {
node.ssrOptimizability = optimizability.FULL
} else {
node.children = optimizeSiblings(node)
}
} else {
node.ssrOptimizability = optimizability.FULL
}
}
function optimizeSiblings(el) {
var children = el.children
var optimizedChildren = []
var currentOptimizableGroup = []
var pushGroup = function () {
if (currentOptimizableGroup.length) {
optimizedChildren.push({
type: 1,
parent: el,
tag: 'template',
attrsList: [],
attrsMap: {},
rawAttrsMap: {},
children: currentOptimizableGroup,
ssrOptimizability: optimizability.FULL
})
}
currentOptimizableGroup = []
}
for (var i = 0; i < children.length; i++) {
var c = children[i]
if (c.ssrOptimizability === optimizability.FULL) {
currentOptimizableGroup.push(c)
} else {
// wrap fully-optimizable adjacent siblings inside a template tag
// so that they can be optimized into a single ssrNode by codegen
pushGroup()
optimizedChildren.push(c)
}
}
pushGroup()
return optimizedChildren
}
function isUnOptimizableTree(node) {
if (node.type === 2 || node.type === 3) {
// text or expression
return false
}
return (
isBuiltInTag(node.tag) || // built-in (slot, component)
!isPlatformReservedTag(node.tag) || // custom component
!!node.component || // "is" component
isSelectWithModel(node) // <select v-model> requires runtime inspection
)
}
var isBuiltInDir = makeMap('text,html,show,on,bind,model,pre,cloak,once')
function hasCustomDirective(node) {
return (
node.type === 1 &&
node.directives &&
node.directives.some(function (d) {
return !isBuiltInDir(d.name)
})
)
}
// <select v-model> cannot be optimized because it requires a runtime check
// to determine proper selected option
function isSelectWithModel(node) {
return (
node.type === 1 &&
node.tag === 'select' &&
node.directives != null &&
node.directives.some(function (d) {
return d.name === 'model'
})
)
}
// The SSR codegen is essentially extending the default codegen to handle
// segment types
var RAW = 0
var INTERPOLATION = 1
var EXPRESSION = 2
function generate(ast, options) {
var state = new CodegenState(options)
var code = ast ? genSSRElement(ast, state) : '_c("div")'
return {
render: 'with(this){return '.concat(code, '}'),
staticRenderFns: state.staticRenderFns
}
}
function genSSRElement(el, state) {
if (el.for && !el.forProcessed) {
return genFor(el, state, genSSRElement)
} else if (el.if && !el.ifProcessed) {
return genIf(el, state, genSSRElement)
} else if (el.tag === 'template' && !el.slotTarget) {
return el.ssrOptimizability === optimizability.FULL
? genChildrenAsStringNode(el, state)
: genSSRChildren(el, state) || 'void 0'
}
switch (el.ssrOptimizability) {
case optimizability.FULL:
// stringify whole tree
return genStringElement(el, state)
case optimizability.SELF:
// stringify self and check children
return genStringElementWithChildren(el, state)
case optimizability.CHILDREN:
// generate self as VNode and stringify children
return genNormalElement(el, state, true)
case optimizability.PARTIAL:
// generate self as VNode and check children
return genNormalElement(el, state, false)
default:
// bail whole tree
return genElement(el, state)
}
}
function genNormalElement(el, state, stringifyChildren) {
var data = el.plain ? undefined : genData(el, state)
var children = stringifyChildren
? '['.concat(genChildrenAsStringNode(el, state), ']')
: genSSRChildren(el, state, true)
return "_c('"
.concat(el.tag, "'")
.concat(data ? ','.concat(data) : '')
.concat(children ? ','.concat(children) : '', ')')
}
function genSSRChildren(el, state, checkSkip) {
return genChildren(el, state, checkSkip, genSSRElement, genSSRNode)
}
function genSSRNode(el, state) {
return el.type === 1 ? genSSRElement(el, state) : genText(el)
}
function genChildrenAsStringNode(el, state) {
return el.children.length
? '_ssrNode('.concat(flattenSegments(childrenToSegments(el, state)), ')')
: ''
}
function genStringElement(el, state) {
return '_ssrNode('.concat(elementToString(el, state), ')')
}
function genStringElementWithChildren(el, state) {
var children = genSSRChildren(el, state, true)
return '_ssrNode('
.concat(flattenSegments(elementToOpenTagSegments(el, state)), ',"</')
.concat(el.tag, '>"')
.concat(children ? ','.concat(children) : '', ')')
}
function elementToString(el, state) {
return '('.concat(flattenSegments(elementToSegments(el, state)), ')')
}
function elementToSegments(el, state) {
// v-for / v-if
if (el.for && !el.forProcessed) {
el.forProcessed = true
return [
{
type: EXPRESSION,
value: genFor(el, state, elementToString, '_ssrList')
}
]
} else if (el.if && !el.ifProcessed) {
el.ifProcessed = true
return [
{
type: EXPRESSION,
value: genIf(el, state, elementToString, '"<!---->"')
}
]
} else if (el.tag === 'template') {
return childrenToSegments(el, state)
}
var openSegments = elementToOpenTagSegments(el, state)
var childrenSegments = childrenToSegments(el, state)
var isUnaryTag = state.options.isUnaryTag
var close =
isUnaryTag && isUnaryTag(el.tag)
? []
: [{ type: RAW, value: '</'.concat(el.tag, '>') }]
return openSegments.concat(childrenSegments, close)
}
function elementToOpenTagSegments(el, state) {
applyModelTransform(el, state)
var binding
var segments = [{ type: RAW, value: '<'.concat(el.tag) }]
// attrs
if (el.attrs) {
segments.push.apply(segments, genAttrSegments(el.attrs))
}
// domProps
if (el.props) {
segments.push.apply(segments, genDOMPropSegments(el.props, el.attrs))
}
// v-bind="object"
if ((binding = el.attrsMap['v-bind'])) {
segments.push({
type: EXPRESSION,
value: '_ssrAttrs('.concat(binding, ')')
})
}
// v-bind.prop="object"
if ((binding = el.attrsMap['v-bind.prop'])) {
segments.push({
type: EXPRESSION,
value: '_ssrDOMProps('.concat(binding, ')')
})
}
// class
if (el.staticClass || el.classBinding) {
segments.push.apply(
segments,
genClassSegments(el.staticClass, el.classBinding)
)
}
// style & v-show
if (el.staticStyle || el.styleBinding || el.attrsMap['v-show']) {
segments.push.apply(
segments,
genStyleSegments(
el.attrsMap.style,
el.staticStyle,
el.styleBinding,
el.attrsMap['v-show']
)
)
}
// _scopedId
if (state.options.scopeId) {
segments.push({ type: RAW, value: ' '.concat(state.options.scopeId) })
}
segments.push({ type: RAW, value: '>' })
return segments
}
function childrenToSegments(el, state) {
var binding
if ((binding = el.attrsMap['v-html'])) {
return [{ type: EXPRESSION, value: '_s('.concat(binding, ')') }]
}
if ((binding = el.attrsMap['v-text'])) {
return [{ type: INTERPOLATION, value: '_s('.concat(binding, ')') }]
}
if (el.tag === 'textarea' && (binding = el.attrsMap['v-model'])) {
return [{ type: INTERPOLATION, value: '_s('.concat(binding, ')') }]
}
return el.children ? nodesToSegments(el.children, state) : []
}
function nodesToSegments(children, state) {
var segments = []
for (var i = 0; i < children.length; i++) {
var c = children[i]
if (c.type === 1) {
segments.push.apply(segments, elementToSegments(c, state))
} else if (c.type === 2) {
segments.push({ type: INTERPOLATION, value: c.expression })
} else if (c.type === 3) {
var text = escape(c.text)
if (c.isComment) {
text = '<!--' + text + '-->'
}
segments.push({ type: RAW, value: text })
}
}
return segments
}
function flattenSegments(segments) {
var mergedSegments = []
var textBuffer = ''
var pushBuffer = function () {
if (textBuffer) {
mergedSegments.push(JSON.stringify(textBuffer))
textBuffer = ''
}
}
for (var i = 0; i < segments.length; i++) {
var s = segments[i]
if (s.type === RAW) {
textBuffer += s.value
} else if (s.type === INTERPOLATION) {
pushBuffer()
mergedSegments.push('_ssrEscape('.concat(s.value, ')'))
} else if (s.type === EXPRESSION) {
pushBuffer()
mergedSegments.push('('.concat(s.value, ')'))
}
}
pushBuffer()
return mergedSegments.join('+')
}
var createCompiler = createCompilerCreator(function baseCompile(
template,
options
) {
var ast = parse(template.trim(), options)
optimize(ast, options)
var code = generate(ast, options)
return {
ast: ast,
render: code.render,
staticRenderFns: code.staticRenderFns
}
})
var _a = createCompiler(baseOptions),
compile = _a.compile,
compileToFunctions = _a.compileToFunctions
exports.compile = compile$1
exports.compileToFunctions = compileToFunctions$1
exports.generateCodeFrame = generateCodeFrame
exports.parseComponent = parseComponent
exports.ssrCompile = compile
exports.ssrCompileToFunctions = compileToFunctions
Object.defineProperty(exports, '__esModule', { value: true })
})