Диаграммы. Mermaid
- Язык рисования диаграмм Mermaid.
- Mermaid реализует концепцию Diagram as Code.
Содержание
1 Общая информация
- Mermaid — язык программирования для рисования диаграмм и библиотека для визуализации.
- Инструментарий написан на javascript.
1.1 Ресурсы
- Страница Mermaid: https://mermaid-js.github.io/
- Страница на github: https://github.com/mermaid-js/mermaid
- Утилита командной строки: https://github.com/mermaid-js/mermaid-cli
- HTTP сервер: https://github.com/TomWright/mermaid-server
- Онлайн редактор: https://mermaid-js.github.io/mermaid-live-editor/
1.2 Интеграция
- Интегрирован в системы рендеринга языка Markdown
- Pandoc: https://pandoc.org/
- Hugo: https://gohugo.io/
- Хостинги кода (в файлах
README.md
)- GitHub: https://github.com/
- GitLab: https://gitlab.com/
- Gitea: https://gitea.io/
- Приложения работы с текстом (markdown)
- Joplin: https://joplinapp.org/
- Notion: https://www.notion.so/
1.3 Внедрение Mermaid в Markdown
- Для блока кода, отмеченного как
mermaid
:- система создаёт новый фрейм
iframe
, - необработанный код из блока передаётся его в Mermaid.js,
- код преобразуется в диаграмму.
- система создаёт новый фрейм
- Пример входного кода
- Результирующее изображениеgraph TD; A-->B; A-->C; B-->D; C-->D;
1.4 Поддерживаемые типы диаграмм
- Блок-схемы (Flowchart)
- Диаграммы состояния (Sequence diagram)
- Диаграммы Ганта (Gantt diagram)
- UML-диаграммы классов (Class diagram)
- Графы git (Git graph)
- ER-диаграммы (Entity Relationship Diagram)
- Диаграммы пользовательского пути (User Journey Diagram)
- Диаграммы последовательности (Sequence diagrams)
- Круговые диаграммы (Pie chart)
1.5 Необходимое программное обеспечение
- Необходимо установить программу
mmdc
из проекта https://github.com/mermaid-js/mermaid-cli.1yarn global add @mermaid-js/mermaid-cli
2 Синтаксис
%%
: комментарий в коде.
3 Типы диаграмм
3.1 Блок-схемы (Flowchart)
- Один из вариантов представления блок-схем.
3.1.1 Синтаксис
Ключевое слово:
flowchart
и аббревиатуры для указания направления.subgraph <имя>
: задаёт поддиаграммы.end
: завершает описание поддиаграммы.
Основная часть диаграммы — это узлы.
- Текст на диаграмме узла берётся из названия.
- Альтернативно можно указать отображаемый текст в квадратных скобках.
- Форма узлов задаётся скобочными символами вокруг текста.
- Для экранирования используют кавычки.
- Всё содержимое в кавычках считается текстом.
click
: задаёт ссылку для узла.1click <узел> "<ссылка>" <_blank>
- Ссылка заключается в кавычки.
_blank
: указывает открыть ссылку в новой вкладке.
Направление диаграммы:
TB
: сверху вниз (top to bottom);TD
: сверху вниз (top-down);BT
: снизу вверх (bottom to top);RL
: справа налево (right to left);LR
: слева направо (left to right).
style
: задаёт оформление диаграммы.1style <узел> <style_tag:значение>,<style_tag:значение>
Теги стилей:
fill
: заливка;stroke
: цвет границы;stroke-width
: толщина границы;color
: цвет текста;stroke-dasharray
: пунктирная граница.
classDef
: задаёт класс, содержащий набор стилей.1classDef <имя_класса> <style_tag:значение>,<style_tag:значение>
:::
указывает класс после имени узла.
3.1.2 Примеры
Блок
flowchart TB nodeБлок с текстом
flowchart TB node[Текст]Формы узлов
1 flowchart TB 2 node1[Форма 1] 3 node2(Форма 2) 4 node3([Форма 3]) 5 node4[[Форма 4]] 6 node5[(Форма 5)] 7 node6((Форма 6)) 8 node7>Форма 7] 9 node8{Форма 8} 10 node9{{Форма 9}} 11 node10[/Форма 10/] 12 node11[\Форма 11\] 13 node12[/Форма 12\] 14 node13[\Форма 13/]
flowchart TB node1[Форма 1] node2(Форма 2) node3([Форма 3]) node4[[Форма 4]] node5[(Форма 5)] node6((Форма 6)) node7>Форма 7] node8{Форма 8} node9{{Форма 9}} node10[/Форма 10/] node11[\Форма 11\] node12[/Форма 12\] node13[\Форма 13/]Стрелки
flowchart TB А --> B C --- D E -.-> F G ==> H I --o J K --x LСтрелки с текстом
1 flowchart TD 2 A -- Text --- B 3 C --- |Text| D 4 E --> |Text| F 5 G -- Text --> H 6 I -. Text .-> J 7 K == Text ==> L
flowchart TD A -- Text --- B C --- |Text| D E --> |Text| F G -- Text --> H I -. Text .-> J K == Text ==> LПоддиаграммы
1 flowchart TB 2 c1 --> a2 3 subgraph one 4 a1 --> a2 5 end 6 subgraph two 7 b1 --> b2 8 end 9 subgraph three 10 c1 --> c2 11 end
flowchart TB c1 --> a2 subgraph one a1 --> a2 end subgraph two b1 --> b2 end subgraph three c1 --> c2 endСсылки
flowchart TB A --> B click A "http://www.github.com" _blankСтили
1 flowchart LR 2 id1(Start)-->id2(Stop) 3 style id1 fill:#3f3,stroke:#333,stroke-width:4px 4 style id2 fill:#ff2400,stroke:#333,stroke-width:4px,color:#fff,stroke-dasharray: 12 5
flowchart LR id1(Start)-->id2(Stop) style id1 fill:#3f3,stroke:#333,stroke-width:4px style id2 fill:#ff2400,stroke:#333,stroke-width:4px,color:#fff,stroke-dasharray: 12 5Классы стилей
1 flowchart LR 2 classDef class1 fill:#3f3,stroke:#333,stroke-width:4px 3 classDef class2 fill:#ff2400,stroke:#333,stroke-width:4px,color:#fff,stroke-dasharray: 12 5 4 5 A(Start):::class1 --> B(Stop):::class2
flowchart LR classDef class1 fill:#3f3,stroke:#333,stroke-width:4px classDef class2 fill:#ff2400,stroke:#333,stroke-width:4px,color:#fff,stroke-dasharray: 12 5 A(Start):::class1 --> B(Stop):::class2
3.2 Диаграммы состояния (Sequence diagram)
3.2.1 Синтаксис
3.2.2 Примеры
3.3 Диаграммы Ганта (Gantt diagram)
3.3.1 Синтаксис
3.3.2 Примеры
3.4 UML-диаграммы классов (Class diagram)
3.4.1 Синтаксис
3.4.2 Примеры
3.5 Графы git (Git graph)
- Описание стратегии ветвления git.
3.5.1 Синтаксис
- Ключевое слово:
gitGraph
. options
: задаёт параметры отображения.commit
: отображается кружочком с хешем.- Хеш коммита генерится автоматически.
checkout <branch>
: переключает на новую ветку.merge <branch>
: сливает ветки.
3.5.2 Примеры
Простое ветвление
1 gitGraph: 2 options 3 { 4 "nodeSpacing": 100, 5 "nodeRadius": 10 6 } 7 end 8 commit 9 branch newbranch 10 checkout newbranch 11 commit 12 commit 13 checkout master 14 commit 15 commit 16 merge newbranch
gitGraph: options { "nodeSpacing": 100, "nodeRadius": 10 } end commit branch newbranch checkout newbranch commit commit checkout master commit commit merge newbranch
3.6 ER-диаграммы (Entity Relationship Diagram)
3.6.1 Синтаксис
3.6.2 Примеры
3.7 Диаграммы пользовательского пути (User Journey Diagram)
- С помощью диаграммы пользовательского пути можно продемонстрировать процесс использования или реализации чего-либо.
- Указывается набор пользователей и их удовлетворение процессом.
3.7.1 Синтаксис
journey
: начинает диаграмму.title
: название диаграммы.section
: раздел диаграммы.- В каждом разделе указываются конкретные шаги с оценкой по десятибалльной шкале и закреплённое за действием лицо.
:
разделитель полей.
3.7.2 Примеры
Простая диаграмма пользовательского пути
1 journey 2 title Процесс написания статьи 3 section Поиск / изучение 4 Поиск информации: 5: Я 5 Структурирование: 5: Я 6 section Пишем 7 Пишем черновик: 5: Я 8 Готовим картинки: 4: Я 9 section Редактируем 10 Проверяем: 3: Я, Соавтор 11 Финальные правки: 2: Я 12 section Публикация 13 Публикуем: 5: Я 14 Радуемся: 8: Я, Соавтор
journey title Процесс написания статьи section Поиск / изучение Поиск информации: 5: Я Структурирование: 5: Я section Пишем Пишем черновик: 5: Я Готовим картинки: 4: Я section Редактируем Проверяем: 3: Я, Соавтор Финальные правки: 2: Я section Публикация Публикуем: 5: Я Радуемся: 8: Я, Соавтор
3.8 Диаграммы последовательности (Sequence diagrams)
3.8.1 Синтаксис
3.8.2 Примеры
3.9 Круговые диаграммы (Pie chart)
- Показывает, какую часть от общего числа занимает отдельные части.
3.9.1 Синтаксис
- Ключевое слово:
pie
. - Оператор
title
позволяет задать название диаграммы.title
можно опустить, тогда диаграмма будет безымянной.
- Строки с названиями элементов.
- Данные записываются построчно следующим образом:
- название в кавычках;
- разделитель в виде двоеточия;
- положительное числовое значение (поддерживается до двух знаков после запятой).
- Данные записываются построчно следующим образом:
3.9.2 Примеры
Домашние животные
pie title Домашние животные "Собаки" : 386 "Кошки" : 85 "Хомячки" : 15