Skip to content

Commit 97ab731

Browse files
authored
Merge pull request #90 from nao1215/feature/mermaid-block
feat: block diagram
2 parents ff536a6 + 2b8d01b commit 97ab731

File tree

14 files changed

+2224
-7
lines changed

14 files changed

+2224
-7
lines changed

README.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# What is markdown package
1313
The Package markdown is a simple markdown builder in golang. The markdown package assembles Markdown using method chaining, not uses a template engine like [html/template](https://pkg.go.dev/html/template). The syntax of Markdown follows **GitHub Markdown**.
1414

15-
The markdown package was initially developed to save test results in [nao1215/spectest](https://github.com/nao1215/spectest). Therefore, the markdown package implements the features required by spectest. For example, the markdown package supports **mermaid diagrams (entity relationship diagram, sequence diagram, user journey diagram, git graph diagram, mindmap diagram, requirement diagram, xy chart, packet diagram, flowchart, pie chart, quadrant chart, state diagram, class diagram, Gantt chart, architecture diagram)**, which was a necessary feature in spectest.
15+
The markdown package was initially developed to save test results in [nao1215/spectest](https://github.com/nao1215/spectest). Therefore, the markdown package implements the features required by spectest. For example, the markdown package supports **mermaid diagrams (entity relationship diagram, sequence diagram, user journey diagram, git graph diagram, mindmap diagram, requirement diagram, xy chart, packet diagram, block diagram, flowchart, pie chart, quadrant chart, state diagram, class diagram, Gantt chart, architecture diagram)**, which was a necessary feature in spectest.
1616

1717
Additionally, complex code that increases the complexity of the library, such as generating nested lists, will not be added. I want to keep this library as simple as possible.
1818

@@ -45,6 +45,7 @@ Additionally, complex code that increases the complexity of the library, such as
4545
- [x] mermaid requirement diagram
4646
- [x] mermaid xy chart
4747
- [x] mermaid packet diagram
48+
- [x] mermaid block diagram
4849
- [x] mermaid entity relationship diagram
4950
- [x] mermaid flowchart
5051
- [x] mermaid pie chart
@@ -818,6 +819,81 @@ packet
818819
64-95: "Data (variable length)"
819820
```
820821

822+
### Mermaid block syntax
823+
824+
```go
825+
package main
826+
827+
import (
828+
"io"
829+
"os"
830+
831+
"github.com/nao1215/markdown"
832+
"github.com/nao1215/markdown/mermaid/block"
833+
)
834+
835+
//go:generate go run main.go
836+
837+
func main() {
838+
diagram := block.NewDiagram(
839+
io.Discard,
840+
block.WithTitle("Checkout Architecture"),
841+
).
842+
Columns(3).
843+
Row(
844+
block.Node("Frontend"),
845+
block.ArrowRight("toBackend", block.WithArrowLabel("calls")),
846+
block.Node("Backend"),
847+
).
848+
Row(
849+
block.Space(2),
850+
block.ArrowDown("toDB"),
851+
).
852+
Row(
853+
block.Node("Database", block.WithNodeLabel("Primary DB"), block.WithNodeShape(block.ShapeCylinder)),
854+
block.Space(),
855+
block.Node("Cache", block.WithNodeLabel("Cache"), block.WithNodeShape(block.ShapeRound)),
856+
).
857+
Link("Backend", "Database").
858+
LinkWithLabel("Backend", "reads from", "Cache").
859+
String()
860+
861+
if err := markdown.NewMarkdown(os.Stdout).
862+
H2("Block Diagram").
863+
CodeBlocks(markdown.SyntaxHighlightMermaid, diagram).
864+
Build(); err != nil {
865+
panic(err)
866+
}
867+
}
868+
```
869+
870+
Plain text output: [markdown is here](./doc/block/generated.md)
871+
````text
872+
## Block Diagram
873+
```mermaid
874+
block
875+
title Checkout Architecture
876+
columns 3
877+
Frontend toBackend<["calls"]>(right) Backend
878+
space:2 toDB<["&nbsp;"]>(down)
879+
Database[("Primary DB")] space Cache("Cache")
880+
Backend --> Database
881+
Backend -- "reads from" --> Cache
882+
```
883+
````
884+
885+
Mermaid output:
886+
```mermaid
887+
block
888+
title Checkout Architecture
889+
columns 3
890+
Frontend toBackend<["calls"]>(right) Backend
891+
space:2 toDB<["&nbsp;"]>(down)
892+
Database[("Primary DB")] space Cache("Cache")
893+
Backend --> Database
894+
Backend -- "reads from" --> Cache
895+
```
896+
821897
### Entity Relationship Diagram syntax
822898

823899
```go

doc/block/generated.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Block Diagram
2+
```mermaid
3+
block
4+
title Checkout Architecture
5+
columns 3
6+
Frontend toBackend<["calls"]>(right) Backend
7+
space:2 toDB<["&nbsp;"]>(down)
8+
Database[("Primary DB")] space Cache("Cache")
9+
Backend --> Database
10+
Backend -- "reads from" --> Cache
11+
```

doc/block/main.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
//go:build linux || darwin
2+
3+
// Package main is generating mermaid block diagram.
4+
package main
5+
6+
import (
7+
"io"
8+
"os"
9+
10+
"github.com/nao1215/markdown"
11+
"github.com/nao1215/markdown/mermaid/block"
12+
)
13+
14+
// This file is gated by //go:build linux || darwin, so //go:generate is skipped
15+
// on Windows. To regenerate generated.md on Windows, run under WSL or via CI.
16+
//go:generate go run main.go
17+
18+
func main() {
19+
f, err := os.Create("generated.md")
20+
if err != nil {
21+
panic(err)
22+
}
23+
defer func() {
24+
if err := f.Close(); err != nil {
25+
panic(err)
26+
}
27+
}()
28+
29+
diagram := block.NewDiagram(io.Discard, block.WithTitle("Checkout Architecture")).
30+
Columns(3). //nolint:mnd
31+
Row(
32+
block.Node("Frontend"),
33+
block.ArrowRight("toBackend", block.WithArrowLabel("calls")),
34+
block.Node("Backend"),
35+
).
36+
Row(
37+
block.Space(2), //nolint:mnd
38+
block.ArrowDown("toDB"),
39+
).
40+
Row(
41+
block.Node("Database", block.WithNodeLabel("Primary DB"), block.WithNodeShape(block.ShapeCylinder)),
42+
block.Space(),
43+
block.Node("Cache", block.WithNodeLabel("Cache"), block.WithNodeShape(block.ShapeRound)),
44+
).
45+
Link("Backend", "Database").
46+
LinkWithLabel("Backend", "reads from", "Cache").
47+
String()
48+
49+
err = markdown.NewMarkdown(f).
50+
H2("Block Diagram").
51+
CodeBlocks(markdown.SyntaxHighlightMermaid, diagram).
52+
Build()
53+
if err != nil {
54+
panic(err)
55+
}
56+
}

doc/es/README.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# ¿Qué es el paquete markdown?
1313
El paquete markdown es un constructor de markdown simple en Golang. El paquete markdown ensambla Markdown usando encadenamiento de métodos, no utiliza un motor de plantillas como [html/template](https://pkg.go.dev/html/template). La sintaxis de Markdown sigue **GitHub Markdown**.
1414

15-
El paquete markdown fue inicialmente desarrollado para guardar resultados de pruebas en [nao1215/spectest](https://github.com/nao1215/spectest). Por lo tanto, el paquete markdown implementa las características requeridas por spectest. Por ejemplo, el paquete markdown soporta **diagramas de secuencia mermaid (diagrama de relación de entidad, diagrama de secuencia, diagrama de recorrido del usuario, diagrama git graph, diagrama de mapa mental, diagrama de requisitos, gráfico XY, diagrama Packet, diagrama de flujo, gráfico circular, gráfico de cuadrantes, diagrama de estado, diagrama de clases, diagrama de Gantt, diagrama de arquitectura)**, que era una característica necesaria en spectest.
15+
El paquete markdown fue inicialmente desarrollado para guardar resultados de pruebas en [nao1215/spectest](https://github.com/nao1215/spectest). Por lo tanto, el paquete markdown implementa las características requeridas por spectest. Por ejemplo, el paquete markdown soporta **diagramas de secuencia mermaid (diagrama de relación de entidad, diagrama de secuencia, diagrama de recorrido del usuario, diagrama git graph, diagrama de mapa mental, diagrama de requisitos, gráfico XY, diagrama Packet, diagrama Block, diagrama de flujo, gráfico circular, gráfico de cuadrantes, diagrama de estado, diagrama de clases, diagrama de Gantt, diagrama de arquitectura)**, que era una característica necesaria en spectest.
1616

1717
Además, no se añadirá código complejo que aumente la complejidad de la biblioteca, como generar listas anidadas. Quiero mantener esta biblioteca lo más simple posible.
1818

@@ -42,6 +42,7 @@ Además, no se añadirá código complejo que aumente la complejidad de la bibli
4242
- [x] diagrama de requisitos mermaid
4343
- [x] gráfico XY mermaid
4444
- [x] diagrama Packet mermaid
45+
- [x] diagrama Block mermaid
4546
- [x] diagrama de relación de entidad mermaid
4647
- [x] diagrama de flujo mermaid
4748
- [x] gráfico circular mermaid
@@ -815,6 +816,81 @@ packet
815816
64-95: "Data (variable length)"
816817
```
817818

819+
### Sintaxis del diagrama Block de Mermaid
820+
821+
```go
822+
package main
823+
824+
import (
825+
"io"
826+
"os"
827+
828+
"github.com/nao1215/markdown"
829+
"github.com/nao1215/markdown/mermaid/block"
830+
)
831+
832+
//go:generate go run main.go
833+
834+
func main() {
835+
diagram := block.NewDiagram(
836+
io.Discard,
837+
block.WithTitle("Checkout Architecture"),
838+
).
839+
Columns(3).
840+
Row(
841+
block.Node("Frontend"),
842+
block.ArrowRight("toBackend", block.WithArrowLabel("calls")),
843+
block.Node("Backend"),
844+
).
845+
Row(
846+
block.Space(2),
847+
block.ArrowDown("toDB"),
848+
).
849+
Row(
850+
block.Node("Database", block.WithNodeLabel("Primary DB"), block.WithNodeShape(block.ShapeCylinder)),
851+
block.Space(),
852+
block.Node("Cache", block.WithNodeLabel("Cache"), block.WithNodeShape(block.ShapeRound)),
853+
).
854+
Link("Backend", "Database").
855+
LinkWithLabel("Backend", "reads from", "Cache").
856+
String()
857+
858+
if err := markdown.NewMarkdown(os.Stdout).
859+
H2("Block Diagram").
860+
CodeBlocks(markdown.SyntaxHighlightMermaid, diagram).
861+
Build(); err != nil {
862+
panic(err)
863+
}
864+
}
865+
```
866+
867+
Salida de texto plano: [markdown está aquí](../block/generated.md)
868+
````text
869+
## Block Diagram
870+
```mermaid
871+
block
872+
title Checkout Architecture
873+
columns 3
874+
Frontend toBackend<["calls"]>(right) Backend
875+
space:2 toDB<["&nbsp;"]>(down)
876+
Database[("Primary DB")] space Cache("Cache")
877+
Backend --> Database
878+
Backend -- "reads from" --> Cache
879+
```
880+
````
881+
882+
Salida Mermaid:
883+
```mermaid
884+
block
885+
title Checkout Architecture
886+
columns 3
887+
Frontend toBackend<["calls"]>(right) Backend
888+
space:2 toDB<["&nbsp;"]>(down)
889+
Database[("Primary DB")] space Cache("Cache")
890+
Backend --> Database
891+
Backend -- "reads from" --> Cache
892+
```
893+
818894
### Sintaxis del diagrama de relación de entidad
819895

820896
```go

doc/fr/README.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# Qu'est-ce que le package markdown
1313
Le package markdown est un constructeur de markdown simple en Golang. Le package markdown assemble le Markdown en utilisant le chaînage de méthodes, n'utilise pas un moteur de modèles comme [html/template](https://pkg.go.dev/html/template). La syntaxe de Markdown suit **GitHub Markdown**.
1414

15-
Le package markdown a été initialement développé pour sauvegarder les résultats de tests dans [nao1215/spectest](https://github.com/nao1215/spectest). Par conséquent, le package markdown implémente les fonctionnalités requises par spectest. Par exemple, le package markdown prend en charge **les diagrammes de séquence mermaid (diagramme de relation d'entité, diagramme de séquence, diagramme de parcours utilisateur, diagramme git graph, diagramme de carte mentale, diagramme d'exigences, graphique XY, diagramme Packet, organigramme, graphique en secteurs, graphique à quadrants, diagramme d'état, diagramme de classes, diagramme de Gantt, diagramme d'architecture)**, ce qui était une fonctionnalité nécessaire dans spectest.
15+
Le package markdown a été initialement développé pour sauvegarder les résultats de tests dans [nao1215/spectest](https://github.com/nao1215/spectest). Par conséquent, le package markdown implémente les fonctionnalités requises par spectest. Par exemple, le package markdown prend en charge **les diagrammes de séquence mermaid (diagramme de relation d'entité, diagramme de séquence, diagramme de parcours utilisateur, diagramme git graph, diagramme de carte mentale, diagramme d'exigences, graphique XY, diagramme Packet, diagramme Block, organigramme, graphique en secteurs, graphique à quadrants, diagramme d'état, diagramme de classes, diagramme de Gantt, diagramme d'architecture)**, ce qui était une fonctionnalité nécessaire dans spectest.
1616

1717
De plus, le code complexe qui augmente la complexité de la bibliothèque, tel que la génération de listes imbriquées, ne sera pas ajouté. Je veux garder cette bibliothèque aussi simple que possible.
1818

@@ -42,6 +42,7 @@ De plus, le code complexe qui augmente la complexité de la bibliothèque, tel q
4242
- [x] diagramme d'exigences mermaid
4343
- [x] graphique XY mermaid
4444
- [x] diagramme Packet mermaid
45+
- [x] diagramme Block mermaid
4546
- [x] diagramme de relation d'entité mermaid
4647
- [x] organigramme mermaid
4748
- [x] graphique en secteurs mermaid
@@ -815,6 +816,81 @@ packet
815816
64-95: "Data (variable length)"
816817
```
817818

819+
### Syntaxe du diagramme Block Mermaid
820+
821+
```go
822+
package main
823+
824+
import (
825+
"io"
826+
"os"
827+
828+
"github.com/nao1215/markdown"
829+
"github.com/nao1215/markdown/mermaid/block"
830+
)
831+
832+
//go:generate go run main.go
833+
834+
func main() {
835+
diagram := block.NewDiagram(
836+
io.Discard,
837+
block.WithTitle("Checkout Architecture"),
838+
).
839+
Columns(3).
840+
Row(
841+
block.Node("Frontend"),
842+
block.ArrowRight("toBackend", block.WithArrowLabel("calls")),
843+
block.Node("Backend"),
844+
).
845+
Row(
846+
block.Space(2),
847+
block.ArrowDown("toDB"),
848+
).
849+
Row(
850+
block.Node("Database", block.WithNodeLabel("Primary DB"), block.WithNodeShape(block.ShapeCylinder)),
851+
block.Space(),
852+
block.Node("Cache", block.WithNodeLabel("Cache"), block.WithNodeShape(block.ShapeRound)),
853+
).
854+
Link("Backend", "Database").
855+
LinkWithLabel("Backend", "reads from", "Cache").
856+
String()
857+
858+
if err := markdown.NewMarkdown(os.Stdout).
859+
H2("Block Diagram").
860+
CodeBlocks(markdown.SyntaxHighlightMermaid, diagram).
861+
Build(); err != nil {
862+
panic(err)
863+
}
864+
}
865+
```
866+
867+
Sortie de texte brut : [markdown est ici](../block/generated.md)
868+
````text
869+
## Block Diagram
870+
```mermaid
871+
block
872+
title Checkout Architecture
873+
columns 3
874+
Frontend toBackend<["calls"]>(right) Backend
875+
space:2 toDB<["&nbsp;"]>(down)
876+
Database[("Primary DB")] space Cache("Cache")
877+
Backend --> Database
878+
Backend -- "reads from" --> Cache
879+
```
880+
````
881+
882+
Sortie Mermaid :
883+
```mermaid
884+
block
885+
title Checkout Architecture
886+
columns 3
887+
Frontend toBackend<["calls"]>(right) Backend
888+
space:2 toDB<["&nbsp;"]>(down)
889+
Database[("Primary DB")] space Cache("Cache")
890+
Backend --> Database
891+
Backend -- "reads from" --> Cache
892+
```
893+
818894
### Syntaxe du diagramme de relation d'entité
819895

820896
```go

0 commit comments

Comments
 (0)