/* This file is part of the Notesnook project (https://notesnook.com/) Copyright (C) 2023 Streetwriters (Private) Limited This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** * Quick & dirty script to download & transform all language details from * the PrismJS repo. */ import fs from "fs"; import { readFile } from "fs/promises"; import path from "path"; export async function langen(rootDirectory) { const json = JSON.parse( await readFile( path.join(rootDirectory, "node_modules", "prismjs", "components.json"), "utf-8" ) ); let languages = []; for (const key in json.languages) { if (key === "meta") continue; const language = json.languages[key]; const languagePath = path.join( rootDirectory, "node_modules", "refractor", "lang", `${key}.js` ); if (!fs.existsSync(languagePath)) continue; languages.push({ filename: key, title: language.title, alias: language.alias ? Array.isArray(language.alias) ? language.alias : [language.alias] : undefined }); } const languageIndex = `/* !!! THIS IS A GENERATED FILE. DO NOT EDIT !!! */ export async function loadLanguage(language: string) { switch (language) { ${languages .map(({ filename, alias }) => { return [ ...(alias || []).map((a) => `case "${a}":`), `case "${filename}":`, `return await import("refractor/lang/${filename}.js");` ].join("\n"); }) .join("\n\n")} } }`; return { languages, languageIndex }; }