collab/mermaid/packages/parser/src/language/treemap/treemap.langiumblame
View source
6dd74de1/**
6dd74de2 * Treemap grammar for Langium
6dd74de3 * Converted from mindmap grammar
6dd74de4 *
6dd74de5 * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines
6dd74de6 * before the treemap keyword, allowing for empty lines and comments before the
6dd74de7 * treemap declaration.
6dd74de8 */
6dd74de9grammar TreemapGrammar
6dd74de10
6dd74de11
6dd74de12
6dd74de13fragment TitleAndAccessibilities:
6dd74de14 ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE))+
6dd74de15;
6dd74de16
6dd74de17terminal BOOLEAN returns boolean: 'true' | 'false';
6dd74de18
6dd74de19terminal ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/;
6dd74de20terminal ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/;
6dd74de21terminal TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/;
6dd74de22
6dd74de23// Interface declarations for data types
6dd74de24interface Item {
6dd74de25 name: string
6dd74de26 classSelector?: string // For ::: class
6dd74de27}
6dd74de28interface Section extends Item {
6dd74de29}
6dd74de30interface Leaf extends Item {
6dd74de31 value: number
6dd74de32}
6dd74de33interface ClassDefStatement {
6dd74de34 className: string
6dd74de35 styleText: string // Optional style text
6dd74de36}
6dd74de37interface Treemap {
6dd74de38 TreemapRows: TreemapRow[]
6dd74de39 title?: string
6dd74de40 accTitle?: string
6dd74de41 accDescr?: string
6dd74de42}
6dd74de43
6dd74de44entry Treemap returns Treemap:
6dd74de45 TREEMAP_KEYWORD
6dd74de46 (
6dd74de47 TitleAndAccessibilities
6dd74de48 | TreemapRows+=TreemapRow
6dd74de49 )*;
6dd74de50terminal TREEMAP_KEYWORD: 'treemap-beta' | 'treemap';
6dd74de51
6dd74de52terminal CLASS_DEF: /classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/;
6dd74de53terminal STYLE_SEPARATOR: ':::';
6dd74de54terminal SEPARATOR: ':';
6dd74de55terminal COMMA: ',';
6dd74de56
6dd74de57// This should be processed before whitespace is ignored
6dd74de58terminal INDENTATION: /[ \t]{1,}/; // One or more spaces/tabs for indentation
6dd74de59
6dd74de60hidden terminal WS: /[ \t]+/; // One or more spaces or tabs for hidden whitespace
6dd74de61hidden terminal ML_COMMENT: /\%\%[^\n]*/;
6dd74de62hidden terminal NL: /\r?\n/;
6dd74de63
6dd74de64TreemapRow:
6dd74de65 indent=INDENTATION? (item=Item | ClassDef);
6dd74de66
6dd74de67// Class definition statement handled by the value converter
6dd74de68ClassDef returns string:
6dd74de69 CLASS_DEF;
6dd74de70
6dd74de71Item returns Item:
6dd74de72 Leaf | Section;
6dd74de73
6dd74de74// Use a special rule order to handle the parsing precedence
6dd74de75Section returns Section:
6dd74de76 name=STRING2 (STYLE_SEPARATOR classSelector=ID2)?;
6dd74de77
6dd74de78Leaf returns Leaf:
6dd74de79 name=STRING2 INDENTATION? (SEPARATOR | COMMA) INDENTATION? value=MyNumber (STYLE_SEPARATOR classSelector=ID2)?;
6dd74de80
6dd74de81// Keywords with fixed text patterns
6dd74de82terminal ID2: /[a-zA-Z_][a-zA-Z0-9_]*/;
6dd74de83// Define as a terminal rule
6dd74de84terminal NUMBER2: /[0-9_\.\,]+/;
6dd74de85
6dd74de86// Then create a data type rule that uses it
6dd74de87MyNumber returns number: NUMBER2;
6dd74de88
6dd74de89terminal STRING2: /"[^"]*"|'[^']*'/;
6dd74de90// Modified indentation rule to have higher priority than WS