mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-10-25 17:04:19 +02:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			@mermaid-j
			...
			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