Initial project
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
export enum 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"
|
||||
}
|
||||
|
||||
export type PrismjsProperties = {
|
||||
|
||||
extensions: string[]
|
||||
prismjs: string;
|
||||
viewer: PrismjsViewer;
|
||||
}
|
||||
|
||||
export enum PrismjsViewer {
|
||||
|
||||
MARKDOWN = "MARKDOWN",
|
||||
|
||||
CODE = "CODE",
|
||||
|
||||
TEXT = "TEXT",
|
||||
}
|
||||
|
||||
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"], prismjs: "xml", viewer: PrismjsViewer.CODE});
|
||||
this.map.set(PrismjsType.CSS, {extensions: ["css"], 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user