diff options
| author | Nantha Sorubakanthan <nantha@mielota.com> | 2025-11-07 19:19:46 +0100 |
|---|---|---|
| committer | Nantha Sorubakanthan <nantha@mielota.com> | 2025-11-07 19:19:46 +0100 |
| commit | 463cfd53664df2fd35d781513f01488431912015 (patch) | |
| tree | 8db19020bfb2056e1d315bcaa9da41c1c1ad9020 /scripts/highlight.mjs | |
| parent | 285b2f67e967286019f0f29d1f0921134347a586 (diff) | |
Revert "Syntax highlighting from javascript script"
This reverts commit 285b2f67e967286019f0f29d1f0921134347a586.
Diffstat (limited to 'scripts/highlight.mjs')
| -rw-r--r-- | scripts/highlight.mjs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/scripts/highlight.mjs b/scripts/highlight.mjs deleted file mode 100644 index 2870866..0000000 --- a/scripts/highlight.mjs +++ /dev/null @@ -1,57 +0,0 @@ -import { createHighlighter, bundledLanguages } from 'shiki'; -import { dirname, join } from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { readFile, writeFile } from 'node:fs/promises'; -import { glob } from 'glob'; -import { parseDocument } from 'htmlparser2'; -import { findAll, findOne, textContent, replaceElement } from 'domutils'; -import render from 'dom-serializer'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - -main(); - -async function main() { - const LIGHT_THEME = 'github-dark'; - const DARK_THEME = LIGHT_THEME; - - const start = Date.now(); - - const highlighter = await createHighlighter({ - themes: [LIGHT_THEME, DARK_THEME], - langs: Object.keys(bundledLanguages), - }); - - const files = await glob(join(__dirname, '../public/**/**/index.html')); - await Promise.all( - files.map((filepath) => highlightFile(highlighter, filepath, { lightTheme: LIGHT_THEME, darkTheme: DARK_THEME })) - ); - - console.log(`Highlighted ${files.length} files in ${Math.round(Date.now() - start)} ms`); -} - -async function highlightFile(highlighter, filepath, { lightTheme, darkTheme }) { - const contents = await readFile(filepath, { encoding: 'utf-8' }); - await writeFile(filepath, highlightHtmlContent(highlighter, contents, { lightTheme, darkTheme })); -} - -function highlightHtmlContent(highlighter, htmlContent, { lightTheme, darkTheme }) { - const doc = parseDocument(htmlContent); - for (const preNode of findAll((e) => e.name === 'pre', doc.children)) { - const codeNode = findOne((e) => e.name === 'code', preNode.children); - if (!codeNode) continue; - - const lang = codeNode.attribs['class']?.replace(/^language-/, '') ?? 'text'; - const code = textContent(codeNode); - const highlighted = highlighter.codeToHtml(code, { - lang, - themes: { light: lightTheme, dark: darkTheme }, - }); - - const highlightedPreNode = parseDocument(highlighted).children[0]; - replaceElement(preNode, highlightedPreNode); - } - - return render(doc); -} - |
