├── .prettierignore ├── .gitignore ├── .vscode └── settings.json ├── .prettierrc ├── mermaid-language-configuration.json ├── images ├── graph.png ├── adoSyntax.png ├── erDiagram.png ├── gitGraph.png ├── mindmap.png ├── pieChart.png ├── userJourney.png ├── architecture.png ├── classDiagram.png ├── ganttDiagram.png ├── icon │ ├── iconPNG.png │ ├── magnifyingGlass.svg │ ├── mermaidTail.svg │ └── iconSVG.svg ├── quadrantChart.png ├── stateDiagram.png ├── sequenceDiagram.png └── requirementsDiagram.png ├── syntaxes ├── mermaid.tmLanguage.yaml ├── diagrams │ ├── pieChart.yaml │ ├── userJourney.yaml │ ├── mindmap.yaml │ ├── quadrantChart.yaml │ ├── ganttDiagram.yaml │ ├── erDiagram.yaml │ ├── architecture.yaml │ ├── gitGraph.yaml │ ├── sequenceDiagram.yaml │ ├── requirementDiagram.yaml │ ├── xyChart.yaml │ ├── stateDiagram.yaml │ ├── graph.yaml │ └── classDiagram.yaml ├── mermaid.tmLanguage-markdown.yaml └── mermaid.tmLanguage-mdx.yaml ├── tests ├── diagrams │ ├── graph-flowchart.test.mermaid │ ├── state-v2.test.mermaid │ ├── pie.test.mermaid │ ├── userJourney.test.mermaid │ ├── mindmap.test.mermaid │ ├── quadrantChart.test.mermaid │ ├── xychart.test.mermaid │ ├── gitGraph.test.mermaid │ ├── architecture.test.mermaid │ ├── gantt.test.mermaid │ ├── state.test.mermaid │ ├── sequence.test.mermaid │ ├── requirement.test.mermaid │ ├── er.test.mermaid │ ├── class.test.mermaid │ └── graph.test.mermaid └── markdown │ ├── mdx.test.mdx │ ├── ado-markdown.test.md │ ├── basic.test.mermaid │ ├── with-attributes.test.md │ └── markdown-multiple.test.md ├── .github └── workflows │ ├── master-merge.yml │ └── github-pr.yml ├── LICENSE ├── CONTRIBUTING.md ├── package.json ├── README.md └── CHANGELOG.md /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore test files 2 | tests/**/*.md -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out 3 | *.vsix 4 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "yaml.customTags": [ 3 | "!regex scalar" 4 | ] 5 | } -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /mermaid-language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "%%" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /images/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/graph.png -------------------------------------------------------------------------------- /images/adoSyntax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/adoSyntax.png -------------------------------------------------------------------------------- /images/erDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/erDiagram.png -------------------------------------------------------------------------------- /images/gitGraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/gitGraph.png -------------------------------------------------------------------------------- /images/mindmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/mindmap.png -------------------------------------------------------------------------------- /images/pieChart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/pieChart.png -------------------------------------------------------------------------------- /images/userJourney.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/userJourney.png -------------------------------------------------------------------------------- /images/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/architecture.png -------------------------------------------------------------------------------- /images/classDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/classDiagram.png -------------------------------------------------------------------------------- /images/ganttDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/ganttDiagram.png -------------------------------------------------------------------------------- /images/icon/iconPNG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/icon/iconPNG.png -------------------------------------------------------------------------------- /images/quadrantChart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/quadrantChart.png -------------------------------------------------------------------------------- /images/stateDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/stateDiagram.png -------------------------------------------------------------------------------- /images/sequenceDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/sequenceDiagram.png -------------------------------------------------------------------------------- /images/requirementsDiagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/HEAD/images/requirementsDiagram.png -------------------------------------------------------------------------------- /syntaxes/mermaid.tmLanguage.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | fileTypes: 3 | - mermaid 4 | patterns: 5 | - include: '#mermaid' 6 | repository: 7 | mermaid: 8 | patterns: !!import/deep 9 | - diagrams/ 10 | scopeName: source.mermaid 11 | -------------------------------------------------------------------------------- /tests/diagrams/graph-flowchart.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "graph flowchart test" 2 | 3 | flowchart TB 4 | ID-1[Node 1] 5 | %%^^^^ variable 6 | %% ^ keyword.control.mermaid 7 | %% ^^^^^^ string 8 | %% ^ keyword.control.mermaid -------------------------------------------------------------------------------- /tests/diagrams/state-v2.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "state diagram v2 test" 2 | 3 | stateDiagram-v2 4 | %% <--------------- keyword.control.mermaid 5 | s1 6 | %%^^ variable 7 | s1 --> s2 8 | %%^^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^^ variable -------------------------------------------------------------------------------- /tests/markdown/mdx.test.mdx: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "mdx.mermaid.codeblock" 2 | 3 | ```mermaid 4 | graph LR 5 | %% <----- keyword.control.mermaid 6 | %% ^^ entity.name.function.mermaid 7 | A --> B 8 | %%^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^ variable 11 | ``` 12 | -------------------------------------------------------------------------------- /tests/markdown/ado-markdown.test.md: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "markdown.mermaid.codeblock" "ado markdown test" 2 | 3 | ::: mermaid 4 | graph LR 5 | %% <----- keyword.control.mermaid 6 | %% ^^ entity.name.function.mermaid 7 | A --> B 8 | %%^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^ variable 11 | ::: -------------------------------------------------------------------------------- /tests/markdown/basic.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "markdown.mermaid.codeblock" "basic markdown test" 2 | 3 | ```mermaid 4 | graph LR 5 | %% <----- keyword.control.mermaid 6 | %% ^^ entity.name.function.mermaid 7 | A --> B 8 | %%^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^ variable 11 | ``` -------------------------------------------------------------------------------- /tests/markdown/with-attributes.test.md: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "markdown.mermaid.codeblock" "with attributes markdown test" 2 | 3 | ```{ .mermaid caption="test" #fig:graph} 4 | graph LR 5 | %% <----- keyword.control.mermaid 6 | %% ^^ entity.name.function.mermaid 7 | A --> B 8 | %%^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^ variable 11 | ``` -------------------------------------------------------------------------------- /images/icon/magnifyingGlass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /syntaxes/diagrams/pieChart.yaml: -------------------------------------------------------------------------------- 1 | - comment: Pie Chart 2 | begin: ^\s*(pie) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: !regex |- 10 | ^\s*(title)\s+ # title 11 | (\s*["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 12 | captures: 13 | '1': 14 | name: keyword.control.mermaid 15 | '2': 16 | name: string 17 | - begin: !regex |- 18 | \s(.*) # DataKey Text 19 | (:) # : 20 | beginCaptures: 21 | '1': 22 | name: string 23 | '2': 24 | name: keyword.control.mermaid 25 | patterns: 26 | - match: \%%.* 27 | name: comment 28 | end: '$' 29 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 30 | -------------------------------------------------------------------------------- /tests/diagrams/pie.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "pie diagram test" 2 | 3 | pie 4 | %%% <--- keyword.control.mermaid 5 | title Key elements in Product X 6 | %%^^^^^ keyword.control.mermaid 7 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^ string 8 | "Calcium" : 42.96 9 | %% ^^^^^^^^^ string 10 | %% ^ keyword.control.mermaid 11 | %% ^^^^^ source.mermaid 12 | "Potassium" : 50.05 13 | %% ^^^^^^^^^^^ string 14 | %% ^ keyword.control.mermaid 15 | %% ^^^^^ source.mermaid 16 | "Magnesium" : 10.01 17 | %% ^^^^^^^^^^^ string 18 | %% ^ keyword.control.mermaid 19 | %% ^^^^^ source.mermaid 20 | "Iron" : 5 21 | %% ^^^^^^ string 22 | %% ^ keyword.control.mermaid 23 | %% ^ source.mermaid 24 | 25 | %% negative cases 26 | invalid title invalid 27 | %%^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 28 | -------------------------------------------------------------------------------- /.github/workflows/master-merge.yml: -------------------------------------------------------------------------------- 1 | # Deploy to VS Marketplace on master merge as long as the version has 2 | # changed (inferred by a change to CHANGELOG.md) 3 | 4 | name: 'Github Master Merge' 5 | 6 | on: 7 | push: 8 | branches: master 9 | paths: 10 | - 'CHANGELOG.md' 11 | 12 | jobs: 13 | deploy: 14 | runs-on: ubuntu-latest 15 | strategy: 16 | matrix: 17 | node-version: [22] 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - name: Setup Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v4 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | cache: npm 27 | 28 | - name: Install 29 | run: npm ci 30 | 31 | - name: Publish to Visual Studio Marketplace 32 | uses: HaaLeo/publish-vscode-extension@v1 33 | with: 34 | pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} 35 | registryUrl: https://marketplace.visualstudio.com 36 | -------------------------------------------------------------------------------- /syntaxes/mermaid.tmLanguage-markdown.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | fileTypes: [] 3 | injectionSelector: L:text.html.markdown 4 | patterns: 5 | - include: '#mermaid-code-block' 6 | - include: '#mermaid-code-block-with-attributes' 7 | - include: '#mermaid-ado-code-block' 8 | repository: 9 | mermaid-code-block: 10 | begin: (?i)(?<=[`~])\s*mermaid(\s+[^`~]*)?$ 11 | end: (^|\G)(?=\s*[`~]{3,}\s*$) 12 | contentName: 'meta.embedded.block.mermaid' 13 | patterns: 14 | - include: '#mermaid' 15 | mermaid-code-block-with-attributes: 16 | begin: (?i)(?<=[`~])\s*\{\s*\.?mermaid(\s+[^`~]*)?$ 17 | end: (^|\G)(?=\s*[`~]{3,}\s*$) 18 | contentName: 'meta.embedded.block.mermaid' 19 | patterns: 20 | - include: '#mermaid' 21 | mermaid-ado-code-block: 22 | begin: (?i)\s*:::\s*mermaid\s*$ 23 | end: \s*:::\s* 24 | contentName: 'meta.embedded.block.mermaid' 25 | patterns: 26 | - include: '#mermaid' 27 | mermaid: 28 | patterns: !!import/deep 29 | - diagrams/ 30 | scopeName: markdown.mermaid.codeblock 31 | -------------------------------------------------------------------------------- /tests/diagrams/userJourney.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "user journey test" 2 | 3 | journey 4 | %%%%%%% <--- keyword.control.mermaid 5 | title My working day 6 | %%^^^^^ keyword.control.mermaid 7 | %% ^^^^^^^^^^^^^^ string 8 | section Go to work 9 | %%^^^^^^^ keyword.control.mermaid 10 | %% ^^^^^^^^^^ string 11 | Make tea: 5: Me 12 | %% ^^^^^^^^ string 13 | %% ^ keyword.control.mermaid 14 | %% ^ constant.numeric.decimal.mermaid 15 | %% ^ keyword.control.mermaid 16 | %% ^^ variable 17 | Do work: 1: Me, My Cat~=*%[]`&^$!"() 18 | %% ^^^^^^^ string 19 | %% ^ keyword.control.mermaid 20 | %% ^ constant.numeric.decimal.mermaid 21 | %% ^ keyword.control.mermaid 22 | %% ^^ variable 23 | %% ^ source.mermaid 24 | %% ^^^^^^^^^^^^^^^^^^ variable 25 | 26 | %% negative cases 27 | invalid title text 28 | %%^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 29 | invalid section text 30 | %%^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Brian Pruitt-Goddard 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /syntaxes/diagrams/userJourney.yaml: -------------------------------------------------------------------------------- 1 | - comment: User Journey 2 | begin: ^\s*(journey) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: !regex |- 10 | ^\s*(title|section)\s+ # title or section 11 | (\s*["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 12 | captures: 13 | '1': 14 | name: keyword.control.mermaid 15 | '2': 16 | name: string 17 | - begin: !regex |- 18 | \s*(["\(\)$&%\^/.,?!*+=<>\'\\\-\w\s]*) # (task name) 19 | \s*(:) # (:) 20 | \s*(\d+) # (score) 21 | \s*(:) # (:) 22 | beginCaptures: 23 | '1': 24 | name: string 25 | '2': 26 | name: keyword.control.mermaid 27 | '3': 28 | name: constant.numeric.decimal.mermaid 29 | '4': 30 | name: keyword.control.mermaid 31 | patterns: 32 | - comment: (taskName) 33 | match: !regex |- 34 | \s*,?\s*([^,#\n]+) # task name 35 | captures: 36 | '1': 37 | name: variable 38 | end: $ 39 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 40 | -------------------------------------------------------------------------------- /.github/workflows/github-pr.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: 'Github PR CI' 5 | 6 | on: 7 | push: 8 | tags: 9 | - "*" 10 | branches: 11 | - "*" 12 | pull_request: 13 | branches: 14 | - "*" 15 | 16 | jobs: 17 | build: 18 | runs-on: ubuntu-latest 19 | strategy: 20 | matrix: 21 | node-version: [22] 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | 26 | - name: Prettier check 27 | uses: creyD/prettier_action@v4.3 28 | with: 29 | dry: true 30 | prettier_options: --check **/*.{js,yaml,md} 31 | 32 | - name: Setup Node.js ${{ matrix.node-version }} 33 | uses: actions/setup-node@v4 34 | with: 35 | node-version: ${{ matrix.node-version }} 36 | cache: npm 37 | 38 | - name: Install 39 | run: npm ci 40 | 41 | - name: Convert Yaml 42 | run: npm run convertYaml 43 | 44 | - name: Test 45 | run: npm test 46 | -------------------------------------------------------------------------------- /tests/diagrams/mindmap.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "mindmap diagram test" 2 | 3 | mindmap 4 | %%<------- keyword.control.mermaid 5 | %% comment 6 | %%^^^^^^^^^^ comment 7 | root 8 | %%^^^^ string 9 | id[I am a square] 10 | %%^^ variable 11 | %% ^ keyword.control.mermaid 12 | %% ^^^^^^^^^^^^^ string 13 | %% ^ keyword.control.mermaid 14 | id(I am a rounded square) 15 | %%^^ variable 16 | %% ^ keyword.control.mermaid 17 | %% ^^^^^^^^^^^^^^^^^^^^^ string 18 | %% ^ keyword.control.mermaid 19 | id((I am a circle)) 20 | %%^^ variable 21 | %% ^^ keyword.control.mermaid 22 | %% ^^^^^^^^^^^^^ string 23 | %% ^^ keyword.control.mermaid 24 | id))I am a bang(( 25 | %%^^ variable 26 | %% ^^ keyword.control.mermaid 27 | %% ^^^^^^^^^^^ string 28 | %% ^^ keyword.control.mermaid 29 | id)I am a cloud( 30 | %%^^ variable 31 | %% ^ keyword.control.mermaid 32 | %% ^^^^^^^^^^^^ string 33 | %% ^ keyword.control.mermaid 34 | id{{I am a hexagon}} 35 | %%^^ variable 36 | %% ^^ keyword.control.mermaid 37 | %% ^^^^^^^^^^^^^^ string 38 | %% ^^ keyword.control.mermaid 39 | ::icon(fa fa-book) 40 | %%^^^^^^ keyword.control.mermaid 41 | %% ^ punctuation.parenthesis.open.mermaid 42 | %% ^^^^^^^^^^ string 43 | %% ^ punctuation.parenthesis.close.mermaid 44 | :::urgent large 45 | %%^^^ keyword.control.mermaid 46 | %% ^^^^^^^^^^^^ string 47 | -------------------------------------------------------------------------------- /syntaxes/diagrams/mindmap.yaml: -------------------------------------------------------------------------------- 1 | - comment: Mindmap Diagram 2 | begin: ^\s*(mindmap) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: :::Text 10 | match: !regex |- 11 | (\s*:::) # ::: 12 | (\s*["$&\^/#.,?!;*+=<>\'\\\-\w\s]*) # Text 13 | captures: 14 | '1': 15 | name: keyword.control.mermaid 16 | '2': 17 | name: string 18 | - comment: ::icon(Text) 19 | match: !regex |- 20 | (\s*::icon) # ::icon 21 | (\s*\() # ( 22 | (\s*["$&\^/#.,?!;*+=<>\'\\\-\w\s]*) # Text 23 | (\s*\)) # ) 24 | captures: 25 | '1': 26 | name: keyword.control.mermaid 27 | '2': 28 | name: punctuation.parenthesis.open.mermaid 29 | '3': 30 | name: string 31 | '4': 32 | name: punctuation.parenthesis.close.mermaid 33 | - comment: (Id)(Shape Start)(Text)(Shape End) 34 | match: !regex |- 35 | (\s*["$&\^/#.,?!;:*+=<>\'\\\-\w\s]*) # Id 36 | (\s*\({1,2}|\){1,2}|\{\{|\[) # Start Shape 37 | (\s*["$&\^/#.,?!;:*+=<>\'\\\-\w\s]*) # Text 38 | (\s*\){1,2}|\({1,2}|\}\}|\]) # End Shape 39 | captures: 40 | '1': 41 | name: variable 42 | '2': 43 | name: keyword.control.mermaid 44 | '3': 45 | name: string 46 | '4': 47 | name: keyword.control.mermaid 48 | - match: ^(\s*["$&\^/#.,?!;:*+=<>\'\\\-\w\s]*) 49 | name: string 50 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 51 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Building 2 | 3 | The grammars for each diagram type reside in `syntaxes/diagrams` in separate files. 4 | 5 | To test changes locally: 6 | 7 | 1. Build the theme and create the vsix package by running: 8 | 9 | ```sh 10 | npm install 11 | npx @vscode/vsce package 12 | ``` 13 | 14 | 2. Install the theme locally by using the `Install from VSIX` command. This may require reloading VS Code to see the changes. 15 | 16 | ## Testing 17 | 18 | There are tests validating the grammar that can be triggered by running: 19 | 20 | ```sh 21 | npm test 22 | ``` 23 | 24 | The tests will validate the grammar for all diagrams. Note this does _not_ build the grammar, this will need to be done if changes have been made to the `yaml`. To test and build, run: 25 | 26 | ```sh 27 | npm run convertYaml && npm test 28 | ``` 29 | 30 | ## Developing 31 | 32 | The grammar includes a custom yaml type `regex`. This should be used for all but the simplest regex expressions. It was created to allow the regex to be multiline (with no whitespace between lines) and in-line comments that are stripped from the json. To use it, prepend `!regex` as seen below: 33 | 34 | ```yaml 35 | reg: !regex |- 36 | # Comment 37 | \s*(class)\s+ # explanation 38 | (\b[-,\w]+)\s+ # comment 39 | ``` 40 | 41 | Becomes: 42 | 43 | ```json 44 | { 45 | "reg": "\\s*(class)\\s+(\\b[-,\\w]+)\\s+" 46 | } 47 | ``` 48 | 49 | Instead of: 50 | 51 | ```json 52 | { 53 | "reg": "# Comment\n\\s*(class)\\s+ # explanation\n(\\b[-,\\w]+)\\s+ # comment" 54 | } 55 | ``` 56 | 57 | This is useful for splitting out sections of the regex (such as capture groups) and commenting on what each group should be matching. 58 | -------------------------------------------------------------------------------- /syntaxes/mermaid.tmLanguage-mdx.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | fileTypes: [] 3 | injectionSelector: L:source.mdx 4 | patterns: 5 | - include: '#mermaid-code-block' 6 | repository: 7 | mermaid-code-block: 8 | patterns: 9 | - begin: 10 | "(?:^|\\G)[\\t ]*(`{3,})(?:[\\t ]*((?i:(?:.*\\.)?mermaid))(?:[\\t ]+((?:[^\\n\\r`])+))?)(?:[\\t 11 | ]*$)" 12 | beginCaptures: 13 | 1: 14 | name: string.other.begin.code.fenced.mdx 15 | 2: 16 | name: entity.name.function.mdx 17 | contentName: meta.embedded.mermaid 18 | end: "(\\1)(?:[\\t ]*$)" 19 | endCaptures: 20 | 1: 21 | name: string.other.end.code.fenced.mdx 22 | name: markup.code.mermaid.mdx 23 | patterns: 24 | - begin: "(^|\\G)(\\s*)(.*)" 25 | while: "(^|\\G)(?!\\s*([`~]{3,})\\s*$)" 26 | patterns: 27 | - contentName: meta.embedded.block.mermaid 28 | include: source.mermaid 29 | - begin: 30 | "(?:^|\\G)[\\t ]*(~{3,})(?:[\\t ]*((?i:(?:.*\\.)?mermaid))(?:[\\t ]+((?:[^\\n\\r])+))?)(?:[\\t 31 | ]*$)" 32 | beginCaptures: 33 | 1: 34 | name: string.other.begin.code.fenced.mdx 35 | 2: 36 | name: entity.name.function.mdx 37 | contentName: meta.embedded.mermaid 38 | end: "(\\1)(?:[\\t ]*$)" 39 | endCaptures: 40 | 1: 41 | name: string.other.end.code.fenced.mdx 42 | name: markup.code.mermaid.mdx 43 | patterns: 44 | - begin: "(^|\\G)(\\s*)(.*)" 45 | while: "(^|\\G)(?!\\s*([`~]{3,})\\s*$)" 46 | patterns: !!import/deep 47 | - diagrams/ 48 | scopeName: mdx.mermaid.codeblock 49 | -------------------------------------------------------------------------------- /tests/markdown/markdown-multiple.test.md: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "markdown.mermaid.codeblock" "multiple markdown block test" 2 | 3 | ::: mermaid 4 | graph LR 5 | %% <----- keyword.control.mermaid 6 | %% ^^ entity.name.function.mermaid 7 | A --> B 8 | %%^ variable 9 | %% ^^^ keyword.control.mermaid 10 | %% ^ variable 11 | ::: 12 | 13 | Parantaa endpointin toimivuutta ennaltamaar 14 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 15 | tosiparemmilla looppi rectangulaareilla 16 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 17 | 18 | :::mermaid 19 | sequenceDiagram 20 | %% <-------------- keyword.control.mermaid 21 | participant S as S 22 | %%^^^^^^^^^^^ keyword.control.mermaid 23 | %% ^ variable 24 | %% ^^ keyword.control.mermaid 25 | %% ^ string 26 | ::: 27 | 28 | Parantaa endpointin toimivuutta ennaltamaar 29 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 30 | tosiparemmilla looppi rectangulaareilla 31 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 32 | 33 | ``` mermaid 34 | graph LR 35 | %% <----- keyword.control.mermaid 36 | %% ^^ entity.name.function.mermaid 37 | A --> B 38 | %%^ variable 39 | %% ^^^ keyword.control.mermaid 40 | %% ^ variable 41 | ``` 42 | 43 | Parantaa endpointin toimivuutta ennaltamaar 44 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 45 | tosiparemmilla looppi rectangulaareilla 46 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 47 | 48 | ```mermaid 49 | sequenceDiagram 50 | %% <-------------- keyword.control.mermaid 51 | participant S as S 52 | %%^^^^^^^^^^^ keyword.control.mermaid 53 | %% ^ variable 54 | %% ^^ keyword.control.mermaid 55 | %% ^ string 56 | ``` 57 | 58 | Parantaa endpointin toimivuutta ennaltamaar 59 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 60 | tosiparemmilla looppi rectangulaareilla 61 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% <--- meta.paragraph.markdown 62 | -------------------------------------------------------------------------------- /syntaxes/diagrams/quadrantChart.yaml: -------------------------------------------------------------------------------- 1 | - comment: Quadrant Chart 2 | begin: ^\s*(quadrantChart) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: !regex |- 10 | ^\s*(title) # title 11 | \s*(["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 12 | captures: 13 | '1': 14 | name: keyword.control.mermaid 15 | '2': 16 | name: string 17 | - comment: '(x|y-axis) (text) (-->)? (text)?' 18 | begin: !regex |- 19 | ^\s*([xy]-axis) # x|y-axis 20 | \s+((?:(?!-->)[$&%/#.,?!*+=\'\\\-\w\s])*) # text 21 | beginCaptures: 22 | '1': 23 | name: keyword.control.mermaid 24 | '2': 25 | name: string 26 | patterns: 27 | - comment: (-->) (text) 28 | match: !regex |- 29 | \s*(-->) # --> 30 | \s*([$&%/#.,?!*+=\'\\\-\w\s]*) # text 31 | captures: 32 | '1': 33 | name: keyword.control.mermaid 34 | '2': 35 | name: string 36 | end: '$' 37 | - match: !regex |- 38 | ^\s*(quadrant-[1234]) # quadrant-x 39 | \s*(["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 40 | captures: 41 | '1': 42 | name: keyword.control.mermaid 43 | '2': 44 | name: string 45 | - comment: (text)(:) ([)(decimal)(,) (decimal)(]) 46 | match: !regex |- 47 | \s*([$&%/#.,?!*+=\'\\\-\w\s]*) # text 48 | \s*(:) # : 49 | \s*(\[) # [ 50 | \s*(\d\.\d+) # decimal 51 | \s*(,) # , 52 | \s*(\d\.\d+) # decimal 53 | \s*(\]) # ] 54 | captures: 55 | '1': 56 | name: string 57 | '2': 58 | name: keyword.control.mermaid 59 | '3': 60 | name: keyword.control.mermaid 61 | '4': 62 | name: constant.numeric.decimal.mermaid 63 | '5': 64 | name: keyword.control.mermaid 65 | '6': 66 | name: constant.numeric.decimal.mermaid 67 | '7': 68 | name: keyword.control.mermaid 69 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 70 | -------------------------------------------------------------------------------- /syntaxes/diagrams/ganttDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: Gantt Diagram 2 | begin: ^\s*(gantt) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: !regex |- 10 | ^\s*(dateFormat)\s+ # dateFormat 11 | ([\w\-\.]+) # format 12 | captures: 13 | '1': 14 | name: keyword.control.mermaid 15 | '2': 16 | name: entity.name.function.mermaid 17 | - match: !regex |- 18 | ^\s*(axisFormat)\s+ # axisFormat 19 | ([\w\%\/\\\-\.]+) # format 20 | captures: 21 | '1': 22 | name: keyword.control.mermaid 23 | '2': 24 | name: entity.name.function.mermaid 25 | - match: !regex |- 26 | (tickInterval)\s+ # tickInterval 27 | (([1-9][0-9]*)(millisecond|second|minute|hour|day|week|month)) # format 28 | captures: 29 | '1': 30 | name: keyword.control.mermaid 31 | '2': 32 | name: string 33 | - match: !regex |- 34 | ^\s*(title)\s+ # title 35 | (\s*["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 36 | captures: 37 | '1': 38 | name: keyword.control.mermaid 39 | '2': 40 | name: string 41 | - match: !regex |- 42 | ^\s*(excludes)\s+ # excludes 43 | ((?:[\d\-,\s]+|monday|tuesday|wednesday|thursday|friday|saturday|sunday|weekends)+) # date or weekday 44 | captures: 45 | '1': 46 | name: keyword.control.mermaid 47 | '2': 48 | name: string 49 | - match: !regex |- 50 | ^\s+(todayMarker)\s+ # todayMarker 51 | (.*)$ # "off" or styles 52 | captures: 53 | '1': 54 | name: keyword.control.mermaid 55 | '2': 56 | name: string 57 | - match: !regex |- 58 | ^\s*(section)\s+ # section 59 | (\s*["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 60 | captures: 61 | '1': 62 | name: keyword.control.mermaid 63 | '2': 64 | name: string 65 | - begin: !regex |- 66 | ^\s(.*) # Task Text 67 | (:) # : 68 | beginCaptures: 69 | '1': 70 | name: string 71 | '2': 72 | name: keyword.control.mermaid 73 | patterns: 74 | - match: (crit|done|active|after) 75 | name: entity.name.function.mermaid 76 | - match: \%%.* 77 | name: comment 78 | end: '$' 79 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 80 | -------------------------------------------------------------------------------- /tests/diagrams/quadrantChart.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "quadrant chart test" 2 | 3 | quadrantChart 4 | %% <------------------ keyword.control.mermaid 5 | %% a comment 6 | %% ^^^^^^^^^^^^ comment 7 | title Reach and engagement of campaigns 8 | %% ^^^^^ keyword.control.mermaid 9 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 10 | x-axis Low Reach$&%/#.,?!*+='\- 11 | %% ^^^^^^ keyword.control.mermaid 12 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ string 13 | x-axis Low Reach --> High Reach 14 | %% ^^^^^^ keyword.control.mermaid 15 | %% ^^^^^^^^^ string 16 | %% ^^^ keyword.control.mermaid 17 | %% ^^^^^^^^^^ string 18 | y-axis Low Engagement 19 | %% ^^^^^^ keyword.control.mermaid 20 | %% ^^^^^^^^^^^^^^ string 21 | y-axis Low Engagement --> High Engagement 22 | %% ^^^^^^ keyword.control.mermaid 23 | %% ^^^^^^^^^^^^^^ string 24 | %% ^^^ keyword.control.mermaid 25 | %% ^^^^^^^^^^^^^^^ string 26 | quadrant-1 We should expand 27 | %% ^^^^^^^^^^ keyword.control.mermaid 28 | %% ^^^^^^^^^^^^^^^^ string 29 | quadrant-2 Need to promote 30 | %% ^^^^^^^^^^ keyword.control.mermaid 31 | %% ^^^^^^^^^^^^^^^ string 32 | quadrant-3 Re-evaluate 33 | %% ^^^^^^^^^^ keyword.control.mermaid 34 | %% ^^^^^^^^^^^ string 35 | quadrant-4 May be improved 36 | %% ^^^^^^^^^^ keyword.control.mermaid 37 | %% ^^^^^^^^^^^^^^^ string 38 | Campaign A: [0.3, 0.6] 39 | %% ^^^^^^^^^^ string 40 | %% ^ keyword.control.mermaid 41 | %% ^ keyword.control.mermaid 42 | %% ^^^ constant.numeric.decimal.mermaid 43 | %% ^ keyword.control.mermaid 44 | %% ^^^ constant.numeric.decimal.mermaid 45 | %% ^ keyword.control.mermaid 46 | Campaign B: [0.45, 0.23] 47 | %% ^^^^^^^^^^ string 48 | %% ^ keyword.control.mermaid 49 | %% ^ keyword.control.mermaid 50 | %% ^^^^ constant.numeric.decimal.mermaid 51 | %% ^ keyword.control.mermaid 52 | %% ^^^^ constant.numeric.decimal.mermaid 53 | %% ^ keyword.control.mermaid 54 | 55 | %% negative cases 56 | invalid title invalid 57 | %% ^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 58 | invalid x-axis text 59 | %% ^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 60 | invalid quadrant-1 text 61 | %% ^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mermaid-markdown-syntax-highlighting", 3 | "displayName": "Mermaid Markdown Syntax Highlighting", 4 | "description": "Markdown syntax support for the Mermaid charting language", 5 | "icon": "images/icon/iconPNG.png", 6 | "version": "1.7.6", 7 | "publisher": "bpruitt-goddard", 8 | "license": "MIT", 9 | "type": "module", 10 | "engines": { 11 | "vscode": "^1.19.0", 12 | "node": ">=22.0.0" 13 | }, 14 | "categories": [ 15 | "Other" 16 | ], 17 | "contributes": { 18 | "languages": [ 19 | { 20 | "id": "mermaid", 21 | "extensions": [ 22 | ".mmd", 23 | ".mermaid" 24 | ], 25 | "configuration": "./mermaid-language-configuration.json" 26 | } 27 | ], 28 | "grammars": [ 29 | { 30 | "language": "mermaid", 31 | "scopeName": "markdown.mermaid.codeblock", 32 | "path": "./out/mermaid.tmLanguage-markdown.json" 33 | }, 34 | { 35 | "scopeName": "markdown.mermaid.codeblock", 36 | "path": "./out/mermaid.tmLanguage-markdown.json", 37 | "injectTo": [ 38 | "text.html.markdown" 39 | ], 40 | "embeddedLanguages": { 41 | "meta.embedded.block.mermaid": "mermaid" 42 | } 43 | }, 44 | { 45 | "scopeName": "mdx.mermaid.codeblock", 46 | "path": "./out/mermaid.tmLanguage-mdx.json", 47 | "injectTo": [ 48 | "source.mdx" 49 | ], 50 | "embeddedLanguages": { 51 | "mdx.embedded.mermaid": "mermaid" 52 | } 53 | }, 54 | { 55 | "language": "mermaid", 56 | "scopeName": "source.mermaid", 57 | "path": "./out/mermaid.tmLanguage.json" 58 | } 59 | ] 60 | }, 61 | "bugs": { 62 | "url": "https://github.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/issues" 63 | }, 64 | "homepage": "https://github.com/bpruitt-goddard/vscode-mermaid-syntax-highlight/blob/master/README.md", 65 | "repository": { 66 | "type": "git", 67 | "url": "https://github.com/bpruitt-goddard/vscode-mermaid-syntax-highlight.git" 68 | }, 69 | "keywords": [ 70 | "mermaid" 71 | ], 72 | "scripts": { 73 | "convertYaml": "node build/ConvertYaml.mjs", 74 | "format:write": "prettier --write syntaxes", 75 | "test": "vscode-tmgrammar-test \"tests/**/*.test.{mermaid,md,mdx}\"", 76 | "vscode:prepublish": "npm run convertYaml" 77 | }, 78 | "devDependencies": { 79 | "fs-extra": "^11.2.0", 80 | "js-yaml": "^4.1.1", 81 | "prettier": "^3.3.3", 82 | "vscode-tmgrammar-test": "^0.1.3", 83 | "yaml-import": "^3.0.0" 84 | }, 85 | "__metadata": { 86 | "id": "08792992-bb56-41fb-b5dd-8551bbee0cb6", 87 | "publisherDisplayName": "Brian Pruitt-Goddard", 88 | "publisherId": "79536266-6400-41d0-b043-2af5390d2788" 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /syntaxes/diagrams/erDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: Entity Relationship Diagram 2 | begin: ^\s*(erDiagram) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: '(entity)' 10 | match: !regex |- 11 | ^\s*([\w-]+) # entity name 12 | \s*(\[)? # [ 13 | \s*((?:[\w-]+)|(?:"[\w\s-]+"))? # alias 14 | \s*(\])? # ] 15 | $ # end of line 16 | captures: 17 | '1': 18 | name: variable 19 | '2': 20 | name: keyword.control.mermaid 21 | '3': 22 | name: string 23 | '4': 24 | name: keyword.control.mermaid 25 | - comment: '(entity) {' 26 | begin: !regex |- 27 | \s*([\w-]+) # entity name 28 | \s*(\[)? # [ 29 | \s*((?:[\w-]+)|(?:"[\w\s-]+"))? # alias 30 | \s*(\])? # ] 31 | \s*({) # { 32 | beginCaptures: 33 | '1': 34 | name: variable 35 | '2': 36 | name: keyword.control.mermaid 37 | '3': 38 | name: string 39 | '4': 40 | name: keyword.control.mermaid 41 | '5': 42 | name: keyword.control.mermaid 43 | patterns: 44 | - comment: '(type) (name) (constraints)? ("comment")?' 45 | match: !regex |- 46 | \s*([\w-]+)\s+ # type 47 | ([\w-]+)\s+ # name 48 | ([PFU]K(?:,\s*[PFU]K){0,2})?\s* # key? 49 | ("[^"\r\n]*")?\s* # comment? 50 | captures: 51 | '1': 52 | name: storage.type.mermaid 53 | '2': 54 | name: variable 55 | '3': 56 | name: keyword.control.mermaid 57 | '4': 58 | name: string 59 | - match: \%%.* 60 | name: comment 61 | end: (}) 62 | endCaptures: 63 | '1': 64 | name: keyword.control.mermaid 65 | - comment: '(entity) (relationship) (entity) : (label)' 66 | match: !regex |- 67 | \s*([\w-]+)\s* # entity 68 | ((?:\|o|\|\||}o|}\||one or (?:zero|more|many)|zero or (?:one|more|many)|many\((?:0|1)\)|only one|0\+|1\+?) #relationship left 69 | (?:..|--) # relationship identification 70 | (?:o\||\|\||o{|\|{|one or (?:zero|more|many)|zero or (?:one|more|many)|many\((?:0|1)\)|only one|0\+|1\+?))\s* # relationship right 71 | ([\w-]+)\s* # entity 72 | (:)\s* # : 73 | ((?:"[\w\s]*")|(?:[\w-]+)) # label 74 | captures: 75 | '1': 76 | name: variable 77 | '2': 78 | name: keyword.control.mermaid 79 | '3': 80 | name: variable 81 | '4': 82 | name: keyword.control.mermaid 83 | '5': 84 | name: string 85 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 86 | -------------------------------------------------------------------------------- /syntaxes/diagrams/architecture.yaml: -------------------------------------------------------------------------------- 1 | - comment: Architecture Diagram 2 | begin: ^\s*(architecture-beta) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: '(group|service)(group id)(icon name)?(title)(in)?(parent)?' 10 | match: !regex |- 11 | \s*(group|service) # group | service 12 | \s+([\w-]+) # id 13 | \s*(\()? # ( 14 | ([\w\s-]+)? # logo option 15 | (:)? # : 16 | ([\w\s-]+)? # icon name 17 | (\))? # ) 18 | \s*(\[)? # [ 19 | ([\w\s-]+)? # title 20 | \s*(\])? # ] 21 | \s*(in)? # in 22 | \s*([\w-]+)? # parent 23 | captures: 24 | '1': 25 | name: keyword.control.mermaid 26 | '2': 27 | name: variable 28 | '3': 29 | name: punctuation.definition.typeparameters.begin.mermaid 30 | '4': 31 | name: string 32 | '5': 33 | name: keyword.control.mermaid 34 | '6': 35 | name: string 36 | '7': 37 | name: punctuation.definition.typeparameters.end.mermaid 38 | '8': 39 | name: punctuation.definition.typeparameters.begin.mermaid 40 | '9': 41 | name: string 42 | '10': 43 | name: punctuation.definition.typeparameters.end.mermaid 44 | '11': 45 | name: keyword.control.mermaid 46 | '12': 47 | name: variable 48 | - comment: '(service id)(group id)?:(T|B|L|R) ? (T|B|L|R):(service id)(group id)?' 49 | match: !regex |- 50 | \s*([\w-]+) # service id 51 | \s*(\{)? # { 52 | \s*(group)? # group 53 | (\})? # } 54 | \s*(:) # : 55 | \s*(T|B|L|R) # Direction 56 | \s+(?) # Arrow 57 | \s+(T|B|L|R) # Direction 58 | \s*(:) # : 59 | \s*([\w-]+) # service id 60 | \s*(\{)? # { 61 | \s*(group)? # group id 62 | (\})? # } 63 | captures: 64 | '1': 65 | name: variable 66 | '2': 67 | name: punctuation.definition.typeparameters.begin.mermaid 68 | '3': 69 | name: variable 70 | '4': 71 | name: punctuation.definition.typeparameters.end.mermaid 72 | '5': 73 | name: keyword.control.mermaid 74 | '6': 75 | name: entity.name.function.mermaid 76 | '7': 77 | name: keyword.control.mermaid 78 | '8': 79 | name: entity.name.function.mermaid 80 | '9': 81 | name: keyword.control.mermaid 82 | '10': 83 | name: variable 84 | '11': 85 | name: punctuation.definition.typeparameters.begin.mermaid 86 | '12': 87 | name: variable 88 | '13': 89 | name: punctuation.definition.typeparameters.end.mermaid 90 | - comment: '(junction)(junction id)(in)?(group)' 91 | match: !regex |- 92 | \s*(junction) # junction 93 | \s+([\w-]+) # id 94 | \s*(in)? # in 95 | \s*([\w-]+)? # group 96 | captures: 97 | '1': 98 | name: keyword.control.mermaid 99 | '2': 100 | name: variable 101 | '3': 102 | name: keyword.control.mermaid 103 | '4': 104 | name: variable 105 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 106 | -------------------------------------------------------------------------------- /syntaxes/diagrams/gitGraph.yaml: -------------------------------------------------------------------------------- 1 | - comment: Git Graph 2 | begin: ^\s*(gitGraph) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: commit 10 | begin: !regex |- 11 | ^\s*(commit) # commit 12 | beginCaptures: 13 | '1': 14 | name: keyword.control.mermaid 15 | patterns: 16 | - comment: '(id)(:) ("id")' 17 | match: !regex |- 18 | \s*(id) # id 19 | (:) # : 20 | \s?("[^"\n]*") # text 21 | captures: 22 | '1': 23 | name: keyword.control.mermaid 24 | '2': 25 | name: keyword.control.mermaid 26 | '3': 27 | name: string 28 | - comment: '(type)(:) (COMMIT_TYPE)' 29 | match: !regex |- 30 | \s*(type) # type 31 | (:) # : 32 | \s?(NORMAL|REVERSE|HIGHLIGHT) # commit_type 33 | captures: 34 | '1': 35 | name: keyword.control.mermaid 36 | '2': 37 | name: keyword.control.mermaid 38 | '3': 39 | name: entity.name.function.mermaid 40 | - comment: '(tag)(:) ("tag")' 41 | match: !regex |- 42 | \s*(tag) # tag 43 | (:) # : 44 | \s?("[\($&%\^/#.,?!;:*+=<>\'\\\-\w\s]*") # text 45 | captures: 46 | '1': 47 | name: keyword.control.mermaid 48 | '2': 49 | name: keyword.control.mermaid 50 | '3': 51 | name: string 52 | end: '$' 53 | - comment: '(checkout) (branch-name)' 54 | match: !regex |- 55 | ^\s*(checkout) # checkout 56 | \s*([^\s"]*) # branch-name 57 | captures: 58 | '1': 59 | name: keyword.control.mermaid 60 | '2': 61 | name: variable 62 | - comment: '(branch) (branch-name) (order)?(:) (number)' 63 | match: !regex |- 64 | ^\s*(branch) # branch 65 | \s*([^\s"]*) # branch-name 66 | \s*(?:(order)(:)\s?(\d+))? # (order)(:) (number) 67 | captures: 68 | '1': 69 | name: keyword.control.mermaid 70 | '2': 71 | name: variable 72 | '3': 73 | name: keyword.control.mermaid 74 | '4': 75 | name: keyword.control.mermaid 76 | '5': 77 | name: constant.numeric.decimal.mermaid 78 | - comment: '(merge) (branch-name) (tag: "tag-name")?' 79 | match: !regex |- 80 | ^\s*(merge) # merge 81 | \s*([^\s"]*) # branch-name 82 | \s*(?:(tag)(:)\s?("[^"\n]*"))? # (tag: "tag-name")? 83 | captures: 84 | '1': 85 | name: keyword.control.mermaid 86 | '2': 87 | name: variable 88 | '3': 89 | name: keyword.control.mermaid 90 | '4': 91 | name: keyword.control.mermaid 92 | '5': 93 | name: string 94 | - comment: '(cherry-pick) (id)(:)("commit-id")' 95 | match: !regex |- 96 | ^\s*(cherry-pick) # cherry-pick 97 | \s+(id) # id 98 | (:) # : 99 | \s*("[^"\n]*") # "commit-id" 100 | captures: 101 | '1': 102 | name: keyword.control.mermaid 103 | '2': 104 | name: keyword.control.mermaid 105 | '3': 106 | name: keyword.control.mermaid 107 | '4': 108 | name: string 109 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 110 | -------------------------------------------------------------------------------- /tests/diagrams/xychart.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "xy chart test" 2 | 3 | xychart-beta 4 | %%% <--- keyword.control.mermaid 5 | title Chess ELO rating over time 6 | %%^^^^^ keyword.control.mermaid 7 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ string 8 | 9 | x-axis Day 10 | %%^^^^^^ keyword.control.mermaid 11 | %% ^^^ string 12 | 13 | x-axis 1 --> 10 14 | %%^^^^^^ keyword.control.mermaid 15 | %% ^ constant.numeric.decimal.mermaid 16 | %% ^^^ keyword.control.mermaid 17 | %% ^^ constant.numeric.decimal.mermaid 18 | 19 | x-axis "Day" 1.0 --> 10.0 20 | %%^^^^^^ keyword.control.mermaid 21 | %% ^^^^^ string 22 | %% ^^^ constant.numeric.decimal.mermaid 23 | %% ^^^ keyword.control.mermaid 24 | %% ^^^^ constant.numeric.decimal.mermaid 25 | 26 | x-axis "Day" 1 --> 10 27 | %%^^^^^^ keyword.control.mermaid 28 | %% ^^^^^ string 29 | %% ^ constant.numeric.decimal.mermaid 30 | %% ^^^ keyword.control.mermaid 31 | %% ^^ constant.numeric.decimal.mermaid 32 | 33 | x-axis "Day of the month" 1 --> 10 34 | %%^^^^^^ keyword.control.mermaid 35 | %% ^^^^^^^^^^^^^^^^^^ string 36 | %% ^ constant.numeric.decimal.mermaid 37 | %% ^^^ keyword.control.mermaid 38 | %% ^^ constant.numeric.decimal.mermaid 39 | 40 | x-axis "Day of week" ["Mon"] 41 | %%^^^^^^ keyword.control.mermaid 42 | %% ^^^^^^^^^^^^^ string 43 | %% ^ keyword.control.mermaid 44 | %% ^^^^^ string 45 | %% ^ keyword.control.mermaid 46 | 47 | x-axis "Day of week" ["Mon", "Tue",Wed] 48 | %%^^^^^^ keyword.control.mermaid 49 | %% ^^^^^^^^^^^^^ string 50 | %% ^ keyword.control.mermaid 51 | %% ^^^^^ string 52 | %% ^ keyword.control.mermaid 53 | %% ^^^^^ string 54 | %% ^ keyword.control.mermaid 55 | %% ^^^ string 56 | %% ^ keyword.control.mermaid 57 | 58 | y-axis ELO 59 | %%^^^^^^ keyword.control.mermaid 60 | %% ^^^ string 61 | 62 | y-axis 1000 --> 2000 63 | %%^^^^^^ keyword.control.mermaid 64 | %% ^^^^ constant.numeric.decimal.mermaid 65 | %% ^^^ keyword.control.mermaid 66 | %% ^^^^ constant.numeric.decimal.mermaid 67 | 68 | y-axis "ELO" 1000 --> 2000 69 | %%^^^^^^ keyword.control.mermaid 70 | %% ^^^^^ string 71 | %% ^^^^ constant.numeric.decimal.mermaid 72 | %% ^^^ keyword.control.mermaid 73 | %% ^^^^ constant.numeric.decimal.mermaid 74 | 75 | line [1,-2,+3, 4] 76 | %%^^^^ keyword.control.mermaid 77 | %% ^ keyword.control.mermaid 78 | %% ^ constant.numeric.decimal.mermaid 79 | %% ^ keyword.control.mermaid 80 | %% ^^ constant.numeric.decimal.mermaid 81 | %% ^ keyword.control.mermaid 82 | %% ^^ constant.numeric.decimal.mermaid 83 | %% ^ keyword.control.mermaid 84 | %% ^ constant.numeric.decimal.mermaid 85 | %% ^ keyword.control.mermaid 86 | 87 | bar [1,-2,+3, 4] 88 | %%^^^ keyword.control.mermaid 89 | %% ^ keyword.control.mermaid 90 | %% ^ constant.numeric.decimal.mermaid 91 | %% ^ keyword.control.mermaid 92 | %% ^^ constant.numeric.decimal.mermaid 93 | %% ^ keyword.control.mermaid 94 | %% ^^ constant.numeric.decimal.mermaid 95 | %% ^ keyword.control.mermaid 96 | %% ^ constant.numeric.decimal.mermaid 97 | %% ^ keyword.control.mermaid 98 | 99 | %% negative cases 100 | invalid title invalid 101 | %%^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 102 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vscode-mermaid-syntax-highlight 2 | 3 | Syntax support for the [Mermaid charting language](https://github.com/knsv/mermaid) 4 | 5 | [![Version](https://img.shields.io/visual-studio-marketplace/v/bpruitt-goddard.mermaid-markdown-syntax-highlighting)](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) [![Installs](https://img.shields.io/visual-studio-marketplace/i/bpruitt-goddard.mermaid-markdown-syntax-highlighting)](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) [![Ratings](https://img.shields.io/visual-studio-marketplace/r/bpruitt-goddard.mermaid-markdown-syntax-highlighting)](https://marketplace.visualstudio.com/items?itemName=bpruitt-goddard.mermaid-markdown-syntax-highlighting) 6 | 7 | Supports both fenced markdown (see screenshots), and mmd files. 8 | 9 | ## Screenshots/Diagrams 10 | 11 | ### Graph 12 | 13 | Graph Screenshot 14 | 15 | ### Sequence 16 | 17 | Sequence Diagram Screenshot 18 | 19 | ### Gantt 20 | 21 | Gantt Diagram Screenshot 22 | 23 | ### Pie 24 | 25 | Pie Chart Screenshot 26 | 27 | ### Class Diagram 28 | 29 | Class Diagram Screenshot 30 | 31 | ### State Diagram 32 | 33 | State Diagram Screenshot 34 | 35 | ### Entity Relationship Diagrams 36 | 37 | Entity Relationship Diagram Screenshot 38 | 39 | ### Git Graph 40 | 41 | Git Graph Screenshot 42 | 43 | ### User Journey 44 | 45 | User Journey Screenshot 46 | 47 | ### Requirements Diagram 48 | 49 | Requirements Diagram Screenshot 50 | 51 | ### Quadrant Chart 52 | 53 | Quadrant Chart Screenshot 54 | 55 | ### Architecture Diagram 56 | 57 | Architecture Diagram Screenshot 58 | 59 | ### Mindmap Diagram 60 | 61 | Mindmap Diagram Screenshot 62 | 63 | ### ADO Support 64 | 65 | Supports highlighting in Azure Dev Ops (ADO) colon syntax: 66 | 67 | ADO Syntax Screenshot 68 | 69 | ## Initial Idea 70 | 71 | Based on the starter language support repo [here](https://github.com/mjbvz/vscode-fenced-code-block-grammar-injection-example), and initially created based on the Atom language support [here](https://github.com/ytisf/language-mermaid). 72 | 73 | ## Contributing 74 | 75 | For information on how to build/test/contribute, see the [Contributing Guide](CONTRIBUTING.md). 76 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [v1.7.6] 4 | 5 | - Add mindmap diagram support 6 | 7 | ## [v1.7.5] 8 | 9 | - Support whitespace in markdown code block header before Mermaid language specifier 10 | - Support unindented entities (ER) 11 | - Allow more characters in entity attribute comment (ER) 12 | 13 | ## [v1.7.4] 14 | 15 | - Support multiple constraints (ER) 16 | 17 | ## [v1.7.3] 18 | 19 | State diagram: 20 | 21 | - Add support for direction 22 | - Add support for symbols in state description 23 | - Adjust requirements for spaces in state and note declarations and links 24 | 25 | ## [v1.7.2] 26 | 27 | - Add support for a dotted link syntax variation without leading dash 28 | 29 | ## [v1.7.1] 30 | 31 | - Add support for extended node shapes (graph/flowchart) 32 | 33 | ## [v1.7.0] 34 | 35 | - Add architecture diagram support 36 | 37 | ## [v1.6.7] 38 | 39 | - Add support for ER diagram named aliases 40 | 41 | ## [v1.6.6] 42 | 43 | - Add support for Mermaid code blocks in MDX 44 | 45 | ## [v1.6.5] 46 | 47 | - Add xy chart support 48 | 49 | ## [v1.6.4] 50 | 51 | - Make all keywords case-insensitive 52 | - Fix graph subgraph direction 53 | 54 | ## [v1.6.3] 55 | 56 | - Add quadrant chart support 57 | 58 | ## [v1.6.2] 59 | 60 | - Add requirement diagram support 61 | 62 | ## [v1.6.1] 63 | 64 | - Add sequence diagram box support 65 | - Fix case insensitive code block 66 | - Add gannt diagram tickInterval support 67 | - Fix graph text with html tags 68 | 69 | ## [v1.6.0] 70 | 71 | - Add support for pandoc code blocks syntax 72 | - Improve ER diagram relationship alias support 73 | - Improve ER diagram whitespace sensitivity 74 | - Add Class diagram abstract static method support 75 | 76 | ## [v1.5.3] 77 | 78 | - Fix sequence actors matching ending parentheses 79 | - Add sequence critical 80 | 81 | ## [v1.5.2] 82 | 83 | - Add gantt excludes and todaymarker 84 | - Improve gantt dateformat and axisformat support 85 | 86 | ## [v1.5.1] 87 | 88 | - Add fancy extension icons 89 | - Fix ADO highlighting not closing properly 90 | - Add chinese character support to graph subgraphs 91 | 92 | ## [v1.5.0] 93 | 94 | - Add user journey support 95 | 96 | ## [v1.4.2] 97 | 98 | - Add graph multiline entity support 99 | 100 | ## [v1.4.1] 101 | 102 | - Add missing graph entity shapes 103 | 104 | ## [v1.4.0] 105 | 106 | - Add git graph support 107 | 108 | ## [v1.3.4] 109 | 110 | - Fix sequence diagram title whitespace 111 | - Fix sequence diagram actor/participant whitespace 112 | 113 | ## [v1.3.3] 114 | 115 | - Add sequence diagram actor support 116 | 117 | ## [v1.3.2] 118 | 119 | - Add graph diagram double arrow support 120 | - Add class diagram multiple parameter support 121 | 122 | ## [v1.3.1] 123 | 124 | - Add classDiagram reversed arrow support 125 | 126 | ## [v1.3.0] 127 | 128 | - Add entity relationship diagram support 129 | 130 | ## [v1.2.4] 131 | 132 | - Add ADO syntax support 133 | 134 | ## [v1.2.3] 135 | 136 | - Fix bug preventing .mmd files from being properly highlighted 137 | - Add support in graphs for nodes with id only 138 | 139 | ## [v1.2.2] 140 | 141 | - Fix bug in new prepublish build step causing extension to break 142 | 143 | ## [v1.2.1] 144 | 145 | - Update sequence diagram support with: 146 | - Async arrows 147 | - Autonumber 148 | - Par blocks 149 | - Rect (color) blocks 150 | 151 | ## [v1.2.0] 152 | 153 | - Add state diagram support 154 | 155 | ## [v1.1.0] 156 | 157 | - Add class diagram support 158 | 159 | ## [v1.0.5] 160 | 161 | - Add basic flowchart support 162 | 163 | ## [v1.0.4] 164 | 165 | - Fix sequence diagram entity text highlighting 166 | 167 | ## [v1.0.3] 168 | 169 | - Fix sequence diagram participant label highlighting 170 | 171 | ## [v1.0.2] 172 | 173 | - Add pie chart support 174 | 175 | ## [v1.0.1] 176 | 177 | - Allow more punctuation in graph and gantt text 178 | 179 | ## [v1.0.0] 180 | 181 | - Added gantt support, completing support for all 3 graph types 182 | 183 | ## [v0.0.2] 184 | 185 | - Add support for complex graph cases 186 | - Add Mermaid language and support for .mmd files 187 | 188 | ## [v0.0.1] 189 | 190 | - Initial release with flowchart/graph and sequence diagram support 191 | -------------------------------------------------------------------------------- /syntaxes/diagrams/sequenceDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: Sequence Diagram 2 | begin: ^\s*(sequenceDiagram) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: (\%%|#).* 8 | name: comment 9 | - comment: '(title)(title text)' 10 | match: !regex |- 11 | (title)\s*(:)?\s+ # title 12 | (\s*["\(\)$&%\^/#.,?!:*+=<>\'\\\-\w\s]*) # text 13 | captures: 14 | '1': 15 | name: keyword.control.mermaid 16 | '2': 17 | name: keyword.control.mermaid 18 | '3': 19 | name: string 20 | - comment: '(participant)(Actor)(as)?(Label)?' 21 | match: !regex |- 22 | \s*(participant|actor) # participant 23 | \s+((?:(?! as )["\(\)$&%\^/#.?!*=<>\'\\\w\s])+) # Actor 24 | \s*(as)? # as? 25 | \s(["\(\)$&%\^/#.,?!*=<>\'\\\w\s]+)? # Label? 26 | captures: 27 | '1': 28 | name: keyword.control.mermaid 29 | '2': 30 | name: variable 31 | '3': 32 | name: keyword.control.mermaid 33 | '4': 34 | name: string 35 | - comment: '(activate/deactivate)(Actor)' 36 | match: !regex |- 37 | \s*((?:de)?activate) # Activate/Deactivate 38 | \s+(\b["()$&%^/#.?!*=<>'\\\w\s]+\b\)?\s*) # Actor 39 | captures: 40 | '1': 41 | name: keyword.control.mermaid 42 | '2': 43 | name: variable 44 | - comment: '(Note)(direction)(Actor)(,)?(Actor)?(:)(Message)' 45 | match: !regex |- 46 | \s*(Note) # Note 47 | \s+((?:left|right)\sof|over) # Direction 48 | \s+(\b["()$&%^/#.?!*=<>'\\\w\s]+\b\)?\s*) # Actor 49 | (,)? # ,? 50 | (\b["()$&%^/#.?!*=<>'\\\w\s]+\b\)?\s*)? # Actor 51 | (:) # : 52 | (?:\s+([^;#]*))? # Message 53 | captures: 54 | '1': 55 | name: keyword.control.mermaid 56 | '2': 57 | name: entity.name.function.mermaid 58 | '3': 59 | name: variable 60 | '4': 61 | name: keyword.control.mermaid 62 | '5': 63 | name: variable 64 | '6': 65 | name: keyword.control.mermaid 66 | '7': 67 | name: string 68 | - comment: '(loop)(loop text)' 69 | match: !regex |- 70 | \s*(loop) # loop 71 | (?:\s+([^;#]*))? # Loop Text 72 | captures: 73 | '1': 74 | name: keyword.control.mermaid 75 | '2': 76 | name: string 77 | - comment: '(end)' 78 | match: \s*(end) 79 | captures: 80 | '1': 81 | name: keyword.control.mermaid 82 | - comment: '(alt/else/option/par/and/autonumber/critical/opt)(text)' 83 | match: !regex |- 84 | \s*(alt|else|option|par|and|rect|autonumber|critical|opt) # keyword 85 | (?:\s+([^#;]*))?$ # text? 86 | captures: 87 | '1': 88 | name: keyword.control.mermaid 89 | '2': 90 | name: string 91 | - comment: '(Actor)(Arrow)(Actor)(:)(Message)' 92 | match: !regex |- 93 | \s* 94 | (\b["()$&%^/#.?!*=<>'\\\w\s]+\b\)?) # Actor 95 | \s* 96 | (-?-(?:\>|x|\))\>?[+-]?) # Arrow 97 | \s* 98 | (["()$&%^/#.?!*=<>'\\\w\s]+\b\)?) # Actor 99 | \s* 100 | (:) # : 101 | \s* 102 | ([^;#]*) # Message 103 | captures: 104 | '1': 105 | name: variable 106 | '2': 107 | name: keyword.control.mermaid 108 | '3': 109 | name: variable 110 | '4': 111 | name: keyword.control.mermaid 112 | '5': 113 | name: string 114 | - comment: '(box transparent text)' 115 | match: !regex |- 116 | \s*(box) # box 117 | \s+(transparent) # transparent box background 118 | (?:\s+([^;#]*))? # Box Text 119 | captures: 120 | '1': 121 | name: keyword.control.mermaid 122 | '2': 123 | name: entity.name.function.mermaid 124 | '3': 125 | name: string 126 | - comment: '(box text)' 127 | match: !regex |- 128 | \s*(box) # box 129 | (?:\s+([^;#]*))? # Box Text 130 | captures: 131 | '1': 132 | name: keyword.control.mermaid 133 | '2': 134 | name: string 135 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 136 | -------------------------------------------------------------------------------- /tests/diagrams/gitGraph.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "git graph test" 2 | 3 | gitGraph 4 | %%%%%%%% <--- keyword.control.mermaid 5 | %% comment 6 | %%^^^^^^^^^^ comment 7 | commit 8 | %%^^^^^^ keyword.control.mermaid 9 | commit id:"Normal" 10 | %%^^^^^^ keyword.control.mermaid 11 | %% ^^ keyword.control.mermaid 12 | %% ^ keyword.control.mermaid 13 | %% ^^^^^^^^ string 14 | commit type: NORMAL 15 | %%^^^^^^ keyword.control.mermaid 16 | %% ^^^^ keyword.control.mermaid 17 | %% ^ keyword.control.mermaid 18 | %% ^^^^^^ entity.name.function.mermaid 19 | commit type: HIGHLIGHT 20 | %%^^^^^^ keyword.control.mermaid 21 | %% ^^^^ keyword.control.mermaid 22 | %% ^ keyword.control.mermaid 23 | %% ^^^^^^^^^ entity.name.function.mermaid 24 | commit type: REVERSE 25 | %%^^^^^^ keyword.control.mermaid 26 | %% ^^^^ keyword.control.mermaid 27 | %% ^ keyword.control.mermaid 28 | %% ^^^^^^^ entity.name.function.mermaid 29 | commit id: "Reverse" type: REVERSE 30 | %%^^^^^^ keyword.control.mermaid 31 | %% ^^ keyword.control.mermaid 32 | %% ^ keyword.control.mermaid 33 | %% ^^^^^^^^^ string 34 | %% ^^^^ keyword.control.mermaid 35 | %% ^ keyword.control.mermaid 36 | %% ^^^^^^^ entity.name.function.mermaid 37 | commit id: "feat(api): ..." 38 | %%^^^^^^ keyword.control.mermaid 39 | %% ^^ keyword.control.mermaid 40 | %% ^ keyword.control.mermaid 41 | %% ^^^^^^^^^^^^^^^^ string 42 | commit type: REVERSE id: "Re-order type and id" 43 | %%^^^^^^ keyword.control.mermaid 44 | %% ^^^^ keyword.control.mermaid 45 | %% ^ keyword.control.mermaid 46 | %% ^^^^^^^ entity.name.function.mermaid 47 | %% ^^ keyword.control.mermaid 48 | %% ^ keyword.control.mermaid 49 | %% ^^^^^^^^^^^^^^^^^^^^^^ string 50 | commit tag: "v1.0.0" 51 | %%^^^^^^ keyword.control.mermaid 52 | %% ^^^ keyword.control.mermaid 53 | %% ^ keyword.control.mermaid 54 | %% ^^^^^^^^ string 55 | commit tag: "v1.1.0" type: REVERSE id: "tag and type and id" 56 | %%^^^^^^ keyword.control.mermaid 57 | %% ^^^ keyword.control.mermaid 58 | %% ^ keyword.control.mermaid 59 | %% ^^^^^^^^ string 60 | %% ^^^^ keyword.control.mermaid 61 | %% ^ keyword.control.mermaid 62 | %% ^^^^^^^ entity.name.function.mermaid 63 | %% ^^ keyword.control.mermaid 64 | %% ^ keyword.control.mermaid 65 | %% ^^^^^^^^^^^^^^^^^^^^^^ string 66 | checkout master 67 | %%^^^^^^^^ keyword.control.mermaid 68 | %% ^^^^^^ variable 69 | checkout branch-name 70 | %%^^^^^^^^ keyword.control.mermaid 71 | %% ^^^^^^^^^^^ variable 72 | branch new-branch 73 | %%^^^^^^ keyword.control.mermaid 74 | %% ^^^^^^^^^^ variable 75 | branch branch-3 order: 1 76 | %%^^^^^^ keyword.control.mermaid 77 | %% ^^^^^^^^ variable 78 | %% ^^^^^ keyword.control.mermaid 79 | %% ^ keyword.control.mermaid 80 | %% ^ constant.numeric.decimal.mermaid 81 | merge merge-branch 82 | %%^^^^^ keyword.control.mermaid 83 | %% ^^^^^^^^^^^^ variable 84 | merge merge-branch tag:"MY JUNCTION" 85 | %%^^^^^ keyword.control.mermaid 86 | %% ^^^^^^^^^^^^ variable 87 | %% ^^^ keyword.control.mermaid 88 | %% ^ keyword.control.mermaid 89 | %% ^^^^^^^^^^^^^ string 90 | cherry-pick id:"Normal" 91 | %%^^^^^^^^^^^ keyword.control.mermaid 92 | %% ^^ keyword.control.mermaid 93 | %% ^ keyword.control.mermaid 94 | %% ^^^^^^^^ string 95 | 96 | %% negative cases 97 | invalid_commit 98 | %%^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 99 | invalid_checkout 100 | %%^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 101 | invalid_branch 102 | %%^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 103 | invalid_merge 104 | %%^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 105 | invalid_cherry-pick id:"anId" 106 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 107 | -------------------------------------------------------------------------------- /syntaxes/diagrams/requirementDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: Requirement Diagram 2 | begin: ^\s*(requirementDiagram) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: (requirement) (name) ({) 10 | begin: !regex |- 11 | ^\s*((?:functional|interface|performance|physical)?requirement|designConstraint) # requirement 12 | \s*(["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # name 13 | \s*({) # } 14 | beginCaptures: 15 | '1': 16 | name: keyword.control.mermaid 17 | '2': 18 | name: variable 19 | '3': 20 | name: keyword.control.mermaid 21 | patterns: 22 | - comment: (id:) (variable id) 23 | match: !regex |- 24 | \s*(id:) # id: 25 | \s*([$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # Variable id 26 | captures: 27 | '1': 28 | name: keyword.control.mermaid 29 | '2': 30 | name: variable 31 | - comment: (text:) (text string) 32 | match: !regex |- 33 | \s*(text:) # text: 34 | \s*([$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # Text string 35 | captures: 36 | '1': 37 | name: keyword.control.mermaid 38 | '2': 39 | name: string 40 | - comment: (risk:) (risk option) 41 | match: !regex |- 42 | \s*(risk:) # risk: 43 | \s*(low|medium|high)\s*$ # risk option 44 | captures: 45 | '1': 46 | name: keyword.control.mermaid 47 | '2': 48 | name: entity.name.function.mermaid 49 | - comment: (verifyMethod)(:) (method) 50 | match: !regex |- 51 | \s*(verifymethod:) # verifyMethod: 52 | \s*(analysis|inspection|test|demonstration)\s*$ # risk option 53 | captures: 54 | '1': 55 | name: keyword.control.mermaid 56 | '2': 57 | name: entity.name.function.mermaid 58 | end: !regex |- 59 | \s*(}) # end bracket 60 | endCaptures: 61 | '1': 62 | name: keyword.control.mermaid 63 | - comment: (element) (name) ({) 64 | begin: !regex |- 65 | ^\s*(element) # element 66 | \s*(["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # name 67 | \s*({) # } 68 | beginCaptures: 69 | '1': 70 | name: keyword.control.mermaid 71 | '2': 72 | name: variable 73 | '3': 74 | name: keyword.control.mermaid 75 | patterns: 76 | - comment: (type:) (user type) 77 | match: !regex |- 78 | \s*(type:) # id: 79 | \s*(["$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # user type 80 | captures: 81 | '1': 82 | name: keyword.control.mermaid 83 | '2': 84 | name: variable 85 | - comment: (docref:) (user ref) 86 | match: !regex |- 87 | \s*(docref:) # docref: 88 | \s*([$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # user ref 89 | captures: 90 | '1': 91 | name: keyword.control.mermaid 92 | '2': 93 | name: variable 94 | end: !regex |- 95 | \s*(}) # end bracket 96 | endCaptures: 97 | '1': 98 | name: keyword.control.mermaid 99 | - comment: (source) (-) (type) (->) (destination) 100 | match: !regex |- 101 | ^\s*([\w]+) # source 102 | \s*(-) # - 103 | \s*(contains|copies|derives|satisfies|verifies|refines|traces) # type 104 | \s*(->) # -> 105 | \s*([\w]+)\s*$ # destination 106 | captures: 107 | '1': 108 | name: variable 109 | '2': 110 | name: keyword.control.mermaid 111 | '3': 112 | name: keyword.control.mermaid 113 | '4': 114 | name: keyword.control.mermaid 115 | '5': 116 | name: variable 117 | - comment: (destination) (<-) (type) (-) (source) 118 | match: !regex |- 119 | ^\s*([\w]+) # destination 120 | \s*(<-) # <- 121 | \s*(contains|copies|derives|satisfies|verifies|refines|traces) # type 122 | \s*(-) # - 123 | \s*([\w]+)\s*$ # source 124 | captures: 125 | '1': 126 | name: variable 127 | '2': 128 | name: keyword.control.mermaid 129 | '3': 130 | name: keyword.control.mermaid 131 | '4': 132 | name: keyword.control.mermaid 133 | '5': 134 | name: variable 135 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 136 | -------------------------------------------------------------------------------- /syntaxes/diagrams/xyChart.yaml: -------------------------------------------------------------------------------- 1 | - comment: XY Chart 2 | begin: ^\s*(xychart(?:-beta)?(?:\s+horizontal)?) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: !regex |- 10 | ^\s*(title)\s+ # title 11 | (\s*["\(\)$&%\^/#.,?!;:*+=<>\'\\\-\w\s]*) # text 12 | captures: 13 | '1': 14 | name: keyword.control.mermaid 15 | '2': 16 | name: string 17 | - comment: (x-axis) 18 | begin: !regex |- 19 | ^\s*(x-axis) # x-axis 20 | beginCaptures: 21 | '1': 22 | name: keyword.control.mermaid 23 | patterns: 24 | - comment: (decimal) (-->) (decimal) 25 | match: !regex |- 26 | \s*([-+]?\d+\.?\d*) # decimal 27 | \s*(-->) # --> 28 | \s*([-+]?\d+\.?\d*) # decimal 29 | captures: 30 | '1': 31 | name: constant.numeric.decimal.mermaid 32 | '2': 33 | name: keyword.control.mermaid 34 | '3': 35 | name: constant.numeric.decimal.mermaid 36 | - comment: ("text") 37 | match: !regex |- 38 | \s+("[\($&%\^/#.,?!;:*+=<>\'\\\-\w\s]*") # "text" 39 | captures: 40 | '1': 41 | name: string 42 | - comment: (text) 43 | match: !regex |- 44 | \s+([\($&%\^/#.,?!;:*+=<>\'\\\-\w]*) # text 45 | captures: 46 | '1': 47 | name: string 48 | - comment: ([)(text)(,)(text)*(]) 49 | begin: \s*(\[) # [ 50 | beginCaptures: 51 | '1': 52 | name: keyword.control.mermaid 53 | patterns: 54 | - comment: (decimal) 55 | match: !regex |- 56 | \s*([-+]?\d+\.?\d*) # decimal 57 | captures: 58 | '1': 59 | name: constant.numeric.decimal.mermaid 60 | - comment: ("text") 61 | match: !regex |- 62 | \s*("[\($&%\^/#.,?!;:*+=<>\'\\\-\w\s]*") # "text" 63 | captures: 64 | '1': 65 | name: string 66 | - comment: (text) 67 | match: !regex |- 68 | \s*([\($&%\^/#.?!;:*+=<>\'\\\-\w\s]+) # text 69 | captures: 70 | '1': 71 | name: string 72 | - comment: (,) 73 | match: !regex |- 74 | \s*(,) # , 75 | captures: 76 | '1': 77 | name: keyword.control.mermaid 78 | end: \s*(\]) # ] 79 | endCaptures: 80 | '1': 81 | name: keyword.control.mermaid 82 | end: '$' 83 | - comment: (y-axis) 84 | begin: !regex |- 85 | ^\s*(y-axis) # y-axis 86 | beginCaptures: 87 | '1': 88 | name: keyword.control.mermaid 89 | patterns: 90 | - comment: (decimal) (-->) (decimal) 91 | match: !regex |- 92 | \s*([-+]?\d+\.?\d*) # decimal 93 | \s*(-->) # --> 94 | \s*([-+]?\d+\.?\d*) # decimal 95 | captures: 96 | '1': 97 | name: constant.numeric.decimal.mermaid 98 | '2': 99 | name: keyword.control.mermaid 100 | '3': 101 | name: constant.numeric.decimal.mermaid 102 | - comment: ("text") 103 | match: !regex |- 104 | \s+("[\($&%\^/#.,?!;:*+=<>\'\\\-\w\s]*") # "text" 105 | captures: 106 | '1': 107 | name: string 108 | - comment: (text) 109 | match: !regex |- 110 | \s+([\($&%\^/#.,?!;:*+=<>\'\\\-\w]*) # text 111 | captures: 112 | '1': 113 | name: string 114 | end: '$' 115 | - comment: (line|bar) ([)(decimal)+(]) 116 | begin: !regex |- 117 | ^\s*(line|bar) # line|bar 118 | \s*(\[) # [ 119 | beginCaptures: 120 | '1': 121 | name: keyword.control.mermaid 122 | '2': 123 | name: keyword.control.mermaid 124 | patterns: 125 | - comment: (decimal) 126 | match: !regex |- 127 | \s*([-+]?\d+\.?\d*) # decimal 128 | captures: 129 | '1': 130 | name: constant.numeric.decimal.mermaid 131 | - comment: (,) 132 | match: !regex |- 133 | \s*(,) # , 134 | captures: 135 | '1': 136 | name: keyword.control.mermaid 137 | end: \s*(\]) # ] 138 | endCaptures: 139 | '1': 140 | name: keyword.control.mermaid 141 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 142 | -------------------------------------------------------------------------------- /syntaxes/diagrams/stateDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: State Diagram 2 | begin: ^\s*(stateDiagram(?:-v2)?) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - match: ^(?i)\s*(direction)\s+(BT|RL|TB|LR) 10 | captures: 11 | '1': 12 | name: keyword.control.mermaid 13 | '2': 14 | name: entity.name.function.mermaid 15 | - comment: '}' 16 | match: \s+(})\s+ 17 | captures: 18 | '1': 19 | name: keyword.control.mermaid 20 | - comment: '--' 21 | match: \s+(--)\s+ 22 | captures: 23 | '1': 24 | name: keyword.control.mermaid 25 | - comment: '(state)' 26 | match: ^\s*([\w-]+)$ 27 | name: variable 28 | - comment: '(state) : (description)' 29 | match: !regex |- 30 | ([\w-]+) # state name 31 | \s*(:) # : 32 | \s*(\s*[^:]+) # description 33 | captures: 34 | '1': 35 | name: variable 36 | '2': 37 | name: keyword.control.mermaid 38 | '3': 39 | name: string 40 | - comment: 'state' 41 | begin: !regex |- 42 | ^\s*(state)\s+ # state 43 | beginCaptures: 44 | '1': 45 | name: keyword.control.mermaid 46 | patterns: 47 | - comment: '"(description)" as (state) ({)' 48 | match: !regex |- 49 | \s*("[^"]+") # description 50 | \s*(as) # as 51 | \s+([\w-]+) # state name 52 | \s*({)? # { 53 | captures: 54 | '1': 55 | name: string 56 | '2': 57 | name: keyword.control.mermaid 58 | '3': 59 | name: variable 60 | '4': 61 | name: keyword.control.mermaid 62 | - comment: '(state name) ({)' 63 | match: !regex |- 64 | \s*([\w-]+) # state name 65 | \s+({) # { 66 | captures: 67 | '1': 68 | name: variable 69 | '2': 70 | name: keyword.control.mermaid 71 | - comment: '(state name) <>' 72 | match: !regex |- 73 | \s*([\w-]+) # state name 74 | \s+(<<(?:fork|join)>>) # <> 75 | captures: 76 | '1': 77 | name: variable 78 | '2': 79 | name: keyword.control.mermaid 80 | end: '$' 81 | - comment: '(state) -->' 82 | begin: !regex |- 83 | ([\w-]+) # state name 84 | \s*(-->) # --> 85 | beginCaptures: 86 | '1': 87 | name: variable 88 | '2': 89 | name: keyword.control.mermaid 90 | patterns: 91 | - comment: '(state) (:)? (transition text)?' 92 | match: !regex |- 93 | \s*([\w-]+) # state name 94 | \s*(:)? # : 95 | \s*([^\n:]+)? # transition text 96 | captures: 97 | '1': 98 | name: variable 99 | '2': 100 | name: keyword.control.mermaid 101 | '3': 102 | name: string 103 | - comment: '[*] (:)? (transition text)?' 104 | match: !regex |- 105 | (\[\*\]) # [*] 106 | \s*(:)? # : 107 | \s*([^\n:]+)? # transition text 108 | captures: 109 | '1': 110 | name: keyword.control.mermaid 111 | '2': 112 | name: keyword.control.mermaid 113 | '3': 114 | name: string 115 | end: $ 116 | - comment: '[*] --> (state) (:)? (transition text)?' 117 | match: !regex |- 118 | (\[\*\]) # [*] 119 | \s*(-->) # --> 120 | \s*([\w-]+) # state name 121 | \s*(:)? # : 122 | \s*([^\n:]+)? # transition text 123 | captures: 124 | '1': 125 | name: keyword.control.mermaid 126 | '2': 127 | name: keyword.control.mermaid 128 | '3': 129 | name: variable 130 | '4': 131 | name: keyword.control.mermaid 132 | '5': 133 | name: string 134 | - comment: 'note left|right of (state name)' 135 | match: !regex |- 136 | ^\s*(note (?:left|right) of) # note left|right of 137 | \s+([\w-]+) # state name 138 | \s*(:) # : 139 | \s*([^\n:]+) # note text 140 | captures: 141 | '1': 142 | name: keyword.control.mermaid 143 | '2': 144 | name: variable 145 | '3': 146 | name: keyword.control.mermaid 147 | '4': 148 | name: string 149 | - comment: 'note left|right of (state name) (note text) end note' 150 | begin: !regex |- 151 | ^\s*(note (?:left|right) of) # note left|right of 152 | \s+([\w-]+)(.|\n) # state name 153 | beginCaptures: 154 | '1': 155 | name: keyword.control.mermaid 156 | '2': 157 | name: variable 158 | contentName: string 159 | end: !regex |- 160 | (end note) 161 | endCaptures: 162 | '1': 163 | name: keyword.control.mermaid 164 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 165 | -------------------------------------------------------------------------------- /tests/diagrams/architecture.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "architecture diagram test" 2 | 3 | architecture-beta 4 | %% <------------ keyword.control.mermaid 5 | %% Group 6 | group public_api(cloud)[Public API] 7 | %%^^^^^keyword.control.mermaid 8 | %% ^^^^^^^^^^variable 9 | %% ^punctuation.definition.typeparameters.begin.mermaid 10 | %% ^^^^^string 11 | %% ^punctuation.definition.typeparameters.end.mermaid 12 | %% ^punctuation.definition.typeparameters.begin.mermaid 13 | %% ^^^^^^^^^^string 14 | %% ^punctuation.definition.typeparameters.end.mermaid 15 | 16 | %% Group without icon and title 17 | group private_api 18 | %%^^^^^keyword.control.mermaid 19 | %% ^^^^^^^^^^^variable 20 | 21 | %% Group in Other Group 22 | group private_api(cloud)[Private API] in public_api 23 | %%^^^^^keyword.control.mermaid 24 | %% ^^^^^^^^^^^variable 25 | %% ^punctuation.definition.typeparameters.begin.mermaid 26 | %% ^^^^^string 27 | %% ^punctuation.definition.typeparameters.end.mermaid 28 | %% ^punctuation.definition.typeparameters.begin.mermaid 29 | %% ^^^^^^^^^^^string 30 | %% ^punctuation.definition.typeparameters.end.mermaid 31 | %% ^^keyword.control.mermaid 32 | %% ^^^^^^^^^^variable 33 | 34 | %% Group with Logos 35 | group api(logos:aws-lambda)[API] 36 | %%^^^^^keyword.control.mermaid 37 | %% ^^^variable 38 | %% ^punctuation.definition.typeparameters.begin.mermaid 39 | %% ^^^^^string 40 | %% ^keyword.control.mermaid 41 | %% ^^^^^^^^^^string 42 | %% ^punctuation.definition.typeparameters.end.mermaid 43 | %% ^punctuation.definition.typeparameters.begin.mermaid 44 | %% ^^^string 45 | %% ^punctuation.definition.typeparameters.end.mermaid 46 | 47 | %% Service 48 | service disk(disk)[Storage] 49 | %%^^^^^^^keyword.control.mermaid 50 | %% ^^^^variable 51 | %% ^punctuation.definition.typeparameters.begin.mermaid 52 | %% ^^^^string 53 | %% ^punctuation.definition.typeparameters.end.mermaid 54 | %% ^punctuation.definition.typeparameters.begin.mermaid 55 | %% ^^^^^^^string 56 | %% ^punctuation.definition.typeparameters.end.mermaid 57 | 58 | %% Service without icon and title 59 | service server 60 | %%^^^^^^^keyword.control.mermaid 61 | %% ^^^^^^variable 62 | 63 | %% Service with Logos 64 | service server(logos:aws-ec2)[EC2 Instance] 65 | %%^^^^^^^keyword.control.mermaid 66 | %% ^^^^^^variable 67 | %% ^punctuation.definition.typeparameters.begin.mermaid 68 | %% ^^^^^string 69 | %% ^keyword.control.mermaid 70 | %% ^^^^^^^string 71 | %% ^punctuation.definition.typeparameters.end.mermaid 72 | %% ^punctuation.definition.typeparameters.begin.mermaid 73 | %% ^^^^^^^^^^^^string 74 | %% ^punctuation.definition.typeparameters.end.mermaid 75 | 76 | %% Service in Group 77 | service database(db)[Database] in private_api 78 | %%^^^^^^^keyword.control.mermaid 79 | %% ^^^^^^^^variable 80 | %% ^punctuation.definition.typeparameters.begin.mermaid 81 | %% ^^string 82 | %% ^punctuation.definition.typeparameters.end.mermaid 83 | %% ^punctuation.definition.typeparameters.begin.mermaid 84 | %% ^^^^^^^^string 85 | %% ^punctuation.definition.typeparameters.end.mermaid 86 | %% ^^keyword.control.mermaid 87 | %% ^^^^^^^^^^^variable 88 | 89 | %% Simple Edge 90 | db:L -- R:server 91 | %%^^variable 92 | %% ^keyword.control.mermaid 93 | %% ^entity.name.function.mermaid 94 | %% ^^keyword.control.mermaid 95 | %% ^entity.name.function.mermaid 96 | %% ^keyword.control.mermaid 97 | %% ^^^^^^variable 98 | 99 | %% Edge with Arrows 100 | private_api:L <--> R:public_api 101 | %%^^^^^^^^^^^variable 102 | %% ^keyword.control.mermaid 103 | %% ^entity.name.function.mermaid 104 | %% ^^^^keyword.control.mermaid 105 | %% ^entity.name.function.mermaid 106 | %% ^keyword.control.mermaid 107 | %% ^^^^^^^^^^variable 108 | 109 | %% Edge out of Group 110 | server{group}:B --> T:subnet{group} 111 | %%^^^^^^variable 112 | %% ^punctuation.definition.typeparameters.begin.mermaid 113 | %% ^^^^^variable 114 | %% ^punctuation.definition.typeparameters.end.mermaid 115 | %% ^keyword.control.mermaid 116 | %% ^entity.name.function.mermaid 117 | %% ^^^keyword.control.mermaid 118 | %% ^entity.name.function.mermaid 119 | %% ^keyword.control.mermaid 120 | %% ^^^^^^variable 121 | %% ^punctuation.definition.typeparameters.begin.mermaid 122 | %% ^^^^^variable 123 | %% ^punctuation.definition.typeparameters.end.mermaid 124 | 125 | %% Junction 126 | junction junctionCenter 127 | %%^^^^^^^^keyword.control.mermaid 128 | %% ^^^^^^^^^^^^^^variable 129 | 130 | %% Junction in Group 131 | junction junctionRight in public_api 132 | %%^^^^^^^^keyword.control.mermaid 133 | %% ^^^^^^^^^^^^^variable 134 | %% ^^keyword.control.mermaid 135 | %% ^^^^^^^^^^variable 136 | -------------------------------------------------------------------------------- /tests/diagrams/gantt.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "gantt chart test" 2 | 3 | gantt 4 | %% <-------------- keyword.control.mermaid 5 | dateFormat YYYY-MM-DD 6 | %%^^^^^^^^^^ keyword.control.mermaid 7 | %% ^^^^^^^^^^ entity.name.function.mermaid 8 | dateFormat DD.MM.YYYY 9 | %%^^^^^^^^^^ keyword.control.mermaid 10 | %% ^^^^^^^^^^ entity.name.function.mermaid 11 | axisFormat %m/%d/%Y 12 | %%^^^^^^^^^^ keyword.control.mermaid 13 | %% ^^^^^^^^ entity.name.function.mermaid 14 | axisFormat %d..text//%m\\test--%y 15 | %%^^^^^^^^^^ keyword.control.mermaid 16 | %% ^^^^^^^^^^^^^^^^^^^^^^ entity.name.function.mermaid 17 | title Adding GANTT diagram functionality to mermaid 18 | %%^^^^^ keyword.control.mermaid 19 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 20 | excludes 2023-02-28 21 | %%^^^^^^^^ keyword.control.mermaid 22 | %% ^^^^^^^^^^ string 23 | excludes weekends 24 | %%^^^^^^^^ keyword.control.mermaid 25 | %% ^^^^^^^^ string 26 | excludes 2023-02-28, sunday, 2023-01-01, weekends 27 | %%^^^^^^^^ keyword.control.mermaid 28 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 29 | todayMarker off 30 | %%^^^^^^^^^^^ keyword.control.mermaid 31 | %% ^^^ string 32 | todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5 33 | %%^^^^^^^^^^^ keyword.control.mermaid 34 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 35 | tickInterval 1day 36 | %%^^^^^^^^^^^^ keyword.control.mermaid 37 | %% ^^^^ string 38 | tickInterval 600millisecond 39 | %%^^^^^^^^^^^^ keyword.control.mermaid 40 | %% ^^^^^^^^^^^^^^ string 41 | section A section %%comment 42 | %%^^^^^^^ keyword.control.mermaid 43 | %% ^^^^^^^^^^^^^^^^^^^ string 44 | Completed task :done, des1, 2014-01-06,2014-01-08 45 | %%^^^^^^^^^^^^^^ string 46 | %% ^ keyword.control.mermaid 47 | %% ^^^^ entity.name.function.mermaid 48 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid 49 | Active task :active, des2, 2014-01-09, 3d 50 | %%^^^^^^^^^^^ string 51 | %% ^ keyword.control.mermaid 52 | %% ^^^^^^ entity.name.function.mermaid 53 | %% ^^^^^^^^^^^^^^^^^^^^ source.mermaid 54 | Future task : des3, after des2, 5d %%comment 55 | %%^^^^^^^^^^^ string 56 | %% ^ keyword.control.mermaid 57 | %% ^^^^^ source.mermaid 58 | %% ^^^^^ entity.name.function.mermaid 59 | %% ^^^^^^^^ source.mermaid 60 | Future task2 : des4, after des3, 5d 61 | %%^^^^^^^^^^^^ string 62 | %% ^ keyword.control.mermaid 63 | %% ^^^^ source.mermaid 64 | %% ^^^^^ entity.name.function.mermaid 65 | %% ^^^^^^^^ source.mermaid 66 | A task :a1, 2014-01-01, 30d 67 | %%^^^^^^ string 68 | %% ^ keyword.control.mermaid 69 | %% ^^^^^^^^^^^^^^^^^^^ source.mermaid 70 | section Critical tasks 71 | %%^^^^^^^ keyword.control.mermaid 72 | %% ^^^^^^^^^^^^^^ string 73 | Completed task in the critical line :crit, done, 2014-01-06,24h 74 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 75 | %% ^ keyword.control.mermaid 76 | %% ^^^^ entity.name.function.mermaid 77 | %% ^ source.mermaid 78 | %% ^^^^ entity.name.function.mermaid 79 | %% ^^^^^^^^^^^^^^^^ source.mermaid 80 | Implement parser and jison :crit, done, after des1, 2d 81 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^ string 82 | %% ^ keyword.control.mermaid 83 | %% ^^^^ entity.name.function.mermaid 84 | %% ^ source.mermaid 85 | %% ^^^^ entity.name.function.mermaid 86 | %% ^ source.mermaid 87 | %% ^^^^^ entity.name.function.mermaid 88 | %% ^^^^^^^^ source.mermaid 89 | Create tests for parser :crit, active, 3d 90 | %%^^^^^^^^^^^^^^^^^^^^^^^ string 91 | %% ^ keyword.control.mermaid 92 | %% ^^^^ entity.name.function.mermaid 93 | %% ^ source.mermaid 94 | %% ^^^^^^ entity.name.function.mermaid 95 | %% ^^^^ source.mermaid 96 | Future task in critical line :crit, 5d 97 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 98 | %% ^ keyword.control.mermaid 99 | %% ^^^^ entity.name.function.mermaid 100 | %% ^^^^ source.mermaid 101 | Create tests for renderer :2d 102 | %%^^^^^^^^^^^^^^^^^^^^^^^^^ string 103 | %% ^ keyword.control.mermaid 104 | %% ^^ source.mermaid 105 | Add to mermaid :1d 106 | %%^^^^^^^^^^^^^^ string 107 | %% ^ keyword.control.mermaid 108 | %% ^^ source.mermaid 109 | 110 | %% negative cases 111 | invalid_title 112 | %%^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 113 | invalid_excludes monday 114 | %%^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 115 | invalid_section 116 | %%^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 117 | invalid_axisFormat 44 118 | %%^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 119 | invalid_dateFormat DD.MM.YYYY 120 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid -------------------------------------------------------------------------------- /tests/diagrams/state.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "state diagram test" 2 | 3 | stateDiagram 4 | %% <------------ keyword.control.mermaid 5 | s1 6 | %%^^ variable 7 | direction LR 8 | %%^^^^^^^^^ keyword.control.mermaid 9 | %% ^^ entity.name.function.mermaid 10 | state "Description with parenthesis" as s2 11 | %%^^^^^ keyword.control.mermaid 12 | state "Desc
" as s2 { 13 | %%^^^^^ keyword.control.mermaid 14 | %% ^^^^^^^^^^ string 15 | %% ^^ keyword.control.mermaid 16 | %% ^^ variable 17 | %% ^ keyword.control.mermaid 18 | state "no space"as s2{ 19 | %%^^^^^ keyword.control.mermaid 20 | %% ^^^^^^^^^^ string 21 | %% ^^ keyword.control.mermaid 22 | %% ^^ variable 23 | %% ^ keyword.control.mermaid 24 | s3 : Description with colon 25 | %%^^ variable 26 | %% ^ keyword.control.mermaid 27 | %% ^^^^^^^^^^^^^^^^^^^^^^ string 28 | s4 : symbols in description
./" 29 | %%^^ variable 30 | %% ^ keyword.control.mermaid 31 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 32 | s5:desc without spaces 33 | %%^^ variable 34 | %% ^ keyword.control.mermaid 35 | %% ^^^^^^^^^^^^^^^^^^^ string 36 | s1 --> s2 37 | %%^^ variable 38 | %% ^^^ keyword.control.mermaid 39 | %% ^^ variable 40 | s1-->s2 41 | %%^^ variable 42 | %% ^^^ keyword.control.mermaid 43 | %% ^^ variable 44 | s2 --> s3: Colon transition 45 | %%^^ variable 46 | %% ^^^ keyword.control.mermaid 47 | %% ^^ variable 48 | %% ^^^^^^^^^^^^^^^^ string 49 | [*] --> s1 : Transition text 50 | %%^^^ keyword.control.mermaid 51 | %% ^^^ keyword.control.mermaid 52 | %% ^^ variable 53 | %% ^ keyword.control.mermaid 54 | %% ^^^^^^^^^^^^^^^ string 55 | [*]-->s2 56 | %%^^^^^^ keyword.control.mermaid 57 | %% ^^ variable 58 | s3 --> [*] 59 | %%^^ variable 60 | %% ^^^ keyword.control.mermaid 61 | %% ^^^ keyword.control.mermaid 62 | 63 | state NestedComposite { 64 | %%^^^^^ keyword.control.mermaid 65 | %% ^^^^^^^^^^^^^^^ variable 66 | %% ^ keyword.control.mermaid 67 | [*] --> Nested 68 | %% ^^^ keyword.control.mermaid 69 | %% ^^^ keyword.control.mermaid 70 | %% ^^^^^^ variable 71 | 72 | state Nested { 73 | %% ^^^^^ keyword.control.mermaid 74 | %% ^^^^^^ variable 75 | %% ^ keyword.control.mermaid 76 | [*] --> second 77 | %% ^^^ keyword.control.mermaid 78 | %% ^^^ keyword.control.mermaid 79 | %% ^^^^^^ variable 80 | } 81 | %% ^ keyword.control.mermaid 82 | } 83 | %%^ keyword.control.mermaid 84 | 85 | state fork_state <> 86 | %%^^^^^ keyword.control.mermaid 87 | %% ^^^^^^^^^^ variable 88 | %% ^^^^^^^^ keyword.control.mermaid 89 | [*] --> fork_state 90 | %% ^^^ keyword.control.mermaid 91 | %% ^^^ keyword.control.mermaid 92 | %% ^^^^^^^^^^ variable 93 | fork_state --> State2 94 | %% ^^^^^^^^^^ variable 95 | %% ^^^ keyword.control.mermaid 96 | %% ^^^^^^ variable 97 | 98 | state join_state <> 99 | %% ^^^^^ keyword.control.mermaid 100 | %% ^^^^^^^^^^ variable 101 | %% ^^^^^^^ keyword.control.mermaid 102 | State2 --> join_state 103 | %% ^^^^^^ variable 104 | %% ^^^ keyword.control.mermaid 105 | %% ^^^^^^^^^^ variable 106 | 107 | note right of State1 108 | %%^^^^^^^^^^^^^ keyword.control.mermaid 109 | Important information! You can write 110 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 111 | notes. 112 | %% ^^^^^^ string 113 | end note 114 | %%^^^^^^^^ keyword.control.mermaid 115 | note left of State2 : This is the note to the left./nMore text 116 | %%^^^^^^^^^^^^ keyword.control.mermaid 117 | %% ^^^^^^ variable 118 | %% ^ keyword.control.mermaid 119 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 120 | note right of State2: no space before semicolon 121 | %%^^^^^^^^^^^^^ keyword.control.mermaid 122 | %% ^^^^^^ variable 123 | %% ^ keyword.control.mermaid 124 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^ string 125 | note left of State2: semicolon invalid: 126 | %% ^ source.mermaid 127 | %% concurrency 128 | state Active { 129 | %%^^^^^ keyword.control.mermaid 130 | %% ^^^^^^ variable 131 | %% ^ keyword.control.mermaid 132 | [*] --> NumLockOff 133 | %% ^^^ keyword.control.mermaid 134 | %% ^^^ keyword.control.mermaid 135 | %% ^^^^^^^^^^ variable 136 | NumLockOff --> NumLockOn : EvNumLockPressed 137 | %% ^^^^^^^^^^ variable 138 | %% ^^^ keyword.control.mermaid 139 | %% ^^^^^^^^^ variable 140 | %% ^ keyword.control.mermaid 141 | %% ^^^^^^^^^^^^^^^^ string 142 | NumLockOn --> NumLockOff : EvNumLockPressed 143 | %% ^^^^^^^^^ variable 144 | %% ^^^ keyword.control.mermaid 145 | %% ^^^^^^^^^^ variable 146 | %% ^ keyword.control.mermaid 147 | %% ^^^^^^^^^^^^^^^^ string 148 | -- 149 | %% ^^ keyword.control.mermaid 150 | [*] --> CapsLockOff 151 | %% ^^^ keyword.control.mermaid 152 | %% ^^^ keyword.control.mermaid 153 | %% ^^^^^^^^^^^ variable 154 | CapsLockOff --> CapsLockOn : EvCapsLockPressed/moreText 155 | %% ^^^^^^^^^^^ variable 156 | %% ^^^ keyword.control.mermaid 157 | %% ^^^^^^^^^^ variable 158 | %% ^ keyword.control.mermaid 159 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ string 160 | CapsLockOn --> CapsLockOff : EvCapsLockPressed 161 | %% ^^^^^^^^^^ variable 162 | %% ^^^ keyword.control.mermaid 163 | %% ^^^^^^^^^^^ variable 164 | %% ^ keyword.control.mermaid 165 | %% ^^^^^^^^^^^^^^^^^ string 166 | } 167 | %%^ keyword.control.mermaid 168 | 169 | %% negative cases 170 | invalid note left of blah 171 | %%^^^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 172 | -------------------------------------------------------------------------------- /syntaxes/diagrams/graph.yaml: -------------------------------------------------------------------------------- 1 | - comment: Graph 2 | begin: ^\s*(graph|flowchart)\s+([\p{Letter}\ 0-9]+)? 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | '2': 7 | name: entity.name.function.mermaid 8 | patterns: 9 | - match: \%%.* 10 | name: comment 11 | - comment: '' 12 | match: !regex |- 13 | ^\s*(subgraph)\s+ 14 | (\w+) 15 | (\[) 16 | ("?[\w\s*+%=\\/:\.\-'`,&^#$!?<>]*"?) 17 | (\]) 18 | captures: 19 | '1': 20 | name: keyword.control.mermaid 21 | '2': 22 | name: variable 23 | '3': 24 | name: keyword.control.mermaid 25 | '4': 26 | name: string 27 | '5': 28 | name: keyword.control.mermaid 29 | - match: ^\s*(subgraph)\s+([\p{Letter}\ 0-9<>]+) 30 | captures: 31 | '1': 32 | name: keyword.control.mermaid 33 | '2': 34 | name: entity.name.function.mermaid 35 | - match: ^(?i)\s*(direction)\s+(RB|BT|RL|TD|LR) 36 | captures: 37 | '1': 38 | name: keyword.control.mermaid 39 | '2': 40 | name: entity.name.function.mermaid 41 | - match: \b(end)\b 42 | name: keyword.control.mermaid 43 | - comment: '(Entity)(Edge/Shape)(Text)(Edge/Shape)' 44 | begin: !regex |- 45 | (\b(?:(?!--|==)[-\w])+\b\s*) # Entity 46 | (\(\[|\[\[|\[\(|\[|\(+|\>|\{|\(\() # Edge/Shape 47 | beginCaptures: 48 | '1': 49 | name: variable 50 | '2': 51 | name: keyword.control.mermaid 52 | '3': 53 | name: string 54 | patterns: 55 | - comment: ("multi-line text") 56 | begin: '\s*(")' 57 | beginCaptures: 58 | '1': 59 | name: string 60 | patterns: 61 | - comment: capture inner text between quotes 62 | begin: !regex |- 63 | ([^"]*) 64 | beginCaptures: 65 | '1': 66 | name: string 67 | patterns: 68 | # This capture is needed to make the begin capture function 69 | - match: '([^"]*)' 70 | captures: 71 | '1': 72 | name: comment 73 | end: '(?=")' 74 | end: '(")' 75 | endCaptures: 76 | '1': 77 | name: string 78 | - comment: (single line text) 79 | match: !regex |- 80 | \s*([$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # Text 81 | captures: 82 | '1': 83 | name: string 84 | end: !regex |- 85 | (\]\)|\]\]|\)\]|\]|\)+|\}|\)\)) # Edge/Shape 86 | endCaptures: 87 | '1': 88 | name: keyword.control.mermaid 89 | - comment: (Graph Link)("Multiline text")(Graph Link) 90 | begin: !regex |- 91 | \s*((?:-?\.{1,4}-|-{2,5}|={2,5})[xo>]?\|) # Start arrow 92 | beginCaptures: 93 | '1': 94 | name: keyword.control.mermaid 95 | patterns: 96 | - comment: ("multi-line text") 97 | begin: '\s*(")' 98 | beginCaptures: 99 | '1': 100 | name: string 101 | patterns: 102 | - comment: capture inner text between quotes 103 | begin: !regex |- 104 | ([^"]*) 105 | beginCaptures: 106 | '1': 107 | name: string 108 | patterns: 109 | # This capture is needed to make the begin capture function 110 | - match: '([^"]*)' 111 | captures: 112 | '1': 113 | name: comment 114 | end: '(?=")' 115 | end: '(")' 116 | endCaptures: 117 | '1': 118 | name: string 119 | - comment: (single line text) 120 | match: !regex |- 121 | \s*([$&%\^/#.,?!;:*+<>_\'\\\w\s]+) # Text 122 | captures: 123 | '1': 124 | name: string 125 | end: !regex |- 126 | (\|) # End bracket 127 | endCaptures: 128 | '1': 129 | name: keyword.control.mermaid 130 | - comment: (Graph Link Start Arrow)(Text)(Graph Link End Arrow) 131 | match: !regex |- 132 | \s*([xo<]?(?:-{2,5}|={2,5}|-\.{1,3}|-\.)) # Start Arrow 133 | ((?:(?!--|==)[\w\s*+%=\\/:\.\-'`,"&^#$!?<>\[\]])*) # Text 134 | ((?:-{2,5}|={2,5}|\.{1,3}-|\.-)[xo>]?) # End Arrow 135 | captures: 136 | '1': 137 | name: keyword.control.mermaid 138 | '2': 139 | name: string 140 | '3': 141 | name: keyword.control.mermaid 142 | - comment: (Graph Link) 143 | match: !regex |- 144 | \s*([ox<]?(?:-?\.{1,4}-|-{1,4}|={1,4})[ox>]?) # Graph Link 145 | captures: 146 | '1': 147 | name: keyword.control.mermaid 148 | - comment: Entity 149 | match: (\b(?:(?!--|==)[-\w])+\b\s*) 150 | name: variable 151 | - comment: '(Class)(Node(s))(ClassName)' 152 | match: !regex |- 153 | \s*(class) # class 154 | \s+(\b[-,\w]+) # Node(s) 155 | \s+(\b\w+\b) # ClassName 156 | captures: 157 | '1': 158 | name: keyword.control.mermaid 159 | '2': 160 | name: variable 161 | '3': 162 | name: string 163 | - comment: '(ClassDef)(ClassName)(Styles)' 164 | match: !regex |- 165 | \s*(classDef) # classDef 166 | \s+(\b\w+\b) # ClassName 167 | \s+(\b[-,:;#\w]+) # Styles 168 | captures: 169 | '1': 170 | name: keyword.control.mermaid 171 | '2': 172 | name: variable 173 | '3': 174 | name: string 175 | - comment: '(Click)(Entity)(Link)?(Tooltip)' 176 | match: !regex |- 177 | \s*(click) # Click 178 | \s+(\b[-\w]+\b\s*) # Entity 179 | (\b\w+\b)? # Link/callback? 180 | \s("*.*") # Tooltip 181 | captures: 182 | '1': 183 | name: keyword.control.mermaid 184 | '2': 185 | name: variable 186 | '3': 187 | name: variable 188 | '4': 189 | name: string 190 | - comment: ExtendedNodeShapes 191 | begin: \s*(\@\{) 192 | beginCaptures: 193 | '1': 194 | name: keyword.control.mermaid 195 | patterns: 196 | - comment: (shape)(shape name)(comma)? 197 | match: !regex |- 198 | \s*(shape\s*\:)([^\,\}]*)(\,)? 199 | captures: 200 | '1': 201 | name: keyword.control.mermaid 202 | '2': 203 | name: entity.name.function.mermaid 204 | '3': 205 | name: keyword.control.mermaid 206 | - comment: (label)(label text)(comma)? 207 | match: !regex |- 208 | \s*(label\s*\:)([^\,\}]*)(\,)? 209 | captures: 210 | '1': 211 | name: keyword.control.mermaid 212 | '2': 213 | name: string 214 | '3': 215 | name: keyword.control.mermaid 216 | end: (\}) 217 | endCaptures: 218 | '1': 219 | name: keyword.control.mermaid 220 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 221 | -------------------------------------------------------------------------------- /tests/diagrams/sequence.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "sequence diagram test" 2 | 3 | sequenceDiagram 4 | %% <-------------- keyword.control.mermaid 5 | autonumber 6 | %%^^^^^^^^^^ keyword.control.mermaid 7 | %% participant 8 | participant Alice 9 | %%^^^^^^^^^^^ keyword.control.mermaid 10 | %% ^^^^^ variable 11 | participant B NewasLine as Bob
Newline 12 | %%^^^^^^^^^^^ keyword.control.mermaid 13 | %% ^^^^^^^^^^^ variable 14 | %% ^^ keyword.control.mermaid 15 | %% ^^^^^^^^^^^^^^ string 16 | participant C as Carol 17 | %%^^^^^^^^^^^ keyword.control.mermaid 18 | %% ^ variable 19 | %% ^^ keyword.control.mermaid 20 | %% ^^^^^ string 21 | actor D as AlternativeActor 22 | %%^^^^^ keyword.control.mermaid 23 | %% ^ variable 24 | %% ^^ keyword.control.mermaid 25 | %% ^^^^^^^^^^^^^^^^ string 26 | title Test Diagram 27 | %%^^^^^ keyword.control.mermaid 28 | %% ^^^^^^^^^^^^ string 29 | title: Alternate title style 30 | %%^^^^^^ keyword.control.mermaid 31 | %% ^^^^^^^^^^^^^^^^^^^^^ string 32 | %% arrows 33 | B->C: Solid line without arrow 34 | %%^ variable 35 | %% ^^ keyword.control.mermaid 36 | %% ^ variable 37 | %% ^ keyword.control.mermaid 38 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ string 39 | B-->C: Dotted line without arrow 40 | %%^ variable 41 | %% ^^^ keyword.control.mermaid 42 | %% ^ variable 43 | %% ^ keyword.control.mermaid 44 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^ string 45 | B->>C:Solid line with arrowhead 46 | %%^ variable 47 | %% ^^^ keyword.control.mermaid 48 | %% ^ variable 49 | %% ^ keyword.control.mermaid 50 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^ string 51 | B-->>C: Dotted line with arrowhead 52 | %%^ variable 53 | %% ^^^^ keyword.control.mermaid 54 | %% ^ variable 55 | %% ^ keyword.control.mermaid 56 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ string 57 | B-)C: Solid line with Async arrow 58 | %%^ variable 59 | %% ^^ keyword.control.mermaid 60 | %% ^ variable 61 | %% ^ keyword.control.mermaid 62 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 63 | B--)C: Dotted line with Async arrow 64 | %%^ variable 65 | %% ^^^ keyword.control.mermaid 66 | %% ^ variable 67 | %% ^ keyword.control.mermaid 68 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 69 | B-xC: Solid line with a cross at end 70 | %%^ variable 71 | %% ^^ keyword.control.mermaid 72 | %% ^ variable 73 | %% ^ keyword.control.mermaid 74 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 75 | B--xC: Dotted line with a cross at end 76 | %%^ variable 77 | %% ^^^ keyword.control.mermaid 78 | %% ^ variable 79 | %% ^ keyword.control.mermaid 80 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 81 | %% activation, shorthand 82 | activate Alice 83 | %%^^^^^^^^ keyword.control.mermaid 84 | %% ^^^^^ variable 85 | B->>+C: Arrow with + that activates Carol 86 | %%^ variable 87 | %% ^^^^ keyword.control.mermaid 88 | %% ^ variable 89 | %% ^ keyword.control.mermaid 90 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 91 | C->>-B: Arrow with - that deactivates Carol 92 | %%^ variable 93 | %% ^^^^ keyword.control.mermaid 94 | %% ^ variable 95 | %% ^ keyword.control.mermaid 96 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 97 | Participant1 (with brackets) -->Backend (with brackets) : wrong on this line 98 | %%^^^^^^^^^^^^^^^^^^^^^^^^^^^^ variable 99 | %% ^^^ keyword.control.mermaid 100 | %% ^^^^^^^^^^^^^^^^^^^^^^^ variable 101 | %% ^ keyword.control.mermaid 102 | %% ^^^^^^^^^^^^^^^^^^ string 103 | deactivate Alice 104 | %%^^^^^^^^^^ keyword.control.mermaid 105 | %% ^^^^^ variable 106 | %% notes 107 | Note left of Alice: Alice likes to chat 108 | %%^^^^ keyword.control.mermaid 109 | %% ^^^^^^^ entity.name.function.mermaid 110 | %% ^^^^^ variable 111 | %% ^ keyword.control.mermaid 112 | %% ^^^^^^^^^^^^^^^^^^^ string 113 | Note left of Alice (brackets): Alice likes to chat 114 | %%^^^^ keyword.control.mermaid 115 | %% ^^^^^^^ entity.name.function.mermaid 116 | %% ^^^^^^^^^^^^^^^^ variable 117 | %% ^ keyword.control.mermaid 118 | %% ^^^^^^^^^^^^^^^^^^^ string 119 | Note over B,C: Bob whispers when sick 120 | %%^^^^ keyword.control.mermaid 121 | %% ^^^^ entity.name.function.mermaid 122 | %% ^ variable 123 | %% ^ keyword.control.mermaid 124 | %% ^ variable 125 | %% ^ keyword.control.mermaid 126 | %% ^^^^^^^^^^^^^^^^^^^^^^ string 127 | %% loop 128 | loop Every minute 129 | %%^^^^ keyword.control.mermaid 130 | %% ^^^^^^^^^^^^ string 131 | B-->C: Can you hear me? 132 | %% ^ variable 133 | %% ^^^ keyword.control.mermaid 134 | %% ^ variable 135 | %% ^ keyword.control.mermaid 136 | %% ^^^^^^^^^^^^^^^^ string 137 | end 138 | %%^^^ keyword.control.mermaid 139 | %% alt 140 | alt is sick 141 | %%^^^ keyword.control.mermaid 142 | %% ^^^^^^^ string 143 | B-->C: Not so good :( 144 | %% ^ variable 145 | %% ^^^ keyword.control.mermaid 146 | %% ^ variable 147 | %% ^ keyword.control.mermaid 148 | %% ^^^^^^^^^^^^^^ string 149 | else is well 150 | %%^^^^ keyword.control.mermaid 151 | %% ^^^^^^^ string 152 | B->C: Feeling fresh like a daisy 153 | %% ^ variable 154 | %% ^^ keyword.control.mermaid 155 | %% ^ variable 156 | %% ^ keyword.control.mermaid 157 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ string 158 | end 159 | %%^^^ keyword.control.mermaid 160 | opt Extra response 161 | %%^^^ keyword.control.mermaid 162 | %% ^^^^^^^^^^^^^^ string 163 | B->C: You, Carol? 164 | %% ^ variable 165 | %% ^^ keyword.control.mermaid 166 | %% ^ variable 167 | %% ^ keyword.control.mermaid 168 | %% ^^^^^^^^^^^ string 169 | end 170 | %%^^^ keyword.control.mermaid 171 | %% par 172 | par Action 1 173 | %%^^^ keyword.control.mermaid 174 | %% ^^^^^^^^ string 175 | B-->C: I'm good 176 | %% ^ variable 177 | %% ^^^ keyword.control.mermaid 178 | %% ^ variable 179 | %% ^ keyword.control.mermaid 180 | %% ^^^^^^^^ string 181 | and Action 2 182 | %%^^^ keyword.control.mermaid 183 | %% ^^^^^^^^ string 184 | B->>C: I'm better now 185 | %% ^ variable 186 | %% ^^^ keyword.control.mermaid 187 | %% ^ variable 188 | %% ^ keyword.control.mermaid 189 | %% ^^^^^^^^^^^^^^ string 190 | end 191 | %%^^^ keyword.control.mermaid 192 | rect rgba(128, 128, 128, 0.5) 193 | %%^^^^ keyword.control.mermaid 194 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ string 195 | B->>C: So colourful! 196 | %% ^ variable 197 | %% ^^^ keyword.control.mermaid 198 | %% ^ variable 199 | %% ^ keyword.control.mermaid 200 | %% ^^^^^^^^^^^^^ string 201 | critical Establish a connection to the DB 202 | %%^^^^^^^^ keyword.control.mermaid 203 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 204 | Service-->DB: connect 205 | %% ^^^^^^^ variable 206 | %% ^^^ keyword.control.mermaid 207 | %% ^^ variable 208 | %% ^ keyword.control.mermaid 209 | %% ^^^^^^^ string 210 | option Network timeout 211 | %%^^^^^^ keyword.control.mermaid 212 | %% ^^^^^^^^^^^^^^^ string 213 | Service-->Service: Log error 214 | %% ^^^^^^^ variable 215 | %% ^^^ keyword.control.mermaid 216 | %% ^^^^^^^ variable 217 | %% ^ keyword.control.mermaid 218 | %% ^^^^^^^^^ string 219 | end 220 | %%^^^ keyword.control.mermaid 221 | end 222 | %% <--- keyword.control.mermaid 223 | box transparent A colorless box with text 224 | %%^^^ keyword.control.mermaid 225 | %% ^^^^^^^^^^^ entity.name.function.mermaid 226 | ^^^^^^^^^^^^^^^^^^^^^^^^^ string 227 | box Aqua My Boxy Box 228 | %%^^^ keyword.control.mermaid 229 | %% ^^^^^^^^^^^^^^^^ string 230 | -------------------------------------------------------------------------------- /tests/diagrams/requirement.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "requirement diagram test" 2 | 3 | requirementDiagram 4 | %% <------------------ keyword.control.mermaid 5 | %% a comment 6 | %% ^^^^^^^^^^^^ comment 7 | requirement test_req { 8 | %% ^^^^^^^^^^^ keyword.control.mermaid 9 | %% ^^^^^^^^ variable 10 | %% ^ keyword.control.mermaid 11 | id: 1 12 | %% ^^^ keyword.control.mermaid 13 | %% ^ variable 14 | text: the test text. 15 | %% ^^^^^ keyword.control.mermaid 16 | %% ^^^^^^^^^^^^^^ string 17 | risk: high 18 | %% ^^^^^ keyword.control.mermaid 19 | %% ^^^^ entity.name.function.mermaid 20 | verifymethod: test 21 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 22 | %% ^^^^ entity.name.function.mermaid 23 | } 24 | %% ^ keyword.control.mermaid 25 | 26 | functionalRequirement test_req2 { 27 | %% ^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 28 | %% ^^^^^^^^^ variable 29 | %% ^ keyword.control.mermaid 30 | id: 1.1 31 | %% ^^^ keyword.control.mermaid 32 | %% ^^^ variable 33 | text: the second test text. 34 | %% ^^^^^ keyword.control.mermaid 35 | %% ^^^^^^^^^^^^^^^^^^^^^ string 36 | risk: low 37 | %% ^^^^^ keyword.control.mermaid 38 | %% ^^^ entity.name.function.mermaid 39 | verifymethod: inspection 40 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 41 | %% ^^^^^^^^^^ entity.name.function.mermaid 42 | } 43 | %% ^ keyword.control.mermaid 44 | 45 | performanceRequirement test_req3 { 46 | %% ^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 47 | %% ^^^^^^^^^ variable 48 | %% ^ keyword.control.mermaid 49 | id: 1.2 50 | %% ^^^ keyword.control.mermaid 51 | %% ^^^ variable 52 | text: the third test text. 53 | %% ^^^^^ keyword.control.mermaid 54 | %% ^^^^^^^^^^^^^^^^^^^^ string 55 | risk: medium 56 | %% ^^^^^ keyword.control.mermaid 57 | %% ^^^^^^ entity.name.function.mermaid 58 | verifymethod: demonstration 59 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 60 | %% ^^^^^^^^^^^^^ entity.name.function.mermaid 61 | } 62 | %% ^ keyword.control.mermaid 63 | 64 | interfaceRequirement test_req4 { 65 | %% ^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 66 | %% ^^^^^^^^^ variable 67 | %% ^ keyword.control.mermaid 68 | id: 1.2.1 69 | %% ^^^ keyword.control.mermaid 70 | %% ^^^^^ variable 71 | text: the fourth test text. 72 | %% ^^^^^ keyword.control.mermaid 73 | %% ^^^^^^^^^^^^^^^^^^^^^ string 74 | risk: medium 75 | %% ^^^^^ keyword.control.mermaid 76 | %% ^^^^^^ entity.name.function.mermaid 77 | verifymethod: analysis 78 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 79 | %% ^^^^^^^^ entity.name.function.mermaid 80 | } 81 | %% ^ keyword.control.mermaid 82 | 83 | physicalRequirement test_req5 { 84 | %% ^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 85 | %% ^^^^^^^^^ variable 86 | %% ^ keyword.control.mermaid 87 | id: 1.2.2 88 | %% ^^^ keyword.control.mermaid 89 | %% ^^^^^ variable 90 | text: the fifth test text. 91 | %% ^^^^^ keyword.control.mermaid 92 | %% ^^^^^^^^^^^^^^^^^^^^ string 93 | risk: medium 94 | %% ^^^^^ keyword.control.mermaid 95 | %% ^^^^^^ entity.name.function.mermaid 96 | verifymethod: analysis 97 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 98 | %% ^^^^^^^^ entity.name.function.mermaid 99 | } 100 | %% ^ keyword.control.mermaid 101 | 102 | designConstraint test_req6 { 103 | %% ^^^^^^^^^^^^^^^^ keyword.control.mermaid 104 | %% ^^^^^^^^^ variable 105 | %% ^ keyword.control.mermaid 106 | id: 1.2.3 107 | %% ^^^ keyword.control.mermaid 108 | %% ^^^^^ variable 109 | text: the sixth test text. 110 | %% ^^^^^ keyword.control.mermaid 111 | %% ^^^^^^^^^^^^^^^^^^^^ string 112 | risk: medium 113 | %% ^^^^^ keyword.control.mermaid 114 | %% ^^^^^^ entity.name.function.mermaid 115 | verifymethod: analysis 116 | %% ^^^^^^^^^^^^^ keyword.control.mermaid 117 | %% ^^^^^^^^ entity.name.function.mermaid 118 | } 119 | %% ^ keyword.control.mermaid 120 | 121 | element test_entity { 122 | %% ^^^^^^^ keyword.control.mermaid 123 | %% ^^^^^^^^^^^ variable 124 | %% ^ keyword.control.mermaid 125 | type: simulation 126 | %% ^^^^^ keyword.control.mermaid 127 | %% ^^^^^^^^^^ variable 128 | } 129 | %% ^ keyword.control.mermaid 130 | 131 | element test_entity2 { 132 | %% ^^^^^^^ keyword.control.mermaid 133 | %% ^^^^^^^^^^^^ variable 134 | %% ^ keyword.control.mermaid 135 | type: word doc 136 | %% ^^^^^ keyword.control.mermaid 137 | %% ^^^^^^^^ variable 138 | docRef: reqs/test_entity 139 | %% ^^^^^^^ keyword.control.mermaid 140 | %% ^^^^^^^^^^^^^^^^ variable 141 | } 142 | %% ^ keyword.control.mermaid 143 | 144 | element test_entity3 { 145 | %% ^^^^^^^ keyword.control.mermaid 146 | %% ^^^^^^^^^^^^ variable 147 | %% ^ keyword.control.mermaid 148 | type: "test suite" 149 | %% ^^^^^ keyword.control.mermaid 150 | %% ^^^^^^^^^^^^ variable 151 | docRef: github.com/all_the_tests 152 | %% ^^^^^^^ keyword.control.mermaid 153 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ variable 154 | } 155 | %% ^ keyword.control.mermaid 156 | 157 | test_entity - satisfies -> test_req2 158 | %% ^^^^^^^^^^^ variable 159 | %% ^ keyword.control.mermaid 160 | %% ^^^^^^^^^ keyword.control.mermaid 161 | %% ^^ keyword.control.mermaid 162 | %% ^^^^^^^^^ variable 163 | test_req - traces -> test_req2 164 | %% ^^^^^^^^ variable 165 | %% ^ keyword.control.mermaid 166 | %% ^^^^^^ keyword.control.mermaid 167 | %% ^^ keyword.control.mermaid 168 | %% ^^^^^^^^^ variable 169 | test_req - contains -> test_req3 170 | %% ^^^^^^^^ variable 171 | %% ^ keyword.control.mermaid 172 | %% ^^^^^^^^ keyword.control.mermaid 173 | %% ^^ keyword.control.mermaid 174 | %% ^^^^^^^^^ variable 175 | test_req3 - contains -> test_req4 176 | %% ^^^^^^^^^ variable 177 | %% ^ keyword.control.mermaid 178 | %% ^^^^^^^^ keyword.control.mermaid 179 | %% ^^ keyword.control.mermaid 180 | %% ^^^^^^^^^ variable 181 | test_req4 - derives -> test_req5 182 | %% ^^^^^^^^^ variable 183 | %% ^ keyword.control.mermaid 184 | %% ^^^^^^^ keyword.control.mermaid 185 | %% ^^ keyword.control.mermaid 186 | %% ^^^^^^^^^ variable 187 | test_req5 - refines -> test_req6 188 | %% ^^^^^^^^^ variable 189 | %% ^ keyword.control.mermaid 190 | %% ^^^^^^^ keyword.control.mermaid 191 | %% ^^ keyword.control.mermaid 192 | %% ^^^^^^^^^ variable 193 | test_entity3 - verifies -> test_req5 194 | %% ^^^^^^^^^^^^ variable 195 | %% ^ keyword.control.mermaid 196 | %% ^^^^^^^^ keyword.control.mermaid 197 | %% ^^ keyword.control.mermaid 198 | %% ^^^^^^^^^ variable 199 | test_req <- copies - test_entity2 200 | %% ^^^^^^^^ variable 201 | %% ^^ keyword.control.mermaid 202 | %% ^^^^^^ keyword.control.mermaid 203 | %% ^ keyword.control.mermaid 204 | %% ^^^^^^^^^^^^ variable 205 | -------------------------------------------------------------------------------- /tests/diagrams/er.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "er diagram test" 2 | 3 | erDiagram 4 | %% <--------- keyword.control.mermaid 5 | ANOTHER-ENTITY1 6 | %%^^^^^^^^^^^^^^^ variable 7 | attribute-entity { 8 | %%^^^^^^^^^^^^^^^^ variable 9 | %% ^ keyword.control.mermaid 10 | string name 11 | %% ^^^^^^ storage.type.mermaid 12 | %% ^^^^ variable 13 | int number 14 | %% ^^^ storage.type.mermaid 15 | %% ^^^^^^ variable 16 | foo another-attribute "attribute comment" 17 | %% ^^^ storage.type.mermaid 18 | %% ^^^^^^^^^^^^^^^^^ variable 19 | %% ^^^^^^^^^^^^^^^^^^^ string 20 | guid foreign-key FK "comment special characters (){}'_-!#$%^&*+=?,\'" 21 | %% ^^^^ storage.type.mermaid 22 | %% ^^^^^^^^^^^ variable 23 | %% ^^ keyword.control.mermaid 24 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 25 | guid primary-key PK "" 26 | %% ^^^^ storage.type.mermaid 27 | %% ^^^^^^^^^^^ variable 28 | %% ^^ keyword.control.mermaid 29 | %% ^^ string 30 | guid primary-key PK, FK "" 31 | %% ^^^^ storage.type.mermaid 32 | %% ^^^^^^^^^^^ variable 33 | %% ^^^^^^ keyword.control.mermaid 34 | %% ^^ string 35 | guid primary-key PK,FK,UK "" 36 | %% ^^^^ storage.type.mermaid 37 | %% ^^^^^^^^^^^ variable 38 | %% ^^^^^^^^ keyword.control.mermaid 39 | %% ^^ string 40 | %% a comment 41 | %% ^^^^^^^^^^^^ comment 42 | 43 | } 44 | %%^ keyword.control.mermaid 45 | 46 | UNINDENTED-ENTITY 47 | %%<--------------- variable 48 | unindented-attribute-entity { 49 | %%<--------------------------- variable 50 | %% ^ keyword.control.mermaid 51 | string name 52 | %%^^^^^^ storage.type.mermaid 53 | %% ^^^^ variable 54 | } 55 | %%<- keyword.control.mermaid 56 | 57 | %% relationships 58 | ANOTHER-ENTITY1 |o..o| ORDER : zero-or-one 59 | %%^^^^^^^^^^^^^^^ variable 60 | %% ^^^^^^ keyword.control.mermaid 61 | %% ^^^^^ variable 62 | %% ^ keyword.control.mermaid 63 | %% ^^^^^^^^^^^ string 64 | ANOTHER-ENTITY1 ||--|| ORDER : exactly-one 65 | %%^^^^^^^^^^^^^^^ variable 66 | %% ^^^^^^ keyword.control.mermaid 67 | %% ^^^^^ variable 68 | %% ^ keyword.control.mermaid 69 | %% ^^^^^^^^^^^ string 70 | ANOTHER-ENTITY1 }o--o{ ORDER : zero-or-more 71 | %%^^^^^^^^^^^^^^^ variable 72 | %% ^^^^^^ keyword.control.mermaid 73 | %% ^^^^^ variable 74 | %% ^ keyword.control.mermaid 75 | %% ^^^^^^^^^^^ string 76 | ANOTHER-ENTITY1 }|..|{ ORDER : one-or-more 77 | %%^^^^^^^^^^^^^^^ variable 78 | %% ^^^^^^ keyword.control.mermaid 79 | %% ^^^^^ variable 80 | %% ^ keyword.control.mermaid 81 | %% ^^^^^^^^^^^ string 82 | ANOTHER-ENTITY1}|..|{OTHER:"" 83 | %%^^^^^^^^^^^^^^^ variable 84 | %% ^^^^^^ keyword.control.mermaid 85 | %% ^^^^^ variable 86 | %% ^ keyword.control.mermaid 87 | %% ^^^^^^^^^^^ string 88 | ANOTHER-ENTITY1 }|..|{ OTHER : "multiple words" 89 | %%^^^^^^^^^^^^^^^ variable 90 | %% ^^^^^^ keyword.control.mermaid 91 | %% ^^^^^ variable 92 | %% ^ keyword.control.mermaid 93 | %% ^^^^^^^^^^^ string 94 | %% relationship aliases 95 | ANOTHER-ENTITY1 one or zero..one or zero ORDER : "zero or one" 96 | %%^^^^^^^^^^^^^^^ variable 97 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 98 | %% ^^^^^ variable 99 | %% ^ keyword.control.mermaid 100 | %% ^^^^^^^^^^^^^ string 101 | ANOTHER-ENTITY1 one or more..one or more ORDER : "one or more" 102 | %%^^^^^^^^^^^^^^^ variable 103 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 104 | %% ^^^^^ variable 105 | %% ^ keyword.control.mermaid 106 | %% ^^^^^^^^^^^^^ string 107 | ANOTHER-ENTITY1 one or many..one or many ORDER : "one or more" 108 | %%^^^^^^^^^^^^^^^ variable 109 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 110 | %% ^^^^^ variable 111 | %% ^ keyword.control.mermaid 112 | %% ^^^^^^^^^^^^^ string 113 | ANOTHER-ENTITY1 zero or one..zero or one ORDER : "zero or one" 114 | %%^^^^^^^^^^^^^^^ variable 115 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 116 | %% ^^^^^ variable 117 | %% ^ keyword.control.mermaid 118 | %% ^^^^^^^^^^^^^ string 119 | ANOTHER-ENTITY1 zero or more..zero or more ORDER : "zero or more" 120 | %%^^^^^^^^^^^^^^^ variable 121 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 122 | %% ^^^^^ variable 123 | %% ^ keyword.control.mermaid 124 | %% ^^^^^^^^^^^^^^ string 125 | ANOTHER-ENTITY1 zero or many..zero or many ORDER : "zero or more" 126 | %%^^^^^^^^^^^^^^^ variable 127 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 128 | %% ^^^^^ variable 129 | %% ^ keyword.control.mermaid 130 | %% ^^^^^^^^^^^^^^ string 131 | ANOTHER-ENTITY1 many(0)..many(0) ORDER : "zero or more" 132 | %%^^^^^^^^^^^^^^^ variable 133 | %% ^^^^^^^^^^^^^^^^ keyword.control.mermaid 134 | %% ^^^^^ variable 135 | %% ^ keyword.control.mermaid 136 | %% ^^^^^^^^^^^^^^ string 137 | ANOTHER-ENTITY1 many(1)..many(1) ORDER : "one or more" 138 | %%^^^^^^^^^^^^^^^ variable 139 | %% ^^^^^^^^^^^^^^^^ keyword.control.mermaid 140 | %% ^^^^^ variable 141 | %% ^ keyword.control.mermaid 142 | %% ^^^^^^^^^^^^^^ string 143 | ANOTHER-ENTITY1 only one..only one ORDER : "exactly one" 144 | %%^^^^^^^^^^^^^^^ variable 145 | %% ^^^^^^^^^^^^^^^^^^ keyword.control.mermaid 146 | %% ^^^^^ variable 147 | %% ^ keyword.control.mermaid 148 | %% ^^^^^^^^^^^^^ string 149 | ANOTHER-ENTITY1 1..1 ORDER : "exactly one" 150 | %%^^^^^^^^^^^^^^^ variable 151 | %% ^^^^ keyword.control.mermaid 152 | %% ^^^^^ variable 153 | %% ^ keyword.control.mermaid 154 | %% ^^^^^^^^^^^^^ string 155 | ANOTHER-ENTITY1 1+..1+ ORDER : "one or more" 156 | %%^^^^^^^^^^^^^^^ variable 157 | %% ^^^^^^ keyword.control.mermaid 158 | %% ^^^^^ variable 159 | %% ^ keyword.control.mermaid 160 | %% ^^^^^^^^^^^^^ string 161 | ANOTHER-ENTITY1 0+..0+ ORDER : "zero or more" 162 | %%^^^^^^^^^^^^^^^ variable 163 | %% ^^^^^^ keyword.control.mermaid 164 | %% ^^^^^ variable 165 | %% ^ keyword.control.mermaid 166 | %% ^^^^^^^^^^^^^^ string 167 | a[alias] 168 | %%^ variable 169 | %% ^ keyword.control.mermaid 170 | %% ^^^^^ string 171 | %% ^ keyword.control.mermaid 172 | n["named alias"] { 173 | %%^ variable 174 | %% ^ keyword.control.mermaid 175 | %% ^^^^^^^^^^^^^ string 176 | %% ^ keyword.control.mermaid 177 | %% ^ keyword.control.mermaid 178 | string email 179 | } 180 | %%^ keyword.control.mermaid 181 | -------------------------------------------------------------------------------- /syntaxes/diagrams/classDiagram.yaml: -------------------------------------------------------------------------------- 1 | - comment: Class Diagram 2 | begin: ^\s*(classDiagram) 3 | beginCaptures: 4 | '1': 5 | name: keyword.control.mermaid 6 | patterns: 7 | - match: \%%.* 8 | name: comment 9 | - comment: '(class name) ("multiplicity relationship")? (relationship) ("multiplicity relationship")? (class name) :? (labelText)?' 10 | match: !regex |- 11 | ([\w-]+) # class name 12 | \s("(?:\d+|\*|0..\d+|1..\d+|1..\*)")? # multiplicity relationship 13 | \s?(--o|--\*|\<--|--\>|<\.\.|\.\.\>|\<\|\.\.|\.\.\|\>|\<\|--|--\|>|--\*|--|\.\.|\*--|o--) # relationship 14 | \s("(?:\d+|\*|0..\d+|1..\d+|1..\*)")? # multiplicity relationship 15 | \s?([\w-]+) # class name 16 | \s?(:)? # : 17 | \s(.*)$ # label text 18 | captures: 19 | '1': 20 | name: entity.name.type.class.mermaid 21 | '2': 22 | name: keyword.control.mermaid 23 | '3': 24 | name: keyword.control.mermaid 25 | '4': 26 | name: keyword.control.mermaid 27 | '5': 28 | name: entity.name.type.class.mermaid 29 | '6': 30 | name: keyword.control.mermaid 31 | '7': 32 | name: string 33 | - comment: '(class name) : (visibility)?(function)( (function param/generic param)? )(classifier)? (return/generic return)?$' 34 | match: !regex |- 35 | ([\w-]+) # class name 36 | \s?(:) # : 37 | \s([\+~#-])? # visibility 38 | ([\w-]+) # function name 39 | (\() # ( 40 | ([\w-]+)? # function param 41 | (~)? # ~ 42 | ([\w-]+)? # generic function param 43 | (~)? # ~ 44 | \s?([\w-]+)? # function name 45 | (\)) # ) 46 | ([*\$]{0,2}) # classifier 47 | \s?([\w-]+)? # return type 48 | (~)? # ~ 49 | ([\w-]+)? # generic return type 50 | (~)?$ # ~ 51 | captures: 52 | '1': 53 | name: entity.name.type.class.mermaid 54 | '2': 55 | name: keyword.control.mermaid 56 | '3': 57 | name: keyword.control.mermaid 58 | '4': 59 | name: entity.name.function.mermaid 60 | '5': 61 | name: punctuation.parenthesis.open.mermaid 62 | '6': 63 | name: storage.type.mermaid 64 | '7': 65 | name: punctuation.definition.typeparameters.begin.mermaid 66 | '8': 67 | name: storage.type.mermaid 68 | '9': 69 | name: punctuation.definition.typeparameters.end.mermaid 70 | '10': 71 | name: entity.name.variable.parameter.mermaid 72 | '11': 73 | name: punctuation.parenthesis.closed.mermaid 74 | '12': 75 | name: keyword.control.mermaid 76 | '13': 77 | name: storage.type.mermaid 78 | '14': 79 | name: punctuation.definition.typeparameters.begin.mermaid 80 | '15': 81 | name: storage.type.mermaid 82 | '16': 83 | name: punctuation.definition.typeparameters.end.mermaid 84 | - comment: '(class name) : (visibility)?(datatype/generic data type) (attribute name)$' 85 | match: !regex |- 86 | ([\w-]+) # class name 87 | \s?(:) # : 88 | \s([\+~#-])? # visibility 89 | ([\w-]+) # datatype 90 | (~)? # ~ 91 | ([\w-]+)? # datatype 92 | (~)? # ~ 93 | \s([\w-]+)?$ # attribute name 94 | captures: 95 | '1': 96 | name: entity.name.type.class.mermaid 97 | '2': 98 | name: keyword.control.mermaid 99 | '3': 100 | name: keyword.control.mermaid 101 | '4': 102 | name: storage.type.mermaid 103 | '5': 104 | name: punctuation.definition.typeparameters.begin.mermaid 105 | '6': 106 | name: storage.type.mermaid 107 | '7': 108 | name: punctuation.definition.typeparameters.end.mermaid 109 | '8': 110 | name: entity.name.variable.field.mermaid 111 | - comment: '<<(Annotation)>> (class name)' 112 | match: !regex |- 113 | (<<) # << 114 | ([\w-]+) # annotation 115 | (>>) # >> 116 | \s?([\w-]+)? # class name 117 | captures: 118 | '1': 119 | name: punctuation.definition.typeparameters.begin.mermaid 120 | '2': 121 | name: storage.type.mermaid 122 | '3': 123 | name: punctuation.definition.typeparameters.end.mermaid 124 | '4': 125 | name: entity.name.type.class.mermaid 126 | - comment: 'class (class name) ~?(generic type)?~? ({)' 127 | begin: !regex |- 128 | (class)\s+ #class 129 | ([\w-]+) # class name 130 | (~)? # ~ 131 | ([\w-]+)? # generic type name 132 | (~)? # ~ 133 | \s?({) # begin bracket 134 | beginCaptures: 135 | '1': 136 | name: keyword.control.mermaid 137 | '2': 138 | name: entity.name.type.class.mermaid 139 | '3': 140 | name: punctuation.definition.typeparameters.begin.mermaid 141 | '4': 142 | name: storage.type.mermaid 143 | '5': 144 | name: punctuation.definition.typeparameters.end.mermaid 145 | '6': 146 | name: keyword.control.mermaid 147 | patterns: 148 | - match: \%%.* 149 | name: comment 150 | - comment: '(visibility)?(function)( (function param/generic param)? )(classifier)? (return/generic return)?$' 151 | begin: !regex |- 152 | \s([\+~#-])? # visibility 153 | ([\w-]+) # function name 154 | (\() # ( 155 | beginCaptures: 156 | '1': 157 | name: keyword.control.mermaid 158 | '2': 159 | name: entity.name.function.mermaid 160 | '3': 161 | name: punctuation.parenthesis.open.mermaid 162 | patterns: 163 | - comment: (TBD) 164 | match: !regex |- 165 | \s*,?\s*([\w-]+)? # function param 166 | (~)? # ~ 167 | ([\w-]+)? # generic function param 168 | (~)? # ~ 169 | \s?([\w-]+)? # function name 170 | captures: 171 | '1': 172 | name: storage.type.mermaid 173 | '2': 174 | name: punctuation.definition.typeparameters.begin.mermaid 175 | '3': 176 | name: storage.type.mermaid 177 | '4': 178 | name: punctuation.definition.typeparameters.end.mermaid 179 | '5': 180 | name: entity.name.variable.parameter.mermaid 181 | end: !regex |- 182 | (\)) # ) 183 | ([*\$]{0,2}) # classifier 184 | \s?([\w-]+)? # return type 185 | (~)? # ~ 186 | ([\w-]+)? # generic return type 187 | (~)?$ # ~ 188 | endCaptures: 189 | '1': 190 | name: punctuation.parenthesis.closed.mermaid 191 | '2': 192 | name: keyword.control.mermaid 193 | '3': 194 | name: storage.type.mermaid 195 | '4': 196 | name: punctuation.definition.typeparameters.begin.mermaid 197 | '5': 198 | name: storage.type.mermaid 199 | '6': 200 | name: punctuation.definition.typeparameters.end.mermaid 201 | - comment: '(visibility)?(datatype/generic data type) (attribute name)$' 202 | match: !regex |- 203 | \s([\+~#-])? # visibility 204 | ([\w-]+) # datatype 205 | (~)? # ~ 206 | ([\w-]+)? # datatype 207 | (~)? # ~ 208 | \s([\w-]+)?$ # attribute name 209 | captures: 210 | '1': 211 | name: keyword.control.mermaid 212 | '2': 213 | name: storage.type.mermaid 214 | '3': 215 | name: punctuation.definition.typeparameters.begin.mermaid 216 | '4': 217 | name: storage.type.mermaid 218 | '5': 219 | name: punctuation.definition.typeparameters.end.mermaid 220 | '6': 221 | name: entity.name.variable.field.mermaid 222 | - comment: '<<(Annotation)>> (class name)' 223 | match: !regex |- 224 | (<<) # << 225 | ([\w-]+) # annotation 226 | (>>) # >> 227 | \s?([\w-]+)? # class name 228 | captures: 229 | '1': 230 | name: punctuation.definition.typeparameters.begin.mermaid 231 | '2': 232 | name: storage.type.mermaid 233 | '3': 234 | name: punctuation.definition.typeparameters.end.mermaid 235 | '4': 236 | name: entity.name.type.class.mermaid 237 | end: (}) 238 | endCaptures: 239 | '1': 240 | name: keyword.control.mermaid 241 | - comment: 'class (class name) ~?(generic type)?~?' 242 | match: !regex |- 243 | (class)\s+ #class 244 | ([\w-]+) # class name 245 | (~)? # ~ 246 | ([\w-]+)? # generic type name 247 | (~)? # ~ 248 | captures: 249 | '1': 250 | name: keyword.control.mermaid 251 | '2': 252 | name: entity.name.type.class.mermaid 253 | '3': 254 | name: punctuation.definition.typeparameters.begin.mermaid 255 | '4': 256 | name: storage.type.mermaid 257 | '5': 258 | name: punctuation.definition.typeparameters.end.mermaid 259 | end: (^|\G)(?=\s*[`:~]{3,}\s*$) 260 | -------------------------------------------------------------------------------- /tests/diagrams/class.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "class diagram test" 2 | 3 | classDiagram 4 | %% <------------ keyword.control.mermaid 5 | Animal <|-- Duck : LabelText 6 | %%^^^^^^ entity.name.type.class.mermaid 7 | %% ^^^^ keyword.control.mermaid 8 | %% ^^^^ entity.name.type.class.mermaid 9 | %% ^ keyword.control.mermaid 10 | %% ^^^^^^^^^ string 11 | class1 --o other 12 | %%^^^^^^ entity.name.type.class.mermaid 13 | %% ^^^ keyword.control.mermaid 14 | %% ^^^^^ entity.name.type.class.mermaid 15 | Animal --o Fish 16 | %%^^^^^^ entity.name.type.class.mermaid 17 | %% ^^^ keyword.control.mermaid 18 | %% ^^^^ entity.name.type.class.mermaid 19 | Animal *-- classD 20 | %%^^^^^^ entity.name.type.class.mermaid 21 | %% ^^^ keyword.control.mermaid 22 | %% ^^^^^^ entity.name.type.class.mermaid 23 | Animal o-- ClassD : Aggregation 24 | %%^^^^^^ entity.name.type.class.mermaid 25 | %% ^^^ keyword.control.mermaid 26 | %% ^^^^^^ entity.name.type.class.mermaid 27 | %% ^ keyword.control.mermaid 28 | %% ^^^^^^^^^^^ string 29 | Animal : +int age 30 | %%^^^^^^ entity.name.type.class.mermaid 31 | %% ^ keyword.control.mermaid 32 | %% ^ keyword.control.mermaid 33 | %% ^^^ storage.type.mermaid 34 | %% ^^^ entity.name.variable.field.mermaid 35 | Animal : +String gender 36 | %%^^^^^^ entity.name.type.class.mermaid 37 | %% ^ keyword.control.mermaid 38 | %% ^ keyword.control.mermaid 39 | %% ^^^^^^ storage.type.mermaid 40 | %% ^^^^^^ entity.name.variable.field.mermaid 41 | Animal: mate() 42 | %%^^^^^^ entity.name.type.class.mermaid 43 | %% ^ keyword.control.mermaid 44 | %% ^^^^ entity.name.function.mermaid 45 | %% ^ punctuation.parenthesis.open.mermaid 46 | %% ^ punctuation.parenthesis.closed.mermaid 47 | Animal : #method(param)* return 48 | %%^^^^^^ entity.name.type.class.mermaid 49 | %% ^ keyword.control.mermaid 50 | %% ^ keyword.control.mermaid 51 | %% ^^^^^^ entity.name.function.mermaid 52 | %% ^ punctuation.parenthesis.open.mermaid 53 | %% ^^^^^ storage.type.mermaid 54 | %% ^ punctuation.parenthesis.closed.mermaid 55 | %% ^^^^^^ storage.type.mermaid 56 | class Duck{ 57 | %%^^^^^ keyword.control.mermaid 58 | %% ^^^^ entity.name.type.class.mermaid 59 | %% ^ keyword.control.mermaid 60 | %% Class Members 61 | +String beakColor 62 | %% ^ keyword.control.mermaid 63 | %% ^^^^^^ storage.type.mermaid 64 | %% ^^^^^^^^^ entity.name.variable.field.mermaid 65 | #quack() 66 | %% ^ keyword.control.mermaid 67 | %% ^^^^^ entity.name.function.mermaid 68 | %% ^ punctuation.parenthesis.open.mermaid 69 | %% ^ punctuation.parenthesis.closed.mermaid 70 | +quack(A a, List~B~ b, C c) 71 | %% ^ keyword.control.mermaid 72 | %% ^^^^^ entity.name.function.mermaid 73 | %% ^ punctuation.parenthesis.open.mermaid 74 | %% ^ storage.type.mermaid 75 | %% ^ entity.name.variable.parameter.mermaid 76 | %% ^ source.mermaid 77 | %% ^^^^ storage.type.mermaid 78 | %% ^ punctuation.definition.typeparameters.begin.mermaid 79 | %% ^ storage.type.mermaid 80 | %% ^ punctuation.definition.typeparameters.end.mermaid 81 | %% ^ entity.name.variable.parameter.mermaid 82 | %% ^ storage.type.mermaid 83 | %% ^ entity.name.variable.parameter.mermaid 84 | } 85 | %%^ keyword.control.mermaid 86 | class Fish{ 87 | %%^^^^^ keyword.control.mermaid 88 | %% ^^^^ entity.name.type.class.mermaid 89 | %% ^ keyword.control.mermaid 90 | -abstractMethod()* 91 | %% ^ keyword.control.mermaid 92 | %% ^^^^^^^^^^^^^^ entity.name.function.mermaid 93 | %% ^ punctuation.parenthesis.open.mermaid 94 | %% ^ punctuation.parenthesis.closed.mermaid 95 | %% ^ keyword.control.mermaid 96 | staticMethod()$ 97 | %% ^^^^^^^^^^^^ entity.name.function.mermaid 98 | %% ^ punctuation.parenthesis.open.mermaid 99 | %% ^ punctuation.parenthesis.closed.mermaid 100 | %% ^ keyword.control.mermaid 101 | +abstractStaticMethod(X x)*$ 102 | %% ^ keyword.control.mermaid 103 | %% ^^^^^^^^^^^^^^^^^^^^ entity.name.function.mermaid 104 | %% ^ punctuation.parenthesis.open.mermaid 105 | %% ^ storage.type.mermaid 106 | %% ^ entity.name.variable.parameter.mermaid 107 | %% ^ punctuation.parenthesis.closed.mermaid 108 | %% ^^ keyword.control.mermaid 109 | +abstractStaticMethod(X x)$* 110 | %% ^ keyword.control.mermaid 111 | %% ^^^^^^^^^^^^^^^^^^^^ entity.name.function.mermaid 112 | %% ^ punctuation.parenthesis.open.mermaid 113 | %% ^ storage.type.mermaid 114 | %% ^ entity.name.variable.parameter.mermaid 115 | %% ^ punctuation.parenthesis.closed.mermaid 116 | %% ^^ keyword.control.mermaid 117 | } 118 | %%^ keyword.control.mermaid 119 | %% Class member generics 120 | class Square~Shape~{ 121 | %%^^^^^ keyword.control.mermaid 122 | %% ^^^^^^ entity.name.type.class.mermaid 123 | %% ^ punctuation.definition.typeparameters.begin.mermaid 124 | %% ^^^^^ storage.type.mermaid 125 | %% ^ punctuation.definition.typeparameters.end.mermaid 126 | %% ^ keyword.control.mermaid 127 | List~int~ position 128 | %% ^^^^ storage.type.mermaid 129 | %% ^ punctuation.definition.typeparameters.begin.mermaid 130 | %% ^^^ storage.type.mermaid 131 | %% ^ punctuation.definition.typeparameters.end.mermaid 132 | %% ^^^^^^^^ entity.name.variable.field.mermaid 133 | setPoints(List~int~ points) 134 | %% ^^^^^^^^^ entity.name.function.mermaid 135 | %% ^ punctuation.parenthesis.open.mermaid 136 | %% ^^^^ storage.type.mermaid 137 | %% ^ punctuation.definition.typeparameters.begin.mermaid 138 | %% ^^^ storage.type.mermaid 139 | %% ^ punctuation.definition.typeparameters.end.mermaid 140 | %% ^^^^^^ entity.name.variable.parameter.mermaid 141 | %% ^ punctuation.parenthesis.closed.mermaid 142 | getPoints() List~int~ 143 | %% ^^^^^^^^^ entity.name.function.mermaid 144 | %% ^ punctuation.parenthesis.open.mermaid 145 | %% ^ punctuation.parenthesis.closed.mermaid 146 | %% ^^^^ storage.type.mermaid 147 | %% ^ punctuation.definition.typeparameters.begin.mermaid 148 | %% ^^^ storage.type.mermaid 149 | %% ^ punctuation.definition.typeparameters.end.mermaid 150 | } 151 | %%^ keyword.control.mermaid 152 | Square : -List~string~ messages 153 | %%^^^^^^ entity.name.type.class.mermaid 154 | %% ^^^^^^^^ entity.name.variable.field.mermaid 155 | %% ^ keyword.control.mermaid 156 | %% ^^^^ storage.type.mermaid 157 | %% ^ punctuation.definition.typeparameters.begin.mermaid 158 | %% ^^^^^^ storage.type.mermaid 159 | %% ^ punctuation.definition.typeparameters.end.mermaid 160 | %% ^^^^^^^^ entity.name.variable.field.mermaid 161 | Square : ~setMessages(List~string~ messages) 162 | %%^^^^^^ entity.name.type.class.mermaid 163 | %% ^ keyword.control.mermaid 164 | %% ^ keyword.control.mermaid 165 | %% ^^^^^^^^^^^ entity.name.function.mermaid 166 | %% ^^^^ storage.type.mermaid 167 | %% ^ punctuation.definition.typeparameters.begin.mermaid 168 | %% ^^^^^^ storage.type.mermaid 169 | %% ^ punctuation.definition.typeparameters.end.mermaid 170 | %% ^^^^^^^^ entity.name.variable.parameter.mermaid 171 | %% ^ punctuation.parenthesis.closed.mermaid 172 | Square : +getMessages() List~string~ 173 | %%^^^^^^ entity.name.type.class.mermaid 174 | %% ^ keyword.control.mermaid 175 | %% ^ keyword.control.mermaid 176 | %% ^^^^^^^^^^^ entity.name.function.mermaid 177 | %% ^ punctuation.parenthesis.open.mermaid 178 | %% ^ punctuation.parenthesis.closed.mermaid 179 | %% ^^^^ storage.type.mermaid 180 | %% ^ punctuation.definition.typeparameters.begin.mermaid 181 | %% ^^^^^^ storage.type.mermaid 182 | %% ^ punctuation.definition.typeparameters.end.mermaid 183 | 184 | %% Multiplicity relations 185 | Customer "1" --> "*" Ticket 186 | %%^^^^^^^^ entity.name.type.class.mermaid 187 | %% ^^^ keyword.control.mermaid 188 | %% ^^^ keyword.control.mermaid 189 | %% ^^^ keyword.control.mermaid 190 | %% ^^^^^^ entity.name.type.class.mermaid 191 | Student "1" --> "1..*" Course 192 | %%^^^^^^^ entity.name.type.class.mermaid 193 | %% ^^^ keyword.control.mermaid 194 | %% ^^^ keyword.control.mermaid 195 | %% ^^^^^^ keyword.control.mermaid 196 | %% ^^^^^^ entity.name.type.class.mermaid 197 | Galaxy --> "6" Star : Contains 198 | %%^^^^^^ entity.name.type.class.mermaid 199 | %% ^^^ keyword.control.mermaid 200 | %% ^^^ keyword.control.mermaid 201 | %% ^^^^ entity.name.type.class.mermaid 202 | %% ^ keyword.control.mermaid 203 | %% ^^^^^^^^ string 204 | 205 | %% Annotations 206 | class Annotate1 207 | %%^^^^^ keyword.control.mermaid 208 | %% ^^^^^^^^^ entity.name.type.class.mermaid 209 | <> Animal 210 | %%^^ punctuation.definition.typeparameters.begin.mermaid 211 | %% ^^^^^^^^^ storage.type.mermaid 212 | %% ^^ punctuation.definition.typeparameters.end.mermaid 213 | %% ^^^^^^ entity.name.type.class.mermaid 214 | class Annotate2{ 215 | %%^^^^^ keyword.control.mermaid 216 | %% ^^^^^^^^^ entity.name.type.class.mermaid 217 | %% ^ keyword.control.mermaid 218 | <> 219 | %% ^^ punctuation.definition.typeparameters.begin.mermaid 220 | %% ^^^^^^^ storage.type.mermaid 221 | %% ^^ punctuation.definition.typeparameters.end.mermaid 222 | } 223 | %%^ keyword.control.mermaid -------------------------------------------------------------------------------- /tests/diagrams/graph.test.mermaid: -------------------------------------------------------------------------------- 1 | %% SYNTAX TEST "source.mermaid" "graph/flowchart test" 2 | 3 | graph TB 4 | %% <----- keyword.control.mermaid 5 | %% ^^ entity.name.function.mermaid 6 | ID-4 7 | %%^^^^ variable 8 | %% Entity[Text] 9 | A[" 10 | %%^ variable 11 | %% ^ keyword.control.mermaid 12 | %% ^ string 13 | Hard 14 | %% ^^^^ string 15 | edge 16 | %% ^^^^ string 17 | "] 18 | %%^ string 19 | %% ^ keyword.control.mermaid 20 | ID-1[Node 1] 21 | %%^^^^ variable 22 | %% ^ keyword.control.mermaid 23 | %% ^^^^^^ string 24 | %% ^ keyword.control.mermaid 25 | ID-2>Node 2] 26 | %%^^^^ variable 27 | %% ^ keyword.control.mermaid 28 | %% ^^^^^^ string 29 | %% ^ keyword.control.mermaid 30 | ID-3(Node 3
text) 31 | %%^^^^ variable 32 | %% ^ keyword.control.mermaid 33 | %% ^^^^^^^^^^^^^^^^ string 34 | %% ^ keyword.control.mermaid 35 | ID-4([Stadium shape]) 36 | %%^^^^ variable 37 | %% ^^ keyword.control.mermaid 38 | %% ^^^^^^^^^^^^^ string 39 | %% ^^ keyword.control.mermaid 40 | ID-4[[Subroutine shape]] 41 | %%^^^^ variable 42 | %% ^^ keyword.control.mermaid 43 | %% ^^^^^^^^^^^^^^^^ string 44 | %% ^^ keyword.control.mermaid 45 | ID-4[(Cylindrical shape)] 46 | %%^^^^ variable 47 | %% ^^ keyword.control.mermaid 48 | %% ^^^^^^^^^^^^^^^^^ string 49 | %% ^^ keyword.control.mermaid 50 | ID-4((Circle shape)) 51 | %%^^^^ variable 52 | %% ^^ keyword.control.mermaid 53 | %% ^^^^^^^^^^^^ string 54 | %% ^^ keyword.control.mermaid 55 | %% Entity--Entity 56 | ID-1---ID-2 57 | %%^^^^ variable 58 | %% ^^^ keyword.control.mermaid 59 | %% ^^^^ variable 60 | 61 | ID-1 --> ID-3 62 | %%^^^^ variable 63 | %% ^^^ keyword.control.mermaid 64 | %% ^^^ variable 65 | ID-1<-->ID-2 66 | %% ^^^^ keyword.control.mermaid 67 | %%^^^^ variable 68 | %% ^^^^ variable 69 | %% Entity--Text--Entity 70 | ID-2--Link between 2 and 3---ID-3 71 | %%^^^^ variable 72 | %% ^^ keyword.control.mermaid 73 | %% ^^^^^^^^^^^^^^^^^^^^ string 74 | %% ^^^ keyword.control.mermaid 75 | %% ^^^^ variable 76 | B--"[b]\nb"-->C 77 | %%^ variable 78 | %% ^^ keyword.control.mermaid 79 | %% ^^^^^^^^^^^^^^^ string 80 | %% ^^^ keyword.control.mermaid 81 | %% ^ variable 82 | ID-3-->|Action from 3 to 1|ID-1 83 | %%^^^^ variable 84 | %% ^^^^ keyword.control.mermaid 85 | %% ^^^^^^^^^^^^^^^^^^ string 86 | %% ^ keyword.control.mermaid 87 | %% ^^^^ variable 88 | ID-3 -- "Action from 3 to 2. p/w: '_-!#$%^&*+=?,\'" --> ID-2 89 | %%^^^^ variable 90 | %% ^^ keyword.control.mermaid 91 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 92 | %% ^^^ keyword.control.mermaid 93 | %% ^^^^ variable 94 | ID-3--|This is the text|ID-1 95 | %%^^^^ variable 96 | %% ^^^ keyword.control.mermaid 97 | %% ^^^^^^^^^^^^^^^^ string 98 | %% ^ keyword.control.mermaid 99 | %% ^^^^ variable 100 | ID-3-->|This is the text|ID-1 101 | %%^^^^ variable 102 | %% ^^^^ keyword.control.mermaid 103 | %% ^^^^^^^^^^^^^^^^ string 104 | %% ^ keyword.control.mermaid 105 | %% ^^^^ variable 106 | ID-3-- This is the text -->ID-1 107 | %%^^^^ variable 108 | %% ^^ keyword.control.mermaid 109 | %% ^^^^^^^^^^^^^^^^ string 110 | %% ^^^ keyword.control.mermaid 111 | %% ^^^^ variable 112 | %% Complex cases 113 | A[Hard edge] -->|Link text| B(Round edge) 114 | %%^ variable 115 | %% ^ keyword.control.mermaid 116 | %% ^^^^^^^^^ string 117 | %% ^ keyword.control.mermaid 118 | %% ^^^^ keyword.control.mermaid 119 | %% ^^^^^^^^^ string 120 | %% ^ keyword.control.mermaid 121 | %% ^ variable 122 | %% ^ keyword.control.mermaid 123 | %% ^^^^^^^^^^ string 124 | %% ^ keyword.control.mermaid 125 | A[" 126 | %%^ variable 127 | %% ^ keyword.control.mermaid 128 | %% ^ string 129 | Hard 130 | %% ^^^^ string 131 | edge 132 | %% ^^^^ string 133 | "] -->|" 134 | %%^ string 135 | %% ^ keyword.control.mermaid 136 | %% ^^^^ keyword.control.mermaid 137 | %% ^ string 138 | Link 139 | %% ^^^^ string 140 | text 141 | %% ^^^^ string 142 | "| B(" 143 | %%^ string 144 | %% ^ keyword.control.mermaid 145 | %% ^ variable 146 | %% ^ keyword.control.mermaid 147 | %% ^ string 148 | Round 149 | %% ^^^^ string 150 | edge 151 | %% ^^^^ string 152 | ") 153 | %%^ string 154 | %% ^ keyword.control.mermaid 155 | 156 | ID-1---ID-2(Text multi word) 157 | %%^^^^ variable 158 | %% ^^^ keyword.control.mermaid 159 | %% ^^^^ variable 160 | %% ^ keyword.control.mermaid 161 | %% ^^^^^^^^^^^^^^^ string 162 | %% ^ keyword.control.mermaid 163 | B --> C{Text} 164 | %%^ variable 165 | %% ^^^ keyword.control.mermaid 166 | %% ^ variable 167 | %% ^ keyword.control.mermaid 168 | %% ^^^^ string 169 | %% ^ keyword.control.mermaid 170 | C -->|One| D[Text] 171 | %%^ variable 172 | %% ^^^^ keyword.control.mermaid 173 | %% ^^^ string 174 | %% ^ keyword.control.mermaid 175 | %% ^ variable 176 | %% ^ keyword.control.mermaid 177 | %% ^^^^ string 178 | %% ^ keyword.control.mermaid 179 | A(A) --> B(B) 180 | %%^ variable 181 | %% ^ keyword.control.mermaid 182 | %% ^ string 183 | %% ^ keyword.control.mermaid 184 | %% ^^^ keyword.control.mermaid 185 | %% ^ variable 186 | %% ^ keyword.control.mermaid 187 | %% ^ string 188 | %% ^ keyword.control.mermaid 189 | C[/C/] --> D>D] 190 | %%^ variable 191 | %% ^ keyword.control.mermaid 192 | %% ^^^ string 193 | %% ^ keyword.control.mermaid 194 | %% ^^^ keyword.control.mermaid 195 | %% ^ variable 196 | %% ^ keyword.control.mermaid 197 | %% ^ string 198 | %% ^ keyword.control.mermaid 199 | %% class/classDef 200 | classDef blue fill:#08f,stroke:#fff; 201 | %%^^^^^^^^ keyword.control.mermaid 202 | %% ^^^^ variable 203 | %% ^^^^^^^^^^^^^^^^^^^^^^ string 204 | class ID-1 blue 205 | %%^^^^^ keyword.control.mermaid 206 | %% ^^^^ variable 207 | %% ^^^^ string 208 | class ID-1,ID-2 red 209 | %%^^^^^ keyword.control.mermaid 210 | %% ^^^^^^^^^ variable 211 | %% ^^^^ string 212 | %% click 213 | click ID-1 "https://github.com" "Tooltip text" %% comments 214 | %%^^^^^ keyword.control.mermaid 215 | %% ^^^^ variable 216 | %% ^^^^^^^^^^^^^^^^^^^^ string 217 | %% ^^^^^^^^^^^^^^ string 218 | click ID-2 alert "Tooltip for a callback" 219 | %%^^^^^ keyword.control.mermaid 220 | %% ^^^^ variable 221 | %% ^^^^^ variable 222 | %% ^^^^^^^^^^^^^^^^^^^^^^^^ string 223 | subgraph A subgraph 224 | %%^^^^^^^^ keyword.control.mermaid 225 | %% ^^^^^^^^^^ entity.name.function.mermaid 226 | ID-4{Node 4} 227 | %% ^^^^ variable 228 | %% ^ keyword.control.mermaid 229 | %% ^^^^ variable 230 | %% ^ keyword.control.mermaid 231 | %% ^^^^^^ string 232 | %% ^ keyword.control.mermaid 233 | ID-6["Node 6 (same #quot;shape#quot;)"] 234 | %% ^^^^ variable 235 | %% ^ keyword.control.mermaid 236 | %% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ string 237 | %% ^ keyword.control.mermaid 238 | ID-4-.->ID-5 239 | %% ^^^^ variable 240 | %% ^^^^ keyword.control.mermaid 241 | %% ^^^^ variable 242 | ID-5 -. Action from 5 to 4 .-> ID-4 243 | %% ^^^^ variable 244 | %% ^^ keyword.control.mermaid 245 | %% ^^^^^^^^^^^^^^^^^^ string 246 | %% ^^ keyword.control.mermaid 247 | %% ^^^^ variable 248 | ID-4.->ID-5 249 | %% ^^^^ variable 250 | %% ^^^ keyword.control.mermaid 251 | %% ^^^^ variable 252 | ID-2 -.-|Text| ID-2 253 | %% ^^^^ variable 254 | %% ^^^^ keyword.control.mermaid 255 | %% ^^^^ string 256 | %% ^ keyword.control.mermaid 257 | %% ^^^^ variable 258 | ID-2 ..-|Text| ID-2 259 | %% ^^^^ variable 260 | %% ^^^^ keyword.control.mermaid 261 | %% ^^^^ string 262 | %% ^ keyword.control.mermaid 263 | %% ^^^^ variable 264 | ID-5==>ID-6 265 | %% ^^^^ variable 266 | %% ^^^ keyword.control.mermaid 267 | %% ^^^^ variable 268 | ID-6 == Action from 6 to 5 ==> ID-5 269 | %% ^^^^ variable 270 | %% ^^ keyword.control.mermaid 271 | %% ^^^^^^^^^^^^^^^^^^ string 272 | %% ^^^ keyword.control.mermaid 273 | %% ^^^^ variable 274 | end 275 | %%~~~ keyword.control.mermaid 276 | 277 | subgraph 多电压测试 278 | %%^^^^^^^^ keyword.control.mermaid 279 | %% ^^^^^^^^ entity.name.function.mermaid 280 | 多电压测试1 281 | %% ^^^^^^^^^ variable 282 | end 283 | %%~~~ keyword.control.mermaid 284 | subgraph a[""] 285 | %%^^^^^^^^ keyword.control.mermaid 286 | %% ^ variable 287 | %% ^ keyword.control.mermaid 288 | %% ^^^^^ string 289 | %% ^ keyword.control.mermaid 290 | direction RL 291 | %% ^^^^^^^^^ keyword.control.mermaid 292 | %% ^^ entity.name.function.mermaid 293 | direction BT 294 | %% ^^^^^^^^^ keyword.control.mermaid 295 | %% ^^ entity.name.function.mermaid 296 | direction RB 297 | %% ^^^^^^^^^ keyword.control.mermaid 298 | %% ^^ entity.name.function.mermaid 299 | direction RL 300 | %% ^^^^^^^^^ keyword.control.mermaid 301 | %% ^^ entity.name.function.mermaid 302 | direction TD 303 | %% ^^^^^^^^^ keyword.control.mermaid 304 | %% ^^ entity.name.function.mermaid 305 | direction LR 306 | %% ^^^^^^^^^ keyword.control.mermaid 307 | %% ^^ entity.name.function.mermaid 308 | end 309 | %%~~~ keyword.control.mermaid 310 | end 311 | %% <--- keyword.control.mermaid 312 | 313 | %% negative cases 314 | invalid subgraph invalid 315 | %%^^^^^^^^^^^^^^^^^^^^^^^^ source.mermaid - keyword.control.mermaid 316 | 317 | %% extended node shapes 318 | text@{shape: odd, label: "asd
asd"} 319 | %% <---- variable 320 | %% ^^ keyword.control.mermaid 321 | %% ^^^^^^ keyword.control.mermaid 322 | %% ^^^^ entity.name.function.mermaid 323 | %% ^ keyword.control.mermaid 324 | %% ^^^^^^ keyword.control.mermaid 325 | %% ^^^^^^^^^^^^^^ string 326 | %% ^ keyword.control.mermaid 327 | %% different description order, no space between, no " 328 | text@{label: text,shape: odd} 329 | %% <---- variable 330 | %% ^^ keyword.control.mermaid 331 | %% ^^^^^^ keyword.control.mermaid 332 | %% ^^^^^ string 333 | %% ^ keyword.control.mermaid 334 | %% ^^^^^ keyword.control.mermaid 335 | %% ^^^^ entity.name.function.mermaid 336 | %% ^ keyword.control.mermaid 337 | %% single prop in description (label) 338 | text@{label: text} 339 | %% <---- variable 340 | %% ^^ keyword.control.mermaid 341 | %% ^^^^^^ keyword.control.mermaid 342 | %% ^^^^^ string 343 | %% ^ keyword.control.mermaid 344 | %% single prop in description (shape) 345 | text@{shape: lean-r} 346 | %% <---- variable 347 | %% ^^ keyword.control.mermaid 348 | %% ^^^^^^ keyword.control.mermaid 349 | %% ^^^^^^^ entity.name.function.mermaid 350 | %% ^ keyword.control.mermaid 351 | %% space between 'shape' and ':' 352 | text@{shape : lean-r} 353 | %% <---- variable 354 | %% ^^ keyword.control.mermaid 355 | %% ^^^^^^^^^ keyword.control.mermaid 356 | %% ^^^^^^^ entity.name.function.mermaid 357 | %% ^ keyword.control.mermaid -------------------------------------------------------------------------------- /images/icon/mermaidTail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | -------------------------------------------------------------------------------- /images/icon/iconSVG.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | --------------------------------------------------------------------------------