mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-28 07:03:17 +08:00
fedbd48c0f
* next: (98 commits) refactor: Simplify TokenBuilder and ValueConverter chore: Fix pnpm-lock Bump version chore: Fix type in 'getLineFunctionsWithOffset' Update cypress/platform/marker_unique_id.html refactor: Add getLineFunctionsWithOffset function refactor: Move EdgeData to types fix: PointStart marker refX Added cypress test chore(deps): update all patch dependencies refactor: Fix typings in utils.ts Give markers unique id's per graph chore: Fix type chore: Add @internal to createCSSStyles chore: Bump version refactor: Remove unused variables fix: #4818 support `getClasses` in external diagrams. Remove unnecessary tests Remove optional chaining chore: Update docs ...
Mermaid Parser
Mermaid parser package
How the package works
The package exports a parse
function that has two parameters:
declare function parse<T extends DiagramAST>(
diagramType: keyof typeof initializers,
text: string
): T;
How does a Langium-based parser work?
sequenceDiagram
actor Package
participant Module
participant TokenBuilder
participant Lexer
participant Parser
participant ValueConverter
Package ->> Module: Create services
Module ->> TokenBuilder: Override or/and<br>reorder rules
TokenBuilder ->> Lexer: Read the string and transform<br>it into a token stream
Lexer ->> Parser: Parse token<br>stream into AST
Parser ->> ValueConverter: Clean/modify tokenized<br>rules returned value
ValueConverter -->> Package: Return AST
-
When to override
TokenBuilder
?- To override keyword rules.
- To override terminal rules that need a custom function.
- To manually reorder the list of rules.
-
When to override
Lexer
?- To modify input before tokenizing.
- To insert/modify tokens that cannot or have not been parsed.
-
When to override
LangiumParser
?- To insert or modify attributes that can't be parsed.
-
When to override
ValueConverter
?- To modify the returned value from the parser.