UNPKG

@nuxtjs/mdc

Version:
38 lines (37 loc) 1.41 kB
export function parseThematicBlock(lang) { if (!lang?.trim()) { return { language: void 0, highlights: void 0, filename: void 0, meta: void 0 }; } const languageMatches = lang.replace(/[{|[](.+)/, "").match(/^[^ \t]+(?=[ \t]|$)/); const highlightTokensMatches = lang.match(/\{([^}]*)\}/); const filenameMatches = lang.match(/\[(.*)\]/); const meta = lang.replace(languageMatches?.[0] ?? "", "").replace(highlightTokensMatches?.[0] ?? "", "").replace(filenameMatches?.[0] ?? "", "").trim(); let filename = void 0; if (filenameMatches?.[1]) { filename = filenameMatches[1].replace(/\\([[\]{}().*+?^$|])/g, "$1"); } return { language: languageMatches?.[0] || void 0, highlights: parseHighlightedLines(highlightTokensMatches?.[1] || void 0), // https://github.com/nuxt/content/pull/2169 filename, meta }; } function parseHighlightedLines(lines) { const lineArray = String(lines || "").split(",").filter(Boolean).flatMap((line) => { const [start, end] = line.trim().split("-").map((a) => Number(a.trim())); return Array.from({ length: (end || start) - start + 1 }).map((_, i) => start + i); }); return lineArray.length ? lineArray : void 0; } const TAG_NAME_REGEXP = /^<\/?([\w-]+)(\s[^>]*?)?\/?>/; export function getTagName(value) { const result = String(value).match(TAG_NAME_REGEXP); return result && result[1]; }