101 lines
4.0 KiB
TypeScript
101 lines
4.0 KiB
TypeScript
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<PrismjsType, PrismjsProperties>();
|
|
|
|
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);
|
|
}
|
|
}
|