Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Address mermaid-zenuml PR comments #4405

Merged
merged 3 commits into from
May 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 85 additions & 23 deletions docs/syntax/zenuml.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

> A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order.

Mermaid can render sequence diagrams with ZenUML. Note that ZenUML uses a different
Mermaid can render sequence diagrams with [ZenUML](https://zenuml.com). Note that ZenUML uses a different
syntax than the original Sequence Diagram in mermaid.

```mermaid-example
Expand Down Expand Up @@ -153,13 +153,24 @@ zenuml

We use `new` keyword to create an object.

```mermaid-example
zenuml
new A1
new A2(with, parameters)
```

```mermaid
zenuml
new A1
new A2(with, parameters)
```

### Reply message

There are three ways to express a reply message:

```mermaid-example
zenuml
// 1. assign a variable from a sync message.
a = A.SyncMessage()

Expand All @@ -168,12 +179,31 @@ There are three ways to express a reply message:

// 2. use return keyword
A.SyncMessage() {
return result
return result
}

// 3. use @return or @reply annotator on an async message
@return
A->B: result
```

```mermaid
zenuml
// 1. assign a variable from a sync message.
a = A.SyncMessage()

// 1.1. optionally give the variable a type
SomeType a = A.SyncMessage()

// 2. use return keyword
A.SyncMessage() {
return result
}

// 3. use @return or @reply annotator on an async message
@return
A->B: result
```

The third way `@return` is rarely used, but it is useful when you want to return to one level up.

Expand Down Expand Up @@ -237,11 +267,23 @@ are ignored. Markdown is supported.

See the example below:

// a comment on a participent will not be rendered
```mermaid-example
zenuml
// a comment on a participant will not be rendered
BookService
// a comment on a message.
// **Markdown** is supported.
BookService.getBook()
```

```mermaid
zenuml
// a comment on a participant will not be rendered
BookService
// a comment on a message.
// **Markdown** is supported.
BookService.getBook()
```

## Loops

Expand All @@ -253,11 +295,11 @@ following notations:
3. forEach, foreach
4. loop

<!---->

while(condition) {
...statements...
}
```zenuml
while(condition) {
...statements...
}
```

See the example below:

Expand All @@ -281,13 +323,15 @@ zenuml

It is possible to express alternative paths in a sequence diagram. This is done by the notation

if(condition1) {
...statements...
} else if(condition2) {
...statements...
} else {
...statements...
}
```zenuml
if(condition1) {
...statements...
} else if(condition2) {
...statements...
} else {
...statements...
}
```

See the example below:

Expand Down Expand Up @@ -315,9 +359,11 @@ zenuml

It is possible to render an `opt` fragment. This is done by the notation

opt {
...statements...
}
```zenuml
opt {
...statements...
}
```

See the example below:

Expand Down Expand Up @@ -345,11 +391,13 @@ It is possible to show actions that are happening in parallel.

This is done by the notation

par {
statement1
statement2
statement3
}
```zenuml
par {
statement1
statement2
statement3
}
```

See the example below:

Expand Down Expand Up @@ -408,3 +456,17 @@ zenuml
API->BookingService: rollback status
}
```

## Integrating with your library/website.

Zenuml uses the experimental lazy loading & async rendering features which could change in the future.

You can use this method to add mermaid including the zenuml diagram to a web page:

```html
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
import zenuml from 'https://cdn.jsdelivr.net/npm/@mermaid-js/[email protected]/dist/mermaid-zenuml.esm.min.mjs';
await mermaid.registerExternalDiagrams([zenuml]);
</script>
```
1 change: 1 addition & 0 deletions packages/mermaid-zenuml/README.md
26 changes: 13 additions & 13 deletions packages/mermaid-zenuml/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@mermaid-js/mermaid-zenuml",
"version": "0.0.1",
"description": "Zenuml integration for MermaidJS.",
"version": "0.1.0",
"description": "MermaidJS plugin for ZenUML integration",
"module": "dist/mermaid-zenuml.core.mjs",
"types": "dist/detector.d.ts",
"type": "module",
Expand All @@ -23,23 +23,23 @@
},
"repository": {
"type": "git",
"url": "https://github.com/mermaid-js/mermaid"
"url": "https://github.com/mermaid-js/mermaid",
"directory": "packages/mermaid-zenuml"
},
"author": "Peng Xiao",
"contributors": [
"Peng Xiao",
"Sidharth Vinod <[email protected]> (https://sidharth.dev)",
"Dong Cai"
],
"license": "MIT",
"standard": {
"ignore": [
"dist/**/*.js"
],
"globals": [
"page"
]
},
"dependencies": {
"@zenuml/core": "^3.0.0"
},
"devDependencies": {
"mermaid": "workspace:*"
"mermaid": "workspace:^"
},
"peerDependencies": {
"mermaid": "workspace:>=10.0.0"
},
"files": [
"dist"
Expand Down
10 changes: 6 additions & 4 deletions packages/mermaid-zenuml/src/parser.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
// ZenUML manage parsing internally. It uses Antlr4 to parse the DSL.
// The parser is defined in https://github.com/ZenUml/vue-sequence/blob/main/src/parser/index.js

// This is a dummy parser that satisfies the mermaid API logic.
/**
* ZenUML manage parsing internally. It uses Antlr4 to parse the DSL.
* The parser is defined in https://github.com/ZenUml/vue-sequence/blob/main/src/parser/index.js
*
* This is a dummy parser that satisfies the mermaid API logic.
*/
export default {
parser: { yy: {} },
parse: () => {
Expand Down
77 changes: 47 additions & 30 deletions packages/mermaid/src/docs/syntax/zenuml.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

> A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order.

Mermaid can render sequence diagrams with ZenUML. Note that ZenUML uses a different
Mermaid can render sequence diagrams with [ZenUML](https://zenuml.com). Note that ZenUML uses a different
syntax than the original Sequence Diagram in mermaid.

```mermaid-example
Expand Down Expand Up @@ -97,30 +97,32 @@ zenuml

We use `new` keyword to create an object.

```
new A1
new A2(with, parameters)
```mermaid-example
zenuml
new A1
new A2(with, parameters)
```

### Reply message

There are three ways to express a reply message:

```
// 1. assign a variable from a sync message.
a = A.SyncMessage()
```mermaid-example
zenuml
// 1. assign a variable from a sync message.
a = A.SyncMessage()

// 1.1. optionally give the variable a type
SomeType a = A.SyncMessage()
// 1.1. optionally give the variable a type
SomeType a = A.SyncMessage()

// 2. use return keyword
A.SyncMessage() {
return result
}
// 2. use return keyword
A.SyncMessage() {
return result
}

// 3. use @return or @reply annotator on an async message
@return
A->B: result
// 3. use @return or @reply annotator on an async message
@return
A->B: result
```

The third way `@return` is rarely used, but it is useful when you want to return to one level up.
Expand Down Expand Up @@ -161,12 +163,13 @@ are ignored. Markdown is supported.

See the example below:

```
// a comment on a participent will not be rendered
BookService
// a comment on a message.
// **Markdown** is supported.
BookService.getBook()
```mermaid-example
zenuml
// a comment on a participant will not be rendered
BookService
// a comment on a message.
// **Markdown** is supported.
BookService.getBook()
```

## Loops
Expand All @@ -179,9 +182,9 @@ following notations:
3. forEach, foreach
4. loop

```
```zenuml
while(condition) {
...statements...
...statements...
}
```

Expand All @@ -199,13 +202,13 @@ zenuml

It is possible to express alternative paths in a sequence diagram. This is done by the notation

```
```zenuml
if(condition1) {
...statements...
...statements...
} else if(condition2) {
...statements...
...statements...
} else {
...statements...
...statements...
}
```

Expand All @@ -225,7 +228,7 @@ zenuml

It is possible to render an `opt` fragment. This is done by the notation

```
```zenuml
opt {
...statements...
}
Expand All @@ -248,7 +251,7 @@ It is possible to show actions that are happening in parallel.

This is done by the notation

```
```zenuml
par {
statement1
statement2
Expand Down Expand Up @@ -295,3 +298,17 @@ zenuml
API->BookingService: rollback status
}
```

## Integrating with your library/website.

Zenuml uses the experimental lazy loading & async rendering features which could change in the future.

You can use this method to add mermaid including the zenuml diagram to a web page:

```html
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
import zenuml from 'https://cdn.jsdelivr.net/npm/@mermaid-js/[email protected]/dist/mermaid-zenuml.esm.min.mjs';
await mermaid.registerExternalDiagrams([zenuml]);
</script>
```
2 changes: 1 addition & 1 deletion pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.