| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import {
- TextModes,
- ParserOptions,
- ElementNode,
- Namespaces,
- NodeTypes
- } from '@vue/compiler-core'
- export const enum DOMNamespaces {
- HTML = Namespaces.HTML,
- SVG,
- MATH_ML
- }
- export const parserOptionsMinimal: ParserOptions = {
- // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher
- getNamespace(tag: string, parent: ElementNode | undefined): DOMNamespaces {
- let ns = parent ? parent.ns : DOMNamespaces.HTML
- if (parent && ns === DOMNamespaces.MATH_ML) {
- if (parent.tag === 'annotation-xml') {
- if (tag === 'svg') {
- return DOMNamespaces.SVG
- }
- if (
- parent.props.some(
- a =>
- a.type === NodeTypes.ATTRIBUTE &&
- a.name === 'encoding' &&
- a.value != null &&
- (a.value.content === 'text/html' ||
- a.value.content === 'application/xhtml+xml')
- )
- ) {
- ns = DOMNamespaces.HTML
- }
- } else if (
- /^m(?:[ions]|text)$/.test(parent.tag) &&
- tag !== 'mglyph' &&
- tag !== 'malignmark'
- ) {
- ns = DOMNamespaces.HTML
- }
- } else if (parent && ns === DOMNamespaces.SVG) {
- if (
- parent.tag === 'foreignObject' ||
- parent.tag === 'desc' ||
- parent.tag === 'title'
- ) {
- ns = DOMNamespaces.HTML
- }
- }
- if (ns === DOMNamespaces.HTML) {
- if (tag === 'svg') {
- return DOMNamespaces.SVG
- }
- if (tag === 'math') {
- return DOMNamespaces.MATH_ML
- }
- }
- return ns
- },
- // https://html.spec.whatwg.org/multipage/parsing.html#parsing-html-fragments
- getTextMode(tag: string, ns: DOMNamespaces): TextModes {
- if (ns === DOMNamespaces.HTML) {
- if (tag === 'textarea' || tag === 'title') {
- return TextModes.RCDATA
- }
- if (
- /^(?:style|xmp|iframe|noembed|noframes|script|noscript)$/i.test(tag)
- ) {
- return TextModes.RAWTEXT
- }
- }
- return TextModes.DATA
- },
- isVoidTag(tag: string): boolean {
- return /^(?:area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/i.test(
- tag
- )
- }
- }
|