Files
voidraft/frontend/src/views/editor/language/mermaid/language-definitions/index.ts
2025-11-04 22:58:36 +08:00

75 lines
1.9 KiB
TypeScript

import { LRLanguage } from '@codemirror/language';
import { parseMixed } from '@lezer/common';
import {
mermaidParser,
mindmapParser,
pieParser,
flowchartParser,
sequenceParser,
journeyParser,
requirementParser,
ganttParser,
} from '../parsers';
import { DiagramType, MermaidLanguageType } from '../types';
export const mermaidLanguage = LRLanguage.define({
name: MermaidLanguageType.Mermaid,
parser: mermaidParser.configure({
wrap: parseMixed((node) => {
switch (node.name) {
case DiagramType.Mindmap:
return { parser: mindmapParser };
case DiagramType.Pie:
return { parser: pieParser };
case DiagramType.Flowchart:
return { parser: flowchartParser };
case DiagramType.Sequence:
return { parser: sequenceParser };
case DiagramType.Journey:
return { parser: journeyParser };
case DiagramType.Requirement:
return { parser: requirementParser };
case DiagramType.Gantt:
return { parser: ganttParser };
default:
return null;
}
}),
}),
});
export const mindmapLanguage = LRLanguage.define({
name: MermaidLanguageType.Mindmap,
parser: mindmapParser,
});
export const pieLanguage = LRLanguage.define({
name: MermaidLanguageType.Pie,
parser: pieParser,
});
export const flowchartLanguage = LRLanguage.define({
name: MermaidLanguageType.Flowchart,
parser: flowchartParser,
});
export const sequenceLanguage = LRLanguage.define({
name: MermaidLanguageType.Sequence,
parser: sequenceParser,
});
export const journeyLanguage = LRLanguage.define({
name: MermaidLanguageType.Journey,
parser: journeyParser,
});
export const requirementLanguage = LRLanguage.define({
name: MermaidLanguageType.Requirement,
parser: requirementParser,
});
export const ganttLanguage = LRLanguage.define({
name: MermaidLanguageType.Gantt,
parser: ganttParser,
});