mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-15 06:19:24 +02:00
Compare commits
1 Commits
d782e4bb17
...
sidv/langi
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9a3498fba8 |
@@ -2,13 +2,13 @@ import type { DiagramAST } from '@mermaid-js/parser';
|
||||
import type { DiagramDB } from '../../diagram-api/types.js';
|
||||
|
||||
export function populateCommonDb(ast: DiagramAST, db: DiagramDB) {
|
||||
if (ast.accDescr) {
|
||||
db.setAccDescription?.(ast.accDescr);
|
||||
if (ast.accDescr?.length > 0) {
|
||||
db.setAccDescription?.(ast.accDescr.pop() ?? '');
|
||||
}
|
||||
if (ast.accTitle) {
|
||||
db.setAccTitle?.(ast.accTitle);
|
||||
if (ast.accTitle?.length > 0) {
|
||||
db.setAccTitle?.(ast.accTitle.pop() ?? '');
|
||||
}
|
||||
if (ast.title) {
|
||||
db.setDiagramTitle?.(ast.title);
|
||||
if (ast.title?.length > 0) {
|
||||
db.setDiagramTitle?.(ast.title.pop() ?? '');
|
||||
}
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@ fragment EOL returns string:
|
||||
;
|
||||
|
||||
fragment TitleAndAccessibilities:
|
||||
((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE) EOL)+
|
||||
((accDescr+=ACC_DESCR | accTitle+=ACC_TITLE | title+=TITLE) EOL)+
|
||||
;
|
||||
|
||||
terminal BOOLEAN returns boolean: 'true' | 'false';
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import type { GrammarAST, Stream, TokenBuilderOptions } from 'langium';
|
||||
import type { TokenType } from 'chevrotain';
|
||||
|
||||
import { DefaultTokenBuilder } from 'langium';
|
||||
|
||||
export abstract class AbstractMermaidTokenBuilder extends DefaultTokenBuilder {
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import type { CstNode, GrammarAST, ValueType } from 'langium';
|
||||
import { DefaultValueConverter } from 'langium';
|
||||
|
||||
import { accessibilityDescrRegex, accessibilityTitleRegex, titleRegex } from './matcher.js';
|
||||
|
||||
const rulesRegexes: Record<string, RegExp> = {
|
||||
@@ -31,14 +30,12 @@ export abstract class AbstractMermaidValueConverter extends DefaultValueConverte
|
||||
): ValueType {
|
||||
let value: ValueType | undefined = this.runCommonConverter(rule, input, cstNode);
|
||||
|
||||
if (value === undefined) {
|
||||
value = this.runCustomConverter(rule, input, cstNode);
|
||||
}
|
||||
if (value === undefined) {
|
||||
return super.runConverter(rule, input, cstNode);
|
||||
value ??= this.runCustomConverter(rule, input, cstNode);
|
||||
if (value !== undefined) {
|
||||
return value;
|
||||
}
|
||||
|
||||
return value;
|
||||
return super.runConverter(rule, input, cstNode);
|
||||
}
|
||||
|
||||
private runCommonConverter(
|
||||
|
@@ -1,5 +1,4 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import { Architecture } from '../src/language/index.js';
|
||||
import { expectNoErrorsOrAlternatives, architectureParse as parse } from './test-util.js';
|
||||
|
||||
@@ -33,7 +32,7 @@ describe('architecture', () => {
|
||||
expect(result.value.$type).toBe(Architecture);
|
||||
|
||||
const { title } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -48,7 +47,7 @@ describe('architecture', () => {
|
||||
expect(result.value.$type).toBe(Architecture);
|
||||
|
||||
const { title } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
|
||||
it('should handle regular architecture + title + accTitle + accDescr', () => {
|
||||
@@ -62,9 +61,9 @@ describe('architecture', () => {
|
||||
expect(result.value.$type).toBe(Architecture);
|
||||
|
||||
const { title, accTitle, accDescr } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(accTitle).toBe('sample accTitle');
|
||||
expect(accDescr).toBe('sample accDescr');
|
||||
expect(title).toEqual(['sample title']);
|
||||
expect(accTitle).toEqual(['sample accTitle']);
|
||||
expect(accDescr).toEqual(['sample accDescr']);
|
||||
});
|
||||
|
||||
it('should handle regular architecture + title + accTitle + multi-line accDescr', () => {
|
||||
@@ -80,9 +79,9 @@ describe('architecture', () => {
|
||||
expect(result.value.$type).toBe(Architecture);
|
||||
|
||||
const { title, accTitle, accDescr } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(accTitle).toBe('sample accTitle');
|
||||
expect(accDescr).toBe('sample accDescr');
|
||||
expect(title).toEqual(['sample title']);
|
||||
expect(accTitle).toEqual(['sample accTitle']);
|
||||
expect(accDescr).toEqual(['sample accDescr']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@@ -166,14 +166,14 @@ describe('Parsing CherryPicking Statements', () => {
|
||||
describe('Parsing with Accessibility Titles and Descriptions', () => {
|
||||
it('should parse accessibility titles', () => {
|
||||
const result = parse(`gitGraph\n accTitle: Accessible Graph\n commit\n`);
|
||||
expect(result.value.accTitle).toBe('Accessible Graph');
|
||||
expect(result.value.accTitle).toEqual(['Accessible Graph']);
|
||||
});
|
||||
|
||||
it('should parse multiline accessibility descriptions', () => {
|
||||
const result = parse(
|
||||
`gitGraph\n accDescr {\n Detailed description\n across multiple lines\n }\n commit\n`
|
||||
);
|
||||
expect(result.value.accDescr).toBe('Detailed description\nacross multiple lines');
|
||||
expect(result.value.accDescr).toEqual(['Detailed description\nacross multiple lines']);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -189,7 +189,7 @@ describe('Parsing CherryPicking Statements', () => {
|
||||
merge feature tag:"v1.0"
|
||||
cherry-pick id:"feat1" tag:"critical fix"
|
||||
`);
|
||||
expect(result.value.accTitle).toBe('Complex Example');
|
||||
expect(result.value.accTitle).toEqual(['Complex Example']);
|
||||
expect(result.value.statements[0].$type).toBe('Commit');
|
||||
expect(result.value.statements[1].$type).toBe('Branch');
|
||||
expect(result.value.statements[2].$type).toBe('Commit');
|
||||
|
@@ -49,7 +49,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { title } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -69,7 +69,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { title } = result.value;
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -85,7 +85,7 @@ describe('pie', () => {
|
||||
|
||||
const { showData, title } = result.value;
|
||||
expect(showData).toBeTruthy();
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -106,7 +106,7 @@ describe('pie', () => {
|
||||
|
||||
const { showData, title } = result.value;
|
||||
expect(showData).toBeTruthy();
|
||||
expect(title).toBe('sample title');
|
||||
expect(title).toEqual(['sample title']);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -166,7 +166,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { title, sections } = result.value;
|
||||
expect(title).toBe('sample wow');
|
||||
expect(title).toEqual(['sample wow']);
|
||||
|
||||
expect(sections[0].label).toBe('GitHub');
|
||||
expect(sections[0].value).toBe(100);
|
||||
@@ -200,7 +200,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { accTitle, sections } = result.value;
|
||||
expect(accTitle).toBe('sample wow');
|
||||
expect(accTitle).toEqual(['sample wow']);
|
||||
|
||||
expect(sections[0].label).toBe('GitHub');
|
||||
expect(sections[0].value).toBe(100);
|
||||
@@ -218,7 +218,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { accDescr, sections } = result.value;
|
||||
expect(accDescr).toBe('sample wow');
|
||||
expect(accDescr).toEqual(['sample wow']);
|
||||
|
||||
expect(sections[0].label).toBe('GitHub');
|
||||
expect(sections[0].value).toBe(100);
|
||||
@@ -238,7 +238,7 @@ describe('pie', () => {
|
||||
expect(result.value.$type).toBe(Pie);
|
||||
|
||||
const { accDescr, sections } = result.value;
|
||||
expect(accDescr).toBe('sample wow');
|
||||
expect(accDescr).toEqual(['sample wow']);
|
||||
|
||||
expect(sections[0].label).toBe('GitHub');
|
||||
expect(sections[0].value).toBe(100);
|
||||
|
@@ -35,7 +35,7 @@ describe('radar', () => {
|
||||
expect(result.value.$type).toBe(Radar);
|
||||
|
||||
const { title } = result.value;
|
||||
expect(title).toBe('My Title');
|
||||
expect(title).toEqual(['My Title']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -47,7 +47,7 @@ describe('radar', () => {
|
||||
expect(result.value.$type).toBe(Radar);
|
||||
|
||||
const { accDescr } = result.value;
|
||||
expect(accDescr).toBe('My Accessible Description');
|
||||
expect(accDescr).toEqual(['My Accessible Description']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -59,7 +59,7 @@ describe('radar', () => {
|
||||
expect(result.value.$type).toBe(Radar);
|
||||
|
||||
const { accTitle } = result.value;
|
||||
expect(accTitle).toBe('My Accessible Title');
|
||||
expect(accTitle).toEqual(['My Accessible Title']);
|
||||
});
|
||||
|
||||
it.each([
|
||||
@@ -75,9 +75,9 @@ describe('radar', () => {
|
||||
expect(result.value.$type).toBe(Radar);
|
||||
|
||||
const { title, accDescr, accTitle } = result.value;
|
||||
expect(title).toBe('My Title');
|
||||
expect(accDescr).toBe('My Accessible Description');
|
||||
expect(accTitle).toBe('My Accessible Title');
|
||||
expect(title).toEqual(['My Title']);
|
||||
expect(accDescr).toEqual(['My Accessible Description']);
|
||||
expect(accTitle).toEqual(['My Accessible Title']);
|
||||
});
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user