export const PrismjsType = { PlainText: "PlainText", Markdown: "Markdown", JavaScript: "JavaScript", TypeScript: "TypeScript", Initialization: "Initialization", PHP: "PHP", SQL: "SQL", XML: "XML", CSS: "CSS", VUE: "VUE", LESS: "LESS", Markup: "Markup", YAML: "YAML", Json: "Json", Java: "Java", Properties: "Properties", NginxConf: "NginxConf", ApacheConf: "ApacheConf" } as const; export type PrismjsType = (typeof PrismjsType)[keyof typeof PrismjsType]; export type PrismjsProperties = { extensions: string[] prismjs: string; viewer: PrismjsViewer; } export const PrismjsViewer = { MARKDOWN: "MARKDOWN", CODE: "CODE", TEXT: "TEXT" } as const; export type PrismjsViewer = (typeof PrismjsViewer)[keyof typeof PrismjsViewer]; export default class Prismjs { private static instance: Prismjs; map = new Map(); private constructor() { this.map.set(PrismjsType.PlainText, {extensions: ["txt"], prismjs: "", viewer: PrismjsViewer.TEXT}); this.map.set(PrismjsType.Markdown, {extensions: ["md"], prismjs: "md", viewer: PrismjsViewer.MARKDOWN}); this.map.set(PrismjsType.JavaScript, {extensions: ["js"], prismjs: "js", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.VUE, {extensions: ["vue"], prismjs: "html", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.TypeScript, {extensions: ["ts"], prismjs: "ts", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.Initialization, {extensions: ["ini"], prismjs: "ini", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.PHP, {extensions: ["php"], prismjs: "php", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.SQL, {extensions: ["sql"], prismjs: "sql", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.XML, {extensions: ["xml", "fxml", "wxml"], prismjs: "xml", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.CSS, {extensions: ["css", "wxss"], prismjs: "css", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.LESS, {extensions: ["less"], prismjs: "less", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.Markup, {extensions: ["htm", "html"], prismjs: "markup", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.YAML, {extensions: ["yml", "yaml"], prismjs: "yaml", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.Json, {extensions: ["json"], prismjs: "json", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.Java, {extensions: ["java"], prismjs: "java", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.Properties, {extensions: ["properties"], prismjs: "properties", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.NginxConf, {extensions: [], prismjs: "nginx", viewer: PrismjsViewer.CODE}); this.map.set(PrismjsType.ApacheConf, {extensions: [], prismjs: "apacheconf", viewer: PrismjsViewer.CODE}); } private static getInstance(): Prismjs { if (!Prismjs.instance) { Prismjs.instance = new Prismjs(); } return Prismjs.instance; } public static typeFromFileName(fileName: string): PrismjsType | undefined { const ext = fileName.substring(fileName.lastIndexOf(".") + 1); if (!ext) { return undefined; } const map = Prismjs.getInstance().map; for (const key of map.keys()) { const value = map.get(key); if (value) { const extensions = value.extensions; for (let i = 0; i < extensions.length; i++) { const extension = extensions[i]; if (extension === ext) { return key; } } } } return undefined; } public static getFileProperties(type: PrismjsType): PrismjsProperties | undefined { return Prismjs.getInstance().map.get(type); } }