mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-16 05:49:43 +02:00
Merge branch 'develop' into 5367/architecture-diagram
This commit is contained in:
87
packages/parser/src/language/gitGraph/gitGraph.langium
Normal file
87
packages/parser/src/language/gitGraph/gitGraph.langium
Normal file
@@ -0,0 +1,87 @@
|
||||
grammar GitGraph
|
||||
|
||||
interface Common {
|
||||
accDescr?: string;
|
||||
accTitle?: string;
|
||||
title?: string;
|
||||
}
|
||||
|
||||
fragment TitleAndAccessibilities:
|
||||
((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+
|
||||
;
|
||||
|
||||
fragment EOL returns string:
|
||||
NEWLINE+ | EOF
|
||||
;
|
||||
|
||||
terminal NEWLINE: /\r?\n/;
|
||||
terminal ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/;
|
||||
terminal ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/;
|
||||
terminal TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/;
|
||||
|
||||
hidden terminal WHITESPACE: /[\t ]+/;
|
||||
hidden terminal YAML: /---[\t ]*\r?\n(?:[\S\s]*?\r?\n)?---(?:\r?\n|(?!\S))/;
|
||||
hidden terminal DIRECTIVE: /[\t ]*%%{[\S\s]*?}%%(?:\r?\n|(?!\S))/;
|
||||
hidden terminal SINGLE_LINE_COMMENT: /[\t ]*%%[^\n\r]*/;
|
||||
|
||||
entry GitGraph:
|
||||
NEWLINE*
|
||||
('gitGraph' | 'gitGraph' ':' | 'gitGraph:' | ('gitGraph' Direction ':'))
|
||||
NEWLINE*
|
||||
(
|
||||
NEWLINE*
|
||||
(TitleAndAccessibilities |
|
||||
statements+=Statement |
|
||||
NEWLINE)*
|
||||
)
|
||||
;
|
||||
|
||||
Statement
|
||||
: Commit
|
||||
| Branch
|
||||
| Merge
|
||||
| Checkout
|
||||
| CherryPicking
|
||||
;
|
||||
|
||||
Direction:
|
||||
dir=('LR' | 'TB' | 'BT');
|
||||
|
||||
Commit:
|
||||
'commit'
|
||||
(
|
||||
'id:' id=STRING
|
||||
|'msg:'? message=STRING
|
||||
|'tag:' tags+=STRING
|
||||
|'type:' type=('NORMAL' | 'REVERSE' | 'HIGHLIGHT')
|
||||
)* EOL;
|
||||
Branch:
|
||||
'branch' name=(ID|STRING)
|
||||
('order:' order=INT)?
|
||||
EOL;
|
||||
|
||||
Merge:
|
||||
'merge' branch=(ID|STRING)
|
||||
(
|
||||
'id:' id=STRING
|
||||
|'tag:' tags+=STRING
|
||||
|'type:' type=('NORMAL' | 'REVERSE' | 'HIGHLIGHT')
|
||||
)* EOL;
|
||||
|
||||
Checkout:
|
||||
('checkout'|'switch') branch=(ID|STRING) EOL;
|
||||
|
||||
CherryPicking:
|
||||
'cherry-pick'
|
||||
(
|
||||
'id:' id=STRING
|
||||
|'tag:' tags+=STRING
|
||||
|'parent:' parent=STRING
|
||||
)* EOL;
|
||||
|
||||
|
||||
|
||||
terminal INT returns number: /[0-9]+(?=\s)/;
|
||||
terminal ID returns string: /\w([-\./\w]*[-\w])?/;
|
||||
terminal STRING: /"[^"]*"|'[^']*'/;
|
||||
|
1
packages/parser/src/language/gitGraph/index.ts
Normal file
1
packages/parser/src/language/gitGraph/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export * from './module.js';
|
52
packages/parser/src/language/gitGraph/module.ts
Normal file
52
packages/parser/src/language/gitGraph/module.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import type {
|
||||
DefaultSharedCoreModuleContext,
|
||||
LangiumCoreServices,
|
||||
LangiumSharedCoreServices,
|
||||
Module,
|
||||
PartialLangiumCoreServices,
|
||||
} from 'langium';
|
||||
import {
|
||||
inject,
|
||||
createDefaultCoreModule,
|
||||
createDefaultSharedCoreModule,
|
||||
EmptyFileSystem,
|
||||
} from 'langium';
|
||||
import { CommonValueConverter } from '../common/valueConverter.js';
|
||||
import { MermaidGeneratedSharedModule, GitGraphGeneratedModule } from '../generated/module.js';
|
||||
import { GitGraphTokenBuilder } from './tokenBuilder.js';
|
||||
|
||||
interface GitGraphAddedServices {
|
||||
parser: {
|
||||
TokenBuilder: GitGraphTokenBuilder;
|
||||
ValueConverter: CommonValueConverter;
|
||||
};
|
||||
}
|
||||
|
||||
export type GitGraphServices = LangiumCoreServices & GitGraphAddedServices;
|
||||
|
||||
export const GitGraphModule: Module<
|
||||
GitGraphServices,
|
||||
PartialLangiumCoreServices & GitGraphAddedServices
|
||||
> = {
|
||||
parser: {
|
||||
TokenBuilder: () => new GitGraphTokenBuilder(),
|
||||
ValueConverter: () => new CommonValueConverter(),
|
||||
},
|
||||
};
|
||||
|
||||
export function createGitGraphServices(context: DefaultSharedCoreModuleContext = EmptyFileSystem): {
|
||||
shared: LangiumSharedCoreServices;
|
||||
GitGraph: GitGraphServices;
|
||||
} {
|
||||
const shared: LangiumSharedCoreServices = inject(
|
||||
createDefaultSharedCoreModule(context),
|
||||
MermaidGeneratedSharedModule
|
||||
);
|
||||
const GitGraph: GitGraphServices = inject(
|
||||
createDefaultCoreModule({ shared }),
|
||||
GitGraphGeneratedModule,
|
||||
GitGraphModule
|
||||
);
|
||||
shared.ServiceRegistry.register(GitGraph);
|
||||
return { shared, GitGraph };
|
||||
}
|
7
packages/parser/src/language/gitGraph/tokenBuilder.ts
Normal file
7
packages/parser/src/language/gitGraph/tokenBuilder.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { AbstractMermaidTokenBuilder } from '../common/index.js';
|
||||
|
||||
export class GitGraphTokenBuilder extends AbstractMermaidTokenBuilder {
|
||||
public constructor() {
|
||||
super(['gitGraph']);
|
||||
}
|
||||
}
|
@@ -6,6 +6,11 @@ export {
|
||||
Pie,
|
||||
PieSection,
|
||||
Architecture,
|
||||
GitGraph,
|
||||
Branch,
|
||||
Commit,
|
||||
Merge,
|
||||
Statement,
|
||||
isCommon,
|
||||
isInfo,
|
||||
isPacket,
|
||||
@@ -13,6 +18,10 @@ export {
|
||||
isPie,
|
||||
isPieSection,
|
||||
isArchitecture,
|
||||
isGitGraph,
|
||||
isBranch,
|
||||
isCommit,
|
||||
isMerge,
|
||||
} from './generated/ast.js';
|
||||
|
||||
export {
|
||||
@@ -21,8 +30,10 @@ export {
|
||||
PacketGeneratedModule,
|
||||
PieGeneratedModule,
|
||||
ArchitectureGeneratedModule,
|
||||
GitGraphGeneratedModule,
|
||||
} from './generated/module.js';
|
||||
|
||||
export * from './gitGraph/index.js';
|
||||
export * from './common/index.js';
|
||||
export * from './info/index.js';
|
||||
export * from './packet/index.js';
|
||||
|
Reference in New Issue
Block a user