{"version":3,"sources":["webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","webpack:///./node_modules/micromark-extension-gfm-autolink-literal/syntax.js","webpack:///./node_modules/micromark/dist/constant/splice.js","webpack:///./node_modules/micromark/dist/character/markdown-space.js","webpack:///./node_modules/micromark-extension-gfm-autolink-literal/index.js","webpack:///./node_modules/reactstrap/es/Table.js","webpack:///./src/components/Blog/BlogSEO/index.js","webpack:///../node_modules/unist-util-stringify-position/lib/index.js","webpack:///../node_modules/vfile-message/lib/index.js","webpack:///../node_modules/vfile/lib/minpath.browser.js","webpack:///../node_modules/vfile/lib/minproc.browser.js","webpack:///../node_modules/vfile/lib/minurl.shared.js","webpack:///../node_modules/vfile/lib/minurl.browser.js","webpack:///../node_modules/vfile/lib/index.js","webpack:///../node_modules/bail/index.js","webpack:///../node_modules/unified/node_modules/is-plain-obj/index.js","webpack:///../node_modules/trough/lib/index.js","webpack:///../node_modules/unified/lib/index.js","webpack:///../node_modules/mdast-util-to-string/lib/index.js","webpack:///../node_modules/micromark-util-chunked/index.js","webpack:///../node_modules/micromark-util-combine-extensions/index.js","webpack:///../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","webpack:///../node_modules/micromark-util-character/index.js","webpack:///../node_modules/micromark-factory-space/index.js","webpack:///../node_modules/micromark/lib/initialize/content.js","webpack:///../node_modules/micromark/lib/initialize/document.js","webpack:///../node_modules/micromark-core-commonmark/lib/blank-line.js","webpack:///../node_modules/micromark-util-subtokenize/index.js","webpack:///../node_modules/micromark-core-commonmark/lib/content.js","webpack:///../node_modules/micromark/lib/initialize/flow.js","webpack:///../node_modules/micromark/lib/initialize/text.js","webpack:///../node_modules/micromark-util-resolve-all/index.js","webpack:///../node_modules/micromark/lib/create-tokenizer.js","webpack:///../node_modules/micromark-core-commonmark/lib/thematic-break.js","webpack:///../node_modules/micromark-core-commonmark/lib/list.js","webpack:///../node_modules/micromark-core-commonmark/lib/block-quote.js","webpack:///../node_modules/micromark-factory-destination/index.js","webpack:///../node_modules/micromark-factory-label/index.js","webpack:///../node_modules/micromark-factory-title/index.js","webpack:///../node_modules/micromark-factory-whitespace/index.js","webpack:///../node_modules/micromark-util-normalize-identifier/index.js","webpack:///../node_modules/micromark-core-commonmark/lib/definition.js","webpack:///../node_modules/micromark-core-commonmark/lib/code-indented.js","webpack:///../node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack:///../node_modules/micromark-util-html-tag-name/index.js","webpack:///../node_modules/micromark-core-commonmark/lib/html-flow.js","webpack:///../node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack:///../node_modules/decode-named-character-reference/node_modules/character-entities/index.js","webpack:///../node_modules/decode-named-character-reference/index.js","webpack:///../node_modules/micromark-core-commonmark/lib/character-reference.js","webpack:///../node_modules/micromark-core-commonmark/lib/character-escape.js","webpack:///../node_modules/micromark-core-commonmark/lib/line-ending.js","webpack:///../node_modules/micromark-core-commonmark/lib/label-end.js","webpack:///../node_modules/micromark-util-classify-character/index.js","webpack:///../node_modules/micromark-core-commonmark/lib/attention.js","webpack:///../node_modules/micromark/lib/constructs.js","webpack:///../node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack:///../node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack:///../node_modules/micromark-core-commonmark/lib/autolink.js","webpack:///../node_modules/micromark-core-commonmark/lib/html-text.js","webpack:///../node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack:///../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack:///../node_modules/micromark-core-commonmark/lib/code-text.js","webpack:///../node_modules/micromark/lib/parse.js","webpack:///../node_modules/micromark/lib/preprocess.js","webpack:///../node_modules/micromark-util-decode-numeric-character-reference/index.js","webpack:///../node_modules/micromark-util-decode-string/index.js","webpack:///../node_modules/mdast-util-from-markdown/lib/index.js","webpack:///../node_modules/micromark/lib/postprocess.js","webpack:///../node_modules/remark-parse/lib/index.js","webpack:///../node_modules/micromark-util-sanitize-uri/index.js","webpack:///../node_modules/unist-util-is/lib/index.js","webpack:///../node_modules/unist-util-visit-parents/lib/index.js","webpack:///../node_modules/unist-util-visit/lib/index.js","webpack:///../node_modules/unist-util-position/lib/index.js","webpack:///../node_modules/mdast-util-definitions/lib/index.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","webpack:///../node_modules/mdast-util-to-hast/lib/revert.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","webpack:///../node_modules/trim-lines/index.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/index.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/break.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/code.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/delete.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/footnote.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/heading.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/html.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/image.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/link.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/list.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/root.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/strong.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/table.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/text.js","webpack:///../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","webpack:///../node_modules/mdast-util-to-hast/lib/state.js","webpack:///../node_modules/unist-util-generated/lib/index.js","webpack:///../node_modules/mdast-util-to-hast/lib/index.js","webpack:///../node_modules/mdast-util-to-hast/lib/footer.js","webpack:///../node_modules/remark-rehype/lib/index.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/schema.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/merge.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/normalize.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/info.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/types.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/defined-info.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/create.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/xlink.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/xml.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/case-sensitive-transform.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/util/case-insensitive-transform.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/xmlns.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/aria.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/html.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/svg.js","webpack:///../node_modules/react-markdown/node_modules/property-information/index.js","webpack:///../node_modules/react-markdown/lib/rehype-filter.js","webpack:///../node_modules/hast-util-whitespace/index.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/find.js","webpack:///../node_modules/react-markdown/node_modules/property-information/lib/hast-to-react.js","webpack:///../node_modules/style-to-object/index.mjs","webpack:///../node_modules/react-markdown/lib/uri-transformer.js","webpack:///../node_modules/react-markdown/lib/ast-to-react.js","webpack:///../node_modules/react-markdown/node_modules/comma-separated-tokens/index.js","webpack:///../node_modules/react-markdown/node_modules/space-separated-tokens/index.js","webpack:///../node_modules/react-markdown/lib/react-markdown.js","webpack:///./src/components/Newsletter/index.js","webpack:///./src/components/Blog/BlogPostLayout/index.js","webpack:///./node_modules/markdown-table/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/pattern-compile.js","webpack:///./node_modules/micromark/dist/character/ascii-control.js","webpack:///./node_modules/mdast-util-find-and-replace/index.js","webpack:///./node_modules/unist-util-visit-parents/color.browser.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/container-flow.js","webpack:///./node_modules/micromark/dist/character/unicode-punctuation.js","webpack:///./node_modules/micromark-extension-gfm-task-list-item/syntax.js","webpack:///./node_modules/mdast-util-gfm-table/from-markdown.js","webpack:///./node_modules/micromark/dist/character/markdown-line-ending.js","webpack:///./node_modules/micromark/dist/constant/from-char-code.js","webpack:///../node_modules/is-buffer/index.js","webpack:///./node_modules/ccount/index.js","webpack:///./node_modules/micromark/dist/util/resolve-all.js","webpack:///./node_modules/mdast-util-gfm-strikethrough/to-markdown.js","webpack:///../node_modules/style-to-object/index.js","webpack:///./node_modules/micromark/dist/constant/unicode-punctuation-regex.js","webpack:///./node_modules/micromark/dist/constant/assign.js","webpack:///../node_modules/react-markdown/node_modules/react-is/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","webpack:///./node_modules/micromark/dist/character/ascii-alphanumeric.js","webpack:///./node_modules/micromark/dist/util/prefix-size.js","webpack:///./node_modules/micromark/dist/character/markdown-line-ending-or-space.js","webpack:///./node_modules/repeat-string/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/list-item.js","webpack:///./node_modules/micromark/dist/util/shallow.js","webpack:///./node_modules/micromark/dist/constant/has-own-property.js","webpack:///./node_modules/micromark-extension-gfm-table/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/configure.js","webpack:///./node_modules/micromark/dist/util/chunked-splice.js","webpack:///./node_modules/micromark-extension-gfm/syntax.js","webpack:///./node_modules/unist-util-is/convert.js","webpack:///../node_modules/react-markdown/node_modules/react-is/cjs/react-is.production.min.js","webpack:///./node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/indent-lines.js","webpack:///./node_modules/mdast-util-gfm-autolink-literal/from-markdown.js","webpack:///./node_modules/micromark-extension-gfm-strikethrough/index.js","webpack:///./node_modules/micromark/dist/util/classify-character.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","webpack:///./node_modules/micromark/dist/character/ascii-alpha.js","webpack:///../node_modules/inline-style-parser/index.js","webpack:///./node_modules/micromark/dist/util/size-chunks.js","webpack:///./node_modules/mdast-util-gfm/from-markdown.js","webpack:///./node_modules/mdast-util-gfm-strikethrough/from-markdown.js","webpack:///./node_modules/mdast-util-gfm-autolink-literal/to-markdown.js","webpack:///./node_modules/micromark/dist/util/combine-extensions.js","webpack:///./node_modules/micromark/dist/util/miniflat.js","webpack:///./node_modules/micromark-extension-gfm/index.js","webpack:///./node_modules/mdast-util-gfm-task-list-item/from-markdown.js","webpack:///./node_modules/micromark-extension-gfm-table/syntax.js","webpack:///./node_modules/micromark/dist/util/regex-check.js","webpack:///../node_modules/extend/index.js","webpack:///./node_modules/micromark/dist/character/unicode-whitespace.js","webpack:///./node_modules/micromark-extension-gfm-task-list-item/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/container-phrasing.js","webpack:///./node_modules/unist-util-visit-parents/index.js","webpack:///./node_modules/mdast-util-gfm-task-list-item/to-markdown.js","webpack:///./node_modules/remark-gfm/index.js","webpack:///./node_modules/mdast-util-gfm-table/to-markdown.js","webpack:///./node_modules/micromark/dist/tokenize/factory-space.js","webpack:///./node_modules/mdast-util-gfm/to-markdown.js"],"names":["module","exports","context","marker","options","bullet","Error","asciiAlpha","asciiAlphanumeric","asciiControl","markdownLineEnding","unicodePunctuation","unicodeWhitespace","www","tokenize","effects","ok","nok","code","consume","w2","w3","dot","after","partial","domain","hasUnderscoreInLastSegment","hasUnderscoreInLastLastSegment","check","namedCharacterReference","done","punctuationContinuation","punctuation","undefined","path","balance","inPath","continuedPunctuation","parenAtPathEnd","pathEnd","trailingPunctuation","inside","wwwAutolink","self","this","previousWww","previous","events","enter","attempt","exit","httpAutolink","previousHttp","t1","t2","p","s","colon","slash1","slash2","emailAutolink","hasDot","gfmAtext","previousEmail","atext","label","dotContinuation","dashOrUnderscoreContinuation","afterDashOrUnderscore","text","index","length","type","_balanced","splice","_excluded","props","className","cssModule","size","bordered","borderless","striped","dark","hover","responsive","Tag","tag","ResponsiveTag","responsiveTag","innerRef","attributes","classes","table","createElement","ref","responsiveClassName","defaultProps","BlogSEO","url","title","description","socialImageURL","date","author","schemaMarkup","Helmet","config","siteTitle","rel","href","name","content","property","JSON","stringify","stringifyPosition","value","position","point","line","column","pos","start","end","reason","place","origin","parts","super","indexOf","slice","message","stack","fatal","source","ruleId","file","actual","expected","note","prototype","basename","ext","TypeError","assertPath","seenNonSlash","charCodeAt","firstNonSlashEnd","extIndex","dirname","unmatchedSlash","extname","startPart","startDot","preDotState","join","joined","_len","arguments","segments","Array","_key","normalize","sep","absolute","allowAboveRoot","lastSlashIndex","result","lastSegmentLength","lastSlash","dots","lastIndexOf","normalizeString","proc","cwd","isUrl","fileUrlOrPath","urlToPath","URL","error","protocol","hostname","pathname","third","decodeURIComponent","getPathFromURLPosix","order","data","messages","history","stored","map","prop","includes","assertNonEmpty","push","assertPart","stem","encoding","toString","part","bail","isPlainObject","Object","getPrototypeOf","Symbol","toStringTag","iterator","wrap","middleware","callback","called","_len3","parameters","_key3","fnExpectsCallback","apply","exception","then","_len4","output","_key4","unified","base","transformers","fns","pipeline","run","values","middlewareIndex","pop","next","fn","_len2","_key2","use","middelware","trough","attachers","frozen","namespace","freezeIndex","processor","key","assertUnfrozen","own","call","Parser","Compiler","freeze","attacher","transformer","Number","POSITIVE_INFINITY","settings","addPlugin","isArray","addList","addPreset","assign","add","plugin","plugins","entry","parse","doc","vfile","assertParser","newable","String","node","assertCompiler","assertNode","compile","Promise","executor","resolve","reject","tree","runSync","complete","assertDone","process","processSync","destination","hasOwnProperty","keys","asyncName","Boolean","looksLikeAVFile","emptyOptions","one","includeImageAlt","includeHtml","alt","children","list","remove","items","chunkStart","from","unshift","syntaxExtension","all","extension","hook","left","right","existing","before","regexCheck","asciiAtext","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEndingOrSpace","markdownSpace","regex","test","fromCharCode","factorySpace","max","limit","prefix","contentStart","parser","constructs","contentInitial","lineStart","token","contentType","childFlow","childToken","lineStartOffset","continued","item","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","now","offset","containerContinue","flow","_tokenizer","flowContinue","writeToChild","eof","stream","sliceStream","defineSkip","write","seen","document","disable","null","blankLine","subtokenize","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","_isInFirstContentOfListItem","subcontent","_container","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","_gfmTasklistFirstContentOfListItem","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","tail","sliceSerialize","initial","flowInitial","afterConstruct","resolver","resolveAll","createResolver","initializeFactory","field","notText","atBreak","resolveAllLineSuffixes","extraResolver","chunks","tabs","bufferIndex","chunk","_index","_bufferIndex","createTokenizer","initialize","columnStart","resolveAllConstructs","consumed","accountForPotentialSkip","fields","constructFactory","construct","info","addResult","onsuccessfulcheck","expandTabs","atTab","serializeChunks","main","expectedCode","state","startIndex","startBufferIndex","endIndex","endBufferIndex","view","head","shift","sliceChunks","chunkIndex","go","_","restore","onreturn","returnState","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","def","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","create","resolveTo","sequence","initialSize","kind","atMarker","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","furtherBlankLines","notInCurrentItem","indentConstruct","open","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","normalizeIdentifier","replace","toLowerCase","toUpperCase","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","defined","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","setextUnderline","paragraph","definition","heading","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","sequenceOpen","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","characterEntities","AElig","AMP","Aacute","Abreve","Acirc","Acy","Afr","Agrave","Alpha","Amacr","And","Aogon","Aopf","ApplyFunction","Aring","Ascr","Assign","Atilde","Auml","Backslash","Barv","Barwed","Bcy","Because","Bernoullis","Beta","Bfr","Bopf","Breve","Bscr","Bumpeq","CHcy","COPY","Cacute","Cap","CapitalDifferentialD","Cayleys","Ccaron","Ccedil","Ccirc","Cconint","Cdot","Cedilla","CenterDot","Cfr","Chi","CircleDot","CircleMinus","CirclePlus","CircleTimes","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","Colon","Colone","Congruent","Conint","ContourIntegral","Copf","Coproduct","CounterClockwiseContourIntegral","Cross","Cscr","Cup","CupCap","DD","DDotrahd","DJcy","DScy","DZcy","Dagger","Darr","Dashv","Dcaron","Dcy","Del","Delta","Dfr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","Diamond","DifferentialD","Dopf","Dot","DotDot","DotEqual","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","DownArrowBar","DownArrowUpArrow","DownBreve","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","Downarrow","Dscr","Dstrok","ENG","ETH","Eacute","Ecaron","Ecirc","Ecy","Edot","Efr","Egrave","Element","Emacr","EmptySmallSquare","EmptyVerySmallSquare","Eogon","Eopf","Epsilon","Equal","EqualTilde","Equilibrium","Escr","Esim","Eta","Euml","Exists","ExponentialE","Fcy","Ffr","FilledSmallSquare","FilledVerySmallSquare","Fopf","ForAll","Fouriertrf","Fscr","GJcy","GT","Gamma","Gammad","Gbreve","Gcedil","Gcirc","Gcy","Gdot","Gfr","Gg","Gopf","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","Gt","HARDcy","Hacek","Hat","Hcirc","Hfr","HilbertSpace","Hopf","HorizontalLine","Hscr","Hstrok","HumpDownHump","HumpEqual","IEcy","IJlig","IOcy","Iacute","Icirc","Icy","Idot","Ifr","Igrave","Im","Imacr","ImaginaryI","Implies","Int","Integral","Intersection","InvisibleComma","InvisibleTimes","Iogon","Iopf","Iota","Iscr","Itilde","Iukcy","Iuml","Jcirc","Jcy","Jfr","Jopf","Jscr","Jsercy","Jukcy","KHcy","KJcy","Kappa","Kcedil","Kcy","Kfr","Kopf","Kscr","LJcy","LT","Lacute","Lambda","Lang","Laplacetrf","Larr","Lcaron","Lcedil","Lcy","LeftAngleBracket","LeftArrow","LeftArrowBar","LeftArrowRightArrow","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","LeftRightArrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","Leftarrow","Leftrightarrow","LessEqualGreater","LessFullEqual","LessGreater","LessLess","LessSlantEqual","LessTilde","Lfr","Ll","Lleftarrow","Lmidot","LongLeftArrow","LongLeftRightArrow","LongRightArrow","Longleftarrow","Longleftrightarrow","Longrightarrow","Lopf","LowerLeftArrow","LowerRightArrow","Lscr","Lsh","Lstrok","Lt","Map","Mcy","MediumSpace","Mellintrf","Mfr","MinusPlus","Mopf","Mscr","Mu","NJcy","Nacute","Ncaron","Ncedil","Ncy","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","NestedGreaterGreater","NestedLessLess","NewLine","Nfr","NoBreak","NonBreakingSpace","Nopf","Not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","Nscr","Ntilde","Nu","OElig","Oacute","Ocirc","Ocy","Odblac","Ofr","Ograve","Omacr","Omega","Omicron","Oopf","OpenCurlyDoubleQuote","OpenCurlyQuote","Or","Oscr","Oslash","Otilde","Otimes","Ouml","OverBar","OverBrace","OverBracket","OverParenthesis","PartialD","Pcy","Pfr","Phi","Pi","PlusMinus","Poincareplane","Popf","Pr","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","Prime","Product","Proportion","Proportional","Pscr","Psi","QUOT","Qfr","Qopf","Qscr","RBarr","REG","Racute","Rang","Rarr","Rarrtl","Rcaron","Rcedil","Rcy","Re","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","Rfr","Rho","RightAngleBracket","RightArrow","RightArrowBar","RightArrowLeftArrow","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","RightTee","RightTeeArrow","RightTeeVector","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","Rightarrow","Ropf","RoundImplies","Rrightarrow","Rscr","Rsh","RuleDelayed","SHCHcy","SHcy","SOFTcy","Sacute","Sc","Scaron","Scedil","Scirc","Scy","Sfr","ShortDownArrow","ShortLeftArrow","ShortRightArrow","ShortUpArrow","Sigma","SmallCircle","Sopf","Sqrt","Square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","Sscr","Star","Sub","Subset","SubsetEqual","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","SuchThat","Sum","Sup","Superset","SupersetEqual","Supset","THORN","TRADE","TSHcy","TScy","Tab","Tau","Tcaron","Tcedil","Tcy","Tfr","Therefore","Theta","ThickSpace","ThinSpace","Tilde","TildeEqual","TildeFullEqual","TildeTilde","Topf","TripleDot","Tscr","Tstrok","Uacute","Uarr","Uarrocir","Ubrcy","Ubreve","Ucirc","Ucy","Udblac","Ufr","Ugrave","Umacr","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","Uopf","UpArrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","UpEquilibrium","UpTee","UpTeeArrow","Uparrow","Updownarrow","UpperLeftArrow","UpperRightArrow","Upsi","Upsilon","Uring","Uscr","Utilde","Uuml","VDash","Vbar","Vcy","Vdash","Vdashl","Vee","Verbar","Vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","Vopf","Vscr","Vvdash","Wcirc","Wedge","Wfr","Wopf","Wscr","Xfr","Xi","Xopf","Xscr","YAcy","YIcy","YUcy","Yacute","Ycirc","Ycy","Yfr","Yopf","Yscr","Yuml","ZHcy","Zacute","Zcaron","Zcy","Zdot","ZeroWidthSpace","Zeta","Zfr","Zopf","Zscr","aacute","abreve","ac","acE","acd","acirc","acute","acy","aelig","af","afr","agrave","alefsym","aleph","alpha","amacr","amalg","amp","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","aogon","aopf","ap","apE","apacir","ape","apid","apos","approx","approxeq","aring","ascr","ast","asymp","asympeq","atilde","auml","awconint","awint","bNot","backcong","backepsilon","backprime","backsim","backsimeq","barvee","barwed","barwedge","bbrk","bbrktbrk","bcong","bcy","bdquo","becaus","because","bemptyv","bepsi","bernou","beta","beth","between","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bnot","bopf","bot","bottom","bowtie","boxDL","boxDR","boxDl","boxDr","boxH","boxHD","boxHU","boxHd","boxHu","boxUL","boxUR","boxUl","boxUr","boxV","boxVH","boxVL","boxVR","boxVh","boxVl","boxVr","boxbox","boxdL","boxdR","boxdl","boxdr","boxh","boxhD","boxhU","boxhd","boxhu","boxminus","boxplus","boxtimes","boxuL","boxuR","boxul","boxur","boxv","boxvH","boxvL","boxvR","boxvh","boxvl","boxvr","bprime","breve","brvbar","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bump","bumpE","bumpe","bumpeq","cacute","cap","capand","capbrcup","capcap","capcup","capdot","caps","caret","caron","ccaps","ccaron","ccedil","ccirc","ccups","ccupssm","cdot","cedil","cemptyv","cent","centerdot","cfr","chcy","checkmark","chi","cir","cirE","circ","circeq","circlearrowleft","circlearrowright","circledR","circledS","circledast","circledcirc","circleddash","cire","cirfnint","cirmid","cirscir","clubs","clubsuit","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","conint","copf","coprod","copy","copysr","crarr","cross","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","cup","cupbrcap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","dArr","dHar","dagger","daleth","darr","dash","dashv","dbkarow","dblac","dcaron","dcy","dd","ddagger","ddarr","ddotseq","deg","delta","demptyv","dfisht","dfr","dharl","dharr","diam","diamond","diamondsuit","diams","die","digamma","disin","div","divide","divideontimes","divonx","djcy","dlcorn","dlcrop","dollar","dopf","doteq","doteqdot","dotminus","dotplus","dotsquare","doublebarwedge","downarrow","downdownarrows","downharpoonleft","downharpoonright","drbkarow","drcorn","drcrop","dscr","dscy","dsol","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","dzcy","dzigrarr","eDDot","eDot","eacute","easter","ecaron","ecir","ecirc","ecolon","ecy","edot","ee","efDot","efr","eg","egrave","egs","egsdot","el","elinters","ell","els","elsdot","emacr","empty","emptyset","emptyv","emsp13","emsp14","emsp","eng","ensp","eogon","eopf","epar","eparsl","eplus","epsi","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","equals","equest","equiv","equivDD","eqvparsl","erDot","erarr","escr","esdot","esim","eta","eth","euml","euro","excl","exist","expectation","exponentiale","fallingdotseq","fcy","female","ffilig","fflig","ffllig","ffr","filig","fjlig","flat","fllig","fltns","fnof","fopf","forall","fork","forkv","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","fscr","gE","gEl","gacute","gamma","gammad","gap","gbreve","gcirc","gcy","gdot","ge","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","gfr","gg","ggg","gimel","gjcy","gl","glE","gla","glj","gnE","gnap","gnapprox","gne","gneq","gneqq","gnsim","gopf","grave","gscr","gsim","gsime","gsiml","gt","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","hArr","hairsp","half","hamilt","hardcy","harr","harrcir","harrw","hbar","hcirc","hearts","heartsuit","hellip","hercon","hfr","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","hopf","horbar","hscr","hslash","hstrok","hybull","hyphen","iacute","ic","icirc","icy","iecy","iexcl","iff","ifr","igrave","ii","iiiint","iiint","iinfin","iiota","ijlig","imacr","image","imagline","imagpart","imath","imof","imped","in","incare","infin","infintie","inodot","int","intcal","integers","intercal","intlarhk","intprod","iocy","iogon","iopf","iota","iprod","iquest","iscr","isin","isinE","isindot","isins","isinsv","isinv","it","itilde","iukcy","iuml","jcirc","jcy","jfr","jmath","jopf","jscr","jsercy","jukcy","kappa","kappav","kcedil","kcy","kfr","kgreen","khcy","kjcy","kopf","kscr","lAarr","lArr","lAtail","lBarr","lE","lEg","lHar","lacute","laemptyv","lagran","lambda","lang","langd","langle","lap","laquo","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","latail","late","lates","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","lcaron","lcedil","lceil","lcub","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","le","leftarrow","leftarrowtail","leftharpoondown","leftharpoonup","leftleftarrows","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","leftthreetimes","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","lessgtr","lesssim","lfisht","lfloor","lfr","lg","lgE","lhard","lharu","lharul","lhblk","ljcy","ll","llarr","llcorner","llhard","lltri","lmidot","lmoust","lmoustache","lnE","lnap","lnapprox","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","longleftarrow","longleftrightarrow","longmapsto","longrightarrow","looparrowleft","looparrowright","lopar","lopf","loplus","lotimes","lowast","lowbar","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","lscr","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","lstrok","lt","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltrPar","ltri","ltrie","ltrif","lurdshar","luruhar","lvertneqq","lvnE","mDDot","macr","male","malt","maltese","mapsto","mapstodown","mapstoleft","mapstoup","mcomma","mcy","mdash","measuredangle","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","mlcp","mldr","mnplus","models","mopf","mp","mscr","mstpos","mu","multimap","mumap","nGg","nGt","nGtv","nLeftarrow","nLeftrightarrow","nLl","nLt","nLtv","nRightarrow","nVDash","nVdash","nabla","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","ncaron","ncedil","ncong","ncongdot","ncup","ncy","ndash","ne","neArr","nearhk","nearr","nearrow","nedot","nequiv","nesear","nesim","nexist","nexists","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","ngsim","ngt","ngtr","nhArr","nharr","nhpar","ni","nis","nisd","niv","njcy","nlArr","nlE","nlarr","nldr","nle","nleftarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nlsim","nlt","nltri","nltrie","nmid","nopf","not","notin","notinE","notindot","notinva","notinvb","notinvc","notni","notniva","notnivb","notnivc","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","nu","num","numero","numsp","nvDash","nvHarr","nvap","nvdash","nvge","nvgt","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwArr","nwarhk","nwarr","nwarrow","nwnear","oS","oacute","oast","ocir","ocirc","ocy","odash","odblac","odiv","odot","odsold","oelig","ofcir","ofr","ogon","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","omacr","omega","omicron","omid","ominus","oopf","opar","operp","oplus","or","orarr","ord","orderof","ordf","ordm","origof","oror","orslope","orv","oscr","oslash","osol","otilde","otimes","otimesas","ouml","ovbar","par","para","parallel","parsim","parsl","pcy","percnt","period","permil","perp","pertenk","pfr","phi","phiv","phmmat","phone","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","plusmn","plussim","plustwo","pm","pointint","popf","pound","pr","prE","prap","prcue","pre","prec","precapprox","preccurlyeq","preceq","precnapprox","precneqq","precnsim","precsim","prime","primes","prnE","prnap","prnsim","prod","profalar","profline","profsurf","propto","prsim","prurel","pscr","psi","puncsp","qfr","qint","qopf","qprime","qscr","quaternions","quatint","quest","questeq","quot","rAarr","rArr","rAtail","rBarr","rHar","race","racute","radic","raemptyv","rang","rangd","range","rangle","raquo","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","rarrtl","rarrw","ratail","ratio","rationals","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","rcaron","rcedil","rceil","rcub","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","real","realine","realpart","reals","rect","reg","rfisht","rfloor","rfr","rhard","rharu","rharul","rho","rhov","rightarrow","rightarrowtail","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","rightthreetimes","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","ropf","roplus","rotimes","rpar","rpargt","rppolint","rrarr","rsaquo","rscr","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","ruluhar","rx","sacute","sbquo","sc","scE","scap","scaron","sccue","sce","scedil","scirc","scnE","scnap","scnsim","scpolint","scsim","scy","sdot","sdotb","sdote","seArr","searhk","searr","searrow","sect","semi","seswar","setminus","setmn","sext","sfr","sfrown","sharp","shchcy","shcy","shortmid","shortparallel","shy","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","softcy","sol","solb","solbar","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","square","squarf","squf","srarr","sscr","ssetmn","ssmile","sstarf","star","starf","straightepsilon","straightphi","strns","sub","subE","subdot","sube","subedot","submult","subnE","subne","subplus","subrarr","subset","subseteq","subseteqq","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","succeq","succnapprox","succneqq","succnsim","succsim","sum","sung","sup1","sup2","sup3","sup","supE","supdot","supdsub","supe","supedot","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swArr","swarhk","swarr","swarrow","swnwar","szlig","target","tau","tbrk","tcaron","tcedil","tcy","tdot","telrec","tfr","there4","therefore","theta","thetasym","thetav","thickapprox","thicksim","thinsp","thkap","thksim","thorn","tilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","topf","topfork","tosa","tprime","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","triplus","trisb","tritime","trpezium","tscr","tscy","tshcy","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","uArr","uHar","uacute","uarr","ubrcy","ubreve","ucirc","ucy","udarr","udblac","udhar","ufisht","ufr","ugrave","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","umacr","uml","uogon","uopf","uparrow","updownarrow","upharpoonleft","upharpoonright","uplus","upsi","upsih","upsilon","upuparrows","urcorn","urcorner","urcrop","uring","urtri","uscr","utdot","utilde","utri","utrif","uuarr","uuml","uwangle","vArr","vBar","vBarv","vDash","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","vcy","vdash","vee","veebar","veeeq","vellip","verbar","vert","vfr","vltri","vnsub","vnsup","vopf","vprop","vrtri","vscr","vsubnE","vsubne","vsupnE","vsupne","vzigzag","wcirc","wedbar","wedge","wedgeq","weierp","wfr","wopf","wp","wr","wreath","wscr","xcap","xcirc","xcup","xdtri","xfr","xhArr","xharr","xi","xlArr","xlarr","xmap","xnis","xodot","xopf","xoplus","xotime","xrArr","xrarr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","yacute","yacy","ycirc","ycy","yen","yfr","yicy","yopf","yscr","yucy","yuml","zacute","zcaron","zcy","zdot","zeetrf","zeta","zfr","zhcy","zigrarr","zopf","zscr","zwj","zwnj","decodeNamedCharacterReference","characterReference","numeric","characterEscape","lineEnding","labelEnd","labelStart","_inactive","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","close","media","group","insideSpan","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","classifyCharacter","attention","attentionMarkers","_open","_close","openingSequence","closingSequence","nextEvents","movePoint","sequenceFurther","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","tailExitIndex","headEnterIndex","extensions","combineExtensions","string","search","decodeNumericCharacterReference","parseInt","characterEscapeOrReference","decode","$0","$1","$2","hex","fromMarkdown","transforms","canContainEols","autolink","opener","link","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","blockQuote","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeText","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreakEscape","hardBreak","hardBreakTrailing","html","htmlFlowData","htmlText","htmlTextData","listItem","spread","_spread","checked","listItemValue","getData","setData","listOrdered","listUnordered","reference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","thematicBreak","closer","atxHeadingSequence","depth","onexitdata","characterEscapeValue","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","resume","codeFencedFence","onexithardbreak","referenceType","fragment","labelText","ancestor","decodeString","resource","setextHeadingLineSequence","setextHeadingText","configure","combined","mdastExtensions","tokenStack","listStack","prepareList","handler","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","errorHandler","onExitError","ordered","compiler","postprocess","atCarriageReturn","match","endPosition","lastIndex","exec","Math","ceil","preprocess","d","remarkParse","normalizeUri","skip","encodeURIComponent","convert","castFactory","tests","checks","anyFactory","propsFactory","visitParents","visitor","reverse","is","step","factory","parents","defineProperty","visit","subresult","grandparents","toResult","concat","parent","pointStart","pointEnd","clean","footnoteReference","id","safeId","footnoteOrder","counter","footnoteCounts","reuseCounter","properties","clobberPrefix","dataFootnoteRef","ariaDescribedBy","patch","applyData","revert","subtype","suffix","contents","listItemLoose","trimLines","last","lines","trimLine","codePointAt","handlers","blockquote","break","delete","footnote","footnoteById","no","dangerous","imageReference","src","inlineCode","linkReference","results","loose","listLoose","disabled","child","root","rows","firstRow","tableContent","body","tableCell","tableRow","siblings","align","cellIndex","cells","cell","alignValue","toml","ignore","yaml","footnoteDefinition","createState","allowDangerousHtml","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","footnoteBackLabel","unknownHandler","passThrough","cache","augment","hName","hProperties","hChildren","ctx","to","defaultUnknownHandler","nodes","toHast","foot","listItems","referenceIndex","backReferences","backReference","dataFootnoteBackref","ariaLabel","tailTail","dataFootnotes","footer","bridge","mutate","normal","space","merge","definitions","Info","attribute","boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","powers","increment","mask","mark","transform","xlink","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlns","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","action","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","as","async","autoCapitalize","autoComplete","autoFocus","autoPlay","blocking","capture","charSet","cite","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","default","defer","dir","dirName","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","high","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","isMap","itemId","itemProp","itemRef","itemScope","itemType","language","loading","loop","low","manifest","maxLength","method","min","minLength","multiple","muted","nonce","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","optimum","pattern","ping","placeholder","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","readOnly","referrerPolicy","required","reversed","rowSpan","sandbox","scope","scoped","seamless","selected","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","shape","sizes","slot","span","spellCheck","srcDoc","srcLang","srcSet","style","tabIndex","translate","typeMustMatch","useMap","width","writingSuggestions","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","char","charOff","classId","clear","codeBase","codeType","color","compact","declare","face","frame","frameBorder","hSpace","leftMargin","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","object","profile","prompt","rev","rightMargin","rules","scheme","scrolling","standby","summary","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","security","unselectable","svg","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","transformOrigin","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","divisor","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","fill","filter","filterRes","filterUnits","focusable","focusHighlight","format","fr","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in2","intercept","k","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","opacity","operator","orient","orientation","overflow","overlay","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","r","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","restart","rotate","ry","scale","seed","side","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","rehypeFilter","allowedElements","disallowedElements","allowElement","parent_","unwrapDisallowed","whitespace","thing","valid","kebab","camelcase","charAt","hastToReact","protocols","uriTransformer","uri","trim","first","tableElements","Set","childrenToReact","childIndex","toReact","has","skipHtml","transformLinkUri","parentSchema","schema","addProperty","listDepth","component","components","basic","Fragment","isValidElementType","linkTarget","inline","level","transformImageUri","input","getInputElement","getElementsBeforeCount","textAlign","isHeader","sourcePos","rawSourcePos","sourcePosition","includeElementIndex","siblingCount","count","Type","rest","dashes","find","padRight","padLeft","v","styleReplacer","parseStyle","deprecated","renderers","astPlugins","escapeHtml","allowNode","allowedTypes","disallowedTypes","includeNodeIndex","ReactMarkdown","deprecation","console","warn","remarkPlugins","remarkRehypeOptions","rehypePlugins","hastNode","propTypes","func","arrayOf","bool","oneOfType","any","emailRegex","RegExp","newsletter","email","setEmail","useState","errors","setErrors","exists","success","setSuccess","Form","e","preventDefault","addToMailchimp","catch","Input","Button","BlogPostLayout","body_html","body_markdown","cover_image","social_image","published_at","edited_at","user","profile_image_90","authorImage","devArticles","article","window","location","Schema","headline","publisher","logo","ogImageURL","datePublished","dateModified","Layout","getPrefixedPath","Row","Col","gfm","repeat","columnIndex","columnLength","largest","padding","delimiterStart","delimiterEnd","alignDelimiters","alignments","stringLength","defaultStringLength","rowIndex","rowLength","cellMatrix","sizeMatrix","row","longestCellByColumn","mostCellsPerRow","toAlignment","trailingWhitespace","_compiled","character","handlerFactory","pairs","pair","subhandler","global","toExpression","toFunction","toPairs","ignored","grandparent","handle","unicodePunctuationRegex","spaceFactory","prefixSize","tasklistCheck","spaceThenNonSpace","91","enterCell","_align","tableData","tableHeader","obj","constructor","isBuffer","phrasing","handleDelete","unsafe","inConstruct","peek","StyleToObject","declarations","hasIterator","i","len","listItemIndent","sizeChunks","res","str","substr","checkBullet","checkListItemIndent","incrementListMarker","indentLines","combine","strikethrough","tasklist","typeFactory","allFactory","u","b","for","c","f","g","h","l","m","n","q","t","a","$$typeof","ContextConsumer","ContextProvider","ForwardRef","Lazy","Memo","Portal","Profiler","StrictMode","Suspense","SuspenseList","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","isSuspenseList","getModuleId","eol","ccount","findAndReplace","enterLiteralAutolinkValue","findUrl","split","isCorrectDomain","closingParenIndex","openingParens","closingParens","trail","splitUrl","findEmail","literalAutolink","literalAutolinkEmail","literalAutolinkHttp","literalAutolinkWww","single","singleTilde","shallow","chunkedSplice","removeRemainingSequences","126","patternCompile","expression","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","lineno","updatePosition","Position","errorsList","msg","err","filename","silent","re","comments","val","ret","decl","decls","autolinkLiteral","taskListItem","notInConstruct","miniflat","exitCheck","taskListCheckValueChecked","taskListCheckValueUnchecked","firstParaghraph","seenDelimiter","hasDash","tableHeaderCount","cellDividerHead","inCellContentHead","cellBreakHead","setextUnderlineMini","createSpace","rowStartDelimiter","atRowEndHead","inWhitespaceHead","inCellContentEscapeHead","atDelimiterRowBreak","rowEndDelimiter","inWhitespaceDelimiter","inFillerDelimiter","afterLeftAlignment","afterRightAlignment","tableClose","nextPrefixedOrBlank","tableContinue","bodyStart","rowStartBody","cellDividerBody","inCellContentBody","cellBreakBody","tableBodyClose","tableBodyContinue","atRowEndBody","inWhitespaceBody","inCellContentEscapeBody","inHead","inDelimiterRow","inRow","cellStart","interruptible","hasOwn","toStr","gOPD","getOwnPropertyDescriptor","arr","hasOwnConstructor","hasIsPrototypeOf","setProperty","enumerable","configurable","newValue","writable","getProperty","extend","copyIsArray","clone","deep","safeOptions","displayName","CONTINUE","SKIP","EXIT","defaultListItem","warningIssued","syntax","toMarkdown","blockTokenizers","visitors","defaultInlineCode","markdownTable","tableCellPadding","tablePipeAlign","around","serializeData","subexit","handleTableRowAsData","handleTableAsData","handleTableCell","matrix","Infinity"],"mappings":"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","file":"component---src-components-blog-blog-post-layout-index-js-d006248ff5bfa129ff0e.js","sourcesContent":["module.exports = checkBullet;\n\nfunction checkBullet(context) {\n var marker = context.options.bullet || '*';\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error('Cannot serialize items with `' + marker + '` for `options.bullet`, expected `*`, `+`, or `-`');\n }\n\n return marker;\n}","var asciiAlpha = require('micromark/dist/character/ascii-alpha');\n\nvar asciiAlphanumeric = require('micromark/dist/character/ascii-alphanumeric');\n\nvar asciiControl = require('micromark/dist/character/ascii-control');\n\nvar markdownLineEnding = require('micromark/dist/character/markdown-line-ending');\n\nvar unicodePunctuation = require('micromark/dist/character/unicode-punctuation');\n\nvar unicodeWhitespace = require('micromark/dist/character/unicode-whitespace');\n\nvar www = {\n tokenize: tokenizeWww,\n partial: true\n};\nvar domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nvar path = {\n tokenize: tokenizePath,\n partial: true\n};\nvar punctuation = {\n tokenize: tokenizePunctuation,\n partial: true\n};\nvar namedCharacterReference = {\n tokenize: tokenizeNamedCharacterReference,\n partial: true\n};\nvar wwwAutolink = {\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nvar httpAutolink = {\n tokenize: tokenizeHttpAutolink,\n previous: previousHttp\n};\nvar emailAutolink = {\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\nvar text = {}; // Export hooked constructs.\n\nexports.text = text; // `0`\n\nvar code = 48; // While the code is smaller than `{`.\n\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++; // Jump from `:` -> `A`\n\n if (code === 58) code = 65; // Jump from `[` -> `a`\n else if (code === 91) code = 97;\n} // `+`\n\n\ntext[43] = emailAutolink; // `-`\n\ntext[45] = emailAutolink; // `.`\n\ntext[46] = emailAutolink; // `_`\n\ntext[95] = emailAutolink; // `h`.\n\ntext[72] = [emailAutolink, httpAutolink];\ntext[104] = [emailAutolink, httpAutolink]; // `w`.\n\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n var self = this;\n var hasDot;\n return start;\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (!gfmAtext(code) || !previousEmail(self.previous) || previous(self.events)) {\n return nok(code);\n }\n\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n } // `@`\n\n\n if (code === 64) {\n effects.consume(code);\n return label;\n }\n\n return nok(code);\n }\n\n function label(code) {\n // `.`\n if (code === 46) {\n return effects.check(punctuation, done, dotContinuation)(code);\n }\n\n if ( // `-`\n code === 45 || // `_`\n code === 95) {\n return effects.check(punctuation, nok, dashOrUnderscoreContinuation)(code);\n }\n\n if (asciiAlphanumeric(code)) {\n effects.consume(code);\n return label;\n }\n\n return done(code);\n }\n\n function dotContinuation(code) {\n effects.consume(code);\n hasDot = true;\n return label;\n }\n\n function dashOrUnderscoreContinuation(code) {\n effects.consume(code);\n return afterDashOrUnderscore;\n }\n\n function afterDashOrUnderscore(code) {\n // `.`\n if (code === 46) {\n return effects.check(punctuation, nok, dotContinuation)(code);\n }\n\n return label(code);\n }\n\n function done(code) {\n if (hasDot) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n\n return nok(code);\n }\n}\n\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n var self = this;\n return start;\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (code !== 87 && code - 32 !== 87 || !previousWww(self.previous) || previous(self.events)) {\n return nok(code);\n }\n\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww'); // For `www.` we check instead of attempt, because when it matches, GH\n // treats it as part of a domain (yes, it says a valid domain must come\n // after `www.`, but that’s not how it’s implemented by them).\n\n return effects.check(www, effects.attempt(domain, effects.attempt(path, done), nok), nok)(code);\n }\n\n function done(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\nfunction tokenizeHttpAutolink(effects, ok, nok) {\n var self = this;\n return start;\n\n function start(code) {\n /* istanbul ignore next - hooks. */\n if (code !== 72 && code - 32 !== 72 || !previousHttp(self.previous) || previous(self.events)) {\n return nok(code);\n }\n\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n effects.consume(code);\n return t1;\n }\n\n function t1(code) {\n // `t`\n if (code === 84 || code - 32 === 84) {\n effects.consume(code);\n return t2;\n }\n\n return nok(code);\n }\n\n function t2(code) {\n // `t`\n if (code === 84 || code - 32 === 84) {\n effects.consume(code);\n return p;\n }\n\n return nok(code);\n }\n\n function p(code) {\n // `p`\n if (code === 80 || code - 32 === 80) {\n effects.consume(code);\n return s;\n }\n\n return nok(code);\n }\n\n function s(code) {\n // `s`\n if (code === 83 || code - 32 === 83) {\n effects.consume(code);\n return colon;\n }\n\n return colon(code);\n }\n\n function colon(code) {\n // `:`\n if (code === 58) {\n effects.consume(code);\n return slash1;\n }\n\n return nok(code);\n }\n\n function slash1(code) {\n // `/`\n if (code === 47) {\n effects.consume(code);\n return slash2;\n }\n\n return nok(code);\n }\n\n function slash2(code) {\n // `/`\n if (code === 47) {\n effects.consume(code);\n return after;\n }\n\n return nok(code);\n }\n\n function after(code) {\n return asciiControl(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, done), nok)(code);\n }\n\n function done(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\nfunction tokenizeWww(effects, ok, nok) {\n return start;\n\n function start(code) {\n // Assume a `w`.\n effects.consume(code);\n return w2;\n }\n\n function w2(code) {\n // `w`\n if (code === 87 || code - 32 === 87) {\n effects.consume(code);\n return w3;\n }\n\n return nok(code);\n }\n\n function w3(code) {\n // `w`\n if (code === 87 || code - 32 === 87) {\n effects.consume(code);\n return dot;\n }\n\n return nok(code);\n }\n\n function dot(code) {\n // `.`\n if (code === 46) {\n effects.consume(code);\n return after;\n }\n\n return nok(code);\n }\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? nok(code) : ok(code);\n }\n}\n\nfunction tokenizeDomain(effects, ok, nok) {\n var hasUnderscoreInLastSegment;\n var hasUnderscoreInLastLastSegment;\n return domain;\n\n function domain(code) {\n // `&`\n if (code === 38) {\n return effects.check(namedCharacterReference, done, punctuationContinuation)(code);\n }\n\n if (code === 46\n /* `.` */\n || code === 95\n /* `_` */\n ) {\n return effects.check(punctuation, done, punctuationContinuation)(code);\n } // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n\n\n if (asciiControl(code) || unicodeWhitespace(code) || code !== 45\n /* `-` */\n && unicodePunctuation(code)) {\n return done(code);\n }\n\n effects.consume(code);\n return domain;\n }\n\n function punctuationContinuation(code) {\n // `.`\n if (code === 46) {\n hasUnderscoreInLastLastSegment = hasUnderscoreInLastSegment;\n hasUnderscoreInLastSegment = undefined;\n effects.consume(code);\n return domain;\n } // `_`\n\n\n if (code === 95) hasUnderscoreInLastSegment = true;\n effects.consume(code);\n return domain;\n }\n\n function done(code) {\n if (!hasUnderscoreInLastLastSegment && !hasUnderscoreInLastSegment) {\n return ok(code);\n }\n\n return nok(code);\n }\n}\n\nfunction tokenizePath(effects, ok) {\n var balance = 0;\n return inPath;\n\n function inPath(code) {\n // `&`\n if (code === 38) {\n return effects.check(namedCharacterReference, ok, continuedPunctuation)(code);\n } // `(`\n\n\n if (code === 40) {\n balance++;\n } // `)`\n\n\n if (code === 41) {\n return effects.check(punctuation, parenAtPathEnd, continuedPunctuation)(code);\n }\n\n if (pathEnd(code)) {\n return ok(code);\n }\n\n if (trailingPunctuation(code)) {\n return effects.check(punctuation, ok, continuedPunctuation)(code);\n }\n\n effects.consume(code);\n return inPath;\n }\n\n function continuedPunctuation(code) {\n effects.consume(code);\n return inPath;\n }\n\n function parenAtPathEnd(code) {\n balance--;\n return balance < 0 ? ok(code) : continuedPunctuation(code);\n }\n}\n\nfunction tokenizeNamedCharacterReference(effects, ok, nok) {\n return start;\n\n function start(code) {\n // Assume an ampersand.\n effects.consume(code);\n return inside;\n }\n\n function inside(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return inside;\n } // `;`\n\n\n if (code === 59) {\n effects.consume(code);\n return after;\n }\n\n return nok(code);\n }\n\n function after(code) {\n // If the named character reference is followed by the end of the path, it’s\n // not continued punctuation.\n return pathEnd(code) ? ok(code) : nok(code);\n }\n}\n\nfunction tokenizePunctuation(effects, ok, nok) {\n return start;\n\n function start(code) {\n // Always a valid trailing punctuation marker.\n effects.consume(code);\n return after;\n }\n\n function after(code) {\n // Check the next.\n if (trailingPunctuation(code)) {\n effects.consume(code);\n return after;\n } // If the punctuation marker is followed by the end of the path, it’s not\n // continued punctuation.\n\n\n return pathEnd(code) ? ok(code) : nok(code);\n }\n}\n\nfunction trailingPunctuation(code) {\n return (// `!`\n code === 33 || // `\"`\n code === 34 || // `'`\n code === 39 || // `)`\n code === 41 || // `*`\n code === 42 || // `,`\n code === 44 || // `.`\n code === 46 || // `:`\n code === 58 || // `;`\n code === 59 || // `<`\n code === 60 || // `?`\n code === 63 || // `_`.\n code === 95 || // `~`\n code === 126\n );\n}\n\nfunction pathEnd(code) {\n return (// EOF.\n code === null || // CR, LF, CRLF, HT, VS.\n code < 0 || // Space.\n code === 32 || // `<`\n code === 60\n );\n}\n\nfunction gfmAtext(code) {\n return code === 43\n /* `+` */\n || code === 45\n /* `-` */\n || code === 46\n /* `.` */\n || code === 95\n /* `_` */\n || asciiAlphanumeric(code);\n}\n\nfunction previousWww(code) {\n return code === null || code < 0 || code === 32\n /* ` ` */\n || code === 40\n /* `(` */\n || code === 42\n /* `*` */\n || code === 95\n /* `_` */\n || code === 126\n /* `~` */\n ;\n}\n\nfunction previousHttp(code) {\n return code === null || !asciiAlpha(code);\n}\n\nfunction previousEmail(code) {\n return code !== 47\n /* `/` */\n && previousHttp(code);\n}\n\nfunction previous(events) {\n var index = events.length;\n\n while (index--) {\n if ((events[index][1].type === 'labelLink' || events[index][1].type === 'labelImage') && !events[index][1]._balanced) {\n return true;\n }\n }\n}","'use strict';\n\nvar splice = [].splice;\nmodule.exports = splice;","'use strict';\n\nfunction markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n}\n\nmodule.exports = markdownSpace;","module.exports = require('./syntax');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"className\", \"cssModule\", \"size\", \"bordered\", \"borderless\", \"striped\", \"dark\", \"hover\", \"responsive\", \"tag\", \"responsiveTag\", \"innerRef\"];\nimport React from 'react';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar defaultProps = {\n tag: 'table',\n responsiveTag: 'div'\n};\n\nvar Table = function Table(props) {\n var className = props.className,\n cssModule = props.cssModule,\n size = props.size,\n bordered = props.bordered,\n borderless = props.borderless,\n striped = props.striped,\n dark = props.dark,\n hover = props.hover,\n responsive = props.responsive,\n Tag = props.tag,\n ResponsiveTag = props.responsiveTag,\n innerRef = props.innerRef,\n attributes = _objectWithoutPropertiesLoose(props, _excluded);\n\n var classes = mapToCssModules(classNames(className, 'table', size ? 'table-' + size : false, bordered ? 'table-bordered' : false, borderless ? 'table-borderless' : false, striped ? 'table-striped' : false, dark ? 'table-dark' : false, hover ? 'table-hover' : false), cssModule);\n var table = /*#__PURE__*/React.createElement(Tag, _extends({}, attributes, {\n ref: innerRef,\n className: classes\n }));\n\n if (responsive) {\n var responsiveClassName = mapToCssModules(responsive === true ? 'table-responsive' : \"table-responsive-\" + responsive, cssModule);\n return /*#__PURE__*/React.createElement(ResponsiveTag, {\n className: responsiveClassName\n }, table);\n }\n\n return table;\n};\n\nTable.defaultProps = defaultProps;\nexport default Table;","import React from \"react\"\nimport { Helmet } from \"react-helmet\"\nimport config from \"../../../../config.json\"\n\nconst BlogSEO = ({ url, title, description, socialImageURL, date, author, schemaMarkup }) => {\n return (\n \n \n {config.siteTitle} | {title}\n \n \n \n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n {schemaMarkup && }\n \n )\n}\n\nexport default BlogSEO\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 * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return '';\n } // Node.\n\n\n if ('position' in value || 'type' in value) {\n return position(value.position);\n } // Position.\n\n\n if ('start' in value || 'end' in value) {\n return position(value);\n } // Point.\n\n\n if ('line' in value || 'column' in value) {\n return point(value);\n } // ?\n\n\n return '';\n}\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\n\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column);\n}\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\n\n\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end);\n}\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\n\n\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\nimport { stringifyPosition } from 'unist-util-stringify-position';\n/**\n * Message.\n */\n\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason` at `place` from `origin`.\n *\n * When an error is passed in as `reason`, the `stack` is copied.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n *\n * > 👉 **Note**: you should use markdown.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // To do: next major: expose `undefined` everywhere instead of `null`.\n constructor(reason, place, origin) {\n /** @type {[string | null, string | null]} */\n const parts = [null, null];\n /** @type {Position} */\n\n let position = {\n // @ts-expect-error: we always follows the structure of `position`.\n start: {\n line: null,\n column: null\n },\n // @ts-expect-error: \"\n end: {\n line: null,\n column: null\n }\n };\n super();\n\n if (typeof place === 'string') {\n origin = place;\n place = undefined;\n }\n\n if (typeof origin === 'string') {\n const index = origin.indexOf(':');\n\n if (index === -1) {\n parts[1] = origin;\n } else {\n parts[0] = origin.slice(0, index);\n parts[1] = origin.slice(index + 1);\n }\n }\n\n if (place) {\n // Node.\n if ('type' in place || 'position' in place) {\n if (place.position) {\n // To do: next major: deep clone.\n // @ts-expect-error: looks like a position.\n position = place.position;\n }\n } // Position.\n else if ('start' in place || 'end' in place) {\n // @ts-expect-error: looks like a position.\n // To do: next major: deep clone.\n position = place;\n } // Point.\n else if ('line' in place || 'column' in place) {\n // To do: next major: deep clone.\n position.start = place;\n }\n } // Fields from `Error`.\n\n /**\n * Serialized positional info of error.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n\n\n this.name = stringifyPosition(place) || '1:1';\n /**\n * Reason for message.\n *\n * @type {string}\n */\n\n this.message = typeof reason === 'object' ? reason.message : reason;\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n\n this.stack = '';\n\n if (typeof reason === 'object' && reason.stack) {\n this.stack = reason.stack;\n }\n /**\n * Reason for message.\n *\n * > 👉 **Note**: you should use markdown.\n *\n * @type {string}\n */\n\n\n this.reason = this.message;\n /* eslint-disable no-unused-expressions */\n\n /**\n * State of problem.\n *\n * * `true` — marks associated file as no longer processable (error)\n * * `false` — necessitates a (potential) change (warning)\n * * `null | undefined` — for things that might not need changing (info)\n *\n * @type {boolean | null | undefined}\n */\n\n this.fatal;\n /**\n * Starting line of error.\n *\n * @type {number | null}\n */\n\n this.line = position.start.line;\n /**\n * Starting column of error.\n *\n * @type {number | null}\n */\n\n this.column = position.start.column;\n /**\n * Full unist position.\n *\n * @type {Position | null}\n */\n\n this.position = position;\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | null}\n */\n\n this.source = parts[0];\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | null}\n */\n\n this.ruleId = parts[1];\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | null}\n */\n\n this.file; // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | null}\n */\n\n this.actual;\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array | null}\n */\n\n this.expected;\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | null}\n */\n\n this.url;\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | null}\n */\n\n this.note;\n /* eslint-enable no-unused-expressions */\n }\n\n}\nVFileMessage.prototype.file = '';\nVFileMessage.prototype.name = '';\nVFileMessage.prototype.reason = '';\nVFileMessage.prototype.message = '';\nVFileMessage.prototype.stack = '';\nVFileMessage.prototype.fatal = null;\nVFileMessage.prototype.column = null;\nVFileMessage.prototype.line = null;\nVFileMessage.prototype.source = null;\nVFileMessage.prototype.ruleId = null;\nVFileMessage.prototype.position = null;","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport const path = {\n basename,\n dirname,\n extname,\n join,\n sep: '/'\n};\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | undefined} [ext]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\n\nfunction basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string');\n }\n\n assertPath(path);\n let start = 0;\n let end = -1;\n let index = path.length;\n /** @type {boolean | undefined} */\n\n let seenNonSlash;\n\n if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n while (index--) {\n if (path.charCodeAt(index) === 47\n /* `/` */\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1;\n break;\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true;\n end = index + 1;\n }\n }\n\n return end < 0 ? '' : path.slice(start, end);\n }\n\n if (ext === path) {\n return '';\n }\n\n let firstNonSlashEnd = -1;\n let extIndex = ext.length - 1;\n\n while (index--) {\n if (path.charCodeAt(index) === 47\n /* `/` */\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true;\n firstNonSlashEnd = index + 1;\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.charCodeAt(index) === ext.charCodeAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd;\n } else if (end < 0) {\n end = path.length;\n }\n\n return path.slice(start, end);\n}\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n\n\nfunction dirname(path) {\n assertPath(path);\n\n if (path.length === 0) {\n return '.';\n }\n\n let end = -1;\n let index = path.length;\n /** @type {boolean | undefined} */\n\n let unmatchedSlash; // Prefix `--` is important to not run on `0`.\n\n while (--index) {\n if (path.charCodeAt(index) === 47\n /* `/` */\n ) {\n if (unmatchedSlash) {\n end = index;\n break;\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true;\n }\n }\n\n return end < 0 ? path.charCodeAt(0) === 47\n /* `/` */\n ? '/' : '.' : end === 1 && path.charCodeAt(0) === 47\n /* `/` */\n ? '//' : path.slice(0, end);\n}\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\n\n\nfunction extname(path) {\n assertPath(path);\n let index = path.length;\n let end = -1;\n let startPart = 0;\n let startDot = -1; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n\n let preDotState = 0;\n /** @type {boolean | undefined} */\n\n let unmatchedSlash;\n\n while (index--) {\n const code = path.charCodeAt(index);\n\n if (code === 47\n /* `/` */\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1;\n break;\n }\n\n continue;\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true;\n end = index + 1;\n }\n\n if (code === 46\n /* `.` */\n ) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index;\n } else if (preDotState !== 1) {\n preDotState = 1;\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1;\n }\n }\n\n if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot.\n preDotState === 0 || // The (right-most) trimmed path component is exactly `..`.\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n}\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\n\n\nfunction join() {\n let index = -1;\n /** @type {string | undefined} */\n\n let joined;\n\n for (var _len = arguments.length, segments = new Array(_len), _key = 0; _key < _len; _key++) {\n segments[_key] = arguments[_key];\n }\n\n while (++index < segments.length) {\n assertPath(segments[index]);\n\n if (segments[index]) {\n joined = joined === undefined ? segments[index] : joined + '/' + segments[index];\n }\n }\n\n return joined === undefined ? '.' : normalize(joined);\n}\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\n\n\nfunction normalize(path) {\n assertPath(path);\n const absolute = path.charCodeAt(0) === 47;\n /* `/` */\n // Normalize the path according to POSIX rules.\n\n let value = normalizeString(path, !absolute);\n\n if (value.length === 0 && !absolute) {\n value = '.';\n }\n\n if (value.length > 0 && path.charCodeAt(path.length - 1) === 47\n /* / */\n ) {\n value += '/';\n }\n\n return absolute ? '/' + value : value;\n}\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\n\n\nfunction normalizeString(path, allowAboveRoot) {\n let result = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let index = -1;\n /** @type {number | undefined} */\n\n let code;\n /** @type {number} */\n\n let lastSlashIndex;\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.charCodeAt(index);\n } else if (code === 47\n /* `/` */\n ) {\n break;\n } else {\n code = 47;\n /* `/` */\n }\n\n if (code === 47\n /* `/` */\n ) {\n if (lastSlash === index - 1 || dots === 1) {// Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (result.length < 2 || lastSegmentLength !== 2 || result.charCodeAt(result.length - 1) !== 46\n /* `.` */\n || result.charCodeAt(result.length - 2) !== 46\n /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/');\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = '';\n lastSegmentLength = 0;\n } else {\n result = result.slice(0, lastSlashIndex);\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/');\n }\n\n lastSlash = index;\n dots = 0;\n continue;\n }\n } else if (result.length > 0) {\n result = '';\n lastSegmentLength = 0;\n lastSlash = index;\n dots = 0;\n continue;\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..';\n lastSegmentLength = 2;\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index);\n } else {\n result = path.slice(lastSlash + 1, index);\n }\n\n lastSegmentLength = index - lastSlash - 1;\n }\n\n lastSlash = index;\n dots = 0;\n } else if (code === 46\n /* `.` */\n && dots > -1) {\n dots++;\n } else {\n dots = -1;\n }\n }\n\n return result;\n}\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\n\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n/* eslint-enable max-depth, complexity */","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {\n cwd\n};\n\nfunction cwd() {\n return '/';\n}","/**\n * @typedef URL\n * @property {string} hash\n * @property {string} host\n * @property {string} hostname\n * @property {string} href\n * @property {string} origin\n * @property {string} password\n * @property {string} pathname\n * @property {string} port\n * @property {string} protocol\n * @property {string} search\n * @property {any} searchParams\n * @property {string} username\n * @property {() => string} toString\n * @property {() => string} toJSON\n */\n\n/**\n * Check if `fileUrlOrPath` looks like a URL.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return fileUrlOrPath !== null && typeof fileUrlOrPath === 'object' && // @ts-expect-error: indexable.\n fileUrlOrPath.href && // @ts-expect-error: indexable.\n fileUrlOrPath.origin;\n}","/// \nimport { isUrl } from './minurl.shared.js'; // See: \n\n/**\n * @param {string | URL} path\n * File URL.\n * @returns {string}\n * File URL.\n */\n\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path);\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The \"path\" argument must be of type string or an instance of URL. Received `' + path + '`');\n error.code = 'ERR_INVALID_ARG_TYPE';\n throw error;\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file');\n error.code = 'ERR_INVALID_URL_SCHEME';\n throw error;\n }\n\n return getPathFromURLPosix(path);\n}\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\n\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('File URL host must be \"localhost\" or empty on darwin');\n error.code = 'ERR_INVALID_FILE_URL_HOST';\n throw error;\n }\n\n const pathname = url.pathname;\n let index = -1;\n\n while (++index < pathname.length) {\n if (pathname.charCodeAt(index) === 37\n /* `%` */\n && pathname.charCodeAt(index + 1) === 50\n /* `2` */\n ) {\n const third = pathname.charCodeAt(index + 2);\n\n if (third === 70\n /* `F` */\n || third === 102\n /* `f` */\n ) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('File URL path must not include encoded / characters');\n error.code = 'ERR_INVALID_FILE_URL_PATH';\n throw error;\n }\n }\n }\n\n return decodeURIComponent(pathname);\n}\n\nexport { isUrl } from './minurl.shared.js';","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Point} Point\n * @typedef {import('./minurl.shared.js').URL} URL\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {Record & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {'ascii' | 'utf8' | 'utf-8' | 'utf16le' | 'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex'} BufferEncoding\n * Encodings supported by the buffer class.\n *\n * This is a copy of the types from Node, copied to prevent Node globals from\n * being needed.\n * Copied from: \n *\n * @typedef {Options | URL | Value | VFile} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * Set multiple values.\n * @property {Value | null | undefined} [value]\n * Set `value`.\n * @property {string | null | undefined} [cwd]\n * Set `cwd`.\n * @property {Array | null | undefined} [history]\n * Set `history`.\n * @property {URL | string | null | undefined} [path]\n * Set `path`.\n * @property {string | null | undefined} [basename]\n * Set `basename`.\n * @property {string | null | undefined} [stem]\n * Set `stem`.\n * @property {string | null | undefined} [extname]\n * Set `extname`.\n * @property {string | null | undefined} [dirname]\n * Set `dirname`.\n * @property {Data | null | undefined} [data]\n * Set `data`.\n *\n * @typedef Map\n * Raw source map.\n *\n * See:\n * .\n * @property {number} version\n * Which version of the source map spec this map is following.\n * @property {Array} sources\n * An array of URLs to the original source files.\n * @property {Array} names\n * An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n * The URL root from which all sources are relative.\n * @property {Array | undefined} [sourcesContent]\n * An array of contents of the original source files.\n * @property {string} mappings\n * A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n * The generated file this source map is associated with.\n *\n * @typedef {{[key: string]: unknown} & VFileCoreOptions} Options\n * Configuration.\n *\n * A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record} ReporterSettings\n * Configuration for reporters.\n */\n\n/**\n * @template {ReporterSettings} Settings\n * Options type.\n * @callback Reporter\n * Type for a reporter.\n * @param {Array} files\n * Files to report.\n * @param {Settings} options\n * Configuration.\n * @returns {string}\n * Report.\n */\nimport bufferLike from 'is-buffer';\nimport { VFileMessage } from 'vfile-message';\nimport { path } from './minpath.js';\nimport { proc } from './minproc.js';\nimport { urlToPath, isUrl } from './minurl.js';\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n *\n * @type {Array<'basename' | 'dirname' | 'extname' | 'history' | 'path' | 'stem'>}\n */\n\nconst order = ['history', 'path', 'basename', 'stem', 'extname', 'dirname'];\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Buffer` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options;\n\n if (!value) {\n options = {};\n } else if (typeof value === 'string' || buffer(value)) {\n options = {\n value\n };\n } else if (isUrl(value)) {\n options = {\n path: value\n };\n } else {\n options = value;\n }\n /**\n * Place to store custom information (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n\n\n this.data = {};\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n\n this.messages = [];\n /**\n * List of filepaths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n\n this.history = [];\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n\n this.cwd = proc.cwd();\n /* eslint-disable no-unused-expressions */\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n\n this.value; // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n\n this.stored;\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n\n this.result;\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n\n this.map;\n /* eslint-enable no-unused-expressions */\n // Set path related properties in the correct order.\n\n let index = -1;\n\n while (++index < order.length) {\n const prop = order[index]; // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n\n if (prop in options && options[prop] !== undefined && options[prop] !== null) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[prop] = prop === 'history' ? [...options[prop]] : options[prop];\n }\n }\n /** @type {string} */\n\n\n let prop; // Set non-path related properties.\n\n for (prop in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) {\n // @ts-expect-error: fine to set other things.\n this[prop] = options[prop];\n }\n }\n }\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n */\n\n\n get path() {\n return this.history[this.history.length - 1];\n }\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {string | URL} path\n */\n\n\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path);\n }\n\n assertNonEmpty(path, 'path');\n\n if (this.path !== path) {\n this.history.push(path);\n }\n }\n /**\n * Get the parent path (example: `'~'`).\n */\n\n\n get dirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined;\n }\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n */\n\n\n set dirname(dirname) {\n assertPath(this.basename, 'dirname');\n this.path = path.join(dirname || '', this.basename);\n }\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n */\n\n\n get basename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined;\n }\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n\n\n set basename(basename) {\n assertNonEmpty(basename, 'basename');\n assertPart(basename, 'basename');\n this.path = path.join(this.dirname || '', basename);\n }\n /**\n * Get the extname (including dot) (example: `'.js'`).\n */\n\n\n get extname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined;\n }\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n */\n\n\n set extname(extname) {\n assertPart(extname, 'extname');\n assertPath(this.dirname, 'extname');\n\n if (extname) {\n if (extname.charCodeAt(0) !== 46\n /* `.` */\n ) {\n throw new Error('`extname` must start with `.`');\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots');\n }\n }\n\n this.path = path.join(this.dirname, this.stem + (extname || ''));\n }\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n */\n\n\n get stem() {\n return typeof this.path === 'string' ? path.basename(this.path, this.extname) : undefined;\n }\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n */\n\n\n set stem(stem) {\n assertNonEmpty(stem, 'stem');\n assertPart(stem, 'stem');\n this.path = path.join(this.dirname || '', stem + (this.extname || ''));\n }\n /**\n * Serialize the file.\n *\n * @param {BufferEncoding | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Buffer`\n * (default: `'utf8'`).\n * @returns {string}\n * Serialized file.\n */\n\n\n toString(encoding) {\n return (this.value || '').toString(encoding || undefined);\n }\n /**\n * Create a warning message associated with the file.\n *\n * Its `fatal` is set to `false` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n\n\n message(reason, place, origin) {\n const message = new VFileMessage(reason, place, origin);\n\n if (this.path) {\n message.name = this.path + ':' + message.name;\n message.file = this.path;\n }\n\n message.fatal = false;\n this.messages.push(message);\n return message;\n }\n /**\n * Create an info message associated with the file.\n *\n * Its `fatal` is set to `null` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n\n\n info(reason, place, origin) {\n const message = this.message(reason, place, origin);\n message.fatal = null;\n return message;\n }\n /**\n * Create a fatal error associated with the file.\n *\n * Its `fatal` is set to `true` and `file` is set to the current file path.\n * Its added to `file.messages`.\n *\n * > 👉 **Note**: a fatal error means that a file is no longer processable.\n *\n * @param {string | Error | VFileMessage} reason\n * Reason for message, uses the stack and message of the error if given.\n * @param {Node | NodeLike | Position | Point | null | undefined} [place]\n * Place in file where the message occurred.\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Message.\n * @throws {VFileMessage}\n * Message.\n */\n\n\n fail(reason, place, origin) {\n const message = this.message(reason, place, origin);\n message.fatal = true;\n throw message;\n }\n\n}\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {void}\n * Nothing.\n */\n\nfunction assertPart(part, name) {\n if (part && part.includes(path.sep)) {\n throw new Error('`' + name + '` cannot be a path: did not expect `' + path.sep + '`');\n }\n}\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\n\n\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty');\n }\n}\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\n\n\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too');\n }\n}\n/**\n * Assert `value` is a buffer.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Buffer}\n * Whether `value` is a Node.js buffer.\n */\n\n\nfunction buffer(value) {\n return bufferLike(value);\n}","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error;\n }\n}","export default function isPlainObject(value) {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = [];\n /** @type {Pipeline} */\n\n const pipeline = {\n run,\n use\n };\n return pipeline;\n /** @type {Run} */\n\n function run() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n let middlewareIndex = -1;\n /** @type {Callback} */\n\n const callback = values.pop();\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback);\n }\n\n next(null, ...values);\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n\n function next(error) {\n const fn = fns[++middlewareIndex];\n let index = -1;\n\n if (error) {\n callback(error);\n return;\n } // Copy non-nullish input into values.\n\n\n for (var _len2 = arguments.length, output = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n output[_key2 - 1] = arguments[_key2];\n }\n\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index];\n }\n } // Save the newly created `output` for the next call.\n\n\n values = output; // Next or done.\n\n if (fn) {\n wrap(fn, next)(...output);\n } else {\n callback(null, ...output);\n }\n }\n }\n /** @type {Use} */\n\n\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError('Expected `middelware` to be a function, not ' + middelware);\n }\n\n fns.push(middelware);\n return pipeline;\n }\n}\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\n\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called;\n return wrapped;\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n\n function wrapped() {\n for (var _len3 = arguments.length, parameters = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n parameters[_key3] = arguments[_key3];\n }\n\n const fnExpectsCallback = middleware.length > parameters.length;\n /** @type {any} */\n\n let result;\n\n if (fnExpectsCallback) {\n parameters.push(done);\n }\n\n try {\n result = middleware.apply(this, parameters);\n } catch (error) {\n const exception =\n /** @type {Error} */\n error; // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n\n if (fnExpectsCallback && called) {\n throw exception;\n }\n\n return done(exception);\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done);\n } else if (result instanceof Error) {\n done(result);\n } else {\n then(result);\n }\n }\n }\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n\n\n function done(error) {\n if (!called) {\n called = true;\n\n for (var _len4 = arguments.length, output = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n output[_key4 - 1] = arguments[_key4];\n }\n\n callback(error, ...output);\n }\n }\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n\n\n function then(value) {\n done(null, value);\n }\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('vfile').VFileCompatible} VFileCompatible\n * @typedef {import('vfile').VFileValue} VFileValue\n * @typedef {import('..').Processor} Processor\n * @typedef {import('..').Plugin} Plugin\n * @typedef {import('..').Preset} Preset\n * @typedef {import('..').Pluggable} Pluggable\n * @typedef {import('..').PluggableList} PluggableList\n * @typedef {import('..').Transformer} Transformer\n * @typedef {import('..').Parser} Parser\n * @typedef {import('..').Compiler} Compiler\n * @typedef {import('..').RunCallback} RunCallback\n * @typedef {import('..').ProcessCallback} ProcessCallback\n *\n * @typedef Context\n * @property {Node} tree\n * @property {VFile} file\n */\nimport { bail } from 'bail';\nimport isBuffer from 'is-buffer';\nimport extend from 'extend';\nimport isPlainObj from 'is-plain-obj';\nimport { trough } from 'trough';\nimport { VFile } from 'vfile'; // Expose a frozen processor.\n\nexport const unified = base().freeze();\nconst own = {}.hasOwnProperty; // Function to create the first processor.\n\n/**\n * @returns {Processor}\n */\n\nfunction base() {\n const transformers = trough();\n /** @type {Processor['attachers']} */\n\n const attachers = [];\n /** @type {Record} */\n\n let namespace = {};\n /** @type {boolean|undefined} */\n\n let frozen;\n let freezeIndex = -1; // Data management.\n // @ts-expect-error: overloads are handled.\n\n processor.data = data;\n processor.Parser = undefined;\n processor.Compiler = undefined; // Lock.\n\n processor.freeze = freeze; // Plugins.\n\n processor.attachers = attachers; // @ts-expect-error: overloads are handled.\n\n processor.use = use; // API.\n\n processor.parse = parse;\n processor.stringify = stringify; // @ts-expect-error: overloads are handled.\n\n processor.run = run;\n processor.runSync = runSync; // @ts-expect-error: overloads are handled.\n\n processor.process = process;\n processor.processSync = processSync; // Expose.\n\n return processor; // Create a new processor based on the processor in the current scope.\n\n /** @type {Processor} */\n\n function processor() {\n const destination = base();\n let index = -1;\n\n while (++index < attachers.length) {\n destination.use(...attachers[index]);\n }\n\n destination.data(extend(true, {}, namespace));\n return destination;\n }\n /**\n * @param {string|Record} [key]\n * @param {unknown} [value]\n * @returns {unknown}\n */\n\n\n function data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', frozen);\n namespace[key] = value;\n return processor;\n } // Get `key`.\n\n\n return own.call(namespace, key) && namespace[key] || null;\n } // Set space.\n\n\n if (key) {\n assertUnfrozen('data', frozen);\n namespace = key;\n return processor;\n } // Get space.\n\n\n return namespace;\n }\n /** @type {Processor['freeze']} */\n\n\n function freeze() {\n if (frozen) {\n return processor;\n }\n\n while (++freezeIndex < attachers.length) {\n const [attacher, ...options] = attachers[freezeIndex];\n\n if (options[0] === false) {\n continue;\n }\n\n if (options[0] === true) {\n options[0] = undefined;\n }\n /** @type {Transformer|void} */\n\n\n const transformer = attacher.call(processor, ...options);\n\n if (typeof transformer === 'function') {\n transformers.use(transformer);\n }\n }\n\n frozen = true;\n freezeIndex = Number.POSITIVE_INFINITY;\n return processor;\n }\n /**\n * @param {Pluggable|null|undefined} [value]\n * @param {...unknown} options\n * @returns {Processor}\n */\n\n\n function use(value) {\n for (var _len = arguments.length, options = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n options[_key - 1] = arguments[_key];\n }\n\n /** @type {Record|undefined} */\n let settings;\n assertUnfrozen('use', frozen);\n\n if (value === null || value === undefined) {// Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, ...options);\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value);\n } else {\n addPreset(value);\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`');\n }\n\n if (settings) {\n namespace.settings = Object.assign(namespace.settings || {}, settings);\n }\n\n return processor;\n /**\n * @param {import('..').Pluggable} value\n * @returns {void}\n */\n\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value);\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...options] = value;\n addPlugin(plugin, ...options);\n } else {\n addPreset(value);\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`');\n }\n }\n /**\n * @param {Preset} result\n * @returns {void}\n */\n\n\n function addPreset(result) {\n addList(result.plugins);\n\n if (result.settings) {\n settings = Object.assign(settings || {}, result.settings);\n }\n }\n /**\n * @param {PluggableList|null|undefined} [plugins]\n * @returns {void}\n */\n\n\n function addList(plugins) {\n let index = -1;\n\n if (plugins === null || plugins === undefined) {// Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index];\n add(thing);\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`');\n }\n }\n /**\n * @param {Plugin} plugin\n * @param {...unknown} [value]\n * @returns {void}\n */\n\n\n function addPlugin(plugin, value) {\n let index = -1;\n /** @type {Processor['attachers'][number]|undefined} */\n\n let entry;\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entry = attachers[index];\n break;\n }\n }\n\n if (entry) {\n if (isPlainObj(entry[1]) && isPlainObj(value)) {\n value = extend(true, entry[1], value);\n }\n\n entry[1] = value;\n } else {\n // @ts-expect-error: fine.\n attachers.push([...arguments]);\n }\n }\n }\n /** @type {Processor['parse']} */\n\n\n function parse(doc) {\n processor.freeze();\n const file = vfile(doc);\n const Parser = processor.Parser;\n assertParser('parse', Parser);\n\n if (newable(Parser, 'parse')) {\n // @ts-expect-error: `newable` checks this.\n return new Parser(String(file), file).parse();\n } // @ts-expect-error: `newable` checks this.\n\n\n return Parser(String(file), file); // eslint-disable-line new-cap\n }\n /** @type {Processor['stringify']} */\n\n\n function stringify(node, doc) {\n processor.freeze();\n const file = vfile(doc);\n const Compiler = processor.Compiler;\n assertCompiler('stringify', Compiler);\n assertNode(node);\n\n if (newable(Compiler, 'compile')) {\n // @ts-expect-error: `newable` checks this.\n return new Compiler(node, file).compile();\n } // @ts-expect-error: `newable` checks this.\n\n\n return Compiler(node, file); // eslint-disable-line new-cap\n }\n /**\n * @param {Node} node\n * @param {VFileCompatible|RunCallback} [doc]\n * @param {RunCallback} [callback]\n * @returns {Promise|void}\n */\n\n\n function run(node, doc, callback) {\n assertNode(node);\n processor.freeze();\n\n if (!callback && typeof doc === 'function') {\n callback = doc;\n doc = undefined;\n }\n\n if (!callback) {\n return new Promise(executor);\n }\n\n executor(null, callback);\n /**\n * @param {null|((node: Node) => void)} resolve\n * @param {(error: Error) => void} reject\n * @returns {void}\n */\n\n function executor(resolve, reject) {\n // @ts-expect-error: `doc` can’t be a callback anymore, we checked.\n transformers.run(node, vfile(doc), done);\n /**\n * @param {Error|null} error\n * @param {Node} tree\n * @param {VFile} file\n * @returns {void}\n */\n\n function done(error, tree, file) {\n tree = tree || node;\n\n if (error) {\n reject(error);\n } else if (resolve) {\n resolve(tree);\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, tree, file);\n }\n }\n }\n }\n /** @type {Processor['runSync']} */\n\n\n function runSync(node, file) {\n /** @type {Node|undefined} */\n let result;\n /** @type {boolean|undefined} */\n\n let complete;\n processor.run(node, file, done);\n assertDone('runSync', 'run', complete); // @ts-expect-error: we either bailed on an error or have a tree.\n\n return result;\n /**\n * @param {Error|null} [error]\n * @param {Node} [tree]\n * @returns {void}\n */\n\n function done(error, tree) {\n bail(error);\n result = tree;\n complete = true;\n }\n }\n /**\n * @param {VFileCompatible} doc\n * @param {ProcessCallback} [callback]\n * @returns {Promise|undefined}\n */\n\n\n function process(doc, callback) {\n processor.freeze();\n assertParser('process', processor.Parser);\n assertCompiler('process', processor.Compiler);\n\n if (!callback) {\n return new Promise(executor);\n }\n\n executor(null, callback);\n /**\n * @param {null|((file: VFile) => void)} resolve\n * @param {(error?: Error|null|undefined) => void} reject\n * @returns {void}\n */\n\n function executor(resolve, reject) {\n const file = vfile(doc);\n processor.run(processor.parse(file), file, (error, tree, file) => {\n if (error || !tree || !file) {\n done(error);\n } else {\n /** @type {unknown} */\n const result = processor.stringify(tree, file);\n\n if (result === undefined || result === null) {// Empty.\n } else if (looksLikeAVFileValue(result)) {\n file.value = result;\n } else {\n file.result = result;\n }\n\n done(error, file);\n }\n });\n /**\n * @param {Error|null|undefined} [error]\n * @param {VFile|undefined} [file]\n * @returns {void}\n */\n\n function done(error, file) {\n if (error || !file) {\n reject(error);\n } else if (resolve) {\n resolve(file);\n } else {\n // @ts-expect-error: `callback` is defined if `resolve` is not.\n callback(null, file);\n }\n }\n }\n }\n /** @type {Processor['processSync']} */\n\n\n function processSync(doc) {\n /** @type {boolean|undefined} */\n let complete;\n processor.freeze();\n assertParser('processSync', processor.Parser);\n assertCompiler('processSync', processor.Compiler);\n const file = vfile(doc);\n processor.process(file, done);\n assertDone('processSync', 'process', complete);\n return file;\n /**\n * @param {Error|null|undefined} [error]\n * @returns {void}\n */\n\n function done(error) {\n complete = true;\n bail(error);\n }\n }\n}\n/**\n * Check if `value` is a constructor.\n *\n * @param {unknown} value\n * @param {string} name\n * @returns {boolean}\n */\n\n\nfunction newable(value, name) {\n return typeof value === 'function' && // Prototypes do exist.\n // type-coverage:ignore-next-line\n value.prototype && ( // A function with keys in its prototype is probably a constructor.\n // Classes’ prototype methods are not enumerable, so we check if some value\n // exists in the prototype.\n // type-coverage:ignore-next-line\n keys(value.prototype) || name in value.prototype);\n}\n/**\n * Check if `value` is an object with keys.\n *\n * @param {Record} value\n * @returns {boolean}\n */\n\n\nfunction keys(value) {\n /** @type {string} */\n let key;\n\n for (key in value) {\n if (own.call(value, key)) {\n return true;\n }\n }\n\n return false;\n}\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\n\n\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Parser`');\n }\n}\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\n\n\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `Compiler`');\n }\n}\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\n\n\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error('Cannot call `' + name + '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.');\n }\n}\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\n\n\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`'); // Fine.\n }\n}\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\n\n\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error('`' + name + '` finished async. Use `' + asyncName + '` instead');\n }\n}\n/**\n * @param {VFileCompatible} [value]\n * @returns {VFile}\n */\n\n\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value);\n}\n/**\n * @param {VFileCompatible} [value]\n * @returns {value is VFile}\n */\n\n\nfunction looksLikeAVFile(value) {\n return Boolean(value && typeof value === 'object' && 'message' in value && 'messages' in value);\n}\n/**\n * @param {unknown} [value]\n * @returns {value is VFileValue}\n */\n\n\nfunction looksLikeAVFileValue(value) {\n return typeof value === 'string' || isBuffer(value);\n}","/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n * Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n * Whether to use `alt` for `image`s.\n * @property {boolean | null | undefined} [includeHtml=true]\n * Whether to use `value` of HTML.\n */\n\n/** @type {Options} */\nconst emptyOptions = {};\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n * Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized `value`.\n */\n\nexport function toString(value, options) {\n const settings = options || emptyOptions;\n const includeImageAlt = typeof settings.includeImageAlt === 'boolean' ? settings.includeImageAlt : true;\n const includeHtml = typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true;\n return one(value, includeImageAlt, includeHtml);\n}\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized node.\n */\n\nfunction one(value, includeImageAlt, includeHtml) {\n if (node(value)) {\n if ('value' in value) {\n return value.type === 'html' && !includeHtml ? '' : value.value;\n }\n\n if (includeImageAlt && 'alt' in value && value.alt) {\n return value.alt;\n }\n\n if ('children' in value) {\n return all(value.children, includeImageAlt, includeHtml);\n }\n }\n\n if (Array.isArray(value)) {\n return all(value, includeImageAlt, includeHtml);\n }\n\n return '';\n}\n/**\n * Serialize a list of nodes.\n *\n * @param {Array} values\n * Thing to serialize.\n * @param {boolean} includeImageAlt\n * Include image `alt`s.\n * @param {boolean} includeHtml\n * Include HTML.\n * @returns {string}\n * Serialized nodes.\n */\n\n\nfunction all(values, includeImageAlt, includeHtml) {\n /** @type {Array} */\n const result = [];\n let index = -1;\n\n while (++index < values.length) {\n result[index] = one(values[index], includeImageAlt, includeHtml);\n }\n\n return result.join('');\n}\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n * Thing.\n * @returns {value is Node}\n * Whether `value` is a node.\n */\n\n\nfunction node(value) {\n return Boolean(value && typeof value === 'object');\n}","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {number} start\n * Index to remove/insert at (can be negative).\n * @param {number} remove\n * Number of items to remove.\n * @param {Array} items\n * Items to inject into `list`.\n * @returns {void}\n * Nothing.\n */\nexport function splice(list, start, remove, items) {\n const end = list.length;\n let chunkStart = 0;\n /** @type {Array} */\n\n let parameters; // Make start between zero and `end` (included).\n\n if (start < 0) {\n start = -start > end ? 0 : end + start;\n } else {\n start = start > end ? end : start;\n }\n\n remove = remove > 0 ? remove : 0; // No need to chunk the items if there’s only a couple (10k) items.\n\n if (items.length < 10000) {\n parameters = Array.from(items);\n parameters.unshift(start, remove); // @ts-expect-error Hush, it’s fine.\n\n list.splice(...parameters);\n } else {\n // Delete `remove` items starting from `start`\n if (remove) list.splice(start, remove); // Insert the items in chunks to not cause stack overflows.\n\n while (chunkStart < items.length) {\n parameters = items.slice(chunkStart, chunkStart + 10000);\n parameters.unshift(start, 0); // @ts-expect-error Hush, it’s fine.\n\n list.splice(...parameters);\n chunkStart += 10000;\n start += 10000;\n }\n }\n}\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * Item type.\n * @param {Array} list\n * List to operate on.\n * @param {Array} items\n * Items to add to `list`.\n * @returns {Array}\n * Either `list` or `items`.\n */\n\nexport function push(list, items) {\n if (list.length > 0) {\n splice(list, list.length, 0, items);\n return list;\n }\n\n return items;\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\nimport { splice } from 'micromark-util-chunked';\nconst hasOwnProperty = {}.hasOwnProperty;\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array} extensions\n * List of syntax extensions.\n * @returns {NormalizedExtension}\n * A single combined extension.\n */\n\nexport function combineExtensions(extensions) {\n /** @type {NormalizedExtension} */\n const all = {};\n let index = -1;\n\n while (++index < extensions.length) {\n syntaxExtension(all, extensions[index]);\n }\n\n return all;\n}\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n * Extension to merge into.\n * @param {Extension} extension\n * Extension to merge.\n * @returns {void}\n */\n\nfunction syntaxExtension(all, extension) {\n /** @type {keyof Extension} */\n let hook;\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined;\n /** @type {Record} */\n\n const left = maybe || (all[hook] = {});\n /** @type {Record | undefined} */\n\n const right = extension[hook];\n /** @type {string} */\n\n let code;\n\n if (right) {\n for (code in right) {\n if (!hasOwnProperty.call(left, code)) left[code] = [];\n const value = right[code];\n constructs( // @ts-expect-error Looks like a list.\n left[code], Array.isArray(value) ? value : value ? [value] : []);\n }\n }\n }\n}\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array} existing\n * @param {Array} list\n * @returns {void}\n */\n\n\nfunction constructs(existing, list) {\n let index = -1;\n /** @type {Array} */\n\n const before = [];\n\n while (++index < list.length) {\n // @ts-expect-error Looks like an object.\n ;\n (list[index].add === 'after' ? existing : before).push(list[index]);\n }\n\n splice(existing, 0, 0, before);\n}\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array} htmlExtensions\n * List of HTML extensions.\n * @returns {HtmlExtension}\n * A single combined HTML extension.\n */\n\n\nexport function combineHtmlExtensions(htmlExtensions) {\n /** @type {HtmlExtension} */\n const handlers = {};\n let index = -1;\n\n while (++index < htmlExtensions.length) {\n htmlExtension(handlers, htmlExtensions[index]);\n }\n\n return handlers;\n}\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n * Extension to merge into.\n * @param {HtmlExtension} extension\n * Extension to merge.\n * @returns {void}\n */\n\nfunction htmlExtension(all, extension) {\n /** @type {keyof HtmlExtension} */\n let hook;\n\n for (hook in extension) {\n const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined;\n const left = maybe || (all[hook] = {});\n const right = extension[hook];\n /** @type {keyof Handles} */\n\n let type;\n\n if (right) {\n for (type in right) {\n // @ts-expect-error assume document vs regular handler are managed correctly.\n left[type] = right[type];\n }\n }\n }\n}","// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\n\n/**\n * Regular expression that matches a unicode punctuation character.\n */\nexport const unicodePunctuationRegex = /[!-\\/:-@\\[-`\\{-~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/;","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport { unicodePunctuationRegex } from './lib/unicode-punctuation-regex.js';\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiAlpha = regexCheck(/[A-Za-z]/);\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/);\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/);\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\n\nexport function asciiControl(code) {\n return (// Special whitespace codes (which have negative values), C0 and Control\n // character DEL\n code !== null && (code < 32 || code === 127)\n );\n}\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiDigit = regexCheck(/\\d/);\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/);\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/);\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\n\nexport function markdownLineEnding(code) {\n return code !== null && code < -2;\n}\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\n\nexport function markdownLineEndingOrSpace(code) {\n return code !== null && (code < 0 || code === 32);\n}\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * Code.\n * @returns {boolean}\n * Whether it matches.\n */\n\nexport function markdownSpace(code) {\n return code === -2 || code === -1 || code === 32;\n} // Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex);\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n * Code.\n * @returns\n * Whether it matches.\n */\n\nexport const unicodeWhitespace = regexCheck(/\\s/);\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\n\nfunction regexCheck(regex) {\n return check;\n /**\n * Check whether a code matches the bound regex.\n *\n * @param {Code} code\n * Character code.\n * @returns {boolean}\n * Whether the character code matches the bound regex.\n */\n\n function check(code) {\n return code !== null && regex.test(String.fromCharCode(code));\n }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\nimport { markdownSpace } from 'micromark-util-character'; // To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * spaces in markdown are often optional, in which case this factory can be\n * used and `ok` will be switched to whether spaces were found or not\n * * one line ending or space can be detected with `markdownSpace(code)` right\n * before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {TokenType} type\n * Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n * Max (exclusive).\n * @returns\n * Start state.\n */\n\nexport function factorySpace(effects, ok, type, max) {\n const limit = max ? max - 1 : Number.POSITIVE_INFINITY;\n let size = 0;\n return start;\n /** @type {State} */\n\n function start(code) {\n if (markdownSpace(code)) {\n effects.enter(type);\n return prefix(code);\n }\n\n return ok(code);\n }\n /** @type {State} */\n\n\n function prefix(code) {\n if (markdownSpace(code) && size++ < limit) {\n effects.consume(code);\n return prefix;\n }\n\n effects.exit(type);\n return ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\n\nexport const content = {\n tokenize: initializeContent\n};\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n\nfunction initializeContent(effects) {\n const contentStart = effects.attempt(this.parser.constructs.contentInitial, afterContentStartConstruct, paragraphInitial);\n /** @type {Token} */\n\n let previous;\n return contentStart;\n /** @type {State} */\n\n function afterContentStartConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return factorySpace(effects, contentStart, 'linePrefix');\n }\n /** @type {State} */\n\n\n function paragraphInitial(code) {\n effects.enter('paragraph');\n return lineStart(code);\n }\n /** @type {State} */\n\n\n function lineStart(code) {\n const token = effects.enter('chunkText', {\n contentType: 'text',\n previous\n });\n\n if (previous) {\n previous.next = token;\n }\n\n previous = token;\n return data(code);\n }\n /** @type {State} */\n\n\n function data(code) {\n if (code === null) {\n effects.exit('chunkText');\n effects.exit('paragraph');\n effects.consume(code);\n return;\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code);\n effects.exit('chunkText');\n return lineStart;\n } // Data.\n\n\n effects.consume(code);\n return data;\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {InitialConstruct} */\n\nexport const document = {\n tokenize: initializeDocument\n};\n/** @type {Construct} */\n\nconst containerConstruct = {\n tokenize: tokenizeContainer\n};\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n\nfunction initializeDocument(effects) {\n const self = this;\n /** @type {Array} */\n\n const stack = [];\n let continued = 0;\n /** @type {TokenizeContext | undefined} */\n\n let childFlow;\n /** @type {Token | undefined} */\n\n let childToken;\n /** @type {number} */\n\n let lineStartOffset;\n return start;\n /** @type {State} */\n\n function start(code) {\n // First we iterate through the open blocks, starting with the root\n // document, and descending through last children down to the last open\n // block.\n // Each block imposes a condition that the line must satisfy if the block is\n // to remain open.\n // For example, a block quote requires a `>` character.\n // A paragraph requires a non-blank line.\n // In this phase we may match all or just some of the open blocks.\n // But we cannot close unmatched blocks yet, because we may have a lazy\n // continuation line.\n if (continued < stack.length) {\n const item = stack[continued];\n self.containerState = item[1];\n return effects.attempt(item[0].continuation, documentContinue, checkNewContainers)(code);\n } // Done.\n\n\n return checkNewContainers(code);\n }\n /** @type {State} */\n\n\n function documentContinue(code) {\n continued++; // Note: this field is called `_closeFlow` but it also closes containers.\n // Perhaps a good idea to rename it but it’s already used in the wild by\n // extensions.\n\n if (self.containerState._closeFlow) {\n self.containerState._closeFlow = undefined;\n\n if (childFlow) {\n closeFlow();\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when dealing with lazy lines in `writeToChild`.\n\n\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {Point | undefined} */\n\n let point; // Find the flow chunk.\n\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === 'chunkFlow') {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n }\n\n exitContainers(continued); // Fix positions.\n\n let index = indexBeforeExits;\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point);\n index++;\n } // Inject the exits earlier (they’re still also at the end).\n\n\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits)); // Discard the duplicate exits.\n\n self.events.length = index;\n return checkNewContainers(code);\n }\n\n return start(code);\n }\n /** @type {State} */\n\n\n function checkNewContainers(code) {\n // Next, after consuming the continuation markers for existing blocks, we\n // look for new block starts (e.g. `>` for a block quote).\n // If we encounter a new block start, we close any blocks unmatched in\n // step 1 before creating the new block as a child of the last matched\n // block.\n if (continued === stack.length) {\n // No need to `check` whether there’s a container, of `exitContainers`\n // would be moot.\n // We can instead immediately `attempt` to parse one.\n if (!childFlow) {\n return documentContinued(code);\n } // If we have concrete content, such as block HTML or fenced code,\n // we can’t have containers “pierce” into them, so we can immediately\n // start.\n\n\n if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n return flowStart(code);\n } // If we do have flow, it could still be a blank line,\n // but we’d be interrupting it w/ a new container if there’s a current\n // construct.\n // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n // needed in micromark-extension-gfm-table@1.0.6).\n\n\n self.interrupt = Boolean(childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack);\n } // Check if there is a new container.\n\n\n self.containerState = {};\n return effects.check(containerConstruct, thereIsANewContainer, thereIsNoNewContainer)(code);\n }\n /** @type {State} */\n\n\n function thereIsANewContainer(code) {\n if (childFlow) closeFlow();\n exitContainers(continued);\n return documentContinued(code);\n }\n /** @type {State} */\n\n\n function thereIsNoNewContainer(code) {\n self.parser.lazy[self.now().line] = continued !== stack.length;\n lineStartOffset = self.now().offset;\n return flowStart(code);\n }\n /** @type {State} */\n\n\n function documentContinued(code) {\n // Try new containers.\n self.containerState = {};\n return effects.attempt(containerConstruct, containerContinue, flowStart)(code);\n }\n /** @type {State} */\n\n\n function containerContinue(code) {\n continued++;\n stack.push([self.currentConstruct, self.containerState]); // Try another.\n\n return documentContinued(code);\n }\n /** @type {State} */\n\n\n function flowStart(code) {\n if (code === null) {\n if (childFlow) closeFlow();\n exitContainers(0);\n effects.consume(code);\n return;\n }\n\n childFlow = childFlow || self.parser.flow(self.now());\n effects.enter('chunkFlow', {\n contentType: 'flow',\n previous: childToken,\n _tokenizer: childFlow\n });\n return flowContinue(code);\n }\n /** @type {State} */\n\n\n function flowContinue(code) {\n if (code === null) {\n writeToChild(effects.exit('chunkFlow'), true);\n exitContainers(0);\n effects.consume(code);\n return;\n }\n\n if (markdownLineEnding(code)) {\n effects.consume(code);\n writeToChild(effects.exit('chunkFlow')); // Get ready for the next line.\n\n continued = 0;\n self.interrupt = undefined;\n return start;\n }\n\n effects.consume(code);\n return flowContinue;\n }\n /**\n * @param {Token} token\n * @param {boolean | undefined} [eof]\n * @returns {void}\n */\n\n\n function writeToChild(token, eof) {\n const stream = self.sliceStream(token);\n if (eof) stream.push(null);\n token.previous = childToken;\n if (childToken) childToken.next = token;\n childToken = token;\n childFlow.defineSkip(token.start);\n childFlow.write(stream); // Alright, so we just added a lazy line:\n //\n // ```markdown\n // > a\n // b.\n //\n // Or:\n //\n // > ~~~c\n // d\n //\n // Or:\n //\n // > | e |\n // f\n // ```\n //\n // The construct in the second example (fenced code) does not accept lazy\n // lines, so it marked itself as done at the end of its first line, and\n // then the content construct parses `d`.\n // Most constructs in markdown match on the first line: if the first line\n // forms a construct, a non-lazy line can’t “unmake” it.\n //\n // The construct in the third example is potentially a GFM table, and\n // those are *weird*.\n // It *could* be a table, from the first line, if the following line\n // matches a condition.\n // In this case, that second line is lazy, which “unmakes” the first line\n // and turns the whole into one content block.\n //\n // We’ve now parsed the non-lazy and the lazy line, and can figure out\n // whether the lazy line started a new flow block.\n // If it did, we exit the current containers between the two flow blocks.\n\n if (self.parser.lazy[token.start.line]) {\n let index = childFlow.events.length;\n\n while (index--) {\n if ( // The token starts before the line ending…\n childFlow.events[index][1].start.offset < lineStartOffset && ( // …and either is not ended yet…\n !childFlow.events[index][1].end || // …or ends after it.\n childFlow.events[index][1].end.offset > lineStartOffset)) {\n // Exit: there’s still something open, which means it’s a lazy line\n // part of something.\n return;\n }\n } // Note: this algorithm for moving events around is similar to the\n // algorithm when closing flow in `documentContinue`.\n\n\n const indexBeforeExits = self.events.length;\n let indexBeforeFlow = indexBeforeExits;\n /** @type {boolean | undefined} */\n\n let seen;\n /** @type {Point | undefined} */\n\n let point; // Find the previous chunk (the one before the lazy line).\n\n while (indexBeforeFlow--) {\n if (self.events[indexBeforeFlow][0] === 'exit' && self.events[indexBeforeFlow][1].type === 'chunkFlow') {\n if (seen) {\n point = self.events[indexBeforeFlow][1].end;\n break;\n }\n\n seen = true;\n }\n }\n\n exitContainers(continued); // Fix positions.\n\n index = indexBeforeExits;\n\n while (index < self.events.length) {\n self.events[index][1].end = Object.assign({}, point);\n index++;\n } // Inject the exits earlier (they’re still also at the end).\n\n\n splice(self.events, indexBeforeFlow + 1, 0, self.events.slice(indexBeforeExits)); // Discard the duplicate exits.\n\n self.events.length = index;\n }\n }\n /**\n * @param {number} size\n * @returns {void}\n */\n\n\n function exitContainers(size) {\n let index = stack.length; // Exit open containers.\n\n while (index-- > size) {\n const entry = stack[index];\n self.containerState = entry[1];\n entry[0].exit.call(self, effects);\n }\n\n stack.length = size;\n }\n\n function closeFlow() {\n childFlow.write([null]);\n childToken = undefined;\n childFlow = undefined;\n self.containerState._closeFlow = undefined;\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeContainer(effects, ok, nok) {\n // Always populated by defaults.\n return factorySpace(effects, effects.attempt(this.parser.constructs.document, ok, nok), 'linePrefix', this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4);\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start;\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n return markdownSpace(code) ? factorySpace(effects, after, 'linePrefix')(code) : after(code);\n }\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\nimport { splice } from 'micromark-util-chunked';\n/**\n * Tokenize subcontent.\n *\n * @param {Array} events\n * List of events.\n * @returns {boolean}\n * Whether subtokens were found.\n */\n\nexport function subtokenize(events) {\n /** @type {Record} */\n const jumps = {};\n let index = -1;\n /** @type {Event} */\n\n let event;\n /** @type {number | undefined} */\n\n let lineIndex;\n /** @type {number} */\n\n let otherIndex;\n /** @type {Event} */\n\n let otherEvent;\n /** @type {Array} */\n\n let parameters;\n /** @type {Array} */\n\n let subevents;\n /** @type {boolean | undefined} */\n\n let more;\n\n while (++index < events.length) {\n while (index in jumps) {\n index = jumps[index];\n }\n\n event = events[index]; // Add a hook for the GFM tasklist extension, which needs to know if text\n // is in the first content of a list item.\n\n if (index && event[1].type === 'chunkFlow' && events[index - 1][1].type === 'listItemPrefix') {\n subevents = event[1]._tokenizer.events;\n otherIndex = 0;\n\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === 'lineEndingBlank') {\n otherIndex += 2;\n }\n\n if (otherIndex < subevents.length && subevents[otherIndex][1].type === 'content') {\n while (++otherIndex < subevents.length) {\n if (subevents[otherIndex][1].type === 'content') {\n break;\n }\n\n if (subevents[otherIndex][1].type === 'chunkText') {\n subevents[otherIndex][1]._isInFirstContentOfListItem = true;\n otherIndex++;\n }\n }\n }\n } // Enter.\n\n\n if (event[0] === 'enter') {\n if (event[1].contentType) {\n Object.assign(jumps, subcontent(events, index));\n index = jumps[index];\n more = true;\n }\n } // Exit.\n else if (event[1]._container) {\n otherIndex = index;\n lineIndex = undefined;\n\n while (otherIndex--) {\n otherEvent = events[otherIndex];\n\n if (otherEvent[1].type === 'lineEnding' || otherEvent[1].type === 'lineEndingBlank') {\n if (otherEvent[0] === 'enter') {\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank';\n }\n\n otherEvent[1].type = 'lineEnding';\n lineIndex = otherIndex;\n }\n } else {\n break;\n }\n }\n\n if (lineIndex) {\n // Fix position.\n event[1].end = Object.assign({}, events[lineIndex][1].start); // Switch container exit w/ line endings.\n\n parameters = events.slice(lineIndex, index);\n parameters.unshift(event);\n splice(events, lineIndex, index - lineIndex + 1, parameters);\n }\n }\n }\n\n return !more;\n}\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array} events\n * @param {number} eventIndex\n * @returns {Record}\n */\n\nfunction subcontent(events, eventIndex) {\n const token = events[eventIndex][1];\n const context = events[eventIndex][2];\n let startPosition = eventIndex - 1;\n /** @type {Array} */\n\n const startPositions = [];\n const tokenizer = token._tokenizer || context.parser[token.contentType](token.start);\n const childEvents = tokenizer.events;\n /** @type {Array<[number, number]>} */\n\n const jumps = [];\n /** @type {Record} */\n\n const gaps = {};\n /** @type {Array} */\n\n let stream;\n /** @type {Token | undefined} */\n\n let previous;\n let index = -1;\n /** @type {Token | undefined} */\n\n let current = token;\n let adjust = 0;\n let start = 0;\n const breaks = [start]; // Loop forward through the linked tokens to pass them in order to the\n // subtokenizer.\n\n while (current) {\n // Find the position of the event for this token.\n while (events[++startPosition][1] !== current) {// Empty.\n }\n\n startPositions.push(startPosition);\n\n if (!current._tokenizer) {\n stream = context.sliceStream(current);\n\n if (!current.next) {\n stream.push(null);\n }\n\n if (previous) {\n tokenizer.defineSkip(current.start);\n }\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = true;\n }\n\n tokenizer.write(stream);\n\n if (current._isInFirstContentOfListItem) {\n tokenizer._gfmTasklistFirstContentOfListItem = undefined;\n }\n } // Unravel the next token.\n\n\n previous = current;\n current = current.next;\n } // Now, loop back through all events (and linked tokens), to figure out which\n // parts belong where.\n\n\n current = token;\n\n while (++index < childEvents.length) {\n if ( // Find a void token that includes a break.\n childEvents[index][0] === 'exit' && childEvents[index - 1][0] === 'enter' && childEvents[index][1].type === childEvents[index - 1][1].type && childEvents[index][1].start.line !== childEvents[index][1].end.line) {\n start = index + 1;\n breaks.push(start); // Help GC.\n\n current._tokenizer = undefined;\n current.previous = undefined;\n current = current.next;\n }\n } // Help GC.\n\n\n tokenizer.events = []; // If there’s one more token (which is the cases for lines that end in an\n // EOF), that’s perfect: the last point we found starts it.\n // If there isn’t then make sure any remaining content is added to it.\n\n if (current) {\n // Help GC.\n current._tokenizer = undefined;\n current.previous = undefined;\n } else {\n breaks.pop();\n } // Now splice the events from the subtokenizer into the current events,\n // moving back to front so that splice indices aren’t affected.\n\n\n index = breaks.length;\n\n while (index--) {\n const slice = childEvents.slice(breaks[index], breaks[index + 1]);\n const start = startPositions.pop();\n jumps.unshift([start, start + slice.length - 1]);\n splice(events, start, 2, slice);\n }\n\n index = -1;\n\n while (++index < jumps.length) {\n gaps[adjust + jumps[index][0]] = adjust + jumps[index][1];\n adjust += jumps[index][1] - jumps[index][0] - 1;\n }\n\n return gaps;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\n\nexport const content = {\n tokenize: tokenizeContent,\n resolve: resolveContent\n};\n/** @type {Construct} */\n\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n};\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\n\nfunction resolveContent(events) {\n subtokenize(events);\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous;\n return chunkStart;\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n\n function chunkStart(code) {\n effects.enter('content');\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n });\n return chunkInside(code);\n }\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n\n\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code);\n } // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n\n\n if (markdownLineEnding(code)) {\n return effects.check(continuationConstruct, contentContinue, contentEnd)(code);\n } // Data.\n\n\n effects.consume(code);\n return chunkInside;\n }\n /**\n *\n *\n * @type {State}\n */\n\n\n function contentEnd(code) {\n effects.exit('chunkContent');\n effects.exit('content');\n return ok(code);\n }\n /**\n *\n *\n * @type {State}\n */\n\n\n function contentContinue(code) {\n effects.consume(code);\n effects.exit('chunkContent');\n previous.next = effects.enter('chunkContent', {\n contentType: 'content',\n previous\n });\n previous = previous.next;\n return chunkInside;\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this;\n return startLookahead;\n /**\n *\n *\n * @type {State}\n */\n\n function startLookahead(code) {\n effects.exit('chunkContent');\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return factorySpace(effects, prefixed, 'linePrefix');\n }\n /**\n *\n *\n * @type {State}\n */\n\n\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n } // Always populated by defaults.\n\n\n const tail = self.events[self.events.length - 1];\n\n if (!self.parser.constructs.disable.null.includes('codeIndented') && tail && tail[1].type === 'linePrefix' && tail[2].sliceSerialize(tail[1], true).length >= 4) {\n return ok(code);\n }\n\n return effects.interrupt(self.parser.constructs.flow, nok, ok)(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\nimport { blankLine, content } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {InitialConstruct} */\n\nexport const flow = {\n tokenize: initializeFlow\n};\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n\nfunction initializeFlow(effects) {\n const self = this;\n const initial = effects.attempt( // Try to parse a blank line.\n blankLine, atBlankEnding, // Try to parse initial flow (essentially, only code).\n effects.attempt(this.parser.constructs.flowInitial, afterConstruct, factorySpace(effects, effects.attempt(this.parser.constructs.flow, afterConstruct, effects.attempt(content, afterConstruct)), 'linePrefix')));\n return initial;\n /** @type {State} */\n\n function atBlankEnding(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n\n effects.enter('lineEndingBlank');\n effects.consume(code);\n effects.exit('lineEndingBlank');\n self.currentConstruct = undefined;\n return initial;\n }\n /** @type {State} */\n\n\n function afterConstruct(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n self.currentConstruct = undefined;\n return initial;\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\nexport const resolver = {\n resolveAll: createResolver()\n};\nexport const string = initializeFactory('string');\nexport const text = initializeFactory('text');\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\n\nfunction initializeFactory(field) {\n return {\n tokenize: initializeText,\n resolveAll: createResolver(field === 'text' ? resolveAllLineSuffixes : undefined)\n };\n /**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\n\n function initializeText(effects) {\n const self = this;\n const constructs = this.parser.constructs[field];\n const text = effects.attempt(constructs, start, notText);\n return start;\n /** @type {State} */\n\n function start(code) {\n return atBreak(code) ? text(code) : notText(code);\n }\n /** @type {State} */\n\n\n function notText(code) {\n if (code === null) {\n effects.consume(code);\n return;\n }\n\n effects.enter('data');\n effects.consume(code);\n return data;\n }\n /** @type {State} */\n\n\n function data(code) {\n if (atBreak(code)) {\n effects.exit('data');\n return text(code);\n } // Data.\n\n\n effects.consume(code);\n return data;\n }\n /**\n * @param {Code} code\n * @returns {boolean}\n */\n\n\n function atBreak(code) {\n if (code === null) {\n return true;\n }\n\n const list = constructs[code];\n let index = -1;\n\n if (list) {\n // Always populated by defaults.\n while (++index < list.length) {\n const item = list[index];\n\n if (!item.previous || item.previous.call(self, self.previous)) {\n return true;\n }\n }\n }\n\n return false;\n }\n }\n}\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\n\n\nfunction createResolver(extraResolver) {\n return resolveAllText;\n /** @type {Resolver} */\n\n function resolveAllText(events, context) {\n let index = -1;\n /** @type {number | undefined} */\n\n let enter; // A rather boring computation (to merge adjacent `data` events) which\n // improves mm performance by 29%.\n\n while (++index <= events.length) {\n if (enter === undefined) {\n if (events[index] && events[index][1].type === 'data') {\n enter = index;\n index++;\n }\n } else if (!events[index] || events[index][1].type !== 'data') {\n // Don’t do anything if there is one data token.\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n index = enter + 2;\n }\n\n enter = undefined;\n }\n }\n\n return extraResolver ? extraResolver(events, context) : events;\n }\n}\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\n\n\nfunction resolveAllLineSuffixes(events, context) {\n let eventIndex = 0; // Skip first.\n\n while (++eventIndex <= events.length) {\n if ((eventIndex === events.length || events[eventIndex][1].type === 'lineEnding') && events[eventIndex - 1][1].type === 'data') {\n const data = events[eventIndex - 1][1];\n const chunks = context.sliceStream(data);\n let index = chunks.length;\n let bufferIndex = -1;\n let size = 0;\n /** @type {boolean | undefined} */\n\n let tabs;\n\n while (index--) {\n const chunk = chunks[index];\n\n if (typeof chunk === 'string') {\n bufferIndex = chunk.length;\n\n while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n size++;\n bufferIndex--;\n }\n\n if (bufferIndex) break;\n bufferIndex = -1;\n } // Number\n else if (chunk === -2) {\n tabs = true;\n size++;\n } else if (chunk === -1) {// Empty\n } else {\n // Replacement character, exit.\n index++;\n break;\n }\n }\n\n if (size) {\n const token = {\n type: eventIndex === events.length || tabs || size < 2 ? 'lineSuffix' : 'hardBreakTrailing',\n start: {\n line: data.end.line,\n column: data.end.column - size,\n offset: data.end.offset - size,\n _index: data.start._index + index,\n _bufferIndex: index ? bufferIndex : data.start._bufferIndex + bufferIndex\n },\n end: Object.assign({}, data.end)\n };\n data.end = Object.assign({}, token.start);\n\n if (data.start.offset === data.end.offset) {\n Object.assign(data, token);\n } else {\n events.splice(eventIndex, 0, ['enter', token, context], ['exit', token, context]);\n eventIndex += 2;\n }\n }\n\n eventIndex++;\n }\n }\n\n return events;\n}","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = [];\n let index = -1;\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll;\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context);\n called.push(resolve);\n }\n }\n\n return events;\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {void}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit | undefined} [from]\n * @returns {TokenizeContext}\n */\n\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = Object.assign(from ? Object.assign({}, from) : {\n line: 1,\n column: 1,\n offset: 0\n }, {\n _index: 0,\n _bufferIndex: -1\n });\n /** @type {Record} */\n\n const columnStart = {};\n /** @type {Array} */\n\n const resolveAllConstructs = [];\n /** @type {Array} */\n\n let chunks = [];\n /** @type {Array} */\n\n let stack = [];\n /** @type {boolean | undefined} */\n\n let consumed = true;\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n\n const effects = {\n consume,\n enter,\n exit,\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n\n const context = {\n previous: null,\n code: null,\n containerState: {},\n events: [],\n parser,\n sliceStream,\n sliceSerialize,\n now,\n defineSkip,\n write\n };\n /**\n * The state function.\n *\n * @type {State | void}\n */\n\n let state = initialize.tokenize.call(context, effects);\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n\n let expectedCode;\n\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n\n return context;\n /** @type {TokenizeContext['write']} */\n\n function write(slice) {\n chunks = push(chunks, slice);\n main(); // Exit if we’re not done, resolve might change stuff.\n\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n\n addResult(initialize, 0); // Otherwise, resolve, and exit.\n\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n } //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n\n\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n /** @type {TokenizeContext['sliceStream']} */\n\n\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n /** @type {TokenizeContext['now']} */\n\n\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n line,\n column,\n offset,\n _index,\n _bufferIndex\n } = point;\n return {\n line,\n column,\n offset,\n _index,\n _bufferIndex\n };\n }\n /** @type {TokenizeContext['defineSkip']} */\n\n\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n } //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {void}\n */\n\n\n function main() {\n /** @type {number} */\n let chunkIndex;\n\n while (point._index < chunks.length) {\n const chunk = chunks[point._index]; // If we’re in a buffer chunk, loop through it.\n\n if (typeof chunk === 'string') {\n chunkIndex = point._index;\n\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * @returns {void}\n */\n\n\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n /** @type {Effects['consume']} */\n\n\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n } // Not in a string chunk.\n\n\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++; // At end of string chunk.\n // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n // strings.\n\n if (point._bufferIndex === chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n } // Expose the previous character.\n\n\n context.previous = code; // Mark as consumed.\n\n consumed = true;\n }\n /** @type {Effects['enter']} */\n\n\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n /** @type {Effects['exit']} */\n\n\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n\n\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n\n\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n */\n\n\n function constructFactory(onreturn, fields) {\n return hook;\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | Construct | ConstructRecord} constructs\n * @param {State} returnState\n * @param {State | undefined} [bogusState]\n * @returns {State}\n */\n\n function hook(constructs, returnState, bogusState) {\n /** @type {Array} */\n let listOfConstructs;\n /** @type {number} */\n\n let constructIndex;\n /** @type {Construct} */\n\n let currentConstruct;\n /** @type {Info} */\n\n let info;\n return Array.isArray(constructs)\n /* c8 ignore next 1 */\n ? handleListOfConstructs(constructs) : 'tokenize' in constructs ? // @ts-expect-error Looks like a construct.\n handleListOfConstructs([constructs]) : handleMapOfConstructs(constructs);\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * @returns {State}\n */\n\n function handleMapOfConstructs(map) {\n return start;\n /** @type {State} */\n\n function start(code) {\n const def = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [// To do: add more extension tests.\n\n /* c8 ignore next 2 */\n ...(Array.isArray(def) ? def : def ? [def] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n /**\n * Handle a list of construct.\n *\n * @param {Array} list\n * @returns {State}\n */\n\n\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n\n if (list.length === 0) {\n return bogusState;\n }\n\n return handleConstruct(list[constructIndex]);\n }\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * @returns {State}\n */\n\n\n function handleConstruct(construct) {\n return start;\n /** @type {State} */\n\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n\n if (!construct.partial) {\n context.currentConstruct = construct;\n } // Always populated by defaults.\n\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n\n return construct.tokenize.call( // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n /** @type {State} */\n\n\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n /** @type {State} */\n\n\n function nok(code) {\n consumed = true;\n info.restore();\n\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n\n return bogusState;\n }\n }\n }\n /**\n * @param {Construct} construct\n * @param {number} from\n * @returns {void}\n */\n\n\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n /**\n * Store state.\n *\n * @returns {Info}\n */\n\n\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n restore,\n from: startEventsIndex\n };\n /**\n * Restore state.\n *\n * @returns {void}\n */\n\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {void}\n */\n\n\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array} chunks\n * @param {Pick} token\n * @returns {Array}\n */\n\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array} */\n\n let view;\n\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n\n if (startBufferIndex > -1) {\n const head = view[0];\n\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n } else {\n view.shift();\n }\n }\n\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n\n return view;\n}\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\n\n\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array} */\n\n const result = [];\n /** @type {boolean | undefined} */\n\n let atTab;\n\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n\n let value;\n\n if (typeof chunk === 'string') {\n value = chunk;\n } else switch (chunk) {\n case -5:\n {\n value = '\\r';\n break;\n }\n\n case -4:\n {\n value = '\\n';\n break;\n }\n\n case -3:\n {\n value = '\\r' + '\\n';\n break;\n }\n\n case -2:\n {\n value = expandTabs ? ' ' : '\\t';\n break;\n }\n\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = ' ';\n break;\n }\n\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n\n atTab = chunk === -2;\n result.push(value);\n }\n\n return result.join('');\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0;\n /** @type {NonNullable} */\n\n let marker;\n return start;\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('thematicBreak'); // To do: parse indent like `markdown-rs`.\n\n return before(code);\n }\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function before(code) {\n marker = code;\n return atBreak(code);\n }\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence');\n return sequence(code);\n }\n\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit('thematicBreak');\n return ok(code);\n }\n\n return nok(code);\n }\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequence(code) {\n if (code === marker) {\n effects.consume(code);\n size++;\n return sequence;\n }\n\n effects.exit('thematicBreakSequence');\n return markdownSpace(code) ? factorySpace(effects, atBreak, 'whitespace')(code) : atBreak(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiDigit, markdownSpace } from 'micromark-util-character';\nimport { blankLine } from './blank-line.js';\nimport { thematicBreak } from './thematic-break.js';\n/** @type {Construct} */\n\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n};\n/** @type {Construct} */\n\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n};\n/** @type {Construct} */\n\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}; // To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\n\nfunction tokenizeListStart(effects, ok, nok) {\n const self = this;\n const tail = self.events[self.events.length - 1];\n let initialSize = tail && tail[1].type === 'linePrefix' ? tail[2].sliceSerialize(tail[1], true).length : 0;\n let size = 0;\n return start;\n /** @type {State} */\n\n function start(code) {\n const kind = self.containerState.type || (code === 42 || code === 43 || code === 45 ? 'listUnordered' : 'listOrdered');\n\n if (kind === 'listUnordered' ? !self.containerState.marker || code === self.containerState.marker : asciiDigit(code)) {\n if (!self.containerState.type) {\n self.containerState.type = kind;\n effects.enter(kind, {\n _container: true\n });\n }\n\n if (kind === 'listUnordered') {\n effects.enter('listItemPrefix');\n return code === 42 || code === 45 ? effects.check(thematicBreak, nok, atMarker)(code) : atMarker(code);\n }\n\n if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix');\n effects.enter('listItemValue');\n return inside(code);\n }\n }\n\n return nok(code);\n }\n /** @type {State} */\n\n\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code);\n return inside;\n }\n\n if ((!self.interrupt || size < 2) && (self.containerState.marker ? code === self.containerState.marker : code === 41 || code === 46)) {\n effects.exit('listItemValue');\n return atMarker(code);\n }\n\n return nok(code);\n }\n /**\n * @type {State}\n **/\n\n\n function atMarker(code) {\n effects.enter('listItemMarker');\n effects.consume(code);\n effects.exit('listItemMarker');\n self.containerState.marker = self.containerState.marker || code;\n return effects.check(blankLine, // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank, effects.attempt(listItemPrefixWhitespaceConstruct, endOfPrefix, otherPrefix));\n }\n /** @type {State} */\n\n\n function onBlank(code) {\n self.containerState.initialBlankLine = true;\n initialSize++;\n return endOfPrefix(code);\n }\n /** @type {State} */\n\n\n function otherPrefix(code) {\n if (markdownSpace(code)) {\n effects.enter('listItemPrefixWhitespace');\n effects.consume(code);\n effects.exit('listItemPrefixWhitespace');\n return endOfPrefix;\n }\n\n return nok(code);\n }\n /** @type {State} */\n\n\n function endOfPrefix(code) {\n self.containerState.size = initialSize + self.sliceSerialize(effects.exit('listItemPrefix'), true).length;\n return ok(code);\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\n\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this;\n self.containerState._closeFlow = undefined;\n return effects.check(blankLine, onBlank, notBlank);\n /** @type {State} */\n\n function onBlank(code) {\n self.containerState.furtherBlankLines = self.containerState.furtherBlankLines || self.containerState.initialBlankLine; // We have a blank line.\n // Still, try to consume at most the items size.\n\n return factorySpace(effects, ok, 'listItemIndent', self.containerState.size + 1)(code);\n }\n /** @type {State} */\n\n\n function notBlank(code) {\n if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return notInCurrentItem(code);\n }\n\n self.containerState.furtherBlankLines = undefined;\n self.containerState.initialBlankLine = undefined;\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code);\n }\n /** @type {State} */\n\n\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true; // As we’re closing flow, we’re no longer interrupting.\n\n self.interrupt = undefined; // Always populated by defaults.\n\n return factorySpace(effects, effects.attempt(list, ok, nok), 'linePrefix', self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\n\n\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'listItemIndent', self.containerState.size + 1);\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'listItemIndent' && tail[2].sliceSerialize(tail[1], true).length === self.containerState.size ? ok(code) : nok(code);\n }\n}\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\n\n\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type);\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\n\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this; // Always populated by defaults.\n\n return factorySpace(effects, afterPrefix, 'listItemPrefixWhitespace', self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4 + 1);\n /** @type {State} */\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return !markdownSpace(code) && tail && tail[1].type === 'listItemPrefixWhitespace' ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this;\n return start;\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n if (code === 62) {\n const state = self.containerState;\n\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n });\n state.open = true;\n }\n\n effects.enter('blockQuotePrefix');\n effects.enter('blockQuoteMarker');\n effects.consume(code);\n effects.exit('blockQuoteMarker');\n return after;\n }\n\n return nok(code);\n }\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n if (markdownSpace(code)) {\n effects.enter('blockQuotePrefixWhitespace');\n effects.consume(code);\n effects.exit('blockQuotePrefixWhitespace');\n effects.exit('blockQuotePrefix');\n return ok;\n }\n\n effects.exit('blockQuotePrefix');\n return ok(code);\n }\n}\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this;\n return contStart;\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n return factorySpace(effects, contBefore, 'linePrefix', self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n\n return contBefore(code);\n }\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code);\n }\n}\n/** @type {Exiter} */\n\n\nfunction exit(effects) {\n effects.exit('blockQuote');\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\nimport { asciiControl, markdownLineEndingOrSpace, markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * \n * b>\n * \n * \n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type for whole (`` or `b`).\n * @param {TokenType} literalType\n * Type when enclosed (``).\n * @param {TokenType} literalMarkerType\n * Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n * Type when not enclosed (`b`).\n * @param {TokenType} stringType\n * Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n * Depth of nested parens (inclusive).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\n\nexport function factoryDestination(effects, ok, nok, type, literalType, literalMarkerType, rawType, stringType, max) {\n const limit = max || Number.POSITIVE_INFINITY;\n let balance = 0;\n return start;\n /**\n * Start of destination.\n *\n * ```markdown\n * > | \n * ^\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n if (code === 60) {\n effects.enter(type);\n effects.enter(literalType);\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n return enclosedBefore;\n } // ASCII control, space, closing paren.\n\n\n if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n return nok(code);\n }\n\n effects.enter(type);\n effects.enter(rawType);\n effects.enter(stringType);\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return raw(code);\n }\n /**\n * After `<`, at an enclosed destination.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function enclosedBefore(code) {\n if (code === 62) {\n effects.enter(literalMarkerType);\n effects.consume(code);\n effects.exit(literalMarkerType);\n effects.exit(literalType);\n effects.exit(type);\n return ok;\n }\n\n effects.enter(stringType);\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return enclosed(code);\n }\n /**\n * In enclosed destination.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function enclosed(code) {\n if (code === 62) {\n effects.exit('chunkString');\n effects.exit(stringType);\n return enclosedBefore(code);\n }\n\n if (code === null || code === 60 || markdownLineEnding(code)) {\n return nok(code);\n }\n\n effects.consume(code);\n return code === 92 ? enclosedEscape : enclosed;\n }\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function enclosedEscape(code) {\n if (code === 60 || code === 62 || code === 92) {\n effects.consume(code);\n return enclosed;\n }\n\n return enclosed(code);\n }\n /**\n * In raw destination.\n *\n * ```markdown\n * > | aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function raw(code) {\n if (!balance && (code === null || code === 41 || markdownLineEndingOrSpace(code))) {\n effects.exit('chunkString');\n effects.exit(stringType);\n effects.exit(rawType);\n effects.exit(type);\n return ok(code);\n }\n\n if (balance < limit && code === 40) {\n effects.consume(code);\n balance++;\n return raw;\n }\n\n if (code === 41) {\n effects.consume(code);\n balance--;\n return raw;\n } // ASCII control (but *not* `\\0`) and space and `(`.\n // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n // doesn’t.\n\n\n if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n return nok(code);\n }\n\n effects.consume(code);\n return code === 92 ? rawEscape : raw;\n }\n /**\n * After `\\`, at special character.\n *\n * ```markdown\n * > | a\\*a\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function rawEscape(code) {\n if (code === 40 || code === 41 || code === 92) {\n effects.consume(code);\n return raw;\n }\n\n return raw(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n * Tokenize context.\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n * Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n * Type for the identifier (`a`).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\n\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n const self = this;\n let size = 0;\n /** @type {boolean} */\n\n let seen;\n return start;\n /**\n * Start of label.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.enter(stringType);\n return atBreak;\n }\n /**\n * In label, at something, before something else.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function atBreak(code) {\n if (size > 999 || code === null || code === 91 || code === 93 && !seen || // To do: remove in the future once we’ve switched from\n // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n // which doesn’t need this.\n // Hidden footnotes hook.\n\n /* c8 ignore next 3 */\n code === 94 && !size && '_hiddenFootnoteSupport' in self.parser.constructs) {\n return nok(code);\n }\n\n if (code === 93) {\n effects.exit(stringType);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n } // To do: indent? Link chunks and EOLs together?\n\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return atBreak;\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return labelInside(code);\n }\n /**\n * In label, in text.\n *\n * ```markdown\n * > | [a]\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function labelInside(code) {\n if (code === null || code === 91 || code === 93 || markdownLineEnding(code) || size++ > 999) {\n effects.exit('chunkString');\n return atBreak(code);\n }\n\n effects.consume(code);\n if (!seen) seen = !markdownSpace(code);\n return code === 92 ? labelEscape : labelInside;\n }\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | [a\\*a]\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n\n return labelInside(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n * b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @param {State} nok\n * State switched to when unsuccessful.\n * @param {TokenType} type\n * Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n * Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n * Type for the value (`a`).\n * @returns {State}\n * Start state.\n */\n// eslint-disable-next-line max-params\n\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n /** @type {NonNullable} */\n let marker;\n return start;\n /**\n * Start of title.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n if (code === 34 || code === 39 || code === 40) {\n effects.enter(type);\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n marker = code === 40 ? 41 : code;\n return begin;\n }\n\n return nok(code);\n }\n /**\n * After opening marker.\n *\n * This is also used at the closing marker.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function begin(code) {\n if (code === marker) {\n effects.enter(markerType);\n effects.consume(code);\n effects.exit(markerType);\n effects.exit(type);\n return ok;\n }\n\n effects.enter(stringType);\n return atBreak(code);\n }\n /**\n * At something, before something else.\n *\n * ```markdown\n * > | \"a\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function atBreak(code) {\n if (code === marker) {\n effects.exit(stringType);\n return begin(marker);\n }\n\n if (code === null) {\n return nok(code);\n } // Note: blank lines can’t exist in content.\n\n\n if (markdownLineEnding(code)) {\n // To do: use `space_or_tab_eol_with_options`, connect.\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return factorySpace(effects, atBreak, 'linePrefix');\n }\n\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return inside(code);\n }\n /**\n *\n *\n * @type {State}\n */\n\n\n function inside(code) {\n if (code === marker || code === null || markdownLineEnding(code)) {\n effects.exit('chunkString');\n return atBreak(code);\n }\n\n effects.consume(code);\n return code === 92 ? escape : inside;\n }\n /**\n * After `\\`, at a special character.\n *\n * ```markdown\n * > | \"a\\*b\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function escape(code) {\n if (code === marker || code === 92) {\n effects.consume(code);\n return inside;\n }\n\n return inside(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * * line endings or spaces in markdown are often optional, in which case this\n * factory can be used and `ok` will be switched to whether spaces were found\n * or not\n * * one line ending or space can be detected with\n * `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n * Context.\n * @param {State} ok\n * State switched to when successful.\n * @returns\n * Start state.\n */\n\nexport function factoryWhitespace(effects, ok) {\n /** @type {boolean} */\n let seen;\n return start;\n /** @type {State} */\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n seen = true;\n return start;\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, start, seen ? 'linePrefix' : 'lineSuffix')(code);\n }\n\n return ok(code);\n }\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n * Identifier to normalize.\n * @returns {string}\n * Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n return value // Collapse markdown whitespace.\n .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase\n // counterpart is uppercased will result in a different uppercase\n // character.\n // Hence, to get that form, we perform both lower- and uppercase.\n // Upper case makes sure keys will not interact with default prototypal\n // methods: no method is uppercase.\n .toLowerCase().toUpperCase();\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factorySpace } from 'micromark-factory-space';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\n/** @type {Construct} */\n\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n};\n/** @type {Construct} */\n\nconst titleBefore = {\n tokenize: tokenizeTitleBefore,\n partial: true\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this;\n /** @type {string} */\n\n let identifier;\n return start;\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter('definition');\n return before(code);\n }\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n return factoryLabel.call(self, effects, labelAfter, // Note: we don’t need to reset the way `markdown-rs` does.\n nok, 'definitionLabel', 'definitionLabelMarker', 'definitionLabelString')(code);\n }\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function labelAfter(code) {\n identifier = normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1));\n\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n return markerAfter;\n }\n\n return nok(code);\n }\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, destinationBefore)(code) : destinationBefore(code);\n }\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function destinationBefore(code) {\n return factoryDestination(effects, destinationAfter, // Note: we don’t need to reset the way `markdown-rs` does.\n nok, 'definitionDestination', 'definitionDestinationLiteral', 'definitionDestinationLiteralMarker', 'definitionDestinationRaw', 'definitionDestinationString')(code);\n }\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code);\n }\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n return markdownSpace(code) ? factorySpace(effects, afterWhitespace, 'whitespace')(code) : afterWhitespace(code);\n }\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition'); // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n\n self.parser.defined.push(identifier); // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n\n return ok(code);\n }\n\n return nok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore;\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, beforeMarker)(code) : nok(code);\n }\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function beforeMarker(code) {\n return factoryTitle(effects, titleAfter, nok, 'definitionTitle', 'definitionTitleMarker', 'definitionTitleString')(code);\n }\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function titleAfter(code) {\n return markdownSpace(code) ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code) : titleAfterOptionalWhitespace(code);\n }\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function titleAfterOptionalWhitespace(code) {\n return code === null || markdownLineEnding(code) ? ok(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n};\n/** @type {Construct} */\n\nconst furtherStart = {\n tokenize: tokenizeFurtherStart,\n partial: true\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this;\n return start;\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n effects.enter('codeIndented'); // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code);\n }\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'linePrefix' && tail[2].sliceSerialize(tail[1], true).length >= 4 ? atBreak(code) : nok(code);\n }\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n\n\n function atBreak(code) {\n if (code === null) {\n return after(code);\n }\n\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code);\n }\n\n effects.enter('codeFlowValue');\n return inside(code);\n }\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n\n\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue');\n return atBreak(code);\n }\n\n effects.consume(code);\n return inside;\n }\n /** @type {State} */\n\n\n function after(code) {\n effects.exit('codeIndented'); // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n\n return ok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this;\n return furtherStart;\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\n // If this is a lazy line, it can’t be code.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return furtherStart;\n } // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n\n\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code);\n }\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'linePrefix' && tail[2].sliceSerialize(tail[1], true).length >= 4 ? ok(code) : markdownLineEnding(code) ? furtherStart(code) : nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n};\n/** @type {Resolver} */\n\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length;\n /** @type {number | undefined} */\n\n let content;\n /** @type {number | undefined} */\n\n let text;\n /** @type {number | undefined} */\n\n let definition; // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index;\n break;\n }\n\n if (events[index][1].type === 'paragraph') {\n text = index;\n }\n } // Exit\n else {\n if (events[index][1].type === 'content') {\n // Remove the content end (if needed we’ll add it later)\n events.splice(index, 1);\n }\n\n if (!definition && events[index][1].type === 'definition') {\n definition = index;\n }\n }\n }\n\n const heading = {\n type: 'setextHeading',\n start: Object.assign({}, events[text][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n }; // Change the paragraph to setext heading text.\n\n events[text][1].type = 'setextHeadingText'; // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\n\n if (definition) {\n events.splice(text, 0, ['enter', heading, context]);\n events.splice(definition + 1, 0, ['exit', events[content][1], context]);\n events[content][1].end = Object.assign({}, events[definition][1].end);\n } else {\n events[content][1] = heading;\n } // Add the heading exit at the end.\n\n\n events.push(['exit', heading, context]);\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable} */\n\n let marker;\n return start;\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n let index = self.events.length;\n /** @type {boolean | undefined} */\n\n let paragraph; // Find an opening.\n\n while (index--) {\n // Skip enter/exit of line ending, line prefix, and content.\n // We can now either have a definition or a paragraph.\n if (self.events[index][1].type !== 'lineEnding' && self.events[index][1].type !== 'linePrefix' && self.events[index][1].type !== 'content') {\n paragraph = self.events[index][1].type === 'paragraph';\n break;\n }\n } // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n\n\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine');\n marker = code;\n return before(code);\n }\n\n return nok(code);\n }\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function before(code) {\n effects.enter('setextHeadingLineSequence');\n return inside(code);\n }\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n\n effects.exit('setextHeadingLineSequence');\n return markdownSpace(code) ? factorySpace(effects, after, 'lineSuffix')(code) : after(code);\n }\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine');\n return ok(code);\n }\n\n return nok(code);\n }\n}","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * .\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = ['address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'search', 'section', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul'];\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * .\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\n\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea'];","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { htmlBlockNames, htmlRawNames } from 'micromark-util-html-tag-name';\nimport { blankLine } from './blank-line.js';\n/** @type {Construct} */\n\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n};\n/** @type {Construct} */\n\nconst blankLineBefore = {\n tokenize: tokenizeBlankLineBefore,\n partial: true\n};\nconst nonLazyContinuationStart = {\n tokenize: tokenizeNonLazyContinuationStart,\n partial: true\n};\n/** @type {Resolver} */\n\nfunction resolveToHtmlFlow(events) {\n let index = events.length;\n\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break;\n }\n }\n\n if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n // Add the prefix start to the HTML token.\n events[index][1].start = events[index - 2][1].start; // Add the prefix start to the HTML line token.\n\n events[index + 1][1].start = events[index - 2][1].start; // Remove the line prefix.\n\n events.splice(index - 2, 2);\n }\n\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this;\n /** @type {number} */\n\n let marker;\n /** @type {boolean} */\n\n let closingTag;\n /** @type {string} */\n\n let buffer;\n /** @type {number} */\n\n let index;\n /** @type {Code} */\n\n let markerB;\n return start;\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code);\n }\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function before(code) {\n effects.enter('htmlFlow');\n effects.enter('htmlFlowData');\n effects.consume(code);\n return open;\n }\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n\n if (code === 47) {\n effects.consume(code);\n closingTag = true;\n return tagCloseStart;\n }\n\n if (code === 63) {\n effects.consume(code);\n marker = 3; // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // While we’re in an instruction instead of a declaration, we’re on a `?`\n // right now, so we do need to search for `>`, similar to declarations.\n\n return self.interrupt ? ok : continuationDeclarationInside;\n } // ASCII alphabetical.\n\n\n if (asciiAlpha(code)) {\n effects.consume(code); // @ts-expect-error: not null.\n\n buffer = String.fromCharCode(code);\n return tagName;\n }\n\n return nok(code);\n }\n /**\n * After ` | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n marker = 2;\n return commentOpenInside;\n }\n\n if (code === 91) {\n effects.consume(code);\n marker = 5;\n index = 0;\n return cdataOpenInside;\n } // ASCII alphabetical.\n\n\n if (asciiAlpha(code)) {\n effects.consume(code);\n marker = 4; // // Do not form containers.\n // tokenizer.concrete = true\n\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n\n return nok(code);\n }\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code); // // Do not form containers.\n // tokenizer.concrete = true\n\n return self.interrupt ? ok : continuationDeclarationInside;\n }\n\n return nok(code);\n }\n /**\n * After ` | &<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n\n\n function cdataOpenInside(code) {\n const value = 'CDATA[';\n\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation;\n }\n\n return cdataOpenInside;\n }\n\n return nok(code);\n }\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code); // @ts-expect-error: not null.\n\n buffer = String.fromCharCode(code);\n return tagName;\n }\n\n return nok(code);\n }\n /**\n * In tag name.\n *\n * ```markdown\n * > | \n * ^^\n * > | \n * ^^\n * ```\n *\n * @type {State}\n */\n\n\n function tagName(code) {\n if (code === null || code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n const slash = code === 47;\n const name = buffer.toLowerCase();\n\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1; // // Do not form containers.\n // tokenizer.concrete = true\n\n return self.interrupt ? ok(code) : continuation(code);\n }\n\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6;\n\n if (slash) {\n effects.consume(code);\n return basicSelfClosing;\n } // // Do not form containers.\n // tokenizer.concrete = true\n\n\n return self.interrupt ? ok(code) : continuation(code);\n }\n\n marker = 7; // Do not support complete HTML when interrupting.\n\n return self.interrupt && !self.parser.lazy[self.now().line] ? nok(code) : closingTag ? completeClosingTagAfter(code) : completeAttributeNameBefore(code);\n } // ASCII alphanumerical and `-`.\n\n\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return tagName;\n }\n\n return nok(code);\n }\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > |
\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code); // // Do not form containers.\n // tokenizer.concrete = true\n\n return self.interrupt ? ok : continuation;\n }\n\n return nok(code);\n }\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeClosingTagAfter;\n }\n\n return completeEnd(code);\n }\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code);\n return completeEnd;\n } // ASCII alphanumerical and `:` and `_`.\n\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameBefore;\n }\n\n return completeEnd(code);\n }\n /**\n * In attribute name.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return completeAttributeName;\n }\n\n return completeAttributeNameAfter(code);\n }\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeNameAfter;\n }\n\n return completeAttributeNameBefore(code);\n }\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code);\n markerB = code;\n return completeAttributeValueQuoted;\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAttributeValueBefore;\n }\n\n return completeAttributeValueUnquoted(code);\n }\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code);\n markerB = null;\n return completeAttributeValueQuotedAfter;\n }\n\n if (code === null || markdownLineEnding(code)) {\n return nok(code);\n }\n\n effects.consume(code);\n return completeAttributeValueQuoted;\n }\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 47 || code === 60 || code === 61 || code === 62 || code === 96 || markdownLineEndingOrSpace(code)) {\n return completeAttributeNameAfter(code);\n }\n\n effects.consume(code);\n return completeAttributeValueUnquoted;\n }\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code);\n }\n\n return nok(code);\n }\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code);\n return completeAfter;\n }\n\n return nok(code);\n }\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code);\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return completeAfter;\n }\n\n return nok(code);\n }\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationCommentInside;\n }\n\n if (code === 60 && marker === 1) {\n effects.consume(code);\n return continuationRawTagOpen;\n }\n\n if (code === 62 && marker === 4) {\n effects.consume(code);\n return continuationClose;\n }\n\n if (code === 63 && marker === 3) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n\n if (code === 93 && marker === 5) {\n effects.consume(code);\n return continuationCdataInside;\n }\n\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit('htmlFlowData');\n return effects.check(blankLineBefore, continuationAfter, continuationStart)(code);\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData');\n return continuationStart(code);\n }\n\n effects.consume(code);\n return continuation;\n }\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n\n\n function continuationStart(code) {\n return effects.check(nonLazyContinuationStart, continuationStartNonLazy, continuationAfter)(code);\n }\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n\n\n function continuationStartNonLazy(code) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return continuationBefore;\n }\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | \n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code);\n }\n\n effects.enter('htmlFlowData');\n return continuation(code);\n }\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n\n return continuation(code);\n }\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n\n return continuation(code);\n }\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n\n return continuation(code);\n }\n\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code); // @ts-expect-error: not null.\n\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n\n return continuation(code);\n }\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n\n return continuation(code);\n }\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n } // More dashes.\n\n\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n\n return continuation(code);\n }\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData');\n return continuationAfter(code);\n }\n\n effects.consume(code);\n return continuationClose;\n }\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function continuationAfter(code) {\n effects.exit('htmlFlow'); // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n\n return ok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return after;\n }\n\n return nok(code);\n }\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n};\n/** @type {Construct} */\n\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n\n const closeStart = {\n tokenize: tokenizeCloseStart,\n partial: true\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable} */\n\n let marker;\n return start;\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === 'linePrefix' ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter('codeFenced');\n effects.enter('codeFencedFence');\n effects.enter('codeFencedFenceSequence');\n return sequenceOpen(code);\n }\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n\n if (sizeOpen < 3) {\n return nok(code);\n }\n\n effects.exit('codeFencedFenceSequence');\n return markdownSpace(code) ? factorySpace(effects, infoBefore, 'whitespace')(code) : infoBefore(code);\n }\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence');\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n\n effects.enter('codeFencedFenceInfo');\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return info(code);\n }\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString');\n effects.exit('codeFencedFenceInfo');\n return infoBefore(code);\n }\n\n if (markdownSpace(code)) {\n effects.exit('chunkString');\n effects.exit('codeFencedFenceInfo');\n return factorySpace(effects, metaBefore, 'whitespace')(code);\n }\n\n if (code === 96 && code === marker) {\n return nok(code);\n }\n\n effects.consume(code);\n return info;\n }\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n\n effects.enter('codeFencedFenceMeta');\n effects.enter('chunkString', {\n contentType: 'string'\n });\n return meta(code);\n }\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString');\n effects.exit('codeFencedFenceMeta');\n return infoBefore(code);\n }\n\n if (code === 96 && code === marker) {\n return nok(code);\n }\n\n effects.consume(code);\n return meta;\n }\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function contentBefore(code) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return contentStart;\n }\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, 'linePrefix', initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n\n effects.enter('codeFlowValue');\n return contentChunk(code);\n }\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n\n\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue');\n return beforeContentChunk(code);\n }\n\n effects.consume(code);\n return contentChunk;\n }\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n effects.exit('codeFenced');\n return ok(code);\n }\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n /**\n *\n *\n * @type {State}\n */\n\n function startBefore(code) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return start;\n }\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function start(code) {\n // Always populated by defaults.\n // To do: `enter` here or in next state?\n effects.enter('codeFencedFence');\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, 'linePrefix', self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter('codeFencedFenceSequence');\n return sequenceClose(code);\n }\n\n return nok(code);\n }\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n\n if (size >= sizeOpen) {\n effects.exit('codeFencedFenceSequence');\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code) : sequenceCloseAfter(code);\n }\n\n return nok(code);\n }\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence');\n return ok(code);\n }\n\n return nok(code);\n }\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n /**\n *\n *\n * @type {State}\n */\n\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return lineStart;\n }\n /**\n *\n *\n * @type {State}\n */\n\n\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/**\n * Map of named character references.\n *\n * @type {Record}\n */\nexport const characterEntities = {\n AElig: 'Æ',\n AMP: '&',\n Aacute: 'Á',\n Abreve: 'Ă',\n Acirc: 'Â',\n Acy: 'А',\n Afr: '𝔄',\n Agrave: 'À',\n Alpha: 'Α',\n Amacr: 'Ā',\n And: '⩓',\n Aogon: 'Ą',\n Aopf: '𝔸',\n ApplyFunction: '⁡',\n Aring: 'Å',\n Ascr: '𝒜',\n Assign: '≔',\n Atilde: 'Ã',\n Auml: 'Ä',\n Backslash: '∖',\n Barv: '⫧',\n Barwed: '⌆',\n Bcy: 'Б',\n Because: '∵',\n Bernoullis: 'ℬ',\n Beta: 'Β',\n Bfr: '𝔅',\n Bopf: '𝔹',\n Breve: '˘',\n Bscr: 'ℬ',\n Bumpeq: '≎',\n CHcy: 'Ч',\n COPY: '©',\n Cacute: 'Ć',\n Cap: '⋒',\n CapitalDifferentialD: 'ⅅ',\n Cayleys: 'ℭ',\n Ccaron: 'Č',\n Ccedil: 'Ç',\n Ccirc: 'Ĉ',\n Cconint: '∰',\n Cdot: 'Ċ',\n Cedilla: '¸',\n CenterDot: '·',\n Cfr: 'ℭ',\n Chi: 'Χ',\n CircleDot: '⊙',\n CircleMinus: '⊖',\n CirclePlus: '⊕',\n CircleTimes: '⊗',\n ClockwiseContourIntegral: '∲',\n CloseCurlyDoubleQuote: '”',\n CloseCurlyQuote: '’',\n Colon: '∷',\n Colone: '⩴',\n Congruent: '≡',\n Conint: '∯',\n ContourIntegral: '∮',\n Copf: 'ℂ',\n Coproduct: '∐',\n CounterClockwiseContourIntegral: '∳',\n Cross: '⨯',\n Cscr: '𝒞',\n Cup: '⋓',\n CupCap: '≍',\n DD: 'ⅅ',\n DDotrahd: '⤑',\n DJcy: 'Ђ',\n DScy: 'Ѕ',\n DZcy: 'Џ',\n Dagger: '‡',\n Darr: '↡',\n Dashv: '⫤',\n Dcaron: 'Ď',\n Dcy: 'Д',\n Del: '∇',\n Delta: 'Δ',\n Dfr: '𝔇',\n DiacriticalAcute: '´',\n DiacriticalDot: '˙',\n DiacriticalDoubleAcute: '˝',\n DiacriticalGrave: '`',\n DiacriticalTilde: '˜',\n Diamond: '⋄',\n DifferentialD: 'ⅆ',\n Dopf: '𝔻',\n Dot: '¨',\n DotDot: '⃜',\n DotEqual: '≐',\n DoubleContourIntegral: '∯',\n DoubleDot: '¨',\n DoubleDownArrow: '⇓',\n DoubleLeftArrow: '⇐',\n DoubleLeftRightArrow: '⇔',\n DoubleLeftTee: '⫤',\n DoubleLongLeftArrow: '⟸',\n DoubleLongLeftRightArrow: '⟺',\n DoubleLongRightArrow: '⟹',\n DoubleRightArrow: '⇒',\n DoubleRightTee: '⊨',\n DoubleUpArrow: '⇑',\n DoubleUpDownArrow: '⇕',\n DoubleVerticalBar: '∥',\n DownArrow: '↓',\n DownArrowBar: '⤓',\n DownArrowUpArrow: '⇵',\n DownBreve: '̑',\n DownLeftRightVector: '⥐',\n DownLeftTeeVector: '⥞',\n DownLeftVector: '↽',\n DownLeftVectorBar: '⥖',\n DownRightTeeVector: '⥟',\n DownRightVector: '⇁',\n DownRightVectorBar: '⥗',\n DownTee: '⊤',\n DownTeeArrow: '↧',\n Downarrow: '⇓',\n Dscr: '𝒟',\n Dstrok: 'Đ',\n ENG: 'Ŋ',\n ETH: 'Ð',\n Eacute: 'É',\n Ecaron: 'Ě',\n Ecirc: 'Ê',\n Ecy: 'Э',\n Edot: 'Ė',\n Efr: '𝔈',\n Egrave: 'È',\n Element: '∈',\n Emacr: 'Ē',\n EmptySmallSquare: '◻',\n EmptyVerySmallSquare: '▫',\n Eogon: 'Ę',\n Eopf: '𝔼',\n Epsilon: 'Ε',\n Equal: '⩵',\n EqualTilde: '≂',\n Equilibrium: '⇌',\n Escr: 'ℰ',\n Esim: '⩳',\n Eta: 'Η',\n Euml: 'Ë',\n Exists: '∃',\n ExponentialE: 'ⅇ',\n Fcy: 'Ф',\n Ffr: '𝔉',\n FilledSmallSquare: '◼',\n FilledVerySmallSquare: '▪',\n Fopf: '𝔽',\n ForAll: '∀',\n Fouriertrf: 'ℱ',\n Fscr: 'ℱ',\n GJcy: 'Ѓ',\n GT: '>',\n Gamma: 'Γ',\n Gammad: 'Ϝ',\n Gbreve: 'Ğ',\n Gcedil: 'Ģ',\n Gcirc: 'Ĝ',\n Gcy: 'Г',\n Gdot: 'Ġ',\n Gfr: '𝔊',\n Gg: '⋙',\n Gopf: '𝔾',\n GreaterEqual: '≥',\n GreaterEqualLess: '⋛',\n GreaterFullEqual: '≧',\n GreaterGreater: '⪢',\n GreaterLess: '≷',\n GreaterSlantEqual: '⩾',\n GreaterTilde: '≳',\n Gscr: '𝒢',\n Gt: '≫',\n HARDcy: 'Ъ',\n Hacek: 'ˇ',\n Hat: '^',\n Hcirc: 'Ĥ',\n Hfr: 'ℌ',\n HilbertSpace: 'ℋ',\n Hopf: 'ℍ',\n HorizontalLine: '─',\n Hscr: 'ℋ',\n Hstrok: 'Ħ',\n HumpDownHump: '≎',\n HumpEqual: '≏',\n IEcy: 'Е',\n IJlig: 'IJ',\n IOcy: 'Ё',\n Iacute: 'Í',\n Icirc: 'Î',\n Icy: 'И',\n Idot: 'İ',\n Ifr: 'ℑ',\n Igrave: 'Ì',\n Im: 'ℑ',\n Imacr: 'Ī',\n ImaginaryI: 'ⅈ',\n Implies: '⇒',\n Int: '∬',\n Integral: '∫',\n Intersection: '⋂',\n InvisibleComma: '⁣',\n InvisibleTimes: '⁢',\n Iogon: 'Į',\n Iopf: '𝕀',\n Iota: 'Ι',\n Iscr: 'ℐ',\n Itilde: 'Ĩ',\n Iukcy: 'І',\n Iuml: 'Ï',\n Jcirc: 'Ĵ',\n Jcy: 'Й',\n Jfr: '𝔍',\n Jopf: '𝕁',\n Jscr: '𝒥',\n Jsercy: 'Ј',\n Jukcy: 'Є',\n KHcy: 'Х',\n KJcy: 'Ќ',\n Kappa: 'Κ',\n Kcedil: 'Ķ',\n Kcy: 'К',\n Kfr: '𝔎',\n Kopf: '𝕂',\n Kscr: '𝒦',\n LJcy: 'Љ',\n LT: '<',\n Lacute: 'Ĺ',\n Lambda: 'Λ',\n Lang: '⟪',\n Laplacetrf: 'ℒ',\n Larr: '↞',\n Lcaron: 'Ľ',\n Lcedil: 'Ļ',\n Lcy: 'Л',\n LeftAngleBracket: '⟨',\n LeftArrow: '←',\n LeftArrowBar: '⇤',\n LeftArrowRightArrow: '⇆',\n LeftCeiling: '⌈',\n LeftDoubleBracket: '⟦',\n LeftDownTeeVector: '⥡',\n LeftDownVector: '⇃',\n LeftDownVectorBar: '⥙',\n LeftFloor: '⌊',\n LeftRightArrow: '↔',\n LeftRightVector: '⥎',\n LeftTee: '⊣',\n LeftTeeArrow: '↤',\n LeftTeeVector: '⥚',\n LeftTriangle: '⊲',\n LeftTriangleBar: '⧏',\n LeftTriangleEqual: '⊴',\n LeftUpDownVector: '⥑',\n LeftUpTeeVector: '⥠',\n LeftUpVector: '↿',\n LeftUpVectorBar: '⥘',\n LeftVector: '↼',\n LeftVectorBar: '⥒',\n Leftarrow: '⇐',\n Leftrightarrow: '⇔',\n LessEqualGreater: '⋚',\n LessFullEqual: '≦',\n LessGreater: '≶',\n LessLess: '⪡',\n LessSlantEqual: '⩽',\n LessTilde: '≲',\n Lfr: '𝔏',\n Ll: '⋘',\n Lleftarrow: '⇚',\n Lmidot: 'Ŀ',\n LongLeftArrow: '⟵',\n LongLeftRightArrow: '⟷',\n LongRightArrow: '⟶',\n Longleftarrow: '⟸',\n Longleftrightarrow: '⟺',\n Longrightarrow: '⟹',\n Lopf: '𝕃',\n LowerLeftArrow: '↙',\n LowerRightArrow: '↘',\n Lscr: 'ℒ',\n Lsh: '↰',\n Lstrok: 'Ł',\n Lt: '≪',\n Map: '⤅',\n Mcy: 'М',\n MediumSpace: ' ',\n Mellintrf: 'ℳ',\n Mfr: '𝔐',\n MinusPlus: '∓',\n Mopf: '𝕄',\n Mscr: 'ℳ',\n Mu: 'Μ',\n NJcy: 'Њ',\n Nacute: 'Ń',\n Ncaron: 'Ň',\n Ncedil: 'Ņ',\n Ncy: 'Н',\n NegativeMediumSpace: '​',\n NegativeThickSpace: '​',\n NegativeThinSpace: '​',\n NegativeVeryThinSpace: '​',\n NestedGreaterGreater: '≫',\n NestedLessLess: '≪',\n NewLine: '\\n',\n Nfr: '𝔑',\n NoBreak: '⁠',\n NonBreakingSpace: ' ',\n Nopf: 'ℕ',\n Not: '⫬',\n NotCongruent: '≢',\n NotCupCap: '≭',\n NotDoubleVerticalBar: '∦',\n NotElement: '∉',\n NotEqual: '≠',\n NotEqualTilde: '≂̸',\n NotExists: '∄',\n NotGreater: '≯',\n NotGreaterEqual: '≱',\n NotGreaterFullEqual: '≧̸',\n NotGreaterGreater: '≫̸',\n NotGreaterLess: '≹',\n NotGreaterSlantEqual: '⩾̸',\n NotGreaterTilde: '≵',\n NotHumpDownHump: '≎̸',\n NotHumpEqual: '≏̸',\n NotLeftTriangle: '⋪',\n NotLeftTriangleBar: '⧏̸',\n NotLeftTriangleEqual: '⋬',\n NotLess: '≮',\n NotLessEqual: '≰',\n NotLessGreater: '≸',\n NotLessLess: '≪̸',\n NotLessSlantEqual: '⩽̸',\n NotLessTilde: '≴',\n NotNestedGreaterGreater: '⪢̸',\n NotNestedLessLess: '⪡̸',\n NotPrecedes: '⊀',\n NotPrecedesEqual: '⪯̸',\n NotPrecedesSlantEqual: '⋠',\n NotReverseElement: '∌',\n NotRightTriangle: '⋫',\n NotRightTriangleBar: '⧐̸',\n NotRightTriangleEqual: '⋭',\n NotSquareSubset: '⊏̸',\n NotSquareSubsetEqual: '⋢',\n NotSquareSuperset: '⊐̸',\n NotSquareSupersetEqual: '⋣',\n NotSubset: '⊂⃒',\n NotSubsetEqual: '⊈',\n NotSucceeds: '⊁',\n NotSucceedsEqual: '⪰̸',\n NotSucceedsSlantEqual: '⋡',\n NotSucceedsTilde: '≿̸',\n NotSuperset: '⊃⃒',\n NotSupersetEqual: '⊉',\n NotTilde: '≁',\n NotTildeEqual: '≄',\n NotTildeFullEqual: '≇',\n NotTildeTilde: '≉',\n NotVerticalBar: '∤',\n Nscr: '𝒩',\n Ntilde: 'Ñ',\n Nu: 'Ν',\n OElig: 'Œ',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Ocy: 'О',\n Odblac: 'Ő',\n Ofr: '𝔒',\n Ograve: 'Ò',\n Omacr: 'Ō',\n Omega: 'Ω',\n Omicron: 'Ο',\n Oopf: '𝕆',\n OpenCurlyDoubleQuote: '“',\n OpenCurlyQuote: '‘',\n Or: '⩔',\n Oscr: '𝒪',\n Oslash: 'Ø',\n Otilde: 'Õ',\n Otimes: '⨷',\n Ouml: 'Ö',\n OverBar: '‾',\n OverBrace: '⏞',\n OverBracket: '⎴',\n OverParenthesis: '⏜',\n PartialD: '∂',\n Pcy: 'П',\n Pfr: '𝔓',\n Phi: 'Φ',\n Pi: 'Π',\n PlusMinus: '±',\n Poincareplane: 'ℌ',\n Popf: 'ℙ',\n Pr: '⪻',\n Precedes: '≺',\n PrecedesEqual: '⪯',\n PrecedesSlantEqual: '≼',\n PrecedesTilde: '≾',\n Prime: '″',\n Product: '∏',\n Proportion: '∷',\n Proportional: '∝',\n Pscr: '𝒫',\n Psi: 'Ψ',\n QUOT: '\"',\n Qfr: '𝔔',\n Qopf: 'ℚ',\n Qscr: '𝒬',\n RBarr: '⤐',\n REG: '®',\n Racute: 'Ŕ',\n Rang: '⟫',\n Rarr: '↠',\n Rarrtl: '⤖',\n Rcaron: 'Ř',\n Rcedil: 'Ŗ',\n Rcy: 'Р',\n Re: 'ℜ',\n ReverseElement: '∋',\n ReverseEquilibrium: '⇋',\n ReverseUpEquilibrium: '⥯',\n Rfr: 'ℜ',\n Rho: 'Ρ',\n RightAngleBracket: '⟩',\n RightArrow: '→',\n RightArrowBar: '⇥',\n RightArrowLeftArrow: '⇄',\n RightCeiling: '⌉',\n RightDoubleBracket: '⟧',\n RightDownTeeVector: '⥝',\n RightDownVector: '⇂',\n RightDownVectorBar: '⥕',\n RightFloor: '⌋',\n RightTee: '⊢',\n RightTeeArrow: '↦',\n RightTeeVector: '⥛',\n RightTriangle: '⊳',\n RightTriangleBar: '⧐',\n RightTriangleEqual: '⊵',\n RightUpDownVector: '⥏',\n RightUpTeeVector: '⥜',\n RightUpVector: '↾',\n RightUpVectorBar: '⥔',\n RightVector: '⇀',\n RightVectorBar: '⥓',\n Rightarrow: '⇒',\n Ropf: 'ℝ',\n RoundImplies: '⥰',\n Rrightarrow: '⇛',\n Rscr: 'ℛ',\n Rsh: '↱',\n RuleDelayed: '⧴',\n SHCHcy: 'Щ',\n SHcy: 'Ш',\n SOFTcy: 'Ь',\n Sacute: 'Ś',\n Sc: '⪼',\n Scaron: 'Š',\n Scedil: 'Ş',\n Scirc: 'Ŝ',\n Scy: 'С',\n Sfr: '𝔖',\n ShortDownArrow: '↓',\n ShortLeftArrow: '←',\n ShortRightArrow: '→',\n ShortUpArrow: '↑',\n Sigma: 'Σ',\n SmallCircle: '∘',\n Sopf: '𝕊',\n Sqrt: '√',\n Square: '□',\n SquareIntersection: '⊓',\n SquareSubset: '⊏',\n SquareSubsetEqual: '⊑',\n SquareSuperset: '⊐',\n SquareSupersetEqual: '⊒',\n SquareUnion: '⊔',\n Sscr: '𝒮',\n Star: '⋆',\n Sub: '⋐',\n Subset: '⋐',\n SubsetEqual: '⊆',\n Succeeds: '≻',\n SucceedsEqual: '⪰',\n SucceedsSlantEqual: '≽',\n SucceedsTilde: '≿',\n SuchThat: '∋',\n Sum: '∑',\n Sup: '⋑',\n Superset: '⊃',\n SupersetEqual: '⊇',\n Supset: '⋑',\n THORN: 'Þ',\n TRADE: '™',\n TSHcy: 'Ћ',\n TScy: 'Ц',\n Tab: '\\t',\n Tau: 'Τ',\n Tcaron: 'Ť',\n Tcedil: 'Ţ',\n Tcy: 'Т',\n Tfr: '𝔗',\n Therefore: '∴',\n Theta: 'Θ',\n ThickSpace: '  ',\n ThinSpace: ' ',\n Tilde: '∼',\n TildeEqual: '≃',\n TildeFullEqual: '≅',\n TildeTilde: '≈',\n Topf: '𝕋',\n TripleDot: '⃛',\n Tscr: '𝒯',\n Tstrok: 'Ŧ',\n Uacute: 'Ú',\n Uarr: '↟',\n Uarrocir: '⥉',\n Ubrcy: 'Ў',\n Ubreve: 'Ŭ',\n Ucirc: 'Û',\n Ucy: 'У',\n Udblac: 'Ű',\n Ufr: '𝔘',\n Ugrave: 'Ù',\n Umacr: 'Ū',\n UnderBar: '_',\n UnderBrace: '⏟',\n UnderBracket: '⎵',\n UnderParenthesis: '⏝',\n Union: '⋃',\n UnionPlus: '⊎',\n Uogon: 'Ų',\n Uopf: '𝕌',\n UpArrow: '↑',\n UpArrowBar: '⤒',\n UpArrowDownArrow: '⇅',\n UpDownArrow: '↕',\n UpEquilibrium: '⥮',\n UpTee: '⊥',\n UpTeeArrow: '↥',\n Uparrow: '⇑',\n Updownarrow: '⇕',\n UpperLeftArrow: '↖',\n UpperRightArrow: '↗',\n Upsi: 'ϒ',\n Upsilon: 'Υ',\n Uring: 'Ů',\n Uscr: '𝒰',\n Utilde: 'Ũ',\n Uuml: 'Ü',\n VDash: '⊫',\n Vbar: '⫫',\n Vcy: 'В',\n Vdash: '⊩',\n Vdashl: '⫦',\n Vee: '⋁',\n Verbar: '‖',\n Vert: '‖',\n VerticalBar: '∣',\n VerticalLine: '|',\n VerticalSeparator: '❘',\n VerticalTilde: '≀',\n VeryThinSpace: ' ',\n Vfr: '𝔙',\n Vopf: '𝕍',\n Vscr: '𝒱',\n Vvdash: '⊪',\n Wcirc: 'Ŵ',\n Wedge: '⋀',\n Wfr: '𝔚',\n Wopf: '𝕎',\n Wscr: '𝒲',\n Xfr: '𝔛',\n Xi: 'Ξ',\n Xopf: '𝕏',\n Xscr: '𝒳',\n YAcy: 'Я',\n YIcy: 'Ї',\n YUcy: 'Ю',\n Yacute: 'Ý',\n Ycirc: 'Ŷ',\n Ycy: 'Ы',\n Yfr: '𝔜',\n Yopf: '𝕐',\n Yscr: '𝒴',\n Yuml: 'Ÿ',\n ZHcy: 'Ж',\n Zacute: 'Ź',\n Zcaron: 'Ž',\n Zcy: 'З',\n Zdot: 'Ż',\n ZeroWidthSpace: '​',\n Zeta: 'Ζ',\n Zfr: 'ℨ',\n Zopf: 'ℤ',\n Zscr: '𝒵',\n aacute: 'á',\n abreve: 'ă',\n ac: '∾',\n acE: '∾̳',\n acd: '∿',\n acirc: 'â',\n acute: '´',\n acy: 'а',\n aelig: 'æ',\n af: '⁡',\n afr: '𝔞',\n agrave: 'à',\n alefsym: 'ℵ',\n aleph: 'ℵ',\n alpha: 'α',\n amacr: 'ā',\n amalg: '⨿',\n amp: '&',\n and: '∧',\n andand: '⩕',\n andd: '⩜',\n andslope: '⩘',\n andv: '⩚',\n ang: '∠',\n ange: '⦤',\n angle: '∠',\n angmsd: '∡',\n angmsdaa: '⦨',\n angmsdab: '⦩',\n angmsdac: '⦪',\n angmsdad: '⦫',\n angmsdae: '⦬',\n angmsdaf: '⦭',\n angmsdag: '⦮',\n angmsdah: '⦯',\n angrt: '∟',\n angrtvb: '⊾',\n angrtvbd: '⦝',\n angsph: '∢',\n angst: 'Å',\n angzarr: '⍼',\n aogon: 'ą',\n aopf: '𝕒',\n ap: '≈',\n apE: '⩰',\n apacir: '⩯',\n ape: '≊',\n apid: '≋',\n apos: \"'\",\n approx: '≈',\n approxeq: '≊',\n aring: 'å',\n ascr: '𝒶',\n ast: '*',\n asymp: '≈',\n asympeq: '≍',\n atilde: 'ã',\n auml: 'ä',\n awconint: '∳',\n awint: '⨑',\n bNot: '⫭',\n backcong: '≌',\n backepsilon: '϶',\n backprime: '‵',\n backsim: '∽',\n backsimeq: '⋍',\n barvee: '⊽',\n barwed: '⌅',\n barwedge: '⌅',\n bbrk: '⎵',\n bbrktbrk: '⎶',\n bcong: '≌',\n bcy: 'б',\n bdquo: '„',\n becaus: '∵',\n because: '∵',\n bemptyv: '⦰',\n bepsi: '϶',\n bernou: 'ℬ',\n beta: 'β',\n beth: 'ℶ',\n between: '≬',\n bfr: '𝔟',\n bigcap: '⋂',\n bigcirc: '◯',\n bigcup: '⋃',\n bigodot: '⨀',\n bigoplus: '⨁',\n bigotimes: '⨂',\n bigsqcup: '⨆',\n bigstar: '★',\n bigtriangledown: '▽',\n bigtriangleup: '△',\n biguplus: '⨄',\n bigvee: '⋁',\n bigwedge: '⋀',\n bkarow: '⤍',\n blacklozenge: '⧫',\n blacksquare: '▪',\n blacktriangle: '▴',\n blacktriangledown: '▾',\n blacktriangleleft: '◂',\n blacktriangleright: '▸',\n blank: '␣',\n blk12: '▒',\n blk14: '░',\n blk34: '▓',\n block: '█',\n bne: '=⃥',\n bnequiv: '≡⃥',\n bnot: '⌐',\n bopf: '𝕓',\n bot: '⊥',\n bottom: '⊥',\n bowtie: '⋈',\n boxDL: '╗',\n boxDR: '╔',\n boxDl: '╖',\n boxDr: '╓',\n boxH: '═',\n boxHD: '╦',\n boxHU: '╩',\n boxHd: '╤',\n boxHu: '╧',\n boxUL: '╝',\n boxUR: '╚',\n boxUl: '╜',\n boxUr: '╙',\n boxV: '║',\n boxVH: '╬',\n boxVL: '╣',\n boxVR: '╠',\n boxVh: '╫',\n boxVl: '╢',\n boxVr: '╟',\n boxbox: '⧉',\n boxdL: '╕',\n boxdR: '╒',\n boxdl: '┐',\n boxdr: '┌',\n boxh: '─',\n boxhD: '╥',\n boxhU: '╨',\n boxhd: '┬',\n boxhu: '┴',\n boxminus: '⊟',\n boxplus: '⊞',\n boxtimes: '⊠',\n boxuL: '╛',\n boxuR: '╘',\n boxul: '┘',\n boxur: '└',\n boxv: '│',\n boxvH: '╪',\n boxvL: '╡',\n boxvR: '╞',\n boxvh: '┼',\n boxvl: '┤',\n boxvr: '├',\n bprime: '‵',\n breve: '˘',\n brvbar: '¦',\n bscr: '𝒷',\n bsemi: '⁏',\n bsim: '∽',\n bsime: '⋍',\n bsol: '\\\\',\n bsolb: '⧅',\n bsolhsub: '⟈',\n bull: '•',\n bullet: '•',\n bump: '≎',\n bumpE: '⪮',\n bumpe: '≏',\n bumpeq: '≏',\n cacute: 'ć',\n cap: '∩',\n capand: '⩄',\n capbrcup: '⩉',\n capcap: '⩋',\n capcup: '⩇',\n capdot: '⩀',\n caps: '∩︀',\n caret: '⁁',\n caron: 'ˇ',\n ccaps: '⩍',\n ccaron: 'č',\n ccedil: 'ç',\n ccirc: 'ĉ',\n ccups: '⩌',\n ccupssm: '⩐',\n cdot: 'ċ',\n cedil: '¸',\n cemptyv: '⦲',\n cent: '¢',\n centerdot: '·',\n cfr: '𝔠',\n chcy: 'ч',\n check: '✓',\n checkmark: '✓',\n chi: 'χ',\n cir: '○',\n cirE: '⧃',\n circ: 'ˆ',\n circeq: '≗',\n circlearrowleft: '↺',\n circlearrowright: '↻',\n circledR: '®',\n circledS: 'Ⓢ',\n circledast: '⊛',\n circledcirc: '⊚',\n circleddash: '⊝',\n cire: '≗',\n cirfnint: '⨐',\n cirmid: '⫯',\n cirscir: '⧂',\n clubs: '♣',\n clubsuit: '♣',\n colon: ':',\n colone: '≔',\n coloneq: '≔',\n comma: ',',\n commat: '@',\n comp: '∁',\n compfn: '∘',\n complement: '∁',\n complexes: 'ℂ',\n cong: '≅',\n congdot: '⩭',\n conint: '∮',\n copf: '𝕔',\n coprod: '∐',\n copy: '©',\n copysr: '℗',\n crarr: '↵',\n cross: '✗',\n cscr: '𝒸',\n csub: '⫏',\n csube: '⫑',\n csup: '⫐',\n csupe: '⫒',\n ctdot: '⋯',\n cudarrl: '⤸',\n cudarrr: '⤵',\n cuepr: '⋞',\n cuesc: '⋟',\n cularr: '↶',\n cularrp: '⤽',\n cup: '∪',\n cupbrcap: '⩈',\n cupcap: '⩆',\n cupcup: '⩊',\n cupdot: '⊍',\n cupor: '⩅',\n cups: '∪︀',\n curarr: '↷',\n curarrm: '⤼',\n curlyeqprec: '⋞',\n curlyeqsucc: '⋟',\n curlyvee: '⋎',\n curlywedge: '⋏',\n curren: '¤',\n curvearrowleft: '↶',\n curvearrowright: '↷',\n cuvee: '⋎',\n cuwed: '⋏',\n cwconint: '∲',\n cwint: '∱',\n cylcty: '⌭',\n dArr: '⇓',\n dHar: '⥥',\n dagger: '†',\n daleth: 'ℸ',\n darr: '↓',\n dash: '‐',\n dashv: '⊣',\n dbkarow: '⤏',\n dblac: '˝',\n dcaron: 'ď',\n dcy: 'д',\n dd: 'ⅆ',\n ddagger: '‡',\n ddarr: '⇊',\n ddotseq: '⩷',\n deg: '°',\n delta: 'δ',\n demptyv: '⦱',\n dfisht: '⥿',\n dfr: '𝔡',\n dharl: '⇃',\n dharr: '⇂',\n diam: '⋄',\n diamond: '⋄',\n diamondsuit: '♦',\n diams: '♦',\n die: '¨',\n digamma: 'ϝ',\n disin: '⋲',\n div: '÷',\n divide: '÷',\n divideontimes: '⋇',\n divonx: '⋇',\n djcy: 'ђ',\n dlcorn: '⌞',\n dlcrop: '⌍',\n dollar: '$',\n dopf: '𝕕',\n dot: '˙',\n doteq: '≐',\n doteqdot: '≑',\n dotminus: '∸',\n dotplus: '∔',\n dotsquare: '⊡',\n doublebarwedge: '⌆',\n downarrow: '↓',\n downdownarrows: '⇊',\n downharpoonleft: '⇃',\n downharpoonright: '⇂',\n drbkarow: '⤐',\n drcorn: '⌟',\n drcrop: '⌌',\n dscr: '𝒹',\n dscy: 'ѕ',\n dsol: '⧶',\n dstrok: 'đ',\n dtdot: '⋱',\n dtri: '▿',\n dtrif: '▾',\n duarr: '⇵',\n duhar: '⥯',\n dwangle: '⦦',\n dzcy: 'џ',\n dzigrarr: '⟿',\n eDDot: '⩷',\n eDot: '≑',\n eacute: 'é',\n easter: '⩮',\n ecaron: 'ě',\n ecir: '≖',\n ecirc: 'ê',\n ecolon: '≕',\n ecy: 'э',\n edot: 'ė',\n ee: 'ⅇ',\n efDot: '≒',\n efr: '𝔢',\n eg: '⪚',\n egrave: 'è',\n egs: '⪖',\n egsdot: '⪘',\n el: '⪙',\n elinters: '⏧',\n ell: 'ℓ',\n els: '⪕',\n elsdot: '⪗',\n emacr: 'ē',\n empty: '∅',\n emptyset: '∅',\n emptyv: '∅',\n emsp13: ' ',\n emsp14: ' ',\n emsp: ' ',\n eng: 'ŋ',\n ensp: ' ',\n eogon: 'ę',\n eopf: '𝕖',\n epar: '⋕',\n eparsl: '⧣',\n eplus: '⩱',\n epsi: 'ε',\n epsilon: 'ε',\n epsiv: 'ϵ',\n eqcirc: '≖',\n eqcolon: '≕',\n eqsim: '≂',\n eqslantgtr: '⪖',\n eqslantless: '⪕',\n equals: '=',\n equest: '≟',\n equiv: '≡',\n equivDD: '⩸',\n eqvparsl: '⧥',\n erDot: '≓',\n erarr: '⥱',\n escr: 'ℯ',\n esdot: '≐',\n esim: '≂',\n eta: 'η',\n eth: 'ð',\n euml: 'ë',\n euro: '€',\n excl: '!',\n exist: '∃',\n expectation: 'ℰ',\n exponentiale: 'ⅇ',\n fallingdotseq: '≒',\n fcy: 'ф',\n female: '♀',\n ffilig: 'ffi',\n fflig: 'ff',\n ffllig: 'ffl',\n ffr: '𝔣',\n filig: 'fi',\n fjlig: 'fj',\n flat: '♭',\n fllig: 'fl',\n fltns: '▱',\n fnof: 'ƒ',\n fopf: '𝕗',\n forall: '∀',\n fork: '⋔',\n forkv: '⫙',\n fpartint: '⨍',\n frac12: '½',\n frac13: '⅓',\n frac14: '¼',\n frac15: '⅕',\n frac16: '⅙',\n frac18: '⅛',\n frac23: '⅔',\n frac25: '⅖',\n frac34: '¾',\n frac35: '⅗',\n frac38: '⅜',\n frac45: '⅘',\n frac56: '⅚',\n frac58: '⅝',\n frac78: '⅞',\n frasl: '⁄',\n frown: '⌢',\n fscr: '𝒻',\n gE: '≧',\n gEl: '⪌',\n gacute: 'ǵ',\n gamma: 'γ',\n gammad: 'ϝ',\n gap: '⪆',\n gbreve: 'ğ',\n gcirc: 'ĝ',\n gcy: 'г',\n gdot: 'ġ',\n ge: '≥',\n gel: '⋛',\n geq: '≥',\n geqq: '≧',\n geqslant: '⩾',\n ges: '⩾',\n gescc: '⪩',\n gesdot: '⪀',\n gesdoto: '⪂',\n gesdotol: '⪄',\n gesl: '⋛︀',\n gesles: '⪔',\n gfr: '𝔤',\n gg: '≫',\n ggg: '⋙',\n gimel: 'ℷ',\n gjcy: 'ѓ',\n gl: '≷',\n glE: '⪒',\n gla: '⪥',\n glj: '⪤',\n gnE: '≩',\n gnap: '⪊',\n gnapprox: '⪊',\n gne: '⪈',\n gneq: '⪈',\n gneqq: '≩',\n gnsim: '⋧',\n gopf: '𝕘',\n grave: '`',\n gscr: 'ℊ',\n gsim: '≳',\n gsime: '⪎',\n gsiml: '⪐',\n gt: '>',\n gtcc: '⪧',\n gtcir: '⩺',\n gtdot: '⋗',\n gtlPar: '⦕',\n gtquest: '⩼',\n gtrapprox: '⪆',\n gtrarr: '⥸',\n gtrdot: '⋗',\n gtreqless: '⋛',\n gtreqqless: '⪌',\n gtrless: '≷',\n gtrsim: '≳',\n gvertneqq: '≩︀',\n gvnE: '≩︀',\n hArr: '⇔',\n hairsp: ' ',\n half: '½',\n hamilt: 'ℋ',\n hardcy: 'ъ',\n harr: '↔',\n harrcir: '⥈',\n harrw: '↭',\n hbar: 'ℏ',\n hcirc: 'ĥ',\n hearts: '♥',\n heartsuit: '♥',\n hellip: '…',\n hercon: '⊹',\n hfr: '𝔥',\n hksearow: '⤥',\n hkswarow: '⤦',\n hoarr: '⇿',\n homtht: '∻',\n hookleftarrow: '↩',\n hookrightarrow: '↪',\n hopf: '𝕙',\n horbar: '―',\n hscr: '𝒽',\n hslash: 'ℏ',\n hstrok: 'ħ',\n hybull: '⁃',\n hyphen: '‐',\n iacute: 'í',\n ic: '⁣',\n icirc: 'î',\n icy: 'и',\n iecy: 'е',\n iexcl: '¡',\n iff: '⇔',\n ifr: '𝔦',\n igrave: 'ì',\n ii: 'ⅈ',\n iiiint: '⨌',\n iiint: '∭',\n iinfin: '⧜',\n iiota: '℩',\n ijlig: 'ij',\n imacr: 'ī',\n image: 'ℑ',\n imagline: 'ℐ',\n imagpart: 'ℑ',\n imath: 'ı',\n imof: '⊷',\n imped: 'Ƶ',\n in: '∈',\n incare: '℅',\n infin: '∞',\n infintie: '⧝',\n inodot: 'ı',\n int: '∫',\n intcal: '⊺',\n integers: 'ℤ',\n intercal: '⊺',\n intlarhk: '⨗',\n intprod: '⨼',\n iocy: 'ё',\n iogon: 'į',\n iopf: '𝕚',\n iota: 'ι',\n iprod: '⨼',\n iquest: '¿',\n iscr: '𝒾',\n isin: '∈',\n isinE: '⋹',\n isindot: '⋵',\n isins: '⋴',\n isinsv: '⋳',\n isinv: '∈',\n it: '⁢',\n itilde: 'ĩ',\n iukcy: 'і',\n iuml: 'ï',\n jcirc: 'ĵ',\n jcy: 'й',\n jfr: '𝔧',\n jmath: 'ȷ',\n jopf: '𝕛',\n jscr: '𝒿',\n jsercy: 'ј',\n jukcy: 'є',\n kappa: 'κ',\n kappav: 'ϰ',\n kcedil: 'ķ',\n kcy: 'к',\n kfr: '𝔨',\n kgreen: 'ĸ',\n khcy: 'х',\n kjcy: 'ќ',\n kopf: '𝕜',\n kscr: '𝓀',\n lAarr: '⇚',\n lArr: '⇐',\n lAtail: '⤛',\n lBarr: '⤎',\n lE: '≦',\n lEg: '⪋',\n lHar: '⥢',\n lacute: 'ĺ',\n laemptyv: '⦴',\n lagran: 'ℒ',\n lambda: 'λ',\n lang: '⟨',\n langd: '⦑',\n langle: '⟨',\n lap: '⪅',\n laquo: '«',\n larr: '←',\n larrb: '⇤',\n larrbfs: '⤟',\n larrfs: '⤝',\n larrhk: '↩',\n larrlp: '↫',\n larrpl: '⤹',\n larrsim: '⥳',\n larrtl: '↢',\n lat: '⪫',\n latail: '⤙',\n late: '⪭',\n lates: '⪭︀',\n lbarr: '⤌',\n lbbrk: '❲',\n lbrace: '{',\n lbrack: '[',\n lbrke: '⦋',\n lbrksld: '⦏',\n lbrkslu: '⦍',\n lcaron: 'ľ',\n lcedil: 'ļ',\n lceil: '⌈',\n lcub: '{',\n lcy: 'л',\n ldca: '⤶',\n ldquo: '“',\n ldquor: '„',\n ldrdhar: '⥧',\n ldrushar: '⥋',\n ldsh: '↲',\n le: '≤',\n leftarrow: '←',\n leftarrowtail: '↢',\n leftharpoondown: '↽',\n leftharpoonup: '↼',\n leftleftarrows: '⇇',\n leftrightarrow: '↔',\n leftrightarrows: '⇆',\n leftrightharpoons: '⇋',\n leftrightsquigarrow: '↭',\n leftthreetimes: '⋋',\n leg: '⋚',\n leq: '≤',\n leqq: '≦',\n leqslant: '⩽',\n les: '⩽',\n lescc: '⪨',\n lesdot: '⩿',\n lesdoto: '⪁',\n lesdotor: '⪃',\n lesg: '⋚︀',\n lesges: '⪓',\n lessapprox: '⪅',\n lessdot: '⋖',\n lesseqgtr: '⋚',\n lesseqqgtr: '⪋',\n lessgtr: '≶',\n lesssim: '≲',\n lfisht: '⥼',\n lfloor: '⌊',\n lfr: '𝔩',\n lg: '≶',\n lgE: '⪑',\n lhard: '↽',\n lharu: '↼',\n lharul: '⥪',\n lhblk: '▄',\n ljcy: 'љ',\n ll: '≪',\n llarr: '⇇',\n llcorner: '⌞',\n llhard: '⥫',\n lltri: '◺',\n lmidot: 'ŀ',\n lmoust: '⎰',\n lmoustache: '⎰',\n lnE: '≨',\n lnap: '⪉',\n lnapprox: '⪉',\n lne: '⪇',\n lneq: '⪇',\n lneqq: '≨',\n lnsim: '⋦',\n loang: '⟬',\n loarr: '⇽',\n lobrk: '⟦',\n longleftarrow: '⟵',\n longleftrightarrow: '⟷',\n longmapsto: '⟼',\n longrightarrow: '⟶',\n looparrowleft: '↫',\n looparrowright: '↬',\n lopar: '⦅',\n lopf: '𝕝',\n loplus: '⨭',\n lotimes: '⨴',\n lowast: '∗',\n lowbar: '_',\n loz: '◊',\n lozenge: '◊',\n lozf: '⧫',\n lpar: '(',\n lparlt: '⦓',\n lrarr: '⇆',\n lrcorner: '⌟',\n lrhar: '⇋',\n lrhard: '⥭',\n lrm: '‎',\n lrtri: '⊿',\n lsaquo: '‹',\n lscr: '𝓁',\n lsh: '↰',\n lsim: '≲',\n lsime: '⪍',\n lsimg: '⪏',\n lsqb: '[',\n lsquo: '‘',\n lsquor: '‚',\n lstrok: 'ł',\n lt: '<',\n ltcc: '⪦',\n ltcir: '⩹',\n ltdot: '⋖',\n lthree: '⋋',\n ltimes: '⋉',\n ltlarr: '⥶',\n ltquest: '⩻',\n ltrPar: '⦖',\n ltri: '◃',\n ltrie: '⊴',\n ltrif: '◂',\n lurdshar: '⥊',\n luruhar: '⥦',\n lvertneqq: '≨︀',\n lvnE: '≨︀',\n mDDot: '∺',\n macr: '¯',\n male: '♂',\n malt: '✠',\n maltese: '✠',\n map: '↦',\n mapsto: '↦',\n mapstodown: '↧',\n mapstoleft: '↤',\n mapstoup: '↥',\n marker: '▮',\n mcomma: '⨩',\n mcy: 'м',\n mdash: '—',\n measuredangle: '∡',\n mfr: '𝔪',\n mho: '℧',\n micro: 'µ',\n mid: '∣',\n midast: '*',\n midcir: '⫰',\n middot: '·',\n minus: '−',\n minusb: '⊟',\n minusd: '∸',\n minusdu: '⨪',\n mlcp: '⫛',\n mldr: '…',\n mnplus: '∓',\n models: '⊧',\n mopf: '𝕞',\n mp: '∓',\n mscr: '𝓂',\n mstpos: '∾',\n mu: 'μ',\n multimap: '⊸',\n mumap: '⊸',\n nGg: '⋙̸',\n nGt: '≫⃒',\n nGtv: '≫̸',\n nLeftarrow: '⇍',\n nLeftrightarrow: '⇎',\n nLl: '⋘̸',\n nLt: '≪⃒',\n nLtv: '≪̸',\n nRightarrow: '⇏',\n nVDash: '⊯',\n nVdash: '⊮',\n nabla: '∇',\n nacute: 'ń',\n nang: '∠⃒',\n nap: '≉',\n napE: '⩰̸',\n napid: '≋̸',\n napos: 'ʼn',\n napprox: '≉',\n natur: '♮',\n natural: '♮',\n naturals: 'ℕ',\n nbsp: ' ',\n nbump: '≎̸',\n nbumpe: '≏̸',\n ncap: '⩃',\n ncaron: 'ň',\n ncedil: 'ņ',\n ncong: '≇',\n ncongdot: '⩭̸',\n ncup: '⩂',\n ncy: 'н',\n ndash: '–',\n ne: '≠',\n neArr: '⇗',\n nearhk: '⤤',\n nearr: '↗',\n nearrow: '↗',\n nedot: '≐̸',\n nequiv: '≢',\n nesear: '⤨',\n nesim: '≂̸',\n nexist: '∄',\n nexists: '∄',\n nfr: '𝔫',\n ngE: '≧̸',\n nge: '≱',\n ngeq: '≱',\n ngeqq: '≧̸',\n ngeqslant: '⩾̸',\n nges: '⩾̸',\n ngsim: '≵',\n ngt: '≯',\n ngtr: '≯',\n nhArr: '⇎',\n nharr: '↮',\n nhpar: '⫲',\n ni: '∋',\n nis: '⋼',\n nisd: '⋺',\n niv: '∋',\n njcy: 'њ',\n nlArr: '⇍',\n nlE: '≦̸',\n nlarr: '↚',\n nldr: '‥',\n nle: '≰',\n nleftarrow: '↚',\n nleftrightarrow: '↮',\n nleq: '≰',\n nleqq: '≦̸',\n nleqslant: '⩽̸',\n nles: '⩽̸',\n nless: '≮',\n nlsim: '≴',\n nlt: '≮',\n nltri: '⋪',\n nltrie: '⋬',\n nmid: '∤',\n nopf: '𝕟',\n not: '¬',\n notin: '∉',\n notinE: '⋹̸',\n notindot: '⋵̸',\n notinva: '∉',\n notinvb: '⋷',\n notinvc: '⋶',\n notni: '∌',\n notniva: '∌',\n notnivb: '⋾',\n notnivc: '⋽',\n npar: '∦',\n nparallel: '∦',\n nparsl: '⫽⃥',\n npart: '∂̸',\n npolint: '⨔',\n npr: '⊀',\n nprcue: '⋠',\n npre: '⪯̸',\n nprec: '⊀',\n npreceq: '⪯̸',\n nrArr: '⇏',\n nrarr: '↛',\n nrarrc: '⤳̸',\n nrarrw: '↝̸',\n nrightarrow: '↛',\n nrtri: '⋫',\n nrtrie: '⋭',\n nsc: '⊁',\n nsccue: '⋡',\n nsce: '⪰̸',\n nscr: '𝓃',\n nshortmid: '∤',\n nshortparallel: '∦',\n nsim: '≁',\n nsime: '≄',\n nsimeq: '≄',\n nsmid: '∤',\n nspar: '∦',\n nsqsube: '⋢',\n nsqsupe: '⋣',\n nsub: '⊄',\n nsubE: '⫅̸',\n nsube: '⊈',\n nsubset: '⊂⃒',\n nsubseteq: '⊈',\n nsubseteqq: '⫅̸',\n nsucc: '⊁',\n nsucceq: '⪰̸',\n nsup: '⊅',\n nsupE: '⫆̸',\n nsupe: '⊉',\n nsupset: '⊃⃒',\n nsupseteq: '⊉',\n nsupseteqq: '⫆̸',\n ntgl: '≹',\n ntilde: 'ñ',\n ntlg: '≸',\n ntriangleleft: '⋪',\n ntrianglelefteq: '⋬',\n ntriangleright: '⋫',\n ntrianglerighteq: '⋭',\n nu: 'ν',\n num: '#',\n numero: '№',\n numsp: ' ',\n nvDash: '⊭',\n nvHarr: '⤄',\n nvap: '≍⃒',\n nvdash: '⊬',\n nvge: '≥⃒',\n nvgt: '>⃒',\n nvinfin: '⧞',\n nvlArr: '⤂',\n nvle: '≤⃒',\n nvlt: '<⃒',\n nvltrie: '⊴⃒',\n nvrArr: '⤃',\n nvrtrie: '⊵⃒',\n nvsim: '∼⃒',\n nwArr: '⇖',\n nwarhk: '⤣',\n nwarr: '↖',\n nwarrow: '↖',\n nwnear: '⤧',\n oS: 'Ⓢ',\n oacute: 'ó',\n oast: '⊛',\n ocir: '⊚',\n ocirc: 'ô',\n ocy: 'о',\n odash: '⊝',\n odblac: 'ő',\n odiv: '⨸',\n odot: '⊙',\n odsold: '⦼',\n oelig: 'œ',\n ofcir: '⦿',\n ofr: '𝔬',\n ogon: '˛',\n ograve: 'ò',\n ogt: '⧁',\n ohbar: '⦵',\n ohm: 'Ω',\n oint: '∮',\n olarr: '↺',\n olcir: '⦾',\n olcross: '⦻',\n oline: '‾',\n olt: '⧀',\n omacr: 'ō',\n omega: 'ω',\n omicron: 'ο',\n omid: '⦶',\n ominus: '⊖',\n oopf: '𝕠',\n opar: '⦷',\n operp: '⦹',\n oplus: '⊕',\n or: '∨',\n orarr: '↻',\n ord: '⩝',\n order: 'ℴ',\n orderof: 'ℴ',\n ordf: 'ª',\n ordm: 'º',\n origof: '⊶',\n oror: '⩖',\n orslope: '⩗',\n orv: '⩛',\n oscr: 'ℴ',\n oslash: 'ø',\n osol: '⊘',\n otilde: 'õ',\n otimes: '⊗',\n otimesas: '⨶',\n ouml: 'ö',\n ovbar: '⌽',\n par: '∥',\n para: '¶',\n parallel: '∥',\n parsim: '⫳',\n parsl: '⫽',\n part: '∂',\n pcy: 'п',\n percnt: '%',\n period: '.',\n permil: '‰',\n perp: '⊥',\n pertenk: '‱',\n pfr: '𝔭',\n phi: 'φ',\n phiv: 'ϕ',\n phmmat: 'ℳ',\n phone: '☎',\n pi: 'π',\n pitchfork: '⋔',\n piv: 'ϖ',\n planck: 'ℏ',\n planckh: 'ℎ',\n plankv: 'ℏ',\n plus: '+',\n plusacir: '⨣',\n plusb: '⊞',\n pluscir: '⨢',\n plusdo: '∔',\n plusdu: '⨥',\n pluse: '⩲',\n plusmn: '±',\n plussim: '⨦',\n plustwo: '⨧',\n pm: '±',\n pointint: '⨕',\n popf: '𝕡',\n pound: '£',\n pr: '≺',\n prE: '⪳',\n prap: '⪷',\n prcue: '≼',\n pre: '⪯',\n prec: '≺',\n precapprox: '⪷',\n preccurlyeq: '≼',\n preceq: '⪯',\n precnapprox: '⪹',\n precneqq: '⪵',\n precnsim: '⋨',\n precsim: '≾',\n prime: '′',\n primes: 'ℙ',\n prnE: '⪵',\n prnap: '⪹',\n prnsim: '⋨',\n prod: '∏',\n profalar: '⌮',\n profline: '⌒',\n profsurf: '⌓',\n prop: '∝',\n propto: '∝',\n prsim: '≾',\n prurel: '⊰',\n pscr: '𝓅',\n psi: 'ψ',\n puncsp: ' ',\n qfr: '𝔮',\n qint: '⨌',\n qopf: '𝕢',\n qprime: '⁗',\n qscr: '𝓆',\n quaternions: 'ℍ',\n quatint: '⨖',\n quest: '?',\n questeq: '≟',\n quot: '\"',\n rAarr: '⇛',\n rArr: '⇒',\n rAtail: '⤜',\n rBarr: '⤏',\n rHar: '⥤',\n race: '∽̱',\n racute: 'ŕ',\n radic: '√',\n raemptyv: '⦳',\n rang: '⟩',\n rangd: '⦒',\n range: '⦥',\n rangle: '⟩',\n raquo: '»',\n rarr: '→',\n rarrap: '⥵',\n rarrb: '⇥',\n rarrbfs: '⤠',\n rarrc: '⤳',\n rarrfs: '⤞',\n rarrhk: '↪',\n rarrlp: '↬',\n rarrpl: '⥅',\n rarrsim: '⥴',\n rarrtl: '↣',\n rarrw: '↝',\n ratail: '⤚',\n ratio: '∶',\n rationals: 'ℚ',\n rbarr: '⤍',\n rbbrk: '❳',\n rbrace: '}',\n rbrack: ']',\n rbrke: '⦌',\n rbrksld: '⦎',\n rbrkslu: '⦐',\n rcaron: 'ř',\n rcedil: 'ŗ',\n rceil: '⌉',\n rcub: '}',\n rcy: 'р',\n rdca: '⤷',\n rdldhar: '⥩',\n rdquo: '”',\n rdquor: '”',\n rdsh: '↳',\n real: 'ℜ',\n realine: 'ℛ',\n realpart: 'ℜ',\n reals: 'ℝ',\n rect: '▭',\n reg: '®',\n rfisht: '⥽',\n rfloor: '⌋',\n rfr: '𝔯',\n rhard: '⇁',\n rharu: '⇀',\n rharul: '⥬',\n rho: 'ρ',\n rhov: 'ϱ',\n rightarrow: '→',\n rightarrowtail: '↣',\n rightharpoondown: '⇁',\n rightharpoonup: '⇀',\n rightleftarrows: '⇄',\n rightleftharpoons: '⇌',\n rightrightarrows: '⇉',\n rightsquigarrow: '↝',\n rightthreetimes: '⋌',\n ring: '˚',\n risingdotseq: '≓',\n rlarr: '⇄',\n rlhar: '⇌',\n rlm: '‏',\n rmoust: '⎱',\n rmoustache: '⎱',\n rnmid: '⫮',\n roang: '⟭',\n roarr: '⇾',\n robrk: '⟧',\n ropar: '⦆',\n ropf: '𝕣',\n roplus: '⨮',\n rotimes: '⨵',\n rpar: ')',\n rpargt: '⦔',\n rppolint: '⨒',\n rrarr: '⇉',\n rsaquo: '›',\n rscr: '𝓇',\n rsh: '↱',\n rsqb: ']',\n rsquo: '’',\n rsquor: '’',\n rthree: '⋌',\n rtimes: '⋊',\n rtri: '▹',\n rtrie: '⊵',\n rtrif: '▸',\n rtriltri: '⧎',\n ruluhar: '⥨',\n rx: '℞',\n sacute: 'ś',\n sbquo: '‚',\n sc: '≻',\n scE: '⪴',\n scap: '⪸',\n scaron: 'š',\n sccue: '≽',\n sce: '⪰',\n scedil: 'ş',\n scirc: 'ŝ',\n scnE: '⪶',\n scnap: '⪺',\n scnsim: '⋩',\n scpolint: '⨓',\n scsim: '≿',\n scy: 'с',\n sdot: '⋅',\n sdotb: '⊡',\n sdote: '⩦',\n seArr: '⇘',\n searhk: '⤥',\n searr: '↘',\n searrow: '↘',\n sect: '§',\n semi: ';',\n seswar: '⤩',\n setminus: '∖',\n setmn: '∖',\n sext: '✶',\n sfr: '𝔰',\n sfrown: '⌢',\n sharp: '♯',\n shchcy: 'щ',\n shcy: 'ш',\n shortmid: '∣',\n shortparallel: '∥',\n shy: '­',\n sigma: 'σ',\n sigmaf: 'ς',\n sigmav: 'ς',\n sim: '∼',\n simdot: '⩪',\n sime: '≃',\n simeq: '≃',\n simg: '⪞',\n simgE: '⪠',\n siml: '⪝',\n simlE: '⪟',\n simne: '≆',\n simplus: '⨤',\n simrarr: '⥲',\n slarr: '←',\n smallsetminus: '∖',\n smashp: '⨳',\n smeparsl: '⧤',\n smid: '∣',\n smile: '⌣',\n smt: '⪪',\n smte: '⪬',\n smtes: '⪬︀',\n softcy: 'ь',\n sol: '/',\n solb: '⧄',\n solbar: '⌿',\n sopf: '𝕤',\n spades: '♠',\n spadesuit: '♠',\n spar: '∥',\n sqcap: '⊓',\n sqcaps: '⊓︀',\n sqcup: '⊔',\n sqcups: '⊔︀',\n sqsub: '⊏',\n sqsube: '⊑',\n sqsubset: '⊏',\n sqsubseteq: '⊑',\n sqsup: '⊐',\n sqsupe: '⊒',\n sqsupset: '⊐',\n sqsupseteq: '⊒',\n squ: '□',\n square: '□',\n squarf: '▪',\n squf: '▪',\n srarr: '→',\n sscr: '𝓈',\n ssetmn: '∖',\n ssmile: '⌣',\n sstarf: '⋆',\n star: '☆',\n starf: '★',\n straightepsilon: 'ϵ',\n straightphi: 'ϕ',\n strns: '¯',\n sub: '⊂',\n subE: '⫅',\n subdot: '⪽',\n sube: '⊆',\n subedot: '⫃',\n submult: '⫁',\n subnE: '⫋',\n subne: '⊊',\n subplus: '⪿',\n subrarr: '⥹',\n subset: '⊂',\n subseteq: '⊆',\n subseteqq: '⫅',\n subsetneq: '⊊',\n subsetneqq: '⫋',\n subsim: '⫇',\n subsub: '⫕',\n subsup: '⫓',\n succ: '≻',\n succapprox: '⪸',\n succcurlyeq: '≽',\n succeq: '⪰',\n succnapprox: '⪺',\n succneqq: '⪶',\n succnsim: '⋩',\n succsim: '≿',\n sum: '∑',\n sung: '♪',\n sup1: '¹',\n sup2: '²',\n sup3: '³',\n sup: '⊃',\n supE: '⫆',\n supdot: '⪾',\n supdsub: '⫘',\n supe: '⊇',\n supedot: '⫄',\n suphsol: '⟉',\n suphsub: '⫗',\n suplarr: '⥻',\n supmult: '⫂',\n supnE: '⫌',\n supne: '⊋',\n supplus: '⫀',\n supset: '⊃',\n supseteq: '⊇',\n supseteqq: '⫆',\n supsetneq: '⊋',\n supsetneqq: '⫌',\n supsim: '⫈',\n supsub: '⫔',\n supsup: '⫖',\n swArr: '⇙',\n swarhk: '⤦',\n swarr: '↙',\n swarrow: '↙',\n swnwar: '⤪',\n szlig: 'ß',\n target: '⌖',\n tau: 'τ',\n tbrk: '⎴',\n tcaron: 'ť',\n tcedil: 'ţ',\n tcy: 'т',\n tdot: '⃛',\n telrec: '⌕',\n tfr: '𝔱',\n there4: '∴',\n therefore: '∴',\n theta: 'θ',\n thetasym: 'ϑ',\n thetav: 'ϑ',\n thickapprox: '≈',\n thicksim: '∼',\n thinsp: ' ',\n thkap: '≈',\n thksim: '∼',\n thorn: 'þ',\n tilde: '˜',\n times: '×',\n timesb: '⊠',\n timesbar: '⨱',\n timesd: '⨰',\n tint: '∭',\n toea: '⤨',\n top: '⊤',\n topbot: '⌶',\n topcir: '⫱',\n topf: '𝕥',\n topfork: '⫚',\n tosa: '⤩',\n tprime: '‴',\n trade: '™',\n triangle: '▵',\n triangledown: '▿',\n triangleleft: '◃',\n trianglelefteq: '⊴',\n triangleq: '≜',\n triangleright: '▹',\n trianglerighteq: '⊵',\n tridot: '◬',\n trie: '≜',\n triminus: '⨺',\n triplus: '⨹',\n trisb: '⧍',\n tritime: '⨻',\n trpezium: '⏢',\n tscr: '𝓉',\n tscy: 'ц',\n tshcy: 'ћ',\n tstrok: 'ŧ',\n twixt: '≬',\n twoheadleftarrow: '↞',\n twoheadrightarrow: '↠',\n uArr: '⇑',\n uHar: '⥣',\n uacute: 'ú',\n uarr: '↑',\n ubrcy: 'ў',\n ubreve: 'ŭ',\n ucirc: 'û',\n ucy: 'у',\n udarr: '⇅',\n udblac: 'ű',\n udhar: '⥮',\n ufisht: '⥾',\n ufr: '𝔲',\n ugrave: 'ù',\n uharl: '↿',\n uharr: '↾',\n uhblk: '▀',\n ulcorn: '⌜',\n ulcorner: '⌜',\n ulcrop: '⌏',\n ultri: '◸',\n umacr: 'ū',\n uml: '¨',\n uogon: 'ų',\n uopf: '𝕦',\n uparrow: '↑',\n updownarrow: '↕',\n upharpoonleft: '↿',\n upharpoonright: '↾',\n uplus: '⊎',\n upsi: 'υ',\n upsih: 'ϒ',\n upsilon: 'υ',\n upuparrows: '⇈',\n urcorn: '⌝',\n urcorner: '⌝',\n urcrop: '⌎',\n uring: 'ů',\n urtri: '◹',\n uscr: '𝓊',\n utdot: '⋰',\n utilde: 'ũ',\n utri: '▵',\n utrif: '▴',\n uuarr: '⇈',\n uuml: 'ü',\n uwangle: '⦧',\n vArr: '⇕',\n vBar: '⫨',\n vBarv: '⫩',\n vDash: '⊨',\n vangrt: '⦜',\n varepsilon: 'ϵ',\n varkappa: 'ϰ',\n varnothing: '∅',\n varphi: 'ϕ',\n varpi: 'ϖ',\n varpropto: '∝',\n varr: '↕',\n varrho: 'ϱ',\n varsigma: 'ς',\n varsubsetneq: '⊊︀',\n varsubsetneqq: '⫋︀',\n varsupsetneq: '⊋︀',\n varsupsetneqq: '⫌︀',\n vartheta: 'ϑ',\n vartriangleleft: '⊲',\n vartriangleright: '⊳',\n vcy: 'в',\n vdash: '⊢',\n vee: '∨',\n veebar: '⊻',\n veeeq: '≚',\n vellip: '⋮',\n verbar: '|',\n vert: '|',\n vfr: '𝔳',\n vltri: '⊲',\n vnsub: '⊂⃒',\n vnsup: '⊃⃒',\n vopf: '𝕧',\n vprop: '∝',\n vrtri: '⊳',\n vscr: '𝓋',\n vsubnE: '⫋︀',\n vsubne: '⊊︀',\n vsupnE: '⫌︀',\n vsupne: '⊋︀',\n vzigzag: '⦚',\n wcirc: 'ŵ',\n wedbar: '⩟',\n wedge: '∧',\n wedgeq: '≙',\n weierp: '℘',\n wfr: '𝔴',\n wopf: '𝕨',\n wp: '℘',\n wr: '≀',\n wreath: '≀',\n wscr: '𝓌',\n xcap: '⋂',\n xcirc: '◯',\n xcup: '⋃',\n xdtri: '▽',\n xfr: '𝔵',\n xhArr: '⟺',\n xharr: '⟷',\n xi: 'ξ',\n xlArr: '⟸',\n xlarr: '⟵',\n xmap: '⟼',\n xnis: '⋻',\n xodot: '⨀',\n xopf: '𝕩',\n xoplus: '⨁',\n xotime: '⨂',\n xrArr: '⟹',\n xrarr: '⟶',\n xscr: '𝓍',\n xsqcup: '⨆',\n xuplus: '⨄',\n xutri: '△',\n xvee: '⋁',\n xwedge: '⋀',\n yacute: 'ý',\n yacy: 'я',\n ycirc: 'ŷ',\n ycy: 'ы',\n yen: '¥',\n yfr: '𝔶',\n yicy: 'ї',\n yopf: '𝕪',\n yscr: '𝓎',\n yucy: 'ю',\n yuml: 'ÿ',\n zacute: 'ź',\n zcaron: 'ž',\n zcy: 'з',\n zdot: 'ż',\n zeetrf: 'ℨ',\n zeta: 'ζ',\n zfr: '𝔷',\n zhcy: 'ж',\n zigrarr: '⇝',\n zopf: '𝕫',\n zscr: '𝓏',\n zwj: '‍',\n zwnj: '‌'\n};","import { characterEntities } from 'character-entities';\nconst own = {}.hasOwnProperty;\n/**\n * Decode a single character reference (without the `&` or `;`).\n * You probably only need this when you’re building parsers yourself that follow\n * different rules compared to HTML.\n * This is optimized to be tiny in browsers.\n *\n * @param {string} value\n * `notin` (named), `#123` (deci), `#x123` (hexa).\n * @returns {string|false}\n * Decoded reference.\n */\n\nexport function decodeNamedCharacterReference(value) {\n return own.call(characterEntities, value) ? characterEntities[value] : false;\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n\n let max;\n /** @type {(code: Code) => boolean} */\n\n let test;\n return start;\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('characterReference');\n effects.enter('characterReferenceMarker');\n effects.consume(code);\n effects.exit('characterReferenceMarker');\n return open;\n }\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function open(code) {\n if (code === 35) {\n effects.enter('characterReferenceMarkerNumeric');\n effects.consume(code);\n effects.exit('characterReferenceMarkerNumeric');\n return numeric;\n }\n\n effects.enter('characterReferenceValue');\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter('characterReferenceMarkerHexadecimal');\n effects.consume(code);\n effects.exit('characterReferenceMarkerHexadecimal');\n effects.enter('characterReferenceValue');\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n\n effects.enter('characterReferenceValue');\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit('characterReferenceValue');\n\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n } // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n\n\n effects.enter('characterReferenceMarker');\n effects.consume(code);\n effects.exit('characterReferenceMarker');\n effects.exit('characterReference');\n return ok;\n }\n\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('characterEscape');\n effects.enter('escapeMarker');\n effects.consume(code);\n effects.exit('escapeMarker');\n return inside;\n }\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter('characterEscapeValue');\n effects.consume(code);\n effects.exit('characterEscapeValue');\n effects.exit('characterEscape');\n return ok;\n }\n\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n /** @type {State} */\n\n function start(code) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return factorySpace(effects, ok, 'linePrefix');\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\n\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n};\n/** @type {Construct} */\n\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\n\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\n\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n/** @type {Resolver} */\n\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n\n while (++index < events.length) {\n const token = events[index][1];\n\n if (token.type === 'labelImage' || token.type === 'labelLink' || token.type === 'labelEnd') {\n // Remove the marker.\n events.splice(index + 1, token.type === 'labelImage' ? 4 : 2);\n token.type = 'data';\n index++;\n }\n }\n\n return events;\n}\n/** @type {Resolver} */\n\n\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n\n let token;\n /** @type {number | undefined} */\n\n let open;\n /** @type {number | undefined} */\n\n let close;\n /** @type {Array} */\n\n let media; // Find an opening.\n\n while (index--) {\n token = events[index][1];\n\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === 'link' || token.type === 'labelLink' && token._inactive) {\n break;\n } // Mark other link openings as inactive, as we can’t have links in\n // links.\n\n\n if (events[index][0] === 'enter' && token.type === 'labelLink') {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === 'labelImage' || token.type === 'labelLink') && !token._balanced) {\n open = index;\n\n if (token.type !== 'labelLink') {\n offset = 2;\n break;\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index;\n }\n }\n\n const group = {\n type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const label = {\n type: 'label',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n };\n const text = {\n type: 'labelText',\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n };\n media = [['enter', group, context], ['enter', label, context]]; // Opening marker.\n\n media = push(media, events.slice(open + 1, open + offset + 3)); // Text open.\n\n media = push(media, [['enter', text, context]]); // Always populated by defaults.\n // Between.\n\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context)); // Text close, marker close, label close.\n\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]); // Reference, resource, or so.\n\n media = push(media, events.slice(close + 1)); // Media close.\n\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n\n let labelStart;\n /** @type {boolean} */\n\n let defined; // Find an opening.\n\n while (index--) {\n if ((self.events[index][1].type === 'labelImage' || self.events[index][1].type === 'labelLink') && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n\n return start;\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n } // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n\n\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter('labelEnd');\n effects.enter('labelMarker');\n effects.consume(code);\n effects.exit('labelMarker');\n effects.exit('labelEnd');\n return after;\n }\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n } // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n\n\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n } // Shortcut (`[asd]`) reference?\n\n\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n\n function resourceStart(code) {\n effects.enter('resource');\n effects.enter('resourceMarker');\n effects.consume(code);\n effects.exit('resourceMarker');\n return resourceBefore;\n }\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, 'resourceDestination', 'resourceDestinationLiteral', 'resourceDestinationLiteralMarker', 'resourceDestinationRaw', 'resourceDestinationString', 32)(code);\n }\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, 'resourceTitle', 'resourceTitleMarker', 'resourceTitleString')(code);\n }\n\n return resourceEnd(code);\n }\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter('resourceMarker');\n effects.consume(code);\n effects.exit('resourceMarker');\n effects.exit('resource');\n return ok;\n }\n\n return nok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, 'reference', 'referenceMarker', 'referenceString')(code);\n }\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n effects.enter('reference');\n effects.enter('referenceMarker');\n effects.consume(code);\n effects.exit('referenceMarker');\n return referenceCollapsedOpen;\n }\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter('referenceMarker');\n effects.consume(code);\n effects.exit('referenceMarker');\n effects.exit('reference');\n return ok;\n }\n\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\n\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\n\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n};\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n\n let open;\n /** @type {Token} */\n\n let group;\n /** @type {Token} */\n\n let text;\n /** @type {Token} */\n\n let openingSequence;\n /** @type {Token} */\n\n let closingSequence;\n /** @type {number} */\n\n let use;\n /** @type {Array} */\n\n let nextEvents;\n /** @type {number} */\n\n let offset; // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index; // Now walk back to find an opener.\n\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open && // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n } // Number of markers to use from the sequence.\n\n\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = Object.assign({}, events[open][1].end);\n const end = Object.assign({}, events[index][1].start);\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start,\n end: Object.assign({}, events[open][1].end)\n };\n closingSequence = {\n type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n start: Object.assign({}, events[index][1].start),\n end\n };\n text = {\n type: use > 1 ? 'strongText' : 'emphasisText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n group = {\n type: use > 1 ? 'strong' : 'emphasis',\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n };\n events[open][1].end = Object.assign({}, openingSequence.start);\n events[index][1].start = Object.assign({}, closingSequence.end);\n nextEvents = []; // If there are more markers in the opening, add them before.\n\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n } // Opening.\n\n\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]); // Always populated by defaults.\n // Between.\n\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context)); // Closing.\n\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]); // If there are more markers in the closing, add them after.\n\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n } // Remove remaining sequences.\n\n\n index = -1;\n\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n /** @type {NonNullable} */\n\n let marker;\n return start;\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n\n\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n\n const token = effects.exit('attentionSequence'); // To do: next major: move this to resolver, just like `markdown-rs`.\n\n const after = classifyCharacter(code); // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\n\n\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n/** @satisfies {Extension['document']} */\n\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n/** @satisfies {Extension['contentInitial']} */\n\nexport const contentInitial = {\n [91]: definition\n};\n/** @satisfies {Extension['flowInitial']} */\n\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n/** @satisfies {Extension['flow']} */\n\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n/** @satisfies {Extension['string']} */\n\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n/** @satisfies {Extension['text']} */\n\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n/** @satisfies {Extension['insideSpan']} */\n\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n/** @satisfies {Extension['attentionMarkers']} */\n\nexport const attentionMarkers = {\n null: [42, 95]\n};\n/** @satisfies {Extension['disable']} */\n\nexport const disable = {\n null: []\n};","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { splice } from 'micromark-util-chunked';\n/** @type {Construct} */\n\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n};\n/** @type {Resolver} */\n\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2;\n let contentStart = 3;\n /** @type {Token} */\n\n let content;\n /** @type {Token} */\n\n let text; // Prefix whitespace, part of the opening.\n\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2;\n } // Suffix whitespace, part of the closing.\n\n\n if (contentEnd - 2 > contentStart && events[contentEnd][1].type === 'whitespace') {\n contentEnd -= 2;\n }\n\n if (events[contentEnd][1].type === 'atxHeadingSequence' && (contentStart === contentEnd - 1 || contentEnd - 4 > contentStart && events[contentEnd - 2][1].type === 'whitespace')) {\n contentEnd -= contentStart + 1 === contentEnd ? 2 : 4;\n }\n\n if (contentEnd > contentStart) {\n content = {\n type: 'atxHeadingText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end\n };\n text = {\n type: 'chunkText',\n start: events[contentStart][1].start,\n end: events[contentEnd][1].end,\n contentType: 'text'\n };\n splice(events, contentStart, contentEnd - contentStart + 1, [['enter', content, context], ['enter', text, context], ['exit', text, context], ['exit', content, context]]);\n }\n\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0;\n return start;\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter('atxHeading');\n return before(code);\n }\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function before(code) {\n effects.enter('atxHeadingSequence');\n return sequenceOpen(code);\n }\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code);\n return sequenceOpen;\n } // Always at least one `#`.\n\n\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence');\n return atBreak(code);\n }\n\n return nok(code);\n }\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function atBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence');\n return sequenceFurther(code);\n }\n\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading'); // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n\n return ok(code);\n }\n\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code);\n } // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n\n\n effects.enter('atxHeadingText');\n return data(code);\n }\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code);\n return sequenceFurther;\n }\n\n effects.exit('atxHeadingSequence');\n return atBreak(code);\n }\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText');\n return atBreak(code);\n }\n\n effects.consume(code);\n return data;\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { labelEnd } from './label-end.js';\n/** @type {Construct} */\n\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('labelImage');\n effects.enter('labelImageMarker');\n effects.consume(code);\n effects.exit('labelImageMarker');\n return open;\n }\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function open(code) {\n if (code === 91) {\n effects.enter('labelMarker');\n effects.consume(code);\n effects.exit('labelMarker');\n effects.exit('labelImage');\n return after;\n }\n\n return nok(code);\n }\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { asciiAlpha, asciiAlphanumeric, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('autolink');\n effects.enter('autolinkMarker');\n effects.consume(code);\n effects.exit('autolinkMarker');\n effects.enter('autolinkProtocol');\n return open;\n }\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n\n return emailAtext(code);\n }\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n\n return emailAtext(code);\n }\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n } // ASCII alphanumeric and `+`, `-`, and `.`.\n\n\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n\n size = 0;\n return emailAtext(code);\n }\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol');\n effects.enter('autolinkMarker');\n effects.consume(code);\n effects.exit('autolinkMarker');\n effects.exit('autolink');\n return ok;\n } // ASCII control, space, or `<`.\n\n\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n\n effects.consume(code);\n return urlInside;\n }\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n\n return nok(code);\n }\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n\n\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail';\n effects.enter('autolinkMarker');\n effects.consume(code);\n effects.exit('autolinkMarker');\n effects.exit('autolink');\n return ok;\n }\n\n return emailValue(code);\n }\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n\n let marker;\n /** @type {number} */\n\n let index;\n /** @type {State} */\n\n let returnState;\n return start;\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('htmlText');\n effects.enter('htmlTextData');\n effects.consume(code);\n return open;\n }\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n\n if (code === 63) {\n effects.consume(code);\n return instruction;\n } // ASCII alphabetical.\n\n\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n\n return nok(code);\n }\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n\n return nok(code);\n }\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n\n return nok(code);\n }\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n\n effects.consume(code);\n return comment;\n }\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n\n return comment(code);\n }\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n\n\n function cdataOpenInside(code) {\n const value = 'CDATA[';\n\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n\n return nok(code);\n }\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n\n\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n\n effects.consume(code);\n return cdata;\n }\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n\n return cdata(code);\n }\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n\n return cdata(code);\n }\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n\n effects.consume(code);\n return declaration;\n }\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n\n effects.consume(code);\n return instruction;\n }\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n\n return nok(code);\n }\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n\n return tagCloseBetween(code);\n }\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n\n return end(code);\n }\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n\n return nok(code);\n }\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n } // ASCII alphabetical and `:` and `_`.\n\n\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n\n return end(code);\n }\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n\n return tagOpenAttributeNameAfter(code);\n }\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n\n return tagOpenBetween(code);\n }\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n\n if (code === null) {\n return nok(code);\n }\n\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n\n return nok(code);\n }\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit('htmlTextData');\n effects.exit('htmlText');\n return ok;\n }\n\n return nok(code);\n }\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n\n\n function lineEndingBefore(code) {\n effects.exit('htmlTextData');\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return lineEndingAfter;\n }\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function lineEndingAfter(code) {\n // Always populated by defaults.\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, 'linePrefix', self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function lineEndingAfterPrefix(code) {\n effects.enter('htmlTextData');\n return returnState(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { labelEnd } from './label-end.js';\n/** @type {Construct} */\n\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('labelLink');\n effects.enter('labelMarker');\n effects.consume(code);\n effects.exit('labelMarker');\n effects.exit('labelLink');\n return after;\n }\n /** @type {State} */\n\n\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('hardBreakEscape');\n effects.consume(code);\n return after;\n }\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n\n\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit('hardBreakEscape');\n return ok(code);\n }\n\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\n\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}; // To do: next major: don’t resolve, like `markdown-rs`.\n\n/** @type {Resolver} */\n\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n\n let index;\n /** @type {number | undefined} */\n\n let enter; // If we start and end with an EOL or a space.\n\n if ((events[headEnterIndex][1].type === 'lineEnding' || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === 'lineEnding' || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex; // And we have data.\n\n while (++index < tailExitIndex) {\n if (events[index][1].type === 'codeTextData') {\n // Then we have padding.\n events[headEnterIndex][1].type = 'codeTextPadding';\n events[tailExitIndex][1].type = 'codeTextPadding';\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n } // Merge adjacent spaces and data.\n\n\n index = headEnterIndex - 1;\n tailExitIndex++;\n\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === 'lineEnding') {\n events[enter][1].type = 'codeTextData';\n\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n\n enter = undefined;\n }\n }\n\n return events;\n}\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\n\n\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === 'characterEscape';\n}\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n\n\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n\n let size;\n /** @type {Token} */\n\n let token;\n return start;\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n\n function start(code) {\n effects.enter('codeText');\n effects.enter('codeTextSequence');\n return sequenceOpen(code);\n }\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n\n effects.exit('codeTextSequence');\n return between(code);\n }\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n\n\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n } // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n\n\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n } // Closing fence? Could also be data.\n\n\n if (code === 96) {\n token = effects.enter('codeTextSequence');\n size = 0;\n return sequenceClose(code);\n }\n\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding');\n effects.consume(code);\n effects.exit('lineEnding');\n return between;\n } // Data.\n\n\n effects.enter('codeTextData');\n return data(code);\n }\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit('codeTextData');\n return between(code);\n }\n\n effects.consume(code);\n return data;\n }\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n\n\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n } // Done!\n\n\n if (size === sizeOpen) {\n effects.exit('codeTextSequence');\n effects.exit('codeText');\n return ok(code);\n } // More or less accents: mark as data.\n\n\n token.type = 'codeTextData';\n return data(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { text, string } from './initialize/text.js';\nimport { createTokenizer } from './create-tokenizer.js';\nimport * as defaultConstructs from './constructs.js';\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\n\nexport function parse(options) {\n const settings = options || {};\n const constructs =\n /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n /** @type {ParseContext} */\n\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n };\n return parser;\n /**\n * @param {InitialConstruct} initial\n */\n\n function create(initial) {\n return creator;\n /** @type {Create} */\n\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array}\n */\nconst search = /[\\0\\t\\n\\r]/g;\n/**\n * @returns {Preprocessor}\n */\n\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n\n let start = true;\n /** @type {boolean | undefined} */\n\n let atCarriageReturn;\n return preprocessor;\n /** @type {Preprocessor} */\n\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = [];\n /** @type {RegExpMatchArray | null} */\n\n let match;\n /** @type {number} */\n\n let next;\n /** @type {number} */\n\n let startPosition;\n /** @type {number} */\n\n let endPosition;\n /** @type {Code} */\n\n let code; // @ts-expect-error `Buffer` does allow an encoding.\n\n value = buffer + value.toString(encoding);\n startPosition = 0;\n buffer = '';\n\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n\n start = undefined;\n }\n\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n match = search.exec(value);\n endPosition = match && match.index !== undefined ? match.index : value.length;\n code = value.charCodeAt(endPosition);\n\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n\n case 9:\n {\n next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n\n while (column++ < next) chunks.push(-1);\n\n break;\n }\n\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n\n startPosition = endPosition + 1;\n }\n\n if (end) {\n if (atCarriageReturn) chunks.push(-5);\n if (buffer) chunks.push(buffer);\n chunks.push(null);\n }\n\n return chunks;\n }\n}","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCharCode(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n\n if ( // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 || // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 || // Lone high surrogates and low surrogates.\n code > 55295 && code < 57344 || // Noncharacters.\n code > 64975 && code < 65008\n /* eslint-disable no-bitwise */\n || (code & 65535) === 65535 || (code & 65535) === 65534\n /* eslint-enable no-bitwise */\n || // Out of range\n code > 1114111) {\n return '\\uFFFD';\n }\n\n return String.fromCharCode(code);\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\n\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\n\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n } // Reference.\n\n\n const head = $2.charCodeAt(0);\n\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract} Parent\n *\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | undefined | null | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {void}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(key: Key) => CompileData[Key]} getData\n * Get data from the key/value store.\n * @property {(key: Key, value?: CompileData[Key]) => void} setData\n * Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n * Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n * Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\nimport { toString } from 'mdast-util-to-string';\nimport { parse } from 'micromark/lib/parse.js';\nimport { preprocess } from 'micromark/lib/preprocess.js';\nimport { postprocess } from 'micromark/lib/postprocess.js';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n/**\n * @param value\n * Markdown to parse.\n * @param encoding\n * Character encoding for when `value` is `Buffer`.\n * @param options\n * Configuration.\n * @returns\n * mdast tree.\n */\n\nexport const fromMarkdown =\n/**\n * @type {(\n * ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n * ((value: Value, options?: Options | null | undefined) => Root)\n * )}\n */\n\n/**\n * @param {Value} value\n * @param {Encoding | Options | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n */\nfunction (value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n};\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\n\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n /** @type {CompileData} */\n\n const data = {};\n return compile;\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit} */\n\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n setData,\n getData\n };\n /** @type {Array} */\n\n const listStack = [];\n let index = -1;\n\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === 'listOrdered' || events[index][1].type === 'listUnordered') {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n\n index = -1;\n\n while (++index < events.length) {\n const handler = config[events[index][0]];\n\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n } // Handle tokens still being open.\n\n\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n } // Figure out `root` position.\n\n\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n }; // Call transforms.\n\n index = -1;\n\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n\n return tree;\n }\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n\n\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n\n let listItem;\n /** @type {number | undefined} */\n\n let lineIndex;\n /** @type {number | undefined} */\n\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n\n let atMarker;\n\n while (++index <= length) {\n const event = events[index];\n\n if (event[1].type === 'listUnordered' || event[1].type === 'listOrdered' || event[1].type === 'blockQuote') {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n\n atMarker = undefined;\n } else if (event[1].type === 'lineEndingBlank') {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n\n atMarker = undefined;\n }\n } else if (event[1].type === 'linePrefix' || event[1].type === 'listItemValue' || event[1].type === 'listItemMarker' || event[1].type === 'listItemPrefix' || event[1].type === 'listItemPrefixWhitespace') {// Empty.\n } else {\n atMarker = undefined;\n }\n\n if (!containerBalance && event[0] === 'enter' && event[1].type === 'listItemPrefix' || containerBalance === -1 && event[0] === 'exit' && (event[1].type === 'listUnordered' || event[1].type === 'listOrdered')) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n\n if (tailEvent[1].type === 'lineEnding' || tailEvent[1].type === 'lineEndingBlank') {\n if (tailEvent[0] === 'exit') continue;\n\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank';\n listSpread = true;\n }\n\n tailEvent[1].type = 'lineEnding';\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === 'linePrefix' || tailEvent[1].type === 'blockQuotePrefix' || tailEvent[1].type === 'blockQuotePrefixWhitespace' || tailEvent[1].type === 'blockQuoteMarker' || tailEvent[1].type === 'listItemIndent') {// Empty\n } else {\n break;\n }\n }\n\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n } // Fix position.\n\n\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n } // Create a new list item.\n\n\n if (event[1].type === 'listItemPrefix') {\n listItem = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }; // @ts-expect-error: `listItem` is most definitely defined, TS...\n\n events.splice(index, 0, ['enter', listItem, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n\n events[start][1]._spread = listSpread;\n return length;\n }\n /**\n * Set data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @param {CompileData[Key]} [value]\n * New value.\n * @returns {void}\n * Nothing.\n */\n\n\n function setData(key, value) {\n data[key] = value;\n }\n /**\n * Get data.\n *\n * @template {keyof CompileData} Key\n * Field type.\n * @param {Key} key\n * Key of field.\n * @returns {CompileData[Key]}\n * Value.\n */\n\n\n function getData(key) {\n return data[key];\n }\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Node} create\n * Create a node.\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n\n\n function opener(create, and) {\n return open;\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n /**\n * @this {CompileContext}\n * @returns {void}\n */\n\n\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n /**\n * @template {Node} Kind\n * Node type.\n * @this {CompileContext}\n * Context.\n * @param {Kind} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {Kind}\n * The given node.\n */\n\n\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]; // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n\n parent.children.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler]); // @ts-expect-error: `end` will be patched later.\n\n node.position = {\n start: point(token.start)\n };\n return node;\n }\n /**\n * Create a closer handle.\n *\n * @param {Handle} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n\n\n function closer(and) {\n return close;\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {void}\n */\n\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {Node}\n * The closed node.\n */\n\n\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n\n node.position.end = point(token.end);\n return node;\n }\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n\n\n function resume() {\n return toString(this.stack.pop());\n } //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onenterlistordered() {\n setData('expectingFirstListItemValue', true);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onenterlistitemvalue(token) {\n if (getData('expectingFirstListItemValue')) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n setData('expectingFirstListItemValue');\n }\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (getData('flowCodeInside')) return;\n this.buffer();\n setData('flowCodeInside', true);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n setData('flowCodeInside');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitsetextheadingtext() {\n setData('setextHeadingSlurpLineEnding', true);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitsetextheading() {\n setData('setextHeadingSlurpLineEnding');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n let tail = node.children[node.children.length - 1];\n\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text(); // @ts-expect-error: we’ll add `end` later.\n\n tail.position = {\n start: point(token.start)\n }; // @ts-expect-error: Assume `parent` accepts `text`.\n\n node.children.push(tail);\n }\n\n this.stack.push(tail);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]; // If we’re at a hard break, include the line ending in there.\n\n if (getData('atHardBreak')) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n setData('atHardBreak');\n return;\n }\n\n if (!getData('setextHeadingSlurpLineEnding') && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexithardbreak() {\n setData('atHardBreak', true);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]; // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut';\n node.type += 'Reference'; // @ts-expect-error: mutate.\n\n node.referenceType = referenceType; // @ts-expect-error: mutate.\n\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier; // @ts-expect-error: mutate.\n\n delete node.label;\n }\n\n setData('referenceType');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]; // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n\n if (getData('inReference')) {\n /** @type {ReferenceType} */\n const referenceType = getData('referenceType') || 'shortcut';\n node.type += 'Reference'; // @ts-expect-error: mutate.\n\n node.referenceType = referenceType; // @ts-expect-error: mutate.\n\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier; // @ts-expect-error: mutate.\n\n delete node.label;\n }\n\n setData('referenceType');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2]; // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n\n ancestor.label = decodeString(string); // @ts-expect-error: same as above.\n\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1]; // Assume a reference.\n\n setData('inReference', true);\n\n if (node.type === 'link') {\n /** @type {Array} */\n // @ts-expect-error: Assume static phrasing content.\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitresource() {\n setData('inReference');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onenterreference() {\n setData('referenceType', 'collapsed');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1]; // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n\n node.label = label; // @ts-expect-error: same as above.\n\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n setData('referenceType', 'full');\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcharacterreferencemarker(token) {\n setData('characterReferenceType', token.type);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = getData('characterReferenceType');\n /** @type {string} */\n\n let value;\n\n if (type) {\n value = decodeNumericCharacterReference(data, type === 'characterReferenceMarkerNumeric' ? 10 : 16);\n setData('characterReferenceType');\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n\n const tail = this.stack.pop();\n tail.value += value;\n tail.position.end = point(token.end);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n } //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n\n\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n /** @returns {Code} */\n\n\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n /** @returns {InlineCode} */\n\n\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n /** @returns {Definition} */\n\n\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n /** @returns {Emphasis} */\n\n\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n /** @returns {Heading} */\n\n\n function heading() {\n // @ts-expect-error `depth` will be set later.\n return {\n type: 'heading',\n depth: undefined,\n children: []\n };\n }\n /** @returns {Break} */\n\n\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n /** @returns {HTML} */\n\n\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n /** @returns {Image} */\n\n\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n /** @returns {Link} */\n\n\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n /**\n * @param {Token} token\n * @returns {List}\n */\n\n\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n\n\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n /** @returns {Paragraph} */\n\n\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n /** @returns {Strong} */\n\n\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n /** @returns {Text} */\n\n\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n /** @returns {ThematicBreak} */\n\n\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\n\n\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n/**\n * @param {Config} combined\n * @param {Array>} extensions\n * @returns {void}\n */\n\n\nfunction configure(combined, extensions) {\n let index = -1;\n\n while (++index < extensions.length) {\n const value = extensions[index];\n\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\n\n\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n\n for (key in extension) {\n if (own.call(extension, key)) {\n if (key === 'canContainEols') {\n const right = extension[key];\n\n if (right) {\n combined[key].push(...right);\n }\n } else if (key === 'transforms') {\n const right = extension[key];\n\n if (right) {\n combined[key].push(...right);\n }\n } else if (key === 'enter' || key === 'exit') {\n const right = extension[key];\n\n if (right) {\n Object.assign(combined[key], right);\n }\n }\n }\n }\n}\n/** @type {OnEnterError} */\n\n\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport { subtokenize } from 'micromark-util-subtokenize';\n/**\n * @param {Array} events\n * @returns {Array}\n */\n\nexport function postprocess(events) {\n while (!subtokenize(events)) {// Empty\n }\n\n return events;\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} Options\n */\nimport { fromMarkdown } from 'mdast-util-from-markdown';\n/**\n * @this {import('unified').Processor}\n * @type {import('unified').Plugin<[Options?] | void[], string, Root>}\n */\n\nexport default function remarkParse(options) {\n /** @type {import('unified').ParserFunction} */\n const parser = doc => {\n // Assume options.\n const settings =\n /** @type {Options} */\n this.data('settings');\n return fromMarkdown(doc, Object.assign({}, settings, options, {\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: this.data('micromarkExtensions') || [],\n mdastExtensions: this.data('fromMarkdownExtensions') || []\n }));\n };\n\n Object.assign(this, {\n Parser: parser\n });\n}","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\n\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''));\n\n if (!protocol) {\n return value;\n }\n\n const colon = value.indexOf(':');\n const questionMark = value.indexOf('?');\n const numberSign = value.indexOf('#');\n const slash = value.indexOf('/');\n\n if ( // If there is no protocol, it’s relative.\n colon < 0 || // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign || // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))) {\n return value;\n }\n\n return '';\n}\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\n\nexport function normalizeUri(value) {\n /** @type {Array} */\n const result = [];\n let index = -1;\n let start = 0;\n let skip = 0;\n\n while (++index < value.length) {\n const code = value.charCodeAt(index);\n /** @type {string} */\n\n let replace = ''; // A correct percent encoded value.\n\n if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n skip = 2;\n } // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code);\n }\n } // Astral.\n else if (code > 55295 && code < 57344) {\n const next = value.charCodeAt(index + 1); // A correct surrogate pair.\n\n if (code < 56320 && next > 56319 && next < 57344) {\n replace = String.fromCharCode(code, next);\n skip = 1;\n } // Lone surrogate.\n else {\n replace = '\\uFFFD';\n }\n } // Unicode.\n else {\n replace = String.fromCharCode(code);\n }\n\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace));\n start = index + skip + 1;\n replace = '';\n }\n\n if (skip) {\n index += skip;\n skip = 0;\n }\n }\n\n return result.join('') + value.slice(start);\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @typedef {Record} Props\n * @typedef {null | undefined | string | Props | TestFunctionAnything | Array} Test\n * Check for an arbitrary node, unaware of TypeScript inferral.\n *\n * @callback TestFunctionAnything\n * Check if a node passes a test, unaware of TypeScript inferral.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * 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 | void}\n * Whether this node passes the test.\n */\n\n/**\n * @template {Node} Kind\n * Node type.\n * @typedef {Kind['type'] | Partial | TestFunctionPredicate | Array | TestFunctionPredicate>} PredicateTest\n * Check for a node that can be inferred by TypeScript.\n */\n\n/**\n * Check if a node passes a certain test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback TestFunctionPredicate\n * Complex test function for a node that can be inferred by TypeScript.\n * @param {Node} node\n * 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 {node is Kind}\n * Whether this node passes the test.\n */\n\n/**\n * @callback AssertAnything\n * Check that an arbitrary value is a node, unaware of TypeScript inferral.\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\n/**\n * Check if a node is a node and passes a certain node test.\n *\n * @template {Node} Kind\n * Node type.\n * @callback AssertPredicate\n * Check that an arbitrary value is a specific node, aware of TypeScript.\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 {node is Kind}\n * Whether this is a node and passes a test.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @param test\n * A check for a specific node.\n * @param index\n * The node’s position in its parent.\n * @param parent\n * The node’s parent.\n * @returns\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n/**\n * @type {(\n * (() => false) &\n * ((node: unknown, test: PredicateTest, index: number, parent: Parent, context?: unknown) => node is Kind) &\n * ((node: unknown, test: PredicateTest, index?: null | undefined, parent?: null | undefined, context?: unknown) => node is Kind) &\n * ((node: unknown, test: Test, index: number, parent: Parent, context?: unknown) => boolean) &\n * ((node: unknown, test?: Test, index?: null | undefined, 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\nfunction is(node, test, index, parent, context) {\n const check = convert(test);\n\n if (index !== undefined && index !== null && (typeof index !== 'number' || index < 0 || index === Number.POSITIVE_INFINITY)) {\n throw new Error('Expected positive finite index');\n }\n\n if (parent !== undefined && parent !== null && (!is(parent) || !parent.children)) {\n throw new Error('Expected parent node');\n }\n\n if ((parent === undefined || parent === null) !== (index === undefined || index === null)) {\n throw new Error('Expected both parent and index');\n } // @ts-expect-error Looks like a node.\n\n\n return node && node.type && typeof node.type === 'string' ? Boolean(check.call(context, node, index, parent)) : false;\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\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\n * An assertion.\n */\n\nexport const convert =\n/**\n * @type {(\n * ((test: PredicateTest) => AssertPredicate) &\n * ((test?: Test) => AssertAnything)\n * )}\n */\n\n/**\n * @param {Test} [test]\n * @returns {AssertAnything}\n */\nfunction (test) {\n if (test === undefined || test === null) {\n return ok;\n }\n\n if (typeof test === 'string') {\n return typeFactory(test);\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test);\n }\n\n if (typeof test === 'function') {\n return castFactory(test);\n }\n\n throw new Error('Expected function, string, or object as test');\n};\n/**\n * @param {Array} tests\n * @returns {AssertAnything}\n */\n\nfunction anyFactory(tests) {\n /** @type {Array} */\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 * @this {unknown}\n * @param {Array} parameters\n * @returns {boolean}\n */\n\n function any() {\n let index = -1;\n\n for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {\n parameters[_key] = arguments[_key];\n }\n\n while (++index < checks.length) {\n if (checks[index].call(this, ...parameters)) return true;\n }\n\n return false;\n }\n}\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {AssertAnything}\n */\n\n\nfunction propsFactory(check) {\n return castFactory(all);\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n\n function all(node) {\n /** @type {string} */\n let key;\n\n for (key in check) {\n // @ts-expect-error: hush, it sure works as an index.\n if (node[key] !== check[key]) return false;\n }\n\n return true;\n }\n}\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {AssertAnything}\n */\n\n\nfunction typeFactory(check) {\n return castFactory(type);\n /**\n * @param {Node} node\n */\n\n function type(node) {\n return node && node.type === check;\n }\n}\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunctionAnything} check\n * @returns {AssertAnything}\n */\n\n\nfunction castFactory(check) {\n return assertion;\n /**\n * @this {unknown}\n * @param {unknown} node\n * @param {Array} parameters\n * @returns {boolean}\n */\n\n function assertion(node) {\n for (var _len2 = arguments.length, parameters = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n parameters[_key2 - 1] = arguments[_key2];\n }\n\n return Boolean(node && typeof node === 'object' && 'type' in node && // @ts-expect-error: fine.\n Boolean(check.call(this, node, ...parameters)));\n }\n}\n\nfunction ok() {\n return true;\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n */\n\n/**\n * @typedef {boolean | 'skip'} 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 * @template {Node} [Visited=Node]\n * Visited node type.\n * @template {Parent} [Ancestor=Parent]\n * Ancestor type.\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} 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 */\n\n/**\n * @template {Node} [Tree=Node]\n * Tree type.\n * @template {Test} [Check=string]\n * Test type.\n * @typedef {Visitor, Check>, Extract, Parent>>} 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 */\nimport { convert } from 'unist-util-is';\nimport { color } from './color.js';\n/**\n * Continue traversing as normal.\n */\n\nexport const CONTINUE = true;\n/**\n * Stop traversing immediately.\n */\n\nexport const EXIT = false;\n/**\n * Do not traverse this node’s children.\n */\n\nexport const SKIP = 'skip';\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 * @param tree\n * Tree to traverse.\n * @param test\n * `unist-util-is`-compatible test\n * @param visitor\n * Handle each node.\n * @param reverse\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n * Nothing.\n */\n\nexport const visitParents =\n/**\n * @type {(\n * ((tree: Tree, test: Check, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) &\n * ((tree: Tree, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void)\n * )}\n */\n\n/**\n * @param {Node} tree\n * @param {Test} test\n * @param {Visitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {void}\n */\nfunction (tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor; // @ts-expect-error no visitor given, so `visitor` is test.\n\n visitor = test;\n test = null;\n }\n\n const is = convert(test);\n const step = reverse ? -1 : 1;\n factory(tree, undefined, [])();\n /**\n * @param {Node} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n\n function factory(node, index, parents) {\n /** @type {Record} */\n // @ts-expect-error: hush\n const value = node && typeof node === 'object' ? node : {};\n\n if (typeof value.type === 'string') {\n const name = // `hast`\n typeof value.tagName === 'string' ? value.tagName : // `xast`\n typeof value.name === 'string' ? value.name : undefined;\n Object.defineProperty(visit, 'name', {\n value: 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n });\n }\n\n return visit;\n\n function visit() {\n /** @type {ActionTuple} */\n let result = [];\n /** @type {ActionTuple} */\n\n let subresult;\n /** @type {number} */\n\n let offset;\n /** @type {Array} */\n\n let grandparents;\n\n if (!test || is(node, index, parents[parents.length - 1] || null)) {\n result = toResult(visitor(node, parents));\n\n if (result[0] === EXIT) {\n return result;\n }\n } // @ts-expect-error looks like a parent.\n\n\n if (node.children && result[0] !== SKIP) {\n // @ts-expect-error looks like a parent.\n offset = (reverse ? node.children.length : -1) + step; // @ts-expect-error looks like a parent.\n\n grandparents = parents.concat(node); // @ts-expect-error looks like a parent.\n\n while (offset > -1 && offset < node.children.length) {\n // @ts-expect-error looks like a parent.\n subresult = factory(node.children[offset], offset, grandparents)();\n\n if (subresult[0] === EXIT) {\n return subresult;\n }\n\n offset = typeof subresult[1] === 'number' ? subresult[1] : offset + step;\n }\n }\n\n return result;\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 {ActionTuple}\n * Clean result.\n */\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];\n}","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n * @typedef {import('unist-util-is').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * Check if `Child` can be a child of `Ancestor`.\n *\n * Returns the ancestor when `Child` can be a child of `Ancestor`, or returns\n * `never`.\n *\n * @template {Node} Ancestor\n * Node type.\n * @template {Node} Child\n * Node type.\n * @typedef {(\n * Ancestor extends Parent\n * ? Child extends Ancestor['children'][number]\n * ? Ancestor\n * : never\n * : never\n * )} ParentsOf\n */\n\n/**\n * @template {Node} [Visited=Node]\n * Visited node type.\n * @template {Parent} [Ancestor=Parent]\n * Ancestor type.\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 Node ? number | null : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends Node ? Ancestor | null : 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 */\n\n/**\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 *\n * @template {Node} Visited\n * Node type.\n * @template {Parent} Ancestor\n * Parent type.\n * @typedef {Visitor>} BuildVisitorFromMatch\n */\n\n/**\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 *\n * @template {Node} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n * @typedef {(\n * BuildVisitorFromMatch<\n * import('unist-util-visit-parents/complex-types.js').Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n */\n\n/**\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 *\n * @template {Node} [Tree=Node]\n * Node type.\n * @template {Test} [Check=string]\n * Test type.\n * @typedef {(\n * BuildVisitorFromDescendants<\n * import('unist-util-visit-parents/complex-types.js').InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n */\nimport { visitParents } from 'unist-util-visit-parents';\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 * @param tree\n * Tree to traverse.\n * @param test\n * `unist-util-is`-compatible test\n * @param visitor\n * Handle each node.\n * @param reverse\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns\n * Nothing.\n */\n\nexport const visit =\n/**\n * @type {(\n * ((tree: Tree, test: Check, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void) &\n * ((tree: Tree, visitor: BuildVisitor, reverse?: boolean | null | undefined) => void)\n * )}\n */\n\n/**\n * @param {Node} tree\n * @param {Test} test\n * @param {Visitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {void}\n */\nfunction (tree, test, visitor, reverse) {\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor;\n visitor = test;\n test = null;\n }\n\n visitParents(tree, test, overload, reverse);\n /**\n * @param {Node} node\n * @param {Array} parents\n */\n\n function overload(node, parents) {\n const parent = parents[parents.length - 1];\n return visitor(node, parent ? parent.children.indexOf(node) : null, parent);\n }\n};\nexport { CONTINUE, EXIT, SKIP } from 'unist-util-visit-parents';","/**\n * @typedef {import('unist').Position} Position\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\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 starting point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\nexport const pointStart = point('start');\n/**\n * Get the ending point of `node`.\n *\n * @param node\n * Node.\n * @returns\n * Point.\n */\n\nexport const pointEnd = point('end');\n/**\n * Get the positional info of `node`.\n *\n * @param {NodeLike | Node | null | undefined} [node]\n * Node.\n * @returns {Position}\n * Position.\n */\n\nexport function position(node) {\n return {\n start: pointStart(node),\n end: pointEnd(node)\n };\n}\n/**\n * Get the positional info of `node`.\n *\n * @param {'start' | 'end'} type\n * Side.\n * @returns\n * Getter.\n */\n\nfunction point(type) {\n return point;\n /**\n * Get the point info of `node` at a bound side.\n *\n * @param {NodeLike | Node | null | undefined} [node]\n * @returns {Point}\n */\n\n function point(node) {\n const point = node && node.position && node.position[type] || {}; // To do: next major: don’t return points when invalid.\n\n return {\n // @ts-expect-error: in practice, null is allowed.\n line: point.line || null,\n // @ts-expect-error: in practice, null is allowed.\n column: point.column || null,\n // @ts-expect-error: in practice, null is allowed.\n offset: point.offset > -1 ? point.offset : null\n };\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Definition} Definition\n */\n\n/**\n * @typedef {Root | Content} Node\n *\n * @callback GetDefinition\n * Get a definition by identifier.\n * @param {string | null | undefined} [identifier]\n * Identifier of definition.\n * @returns {Definition | null}\n * Definition corresponding to `identifier` or `null`.\n */\nimport { visit } from 'unist-util-visit';\nconst own = {}.hasOwnProperty;\n/**\n * Find definitions in `tree`.\n *\n * Uses CommonMark precedence, which means that earlier definitions are\n * preferred over duplicate later definitions.\n *\n * @param {Node} tree\n * Tree to check.\n * @returns {GetDefinition}\n * Getter.\n */\n\nexport function definitions(tree) {\n /** @type {Record} */\n const cache = Object.create(null);\n\n if (!tree || !tree.type) {\n throw new Error('mdast-util-definitions expected node');\n }\n\n visit(tree, 'definition', definition => {\n const id = clean(definition.identifier);\n\n if (id && !own.call(cache, id)) {\n cache[id] = definition;\n }\n });\n return definition;\n /** @type {GetDefinition} */\n\n function definition(identifier) {\n const id = clean(identifier); // To do: next major: return `undefined` when not found.\n\n return id && own.call(cache, id) ? cache[id] : null;\n }\n}\n/**\n * @param {string | null | undefined} [value]\n * @returns {string}\n */\n\nfunction clean(value) {\n return String(value || '').toUpperCase();\n}","/**\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('hast').Element} Element\n * @typedef {import('../state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {FootnoteReference} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\n\nexport function footnoteReference(state, node) {\n const id = String(node.identifier).toUpperCase();\n const safeId = normalizeUri(id.toLowerCase());\n const index = state.footnoteOrder.indexOf(id);\n /** @type {number} */\n\n let counter;\n\n if (index === -1) {\n state.footnoteOrder.push(id);\n state.footnoteCounts[id] = 1;\n counter = state.footnoteOrder.length;\n } else {\n state.footnoteCounts[id]++;\n counter = index + 1;\n }\n\n const reuseCounter = state.footnoteCounts[id];\n /** @type {Element} */\n\n const link = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: '#' + state.clobberPrefix + 'fn-' + safeId,\n id: state.clobberPrefix + 'fnref-' + safeId + (reuseCounter > 1 ? '-' + reuseCounter : ''),\n dataFootnoteRef: true,\n ariaDescribedBy: ['footnote-label']\n },\n children: [{\n type: 'text',\n value: String(counter)\n }]\n };\n state.patch(node, link);\n /** @type {Element} */\n\n const sup = {\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [link]\n };\n state.patch(node, sup);\n return state.applyData(node, sup);\n}","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Reference} Reference\n * @typedef {import('mdast').Root} Root\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract} References\n */\n// To do: next major: always return array.\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {References} node\n * Reference node (image, link).\n * @returns {ElementContent | Array}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType;\n let suffix = ']';\n\n if (subtype === 'collapsed') {\n suffix += '[]';\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']';\n }\n\n if (node.type === 'imageReference') {\n return {\n type: 'text',\n value: '![' + node.alt + suffix\n };\n }\n\n const contents = state.all(node);\n const head = contents[0];\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value;\n } else {\n contents.unshift({\n type: 'text',\n value: '['\n });\n }\n\n const tail = contents[contents.length - 1];\n\n if (tail && tail.type === 'text') {\n tail.value += suffix;\n } else {\n contents.push({\n type: 'text',\n value: suffix\n });\n }\n\n return contents;\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract} Parents\n */\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | null | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node);\n const loose = parent ? listLoose(parent) : listItemLoose(node);\n /** @type {Properties} */\n\n const properties = {};\n /** @type {Array} */\n\n const children = [];\n\n if (typeof node.checked === 'boolean') {\n const head = results[0];\n /** @type {Element} */\n\n let paragraph;\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head;\n } else {\n paragraph = {\n type: 'element',\n tagName: 'p',\n properties: {},\n children: []\n };\n results.unshift(paragraph);\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({\n type: 'text',\n value: ' '\n });\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {\n type: 'checkbox',\n checked: node.checked,\n disabled: true\n },\n children: []\n }); // According to github-markdown-css, this class hides bullet.\n // See: .\n\n properties.className = ['task-list-item'];\n }\n\n let index = -1;\n\n while (++index < results.length) {\n const child = results[index]; // Add eols before nodes, except if this is a loose, first paragraph.\n\n if (loose || index !== 0 || child.type !== 'element' || child.tagName !== 'p') {\n children.push({\n type: 'text',\n value: '\\n'\n });\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children);\n } else {\n children.push(child);\n }\n }\n\n const tail = results[results.length - 1]; // Add a final eol.\n\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({\n type: 'text',\n value: '\\n'\n });\n }\n /** @type {Element} */\n\n\n const result = {\n type: 'element',\n tagName: 'li',\n properties,\n children\n };\n state.patch(node, result);\n return state.applyData(node, result);\n}\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\n\nfunction listLoose(node) {\n let loose = false;\n\n if (node.type === 'list') {\n loose = node.spread || false;\n const children = node.children;\n let index = -1;\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index]);\n }\n }\n\n return loose;\n}\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\n\n\nfunction listItemLoose(node) {\n const spread = node.spread;\n return spread === undefined || spread === null ? node.children.length > 1 : spread;\n}","const tab = 9;\n/* `\\t` */\n\nconst space = 32;\n/* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\n\nexport function trimLines(value) {\n const source = String(value);\n const search = /\\r?\\n|\\r/g;\n let match = search.exec(source);\n let last = 0;\n /** @type {Array} */\n\n const lines = [];\n\n while (match) {\n lines.push(trimLine(source.slice(last, match.index), last > 0, true), match[0]);\n last = match.index + match[0].length;\n match = search.exec(source);\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false));\n return lines.join('');\n}\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\n\nfunction trimLine(value, start, end) {\n let startIndex = 0;\n let endIndex = value.length;\n\n if (start) {\n let code = value.codePointAt(startIndex);\n\n while (code === tab || code === space) {\n startIndex++;\n code = value.codePointAt(startIndex);\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1);\n\n while (code === tab || code === space) {\n endIndex--;\n code = value.codePointAt(endIndex - 1);\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : '';\n}","import { blockquote } from './blockquote.js';\nimport { hardBreak } from './break.js';\nimport { code } from './code.js';\nimport { strikethrough } from './delete.js';\nimport { emphasis } from './emphasis.js';\nimport { footnoteReference } from './footnote-reference.js';\nimport { footnote } from './footnote.js';\nimport { heading } from './heading.js';\nimport { html } from './html.js';\nimport { imageReference } from './image-reference.js';\nimport { image } from './image.js';\nimport { inlineCode } from './inline-code.js';\nimport { linkReference } from './link-reference.js';\nimport { link } from './link.js';\nimport { listItem } from './list-item.js';\nimport { list } from './list.js';\nimport { paragraph } from './paragraph.js';\nimport { root } from './root.js';\nimport { strong } from './strong.js';\nimport { table } from './table.js';\nimport { tableRow } from './table-row.js';\nimport { tableCell } from './table-cell.js';\nimport { text } from './text.js';\nimport { thematicBreak } from './thematic-break.js';\n/**\n * Default handlers for nodes.\n */\n\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n footnote,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}; // Return nothing for nodes that are ignored.\n\nfunction ignore() {\n // To do: next major: return `undefined`.\n return null;\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n };\n state.patch(node, result);\n return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'br',\n properties: {},\n children: []\n };\n state.patch(node, result);\n return [state.applyData(node, result), {\n type: 'text',\n value: '\\n'\n }];\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''; // To do: next major, use `node.lang` w/o regex, the splitting’s been going\n // on for years in remark now.\n\n const lang = node.lang ? node.lang.match(/^[^ \\t]+(?=[ \\t]|$)/) : null;\n /** @type {Properties} */\n\n const properties = {};\n\n if (lang) {\n properties.className = ['language-' + lang];\n } // Create ``.\n\n /** @type {Element} */\n\n\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{\n type: 'text',\n value\n }]\n };\n\n if (node.meta) {\n result.data = {\n meta: node.meta\n };\n }\n\n state.patch(node, result);\n result = state.applyData(node, result); // Create `
`.\n\n  result = {\n    type: 'element',\n    tagName: 'pre',\n    properties: {},\n    children: [result]\n  };\n  state.patch(node, result);\n  return result;\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n\n */\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Footnote} Footnote\n * @typedef {import('../state.js').State} State\n */\nimport { footnoteReference } from './footnote-reference.js'; // To do: when both:\n// * \n// * \n// …are archived, remove this (also from mdast).\n// These inline notes are not used in GFM.\n\n/**\n * Turn an mdast `footnote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Footnote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\n\nexport function footnote(state, node) {\n  const footnoteById = state.footnoteById;\n  let no = 1;\n\n  while (no in footnoteById) no++;\n\n  const identifier = String(no);\n  footnoteById[identifier] = {\n    type: 'footnoteDefinition',\n    identifier,\n    children: [{\n      type: 'paragraph',\n      children: node.children\n    }],\n    position: node.position\n  };\n  return footnoteReference(state, {\n    type: 'footnoteReference',\n    identifier,\n    position: node.position\n  });\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').HTML} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Raw | Element | null}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.dangerous) {\n    /** @type {Raw} */\n    const result = {\n      type: 'raw',\n      value: node.value\n    };\n    state.patch(node, result);\n    return state.applyData(node, result);\n  } // To do: next major: return `undefined`.\n\n\n  return null;\n}","/**\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\nimport { revert } from '../revert.js';\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {ElementContent | Array}\n *   hast node.\n */\n\nexport function imageReference(state, node) {\n  const def = state.definition(node.identifier);\n\n  if (!def) {\n    return revert(state, node);\n  }\n  /** @type {Properties} */\n\n\n  const properties = {\n    src: normalizeUri(def.url || ''),\n    alt: node.alt\n  };\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title;\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'img',\n    properties,\n    children: []\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\n\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {\n    src: normalizeUri(node.url)\n  };\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt;\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title;\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'img',\n    properties,\n    children: []\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {\n    type: 'text',\n    value: node.value.replace(/\\r?\\n|\\r/g, ' ')\n  };\n  state.patch(node, text);\n  /** @type {Element} */\n\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\nimport { revert } from '../revert.js';\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {ElementContent | Array}\n *   hast node.\n */\n\nexport function linkReference(state, node) {\n  const def = state.definition(node.identifier);\n\n  if (!def) {\n    return revert(state, node);\n  }\n  /** @type {Properties} */\n\n\n  const properties = {\n    href: normalizeUri(def.url || '')\n  };\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title;\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\n\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {\n    href: normalizeUri(node.url)\n  };\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title;\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {};\n  const results = state.all(node);\n  let index = -1;\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start;\n  } // Like GitHub, add a class for custom styling.\n\n\n  while (++index < results.length) {\n    const child = results[index];\n\n    if (child.type === 'element' && child.tagName === 'li' && child.properties && Array.isArray(child.properties.className) && child.properties.className.includes('task-list-item')) {\n      properties.className = ['contains-task-list'];\n      break;\n    }\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastRoot | HastElement}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {\n    type: 'root',\n    children: state.wrap(state.all(node))\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\nimport { pointStart, pointEnd } from 'unist-util-position';\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\n\nexport function table(state, node) {\n  const rows = state.all(node);\n  const firstRow = rows.shift();\n  /** @type {Array} */\n\n  const tableContent = [];\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    };\n    state.patch(node.children[0], head);\n    tableContent.push(head);\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    };\n    const start = pointStart(node.children[1]);\n    const end = pointEnd(node.children[node.children.length - 1]);\n    if (start.line && end.line) body.position = {\n      start,\n      end\n    };\n    tableContent.push(body);\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td',\n    // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * @typedef {Root | Content} Nodes\n * @typedef {Extract} Parents\n */\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | null | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined; // Generate a body row when without parent.\n\n  const rowIndex = siblings ? siblings.indexOf(node) : 1;\n  const tagName = rowIndex === 0 ? 'th' : 'td';\n  const align = parent && parent.type === 'table' ? parent.align : undefined;\n  const length = align ? align.length : node.children.length;\n  let cellIndex = -1;\n  /** @type {Array} */\n\n  const cells = [];\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex];\n    /** @type {Properties} */\n\n    const properties = {};\n    const alignValue = align ? align[cellIndex] : undefined;\n\n    if (alignValue) {\n      properties.align = alignValue;\n    }\n    /** @type {Element} */\n\n\n    let result = {\n      type: 'element',\n      tagName,\n      properties,\n      children: []\n    };\n\n    if (cell) {\n      result.children = state.all(cell);\n      state.patch(cell, result);\n      result = state.applyData(node, result);\n    }\n\n    cells.push(result);\n  }\n  /** @type {Element} */\n\n\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\nimport { trimLines } from 'trim-lines';\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastText | HastElement}\n *   hast node.\n */\n\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {\n    type: 'text',\n    value: trimLines(String(node.value))\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}","/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Parent} MdastParent\n * @typedef {import('mdast').Root} MdastRoot\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n * @typedef {Extract} MdastParents\n *\n * @typedef EmbeddedHastFields\n *   hast fields.\n * @property {string | null | undefined} [hName]\n *   Generate a specific element with this tag name instead.\n * @property {HastProperties | null | undefined} [hProperties]\n *   Generate an element with these properties instead.\n * @property {Array | null | undefined} [hChildren]\n *   Generate an element with this content instead.\n *\n * @typedef {Record & EmbeddedHastFields} MdastData\n *   mdast data with embedded hast fields.\n *\n * @typedef {MdastNodes & {data?: MdastData | null | undefined}} MdastNodeWithData\n *   mdast node with embedded hast data.\n *\n * @typedef PointLike\n *   Point-like value.\n * @property {number | null | undefined} [line]\n *   Line.\n * @property {number | null | undefined} [column]\n *   Column.\n * @property {number | null | undefined} [offset]\n *   Offset.\n *\n * @typedef PositionLike\n *   Position-like value.\n * @property {PointLike | null | undefined} [start]\n *   Point-like value.\n * @property {PointLike | null | undefined} [end]\n *   Point-like value.\n *\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | null | undefined} parent\n *   Parent of `node`.\n * @returns {HastElementContent | Array | null | undefined}\n *   hast node.\n *\n * @callback HFunctionProps\n *   Signature of `state` for when props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {HastProperties} props\n *   Properties.\n * @param {Array | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @callback HFunctionNoProps\n *   Signature of `state` for when no props are passed.\n * @param {MdastNodes | PositionLike | null | undefined} node\n *   mdast node or unist position.\n * @param {string} tagName\n *   HTML tag name.\n * @param {Array | null | undefined} [children]\n *   hast content.\n * @returns {HastElement}\n *   Compiled element.\n *\n * @typedef HFields\n *   Info on `state`.\n * @property {boolean} dangerous\n *   Whether HTML is allowed.\n * @property {string} clobberPrefix\n *   Prefix to use to prevent DOM clobbering.\n * @property {string} footnoteLabel\n *   Label to use to introduce the footnote section.\n * @property {string} footnoteLabelTagName\n *   HTML used for the footnote label.\n * @property {HastProperties} footnoteLabelProperties\n *   Properties on the HTML tag used for the footnote label.\n * @property {string} footnoteBackLabel\n *   Label to use from backreferences back to their footnote call.\n * @property {(identifier: string) => MdastDefinition | null} definition\n *   Definition cache.\n * @property {Record} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Array} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Record} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {Handler} unknownHandler\n *   Handler for any none not in `passThrough` or otherwise handled.\n * @property {(from: MdastNodes, node: HastNodes) => void} patch\n *   Copy a node’s positional info.\n * @property {(from: MdastNodes, to: Type) => Type | HastElement} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {(node: MdastNodes, parent: MdastParents | null | undefined) => HastElementContent | Array | null | undefined} one\n *   Transform an mdast node to hast.\n * @property {(node: MdastNodes) => Array} all\n *   Transform the children of an mdast parent to hast.\n * @property {(nodes: Array, loose?: boolean | null | undefined) => Array} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n * @property {(left: MdastNodeWithData | PositionLike | null | undefined, right: HastElementContent) => HastElementContent} augment\n *   Like `state` but lower-level and usable on non-elements.\n *   Deprecated: use `patch` and `applyData`.\n * @property {Array} passThrough\n *   List of node types to pass through untouched (except for their children).\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree.\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` attribute on footnotes to prevent it from\n *   *clobbering*.\n * @property {string | null | undefined} [footnoteBackLabel='Back to content']\n *   Label to use from backreferences back to their footnote call (affects\n *   screen readers).\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Label to use for the footnotes section (affects screen readers).\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (note that `id: 'footnote-label'`\n *   is always added as footnote calls use it with `aria-describedby` to\n *   provide an accessible label).\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   Tag name to use for the footnote label.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes.\n * @property {Array | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes.\n *\n * @typedef {Record} Handlers\n *   Handle nodes.\n *\n * @typedef {HFunctionProps & HFunctionNoProps & HFields} State\n *   Info passed around.\n */\nimport { visit } from 'unist-util-visit';\nimport { position, pointStart, pointEnd } from 'unist-util-position';\nimport { generated } from 'unist-util-generated';\nimport { definitions } from 'mdast-util-definitions';\nimport { handlers } from './handlers/index.js';\nconst own = {}.hasOwnProperty;\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {State}\n *   `state` function.\n */\n\nexport function createState(tree, options) {\n  const settings = options || {};\n  const dangerous = settings.allowDangerousHtml || false;\n  /** @type {Record} */\n\n  const footnoteById = {}; // To do: next major: add `options` to state, remove:\n  // `dangerous`, `clobberPrefix`, `footnoteLabel`, `footnoteLabelTagName`,\n  // `footnoteLabelProperties`, `footnoteBackLabel`, `passThrough`,\n  // `unknownHandler`.\n  // To do: next major: move to `state.options.allowDangerousHtml`.\n\n  state.dangerous = dangerous; // To do: next major: move to `state.options`.\n\n  state.clobberPrefix = settings.clobberPrefix === undefined || settings.clobberPrefix === null ? 'user-content-' : settings.clobberPrefix; // To do: next major: move to `state.options`.\n\n  state.footnoteLabel = settings.footnoteLabel || 'Footnotes'; // To do: next major: move to `state.options`.\n\n  state.footnoteLabelTagName = settings.footnoteLabelTagName || 'h2'; // To do: next major: move to `state.options`.\n\n  state.footnoteLabelProperties = settings.footnoteLabelProperties || {\n    className: ['sr-only']\n  }; // To do: next major: move to `state.options`.\n\n  state.footnoteBackLabel = settings.footnoteBackLabel || 'Back to content'; // To do: next major: move to `state.options`.\n\n  state.unknownHandler = settings.unknownHandler; // To do: next major: move to `state.options`.\n\n  state.passThrough = settings.passThrough;\n  state.handlers = { ...handlers,\n    ...settings.handlers\n  }; // To do: next major: replace utility with `definitionById` object, so we\n  // only walk once (as we need footnotes too).\n\n  state.definition = definitions(tree);\n  state.footnoteById = footnoteById;\n  /** @type {Array} */\n\n  state.footnoteOrder = [];\n  /** @type {Record} */\n\n  state.footnoteCounts = {};\n  state.patch = patch;\n  state.applyData = applyData;\n  state.one = oneBound;\n  state.all = allBound;\n  state.wrap = wrap; // To do: next major: remove `augment`.\n\n  state.augment = augment;\n  visit(tree, 'footnoteDefinition', definition => {\n    const id = String(definition.identifier).toUpperCase(); // Mimick CM behavior of link definitions.\n    // See: .\n\n    if (!own.call(footnoteById, id)) {\n      footnoteById[id] = definition;\n    }\n  }); // @ts-expect-error Hush, it’s fine!\n\n  return state;\n  /**\n   * Finalise the created `right`, a hast node, from `left`, an mdast node.\n   *\n   * @param {MdastNodeWithData | PositionLike | null | undefined} left\n   * @param {HastElementContent} right\n   * @returns {HastElementContent}\n   */\n\n  /* c8 ignore start */\n  // To do: next major: remove.\n\n  function augment(left, right) {\n    // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n    if (left && 'data' in left && left.data) {\n      /** @type {MdastData} */\n      const data = left.data;\n\n      if (data.hName) {\n        if (right.type !== 'element') {\n          right = {\n            type: 'element',\n            tagName: '',\n            properties: {},\n            children: []\n          };\n        }\n\n        right.tagName = data.hName;\n      }\n\n      if (right.type === 'element' && data.hProperties) {\n        right.properties = { ...right.properties,\n          ...data.hProperties\n        };\n      }\n\n      if ('children' in right && right.children && data.hChildren) {\n        right.children = data.hChildren;\n      }\n    }\n\n    if (left) {\n      const ctx = 'type' in left ? left : {\n        position: left\n      };\n\n      if (!generated(ctx)) {\n        // @ts-expect-error: fine.\n        right.position = {\n          start: pointStart(ctx),\n          end: pointEnd(ctx)\n        };\n      }\n    }\n\n    return right;\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Create an element for `node`.\n   *\n   * @type {HFunctionProps}\n   */\n\n  /* c8 ignore start */\n  // To do: next major: remove.\n\n\n  function state(node, tagName, props, children) {\n    if (Array.isArray(props)) {\n      children = props;\n      props = {};\n    } // @ts-expect-error augmenting an element yields an element.\n\n\n    return augment(node, {\n      type: 'element',\n      tagName,\n      properties: props || {},\n      children: children || []\n    });\n  }\n  /* c8 ignore stop */\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | null | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {HastElementContent | Array | null | undefined}\n   *   Resulting hast node.\n   */\n\n\n  function oneBound(node, parent) {\n    // @ts-expect-error: that’s a state :)\n    return one(state, node, parent);\n  }\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array}\n   *   Resulting hast nodes.\n   */\n\n\n  function allBound(parent) {\n    // @ts-expect-error: that’s a state :)\n    return all(state, parent);\n  }\n}\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {void}\n *   Nothing.\n */\n\nfunction patch(from, to) {\n  if (from.position) to.position = position(from);\n}\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {Type | HastElement}\n *   Nothing.\n */\n\n\nfunction applyData(from, to) {\n  /** @type {Type | HastElement} */\n  let result = to; // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n\n  if (from && from.data) {\n    const hName = from.data.hName;\n    const hChildren = from.data.hChildren;\n    const hProperties = from.data.hProperties;\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName;\n      } // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent is likely to keep the content around (otherwise: pass\n      // `hChildren`).\n      else {\n        result = {\n          type: 'element',\n          tagName: hName,\n          properties: {},\n          children: []\n        }; // To do: next major: take the children from the `root`, or inject the\n        // raw/text/comment or so into the element?\n        // if ('children' in node) {\n        //   // @ts-expect-error: assume `children` are allowed in elements.\n        //   result.children = node.children\n        // } else {\n        //   // @ts-expect-error: assume `node` is allowed in elements.\n        //   result.children.push(node)\n        // }\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      result.properties = { ...result.properties,\n        ...hProperties\n      };\n    }\n\n    if ('children' in result && result.children && hChildren !== null && hChildren !== undefined) {\n      // @ts-expect-error: assume valid children are defined.\n      result.children = hChildren;\n    }\n  }\n\n  return result;\n}\n/**\n * Transform an mdast node into a hast node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   mdast node.\n * @param {MdastParents | null | undefined} [parent]\n *   Parent of `node`.\n * @returns {HastElementContent | Array | null | undefined}\n *   Resulting hast node.\n */\n// To do: next major: do not expose, keep bound.\n\n\nexport function one(state, node, parent) {\n  const type = node && node.type; // Fail on non-nodes.\n\n  if (!type) {\n    throw new Error('Expected node, got `' + node + '`');\n  }\n\n  if (own.call(state.handlers, type)) {\n    return state.handlers[type](state, node, parent);\n  }\n\n  if (state.passThrough && state.passThrough.includes(type)) {\n    // To do: next major: deep clone.\n    // @ts-expect-error: types of passed through nodes are expected to be added manually.\n    return 'children' in node ? { ...node,\n      children: all(state, node)\n    } : node;\n  }\n\n  if (state.unknownHandler) {\n    return state.unknownHandler(state, node, parent);\n  }\n\n  return defaultUnknownHandler(state, node);\n}\n/**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} parent\n *   mdast node to compile\n * @returns {Array}\n *   Resulting hast nodes.\n */\n// To do: next major: do not expose, keep bound.\n\nexport function all(state, parent) {\n  /** @type {Array} */\n  const values = [];\n\n  if ('children' in parent) {\n    const nodes = parent.children;\n    let index = -1;\n\n    while (++index < nodes.length) {\n      const result = one(state, nodes[index], parent); // To do: see if we van clean this? Can we merge texts?\n\n      if (result) {\n        if (index && nodes[index - 1].type === 'break') {\n          if (!Array.isArray(result) && result.type === 'text') {\n            result.value = result.value.replace(/^\\s+/, '');\n          }\n\n          if (!Array.isArray(result) && result.type === 'element') {\n            const head = result.children[0];\n\n            if (head && head.type === 'text') {\n              head.value = head.value.replace(/^\\s+/, '');\n            }\n          }\n        }\n\n        if (Array.isArray(result)) {\n          values.push(...result);\n        } else {\n          values.push(result);\n        }\n      }\n    }\n  }\n\n  return values;\n}\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastText | HastElement}\n *   Resulting hast node.\n */\n\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {};\n  /** @type {HastText | HastElement} */\n\n  const result = 'value' in node && !(own.call(data, 'hProperties') || own.call(data, 'hChildren')) ? {\n    type: 'text',\n    value: node.value\n  } : {\n    type: 'element',\n    tagName: 'div',\n    properties: {},\n    children: all(state, node)\n  };\n  state.patch(node, result);\n  return state.applyData(node, result);\n}\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastContent} Type\n *   Node type.\n * @param {Array} nodes\n *   List of nodes to wrap.\n * @param {boolean | null | undefined} [loose=false]\n *   Whether to add line endings at start and end.\n * @returns {Array}\n *   Wrapped nodes.\n */\n\n\nexport function wrap(nodes, loose) {\n  /** @type {Array} */\n  const result = [];\n  let index = -1;\n\n  if (loose) {\n    result.push({\n      type: 'text',\n      value: '\\n'\n    });\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({\n      type: 'text',\n      value: '\\n'\n    });\n    result.push(nodes[index]);\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({\n      type: 'text',\n      value: '\\n'\n    });\n  }\n\n  return result;\n}","/**\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef NodeLike\n * @property {PositionLike | null | undefined} [position]\n */\n\n/**\n * Check if `node` is generated.\n *\n * @param {NodeLike | null | undefined} [node]\n *   Node to check.\n * @returns {boolean}\n *   Whether `node` is generated (does not have positional info).\n */\nexport function generated(node) {\n  return !node || !node.position || !node.position.start || !node.position.start.line || !node.position.start.column || !node.position.end || !node.position.end.line || !node.position.end.column;\n}","/**\n * @typedef {import('hast').Content} HastContent\n * @typedef {import('hast').Root} HastRoot\n *\n * @typedef {import('mdast').Content} MdastContent\n * @typedef {import('mdast').Root} MdastRoot\n *\n * @typedef {import('./state.js').Options} Options\n */\n\n/**\n * @typedef {HastRoot | HastContent} HastNodes\n * @typedef {MdastRoot | MdastContent} MdastNodes\n */\nimport { footer } from './footer.js';\nimport { createState } from './state.js';\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * 

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {HastNodes | null | undefined}\n * hast tree.\n */\n// To do: next major: always return a single `root`.\n\nexport function toHast(tree, options) {\n const state = createState(tree, options);\n const node = state.one(tree, null);\n const foot = footer(state);\n\n if (foot) {\n // @ts-expect-error If there’s a footer, there were definitions, meaning block\n // content.\n // So assume `node` is a parent node.\n node.children.push({\n type: 'text',\n value: '\\n'\n }, foot);\n } // To do: next major: always return root?\n\n\n return Array.isArray(node) ? {\n type: 'root',\n children: node\n } : node;\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\nimport { normalizeUri } from 'micromark-util-sanitize-uri';\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n\nexport function footer(state) {\n /** @type {Array} */\n const listItems = [];\n let index = -1;\n\n while (++index < state.footnoteOrder.length) {\n const def = state.footnoteById[state.footnoteOrder[index]];\n\n if (!def) {\n continue;\n }\n\n const content = state.all(def);\n const id = String(def.identifier).toUpperCase();\n const safeId = normalizeUri(id.toLowerCase());\n let referenceIndex = 0;\n /** @type {Array} */\n\n const backReferences = [];\n\n while (++referenceIndex <= state.footnoteCounts[id]) {\n /** @type {Element} */\n const backReference = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: '#' + state.clobberPrefix + 'fnref-' + safeId + (referenceIndex > 1 ? '-' + referenceIndex : ''),\n dataFootnoteBackref: true,\n className: ['data-footnote-backref'],\n ariaLabel: state.footnoteBackLabel\n },\n children: [{\n type: 'text',\n value: '↩'\n }]\n };\n\n if (referenceIndex > 1) {\n backReference.children.push({\n type: 'element',\n tagName: 'sup',\n children: [{\n type: 'text',\n value: String(referenceIndex)\n }]\n });\n }\n\n if (backReferences.length > 0) {\n backReferences.push({\n type: 'text',\n value: ' '\n });\n }\n\n backReferences.push(backReference);\n }\n\n const tail = content[content.length - 1];\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1];\n\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' ';\n } else {\n tail.children.push({\n type: 'text',\n value: ' '\n });\n }\n\n tail.children.push(...backReferences);\n } else {\n content.push(...backReferences);\n }\n /** @type {Element} */\n\n\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {\n id: state.clobberPrefix + 'fn-' + safeId\n },\n children: state.wrap(content, true)\n };\n state.patch(def, listItem);\n listItems.push(listItem);\n }\n\n if (listItems.length === 0) {\n return;\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {\n dataFootnotes: true,\n className: ['footnotes']\n },\n children: [{\n type: 'element',\n tagName: state.footnoteLabelTagName,\n properties: { // To do: use structured clone.\n ...JSON.parse(JSON.stringify(state.footnoteLabelProperties)),\n id: 'footnote-label'\n },\n children: [{\n type: 'text',\n value: state.footnoteLabel\n }]\n }, {\n type: 'text',\n value: '\\n'\n }, {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n }, {\n type: 'text',\n value: '\\n'\n }]\n };\n}","/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} Options\n * @typedef {import('unified').Processor} Processor\n *\n * @typedef {import('mdast-util-to-hast')} DoNotTouchAsThisImportIncludesRawInTree\n */\nimport { toHast } from 'mdast-util-to-hast'; // Note: the `` overload doesn’t seem to work :'(\n\n/**\n * Plugin that turns markdown into HTML to support rehype.\n *\n * * If a destination processor is given, that processor runs with a new HTML\n * (hast) tree (bridge-mode).\n * As the given processor runs with a hast tree, and rehype plugins support\n * hast, that means rehype plugins can be used with the given processor.\n * The hast tree is discarded in the end.\n * It’s highly unlikely that you want to do this.\n * * The common case is to not pass a destination processor, in which case the\n * current processor continues running with a new HTML (hast) tree\n * (mutate-mode).\n * As the current processor continues with a hast tree, and rehype plugins\n * support hast, that means rehype plugins can be used after\n * `remark-rehype`.\n * It’s likely that this is what you want to do.\n *\n * @param destination\n * Optional unified processor.\n * @param options\n * Options passed to `mdast-util-to-hast`.\n */\n\nconst remarkRehype =\n/** @type {(import('unified').Plugin<[Processor, Options?]|[null|undefined, Options?]|[Options]|[], MdastRoot>)} */\nfunction (destination, options) {\n return destination && 'run' in destination ? bridge(destination, options) : mutate(destination || options);\n};\n\nexport default remarkRehype;\n/**\n * Bridge-mode.\n * Runs the destination with the new hast tree.\n *\n * @type {import('unified').Plugin<[Processor, Options?], MdastRoot>}\n */\n\nfunction bridge(destination, options) {\n return (node, file, next) => {\n destination.run(toHast(node, options), file, error => {\n next(error);\n });\n };\n}\n/**\n * Mutate-mode.\n * Further plugins run on the hast tree.\n *\n * @type {import('unified').Plugin<[Options?]|void[], MdastRoot, HastRoot>}\n */\n\n\nfunction mutate(options) {\n // @ts-expect-error: assume a corresponding node is returned by `toHast`.\n return node => toHast(node, options);\n}","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record} Properties\n * @typedef {Record} Normal\n */\nexport class Schema {\n /**\n * @constructor\n * @param {Properties} property\n * @param {Normal} normal\n * @param {string} [space]\n */\n constructor(property, normal, space) {\n this.property = property;\n this.normal = normal;\n\n if (space) {\n this.space = space;\n }\n }\n\n}\n/** @type {Properties} */\n\nSchema.prototype.property = {};\n/** @type {Normal} */\n\nSchema.prototype.normal = {};\n/** @type {string|null} */\n\nSchema.prototype.space = null;","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\nimport { Schema } from './schema.js';\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\n\nexport function merge(definitions, space) {\n /** @type {Properties} */\n const property = {};\n /** @type {Normal} */\n\n const normal = {};\n let index = -1;\n\n while (++index < definitions.length) {\n Object.assign(property, definitions[index].property);\n Object.assign(normal, definitions[index].normal);\n }\n\n return new Schema(property, normal, space);\n}","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n return value.toLowerCase();\n}","export class Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n */\n constructor(property, attribute) {\n /** @type {string} */\n this.property = property;\n /** @type {string} */\n\n this.attribute = attribute;\n }\n\n}\n/** @type {string|null} */\n\nInfo.prototype.space = null;\nInfo.prototype.boolean = false;\nInfo.prototype.booleanish = false;\nInfo.prototype.overloadedBoolean = false;\nInfo.prototype.number = false;\nInfo.prototype.commaSeparated = false;\nInfo.prototype.spaceSeparated = false;\nInfo.prototype.commaOrSpaceSeparated = false;\nInfo.prototype.mustUseProperty = false;\nInfo.prototype.defined = false;","let powers = 0;\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}","import { Info } from './info.js';\nimport * as types from './types.js';\n/** @type {Array} */\n// @ts-expect-error: hush.\n\nconst checks = Object.keys(types);\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n * @param {number|null} [mask]\n * @param {string} [space]\n */\n constructor(property, attribute, mask, space) {\n let index = -1;\n super(property, attribute);\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 * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\n\nfunction mark(values, key, value) {\n if (value) {\n // @ts-expect-error: assume `value` matches the expected value of `key`.\n values[key] = value;\n }\n}","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array} [mustUseProperty]\n */\nimport { normalize } from '../normalize.js';\nimport { Schema } from './schema.js';\nimport { DefinedInfo } from './defined-info.js';\nconst own = {}.hasOwnProperty;\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\n\nexport function create(definition) {\n /** @type {Properties} */\n const property = {};\n /** @type {Normal} */\n\n const normal = {};\n /** @type {string} */\n\n let prop;\n\n for (prop in definition.properties) {\n if (own.call(definition.properties, prop)) {\n const value = definition.properties[prop];\n const info = new DefinedInfo(prop, definition.transform(definition.attributes || {}, prop), value, definition.space);\n\n if (definition.mustUseProperty && definition.mustUseProperty.includes(prop)) {\n info.mustUseProperty = true;\n }\n\n property[prop] = info;\n normal[normalize(prop)] = prop;\n normal[normalize(info.attribute)] = prop;\n }\n }\n\n return new Schema(property, normal, definition.space);\n}","import { create } from './util/create.js';\nexport const xlink = create({\n space: 'xlink',\n\n transform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase();\n },\n\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});","import { create } from './util/create.js';\nexport const xml = create({\n space: 'xml',\n\n transform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase();\n },\n\n properties: {\n xmlLang: null,\n xmlBase: null,\n xmlSpace: null\n }\n});","/**\n * @param {Record} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute;\n}","import { caseSensitiveTransform } from './case-sensitive-transform.js';\n/**\n * @param {Record} attributes\n * @param {string} property\n * @returns {string}\n */\n\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase());\n}","import { create } from './util/create.js';\nimport { caseInsensitiveTransform } from './util/case-insensitive-transform.js';\nexport const xmlns = create({\n space: 'xmlns',\n attributes: {\n xmlnsxlink: 'xmlns:xlink'\n },\n transform: caseInsensitiveTransform,\n properties: {\n xmlns: null,\n xmlnsXLink: null\n }\n});","import { booleanish, number, spaceSeparated } from './util/types.js';\nimport { create } from './util/create.js';\nexport const aria = create({\n transform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase();\n },\n\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});","import { boolean, overloadedBoolean, booleanish, number, spaceSeparated, commaSeparated } from './util/types.js';\nimport { create } from './util/create.js';\nimport { caseInsensitiveTransform } from './util/case-insensitive-transform.js';\nexport const html = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\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: boolean,\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 // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null,\n // Several. Use CSS `text-align` instead,\n aLink: null,\n // ``. Use CSS `a:active {color}` instead\n archive: spaceSeparated,\n // ``. List of URIs to archives\n axis: null,\n // `` and ``. Use `scope` on ``\n background: null,\n // ``. Use CSS `background-image` instead\n bgColor: null,\n // `` and table elements. Use CSS `background-color` instead\n border: number,\n // ``. Use CSS `border-width` instead,\n borderColor: null,\n // `
`. Use CSS `border-color` instead,\n bottomMargin: number,\n // ``\n cellPadding: null,\n // `
`\n cellSpacing: null,\n // `
`\n char: null,\n // Several table elements. When `align=char`, sets the character to align on\n charOff: null,\n // Several table elements. When `char`, offsets the alignment\n classId: null,\n // ``\n clear: null,\n // `
`. Use CSS `clear` instead\n code: null,\n // ``\n codeBase: null,\n // ``\n codeType: null,\n // ``\n color: null,\n // `` and `
`. Use CSS instead\n compact: boolean,\n // Lists. Use CSS to reduce space between items instead\n declare: boolean,\n // ``\n event: null,\n // `