| 6dd74de | | | 1 | import type { CstNode, GrammarAST, ValueType } from 'langium'; |
| 6dd74de | | | 2 | import { AbstractMermaidValueConverter } from '../common/index.js'; |
| 6dd74de | | | 3 | |
| 6dd74de | | | 4 | // Regular expression to extract className and styleText from a classDef terminal |
| 6dd74de | | | 5 | const classDefRegex = /classDef\s+([A-Z_a-z]\w+)(?:\s+([^\n\r;]*))?;?/; |
| 6dd74de | | | 6 | |
| 6dd74de | | | 7 | export class TreemapValueConverter extends AbstractMermaidValueConverter { |
| 6dd74de | | | 8 | protected runCustomConverter( |
| 6dd74de | | | 9 | rule: GrammarAST.AbstractRule, |
| 6dd74de | | | 10 | input: string, |
| 6dd74de | | | 11 | _cstNode: CstNode |
| 6dd74de | | | 12 | ): ValueType | undefined { |
| 6dd74de | | | 13 | if (rule.name === 'NUMBER2') { |
| 6dd74de | | | 14 | // Convert to a number by removing any commas and converting to float |
| 6dd74de | | | 15 | return parseFloat(input.replace(/,/g, '')); |
| 6dd74de | | | 16 | } else if (rule.name === 'SEPARATOR') { |
| 6dd74de | | | 17 | // Remove quotes |
| 6dd74de | | | 18 | return input.substring(1, input.length - 1); |
| 6dd74de | | | 19 | } else if (rule.name === 'STRING2') { |
| 6dd74de | | | 20 | // Remove quotes |
| 6dd74de | | | 21 | return input.substring(1, input.length - 1); |
| 6dd74de | | | 22 | } else if (rule.name === 'INDENTATION') { |
| 6dd74de | | | 23 | return input.length; |
| 6dd74de | | | 24 | } else if (rule.name === 'ClassDef') { |
| 6dd74de | | | 25 | // Handle both CLASS_DEF terminal and ClassDef rule |
| 6dd74de | | | 26 | if (typeof input !== 'string') { |
| 6dd74de | | | 27 | // If we're dealing with an already processed object, return it as is |
| 6dd74de | | | 28 | return input; |
| 6dd74de | | | 29 | } |
| 6dd74de | | | 30 | |
| 6dd74de | | | 31 | // Extract className and styleText from classDef statement |
| 6dd74de | | | 32 | const match = classDefRegex.exec(input); |
| 6dd74de | | | 33 | if (match) { |
| 6dd74de | | | 34 | // Use any type to avoid type issues |
| 6dd74de | | | 35 | return { |
| 6dd74de | | | 36 | $type: 'ClassDefStatement', |
| 6dd74de | | | 37 | className: match[1], |
| 6dd74de | | | 38 | styleText: match[2] || undefined, |
| 6dd74de | | | 39 | } as any; |
| 6dd74de | | | 40 | } |
| 6dd74de | | | 41 | } |
| 6dd74de | | | 42 | return undefined; |
| 6dd74de | | | 43 | } |
| 6dd74de | | | 44 | } |