| 6dd74de | | | 1 | /** |
| 6dd74de | | | 2 | * Treemap grammar for Langium |
| 6dd74de | | | 3 | * Converted from mindmap grammar |
| 6dd74de | | | 4 | * |
| 6dd74de | | | 5 | * The ML_COMMENT and NL hidden terminals handle whitespace, comments, and newlines |
| 6dd74de | | | 6 | * before the treemap keyword, allowing for empty lines and comments before the |
| 6dd74de | | | 7 | * treemap declaration. |
| 6dd74de | | | 8 | */ |
| 6dd74de | | | 9 | grammar TreemapGrammar |
| 6dd74de | | | 10 | |
| 6dd74de | | | 11 | |
| 6dd74de | | | 12 | |
| 6dd74de | | | 13 | fragment TitleAndAccessibilities: |
| 6dd74de | | | 14 | ((accDescr=ACC_DESCR | accTitle=ACC_TITLE | title=TITLE))+ |
| 6dd74de | | | 15 | ; |
| 6dd74de | | | 16 | |
| 6dd74de | | | 17 | terminal BOOLEAN returns boolean: 'true' | 'false'; |
| 6dd74de | | | 18 | |
| 6dd74de | | | 19 | terminal ACC_DESCR: /[\t ]*accDescr(?:[\t ]*:([^\n\r]*?(?=%%)|[^\n\r]*)|\s*{([^}]*)})/; |
| 6dd74de | | | 20 | terminal ACC_TITLE: /[\t ]*accTitle[\t ]*:(?:[^\n\r]*?(?=%%)|[^\n\r]*)/; |
| 6dd74de | | | 21 | terminal TITLE: /[\t ]*title(?:[\t ][^\n\r]*?(?=%%)|[\t ][^\n\r]*|)/; |
| 6dd74de | | | 22 | |
| 6dd74de | | | 23 | // Interface declarations for data types |
| 6dd74de | | | 24 | interface Item { |
| 6dd74de | | | 25 | name: string |
| 6dd74de | | | 26 | classSelector?: string // For ::: class |
| 6dd74de | | | 27 | } |
| 6dd74de | | | 28 | interface Section extends Item { |
| 6dd74de | | | 29 | } |
| 6dd74de | | | 30 | interface Leaf extends Item { |
| 6dd74de | | | 31 | value: number |
| 6dd74de | | | 32 | } |
| 6dd74de | | | 33 | interface ClassDefStatement { |
| 6dd74de | | | 34 | className: string |
| 6dd74de | | | 35 | styleText: string // Optional style text |
| 6dd74de | | | 36 | } |
| 6dd74de | | | 37 | interface Treemap { |
| 6dd74de | | | 38 | TreemapRows: TreemapRow[] |
| 6dd74de | | | 39 | title?: string |
| 6dd74de | | | 40 | accTitle?: string |
| 6dd74de | | | 41 | accDescr?: string |
| 6dd74de | | | 42 | } |
| 6dd74de | | | 43 | |
| 6dd74de | | | 44 | entry Treemap returns Treemap: |
| 6dd74de | | | 45 | TREEMAP_KEYWORD |
| 6dd74de | | | 46 | ( |
| 6dd74de | | | 47 | TitleAndAccessibilities |
| 6dd74de | | | 48 | | TreemapRows+=TreemapRow |
| 6dd74de | | | 49 | )*; |
| 6dd74de | | | 50 | terminal TREEMAP_KEYWORD: 'treemap-beta' | 'treemap'; |
| 6dd74de | | | 51 | |
| 6dd74de | | | 52 | terminal CLASS_DEF: /classDef\s+([a-zA-Z_][a-zA-Z0-9_]+)(?:\s+([^;\r\n]*))?(?:;)?/; |
| 6dd74de | | | 53 | terminal STYLE_SEPARATOR: ':::'; |
| 6dd74de | | | 54 | terminal SEPARATOR: ':'; |
| 6dd74de | | | 55 | terminal COMMA: ','; |
| 6dd74de | | | 56 | |
| 6dd74de | | | 57 | // This should be processed before whitespace is ignored |
| 6dd74de | | | 58 | terminal INDENTATION: /[ \t]{1,}/; // One or more spaces/tabs for indentation |
| 6dd74de | | | 59 | |
| 6dd74de | | | 60 | hidden terminal WS: /[ \t]+/; // One or more spaces or tabs for hidden whitespace |
| 6dd74de | | | 61 | hidden terminal ML_COMMENT: /\%\%[^\n]*/; |
| 6dd74de | | | 62 | hidden terminal NL: /\r?\n/; |
| 6dd74de | | | 63 | |
| 6dd74de | | | 64 | TreemapRow: |
| 6dd74de | | | 65 | indent=INDENTATION? (item=Item | ClassDef); |
| 6dd74de | | | 66 | |
| 6dd74de | | | 67 | // Class definition statement handled by the value converter |
| 6dd74de | | | 68 | ClassDef returns string: |
| 6dd74de | | | 69 | CLASS_DEF; |
| 6dd74de | | | 70 | |
| 6dd74de | | | 71 | Item returns Item: |
| 6dd74de | | | 72 | Leaf | Section; |
| 6dd74de | | | 73 | |
| 6dd74de | | | 74 | // Use a special rule order to handle the parsing precedence |
| 6dd74de | | | 75 | Section returns Section: |
| 6dd74de | | | 76 | name=STRING2 (STYLE_SEPARATOR classSelector=ID2)?; |
| 6dd74de | | | 77 | |
| 6dd74de | | | 78 | Leaf returns Leaf: |
| 6dd74de | | | 79 | name=STRING2 INDENTATION? (SEPARATOR | COMMA) INDENTATION? value=MyNumber (STYLE_SEPARATOR classSelector=ID2)?; |
| 6dd74de | | | 80 | |
| 6dd74de | | | 81 | // Keywords with fixed text patterns |
| 6dd74de | | | 82 | terminal ID2: /[a-zA-Z_][a-zA-Z0-9_]*/; |
| 6dd74de | | | 83 | // Define as a terminal rule |
| 6dd74de | | | 84 | terminal NUMBER2: /[0-9_\.\,]+/; |
| 6dd74de | | | 85 | |
| 6dd74de | | | 86 | // Then create a data type rule that uses it |
| 6dd74de | | | 87 | MyNumber returns number: NUMBER2; |
| 6dd74de | | | 88 | |
| 6dd74de | | | 89 | terminal STRING2: /"[^"]*"|'[^']*'/; |
| 6dd74de | | | 90 | // Modified indentation rule to have higher priority than WS |