@reblu/site-blocks 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +12980 -51
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +125 -11
- package/dist/index.d.ts +125 -11
- package/dist/index.js +12994 -59
- package/dist/index.js.map +1 -1
- package/package.json +9 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/reading-time.ts","../src/lib/format-price.ts","../src/lib/share-urls.ts","../src/lib/markdown.ts","../src/components/markdown-renderer.tsx","../src/components/treatment.tsx","../src/components/_page-parts.tsx","../src/components/specialty.tsx","../src/components/profile-card.tsx","../src/components/product-card.tsx"],"sourcesContent":["// `@reblu/site-blocks` root entry — the framework-agnostic, RSC-safe surface.\n// Everything here is usable inside a React Server Component: pure helpers, the\n// markdown pipeline, and the presentational organisms (no hooks, no browser API).\n// Client-only primitives (useCollection, Collection, ShareButtons) ship from the\n// `./client` subpath — see ./client.ts.\n\n// ── Pure helpers ─────────────────────────────────────────────────────────────\nexport { readingTime } from './lib/reading-time'\nexport { formatPrice } from './lib/format-price'\nexport { buildShareUrls, type ShareUrls } from './lib/share-urls'\n\n// ── Markdown pipeline (marked → DOMPurify) ───────────────────────────────────\nexport {\n markdownToSafeHtml,\n sanitizeHtml,\n isAllowedYouTubeHost,\n ALLOWED_YOUTUBE_HOSTS,\n} from './lib/markdown'\n\n// ── Renderers ────────────────────────────────────────────────────────────────\nexport { MarkdownRenderer, SafeHtml } from './components/markdown-renderer'\nexport type { MarkdownRendererProps, SafeHtmlProps } from './components/markdown-renderer'\n\n// ── Presentational organisms ─────────────────────────────────────────────────\nexport { Treatment, type TreatmentProps } from './components/treatment'\nexport { Specialty, type SpecialtyProps } from './components/specialty'\nexport { ProfileCard, type ProfileCardProps } from './components/profile-card'\nexport { ProductCard, type ProductCardProps } from './components/product-card'\n","/**\n * Estimate a post's reading time in minutes from its content.\n *\n * The canonical helper for the Reblu SITE SDK: base-api does not persist reading\n * time on the blog contracts, so the SITE computes it wherever `content` is\n * present (the post detail and preview). The list contract omits `content`, so\n * cards show no reading time until the SDK surfaces the field.\n */\nconst WORDS_PER_MINUTE = 200\n\nexport function readingTime(content: string | null | undefined): number | null {\n if (!content?.trim()) return null\n // Strip HTML tags so markup does not inflate the word count.\n const words = content\n .replace(/<[^>]*>/g, ' ')\n .split(/\\s+/)\n .filter(Boolean).length\n if (words === 0) return null\n return Math.max(1, Math.round(words / WORDS_PER_MINUTE))\n}\n","/**\n * Format an integer-cents amount as a localized currency string.\n *\n * All Reblu shop monetary values travel as integer cents (Prisma `Int`, never\n * Decimal), so the SITE never sees floats. This helper is the single place that\n * converts cents → major units and applies `Intl.NumberFormat`, keeping price\n * rendering consistent across `ProductCard` and any future shop organism.\n */\nexport function formatPrice(cents: number, currency = 'EUR', locale = 'es-ES'): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(cents / 100)\n}\n","/**\n * Pure builders for the social-share targets used by `ShareButtons`.\n *\n * Framework-free so the URL construction is unit-testable without rendering.\n * Every provider gets the canonical post URL; providers that support custom copy\n * (X, WhatsApp) also receive the post title.\n */\nexport interface ShareUrls {\n linkedin: string\n x: string\n facebook: string\n whatsapp: string\n}\n\nexport function buildShareUrls(url: string, title: string): ShareUrls {\n const encodedUrl = encodeURIComponent(url)\n const encodedTitle = encodeURIComponent(title)\n\n return {\n // LinkedIn derives title/description from the target page's Open Graph tags,\n // so it only takes the URL.\n linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`,\n // The intent endpoint keeps the /intent/tweet path under the x.com domain.\n x: `https://x.com/intent/tweet?url=${encodedUrl}&text=${encodedTitle}`,\n facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`,\n whatsapp: `https://wa.me/?text=${encodeURIComponent(`${title} ${url}`)}`,\n }\n}\n","import DOMPurify from 'isomorphic-dompurify'\nimport { Marked } from 'marked'\n\n/**\n * Canonical Blog markdown → **safe HTML** pipeline for the Reblu SITE SDK.\n *\n * Blog `content` arrives as raw Markdown (tiptap-markdown). This module owns the\n * single, hardened conversion every SITE reuses instead of reinventing it:\n *\n * Markdown ──(marked, GFM)──▶ HTML ──(DOMPurify)──▶ safe HTML\n *\n * DOMPurify is MANDATORY (XSS): the output is later parsed into React nodes by\n * `MarkdownRenderer` (no `dangerouslySetInnerHTML`), but sanitising here means the\n * string is safe regardless of how a consumer chooses to render it.\n *\n * `<iframe>` is the one non-default tag we allow, and ONLY when its `src` host is\n * on the YouTube allowlist — every other embed (arbitrary iframes) is dropped.\n */\n\n/** Hosts permitted for `<iframe>` embeds. Exact host match — no suffix tricks. */\nexport const ALLOWED_YOUTUBE_HOSTS: readonly string[] = [\n 'youtube.com',\n 'www.youtube.com',\n 'youtube-nocookie.com',\n 'www.youtube-nocookie.com',\n]\n\n/** True when `src` is an absolute URL whose host is exactly a YouTube host. */\nexport function isAllowedYouTubeHost(src: string | null | undefined): boolean {\n if (!src) return false\n try {\n const { host } = new URL(src)\n return ALLOWED_YOUTUBE_HOSTS.includes(host)\n } catch {\n // Relative or malformed URLs can't be host-verified → reject.\n return false\n }\n}\n\n// Local marked instance — avoids mutating the global `marked` singleton another\n// package (base-api) may also configure. GFM on; no single-newline <br> (tiptap\n// does not emit hard breaks on a lone newline).\nconst marked = new Marked({ gfm: true, breaks: false })\n\n/**\n * DOMPurify config: default-safe HTML plus `<iframe>` (host-gated by the hook\n * below) and a handful of attributes the YouTube embed and images need.\n */\nconst PURIFY_CONFIG = {\n ADD_TAGS: ['iframe'],\n ADD_ATTR: ['allow', 'allowfullscreen', 'frameborder', 'scrolling', 'title', 'loading', 'target'],\n}\n\n/**\n * Enforce the YouTube host allowlist. Runs as a scoped hook (added/removed around\n * each sanitise call) so we never leave a global DOMPurify hook installed for\n * other consumers of the shared singleton.\n */\nfunction dropDisallowedIframes(node: Element): void {\n if (node.nodeName?.toLowerCase() !== 'iframe') return\n const src = node.getAttribute('src')\n if (!isAllowedYouTubeHost(src)) {\n node.remove()\n }\n}\n\n/**\n * Sanitise an already-HTML string with the same policy (default-safe tags plus a\n * host-gated `<iframe>`). Use for content that arrives as HTML — e.g. page\n * `section.contentHtml` from base-api, which is `marked` output that has NOT been\n * sanitised server-side.\n */\nexport function sanitizeHtml(html: string | null | undefined): string {\n if (!html?.trim()) return ''\n\n DOMPurify.addHook('uponSanitizeElement', dropDisallowedIframes as never)\n try {\n // sanitize() is synchronous, so the scoped hook cannot leak into another call.\n return DOMPurify.sanitize(html, PURIFY_CONFIG)\n } finally {\n DOMPurify.removeHook('uponSanitizeElement')\n }\n}\n\n/** Convert raw Markdown to sanitised, XSS-safe HTML. */\nexport function markdownToSafeHtml(markdown: string | null | undefined): string {\n if (!markdown?.trim()) return ''\n const rawHtml = marked.parse(markdown, { async: false }) as string\n return sanitizeHtml(rawHtml)\n}\n","import * as React from 'react'\nimport { cn } from '@reblu/site-ui'\nimport parse, { domToReact, Element, type DOMNode, type HTMLReactParserOptions } from 'html-react-parser'\n\nimport { markdownToSafeHtml } from '../lib/markdown'\n\n/**\n * `MarkdownRenderer` — the canonical Blog body renderer.\n *\n * Pipeline: raw Markdown → `markdownToSafeHtml` (marked → DOMPurify, XSS-safe) →\n * `html-react-parser` into a token-styled React tree. We parse the sanitised HTML\n * into real React nodes (a component map) rather than using\n * `dangerouslySetInnerHTML`, so images lazy-load, external links are hardened, and\n * YouTube embeds get a responsive aspect-ratio wrapper.\n *\n * RSC-safe: no hooks, no browser APIs — renders inside a Server Component.\n * Styling is entirely token-driven (shadcn/OKLCH tokens); the block carries no\n * brand aesthetic of its own.\n */\nexport interface MarkdownRendererProps {\n /** Raw Markdown (blog `content`). */\n content: string | null | undefined\n className?: string\n /**\n * Shift every heading down by this many levels (clamped to h6). Use `1` on a\n * page that already renders its own `<h1>` so markdown `#` becomes `<h2>` and\n * the page keeps a single h1.\n */\n headingOffset?: number\n}\n\nconst HEADING_CLASSES: Record<number, string> = {\n 1: 'text-3xl font-bold mt-8 mb-4 first:mt-0',\n 2: 'text-2xl font-bold mt-7 mb-3 first:mt-0',\n 3: 'text-xl font-bold mt-6 mb-2 first:mt-0',\n 4: 'text-lg font-bold mt-5 mb-2 first:mt-0',\n 5: 'text-base font-bold mt-4 mb-2 first:mt-0',\n 6: 'text-sm font-bold mt-4 mb-2 first:mt-0',\n}\n\nfunction hasClass(el: Element, name: string): boolean {\n return typeof el.attribs.class === 'string' && el.attribs.class.split(/\\s+/).includes(name)\n}\n\nfunction isExternalHref(href: string | undefined): boolean {\n return !!href && /^(https?:)?\\/\\//.test(href)\n}\n\nfunction buildOptions(headingOffset: number): HTMLReactParserOptions {\n const options: HTMLReactParserOptions = {\n replace: (node) => {\n if (!(node instanceof Element)) return undefined\n const children = () => domToReact(node.children as DOMNode[], options)\n const { name, attribs } = node\n\n // Headings — shift level, keep the rendered level's visual weight.\n const headingMatch = /^h([1-6])$/.exec(name)\n if (headingMatch) {\n const rendered = Math.min(6, Number(headingMatch[1]) + headingOffset)\n const Tag = `h${rendered}` as keyof React.JSX.IntrinsicElements\n return <Tag className={HEADING_CLASSES[rendered]}>{children()}</Tag>\n }\n\n switch (name) {\n case 'p':\n return <p className='my-4 leading-relaxed text-foreground/90'>{children()}</p>\n case 'ul':\n return (\n <ul className={hasClass(node, 'contains-task-list') ? 'list-none pl-0 my-4 space-y-1' : 'list-disc ml-6 my-4'}>\n {children()}\n </ul>\n )\n case 'ol':\n return <ol className='list-decimal ml-6 my-4'>{children()}</ol>\n case 'li':\n return (\n <li className={hasClass(node, 'task-list-item') ? 'flex items-start gap-2 my-1' : 'my-1'}>\n {children()}\n </li>\n )\n case 'blockquote':\n return (\n <blockquote className='border-l-4 border-primary/50 pl-6 italic my-6 text-muted-foreground'>\n {children()}\n </blockquote>\n )\n case 'pre':\n return (\n <pre className='rounded-lg border border-input bg-muted p-4 my-6 overflow-x-auto font-mono text-sm'>\n {children()}\n </pre>\n )\n case 'code': {\n // Block code (inside <pre>) inherits the <pre> chrome; only inline code\n // gets the chip treatment.\n const isBlock = node.parent instanceof Element && node.parent.name === 'pre'\n if (isBlock) return <code className='block'>{children()}</code>\n return <code className='rounded bg-muted px-1.5 py-0.5 font-mono text-sm'>{children()}</code>\n }\n case 'a': {\n const href = attribs.href\n const external = isExternalHref(href)\n return (\n <a\n href={href}\n className='text-primary underline underline-offset-4 hover:text-primary/80'\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children()}\n </a>\n )\n }\n case 'img':\n if (!attribs.src) return <></>\n return (\n // Plain <img> keeps the block portable — a distributable can't assume a\n // tenant's next/image remotePatterns. Consumers can post-process if they\n // want optimisation.\n <img\n src={attribs.src}\n alt={attribs.alt ?? ''}\n loading='lazy'\n className='rounded-lg w-full h-auto my-6'\n />\n )\n case 'iframe':\n // Only allowlisted YouTube iframes reach here (sanitiser drops the rest).\n return (\n <div className='relative my-6 aspect-video w-full overflow-hidden rounded-lg'>\n <iframe\n src={attribs.src}\n title={attribs.title ?? 'Embedded video'}\n allow={attribs.allow ?? 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'}\n allowFullScreen\n className='absolute inset-0 h-full w-full border-0'\n />\n </div>\n )\n case 'hr':\n return <hr className='my-8 border-muted-foreground/30' />\n case 'strong':\n return <strong className='font-bold text-foreground'>{children()}</strong>\n case 'em':\n return <em className='italic'>{children()}</em>\n case 'del':\n return <del className='line-through'>{children()}</del>\n default:\n return undefined\n }\n },\n }\n return options\n}\n\nexport function MarkdownRenderer({ content, className, headingOffset = 0 }: MarkdownRendererProps) {\n const html = markdownToSafeHtml(content)\n if (!html) return null\n\n return (\n <div className={cn('max-w-none', className)} data-slot='markdown'>\n {parse(html, buildOptions(headingOffset))}\n </div>\n )\n}\n\n/**\n * Render an **already-sanitised** HTML string through the same token-driven\n * component map as {@link MarkdownRenderer}. Consumers pass HTML that has been run\n * through `sanitizeHtml`/`markdownToSafeHtml`; this component does NOT sanitise, so\n * never hand it untrusted HTML.\n */\nexport interface SafeHtmlProps {\n html: string | null | undefined\n className?: string\n headingOffset?: number\n}\n\nexport function SafeHtml({ html, className, headingOffset = 0 }: SafeHtmlProps) {\n if (!html) return null\n return (\n <div className={cn('max-w-none', className)} data-slot='safe-html'>\n {parse(html, buildOptions(headingOffset))}\n </div>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { PageDetail } from '@reblu/site-contracts'\n\nimport { PageHero, PageSectionList } from './_page-parts'\n\n/**\n * `Treatment` — full treatment page organism over a `PageDetail` (a SERVICE-type\n * page). Renders the hero band followed by the ordered content sections.\n * Token-driven, RSC-safe.\n */\nexport interface TreatmentProps {\n page: PageDetail\n className?: string\n}\n\nexport function Treatment({ page, className }: TreatmentProps) {\n return (\n <article className={cn('space-y-12', className)} data-slot='treatment'>\n <PageHero page={page} />\n <PageSectionList sections={page.sections} />\n </article>\n )\n}\n","import { Button, cn } from '@reblu/site-ui'\nimport type { PageDetail, PageSection } from '@reblu/site-contracts'\n\nimport { sanitizeHtml } from '../lib/markdown'\nimport { SafeHtml } from './markdown-renderer'\n\n/**\n * Internal building blocks shared by the `Treatment` and `Specialty` organisms.\n * Not part of the public API — imported directly by those two files.\n */\n\nconst KNOWN_BUTTON_VARIANTS = new Set([\n 'default',\n 'destructive',\n 'outline',\n 'secondary',\n 'ghost',\n 'link',\n])\n\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n\nfunction toButtonVariant(variant: string | null): ButtonVariant {\n return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? (variant as ButtonVariant) : 'default'\n}\n\n/** Hero band for a page: category chip, title, subtitle and cover image. */\nexport function PageHero({ page }: { page: PageDetail }) {\n return (\n <header className='space-y-4'>\n {page.category && (\n <span className='inline-flex items-center rounded-full bg-secondary px-3 py-1 text-sm font-medium text-secondary-foreground'>\n {page.category.name}\n </span>\n )}\n <h1 className='text-4xl font-bold tracking-tight'>{page.title}</h1>\n {page.subtitle && <p className='text-lg text-muted-foreground'>{page.subtitle}</p>}\n {page.coverImageUrl && (\n <div className='relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={page.coverImageUrl}\n alt={page.title}\n loading='lazy'\n className='h-full w-full object-cover'\n />\n </div>\n )}\n </header>\n )\n}\n\nfunction SectionCta({ section }: { section: PageSection }) {\n if (!section.ctaLabel || !section.ctaUrl) return null\n return (\n <div className='pt-2'>\n <Button asChild variant={toButtonVariant(section.ctaVariant)}>\n <a\n href={section.ctaUrl}\n {...(section.ctaIsExternal ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {section.ctaLabel}\n </a>\n </Button>\n </div>\n )\n}\n\nfunction SectionImages({ section }: { section: PageSection }) {\n if (section.images.length === 0) return null\n return (\n <div className={cn('grid gap-4', section.images.length > 1 ? 'sm:grid-cols-2' : 'grid-cols-1')}>\n {section.images.map((img) => (\n <figure key={`${img.url}-${img.order}`} className='space-y-1'>\n <div className='relative aspect-video w-full overflow-hidden rounded-lg bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={img.url} alt={img.alt} loading='lazy' className='h-full w-full object-cover' />\n </div>\n {img.caption && (\n <figcaption className='text-sm text-muted-foreground'>{img.caption}</figcaption>\n )}\n </figure>\n ))}\n </div>\n )\n}\n\n/** One page section — heading, sanitised body, images and CTA. */\nexport function PageSectionBlock({ section }: { section: PageSection }) {\n const imageFirst = section.layout === 'IMAGE_TEXT'\n const sideBySide = section.layout === 'TEXT_IMAGE' || section.layout === 'IMAGE_TEXT'\n const hasImages = section.images.length > 0\n\n const body = (\n <div className='space-y-4'>\n {section.heading && <h2 className='text-2xl font-bold'>{section.heading}</h2>}\n {/* contentHtml from base-api is marked output that is NOT sanitised server-side. */}\n <SafeHtml html={sanitizeHtml(section.contentHtml)} headingOffset={2} />\n <SectionCta section={section} />\n </div>\n )\n\n if (sideBySide && hasImages) {\n return (\n <section className='grid items-center gap-8 md:grid-cols-2'>\n {imageFirst ? (\n <>\n <SectionImages section={section} />\n {body}\n </>\n ) : (\n <>\n {body}\n <SectionImages section={section} />\n </>\n )}\n </section>\n )\n }\n\n return (\n <section className='space-y-4'>\n {body}\n <SectionImages section={section} />\n </section>\n )\n}\n\n/** Ordered list of a page's sections. */\nexport function PageSectionList({ sections }: { sections: PageSection[] }) {\n if (sections.length === 0) return null\n const ordered = sections.slice().sort((a, b) => a.order - b.order)\n return (\n <div className='space-y-12'>\n {ordered.map((section) => (\n <PageSectionBlock key={section.id} section={section} />\n ))}\n </div>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { PageDetail, PageListItem } from '@reblu/site-contracts'\n\nimport { PageHero, PageSectionList } from './_page-parts'\n\n/**\n * `Specialty` — specialty page organism over a `PageDetail`. Like `Treatment` it\n * renders a hero and content sections, but a specialty groups treatments, so it\n * also renders an optional grid of the treatment pages under it (links to each\n * treatment). Token-driven, RSC-safe.\n */\nexport interface SpecialtyProps {\n page: PageDetail\n /** Treatment pages under this specialty. Rendered as a linked grid when present. */\n treatments?: PageListItem[]\n /** Builds the href for a treatment page from its slug. Defaults to `/{slug}`. */\n treatmentHref?: (slug: string) => string\n /** Heading for the treatments grid. Defaults to \"Treatments\". */\n treatmentsLabel?: string\n className?: string\n}\n\nexport function Specialty({\n page,\n treatments = [],\n treatmentHref = (slug) => `/${slug}`,\n treatmentsLabel = 'Treatments',\n className,\n}: SpecialtyProps) {\n return (\n <article className={cn('space-y-12', className)} data-slot='specialty'>\n <PageHero page={page} />\n <PageSectionList sections={page.sections} />\n\n {treatments.length > 0 && (\n <section className='space-y-6'>\n <h2 className='text-2xl font-bold'>{treatmentsLabel}</h2>\n <ul className='grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3'>\n {treatments.map((t) => (\n <li key={t.slug}>\n <a\n href={treatmentHref(t.slug)}\n className='group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg'\n >\n {t.coverImageUrl && (\n <div className='relative aspect-video overflow-hidden bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={t.coverImageUrl}\n alt=''\n loading='lazy'\n className='h-full w-full object-cover transition-transform group-hover:scale-105'\n />\n </div>\n )}\n <div className='flex flex-1 flex-col gap-2 p-4'>\n <h3 className='font-semibold leading-tight transition-colors group-hover:text-primary'>\n {t.title}\n </h3>\n {t.excerpt && (\n <p className='line-clamp-2 text-sm text-muted-foreground'>{t.excerpt}</p>\n )}\n </div>\n </a>\n </li>\n ))}\n </ul>\n </section>\n )}\n </article>\n )\n}\n","import { cn } from '@reblu/site-ui'\n\n/**\n * `ProfileCard` — presentational professional/team-member card (the clinic\n * \"doctor card\" from the mockups). There is no SITE API contract for staff yet,\n * so the prop shape is local and intentionally minimal. Token-driven, RSC-safe.\n */\nexport interface ProfileCardProps {\n name: string\n role?: string\n imageUrl?: string\n /** Short list of specialties / tags shown as chips. */\n specialties?: string[]\n bio?: string\n /** Link target for the full profile. Omit to render non-linking. */\n href?: string\n className?: string\n}\n\n/** Up to two initials from the name, for the avatar fallback. */\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase() ?? '')\n .join('')\n}\n\nexport function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, className }: ProfileCardProps) {\n const NameTag = href ? 'a' : 'span'\n\n return (\n <article\n className={cn(\n 'flex flex-col items-center gap-3 rounded-lg border bg-card p-6 text-center',\n className,\n )}\n data-slot='profile-card'\n >\n <div className='relative h-24 w-24 overflow-hidden rounded-full bg-muted'>\n {imageUrl ? (\n <img src={imageUrl} alt={name} loading='lazy' className='h-full w-full object-cover' />\n ) : (\n <span className='flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground' aria-hidden='true'>\n {initials(name)}\n </span>\n )}\n </div>\n\n <div className='space-y-1'>\n <h3 className='text-lg font-semibold leading-tight'>\n <NameTag\n {...(href ? { href, className: 'transition-colors hover:text-primary' } : {})}\n >\n {name}\n </NameTag>\n </h3>\n {role && <p className='text-sm text-muted-foreground'>{role}</p>}\n </div>\n\n {specialties.length > 0 && (\n <ul className='flex flex-wrap justify-center gap-1.5 p-0'>\n {specialties.map((s) => (\n <li\n key={s}\n className='inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground'\n >\n {s}\n </li>\n ))}\n </ul>\n )}\n\n {bio && <p className='text-sm text-muted-foreground'>{bio}</p>}\n </article>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { ShopProductListItem } from '@reblu/site-contracts'\n\nimport { formatPrice } from '../lib/format-price'\n\n/**\n * `ProductCard` — presentational shop product tile over `ShopProductListItem`.\n *\n * Token-driven, RSC-safe (no hooks). Prices arrive as integer cents and are\n * formatted with {@link formatPrice}. A `comparePrice` higher than `price` renders\n * as a struck-through \"was\" amount.\n */\nexport interface ProductCardProps {\n product: ShopProductListItem\n /** Link target for the product (e.g. `/shop/{slug}`). Omit to render non-linking. */\n href?: string\n currencyCode?: string\n locale?: string\n className?: string\n}\n\nexport function ProductCard({ product, href, currencyCode = 'EUR', locale, className }: ProductCardProps) {\n const image = product.images.find((i) => i.isPrimary) ?? product.images[0]\n const hasDiscount = product.comparePrice != null && product.comparePrice > product.price\n\n return (\n <article\n className={cn(\n 'group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg',\n className,\n )}\n data-slot='product-card'\n >\n <div className='relative aspect-square overflow-hidden bg-muted'>\n {image ? (\n <img\n src={image.url}\n alt={image.alt ?? product.name}\n loading='lazy'\n className='h-full w-full object-cover transition-transform group-hover:scale-105'\n />\n ) : (\n <div className='flex h-full items-center justify-center text-4xl text-muted-foreground/30' aria-hidden='true'>\n 🛍️\n </div>\n )}\n </div>\n\n <div className='flex flex-1 flex-col gap-2 p-4'>\n {product.category && (\n <span className='inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground'>\n {product.category.name}\n </span>\n )}\n\n <h3 className='text-base font-semibold leading-tight'>\n {href ? (\n <a href={href} className='transition-colors hover:text-primary'>\n {product.name}\n </a>\n ) : (\n product.name\n )}\n </h3>\n\n {product.shortDescription && (\n <p className='line-clamp-2 text-sm text-muted-foreground'>{product.shortDescription}</p>\n )}\n\n <div className='mt-auto flex items-baseline gap-2 pt-2'>\n <span className='text-lg font-bold text-foreground'>\n {formatPrice(product.price, currencyCode, locale)}\n </span>\n {hasDiscount && (\n <span className='text-sm text-muted-foreground line-through'>\n {formatPrice(product.comparePrice as number, currencyCode, locale)}\n </span>\n )}\n </div>\n </div>\n </article>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQA,IAAM,mBAAmB;AAElB,SAAS,YAAY,SAAmD;AAC7E,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAE7B,QAAM,QAAQ,QACX,QAAQ,YAAY,GAAG,EACvB,MAAM,KAAK,EACX,OAAO,OAAO,EAAE;AACnB,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,gBAAgB,CAAC;AACzD;;;ACXO,SAAS,YAAY,OAAe,WAAW,OAAO,SAAS,SAAiB;AACrF,SAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,IACnC,OAAO;AAAA,IACP;AAAA,EACF,CAAC,EAAE,OAAO,QAAQ,GAAG;AACvB;;;ACCO,SAAS,eAAe,KAAa,OAA0B;AACpE,QAAM,aAAa,mBAAmB,GAAG;AACzC,QAAM,eAAe,mBAAmB,KAAK;AAE7C,SAAO;AAAA;AAAA;AAAA,IAGL,UAAU,uDAAuD,UAAU;AAAA;AAAA,IAE3E,GAAG,kCAAkC,UAAU,SAAS,YAAY;AAAA,IACpE,UAAU,gDAAgD,UAAU;AAAA,IACpE,UAAU,uBAAuB,mBAAmB,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;AAAA,EACxE;AACF;;;AC3BA,kCAAsB;AACtB,oBAAuB;AAmBhB,IAAM,wBAA2C;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,qBAAqB,KAAyC;AAC5E,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,IAAI,IAAI,GAAG;AAC5B,WAAO,sBAAsB,SAAS,IAAI;AAAA,EAC5C,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAKA,IAAM,SAAS,IAAI,qBAAO,EAAE,KAAK,MAAM,QAAQ,MAAM,CAAC;AAMtD,IAAM,gBAAgB;AAAA,EACpB,UAAU,CAAC,QAAQ;AAAA,EACnB,UAAU,CAAC,SAAS,mBAAmB,eAAe,aAAa,SAAS,WAAW,QAAQ;AACjG;AAOA,SAAS,sBAAsB,MAAqB;AAClD,MAAI,KAAK,UAAU,YAAY,MAAM,SAAU;AAC/C,QAAM,MAAM,KAAK,aAAa,KAAK;AACnC,MAAI,CAAC,qBAAqB,GAAG,GAAG;AAC9B,SAAK,OAAO;AAAA,EACd;AACF;AAQO,SAAS,aAAa,MAAyC;AACpE,MAAI,CAAC,MAAM,KAAK,EAAG,QAAO;AAE1B,8BAAAA,QAAU,QAAQ,uBAAuB,qBAA8B;AACvE,MAAI;AAEF,WAAO,4BAAAA,QAAU,SAAS,MAAM,aAAa;AAAA,EAC/C,UAAE;AACA,gCAAAA,QAAU,WAAW,qBAAqB;AAAA,EAC5C;AACF;AAGO,SAAS,mBAAmB,UAA6C;AAC9E,MAAI,CAAC,UAAU,KAAK,EAAG,QAAO;AAC9B,QAAM,UAAU,OAAO,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC;AACvD,SAAO,aAAa,OAAO;AAC7B;;;ACxFA,qBAAmB;AACnB,+BAAsF;AA0DvE;AA7Bf,IAAM,kBAA0C;AAAA,EAC9C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEA,SAAS,SAAS,IAAa,MAAuB;AACpD,SAAO,OAAO,GAAG,QAAQ,UAAU,YAAY,GAAG,QAAQ,MAAM,MAAM,KAAK,EAAE,SAAS,IAAI;AAC5F;AAEA,SAAS,eAAe,MAAmC;AACzD,SAAO,CAAC,CAAC,QAAQ,kBAAkB,KAAK,IAAI;AAC9C;AAEA,SAAS,aAAa,eAA+C;AACnE,QAAM,UAAkC;AAAA,IACtC,SAAS,CAAC,SAAS;AACjB,UAAI,EAAE,gBAAgB,kCAAU,QAAO;AACvC,YAAM,WAAW,UAAM,qCAAW,KAAK,UAAuB,OAAO;AACrE,YAAM,EAAE,MAAM,QAAQ,IAAI;AAG1B,YAAM,eAAe,aAAa,KAAK,IAAI;AAC3C,UAAI,cAAc;AAChB,cAAM,WAAW,KAAK,IAAI,GAAG,OAAO,aAAa,CAAC,CAAC,IAAI,aAAa;AACpE,cAAM,MAAM,IAAI,QAAQ;AACxB,eAAO,4CAAC,OAAI,WAAW,gBAAgB,QAAQ,GAAI,mBAAS,GAAE;AAAA,MAChE;AAEA,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,4CAAC,OAAE,WAAU,2CAA2C,mBAAS,GAAE;AAAA,QAC5E,KAAK;AACH,iBACE,4CAAC,QAAG,WAAW,SAAS,MAAM,oBAAoB,IAAI,kCAAkC,uBACrF,mBAAS,GACZ;AAAA,QAEJ,KAAK;AACH,iBAAO,4CAAC,QAAG,WAAU,0BAA0B,mBAAS,GAAE;AAAA,QAC5D,KAAK;AACH,iBACE,4CAAC,QAAG,WAAW,SAAS,MAAM,gBAAgB,IAAI,gCAAgC,QAC/E,mBAAS,GACZ;AAAA,QAEJ,KAAK;AACH,iBACE,4CAAC,gBAAW,WAAU,uEACnB,mBAAS,GACZ;AAAA,QAEJ,KAAK;AACH,iBACE,4CAAC,SAAI,WAAU,sFACZ,mBAAS,GACZ;AAAA,QAEJ,KAAK,QAAQ;AAGX,gBAAM,UAAU,KAAK,kBAAkB,oCAAW,KAAK,OAAO,SAAS;AACvE,cAAI,QAAS,QAAO,4CAAC,UAAK,WAAU,SAAS,mBAAS,GAAE;AACxD,iBAAO,4CAAC,UAAK,WAAU,oDAAoD,mBAAS,GAAE;AAAA,QACxF;AAAA,QACA,KAAK,KAAK;AACR,gBAAM,OAAO,QAAQ;AACrB,gBAAM,WAAW,eAAe,IAAI;AACpC,iBACE;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAU;AAAA,cACT,GAAI,WAAW,EAAE,QAAQ,UAAU,KAAK,sBAAsB,IAAI,CAAC;AAAA,cAEnE,mBAAS;AAAA;AAAA,UACZ;AAAA,QAEJ;AAAA,QACA,KAAK;AACH,cAAI,CAAC,QAAQ,IAAK,QAAO,2EAAE;AAC3B;AAAA;AAAA;AAAA;AAAA,YAIE;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK,QAAQ;AAAA,gBACb,KAAK,QAAQ,OAAO;AAAA,gBACpB,SAAQ;AAAA,gBACR,WAAU;AAAA;AAAA,YACZ;AAAA;AAAA,QAEJ,KAAK;AAEH,iBACE,4CAAC,SAAI,WAAU,gEACb;AAAA,YAAC;AAAA;AAAA,cACC,KAAK,QAAQ;AAAA,cACb,OAAO,QAAQ,SAAS;AAAA,cACxB,OAAO,QAAQ,SAAS;AAAA,cACxB,iBAAe;AAAA,cACf,WAAU;AAAA;AAAA,UACZ,GACF;AAAA,QAEJ,KAAK;AACH,iBAAO,4CAAC,QAAG,WAAU,mCAAkC;AAAA,QACzD,KAAK;AACH,iBAAO,4CAAC,YAAO,WAAU,6BAA6B,mBAAS,GAAE;AAAA,QACnE,KAAK;AACH,iBAAO,4CAAC,QAAG,WAAU,UAAU,mBAAS,GAAE;AAAA,QAC5C,KAAK;AACH,iBAAO,4CAAC,SAAI,WAAU,gBAAgB,mBAAS,GAAE;AAAA,QACnD;AACE,iBAAO;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,EAAE,SAAS,WAAW,gBAAgB,EAAE,GAA0B;AACjG,QAAM,OAAO,mBAAmB,OAAO;AACvC,MAAI,CAAC,KAAM,QAAO;AAElB,SACE,4CAAC,SAAI,eAAW,mBAAG,cAAc,SAAS,GAAG,aAAU,YACpD,uCAAAC,SAAM,MAAM,aAAa,aAAa,CAAC,GAC1C;AAEJ;AAcO,SAAS,SAAS,EAAE,MAAM,WAAW,gBAAgB,EAAE,GAAkB;AAC9E,MAAI,CAAC,KAAM,QAAO;AAClB,SACE,4CAAC,SAAI,eAAW,mBAAG,cAAc,SAAS,GAAG,aAAU,aACpD,uCAAAA,SAAM,MAAM,aAAa,aAAa,CAAC,GAC1C;AAEJ;;;ACxLA,IAAAC,kBAAmB;;;ACAnB,IAAAC,kBAA2B;AA6BvB,IAAAC,sBAAA;AAlBJ,IAAM,wBAAwB,oBAAI,IAAI;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAID,SAAS,gBAAgB,SAAuC;AAC9D,SAAO,WAAW,sBAAsB,IAAI,OAAO,IAAK,UAA4B;AACtF;AAGO,SAAS,SAAS,EAAE,KAAK,GAAyB;AACvD,SACE,8CAAC,YAAO,WAAU,aACf;AAAA,SAAK,YACJ,6CAAC,UAAK,WAAU,8GACb,eAAK,SAAS,MACjB;AAAA,IAEF,6CAAC,QAAG,WAAU,qCAAqC,eAAK,OAAM;AAAA,IAC7D,KAAK,YAAY,6CAAC,OAAE,WAAU,iCAAiC,eAAK,UAAS;AAAA,IAC7E,KAAK,iBACJ,6CAAC,SAAI,WAAU,qEAEb;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,KAAK,KAAK;AAAA,QACV,SAAQ;AAAA,QACR,WAAU;AAAA;AAAA,IACZ,GACF;AAAA,KAEJ;AAEJ;AAEA,SAAS,WAAW,EAAE,QAAQ,GAA6B;AACzD,MAAI,CAAC,QAAQ,YAAY,CAAC,QAAQ,OAAQ,QAAO;AACjD,SACE,6CAAC,SAAI,WAAU,QACb,uDAAC,0BAAO,SAAO,MAAC,SAAS,gBAAgB,QAAQ,UAAU,GACzD;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ;AAAA,MACb,GAAI,QAAQ,gBAAgB,EAAE,QAAQ,UAAU,KAAK,sBAAsB,IAAI,CAAC;AAAA,MAEhF,kBAAQ;AAAA;AAAA,EACX,GACF,GACF;AAEJ;AAEA,SAAS,cAAc,EAAE,QAAQ,GAA6B;AAC5D,MAAI,QAAQ,OAAO,WAAW,EAAG,QAAO;AACxC,SACE,6CAAC,SAAI,eAAW,oBAAG,cAAc,QAAQ,OAAO,SAAS,IAAI,mBAAmB,aAAa,GAC1F,kBAAQ,OAAO,IAAI,CAAC,QACnB,8CAAC,YAAuC,WAAU,aAChD;AAAA,iDAAC,SAAI,WAAU,oEAEb,uDAAC,SAAI,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,SAAQ,QAAO,WAAU,8BAA6B,GACzF;AAAA,IACC,IAAI,WACH,6CAAC,gBAAW,WAAU,iCAAiC,cAAI,SAAQ;AAAA,OAN1D,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,EAQpC,CACD,GACH;AAEJ;AAGO,SAAS,iBAAiB,EAAE,QAAQ,GAA6B;AACtE,QAAM,aAAa,QAAQ,WAAW;AACtC,QAAM,aAAa,QAAQ,WAAW,gBAAgB,QAAQ,WAAW;AACzE,QAAM,YAAY,QAAQ,OAAO,SAAS;AAE1C,QAAM,OACJ,8CAAC,SAAI,WAAU,aACZ;AAAA,YAAQ,WAAW,6CAAC,QAAG,WAAU,sBAAsB,kBAAQ,SAAQ;AAAA,IAExE,6CAAC,YAAS,MAAM,aAAa,QAAQ,WAAW,GAAG,eAAe,GAAG;AAAA,IACrE,6CAAC,cAAW,SAAkB;AAAA,KAChC;AAGF,MAAI,cAAc,WAAW;AAC3B,WACE,6CAAC,aAAQ,WAAU,0CAChB,uBACC,8EACE;AAAA,mDAAC,iBAAc,SAAkB;AAAA,MAChC;AAAA,OACH,IAEA,8EACG;AAAA;AAAA,MACD,6CAAC,iBAAc,SAAkB;AAAA,OACnC,GAEJ;AAAA,EAEJ;AAEA,SACE,8CAAC,aAAQ,WAAU,aAChB;AAAA;AAAA,IACD,6CAAC,iBAAc,SAAkB;AAAA,KACnC;AAEJ;AAGO,SAAS,gBAAgB,EAAE,SAAS,GAAgC;AACzE,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,UAAU,SAAS,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACjE,SACE,6CAAC,SAAI,WAAU,cACZ,kBAAQ,IAAI,CAAC,YACZ,6CAAC,oBAAkC,WAAZ,QAAQ,EAAsB,CACtD,GACH;AAEJ;;;AD1HI,IAAAC,sBAAA;AAFG,SAAS,UAAU,EAAE,MAAM,UAAU,GAAmB;AAC7D,SACE,8CAAC,aAAQ,eAAW,oBAAG,cAAc,SAAS,GAAG,aAAU,aACzD;AAAA,iDAAC,YAAS,MAAY;AAAA,IACtB,6CAAC,mBAAgB,UAAU,KAAK,UAAU;AAAA,KAC5C;AAEJ;;;AEtBA,IAAAC,kBAAmB;AA+Bb,IAAAC,sBAAA;AATC,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,aAAa,CAAC;AAAA,EACd,gBAAgB,CAAC,SAAS,IAAI,IAAI;AAAA,EAClC,kBAAkB;AAAA,EAClB;AACF,GAAmB;AACjB,SACE,8CAAC,aAAQ,eAAW,oBAAG,cAAc,SAAS,GAAG,aAAU,aACzD;AAAA,iDAAC,YAAS,MAAY;AAAA,IACtB,6CAAC,mBAAgB,UAAU,KAAK,UAAU;AAAA,IAEzC,WAAW,SAAS,KACnB,8CAAC,aAAQ,WAAU,aACjB;AAAA,mDAAC,QAAG,WAAU,sBAAsB,2BAAgB;AAAA,MACpD,6CAAC,QAAG,WAAU,sEACX,qBAAW,IAAI,CAAC,MACf,6CAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,cAAc,EAAE,IAAI;AAAA,UAC1B,WAAU;AAAA,UAET;AAAA,cAAE,iBACD,6CAAC,SAAI,WAAU,kDAEb;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK,EAAE;AAAA,gBACP,KAAI;AAAA,gBACJ,SAAQ;AAAA,gBACR,WAAU;AAAA;AAAA,YACZ,GACF;AAAA,YAEF,8CAAC,SAAI,WAAU,kCACb;AAAA,2DAAC,QAAG,WAAU,0EACX,YAAE,OACL;AAAA,cACC,EAAE,WACD,6CAAC,OAAE,WAAU,8CAA8C,YAAE,SAAQ;AAAA,eAEzE;AAAA;AAAA;AAAA,MACF,KAxBO,EAAE,IAyBX,CACD,GACH;AAAA,OACF;AAAA,KAEJ;AAEJ;;;ACvEA,IAAAC,kBAAmB;AA0CT,IAAAC,sBAAA;AAtBV,SAAS,SAAS,MAAsB;AACtC,SAAO,KACJ,MAAM,KAAK,EACX,OAAO,OAAO,EACd,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,SAAS,KAAK,CAAC,GAAG,YAAY,KAAK,EAAE,EAC1C,KAAK,EAAE;AACZ;AAEO,SAAS,YAAY,EAAE,MAAM,MAAM,UAAU,cAAc,CAAC,GAAG,KAAK,MAAM,UAAU,GAAqB;AAC9G,QAAM,UAAU,OAAO,MAAM;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAU;AAAA,MAEV;AAAA,qDAAC,SAAI,WAAU,4DACZ,qBACC,6CAAC,SAAI,KAAK,UAAU,KAAK,MAAM,SAAQ,QAAO,WAAU,8BAA6B,IAErF,6CAAC,UAAK,WAAU,+FAA8F,eAAY,QACvH,mBAAS,IAAI,GAChB,GAEJ;AAAA,QAEA,8CAAC,SAAI,WAAU,aACb;AAAA,uDAAC,QAAG,WAAU,uCACZ;AAAA,YAAC;AAAA;AAAA,cACE,GAAI,OAAO,EAAE,MAAM,WAAW,uCAAuC,IAAI,CAAC;AAAA,cAE1E;AAAA;AAAA,UACH,GACF;AAAA,UACC,QAAQ,6CAAC,OAAE,WAAU,iCAAiC,gBAAK;AAAA,WAC9D;AAAA,QAEC,YAAY,SAAS,KACpB,6CAAC,QAAG,WAAU,6CACX,sBAAY,IAAI,CAAC,MAChB;AAAA,UAAC;AAAA;AAAA,YAEC,WAAU;AAAA,YAET;AAAA;AAAA,UAHI;AAAA,QAIP,CACD,GACH;AAAA,QAGD,OAAO,6CAAC,OAAE,WAAU,iCAAiC,eAAI;AAAA;AAAA;AAAA,EAC5D;AAEJ;;;AC7EA,IAAAC,kBAAmB;AAmCT,IAAAC,sBAAA;AAdH,SAAS,YAAY,EAAE,SAAS,MAAM,eAAe,OAAO,QAAQ,UAAU,GAAqB;AACxG,QAAM,QAAQ,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,QAAQ,OAAO,CAAC;AACzE,QAAM,cAAc,QAAQ,gBAAgB,QAAQ,QAAQ,eAAe,QAAQ;AAEnF,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,aAAU;AAAA,MAEV;AAAA,qDAAC,SAAI,WAAU,mDACZ,kBACC;AAAA,UAAC;AAAA;AAAA,YACC,KAAK,MAAM;AAAA,YACX,KAAK,MAAM,OAAO,QAAQ;AAAA,YAC1B,SAAQ;AAAA,YACR,WAAU;AAAA;AAAA,QACZ,IAEA,6CAAC,SAAI,WAAU,6EAA4E,eAAY,QAAO,6BAE9G,GAEJ;AAAA,QAEA,8CAAC,SAAI,WAAU,kCACZ;AAAA,kBAAQ,YACP,6CAAC,UAAK,WAAU,wHACb,kBAAQ,SAAS,MACpB;AAAA,UAGF,6CAAC,QAAG,WAAU,yCACX,iBACC,6CAAC,OAAE,MAAY,WAAU,wCACtB,kBAAQ,MACX,IAEA,QAAQ,MAEZ;AAAA,UAEC,QAAQ,oBACP,6CAAC,OAAE,WAAU,8CAA8C,kBAAQ,kBAAiB;AAAA,UAGtF,8CAAC,SAAI,WAAU,0CACb;AAAA,yDAAC,UAAK,WAAU,qCACb,sBAAY,QAAQ,OAAO,cAAc,MAAM,GAClD;AAAA,YACC,eACC,6CAAC,UAAK,WAAU,8CACb,sBAAY,QAAQ,cAAwB,cAAc,MAAM,GACnE;AAAA,aAEJ;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["DOMPurify","parse","import_site_ui","import_site_ui","import_jsx_runtime","import_jsx_runtime","import_site_ui","import_jsx_runtime","import_site_ui","import_jsx_runtime","import_site_ui","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/reading-time.ts","../src/lib/format-price.ts","../src/lib/share-urls.ts","../../../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/index.js","../../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../node_modules/.pnpm/hast-util-parse-selector@4.0.0/node_modules/hast-util-parse-selector/lib/index.js","../../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/create-h.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/svg-case-sensitive-tag-names.js","../../../node_modules/.pnpm/hastscript@9.0.1/node_modules/hastscript/lib/index.js","../../../node_modules/.pnpm/vfile-location@5.0.3/node_modules/vfile-location/lib/index.js","../../../node_modules/.pnpm/web-namespaces@2.0.1/node_modules/web-namespaces/index.js","../../../node_modules/.pnpm/hast-util-from-parse5@8.0.3/node_modules/hast-util-from-parse5/lib/index.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/types.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/deserialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/serialize.js","../../../node_modules/.pnpm/@ungap+structured-clone@1.3.0/node_modules/@ungap/structured-clone/esm/index.js","../../../node_modules/.pnpm/unist-util-position@5.0.0/node_modules/unist-util-position/lib/index.js","../../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/schema.js","../../../node_modules/.pnpm/hast-util-sanitize@5.0.2/node_modules/hast-util-sanitize/lib/index.js","../../../node_modules/.pnpm/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../node_modules/.pnpm/zwitch@2.0.4/node_modules/zwitch/index.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-decimal.js","../../../node_modules/.pnpm/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../../node_modules/.pnpm/character-entities-html4@2.1.0/node_modules/character-entities-html4/index.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/constant/dangerous.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-named.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-smart.js","../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/comment.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/doctype.js","../../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../../../node_modules/.pnpm/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/omission.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/closing.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/opening.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/text.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/raw.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/index.js","../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.js","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/defaults.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/rules.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/helpers.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Tokenizer.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Lexer.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Renderer.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/TextRenderer.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Parser.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Hooks.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/Instance.ts","../../../node_modules/.pnpm/marked@16.4.2/node_modules/marked/src/marked.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/generated/decode-data-html.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode-codepoint.ts","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/decode.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/doctype.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js","../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/src/escape.ts","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js","../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/index.js","../../../node_modules/.pnpm/unist-util-is@6.0.1/node_modules/unist-util-is/lib/index.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/color.node.js","../../../node_modules/.pnpm/unist-util-visit-parents@6.0.2/node_modules/unist-util-visit-parents/lib/index.js","../../../node_modules/.pnpm/unist-util-visit@5.1.0/node_modules/unist-util-visit/lib/index.js","../src/lib/markdown.ts","../src/components/markdown-renderer.tsx","../src/components/treatment.tsx","../src/components/_page-parts.tsx","../src/components/specialty.tsx","../src/components/profile-card.tsx","../src/components/product-card.tsx"],"sourcesContent":["// `@reblu/site-blocks` root entry — the framework-agnostic, RSC-safe surface.\n// Everything here is usable inside a React Server Component: pure helpers, the\n// markdown pipeline, and the presentational organisms (no hooks, no browser API).\n// Client-only primitives (useCollection, Collection, ShareButtons) ship from the\n// `./client` subpath — see ./client.ts.\n\n// ── Pure helpers ─────────────────────────────────────────────────────────────\nexport { readingTime } from './lib/reading-time'\nexport { formatPrice } from './lib/format-price'\nexport { buildShareUrls, type ShareUrls } from './lib/share-urls'\n\n// ── Markdown pipeline (marked → hast-util-sanitize) ─────────────────────────\nexport {\n markdownToSafeHtml,\n sanitizeHtml,\n isAllowedYouTubeHost,\n ALLOWED_YOUTUBE_HOSTS,\n} from './lib/markdown'\n\n// ── Renderers ────────────────────────────────────────────────────────────────\nexport { MarkdownRenderer, SafeHtml } from './components/markdown-renderer'\nexport type { MarkdownRendererProps, SafeHtmlProps } from './components/markdown-renderer'\n\n// ── Presentational organisms ─────────────────────────────────────────────────\nexport { Treatment, type TreatmentProps } from './components/treatment'\nexport { Specialty, type SpecialtyProps } from './components/specialty'\nexport { ProfileCard, type ProfileCardProps } from './components/profile-card'\nexport { ProductCard, type ProductCardProps } from './components/product-card'\n","/**\n * Estimate a post's reading time in minutes from its content.\n *\n * The canonical helper for the Reblu SITE SDK: base-api does not persist reading\n * time on the blog contracts, so the SITE computes it wherever `content` is\n * present (the post detail and preview). The list contract omits `content`, so\n * cards show no reading time until the SDK surfaces the field.\n */\nconst WORDS_PER_MINUTE = 200\n\nexport function readingTime(content: string | null | undefined): number | null {\n if (!content?.trim()) return null\n // Strip HTML tags so markup does not inflate the word count.\n const words = content\n .replace(/<[^>]*>/g, ' ')\n .split(/\\s+/)\n .filter(Boolean).length\n if (words === 0) return null\n return Math.max(1, Math.round(words / WORDS_PER_MINUTE))\n}\n","/**\n * Format an integer-cents amount as a localized currency string.\n *\n * All Reblu shop monetary values travel as integer cents (Prisma `Int`, never\n * Decimal), so the SITE never sees floats. This helper is the single place that\n * converts cents → major units and applies `Intl.NumberFormat`, keeping price\n * rendering consistent across `ProductCard` and any future shop organism.\n */\nexport function formatPrice(cents: number, currency = 'EUR', locale = 'es-ES'): string {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(cents / 100)\n}\n","/**\n * Pure builders for the social-share targets used by `ShareButtons`.\n *\n * Framework-free so the URL construction is unit-testable without rendering.\n * Every provider gets the canonical post URL; providers that support custom copy\n * (X, WhatsApp) also receive the post title.\n */\nexport interface ShareUrls {\n linkedin: string\n x: string\n facebook: string\n whatsapp: string\n}\n\nexport function buildShareUrls(url: string, title: string): ShareUrls {\n const encodedUrl = encodeURIComponent(url)\n const encodedTitle = encodeURIComponent(title)\n\n return {\n // LinkedIn derives title/description from the target page's Open Graph tags,\n // so it only takes the URL.\n linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${encodedUrl}`,\n // The intent endpoint keeps the /intent/tweet path under the x.com domain.\n x: `https://x.com/intent/tweet?url=${encodedUrl}&text=${encodedTitle}`,\n facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`,\n whatsapp: `https://wa.me/?text=${encodeURIComponent(`${title} ${url}`)}`,\n }\n}\n","export function deprecate(fn) {\n return fn\n}\n\nexport function equal() {}\n\nexport function ok() {}\n\nexport function unreachable() {}\n","/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n * Selector type.\n * @template {string} DefaultTagName\n * Default tag name.\n * @typedef {(\n * SimpleSelector extends ''\n * ? DefaultTagName\n * : SimpleSelector extends `${infer TagName}.${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends `${infer TagName}#${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends string\n * ? SimpleSelector\n * : DefaultTagName\n * )} ExtractTagName\n * Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n * Type of selector.\n * @template {string} [DefaultTagName='div']\n * Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n * Simple CSS selector (optional).\n *\n * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n * Multiple classes are allowed.\n * Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n * Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n * Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n const value = selector || ''\n /** @type {Properties} */\n const props = {}\n let start = 0\n /** @type {string | undefined} */\n let previous\n /** @type {string | undefined} */\n let tagName\n\n while (start < value.length) {\n search.lastIndex = start\n const match = search.exec(value)\n const subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n tagName = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (Array.isArray(props.className)) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {\n type: 'element',\n // @ts-expect-error: tag name is parsed.\n tagName: tagName || defaultTagName || 'div',\n properties: props,\n children: []\n }\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @import {Element, Nodes, RootContent, Root} from 'hast'\n * @import {Info, Schema} from 'property-information'\n */\n\n/**\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n * List of children (deep).\n */\n\n/**\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n */\n\n/**\n * @typedef {Array<number | string>} ArrayValue\n * List of property values for space- or comma separated values (such as `className`).\n */\n\n/**\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n * Acceptable child value.\n */\n\n/**\n * @typedef {number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n */\n\n/**\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n * Primitive property value.\n */\n\n/**\n * @typedef {Record<string, PropertyValue | Style>} Properties\n * Acceptable value for element properties.\n */\n\n/**\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n * Primitive value or list value.\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `h` (or `s`) call.\n */\n\n/**\n * @typedef {number | string} StyleValue\n * Value for a CSS style field.\n */\n\n/**\n * @typedef {Record<string, StyleValue>} Style\n * Supported value of a `style` prop.\n */\n\nimport {parse as parseCommas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as parseSpaces} from 'space-separated-tokens'\n\n/**\n * @param {Schema} schema\n * Schema to use.\n * @param {string} defaultTagName\n * Default tag name.\n * @param {ReadonlyArray<string> | undefined} [caseSensitive]\n * Case-sensitive tag names (default: `undefined`).\n * @returns\n * `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n const adjust = caseSensitive ? createAdjustMap(caseSensitive) : undefined\n\n /**\n * Hyperscript compatible DSL for creating virtual hast trees.\n *\n * @overload\n * @param {null | undefined} [selector]\n * @param {...Child} children\n * @returns {Root}\n *\n * @overload\n * @param {string} selector\n * @param {Properties} properties\n * @param {...Child} children\n * @returns {Element}\n *\n * @overload\n * @param {string} selector\n * @param {...Child} children\n * @returns {Element}\n *\n * @param {string | null | undefined} [selector]\n * Selector.\n * @param {Child | Properties | null | undefined} [properties]\n * Properties (or first child) (default: `undefined`).\n * @param {...Child} children\n * Children.\n * @returns {Result}\n * Result.\n */\n function h(selector, properties, ...children) {\n /** @type {Result} */\n let node\n\n if (selector === null || selector === undefined) {\n node = {type: 'root', children: []}\n // Properties are not supported for roots.\n const child = /** @type {Child} */ (properties)\n children.unshift(child)\n } else {\n node = parseSelector(selector, defaultTagName)\n // Normalize the name.\n const lower = node.tagName.toLowerCase()\n const adjusted = adjust ? adjust.get(lower) : undefined\n node.tagName = adjusted || lower\n\n // Handle properties.\n if (isChild(properties)) {\n children.unshift(properties)\n } else {\n for (const [key, value] of Object.entries(properties)) {\n addProperty(schema, node.properties, key, value)\n }\n }\n }\n\n // Handle children.\n for (const child of children) {\n addChild(node.children, child)\n }\n\n if (node.type === 'element' && node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n * Value to check.\n * @returns {value is Child}\n * Whether `value` is definitely a child.\n */\nfunction isChild(value) {\n // Never properties if not an object.\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n return true\n }\n\n // Never node without `type`; that’s the main discriminator.\n if (typeof value.type !== 'string') return false\n\n // Slower check: never property value if object or array with\n // non-number/strings.\n const record = /** @type {Record<string, unknown>} */ (value)\n const keys = Object.keys(value)\n\n for (const key of keys) {\n const value = record[key]\n\n if (value && typeof value === 'object') {\n if (!Array.isArray(value)) return true\n\n const list = /** @type {ReadonlyArray<unknown>} */ (value)\n\n for (const item of list) {\n if (typeof item !== 'number' && typeof item !== 'string') {\n return true\n }\n }\n }\n }\n\n // Also see empty `children` as a node.\n if ('children' in value && Array.isArray(value.children)) {\n return true\n }\n\n // Default to properties, someone can always pass an empty object,\n // put `data: {}` in a node,\n // or wrap it in an array.\n return false\n}\n\n/**\n * @param {Schema} schema\n * Schema.\n * @param {Properties} properties\n * Properties object.\n * @param {string} key\n * Property name.\n * @param {PropertyValue | Style} value\n * Property value.\n * @returns {undefined}\n * Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n const info = find(schema, key)\n /** @type {PropertyValue} */\n let result\n\n // Ignore nullish and NaN values.\n if (value === null || value === undefined) return\n\n if (typeof value === 'number') {\n // Ignore NaN.\n if (Number.isNaN(value)) return\n\n result = value\n }\n // Booleans.\n else if (typeof value === 'boolean') {\n result = value\n }\n // Handle list values.\n else if (typeof value === 'string') {\n if (info.spaceSeparated) {\n result = parseSpaces(value)\n } else if (info.commaSeparated) {\n result = parseCommas(value)\n } else if (info.commaOrSpaceSeparated) {\n result = parseSpaces(parseCommas(value).join(' '))\n } else {\n result = parsePrimitive(info, info.property, value)\n }\n } else if (Array.isArray(value)) {\n result = [...value]\n } else {\n result = info.property === 'style' ? style(value) : String(value)\n }\n\n if (Array.isArray(result)) {\n /** @type {Array<number | string>} */\n const finalResult = []\n\n for (const item of result) {\n // Assume no booleans in array.\n finalResult.push(\n /** @type {number | string} */ (\n parsePrimitive(info, info.property, item)\n )\n )\n }\n\n result = finalResult\n }\n\n // Class names (which can be added both on the `selector` and here).\n if (info.property === 'className' && Array.isArray(properties.className)) {\n // Assume no booleans in `className`.\n result = properties.className.concat(\n /** @type {Array<number | string> | number | string} */ (result)\n )\n }\n\n properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n * Children.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'number' || typeof value === 'string') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n for (const child of value) {\n addChild(nodes, child)\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n * Property information.\n * @param {string} name\n * Property name.\n * @param {PrimitiveValue} value\n * Property value.\n * @returns {PrimitiveValue}\n * Property value.\n */\nfunction parsePrimitive(info, name, value) {\n if (typeof value === 'string') {\n if (info.number && value && !Number.isNaN(Number(value))) {\n return Number(value)\n }\n\n if (\n (info.boolean || info.overloadedBoolean) &&\n (value === '' || normalize(value) === normalize(name))\n ) {\n return true\n }\n }\n\n return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} styles\n * Style object.\n * @returns {string}\n * CSS string.\n */\nfunction style(styles) {\n /** @type {Array<string>} */\n const result = []\n\n for (const [key, value] of Object.entries(styles)) {\n result.push([key, value].join(': '))\n }\n\n return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {ReadonlyArray<string>} values\n * List of properly cased keys.\n * @returns {Map<string, string>}\n * Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n /** @type {Map<string, string>} */\n const result = new Map()\n\n for (const value of values) {\n result.set(value.toLowerCase(), value)\n }\n\n return result\n}\n","/**\n * List of case-sensitive SVG tag names.\n *\n * @type {ReadonlyArray<string>}\n */\nexport const svgCaseSensitiveTagNames = [\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'solidColor',\n 'textArea',\n 'textPath'\n]\n","// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n","/**\n * @import {VFile, Value} from 'vfile'\n * @import {Location} from 'vfile-location'\n */\n\n/**\n * Create an index of the given document to translate between line/column and\n * offset based positional info.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n *\n * @param {VFile | Value} file\n * File to index.\n * @returns {Location}\n * Accessors for index.\n */\nexport function location(file) {\n const value = String(file)\n /**\n * List, where each index is a line number (0-based), and each value is the\n * byte index *after* where the line ends.\n *\n * @type {Array<number>}\n */\n const indices = []\n\n return {toOffset, toPoint}\n\n /** @type {Location['toPoint']} */\n function toPoint(offset) {\n if (typeof offset === 'number' && offset > -1 && offset <= value.length) {\n let index = 0\n\n while (true) {\n let end = indices[index]\n\n if (end === undefined) {\n const eol = next(value, indices[index - 1])\n end = eol === -1 ? value.length + 1 : eol + 1\n indices[index] = end\n }\n\n if (end > offset) {\n return {\n line: index + 1,\n column: offset - (index > 0 ? indices[index - 1] : 0) + 1,\n offset\n }\n }\n\n index++\n }\n }\n }\n\n /** @type {Location['toOffset']} */\n function toOffset(point) {\n if (\n point &&\n typeof point.line === 'number' &&\n typeof point.column === 'number' &&\n !Number.isNaN(point.line) &&\n !Number.isNaN(point.column)\n ) {\n while (indices.length < point.line) {\n const from = indices[indices.length - 1]\n const eol = next(value, from)\n const end = eol === -1 ? value.length + 1 : eol + 1\n if (from === end) break\n indices.push(end)\n }\n\n const offset =\n (point.line > 1 ? indices[point.line - 2] : 0) + point.column - 1\n // The given `column` could not exist on this line.\n if (offset < indices[point.line - 1]) return offset\n }\n }\n}\n\n/**\n * @param {string} value\n * @param {number} from\n */\nfunction next(value, from) {\n const cr = value.indexOf('\\r', from)\n const lf = value.indexOf('\\n', from)\n if (lf === -1) return cr\n if (cr === -1 || cr + 1 === lf) return lf\n return cr < lf ? cr : lf\n}\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n","/**\n * @import {ElementData, Element, Nodes, RootContent, Root} from 'hast'\n * @import {DefaultTreeAdapterMap, Token} from 'parse5'\n * @import {Schema} from 'property-information'\n * @import {Point, Position} from 'unist'\n * @import {VFile} from 'vfile'\n * @import {Options} from 'hast-util-from-parse5'\n */\n\n/**\n * @typedef State\n * Info passed around about the current state.\n * @property {VFile | undefined} file\n * Corresponding file.\n * @property {boolean} location\n * Whether location info was found.\n * @property {Schema} schema\n * Current schema.\n * @property {boolean | undefined} verbose\n * Add extra positional info.\n */\n\nimport {ok as assert} from 'devlop'\nimport {h, s} from 'hastscript'\nimport {find, html, svg} from 'property-information'\nimport {location} from 'vfile-location'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n/** @type {unknown} */\n// type-coverage:ignore-next-line\nconst proto = Object.prototype\n\n/**\n * Transform a `parse5` AST to hast.\n *\n * @param {DefaultTreeAdapterMap['node']} tree\n * `parse5` tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * hast tree.\n */\nexport function fromParse5(tree, options) {\n const settings = options || {}\n\n return one(\n {\n file: settings.file || undefined,\n location: false,\n schema: settings.space === 'svg' ? svg : html,\n verbose: settings.verbose || false\n },\n tree\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} node\n * p5 node.\n * @returns {Nodes}\n * hast node.\n */\nfunction one(state, node) {\n /** @type {Nodes} */\n let result\n\n switch (node.nodeName) {\n case '#comment': {\n const reference = /** @type {DefaultTreeAdapterMap['commentNode']} */ (\n node\n )\n result = {type: 'comment', value: reference.data}\n patch(state, reference, result)\n return result\n }\n\n case '#document':\n case '#document-fragment': {\n const reference =\n /** @type {DefaultTreeAdapterMap['document'] | DefaultTreeAdapterMap['documentFragment']} */ (\n node\n )\n const quirksMode =\n 'mode' in reference\n ? reference.mode === 'quirks' || reference.mode === 'limited-quirks'\n : false\n\n result = {\n type: 'root',\n children: all(state, node.childNodes),\n data: {quirksMode}\n }\n\n if (state.file && state.location) {\n const document = String(state.file)\n const loc = location(document)\n const start = loc.toPoint(0)\n const end = loc.toPoint(document.length)\n // Always defined as we give valid input.\n assert(start, 'expected `start`')\n assert(end, 'expected `end`')\n result.position = {start, end}\n }\n\n return result\n }\n\n case '#documentType': {\n const reference = /** @type {DefaultTreeAdapterMap['documentType']} */ (\n node\n )\n result = {type: 'doctype'}\n patch(state, reference, result)\n return result\n }\n\n case '#text': {\n const reference = /** @type {DefaultTreeAdapterMap['textNode']} */ (node)\n result = {type: 'text', value: reference.value}\n patch(state, reference, result)\n return result\n }\n\n // Element.\n default: {\n const reference = /** @type {DefaultTreeAdapterMap['element']} */ (node)\n result = element(state, reference)\n return result\n }\n }\n}\n\n/**\n * Transform children.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Array<DefaultTreeAdapterMap['node']>} nodes\n * Nodes.\n * @returns {Array<RootContent>}\n * hast nodes.\n */\nfunction all(state, nodes) {\n let index = -1\n /** @type {Array<RootContent>} */\n const results = []\n\n while (++index < nodes.length) {\n // Assume no roots in `nodes`.\n const result = /** @type {RootContent} */ (one(state, nodes[index]))\n results.push(result)\n }\n\n return results\n}\n\n/**\n * Transform an element.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['element']} node\n * `parse5` node to transform.\n * @returns {Element}\n * hast node.\n */\nfunction element(state, node) {\n const schema = state.schema\n\n state.schema = node.namespaceURI === webNamespaces.svg ? svg : html\n\n // Props.\n let index = -1\n /** @type {Record<string, string>} */\n const properties = {}\n\n while (++index < node.attrs.length) {\n const attribute = node.attrs[index]\n const name =\n (attribute.prefix ? attribute.prefix + ':' : '') + attribute.name\n if (!own.call(proto, name)) {\n properties[name] = attribute.value\n }\n }\n\n // Build.\n const x = state.schema.space === 'svg' ? s : h\n const result = x(node.tagName, properties, all(state, node.childNodes))\n patch(state, node, result)\n\n // Switch content.\n if (result.tagName === 'template') {\n const reference = /** @type {DefaultTreeAdapterMap['template']} */ (node)\n const pos = reference.sourceCodeLocation\n const startTag = pos && pos.startTag && position(pos.startTag)\n const endTag = pos && pos.endTag && position(pos.endTag)\n\n // Root in, root out.\n const content = /** @type {Root} */ (one(state, reference.content))\n\n if (startTag && endTag && state.file) {\n content.position = {start: startTag.end, end: endTag.start}\n }\n\n result.content = content\n }\n\n state.schema = schema\n\n return result\n}\n\n/**\n * Patch positional info from `from` onto `to`.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {DefaultTreeAdapterMap['node']} from\n * p5 node.\n * @param {Nodes} to\n * hast node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(state, from, to) {\n if ('sourceCodeLocation' in from && from.sourceCodeLocation && state.file) {\n const position = createLocation(state, to, from.sourceCodeLocation)\n\n if (position) {\n state.location = true\n to.position = position\n }\n }\n}\n\n/**\n * Create clean positional information.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Nodes} node\n * hast node.\n * @param {Token.ElementLocation} location\n * p5 location info.\n * @returns {Position | undefined}\n * Position, or nothing.\n */\nfunction createLocation(state, node, location) {\n const result = position(location)\n\n if (node.type === 'element') {\n const tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (\n result &&\n !location.endTag &&\n tail &&\n tail.position &&\n tail.position.end\n ) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (state.verbose) {\n /** @type {Record<string, Position | undefined>} */\n const properties = {}\n /** @type {string} */\n let key\n\n if (location.attrs) {\n for (key in location.attrs) {\n if (own.call(location.attrs, key)) {\n properties[find(state.schema, key).property] = position(\n location.attrs[key]\n )\n }\n }\n }\n\n assert(location.startTag, 'a start tag should exist')\n const opening = position(location.startTag)\n const closing = location.endTag ? position(location.endTag) : undefined\n /** @type {ElementData['position']} */\n const data = {opening}\n if (closing) data.closing = closing\n data.properties = properties\n\n node.data = {position: data}\n }\n }\n\n return result\n}\n\n/**\n * Turn a p5 location into a position.\n *\n * @param {Token.Location} loc\n * Location.\n * @returns {Position | undefined}\n * Position or nothing.\n */\nfunction position(loc) {\n const start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n const end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n\n // @ts-expect-error: we do use `undefined` for points if one or the other\n // exists.\n return start || end ? {start, end} : undefined\n}\n\n/**\n * Filter out invalid points.\n *\n * @param {Point} point\n * Point with potentially `undefined` values.\n * @returns {Point | undefined}\n * Point or nothing.\n */\nfunction point(point) {\n return point.line && point.column ? point : undefined\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n case 'ArrayBuffer':\n return as(new Uint8Array(value).buffer, value);\n case 'DataView': {\n const { buffer } = new Uint8Array(value);\n return as(new DataView(buffer), value);\n }\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n case 'DataView':\n return [ARRAY, asString];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type) {\n let spread = value;\n if (type === 'DataView') {\n spread = new Uint8Array(value.buffer);\n }\n else if (type === 'ArrayBuffer') {\n spread = new Uint8Array(value);\n }\n return as([type, [...spread]], value);\n }\n\n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n * Side.\n * @returns\n * Getter.\n */\nfunction point(type) {\n return point\n\n /**\n * Get the point info of `node` at a bound side.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * @returns {Point | undefined}\n */\n function point(node) {\n const point = (node && node.position && node.position[type]) || {}\n\n if (\n typeof point.line === 'number' &&\n point.line > 0 &&\n typeof point.column === 'number' &&\n point.column > 0\n ) {\n return {\n line: point.line,\n column: point.column,\n offset:\n typeof point.offset === 'number' && point.offset > -1\n ? point.offset\n : undefined\n }\n }\n }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n * Node.\n * @returns {Position | undefined}\n * Position.\n */\nexport function position(node) {\n const start = pointStart(node)\n const end = pointEnd(node)\n\n if (start && end) {\n return {start, end}\n }\n}\n","/**\n * @import {Schema} from 'hast-util-sanitize'\n */\n\n// Couple of ARIA attributes allowed in several, but not all, places.\nconst aria = ['ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy']\n\n/**\n * Default schema.\n *\n * Follows GitHub style sanitation.\n *\n * @type {Schema}\n */\nexport const defaultSchema = {\n ancestors: {\n tbody: ['table'],\n td: ['table'],\n th: ['table'],\n thead: ['table'],\n tfoot: ['table'],\n tr: ['table']\n },\n attributes: {\n a: [\n ...aria,\n // Note: these 3 are used by GFM footnotes, they do work on all links.\n 'dataFootnoteBackref',\n 'dataFootnoteRef',\n ['className', 'data-footnote-backref'],\n 'href'\n ],\n blockquote: ['cite'],\n // Note: this class is not normally allowed by GH, when manually writing\n // `code` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n code: [['className', /^language-./]],\n del: ['cite'],\n div: ['itemScope', 'itemType'],\n dl: [...aria],\n // Note: this is used by GFM footnotes.\n h2: [['className', 'sr-only']],\n img: [...aria, 'longDesc', 'src'],\n // Note: `input` is not normally allowed by GH, when manually writing\n // it in markdown, they add it from tasklists some other way.\n // We can’t do that, so we have to allow it.\n input: [\n ['disabled', true],\n ['type', 'checkbox']\n ],\n ins: ['cite'],\n // Note: this class is not normally allowed by GH, when manually writing\n // `li` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n li: [['className', 'task-list-item']],\n // Note: this class is not normally allowed by GH, when manually writing\n // `ol` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n ol: [...aria, ['className', 'contains-task-list']],\n q: ['cite'],\n section: ['dataFootnotes', ['className', 'footnotes']],\n source: ['srcSet'],\n summary: [...aria],\n table: [...aria],\n // Note: this class is not normally allowed by GH, when manually writing\n // `ol` as HTML in markdown, they adds it some other way.\n // We can’t do that, so we have to allow it.\n ul: [...aria, ['className', 'contains-task-list']],\n '*': [\n 'abbr',\n 'accept',\n 'acceptCharset',\n 'accessKey',\n 'action',\n 'align',\n 'alt',\n 'axis',\n 'border',\n 'cellPadding',\n 'cellSpacing',\n 'char',\n 'charOff',\n 'charSet',\n 'checked',\n 'clear',\n 'colSpan',\n 'color',\n 'cols',\n 'compact',\n 'coords',\n 'dateTime',\n 'dir',\n // Note: `disabled` is technically allowed on all elements by GH.\n // But it is useless on everything except `input`.\n // Because `input`s are normally not allowed, but we allow them for\n // checkboxes due to tasklists, we allow `disabled` only there.\n 'encType',\n 'frame',\n 'hSpace',\n 'headers',\n 'height',\n 'hrefLang',\n 'htmlFor',\n 'id',\n 'isMap',\n 'itemProp',\n 'label',\n 'lang',\n 'maxLength',\n 'media',\n 'method',\n 'multiple',\n 'name',\n 'noHref',\n 'noShade',\n 'noWrap',\n 'open',\n 'prompt',\n 'readOnly',\n 'rev',\n 'rowSpan',\n 'rows',\n 'rules',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'span',\n 'start',\n 'summary',\n 'tabIndex',\n 'title',\n 'useMap',\n 'vAlign',\n 'value',\n 'width'\n ]\n },\n clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name'],\n clobberPrefix: 'user-content-',\n protocols: {\n cite: ['http', 'https'],\n href: ['http', 'https', 'irc', 'ircs', 'mailto', 'xmpp'],\n longDesc: ['http', 'https'],\n src: ['http', 'https']\n },\n required: {\n input: {disabled: true, type: 'checkbox'}\n },\n strip: ['script'],\n tagNames: [\n 'a',\n 'b',\n 'blockquote',\n 'br',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n // Note: `input` is not normally allowed by GH, when manually writing\n // it in markdown, they add it from tasklists some other way.\n // We can’t do that, so we have to allow it.\n 'input',\n 'ins',\n 'kbd',\n 'li',\n 'ol',\n 'p',\n 'picture',\n 'pre',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'source',\n 'span',\n 'strike',\n 'strong',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'tt',\n 'ul',\n 'var'\n ]\n}\n","/**\n * @import {\n * Comment,\n * Doctype,\n * ElementContent,\n * Element,\n * Nodes,\n * Properties,\n * RootContent,\n * Root,\n * Text\n * } from 'hast'\n */\n\n/**\n * @typedef {[string, ...Array<Exclude<Properties[keyof Properties], Array<any>> | RegExp>] | string} PropertyDefinition\n * Definition for a property.\n *\n * @typedef Schema\n * Schema that defines what nodes and properties are allowed.\n *\n * The default schema is `defaultSchema`, which follows how GitHub cleans.\n * If any top-level key is missing in the given schema, the corresponding\n * value of the default schema is used.\n *\n * To extend the standard schema with a few changes, clone `defaultSchema`\n * like so:\n *\n * ```js\n * import deepmerge from 'deepmerge'\n * import {h} from 'hastscript'\n * import {defaultSchema, sanitize} from 'hast-util-sanitize'\n *\n * // This allows `className` on all elements.\n * const schema = deepmerge(defaultSchema, {attributes: {'*': ['className']}})\n *\n * const tree = sanitize(h('div', {className: ['foo']}), schema)\n *\n * // `tree` still has `className`.\n * console.log(tree)\n * // {\n * // type: 'element',\n * // tagName: 'div',\n * // properties: {className: ['foo']},\n * // children: []\n * // }\n * ```\n * @property {boolean | null | undefined} [allowComments=false]\n * Whether to allow comment nodes (default: `false`).\n *\n * For example:\n *\n * ```js\n * allowComments: true\n * ```\n * @property {boolean | null | undefined} [allowDoctypes=false]\n * Whether to allow doctype nodes (default: `false`).\n *\n * For example:\n *\n * ```js\n * allowDoctypes: true\n * ```\n * @property {Record<string, Array<string>> | null | undefined} [ancestors]\n * Map of tag names to a list of tag names which are required ancestors\n * (default: `defaultSchema.ancestors`).\n *\n * Elements with these tag names will be ignored if they occur outside of one\n * of their allowed parents.\n *\n * For example:\n *\n * ```js\n * ancestors: {\n * tbody: ['table'],\n * // …\n * tr: ['table']\n * }\n * ```\n * @property {Record<string, Array<PropertyDefinition>> | null | undefined} [attributes]\n * Map of tag names to allowed property names (default:\n * `defaultSchema.attributes`).\n *\n * The special key `'*'` as a tag name defines property names allowed on all\n * elements.\n *\n * The special value `'data*'` as a property name can be used to allow all\n * `data` properties.\n *\n * For example:\n *\n * ```js\n * attributes: {\n * 'ariaDescribedBy', 'ariaLabel', 'ariaLabelledBy', …, 'href'\n * // …\n * '*': [\n * 'abbr',\n * 'accept',\n * 'acceptCharset',\n * // …\n * 'vAlign',\n * 'value',\n * 'width'\n * ]\n * }\n * ```\n *\n * Instead of a single string in the array, which allows any property value\n * for the field, you can use an array to allow several values.\n * For example, `input: ['type']` allows `type` set to any value on `input`s.\n * But `input: [['type', 'checkbox', 'radio']]` allows `type` when set to\n * `'checkbox'` or `'radio'`.\n *\n * You can use regexes, so for example `span: [['className', /^hljs-/]]`\n * allows any class that starts with `hljs-` on `span`s.\n *\n * When comma- or space-separated values are used (such as `className`), each\n * value in is checked individually.\n * For example, to allow certain classes on `span`s for syntax highlighting,\n * use `span: [['className', 'number', 'operator', 'token']]`.\n * This will allow `'number'`, `'operator'`, and `'token'` classes, but drop\n * others.\n * @property {Array<string> | null | undefined} [clobber]\n * List of property names that clobber (default: `defaultSchema.clobber`).\n *\n * For example:\n *\n * ```js\n * clobber: ['ariaDescribedBy', 'ariaLabelledBy', 'id', 'name']\n * ```\n * @property {string | null | undefined} [clobberPrefix]\n * Prefix to use before clobbering properties (default:\n * `defaultSchema.clobberPrefix`).\n *\n * For example:\n *\n * ```js\n * clobberPrefix: 'user-content-'\n * ```\n * @property {Record<string, Array<string> | null | undefined> | null | undefined} [protocols]\n * Map of *property names* to allowed protocols (default:\n * `defaultSchema.protocols`).\n *\n * This defines URLs that are always allowed to have local URLs (relative to\n * the current website, such as `this`, `#this`, `/this`, or `?this`), and\n * only allowed to have remote URLs (such as `https://example.com`) if they\n * use a known protocol.\n *\n * For example:\n *\n * ```js\n * protocols: {\n * cite: ['http', 'https'],\n * // …\n * src: ['http', 'https']\n * }\n * ```\n * @property {Record<string, Record<string, Properties[keyof Properties]>> | null | undefined} [required]\n * Map of tag names to required property names with a default value\n * (default: `defaultSchema.required`).\n *\n * This defines properties that must be set.\n * If a field does not exist (after the element was made safe), these will be\n * added with the given value.\n *\n * For example:\n *\n * ```js\n * required: {\n * input: {disabled: true, type: 'checkbox'}\n * }\n * ```\n *\n * > 👉 **Note**: properties are first checked based on `schema.attributes`,\n * > then on `schema.required`.\n * > That means properties could be removed by `attributes` and then added\n * > again with `required`.\n * @property {Array<string> | null | undefined} [strip]\n * List of tag names to strip from the tree (default: `defaultSchema.strip`).\n *\n * By default, unsafe elements (those not in `schema.tagNames`) are replaced\n * by what they contain.\n * This option can drop their contents.\n *\n * For example:\n *\n * ```js\n * strip: ['script']\n * ```\n * @property {Array<string> | null | undefined} [tagNames]\n * List of allowed tag names (default: `defaultSchema.tagNames`).\n *\n * For example:\n *\n * ```js\n * tagNames: [\n * 'a',\n * 'b',\n * // …\n * 'ul',\n * 'var'\n * ]\n * ```\n *\n * @typedef State\n * Info passed around.\n * @property {Readonly<Schema>} schema\n * Schema.\n * @property {Array<string>} stack\n * Tag names of ancestors.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {position} from 'unist-util-position'\nimport {defaultSchema} from './schema.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * Sanitize a tree.\n *\n * @param {Readonly<Nodes>} node\n * Unsafe tree.\n * @param {Readonly<Schema> | null | undefined} [options]\n * Configuration (default: `defaultSchema`).\n * @returns {Nodes}\n * New, safe tree.\n */\nexport function sanitize(node, options) {\n /** @type {Nodes} */\n let result = {type: 'root', children: []}\n\n /** @type {State} */\n const state = {\n schema: options ? {...defaultSchema, ...options} : defaultSchema,\n stack: []\n }\n const replace = transform(state, node)\n\n if (replace) {\n if (Array.isArray(replace)) {\n if (replace.length === 1) {\n result = replace[0]\n } else {\n result.children = replace\n }\n } else {\n result = replace\n }\n }\n\n return result\n}\n\n/**\n * Sanitize `node`.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} node\n * Unsafe node.\n * @returns {Array<ElementContent> | Nodes | undefined}\n * Safe result.\n */\nfunction transform(state, node) {\n if (node && typeof node === 'object') {\n const unsafe = /** @type {Record<string, Readonly<unknown>>} */ (node)\n const type = typeof unsafe.type === 'string' ? unsafe.type : ''\n\n switch (type) {\n case 'comment': {\n return comment(state, unsafe)\n }\n\n case 'doctype': {\n return doctype(state, unsafe)\n }\n\n case 'element': {\n return element(state, unsafe)\n }\n\n case 'root': {\n return root(state, unsafe)\n }\n\n case 'text': {\n return text(state, unsafe)\n }\n\n default:\n }\n }\n}\n\n/**\n * Make a safe comment.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe comment-like value.\n * @returns {Comment | undefined}\n * Safe comment (if with `allowComments`).\n */\nfunction comment(state, unsafe) {\n if (state.schema.allowComments) {\n // See <https://html.spec.whatwg.org/multipage/parsing.html#serialising-html-fragments>\n const result = typeof unsafe.value === 'string' ? unsafe.value : ''\n const index = result.indexOf('-->')\n const value = index < 0 ? result : result.slice(0, index)\n\n /** @type {Comment} */\n const node = {type: 'comment', value}\n\n patch(node, unsafe)\n\n return node\n }\n}\n\n/**\n * Make a safe doctype.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe doctype-like value.\n * @returns {Doctype | undefined}\n * Safe doctype (if with `allowDoctypes`).\n */\nfunction doctype(state, unsafe) {\n if (state.schema.allowDoctypes) {\n /** @type {Doctype} */\n const node = {type: 'doctype'}\n\n patch(node, unsafe)\n\n return node\n }\n}\n\n/**\n * Make a safe element.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe element-like value.\n * @returns {Array<ElementContent> | Element | undefined}\n * Safe element.\n */\nfunction element(state, unsafe) {\n const name = typeof unsafe.tagName === 'string' ? unsafe.tagName : ''\n\n state.stack.push(name)\n\n const content = /** @type {Array<ElementContent>} */ (\n children(state, unsafe.children)\n )\n const properties_ = properties(state, unsafe.properties)\n\n state.stack.pop()\n\n let safeElement = false\n\n if (\n name &&\n name !== '*' &&\n (!state.schema.tagNames || state.schema.tagNames.includes(name))\n ) {\n safeElement = true\n\n // Some nodes can break out of their context if they don’t have a certain\n // ancestor.\n if (state.schema.ancestors && own.call(state.schema.ancestors, name)) {\n const ancestors = state.schema.ancestors[name]\n let index = -1\n\n safeElement = false\n\n while (++index < ancestors.length) {\n if (state.stack.includes(ancestors[index])) {\n safeElement = true\n }\n }\n }\n }\n\n if (!safeElement) {\n return state.schema.strip && !state.schema.strip.includes(name)\n ? content\n : undefined\n }\n\n /** @type {Element} */\n const node = {\n type: 'element',\n tagName: name,\n properties: properties_,\n children: content\n }\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make a safe root.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe root-like value.\n * @returns {Root}\n * Safe root.\n */\nfunction root(state, unsafe) {\n const content = /** @type {Array<RootContent>} */ (\n children(state, unsafe.children)\n )\n\n /** @type {Root} */\n const node = {type: 'root', children: content}\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make a safe text.\n *\n * @param {State} _\n * Info passed around.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe text-like value.\n * @returns {Text}\n * Safe text.\n */\nfunction text(_, unsafe) {\n const value = typeof unsafe.value === 'string' ? unsafe.value : ''\n /** @type {Text} */\n const node = {type: 'text', value}\n\n patch(node, unsafe)\n\n return node\n}\n\n/**\n * Make children safe.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} children\n * Unsafe value.\n * @returns {Array<Nodes>}\n * Safe children.\n */\nfunction children(state, children) {\n /** @type {Array<Nodes>} */\n const results = []\n\n if (Array.isArray(children)) {\n const childrenUnknown = /** @type {Array<Readonly<unknown>>} */ (children)\n let index = -1\n\n while (++index < childrenUnknown.length) {\n const value = transform(state, childrenUnknown[index])\n\n if (value) {\n if (Array.isArray(value)) {\n results.push(...value)\n } else {\n results.push(value)\n }\n }\n }\n }\n\n return results\n}\n\n/**\n * Make element properties safe.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<unknown>} properties\n * Unsafe value.\n * @returns {Properties}\n * Safe value.\n */\nfunction properties(state, properties) {\n const tagName = state.stack[state.stack.length - 1]\n const attributes = state.schema.attributes\n const required = state.schema.required\n const specific =\n attributes && own.call(attributes, tagName)\n ? attributes[tagName]\n : undefined\n const defaults =\n attributes && own.call(attributes, '*') ? attributes['*'] : undefined\n const properties_ =\n /** @type {Readonly<Record<string, Readonly<unknown>>>} */ (\n properties && typeof properties === 'object' ? properties : {}\n )\n /** @type {Properties} */\n const result = {}\n /** @type {string} */\n let key\n\n for (key in properties_) {\n if (own.call(properties_, key)) {\n const unsafe = properties_[key]\n let safe = propertyValue(\n state,\n findDefinition(specific, key),\n key,\n unsafe\n )\n\n if (safe === null || safe === undefined) {\n safe = propertyValue(state, findDefinition(defaults, key), key, unsafe)\n }\n\n if (safe !== null && safe !== undefined) {\n result[key] = safe\n }\n }\n }\n\n if (required && own.call(required, tagName)) {\n const properties = required[tagName]\n\n for (key in properties) {\n if (own.call(properties, key) && !own.call(result, key)) {\n result[key] = properties[key]\n }\n }\n }\n\n return result\n}\n\n/**\n * Sanitize a property value.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition> | undefined} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value (but an array).\n * @returns {Array<number | string> | boolean | number | string | undefined}\n * Safe value.\n */\nfunction propertyValue(state, definition, key, value) {\n return definition\n ? Array.isArray(value)\n ? propertyValueMany(state, definition, key, value)\n : propertyValuePrimitive(state, definition, key, value)\n : undefined\n}\n\n/**\n * Sanitize a property value which is a list.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<Array<Readonly<unknown>>>} values\n * Unsafe value (but an array).\n * @returns {Array<number | string>}\n * Safe value.\n */\nfunction propertyValueMany(state, definition, key, values) {\n let index = -1\n /** @type {Array<number | string>} */\n const result = []\n\n while (++index < values.length) {\n const value = propertyValuePrimitive(state, definition, key, values[index])\n\n if (typeof value === 'number' || typeof value === 'string') {\n result.push(value)\n }\n }\n\n return result\n}\n\n/**\n * Sanitize a property value which is a primitive.\n *\n * @param {State} state\n * Info passed around.\n * @param {Readonly<PropertyDefinition>} definition\n * Definition.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value (but not an array).\n * @returns {boolean | number | string | undefined}\n * Safe value.\n */\nfunction propertyValuePrimitive(state, definition, key, value) {\n if (\n typeof value !== 'boolean' &&\n typeof value !== 'number' &&\n typeof value !== 'string'\n ) {\n return\n }\n\n if (!safeProtocol(state, key, value)) {\n return\n }\n\n // Just a string, or only one item in an array, means all values are OK.\n // More than one item means an allow list.\n if (typeof definition === 'object' && definition.length > 1) {\n let ok = false\n let index = 0 // Ignore `key`, which is the first item.\n\n while (++index < definition.length) {\n const allowed = definition[index]\n\n // Expression.\n if (allowed && typeof allowed === 'object' && 'flags' in allowed) {\n if (allowed.test(String(value))) {\n ok = true\n break\n }\n }\n // Primitive.\n else if (allowed === value) {\n ok = true\n break\n }\n }\n\n if (!ok) return\n }\n\n return state.schema.clobber &&\n state.schema.clobberPrefix &&\n state.schema.clobber.includes(key)\n ? state.schema.clobberPrefix + value\n : value\n}\n\n/**\n * Check whether `value` is a safe URL.\n *\n * @param {State} state\n * Info passed around.\n * @param {string} key\n * Field name.\n * @param {Readonly<unknown>} value\n * Unsafe value.\n * @returns {boolean}\n * Whether it’s a safe value.\n */\nfunction safeProtocol(state, key, value) {\n const protocols =\n state.schema.protocols && own.call(state.schema.protocols, key)\n ? state.schema.protocols[key]\n : undefined\n\n // No protocols defined? Then everything is fine.\n if (!protocols || protocols.length === 0) {\n return true\n }\n\n const url = String(value)\n const colon = url.indexOf(':')\n const questionMark = url.indexOf('?')\n const numberSign = url.indexOf('#')\n const slash = url.indexOf('/')\n\n if (\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign)\n ) {\n return true\n }\n\n let index = -1\n\n while (++index < protocols.length) {\n const protocol = protocols[index]\n\n if (\n colon === protocol.length &&\n url.slice(0, protocol.length) === protocol\n ) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Add data and position.\n *\n * @param {Nodes} node\n * Node to patch safe data and position on.\n * @param {Readonly<Record<string, Readonly<unknown>>>} unsafe\n * Unsafe node-like value.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(node, unsafe) {\n const cleanPosition = position(\n // @ts-expect-error: looks like a node.\n unsafe\n )\n\n if (unsafe.data) {\n node.data = structuredClone(unsafe.data)\n }\n\n if (cleanPosition) node.position = cleanPosition\n}\n\n/**\n *\n * @param {Readonly<Array<PropertyDefinition>> | undefined} definitions\n * @param {string} key\n * @returns {Readonly<PropertyDefinition> | undefined}\n */\nfunction findDefinition(definitions, key) {\n /** @type {PropertyDefinition | undefined} */\n let dataDefault\n let index = -1\n\n if (definitions) {\n while (++index < definitions.length) {\n const entry = definitions[index]\n const name = typeof entry === 'string' ? entry : entry[0]\n\n if (name === key) {\n return entry\n }\n\n if (name === 'data*') dataDefault = entry\n }\n }\n\n if (key.length > 4 && key.slice(0, 4).toLowerCase() === 'data') {\n return dataDefault\n }\n}\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '',\n zwj: '',\n lrm: '',\n rlm: '',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `c` vs `c` (decimal shorter)\n // * `d` vs `d` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction edit(regex: string | RegExp, opt = '') {\n let source = typeof regex === 'string' ? regex : regex.source;\n const obj = {\n replace: (name: string | RegExp, val: string | RegExp) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(other.caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\n\nconst supportsLookbehind = (() => {\ntry {\n // eslint-disable-next-line prefer-regex-literals\n return !!new RegExp('(?<=1)(?<!1)');\n} catch {\n // See browser support here:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n return false;\n}\n})();\n\nexport const other = {\n codeRemoveIndent: /^(?: {1,4}| {0,3}\\t)/gm,\n outputLinkReplace: /\\\\([\\[\\]])/g,\n indentCodeCompensation: /^(\\s+)(?:```)/,\n beginningSpace: /^\\s+/,\n endingHash: /#$/,\n startingSpaceChar: /^ /,\n endingSpaceChar: / $/,\n nonSpaceChar: /[^ ]/,\n newLineCharGlobal: /\\n/g,\n tabCharGlobal: /\\t/g,\n multipleSpaceGlobal: /\\s+/g,\n blankLine: /^[ \\t]*$/,\n doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n blockquoteStart: /^ {0,3}>/,\n blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n listReplaceTabs: /^\\t+/,\n listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n listIsTask: /^\\[[ xX]\\] /,\n listReplaceTask: /^\\[[ xX]\\] +/,\n anyLine: /\\n.*\\n/,\n hrefBrackets: /^<(.*)>$/,\n tableDelimiter: /[:|]/,\n tableAlignChars: /^\\||\\| *$/g,\n tableRowBlankLine: /\\n[ \\t]*$/,\n tableAlignRight: /^ *-+: *$/,\n tableAlignCenter: /^ *:-+: *$/,\n tableAlignLeft: /^ *:-+ *$/,\n startATag: /^<a /i,\n endATag: /^<\\/a>/i,\n startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n startAngleBracket: /^</,\n endAngleBracket: />$/,\n pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n escapeTest: /[&<>\"']/,\n escapeReplace: /[&<>\"']/g,\n escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n unescapeTest: /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,\n caret: /(^|[^\\[])\\^/g,\n percentDecode: /%25/g,\n findPipe: /\\|/g,\n splitPipe: / \\|/,\n slashPipe: /\\\\\\|/g,\n carriageReturn: /\\r\\n|\\r/g,\n spaceLine: /^ +$/gm,\n notSpaceStart: /^\\S*/,\n endingNewline: /\\n$/,\n listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n nextBulletRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),\n hrRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),\n fencesBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`),\n headingBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`),\n htmlBeginRegex: (indent: number) => new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i'),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/\\|table/g, '') // table not in commonmark\n .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\n\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n lheading: lheadingGfm,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n ...blockNormal,\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n .replace('html', /<(?! )[^<>]*?>/)\n .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\nconst emStrongRDelimAstCore =\n '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n .replace(/punct/g, _punctuationGfmStrongEm)\n .getRegex();\n\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit(\n '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n .replace(/punctSpace/g, _punctuationOrSpace)\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nconst _inlineLabel = /(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/;\n\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n ...inlineNormal,\n emStrongRDelimAst: emStrongRDelimAstGfm,\n emStrongLDelim: emStrongLDelimGfm,\n url: edit(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('protocol', _caseInsensitiveProtocol)\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: edit(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/)\n .replace('protocol', _caseInsensitiveProtocol)\n .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\n\nexport const inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n other: typeof other\n block: Record<BlockKeys, RegExp>\n inline: Record<InlineKeys, RegExp>\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escape(html: string, encode?: boolean) {\n if (encode) {\n if (other.escapeTest.test(html)) {\n return html.replace(other.escapeReplace, getEscapeReplacement);\n }\n } else {\n if (other.escapeTestNoEncode.test(html)) {\n return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nexport function unescape(html: string) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(other.unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nexport function cleanUrl(href: string) {\n try {\n href = encodeURI(href).replace(other.percentDecode, '%');\n } catch {\n return null;\n }\n return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(other.splitPipe);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells.at(-1)?.trim()) {\n cells.pop();\n }\n\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nexport function findClosingBracket(str: string, b: string) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n if (level > 0) {\n return -2;\n }\n\n return -1;\n}\n","import { _defaults } from './defaults.ts';\nimport {\n rtrim,\n splitCells,\n findClosingBracket,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image {\n const href = link.href;\n const title = link.title || null;\n const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n\n lexer.state.inLink = true;\n const token: Tokens.Link | Tokens.Image = {\n type: cap[0].charAt(0) === '!' ? 'image' : 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(rules.other.beginningSpace);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n rules!: Rules; // set by the lexer\n lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(src: string): Tokens.Space | undefined {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n\n code(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(this.rules.other.codeRemoveIndent, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n\n fences(src: string): Tokens.Code | undefined {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n\n heading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (this.rules.other.endingHash.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || this.rules.other.endingSpaceChar.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n hr(src: string): Tokens.Hr | undefined {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n\n blockquote(src: string): Tokens.Blockquote | undefined {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens: Token[] = [];\n\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (this.rules.other.blockquoteStart.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n } else if (!inBlockquote) {\n currentLines.push(lines[i]);\n } else {\n break;\n }\n }\n lines = lines.slice(i);\n\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(this.rules.other.blockquoteSetextReplace, '\\n $1')\n .replace(this.rules.other.blockquoteSetextReplace2, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n\n const lastToken = tokens.at(-1);\n\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n } else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken as Tokens.Blockquote;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n } else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken as Tokens.List;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText)!;\n tokens[tokens.length - 1] = newToken;\n\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n continue;\n }\n }\n\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n\n list(src: string): Tokens.List | undefined {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list: Tokens.List = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = this.rules.other.listItemRegex(bull);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n let line = cap[2].split('\\n', 1)[0].replace(this.rules.other.listReplaceTabs, (t: string) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n } else if (blankLine) {\n indent = cap[1].length + 1;\n } else {\n indent = cap[2].search(this.rules.other.nonSpaceChar); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n const hrRegex = this.rules.other.hrRegex(indent);\n const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(this.rules.other.listReplaceNesting, ' ');\n nextLineWithoutTabs = nextLine;\n } else {\n nextLineWithoutTabs = nextLine.replace(this.rules.other.tabCharGlobal, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n\n if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n } else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n\n // paragraph continuation unless last line was a different block level element\n if (line.replace(this.rules.other.tabCharGlobal, ' ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n\n itemContents += '\\n' + nextLine;\n }\n\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (this.rules.other.doubleBlankLine.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n let istask: RegExpExecArray | null = null;\n let ischecked: boolean | undefined;\n // Check for task list items\n if (this.options.gfm) {\n istask = this.rules.other.listIsTask.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(this.rules.other.listReplaceTask, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n const lastItem = list.items.at(-1);\n if (lastItem) {\n lastItem.raw = lastItem.raw.trimEnd();\n lastItem.text = lastItem.text.trimEnd();\n } else {\n // not a list since there were no items\n return;\n }\n list.raw = list.raw.trimEnd();\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n list.loose = hasMultipleLineBreaks;\n }\n }\n\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src: string): Tokens.HTML | undefined {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token: Tokens.HTML = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n\n def(src: string): Tokens.Def | undefined {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, ' ');\n const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n\n table(src: string): Tokens.Table | undefined {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n\n if (!this.rules.other.tableDelimiter.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n const item: Tokens.Table = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n\n for (const align of aligns) {\n if (this.rules.other.tableAlignRight.test(align)) {\n item.align.push('right');\n } else if (this.rules.other.tableAlignCenter.test(align)) {\n item.align.push('center');\n } else if (this.rules.other.tableAlignLeft.test(align)) {\n item.align.push('left');\n } else {\n item.align.push(null);\n }\n }\n\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n\n return item;\n }\n\n lheading(src: string): Tokens.Heading | undefined {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n\n paragraph(src: string): Tokens.Paragraph | undefined {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n\n text(src: string): Tokens.Text | undefined {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n\n escape(src: string): Tokens.Escape | undefined {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: cap[1],\n };\n }\n }\n\n tag(src: string): Tokens.Tag | undefined {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n\n link(src: string): Tokens.Link | Tokens.Image | undefined {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex === -2) {\n // more open parens than closed\n return;\n }\n\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (this.rules.other.startAngleBracket.test(href)) {\n if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer, this.rules);\n }\n }\n\n reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer, this.rules);\n }\n }\n\n emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = [...rDelim].length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n\n codespan(src: string): Tokens.Codespan | undefined {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n\n br(src: string): Tokens.Br | undefined {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n\n del(src: string): Tokens.Del | undefined {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n\n autolink(src: string): Tokens.Link | undefined {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[1];\n href = 'mailto:' + text;\n } else {\n text = cap[1];\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n url(src: string): Tokens.Link | undefined {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = cap[0];\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = cap[0];\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n } else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n\n inlineText(src: string): Tokens.Text | undefined {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n const escaped = this.lexer.state.inRawBlock;\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n escaped,\n };\n }\n }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n tokens: TokensList;\n options: MarkedOptions<ParserOutput, RendererOutput>;\n state: {\n inLink: boolean;\n inRawBlock: boolean;\n top: boolean;\n };\n\n private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n private inlineQueue: { src: string, tokens: Token[] }[];\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n // TokenList cannot be created in one go\n this.tokens = [] as unknown as TokensList;\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n\n const rules = {\n other,\n block: block.normal,\n inline: inline.normal,\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src: string) {\n src = src.replace(other.carriageReturn, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(other.tabCharGlobal, ' ').replace(other.spaceLine, '');\n }\n\n while (src) {\n let token: Tokens.Generic | undefined;\n\n if (this.options.extensions?.block?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.raw.length === 1 && lastToken !== undefined) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n lastToken.raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n // An indented code block cannot interrupt a paragraph.\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n tokens.push(token);\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n const lastToken = tokens.at(-1);\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue.at(-1)!.src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src: string, tokens: Token[] = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src: string, tokens: Token[] = []): Token[] {\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match: RegExpExecArray | null = null;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index)\n + '[' + 'a'.repeat(match[0].length - 2) + ']'\n + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n\n // Mask out other blocks\n let offset;\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n offset = match[2] ? match[2].length : 0;\n maskedSrc = maskedSrc.slice(0, match.index + offset) + '[' + 'a'.repeat(match[0].length - offset - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out blocks from extensions\n maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n let keepPrevChar = false;\n let prevChar = '';\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n let token: Tokens.Generic | undefined;\n\n // extensions\n if (this.options.extensions?.inline?.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens.at(-1);\n if (token.type === 'text' && lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n let cutSrc = src;\n if (this.options.extensions?.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n const lastToken = tokens.at(-1);\n if (lastToken?.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n cleanUrl,\n escape,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n space(token: Tokens.Space): RendererOutput {\n return '' as RendererOutput;\n }\n\n code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n const code = text.replace(other.endingNewline, '') + '\\n';\n\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n return '<pre><code class=\"language-'\n + escape(langString)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n' as RendererOutput;\n }\n\n blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n def(token: Tokens.Def): RendererOutput {\n return '' as RendererOutput;\n }\n\n heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n }\n\n hr(token: Tokens.Hr): RendererOutput {\n return '<hr>\\n' as RendererOutput;\n }\n\n list(token: Tokens.List): RendererOutput {\n const ordered = token.ordered;\n const start = token.start;\n\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n }\n\n listitem(item: Tokens.ListItem): RendererOutput {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens[0]?.type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + escape(item.tokens[0].tokens[0].text);\n item.tokens[0].tokens[0].escaped = true;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n escaped: true,\n });\n }\n } else {\n itemBody += checkbox + ' ';\n }\n }\n\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n\n return `<li>${itemBody}</li>\\n` as RendererOutput;\n }\n\n checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">' as RendererOutput;\n }\n\n paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n }\n\n table(token: Tokens.Table): RendererOutput {\n let header = '';\n\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell as ParserOutput });\n\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n\n body += this.tablerow({ text: cell as ParserOutput });\n }\n if (body) body = `<tbody>${body}</tbody>`;\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n' as RendererOutput;\n }\n\n tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n }\n\n tablecell(token: Tokens.TableCell): RendererOutput {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n` as RendererOutput;\n }\n\n /**\n * span level renderer\n */\n strong({ tokens }: Tokens.Strong): RendererOutput {\n return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n }\n\n em({ tokens }: Tokens.Em): RendererOutput {\n return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return `<code>${escape(text, true)}</code>` as RendererOutput;\n }\n\n br(token: Tokens.Br): RendererOutput {\n return '<br>' as RendererOutput;\n }\n\n del({ tokens }: Tokens.Del): RendererOutput {\n return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n }\n\n link({ href, title, tokens }: Tokens.Link): RendererOutput {\n const text = this.parser.parseInline(tokens) as string;\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text as RendererOutput;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + (escape(title)) + '\"';\n }\n out += '>' + text + '</a>';\n return out as RendererOutput;\n }\n\n image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n if (tokens) {\n text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n }\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return escape(text) as RendererOutput;\n }\n href = cleanHref;\n\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${escape(title)}\"`;\n }\n out += '>';\n return out as RendererOutput;\n }\n\n text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n return 'tokens' in token && token.tokens\n ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n : ('escaped' in token && token.escaped ? token.text as RendererOutput : escape(token.text) as RendererOutput);\n }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n // no need for block level renderers\n strong({ text }: Tokens.Strong): RendererOutput {\n return text as RendererOutput;\n }\n\n em({ text }: Tokens.Em): RendererOutput {\n return text as RendererOutput;\n }\n\n codespan({ text }: Tokens.Codespan): RendererOutput {\n return text as RendererOutput;\n }\n\n del({ text }: Tokens.Del): RendererOutput {\n return text as RendererOutput;\n }\n\n html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n return text as RendererOutput;\n }\n\n link({ text }: Tokens.Link): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n image({ text }: Tokens.Image): RendererOutput {\n return '' + text as RendererOutput;\n }\n\n br(): RendererOutput {\n return '' as RendererOutput;\n }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n renderer: _Renderer<ParserOutput, RendererOutput>;\n textRenderer: _TextRenderer<RendererOutput>;\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer<RendererOutput>();\n }\n\n /**\n * Static Parse Method\n */\n static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n const parser = new _Parser<ParserOutput, RendererOutput>(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens: Token[], top = true): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const genericToken = anyToken as Tokens.Generic;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'def': {\n out += this.renderer.def(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken) as string;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i] as Tokens.Text;\n body += ('\\n' + this.renderer.text(textToken));\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body, escaped: true }],\n });\n } else {\n out += body;\n }\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out as ParserOutput;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n let out = '';\n\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions?.renderers?.[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n\n const token = anyToken as MarkedToken;\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '' as ParserOutput;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out as ParserOutput;\n }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n options: MarkedOptions<ParserOutput, RendererOutput>;\n block?: boolean;\n\n constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n this.options = options || _defaults;\n }\n\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n 'emStrongMask',\n ]);\n\n static passThroughHooksRespectAsync = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n\n /**\n * Process markdown before marked\n */\n preprocess(markdown: string) {\n return markdown;\n }\n\n /**\n * Process HTML after marked is finished\n */\n postprocess(html: ParserOutput) {\n return html;\n }\n\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens: Token[] | TokensList) {\n return tokens;\n }\n\n /**\n * Mask contents that should not be interpreted as em/strong delimiters\n */\n emStrongMask(src: string) {\n return src;\n }\n\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escape } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n defaults = _getDefaults<ParserOutput, RendererOutput>();\n options = this.setOptions;\n\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n\n Parser = _Parser<ParserOutput, RendererOutput>;\n Renderer = _Renderer<ParserOutput, RendererOutput>;\n TextRenderer = _TextRenderer<RendererOutput>;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n this.use(...args);\n }\n\n /**\n * Run callback for every token\n */\n walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n let values: MaybePromise[] = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token as Tokens.Table;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token as Tokens.List;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token as Tokens.Generic;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n values = values.concat(this.walkTokens(tokens, callback));\n });\n } else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n\n use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args: unknown[]) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return (ret || '') as RendererOutput;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args: unknown[]) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n const prevHook = hooks[hooksProp] as UnknownFunction;\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg: unknown) => {\n if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n return (async() => {\n const ret = await hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n })();\n }\n\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n } else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args: unknown[]) => {\n if (this.defaults.async) {\n return (async() => {\n let ret = await hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = await prevHook.apply(hooks, args);\n }\n return ret;\n })();\n }\n\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function(token) {\n let values: MaybePromise[] = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n this.defaults = { ...this.defaults, ...opts };\n });\n\n return this;\n }\n\n setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n\n lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n\n parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n }\n\n private parseMarkdown(blockType: boolean) {\n type overloadedParse = {\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n\n const throwError = this.onError(!!opt.silent, !!opt.async);\n\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n\n if (opt.async) {\n return (async() => {\n const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n const lexer = opt.hooks ? await opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const tokens = await lexer(processedSrc, opt);\n const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n if (opt.walkTokens) {\n await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n }\n const parser = opt.hooks ? await opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n const html = await parser(processedTokens, opt);\n return opt.hooks ? await opt.hooks.postprocess(html) : html;\n })().catch(throwError);\n }\n\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src) as string;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n } catch(e) {\n return throwError(e as Error);\n }\n };\n\n return parse;\n }\n\n private onError(silent: boolean, async: boolean) {\n return (e: Error): string | Promise<string> => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n _getDefaults,\n changeDefaults,\n _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n return markedInstance.parse(src, opt);\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\nmarked.setOptions = function(options: MarkedOptions) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args: MarkedExtension[]) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const use = marked.use;\nexport const walkTokens = marked.walkTokens;\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n","const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n","export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code, cpOffset) {\n const { line, col, offset } = this;\n const startCol = col + cpOffset;\n const startOffset = offset + cpOffset;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol,\n endCol: startCol,\n startOffset,\n endOffset: startOffset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code, 0));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n","export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n","// Generated using scripts/write-decode-map.ts\n\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ new Uint16Array(\n // prettier-ignore\n /* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)),\n);\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n [0, 65_533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint: (...codePoints: number[]) => string =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n String.fromCodePoint ??\n function (codePoint: number): string {\n let output = \"\";\n\n if (codePoint > 0xff_ff) {\n codePoint -= 0x1_00_00;\n output += String.fromCharCode(\n ((codePoint >>> 10) & 0x3_ff) | 0xd8_00,\n );\n codePoint = 0xdc_00 | (codePoint & 0x3_ff);\n }\n\n output += String.fromCharCode(codePoint);\n return output;\n };\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint: number): number {\n if (\n (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n codePoint > 0x10_ff_ff\n ) {\n return 0xff_fd;\n }\n\n return decodeMap.get(codePoint) ?? codePoint;\n}\n\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint: number): string {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\n\nconst enum CharCodes {\n NUM = 35, // \"#\"\n SEMI = 59, // \";\"\n EQUALS = 61, // \"=\"\n ZERO = 48, // \"0\"\n NINE = 57, // \"9\"\n LOWER_A = 97, // \"a\"\n LOWER_F = 102, // \"f\"\n LOWER_X = 120, // \"x\"\n LOWER_Z = 122, // \"z\"\n UPPER_A = 65, // \"A\"\n UPPER_F = 70, // \"F\"\n UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nexport enum BinTrieFlags {\n VALUE_LENGTH = 0b1100_0000_0000_0000,\n BRANCH_LENGTH = 0b0011_1111_1000_0000,\n JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n\nfunction isNumber(code: number): boolean {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n return (\n (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code)\n );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n EntityStart,\n NumericStart,\n NumericDecimal,\n NumericHex,\n NamedEntity,\n}\n\nexport enum DecodingMode {\n /** Entities in text nodes that can end with any character. */\n Legacy = 0,\n /** Only allow entities terminated with a semicolon. */\n Strict = 1,\n /** Entities in attributes have limitations on ending characters. */\n Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n missingSemicolonAfterCharacterReference(): void;\n absenceOfDigitsInNumericCharacterReference(\n consumedCharacters: number,\n ): void;\n validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n private readonly decodeTree: Uint16Array,\n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n private readonly emitCodePoint: (cp: number, consumed: number) => void,\n /** An object that is used to produce errors. */\n private readonly errors?: EntityErrorProducer | undefined,\n ) {}\n\n /** The current state of the decoder. */\n private state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n private consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n private result = 0;\n\n /** The current index in the decode tree. */\n private treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n private excess = 1;\n /** The mode in which the decoder is operating. */\n private decodeMode = DecodingMode.Strict;\n\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode: DecodingMode): void {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input: string, offset: number): number {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericStart(input: string, offset: number): number {\n if (offset >= input.length) {\n return -1;\n }\n\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n\n private addToNumericResult(\n input: string,\n start: number,\n end: number,\n base: number,\n ): void {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericHex(input: string, offset: number): number {\n const startIndex = offset;\n\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n } else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n\n this.addToNumericResult(input, startIndex, offset, 16);\n\n return -1;\n }\n\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNumericDecimal(input: string, offset: number): number {\n const startIndex = offset;\n\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n } else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n\n this.addToNumericResult(input, startIndex, offset, 10);\n\n return -1;\n }\n\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n private emitNumericEntity(lastCp: number, expectedLength: number): number {\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n } else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n\n this.errors.validateNumericCharacterReference(this.result);\n }\n\n return this.consumed;\n }\n\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n private stateNamedEntity(input: string, offset: number): number {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n\n this.treeIndex = determineBranch(\n decodeTree,\n current,\n this.treeIndex + Math.max(1, valueLength),\n char,\n );\n\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(\n this.treeIndex,\n valueLength,\n this.consumed + this.excess,\n );\n }\n\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n\n return -1;\n }\n\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n private emitNotTerminatedNamedEntity(): number {\n const { result, decodeTree } = this;\n\n const valueLength =\n (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n this.emitNamedEntityData(result, valueLength, this.consumed);\n this.errors?.missingSemicolonAfterCharacterReference();\n\n return this.consumed;\n }\n\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n private emitNamedEntityData(\n result: number,\n valueLength: number,\n consumed: number,\n ): number {\n const { decodeTree } = this;\n\n this.emitCodePoint(\n valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1],\n consumed,\n );\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n\n return consumed;\n }\n\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end(): number {\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n this.errors?.absenceOfDigitsInNumericCharacterReference(\n this.consumed,\n );\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(\n decodeTree,\n (data) => (returnValue += fromCodePoint(data)),\n );\n\n return function decodeWithTrie(\n input: string,\n decodeMode: DecodingMode,\n ): string {\n let lastIndex = 0;\n let offset = 0;\n\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n\n decoder.startEntity(decodeMode);\n\n const length = decoder.write(\n input,\n // Skip the \"&\"\n offset + 1,\n );\n\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n\n const result = returnValue + input.slice(lastIndex);\n\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n\n return result;\n };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n decodeTree: Uint16Array,\n current: number,\n nodeIndex: number,\n char: number,\n): number {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n\n // Case 3: Multiple branches encoded in dictionary\n\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n\n if (midValue < char) {\n lo = mid + 1;\n } else if (midValue > char) {\n hi = mid - 1;\n } else {\n return decodeTree[mid + branchCount];\n }\n }\n\n return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n htmlString: string,\n mode: DecodingMode = DecodingMode.Legacy,\n): string {\n return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n\nexport {\n decodeCodePoint,\n replaceCodePoint,\n fromCodePoint,\n} from \"./decode-codepoint.js\";\n","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SEARCH\"] = \"search\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\n $.FIELDSET,\n $.FIGCAPTION,\n $.FIGURE,\n $.FOOTER,\n $.FORM,\n $.FRAME,\n $.FRAMESET,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HEADER,\n $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n if (code === $.NULL) {\n return ERR.nullCharacterReference;\n }\n else if (code > 1114111) {\n return ERR.characterReferenceOutsideUnicodeRange;\n }\n else if (isSurrogate(code)) {\n return ERR.surrogateCharacterReference;\n }\n else if (isUndefinedCodePoint(code)) {\n return ERR.noncharacterCharacterReference;\n }\n else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n return ERR.controlCharacterReference;\n }\n return null;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.entityStartPos = 0;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n // Note: Set `pos` _before_ flushing, as flushing might drop\n // the current chunk and invalidate `entityStartPos`.\n this.preprocessor.pos = this.entityStartPos + consumed - 1;\n this._flushCodePointConsumedAsCharacterReference(cp);\n }, handler.onParseError\n ? {\n missingSemicolonAfterCharacterReference: () => {\n this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n },\n absenceOfDigitsInNumericCharacterReference: (consumed) => {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n },\n validateNumericCharacterReference: (code) => {\n const error = getErrorForNumericCharacterReference(code);\n if (error)\n this._err(error, 1);\n },\n }\n : undefined);\n }\n //Errors\n _err(code, cpOffset = 0) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this.preprocessor.retreat(this.consumedAfterSnapshot);\n this.consumedAfterSnapshot = 0;\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type === type) {\n this.currentCharacterToken.chars += ch;\n return;\n }\n else {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _startCharacterReference() {\n this.returnState = this.state;\n this.state = State.CHARACTER_REFERENCE;\n this.entityStartPos = this.preprocessor.pos;\n this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference();\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference() {\n let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n if (length < 0) {\n if (this.preprocessor.lastChunkWritten) {\n length = this.entityDecoder.end();\n }\n else {\n // Wait for the rest of the entity.\n this.active = false;\n // Mark the entire buffer as read.\n this.preprocessor.pos = this.preprocessor.html.length - 1;\n this.consumedAfterSnapshot = 0;\n this.preprocessor.endOfChunkHit = true;\n return;\n }\n }\n if (length === 0) {\n // This was not a valid entity. Go back to the beginning, and\n // figure out what to do.\n this.preprocessor.pos = this.entityStartPos;\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state =\n !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n ? State.AMBIGUOUS_AMPERSAND\n : this.returnState;\n }\n else {\n // We successfully parsed an entity. Switch to the return state.\n this.state = this.returnState;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this.state = this.returnState;\n this._callState(cp);\n }\n }\n}\n","import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n $.APPLET,\n $.CAPTION,\n $.HTML,\n $.MARQUEE,\n $.OBJECT,\n $.TABLE,\n $.TD,\n $.TEMPLATE,\n $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n if (this.current && this.currentTagId !== undefined) {\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(Math.max(targetIdx, 0));\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInDynamicScope(tagName, htmlScope) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (tn === tagName)\n return true;\n if (htmlScope.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n }\n hasInListItemScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n }\n hasInButtonScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (NUMBERED_HEADERS.has(tn))\n return true;\n if (SCOPING_ELEMENTS_HTML.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n break;\n }\n default: {\n return false;\n }\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== undefined &&\n this.currentTagId !== exclusionId &&\n IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex !== -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx === -1) {\n this.entries.length = 0;\n }\n else {\n this.entries.splice(0, markerIdx + 1);\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n","import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, \n /** @internal */\n fragmentContext = null, \n /** @internal */\n scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n /** @internal */\n this.insertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.originalInsertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.headElement = null;\n /** @internal */\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n *\n * @internal\n */\n this.tmplInsertionModeStack = [];\n /** @internal */\n this.pendingCharacterTokens = [];\n /** @internal */\n this.hasNonWhitespacePendingCharacterToken = false;\n /** @internal */\n this.framesetOk = true;\n /** @internal */\n this.skipNextNewLine = false;\n /** @internal */\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n /** @internal */\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n /** @internal */\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n /** @internal */\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode =\n !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n }\n /** @protected */\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n /** @protected */\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n /** @protected */\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n /** @protected */\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n /** @protected */\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n }\n }\n /**\n * For self-closing tags. Add an element to the tree, but skip adding it\n * to the stack.\n */\n /** @protected */\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n /** @protected */\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n /** @protected */\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n /** @protected */\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n /** @protected */\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n /** @protected */\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n /** @protected */\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n /** @protected */\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n /** @protected */\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n currentTagId !== undefined &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n /** @protected */\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n /** @protected */\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n /** @protected */\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n /** @protected */\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n /** @protected */\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n /** @protected */\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n /** @protected */\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n /** @protected */\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n /** @protected */\n _shouldFosterParentOnInsertion() {\n return (this.fosterParentingEnabled &&\n this.openElements.currentTagId !== undefined &&\n this._isElementCausesFosterParenting(this.openElements.currentTagId));\n }\n /** @protected */\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n /** @protected */\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n /** @protected */\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n /** @internal */\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n * @protected\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(Math.max(idx, 0));\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED:\n case $.NOFRAMES: {\n rawTextStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n rawTextStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.HR: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n p.openElements.currentTagId !== undefined &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n","export const xmlReplacer: RegExp = /[\"$&'<>\\u0080-\\uFFFF]/g;\n\nconst xmlCodeMap = new Map([\n [34, \""\"],\n [38, \"&\"],\n [39, \"'\"],\n [60, \"<\"],\n [62, \">\"],\n]);\n\n// For compatibility with node < 4, we wrap `codePointAt`\nexport const getCodePoint: (c: string, index: number) => number =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n String.prototype.codePointAt == null\n ? (c: string, index: number): number =>\n (c.charCodeAt(index) & 0xfc_00) === 0xd8_00\n ? (c.charCodeAt(index) - 0xd8_00) * 0x4_00 +\n c.charCodeAt(index + 1) -\n 0xdc_00 +\n 0x1_00_00\n : c.charCodeAt(index)\n : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n (input: string, index: number): number => input.codePointAt(index)!;\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `ü`) will be used.\n */\nexport function encodeXML(input: string): string {\n let returnValue = \"\";\n let lastIndex = 0;\n let match;\n\n while ((match = xmlReplacer.exec(input)) !== null) {\n const { index } = match;\n const char = input.charCodeAt(index);\n const next = xmlCodeMap.get(char);\n\n if (next === undefined) {\n returnValue += `${input.substring(lastIndex, index)}&#x${getCodePoint(\n input,\n index,\n ).toString(16)};`;\n // Increase by 1 if we have a surrogate pair\n lastIndex = xmlReplacer.lastIndex += Number(\n (char & 0xfc_00) === 0xd8_00,\n );\n } else {\n returnValue += input.substring(lastIndex, index) + next;\n lastIndex = index + 1;\n }\n }\n\n return returnValue + input.substr(lastIndex);\n}\n\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using numeric hexadecimal reference (eg. `ü`).\n *\n * Have a look at `escapeUTF8` if you want a more concise output at the expense\n * of reduced transportability.\n *\n * @param data String to escape.\n */\nexport const escape: typeof encodeXML = encodeXML;\n\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(\n regex: RegExp,\n map: Map<number, string>,\n): (data: string) => string {\n return function escape(data: string): string {\n let match;\n let lastIndex = 0;\n let result = \"\";\n\n while ((match = regex.exec(data))) {\n if (lastIndex !== match.index) {\n result += data.substring(lastIndex, match.index);\n }\n\n // We know that this character will be in the map.\n result += map.get(match[0].charCodeAt(0))!;\n\n // Every match will be of length 1\n lastIndex = match.index + 1;\n }\n\n return result + data.substring(lastIndex);\n };\n}\n\n/**\n * Encodes all characters not valid in XML documents using XML entities.\n *\n * Note that the output will be character-set dependent.\n *\n * @param data String to escape.\n */\nexport const escapeUTF8: (data: string) => string = /* #__PURE__ */ getEscaper(\n /[\"&'<>]/g,\n xmlCodeMap,\n);\n\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeAttribute: (data: string) => string =\n /* #__PURE__ */ getEscaper(\n /[\"&\\u00A0]/g,\n new Map([\n [34, \""\"],\n [38, \"&\"],\n [160, \" \"],\n ]),\n );\n\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nexport const escapeText: (data: string) => string = /* #__PURE__ */ getEscaper(\n /[&<>\\u00A0]/g,\n new Map([\n [38, \"&\"],\n [60, \"<\"],\n [62, \">\"],\n [160, \" \"],\n ]),\n);\n","import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (attr.namespace) {\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n }\n else {\n html += attr.name;\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n","import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n if (typeof fragmentContext === 'string') {\n options = html;\n html = fragmentContext;\n fragmentContext = null;\n }\n const parser = Parser.getFragmentParser(fragmentContext, options);\n parser.tokenizer.write(html, true);\n return parser.getFragment();\n}\n","/**\n * @import {Node, Parent} from 'unist'\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | ReadonlyArray<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends ReadonlyArray<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends Array<string>>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition[number]}) &\n * (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test)\n ? anyFactory(test)\n : // Cast because `ReadonlyArray` goes into the above but `isArray`\n // narrows to `Array`.\n propertiesFactory(/** @type {Props} */ (test))\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array<Check>} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propertiesFactory(check) {\n const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @param {string} d\n * @returns {string}\n */\nexport function color(d) {\n return '\\u001B[33m' + d + '\\u001B[39m'\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<infer T>\n * ? MatchesOne<Value, T>\n * : Check extends Array<infer T>\n * ? MatchesOne<Value, T>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array<VisitedParents>} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array<UnistParent>} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record<string, unknown>} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly<ActionTuple>} */\n let result = empty\n /** @type {Readonly<ActionTuple>} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array<UnistParent>} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @import {Node as UnistNode, Parent as UnistParent} from 'unist'\n * @import {VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate<Check, Value> extends Value\n * ? Predicate<Check, Value>\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends ReadonlyArray<any>\n * ? MatchesOne<Value, Check[number]>\n * : MatchesOne<Value, Check>\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array<infer Children>}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent<Node, Child>\n * | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches<Descendant, Check>,\n * Extract<Descendant, UnistParent>\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant<Tree>,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array<UnistParent>} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","import type { Element, Root } from 'hast'\nimport { fromParse5 } from 'hast-util-from-parse5'\nimport { defaultSchema, sanitize, type Schema } from 'hast-util-sanitize'\nimport { toHtml } from 'hast-util-to-html'\nimport { Marked } from 'marked'\nimport { parseFragment } from 'parse5'\nimport { visit } from 'unist-util-visit'\n\n/**\n * Canonical Blog markdown → **safe HTML** pipeline for the Reblu SITE SDK.\n *\n * Blog `content` arrives as raw Markdown (tiptap-markdown). This module owns the\n * single, hardened conversion every SITE reuses instead of reinventing it:\n *\n * Markdown ──(marked, GFM)──▶ HTML ──(hast-util-sanitize)──▶ safe HTML\n *\n * Sanitisation is MANDATORY (XSS): the output is later parsed into React nodes by\n * `MarkdownRenderer` (no `dangerouslySetInnerHTML`), but `sanitizeHtml` is also used\n * directly against `dangerouslySetInnerHTML` for tenant-authored HTML — the nexus\n * \"HTML personalizado\" editor (`apps/base-api/src/components/nexus/pages/page-editor/\n * page-editor-form.tsx`) writes `page.customHtml`/`section.contentHtml`, rendered in\n * `apps/demo-site/src/app/[slug]/page.tsx` and `apps/demo-site/src/app/services/\n * [slug]/page.tsx` — so the string must be safe on its own regardless of how a\n * consumer chooses to render it.\n *\n * SCOPE OF THE PARITY GUARANTEES BELOW. Everything this module says about preserving a\n * tenant's `class`, `style`, `id`, `hidden`, `data-*` and `aria-*` is a guarantee about\n * the STRING `sanitizeHtml` returns, and it reaches the page unchanged only on the\n * `dangerouslySetInnerHTML` consumers listed above. `MarkdownRenderer` re-parses that\n * string through `html-react-parser` into a token-styled component map\n * (`markdown-renderer.tsx` `buildOptions`), and that map rebuilds most elements from\n * scratch — so on the blog-body path author attributes are dropped downstream of this\n * module regardless of what the schema allows. Widening the renderer's attribute\n * forwarding is a separate change; do not read these comments as a claim about it.\n *\n * REB-606: this used to run on `isomorphic-dompurify`, which pulls `jsdom` into the\n * import graph. `jsdom`'s transitive `html-encoding-sniffer` → `@exodus/bytes` chain\n * is ESM-only and fails to load under Vercel's Node runtime (`ERR_REQUIRE_ESM`),\n * producing a 500 on every route that renders tenant HTML.\n *\n * The replacement is deliberately assembled from the three `hast` utilities DIRECTLY\n * (`parse5` → `hast-util-from-parse5` → `hast-util-sanitize` → `hast-util-to-html`)\n * rather than through the `unified`/`rehype-*` plugin wrappers. `unified().processSync`\n * builds a `VFile`, and `VFile`'s constructor calls `process.cwd()` through `vfile`'s\n * `minproc`/`minpath`/`minurl` modules — which a bundler resolves under the **node**\n * condition, so the bundle acquires bare `path`/`process`/`url` imports. That would\n * reproduce REB-606's exact shape (a build-invisible, runtime-only module failure) in\n * a different runtime: a SITE importing this framework-agnostic entry into a client\n * component gets `Module not found: Can't resolve 'path'`, and an Edge route gets a\n * `TypeError` the first time `sanitizeHtml` reaches `process.cwd`. The direct\n * utilities never construct a `VFile`, so the emitted bundle has NO runtime import\n * outside this package's declared dependencies. `packages/site-blocks/test/\n * use-client-smoke.test.ts` pins that specifier set for both emitted entries — that\n * assertion, not this comment, is what keeps it true.\n *\n * `hast-util-sanitize`'s own `defaultSchema` is GitHub's markdown-comment policy, which\n * is meaningfully STRICTER than DOMPurify's unconfigured default (no `class`, no\n * `style`, no `target`, structural tags like `figure`/`article`/`nav` missing, no\n * `tel:` links, and it rewrites `id`/`name` to fight DOM clobbering). Swapping the\n * library is not \"behaviour preserving\" if it also silently swaps the policy — a\n * tenant's `customHtml` authored under the old, permissive DOMPurify default would\n * lose styling, anchors, phone CTAs and structure on this deploy. `SANITIZE_SCHEMA`\n * below restores DOMPurify's default HTML profile (see `dompurify/dist/purify.cjs.js`\n * `html$1`/`html`/`IS_ALLOWED_URI`) for everything that carries **no new injection\n * surface**, and it turns GitHub's `id`/`name` clobber-rewrite off (DOMPurify never did\n * this, so leaving it on would break tenant anchor links that worked for the last\n * month).\n *\n * It deliberately does NOT restore the parts of DOMPurify's default that ARE\n * meaningfully riskier and have no evidenced use in this codebase: the `<style>`\n * element, form controls (`form`/`input`/`button`/`select`/`textarea`/`label`/\n * `fieldset`/`legend`/`option`/`optgroup`/`datalist`/`output`/`progress`/`meter`\n * beyond the existing GFM task-list checkbox — phishing/UI-redress surface),\n * `<script>`/`<template>`/`<object>`/`<embed>`/`<canvas>`, image maps (`map`/`area`),\n * document/shadow-DOM plumbing (`html`/`head`/`body`/`slot`/`content`/`shadow`/\n * `element`/`decorator`), the obsolete set (`dir`/`marquee`/`nobr`/`spacer`/`blink`/\n * `menuitem`), `dialog`/`menu`/`search`, and the SVG/MathML namespaces (recurring\n * source of real-world DOMPurify/sanitiser bypasses via `foreignObject`/namespace\n * confusion). The changeset for this release enumerates every one of them.\n *\n * `<style>` specifically: it is not restored because a tenant-authored stylesheet\n * applies to the WHOLE document, not just the injected fragment — attribute-selector\n * rules like `input[value^=\"a\"]{background:url(...)}` read and exfiltrate values from\n * markup this sanitiser never saw. The `style` ATTRIBUTE is a different, narrower\n * primitive (it can only style the element that carries it), it is part of DOMPurify's\n * default that tenant `customHtml` has relied on for a month, and it is kept — see the\n * changeset, which discloses that an inline `style` can still issue an outbound\n * `url()` request. Closing that is a separate, deliberate decision (a CSS property\n * allowlist) this bug-fix does not make.\n *\n * ARIA (`role` + the standard `aria-*` set, enumerated in `RESTORED_ARIA_ATTRIBUTES`\n * below using `property-information`'s exact camelCase spellings — e.g.\n * `ariaValueMax`, not `ariaValuemax`; hast-util-sanitize matches property names\n * case-sensitively, so a naive hyphen-to-camelCase guess silently drops the\n * attribute instead of erroring) is restored too — DOMPurify allows it by default\n * (`ALLOW_ARIA_ATTR`) and losing it would be an accessibility regression on tenant\n * content, not a security fix (see REB-286's axe gate). Custom `data-*` attributes\n * (DOMPurify's `ALLOW_DATA_ATTR`) are restored via hast-util-sanitize's `'data*'`\n * wildcard property name (`lib/index.js:758` in `hast-util-sanitize`) — they carry\n * no URL/script/CSS interpretation, so allowing arbitrary values is safe.\n *\n * `srcset` is the one attribute this schema takes AWAY from DOMPurify's default, on\n * purpose. `protocols` validates only the attribute's leading scheme\n * (`hast-util-sanitize`'s `safeProtocol` looks at the text before the first\n * `:`/`/`/`?`/`#`), but `srcset` is a comma-separated candidate list — so a value like\n * `\"https://ok.png 1x, //evil.tld/track.png 2x\"` cannot be gated by this schema model\n * at all. `defaultSchema` ships `source: ['srcSet']` and keeps `source`/`picture` in\n * `tagNames`, which would leave `srcSet` on `<source>` as the ONLY completely ungated\n * URL sink in the policy: not script execution (browsers do not run `javascript:` from\n * an image source), but an arbitrary tenant-authored third-party request carrying a\n * visitor's IP, UA and Referer. `RESTORED_MEDIA_ATTRIBUTES.source` replaces that list\n * with protocol-gated `src` only.\n *\n * `<iframe>` is the one non-default TAG we allow, and ONLY when its `src` host is on\n * the YouTube allowlist — every other embed (arbitrary iframes) is dropped.\n *\n * FOREIGN CONTENT (SVG/MathML) IS REMOVED BEFORE THE TREE IS EVEN BUILT, and that\n * pre-pass is load-bearing for three separate reasons — see `dropForeignContent`.\n * The policy above already said the SVG and MathML namespaces are not allowed; until\n * this pass existed that was implemented by UNWRAPPING them, which is a different\n * thing and got two of the three wrong.\n */\n\n/** Hosts permitted for `<iframe>` embeds. Exact host match — no suffix tricks. */\nexport const ALLOWED_YOUTUBE_HOSTS: readonly string[] = [\n 'youtube.com',\n 'www.youtube.com',\n 'youtube-nocookie.com',\n 'www.youtube-nocookie.com',\n]\n\n/** True when `src` is an absolute URL whose host is exactly a YouTube host. */\nexport function isAllowedYouTubeHost(src: string | null | undefined): boolean {\n if (!src) return false\n try {\n const { host } = new URL(src)\n return ALLOWED_YOUTUBE_HOSTS.includes(host)\n } catch {\n // Relative or malformed URLs can't be host-verified → reject.\n return false\n }\n}\n\n// Local marked instance — avoids mutating the global `marked` singleton another\n// package (base-api) may also configure. GFM on; no single-newline <br> (tiptap\n// does not emit hard breaks on a lone newline).\nconst marked = new Marked({ gfm: true, breaks: false })\n\n// Plain structural/formatting tags DOMPurify's default profile allows that carry no\n// URL-bearing attribute and therefore need no new `protocols` gating to add back\n// safely. See the module doc for what was deliberately left out and why.\nconst RESTORED_TAG_NAMES = [\n 'abbr',\n 'acronym',\n 'address',\n 'article',\n 'aside',\n 'bdi',\n 'bdo',\n 'big',\n 'caption',\n 'center',\n 'cite',\n 'col',\n 'colgroup',\n 'data',\n 'dfn',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'header',\n 'hgroup',\n 'main',\n 'mark',\n 'nav',\n 'small',\n 'time',\n 'u',\n 'wbr',\n]\n\n// Self-hosted media. DOMPurify's default allows these and a tenant testimonial video\n// embedded through the nexus HTML editor has rendered for the last month, so dropping\n// them would be a silent content regression. Every URL-bearing attribute here\n// (`src`, `poster`) is protocol-gated by `SANITIZE_SCHEMA.protocols` — `poster` is NOT\n// in `defaultSchema.protocols`, so it is added explicitly below.\nconst RESTORED_MEDIA_TAG_NAMES = ['video', 'audio', 'track']\n\n// Attribute lists for the media tags, in `property-information`'s exact camelCase\n// spellings. `source` is REPLACED (not extended): `defaultSchema` gives it `srcSet`,\n// which `protocols` cannot gate — see the module doc.\nconst RESTORED_MEDIA_ATTRIBUTES: Record<string, string[]> = {\n video: [\n 'src',\n 'poster',\n 'controls',\n 'autoPlay',\n 'loop',\n 'muted',\n 'playsInline',\n 'preload',\n 'width',\n 'height',\n ],\n audio: ['src', 'controls', 'autoPlay', 'loop', 'muted', 'preload'],\n track: ['src', 'kind', 'srcLang', 'label', 'default'],\n source: ['src', 'type', 'media'],\n}\n\n// The standard `aria-*` attribute set plus `role`, spelled EXACTLY as\n// `property-information` names them (`node_modules/property-information/lib/aria.js`)\n// — hast-util-sanitize matches attribute names case-sensitively, and several ARIA\n// attributes have internal capitals that don't match a naive hyphen-to-camelCase\n// conversion (`ariaValueMax`, not `ariaValuemax`; `ariaHasPopup`, not `ariaHaspopup`).\n// Finite and enumerable — unlike arbitrary `data-*` names (handled below via the\n// `'data*'` wildcard), every ARIA attribute name is a fixed part of the spec, and\n// none carry a URL, so there's no injection surface to gate.\nconst RESTORED_ARIA_ATTRIBUTES = [\n 'role',\n 'ariaActiveDescendant',\n 'ariaAtomic',\n 'ariaAutoComplete',\n 'ariaBusy',\n 'ariaChecked',\n 'ariaColCount',\n 'ariaColIndex',\n 'ariaColSpan',\n 'ariaControls',\n 'ariaCurrent',\n 'ariaDescribedBy',\n 'ariaDetails',\n 'ariaDisabled',\n 'ariaDropEffect',\n 'ariaErrorMessage',\n 'ariaExpanded',\n 'ariaFlowTo',\n 'ariaGrabbed',\n 'ariaHasPopup',\n 'ariaHidden',\n 'ariaInvalid',\n 'ariaKeyShortcuts',\n 'ariaLabel',\n 'ariaLabelledBy',\n 'ariaLevel',\n 'ariaLive',\n 'ariaModal',\n 'ariaMultiLine',\n 'ariaMultiSelectable',\n 'ariaOrientation',\n 'ariaOwns',\n 'ariaPlaceholder',\n 'ariaPosInSet',\n 'ariaPressed',\n 'ariaReadOnly',\n 'ariaRelevant',\n 'ariaRequired',\n 'ariaRoleDescription',\n 'ariaRowCount',\n 'ariaRowIndex',\n 'ariaRowSpan',\n 'ariaSelected',\n 'ariaSetSize',\n 'ariaSort',\n 'ariaValueMax',\n 'ariaValueMin',\n 'ariaValueNow',\n 'ariaValueText',\n]\n\n// Global attributes DOMPurify's default allows that `defaultSchema.attributes['*']`\n// omits. None carry a URL, a script or a CSS declaration.\n//\n// `hidden` is the one that matters for correctness rather than styling: without it a\n// tenant block authored as `<p hidden>` becomes VISIBLE on deploy — publishing content\n// the author explicitly marked as not-for-publication.\n//\n// `is` is deliberately NOT here even though DOMPurify allows it: it binds author\n// markup to a registered custom-element class (customized built-in elements), i.e. it\n// is the only member of this group that changes an element's BEHAVIOUR rather than its\n// presentation. No evidenced use; disclosed in the changeset.\n// `type` is deliberately NOT here. `hast-util-sanitize`'s `properties()` falls back\n// to the `'*'` list whenever the TAG-SPECIFIC `propertyValue` returns undefined — not\n// merely when no tag-specific definition exists. A global `'type'` would therefore\n// override `defaultSchema.attributes.input`'s `[['type', 'checkbox']]` pin and let\n// `<input type=\"text\">` through, contradicting the \"form controls are not restored\"\n// policy above. It is restored per-tag instead (`RESTORED_PER_TAG_ATTRIBUTES`).\nconst RESTORED_GLOBAL_ATTRIBUTES = [\n 'hidden',\n 'download',\n 'sizes',\n 'draggable',\n 'spellCheck',\n 'translate',\n 'slot',\n 'part',\n 'popover',\n 'inert',\n 'autoCapitalize',\n 'enterKeyHint',\n]\n\n// Elements DOMPurify removes together with their CONTENT rather than unwrapping\n// (its `DEFAULT_FORBID_CONTENTS`), restricted to the ones this schema does not allow.\n// `hast-util-sanitize` would otherwise unwrap them and emit their inner text — e.g.\n// `<title>Documento interno</title>` (a Word/LibreOffice paste) becoming a stray\n// paragraph of body copy. Not XSS: the serialiser escapes text either way. It is a\n// content leak, and the parity fix is to discard the content, as DOMPurify did.\n//\n// `strip` matches by tag name regardless of namespace, which is what we want: the\n// MathML/SVG spellings here (`mi`, `desc`, `annotation-xml`, …) also cover the case\n// where the HTML parser sees them with NO `<svg>`/`<math>` parent and therefore places\n// them in the HTML namespace, out of reach of `dropForeignContent`.\n//\n// `audio`, `colgroup`, `head`, `math`, `noscript`, `svg`, `thead` and `video` are in\n// DOMPurify's list but deliberately NOT here: either this schema allows the element\n// (so its content was never at risk) or the measured behaviour showed no delta.\nconst CONTENT_STRIPPED_TAG_NAMES = [\n 'annotation-xml',\n 'desc',\n 'foreignobject',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'selectedcontent',\n 'title',\n 'xmp',\n]\n\ntype AttributeDefinition = NonNullable<Schema['attributes']>[string][number]\n\n// The list-numbering `type` DOMPurify allows, restored per-tag rather than globally so\n// it cannot leak onto `<input>` — see the note on `RESTORED_GLOBAL_ATTRIBUTES` — and\n// value-restricted to the spec's marker enum rather than allowed as free text. The\n// attribute is not a URL sink, so an arbitrary value is inert either way; pinning the\n// enum just keeps the emitted HTML to values a browser actually honours.\nconst LIST_MARKER_TYPES: AttributeDefinition = [\n 'type',\n '1',\n 'a',\n 'A',\n 'i',\n 'I',\n 'disc',\n 'square',\n 'circle',\n]\nconst RESTORED_PER_TAG_ATTRIBUTES = ['ol', 'li']\n\n// `defaultSchema` is WIDER than DOMPurify's default in a number of places. Inheriting\n// any of them would make a release whose headline is \"narrowing\" silently widen, so\n// this set is the COMPLETE list of attributes `defaultSchema` allows and DOMPurify's\n// default profile drops. It was measured, not reasoned: every `(tag, attribute)` pair\n// in `defaultSchema.attributes` was rendered through both sanitisers and compared, and\n// these are every pair where DOMPurify dropped the attribute and `defaultSchema` kept\n// it. `packages/site-blocks/src/lib/markdown.test.ts` pins the whole set.\n//\n// Two of them are not merely cosmetic:\n//\n// - `accessKey` lets tenant content steal a browser/AT keyboard shortcut.\n// - `longDesc` (on `<img>`) is a URL-BEARING attribute DOMPurify dropped outright.\n// Inheriting it would add a tenant-authored outbound-request sink gated by nothing\n// but `http`/`https` — the same class of thing `srcset` was removed for, so keeping\n// it while removing `srcset` would have been incoherent.\n//\n// `itemProp` + `itemScope`/`itemType` inject microdata into the page's structured-data\n// graph; the rest (`abbr`, `acceptCharset`, `axis`, `char`, `charOff`, `charSet`,\n// `compact`, `hSpace`, `htmlFor`, `noHref`, `prompt`, `rules`) are inert legacy\n// presentational/table attributes. They are removed anyway: they have not rendered for\n// a month, so no tenant content can depend on them, and leaving them in would make the\n// changeset's \"this release does not silently widen\" claim false.\n//\n// `itemScope`/`itemType` live on `defaultSchema.attributes.div` and `longDesc` on\n// `.img`, NOT on `'*'`, so this set is applied to every per-tag list too (see\n// `normaliseInheritedAttributes`). Filtering only `'*'` would leave\n// `<div itemscope itemtype=\"…\">` and `<img longdesc=\"…\">` behind and make the stated\n// rationale false.\n//\n// Names are `property-information`'s exact camelCase spellings, because that is what\n// `defaultSchema` stores and what `hast-util-sanitize` matches case-sensitively.\nconst WIDENED_DEFAULT_ATTRIBUTES = new Set([\n 'accessKey',\n 'itemProp',\n 'itemScope',\n 'itemType',\n 'longDesc',\n 'abbr',\n 'acceptCharset',\n 'axis',\n 'char',\n 'charOff',\n 'charSet',\n 'compact',\n 'hSpace',\n 'htmlFor',\n 'noHref',\n 'prompt',\n 'rules',\n])\n\n/**\n * `defaultSchema` restricts `className` to a fixed value list on seven tags\n * (`a`, `code`, `h2`, `li`, `ol`, `section`, `ul` — GitHub's footnote/task-list/\n * `sr-only` classes). `hast-util-sanitize`'s `properties()` only falls back to the\n * `'*'` list when the TAG-SPECIFIC lookup yields null/undefined; a value-restricted\n * `className` tuple yields `[]` (an empty, but present, class list), so the fallback\n * never fires and `class` is wiped to `class=\"\"` on precisely those tags — the ones\n * that carry a tenant's link, list and section styling.\n *\n * Adding `'className'` to `'*'` therefore is NOT enough. The inherited per-tag lists\n * have to be rewritten so `className` is unrestricted everywhere. `input`'s\n * `[['disabled', true], ['type', 'checkbox']]` tuples are left alone on purpose: they\n * are the GFM task-list coercion that keeps a bare `<input>` inert.\n *\n * The same pass drops `WIDENED_DEFAULT_ATTRIBUTES` from EVERY list, not just `'*'` —\n * `itemScope`/`itemType` are defined on `div`, so a `'*'`-only filter would miss them.\n */\nfunction normaliseInheritedAttributes(\n attributes: NonNullable<Schema['attributes']>,\n): Record<string, AttributeDefinition[]> {\n const rewritten: Record<string, AttributeDefinition[]> = {}\n\n for (const [tagName, definitions] of Object.entries(attributes)) {\n rewritten[tagName] = definitions\n .filter(\n (definition) =>\n typeof definition !== 'string' || !WIDENED_DEFAULT_ATTRIBUTES.has(definition),\n )\n .map((definition) =>\n Array.isArray(definition) && definition[0] === 'className' ? 'className' : definition,\n )\n }\n\n return rewritten\n}\n\nconst INHERITED_ATTRIBUTES = normaliseInheritedAttributes(defaultSchema.attributes ?? {})\n\n/**\n * hast-util-sanitize schema: DOMPurify's default HTML-tag/attribute policy (the\n * behaviour tenant `customHtml`/blog markdown has actually run under for the past\n * month — see the module doc) plus `<iframe>` — host-gated by `dropDisallowedIframes`\n * below — minus `srcset`, and minus the risk surface enumerated in the module doc.\n */\nconst SANITIZE_SCHEMA: Schema = {\n ...defaultSchema,\n tagNames: [\n ...(defaultSchema.tagNames ?? []),\n ...RESTORED_TAG_NAMES,\n ...RESTORED_MEDIA_TAG_NAMES,\n 'iframe',\n ],\n attributes: {\n ...INHERITED_ATTRIBUTES,\n ...Object.fromEntries(\n RESTORED_PER_TAG_ATTRIBUTES.map((tagName) => [\n tagName,\n [...(INHERITED_ATTRIBUTES[tagName] ?? []), LIST_MARKER_TYPES],\n ]),\n ),\n '*': [\n ...(INHERITED_ATTRIBUTES['*'] ?? []),\n 'className',\n 'style',\n 'target',\n 'rel',\n 'loading',\n ...RESTORED_GLOBAL_ATTRIBUTES,\n // hast-util-sanitize's wildcard: allows every `data-*` attribute by name,\n // matching DOMPurify's default `ALLOW_DATA_ATTR` behaviour. Values are opaque\n // strings — never parsed as a URL, script, or CSS — so no protocol gate needed.\n 'data*',\n ...RESTORED_ARIA_ATTRIBUTES,\n ],\n ...RESTORED_MEDIA_ATTRIBUTES,\n // `allow` is author-controlled, so tenant markdown can request a Permissions-Policy\n // delegation (`allow=\"camera; microphone\"`) on the embed. Kept because it is exactly\n // the pre-REB-606 behaviour — the DOMPurify config this module replaced listed it in\n // `ADD_ATTR` — and `dropDisallowedIframes` bounds the grantee to the YouTube host\n // allowlist. Narrowing it to the renderer's default `allow` list is a behaviour\n // change, deliberately not made in this bug-fix.\n iframe: ['src', 'allow', 'allowFullScreen', 'frameBorder', 'scrolling'],\n },\n protocols: {\n ...defaultSchema.protocols,\n // DOMPurify's default `IS_ALLOWED_URI` is\n // `/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|…)/i`.\n // `defaultSchema.protocols.href` omits `tel`/`callto`/`sms`/`ftp`/`ftps`, so the\n // \"Pide cita\" phone CTA on a clinic page (`<a href=\"tel:…\">`) silently loses its\n // `href` and becomes inert text. `mailto:` happens to be in both lists, which is\n // exactly why a spot check misses this.\n href: [\n ...(defaultSchema.protocols?.href ?? []),\n 'tel',\n 'callto',\n 'sms',\n 'ftp',\n 'ftps',\n 'cid',\n 'matrix',\n ],\n // `<video poster>` is a URL and is NOT in `defaultSchema.protocols`. Without this\n // entry the attribute would be allowed with no scheme gate at all.\n poster: ['http', 'https'],\n },\n // DOMPurify never rewrote `id`/`name` — GitHub's clobber-prefix is a real, but\n // unrelated, extra hardening layer. Leaving it on would break tenant anchor links\n // (`<a href=\"#intro\">` / `<h2 id=\"intro\">`) that worked under the old sanitiser.\n clobber: [],\n clobberPrefix: '',\n // `hast-util-sanitize` UNWRAPS a disallowed element — it drops the tag but KEEPS its\n // text content. For most elements that is the right call (`<dialog>hola</dialog>` →\n // `hola`). For elements whose content is not body text it is a content leak:\n // `<style>` would dump raw CSS onto the page, and `<title>Documento interno</title>`\n // would publish a Word/LibreOffice export's document title as a stray paragraph.\n // `strip` removes the element AND its content, which is what DOMPurify did.\n //\n // The list is DOMPurify's own `DEFAULT_FORBID_CONTENTS` minus the tags this schema\n // allows — i.e. exactly the elements whose content DOMPurify discarded and this\n // module would otherwise emit. Verified by differential sweep against\n // `isomorphic-dompurify@3.21.0`, not inferred.\n strip: [...(defaultSchema.strip ?? []), 'style', ...CONTENT_STRIPPED_TAG_NAMES],\n}\n\n// Every property name `SANITIZE_SCHEMA.protocols` gates. Derived, not hand-written, so\n// a protocol added to the schema is automatically case-normalised too.\nconst URL_PROPERTY_NAMES = Object.keys(SANITIZE_SCHEMA.protocols ?? {})\n\n// A well-formed leading URL scheme and nothing else: `[A-Za-z][A-Za-z0-9+.-]*:`.\n// Deliberately anchored and deliberately NOT whitespace-tolerant — see\n// `normaliseUrlSchemeCase`.\nconst LEADING_URL_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/\n\n/**\n * Lowercase the scheme of every protocol-gated URL attribute, in place, BEFORE\n * sanitising.\n *\n * `hast-util-sanitize`'s `safeProtocol` compares the text before the first colon\n * against its allowlist with `===` — case-SENSITIVELY. DOMPurify's `IS_ALLOWED_URI` is\n * an `/i` regex. So `<a href=\"HTTP://example.com/\">` keeps its `href` under DOMPurify\n * and silently loses it here. It fails closed, so it is not a security bug — but it\n * destroys content with no signal, and a mixed-case scheme is exactly what a\n * Word/Outlook paste produces.\n *\n * This cannot open a hole: lowercasing changes only the case of an already\n * well-formed scheme token, so `JaVaScRiPt:alert(1)` becomes `javascript:alert(1)` and\n * is still rejected by the allowlist. The regex is intentionally strict — a value like\n * `\" javascript:x\"` or `\"java\\nscript:x\"` does NOT match, so it is left untouched and\n * keeps failing the allowlist exactly as before.\n */\nfunction normaliseUrlSchemeCase(tree: Root): void {\n visit(tree, 'element', (node: Element) => {\n for (const property of URL_PROPERTY_NAMES) {\n const value = node.properties[property]\n if (typeof value !== 'string') continue\n\n const scheme = LEADING_URL_SCHEME.exec(value)\n if (!scheme) continue\n\n node.properties[property] = scheme[0].toLowerCase() + value.slice(scheme[0].length)\n }\n })\n}\n\n/**\n * Remove any `<iframe>` whose `src` host is not on the YouTube allowlist — the\n * direct replacement for the DOMPurify `uponSanitizeElement` hook this module used\n * to install. Mutates the tree in place; splicing keeps the same `index` returned to\n * `visit` so a sibling that shifts into the removed slot is still visited (see\n * unist-util-visit docs on removing nodes during traversal) — without this, two\n * consecutive disallowed `<iframe>`s would only have the first one dropped.\n */\nfunction dropDisallowedIframes(tree: Root): void {\n visit(tree, 'element', (node: Element, index, parent) => {\n if (node.tagName !== 'iframe' || parent === undefined || index === undefined) return\n const src = typeof node.properties.src === 'string' ? node.properties.src : undefined\n if (isAllowedYouTubeHost(src)) return\n parent.children.splice(index, 1)\n return index\n })\n}\n\n/**\n * `<input>` is in `defaultSchema.tagNames` ONLY to carry the GFM task-list checkbox\n * (`- [ ] item` → `<input disabled type=\"checkbox\">`). Every other form control is\n * deliberately not restored, and the changeset says `<input>` beyond that checkbox is\n * dropped. It was not: `defaultSchema.required` is\n * `{input: {disabled: true, type: 'checkbox'}}`, and `required` does not FILTER — it\n * FORCES values onto elements that survive. So `<input type=\"text\" name=\"q\">` came out\n * as `<input name=\"q\" disabled type=\"checkbox\">`, and a `<input type=\"hidden\">` field\n * a tenant contact form had been carrying invisibly for a month became a VISIBLE\n * orphan checkbox on this deploy.\n *\n * Removing the element before `sanitize()` runs is what makes the stated policy true:\n * `required` then only ever sees a real checkbox, where forcing `disabled` is exactly\n * the inert-ing we want. `<input>` is a void element, so \"unwrap\" and \"remove\" are the\n * same thing for its content — nothing is lost that was ever rendered.\n *\n * A tenant-authored `<input type=\"checkbox\">` still survives, forced `disabled`. That\n * is narrower than DOMPurify (which left it interactive) and is disclosed.\n */\nfunction dropNonTaskListInputs(tree: Root): void {\n visit(tree, 'element', (node: Element, index, parent) => {\n if (node.tagName !== 'input' || parent === undefined || index === undefined) return\n const type = node.properties.type\n if (typeof type === 'string' && type.toLowerCase() === 'checkbox') return\n parent.children.splice(index, 1)\n return index\n })\n}\n\n/** The one namespace the HTML profile of this sanitiser operates in. */\nconst HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'\n\n/**\n * A structural view of the `parse5` tree. The real `DefaultTreeAdapterMap` types are a\n * discriminated union that needs a cast per branch to walk; this pass only ever reads\n * `namespaceURI`/`tagName` and splices `childNodes`, so a narrow structural type keeps\n * it readable without weakening anything the pass actually relies on.\n */\ninterface Parse5Walkable {\n tagName?: string\n namespaceURI?: string\n content?: Parse5Walkable\n childNodes?: Parse5Walkable[]\n}\n\n/**\n * Remove every SVG / MathML element — with its subtree — from the `parse5` tree BEFORE\n * `fromParse5` converts it. Three separate things depend on this pass:\n *\n * 1. IT STOPS `sanitizeHtml` FROM THROWING. `hast-util-from-parse5` branches on\n * `tagName === 'template'` alone (`lib/index.js:197`) and then recurses into\n * `reference.content`. In foreign content parse5 creates a `template` in the\n * MathML/SVG namespace, which has NO `.content` DocumentFragment, so the recursion\n * dereferences `undefined.nodeName` and throws a `TypeError`. `sanitizeHtml` is\n * called straight from Server Components (`apps/demo-site/src/app/[slug]/page.tsx`,\n * `services/[slug]/page.tsx`, `_page-parts.tsx`) with no `try`/`catch` anywhere on\n * the path, so `'<math><template>'` in a tenant's \"HTML personalizado\" block was a\n * 500 on that route — REB-606's own failure mode, reintroduced through a different\n * door. A pasted Word/LibreOffice equation or an inline SVG sprite is exactly where\n * a `<math>`/`<svg>` wrapper comes from, so this is not a theoretical input.\n *\n * 2. IT MAKES THE STATED POLICY TRUE. The module doc has always said the SVG and\n * MathML namespaces are not allowed. Unwrapping them (the previous behaviour) drops\n * the tags but KEEPS their text, so `<svg><desc>Documento interno</desc></svg>`\n * published its content. DOMPurify force-removed foreign content outright.\n *\n * 3. IT REMOVES THE NAMESPACE-CONFUSION SURFACE ENTIRELY rather than relying on the\n * tag allowlist to catch it, which is the failure mode `foreignObject` bypasses\n * exploit.\n *\n * The second guard (`template` without `.content`) is redundant today — a foreign\n * template is already gone by namespace — and is kept deliberately: it is the direct,\n * named guard for the crash in (1), so a future change to the namespace rule cannot\n * silently re-open a 500.\n */\nfunction dropForeignContent(parent: Parse5Walkable): void {\n const children = parent.childNodes\n if (children === undefined) return\n\n for (let index = children.length - 1; index >= 0; index -= 1) {\n const child = children[index]\n\n if (child.namespaceURI !== undefined && child.namespaceURI !== HTML_NAMESPACE) {\n children.splice(index, 1)\n continue\n }\n\n if (child.tagName === 'template' && child.content === undefined) {\n children.splice(index, 1)\n continue\n }\n\n dropForeignContent(child)\n if (child.content !== undefined) dropForeignContent(child.content)\n }\n}\n\n/**\n * Sanitise an already-HTML string with the same policy (DOMPurify-default-equivalent\n * tags/attributes plus a host-gated `<iframe>`). Use for content that arrives as\n * HTML — e.g. page `section.contentHtml` from base-api, which is `marked` output\n * that has NOT been sanitised server-side.\n *\n * WHAT A PARSE FAILURE DOES, AND WHY. Everything up to `fromParse5` runs BEFORE the\n * sanitiser, so a throw there cannot be caught by anything downstream — and none of\n * this module's callers catch anything at all. There are only two behaviours that keep\n * the function's contract (\"the returned string is safe to inject as HTML\"):\n * propagate, or return `''`. Propagating turns one malformed block inside one tenant's\n * page into a 500 for the WHOLE route, which is the exact incident this module exists\n * to end. So it fails closed: the block is dropped, the rest of the page renders, and\n * the failure is reported through `console.error` so it is not silent — a dropped\n * block with a log line is recoverable, a 500 is not. Returning the input, escaped or\n * otherwise, is not an option: unparsed input is unsanitised input.\n *\n * This is a backstop, not the fix. The known crash class (foreign-content `<template>`)\n * is removed structurally by `dropForeignContent`; this catch exists because\n * `fromParse5` has already surprised us once.\n */\nexport function sanitizeHtml(html: string | null | undefined): string {\n if (!html?.trim()) return ''\n\n let tree: Root\n try {\n const fragment = parseFragment(html)\n dropForeignContent(fragment as Parse5Walkable)\n tree = fromParse5(fragment) as Root\n } catch (error) {\n console.error(\n '[@reblu/site-blocks] sanitizeHtml: could not parse the input HTML; dropping the ' +\n `block instead of rendering it unsanitised (${html.length} chars).`,\n error,\n )\n return ''\n }\n\n normaliseUrlSchemeCase(tree)\n dropNonTaskListInputs(tree)\n\n const safe = sanitize(tree, SANITIZE_SCHEMA) as Root\n dropDisallowedIframes(safe)\n\n return toHtml(safe)\n}\n\n/** Convert raw Markdown to sanitised, XSS-safe HTML. */\nexport function markdownToSafeHtml(markdown: string | null | undefined): string {\n if (!markdown?.trim()) return ''\n const rawHtml = marked.parse(markdown, { async: false }) as string\n return sanitizeHtml(rawHtml)\n}\n","import * as React from 'react'\nimport { cn } from '@reblu/site-ui'\nimport parse, { domToReact, Element, type DOMNode, type HTMLReactParserOptions } from 'html-react-parser'\n\nimport { markdownToSafeHtml } from '../lib/markdown'\n\n/**\n * `MarkdownRenderer` — the canonical Blog body renderer.\n *\n * Pipeline: raw Markdown → `markdownToSafeHtml` (marked → hast-util-sanitize, XSS-safe) →\n * `html-react-parser` into a token-styled React tree. We parse the sanitised HTML\n * into real React nodes (a component map) rather than using\n * `dangerouslySetInnerHTML`, so images lazy-load, external links are hardened, and\n * YouTube embeds get a responsive aspect-ratio wrapper.\n *\n * RSC-safe: no hooks, no browser APIs — renders inside a Server Component.\n * Styling is entirely token-driven (shadcn/OKLCH tokens); the block carries no\n * brand aesthetic of its own.\n */\nexport interface MarkdownRendererProps {\n /** Raw Markdown (blog `content`). */\n content: string | null | undefined\n className?: string\n /**\n * Shift every heading down by this many levels (clamped to h6). Use `1` on a\n * page that already renders its own `<h1>` so markdown `#` becomes `<h2>` and\n * the page keeps a single h1.\n */\n headingOffset?: number\n}\n\nconst HEADING_CLASSES: Record<number, string> = {\n 1: 'text-3xl font-bold mt-8 mb-4 first:mt-0',\n 2: 'text-2xl font-bold mt-7 mb-3 first:mt-0',\n 3: 'text-xl font-bold mt-6 mb-2 first:mt-0',\n 4: 'text-lg font-bold mt-5 mb-2 first:mt-0',\n 5: 'text-base font-bold mt-4 mb-2 first:mt-0',\n 6: 'text-sm font-bold mt-4 mb-2 first:mt-0',\n}\n\nfunction hasClass(el: Element, name: string): boolean {\n return typeof el.attribs.class === 'string' && el.attribs.class.split(/\\s+/).includes(name)\n}\n\nfunction isExternalHref(href: string | undefined): boolean {\n return !!href && /^(https?:)?\\/\\//.test(href)\n}\n\nfunction buildOptions(headingOffset: number): HTMLReactParserOptions {\n const options: HTMLReactParserOptions = {\n replace: (node) => {\n if (!(node instanceof Element)) return undefined\n const children = () => domToReact(node.children as DOMNode[], options)\n const { name, attribs } = node\n\n // Headings — shift level, keep the rendered level's visual weight.\n const headingMatch = /^h([1-6])$/.exec(name)\n if (headingMatch) {\n const rendered = Math.min(6, Number(headingMatch[1]) + headingOffset)\n const Tag = `h${rendered}` as keyof React.JSX.IntrinsicElements\n return <Tag className={HEADING_CLASSES[rendered]}>{children()}</Tag>\n }\n\n switch (name) {\n case 'p':\n return <p className='my-4 leading-relaxed text-foreground/90'>{children()}</p>\n case 'ul':\n return (\n <ul className={hasClass(node, 'contains-task-list') ? 'list-none pl-0 my-4 space-y-1' : 'list-disc ml-6 my-4'}>\n {children()}\n </ul>\n )\n case 'ol':\n return <ol className='list-decimal ml-6 my-4'>{children()}</ol>\n case 'li':\n return (\n <li className={hasClass(node, 'task-list-item') ? 'flex items-start gap-2 my-1' : 'my-1'}>\n {children()}\n </li>\n )\n case 'blockquote':\n return (\n <blockquote className='border-l-4 border-primary/50 pl-6 italic my-6 text-muted-foreground'>\n {children()}\n </blockquote>\n )\n case 'pre':\n return (\n <pre className='rounded-lg border border-input bg-muted p-4 my-6 overflow-x-auto font-mono text-sm'>\n {children()}\n </pre>\n )\n case 'code': {\n // Block code (inside <pre>) inherits the <pre> chrome; only inline code\n // gets the chip treatment.\n const isBlock = node.parent instanceof Element && node.parent.name === 'pre'\n if (isBlock) return <code className='block'>{children()}</code>\n return <code className='rounded bg-muted px-1.5 py-0.5 font-mono text-sm'>{children()}</code>\n }\n case 'a': {\n const href = attribs.href\n const external = isExternalHref(href)\n return (\n <a\n href={href}\n className='text-primary underline underline-offset-4 hover:text-primary/80'\n {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {children()}\n </a>\n )\n }\n case 'img':\n if (!attribs.src) return <></>\n return (\n // Plain <img> keeps the block portable — a distributable can't assume a\n // tenant's next/image remotePatterns. Consumers can post-process if they\n // want optimisation.\n <img\n src={attribs.src}\n alt={attribs.alt ?? ''}\n loading='lazy'\n className='rounded-lg w-full h-auto my-6'\n />\n )\n case 'iframe':\n // Only allowlisted YouTube iframes reach here (sanitiser drops the rest).\n return (\n <div className='relative my-6 aspect-video w-full overflow-hidden rounded-lg'>\n <iframe\n src={attribs.src}\n title={attribs.title ?? 'Embedded video'}\n allow={attribs.allow ?? 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'}\n allowFullScreen\n className='absolute inset-0 h-full w-full border-0'\n />\n </div>\n )\n case 'hr':\n return <hr className='my-8 border-muted-foreground/30' />\n case 'strong':\n return <strong className='font-bold text-foreground'>{children()}</strong>\n case 'em':\n return <em className='italic'>{children()}</em>\n case 'del':\n return <del className='line-through'>{children()}</del>\n default:\n return undefined\n }\n },\n }\n return options\n}\n\nexport function MarkdownRenderer({ content, className, headingOffset = 0 }: MarkdownRendererProps) {\n const html = markdownToSafeHtml(content)\n if (!html) return null\n\n return (\n <div className={cn('max-w-none', className)} data-slot='markdown'>\n {parse(html, buildOptions(headingOffset))}\n </div>\n )\n}\n\n/**\n * Render an **already-sanitised** HTML string through the same token-driven\n * component map as {@link MarkdownRenderer}. Consumers pass HTML that has been run\n * through `sanitizeHtml`/`markdownToSafeHtml`; this component does NOT sanitise, so\n * never hand it untrusted HTML.\n */\nexport interface SafeHtmlProps {\n html: string | null | undefined\n className?: string\n headingOffset?: number\n}\n\nexport function SafeHtml({ html, className, headingOffset = 0 }: SafeHtmlProps) {\n if (!html) return null\n return (\n <div className={cn('max-w-none', className)} data-slot='safe-html'>\n {parse(html, buildOptions(headingOffset))}\n </div>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { PageDetail } from '@reblu/site-contracts'\n\nimport { PageHero, PageSectionList } from './_page-parts'\n\n/**\n * `Treatment` — full treatment page organism over a `PageDetail` (a SERVICE-type\n * page). Renders the hero band followed by the ordered content sections.\n * Token-driven, RSC-safe.\n */\nexport interface TreatmentProps {\n page: PageDetail\n className?: string\n}\n\nexport function Treatment({ page, className }: TreatmentProps) {\n return (\n <article className={cn('space-y-12', className)} data-slot='treatment'>\n <PageHero page={page} />\n <PageSectionList sections={page.sections} />\n </article>\n )\n}\n","import { Button, cn } from '@reblu/site-ui'\nimport type { PageDetail, PageSection } from '@reblu/site-contracts'\n\nimport { sanitizeHtml } from '../lib/markdown'\nimport { SafeHtml } from './markdown-renderer'\n\n/**\n * Internal building blocks shared by the `Treatment` and `Specialty` organisms.\n * Not part of the public API — imported directly by those two files.\n */\n\nconst KNOWN_BUTTON_VARIANTS = new Set([\n 'default',\n 'destructive',\n 'outline',\n 'secondary',\n 'ghost',\n 'link',\n])\n\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n\nfunction toButtonVariant(variant: string | null): ButtonVariant {\n return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? (variant as ButtonVariant) : 'default'\n}\n\n/** Hero band for a page: category chip, title, subtitle and cover image. */\nexport function PageHero({ page }: { page: PageDetail }) {\n return (\n <header className='space-y-4'>\n {page.category && (\n <span className='inline-flex items-center rounded-full bg-secondary px-3 py-1 text-sm font-medium text-secondary-foreground'>\n {page.category.name}\n </span>\n )}\n <h1 className='text-4xl font-bold tracking-tight'>{page.title}</h1>\n {page.subtitle && <p className='text-lg text-muted-foreground'>{page.subtitle}</p>}\n {page.coverImageUrl && (\n <div className='relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={page.coverImageUrl}\n alt={page.title}\n loading='lazy'\n className='h-full w-full object-cover'\n />\n </div>\n )}\n </header>\n )\n}\n\nfunction SectionCta({ section }: { section: PageSection }) {\n if (!section.ctaLabel || !section.ctaUrl) return null\n return (\n <div className='pt-2'>\n <Button asChild variant={toButtonVariant(section.ctaVariant)}>\n <a\n href={section.ctaUrl}\n {...(section.ctaIsExternal ? { target: '_blank', rel: 'noopener noreferrer' } : {})}\n >\n {section.ctaLabel}\n </a>\n </Button>\n </div>\n )\n}\n\nfunction SectionImages({ section }: { section: PageSection }) {\n if (section.images.length === 0) return null\n return (\n <div className={cn('grid gap-4', section.images.length > 1 ? 'sm:grid-cols-2' : 'grid-cols-1')}>\n {section.images.map((img) => (\n <figure key={`${img.url}-${img.order}`} className='space-y-1'>\n <div className='relative aspect-video w-full overflow-hidden rounded-lg bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={img.url} alt={img.alt} loading='lazy' className='h-full w-full object-cover' />\n </div>\n {img.caption && (\n <figcaption className='text-sm text-muted-foreground'>{img.caption}</figcaption>\n )}\n </figure>\n ))}\n </div>\n )\n}\n\n/** One page section — heading, sanitised body, images and CTA. */\nexport function PageSectionBlock({ section }: { section: PageSection }) {\n const imageFirst = section.layout === 'IMAGE_TEXT'\n const sideBySide = section.layout === 'TEXT_IMAGE' || section.layout === 'IMAGE_TEXT'\n const hasImages = section.images.length > 0\n\n const body = (\n <div className='space-y-4'>\n {section.heading && <h2 className='text-2xl font-bold'>{section.heading}</h2>}\n {/* contentHtml from base-api is marked output that is NOT sanitised server-side. */}\n <SafeHtml html={sanitizeHtml(section.contentHtml)} headingOffset={2} />\n <SectionCta section={section} />\n </div>\n )\n\n if (sideBySide && hasImages) {\n return (\n <section className='grid items-center gap-8 md:grid-cols-2'>\n {imageFirst ? (\n <>\n <SectionImages section={section} />\n {body}\n </>\n ) : (\n <>\n {body}\n <SectionImages section={section} />\n </>\n )}\n </section>\n )\n }\n\n return (\n <section className='space-y-4'>\n {body}\n <SectionImages section={section} />\n </section>\n )\n}\n\n/** Ordered list of a page's sections. */\nexport function PageSectionList({ sections }: { sections: PageSection[] }) {\n if (sections.length === 0) return null\n const ordered = sections.slice().sort((a, b) => a.order - b.order)\n return (\n <div className='space-y-12'>\n {ordered.map((section) => (\n <PageSectionBlock key={section.id} section={section} />\n ))}\n </div>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { PageDetail, PageListItem } from '@reblu/site-contracts'\n\nimport { PageHero, PageSectionList } from './_page-parts'\n\n/**\n * `Specialty` — specialty page organism over a `PageDetail`. Like `Treatment` it\n * renders a hero and content sections, but a specialty groups treatments, so it\n * also renders an optional grid of the treatment pages under it (links to each\n * treatment). Token-driven, RSC-safe.\n */\nexport interface SpecialtyProps {\n page: PageDetail\n /** Treatment pages under this specialty. Rendered as a linked grid when present. */\n treatments?: PageListItem[]\n /** Builds the href for a treatment page from its slug. Defaults to `/{slug}`. */\n treatmentHref?: (slug: string) => string\n /** Heading for the treatments grid. Defaults to \"Treatments\". */\n treatmentsLabel?: string\n className?: string\n}\n\nexport function Specialty({\n page,\n treatments = [],\n treatmentHref = (slug) => `/${slug}`,\n treatmentsLabel = 'Treatments',\n className,\n}: SpecialtyProps) {\n return (\n <article className={cn('space-y-12', className)} data-slot='specialty'>\n <PageHero page={page} />\n <PageSectionList sections={page.sections} />\n\n {treatments.length > 0 && (\n <section className='space-y-6'>\n <h2 className='text-2xl font-bold'>{treatmentsLabel}</h2>\n <ul className='grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3'>\n {treatments.map((t) => (\n <li key={t.slug}>\n <a\n href={treatmentHref(t.slug)}\n className='group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg'\n >\n {t.coverImageUrl && (\n <div className='relative aspect-video overflow-hidden bg-muted'>\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img\n src={t.coverImageUrl}\n alt=''\n loading='lazy'\n className='h-full w-full object-cover transition-transform group-hover:scale-105'\n />\n </div>\n )}\n <div className='flex flex-1 flex-col gap-2 p-4'>\n <h3 className='font-semibold leading-tight transition-colors group-hover:text-primary'>\n {t.title}\n </h3>\n {t.excerpt && (\n <p className='line-clamp-2 text-sm text-muted-foreground'>{t.excerpt}</p>\n )}\n </div>\n </a>\n </li>\n ))}\n </ul>\n </section>\n )}\n </article>\n )\n}\n","import { cn } from '@reblu/site-ui'\n\n/**\n * `ProfileCard` — presentational professional/team-member card (the clinic\n * \"doctor card\" from the mockups). There is no SITE API contract for staff yet,\n * so the prop shape is local and intentionally minimal. Token-driven, RSC-safe.\n */\nexport interface ProfileCardProps {\n name: string\n role?: string\n imageUrl?: string\n /** Short list of specialties / tags shown as chips. */\n specialties?: string[]\n bio?: string\n /** Link target for the full profile. Omit to render non-linking. */\n href?: string\n className?: string\n}\n\n/** Up to two initials from the name, for the avatar fallback. */\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase() ?? '')\n .join('')\n}\n\nexport function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, className }: ProfileCardProps) {\n const NameTag = href ? 'a' : 'span'\n\n return (\n <article\n className={cn(\n 'flex flex-col items-center gap-3 rounded-lg border bg-card p-6 text-center',\n className,\n )}\n data-slot='profile-card'\n >\n <div className='relative h-24 w-24 overflow-hidden rounded-full bg-muted'>\n {imageUrl ? (\n <img src={imageUrl} alt={name} loading='lazy' className='h-full w-full object-cover' />\n ) : (\n <span className='flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground' aria-hidden='true'>\n {initials(name)}\n </span>\n )}\n </div>\n\n <div className='space-y-1'>\n <h3 className='text-lg font-semibold leading-tight'>\n <NameTag\n {...(href ? { href, className: 'transition-colors hover:text-primary' } : {})}\n >\n {name}\n </NameTag>\n </h3>\n {role && <p className='text-sm text-muted-foreground'>{role}</p>}\n </div>\n\n {specialties.length > 0 && (\n <ul className='flex flex-wrap justify-center gap-1.5 p-0'>\n {specialties.map((s) => (\n <li\n key={s}\n className='inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground'\n >\n {s}\n </li>\n ))}\n </ul>\n )}\n\n {bio && <p className='text-sm text-muted-foreground'>{bio}</p>}\n </article>\n )\n}\n","import { cn } from '@reblu/site-ui'\nimport type { ShopProductListItem } from '@reblu/site-contracts'\n\nimport { formatPrice } from '../lib/format-price'\n\n/**\n * `ProductCard` — presentational shop product tile over `ShopProductListItem`.\n *\n * Token-driven, RSC-safe (no hooks). Prices arrive as integer cents and are\n * formatted with {@link formatPrice}. A `comparePrice` higher than `price` renders\n * as a struck-through \"was\" amount.\n */\nexport interface ProductCardProps {\n product: ShopProductListItem\n /** Link target for the product (e.g. `/shop/{slug}`). Omit to render non-linking. */\n href?: string\n currencyCode?: string\n locale?: string\n className?: string\n}\n\nexport function ProductCard({ product, href, currencyCode = 'EUR', locale, className }: ProductCardProps) {\n const image = product.images.find((i) => i.isPrimary) ?? product.images[0]\n const hasDiscount = product.comparePrice != null && product.comparePrice > product.price\n\n return (\n <article\n className={cn(\n 'group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg',\n className,\n )}\n data-slot='product-card'\n >\n <div className='relative aspect-square overflow-hidden bg-muted'>\n {image ? (\n <img\n src={image.url}\n alt={image.alt ?? product.name}\n loading='lazy'\n className='h-full w-full object-cover transition-transform group-hover:scale-105'\n />\n ) : (\n <div className='flex h-full items-center justify-center text-4xl text-muted-foreground/30' aria-hidden='true'>\n 🛍️\n </div>\n )}\n </div>\n\n <div className='flex flex-1 flex-col gap-2 p-4'>\n {product.category && (\n <span className='inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground'>\n {product.category.name}\n </span>\n )}\n\n <h3 className='text-base font-semibold leading-tight'>\n {href ? (\n <a href={href} className='transition-colors hover:text-primary'>\n {product.name}\n </a>\n ) : (\n product.name\n )}\n </h3>\n\n {product.shortDescription && (\n <p className='line-clamp-2 text-sm text-muted-foreground'>{product.shortDescription}</p>\n )}\n\n <div className='mt-auto flex items-baseline gap-2 pt-2'>\n <span className='text-lg font-bold text-foreground'>\n {formatPrice(product.price, currencyCode, locale)}\n </span>\n {hasDiscount && (\n <span className='text-sm text-muted-foreground line-through'>\n {formatPrice(product.comparePrice as number, currencyCode, locale)}\n </span>\n )}\n </div>\n </div>\n </article>\n )\n}\n"],"mappings":"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ACA,QAAQ;AACd;;;ACVO,IAAM,0BAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC3GO,IAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,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","names":["key","properties","_","_","_","html","svg","parse","stringify","h","properties","children","key","keys","value","parse","html","svg","point","svg","html","properties","x","position","location","key","opening","closing","point","$","_","index","key","$","_","key","point","position","aria","own","element","patch","_","children","properties","key","ok","position","own","key","one","all","next","next","own","next","next","comment","doctype","increment","siblings","next","own","html","_","next","body","html","tbody","head","child","element","svg","properties","key","x","y","stringify","text","_","text","root","comment","doctype","element","root","text","emptyChildren","one","all","svg","html","children","_getDefaults","_defaults","changeDefaults","newDefaults","noopTest","edit","regex","opt","source","obj","name","val","valSource","other","supportsLookbehind","bull","indent","newline","blockCode","fences","hr","heading","bullet","lheadingCore","lheading","lheadingGfm","_paragraph","blockText","_blockLabel","def","list","_tag","_comment","html","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","escape","inlineCode","br","inlineText","_punctuation","_punctuationOrSpace","_notPunctuationOrSpace","punctuation","_punctuationGfmStrongEm","_punctuationOrSpaceGfmStrongEm","_notPunctuationOrSpaceGfmStrongEm","blockSkip","emStrongLDelimCore","emStrongLDelim","emStrongLDelimGfm","emStrongRDelimAstCore","emStrongRDelimAst","emStrongRDelimAstGfm","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","tag","_inlineLabel","link","reflink","nolink","reflinkSearch","_caseInsensitiveProtocol","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","escapeReplacements","getEscapeReplacement","ch","encode","cleanUrl","href","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","i","rtrim","c","invert","l","suffLen","currChar","findClosingBracket","b","level","outputLink","cap","raw","lexer","rules","title","text","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","_Tokenizer","options","src","trimmed","lines","tokens","inBlockquote","currentLines","currentRaw","currentText","top","lastToken","oldToken","newText","newToken","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","line","t","nextLine","blankLine","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","rawLine","nextLineWithoutTabs","istask","ischecked","lastItem","spacers","hasMultipleLineBreaks","headers","aligns","rows","item","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","_Lexer","__Lexer","next","lastParagraphClipped","extTokenizer","cutSrc","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","code","depth","ordered","start","body","j","type","startAttr","itemBody","checkbox","checked","header","k","content","cleanHref","out","_TextRenderer","_Parser","__Parser","anyToken","genericToken","ret","textToken","renderer","_Hooks","markdown","Marked","args","callback","values","tableToken","listToken","childTokens","extensions","pack","opts","ext","prevRenderer","extLevel","prop","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","arg","walkTokens","packWalktokens","blockType","origOpt","throwError","processedSrc","processedTokens","e","silent","async","msg","markedInstance","marked","setOptions","use","parseInline","parser","_Parser","lexer","_Lexer","CODE_POINTS","ERR","TokenType","_a","CharCodes","BinTrieFlags","EntityDecoderState","DecodingMode","_a","NS","ATTRS","DOCUMENT_MODE","TAG_NAMES","TAG_ID","_a","$","State","isAsciiAlphaNumeric","_a","location","element","EntryType","element","entry","text","j","element","location","InsertionMode","html","_a","element","location","siblings","p","html","ok","checks","index","all","key","d","empty","is","visit","children","html","children","html","parse","import_site_ui","import_site_ui","import_jsx_runtime","body","b","import_jsx_runtime","import_site_ui","import_jsx_runtime","import_site_ui","import_jsx_runtime","s","import_site_ui","import_jsx_runtime"]}
|