``` ███╗ ███╗ ██████╗ ███╗ ██╗ ██████╗ ██████╗ ██╗ █████╗ ██████╗ ██████╗ █████╗ ███╗ ███╗ ████╗ ████║██╔═══██╗████╗ ██║██╔═══██╗ ██╔══██╗██║██╔══██╗██╔════╝ ██╔══██╗██╔══██╗████╗ ████║ ██╔████╔██║██║ ██║██╔██╗ ██║██║ ██║█████╗██║ ██║██║███████║██║ ███╗██████╔╝███████║██╔████╔██║ ██║╚██╔╝██║██║ ██║██║╚██╗██║██║ ██║╚════╝██║ ██║██║██╔══██║██║ ██║██╔══██╗██╔══██║██║╚██╔╝██║ ██║ ╚═╝ ██║╚██████╔╝██║ ╚████║╚██████╔╝ ██████╔╝██║██║ ██║╚██████╔╝██║ ██║██║ ██║██║ ╚═╝ ██║ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ```


Mono-Diagram

crates.io License

[English](./README.md) | [简体中文](./README-zh-CN.md)
mono-diagram 是一个跨平台的生成纯文本图表的工具。纯文本图表的优势在于可以在任何地方显示,比如用在代码注释中。 ## 使用方法 ### 定义图表 使用 mono-diagram 的基本思路是写一个包含一个或多个图表定义的文件,然后传入程序,程序会生成图表。每个图表开头需要用标签声明图标类型。
二叉树 标签: `[binary_tree]` 输入: ``` [binary_tree] {style: ascii} // 声明标签 a->b,c // 节点a有左子树b和右子树c b->d,f // 节点名字类似于变量名 f->fa,fb c->k,m k->e, // k只有左子树 m->,x a:2 // 给每个节点名赋值 b:0.42 c:9.5 f:-3 k:abc m:2 // 不同的节点可以有相同的值 d:001 fa:451 fb:8.90 x:1.2 ``` 花括号中的键值对用于设置图表属性,此处将`style`设置为`ascii`, 你也可以设置为`unicode`。如果不设置,将会使用默认值。 输出 (ascii): ``` ___2___ ___/ \___ 0.42 9.5 _/ \_ _/ \_ 001 -3 abc 2 / \ / \ 451 8.90 e 1.2 ``` 输出 (unicode): ``` 2 ┌───────┴───────┐ 0.42 9.5 ┌───┴───┐ ┌───┴───┐ 001 -3 abc 2 ┌─┴─┐ ┌─┘ └─┐ 451 8.9 e 1.2 ``` *注: 二叉树最底层节点只能最多容纳三个字符,对于更复杂的节点值建议使用有向非循环图*
有向非循环图 (DAG) 标签: `[dag]` 输入: ``` [dag] a->b // 节点名->节点名 代表一条边 a->c // 有向非循环图不能含有循环 b->d c->f c->g a->f d->da d->db g->gg a->gg a:Home Page // 赋值 b:Main Section 1 c:Main Section 2 d:Subsection 1 f:Subsection 2 g:Subsection 3 da:Sub-sub db:Sub-sub gg:#page# ``` 输出 (只有unicode版本): ``` ┌───────────────────────────────────────────────────┐ │ Home Page │ └┬─────────────────┬──┬────────────────────────────┬┘ ┌V───────────────┐ │ ┌V───────────────┐ │ │ Main Section 1 │ │ │ Main Section 2 │ │ └┬───────────────┘ │ └┬────────────┬──┘ │ ┌V─────────────┐ ┌─V──V─────────┐ ┌V─────────────┐ │ │ Subsection 1 │ │ Subsection 2 │ │ Subsection 3 │ │ └┬───────────┬─┘ └──────────────┘ └┬─────────────┘ │ ┌V────────┐ ┌V────────┐ ┌──────────V───────────────V┐ │ Sub-sub │ │ Sub-sub │ │ #page# │ └─────────┘ └─────────┘ └───────────────────────────┘ ``` *注:此生成不稳定,每次生成可能会得到不同的图*
表格 标签: `[table]` 输入: ``` [table] // 每列用 '|' 分隔,每行用换行分隔 Base Class Member|Public Inheritance|Protected Inheritance|Private Inheritance Public|Public|Protected|Private Protected|Protected|Protected|Private Private|Hidden|Hidden|Hidden ``` 输出 (ascii): ``` +-------------------+--------------------+-----------------------+---------------------+ | Base Class Member | Public Inheritance | Protected Inheritance | Private Inheritance | +-------------------+--------------------+-----------------------+---------------------+ | Public | Public | Protected | Private | +-------------------+--------------------+-----------------------+---------------------+ | Protected | Protected | Protected | Private | +-------------------+--------------------+-----------------------+---------------------+ | Private | Hidden | Hidden | Hidden | +-------------------+--------------------+-----------------------+---------------------+ ``` 输出 (unicode): ``` ┌───────────────────┬────────────────────┬───────────────────────┬─────────────────────┐ │ Base Class Member │ Public Inheritance │ Protected Inheritance │ Private Inheritance │ ├───────────────────┼────────────────────┼───────────────────────┼─────────────────────┤ │ Public │ Public │ Protected │ Private │ ├───────────────────┼────────────────────┼───────────────────────┼─────────────────────┤ │ Protected │ Protected │ Protected │ Private │ ├───────────────────┼────────────────────┼───────────────────────┼─────────────────────┤ │ Private │ Hidden │ Hidden │ Hidden │ └───────────────────┴────────────────────┴───────────────────────┴─────────────────────┘ ```
网格 标签: `[grid]` 输入: ``` [grid] width: 10 // 10列 height: 7 // 7行 1,1:a 6,2:l // 第六列第二行的节点值为 'l' 3,3:j 10,5:m 2,7:k ``` 输出 (ascii): ``` +---+---+---+---+---+---+---+---+---+---+ | a | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | l | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | j | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | m | +---+---+---+---+---+---+---+---+---+---+ | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ | | k | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+ ``` 输出 (unicode): ``` ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ │ a │ │ │ │ │ │ │ │ │ │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ │ │ │ │ l │ │ │ │ │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ │ j │ │ │ │ │ │ │ │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ │ │ │ │ │ │ │ │ │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ │ │ │ │ │ │ │ │ m │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ │ │ │ │ │ │ │ │ │ ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ │ │ k │ │ │ │ │ │ │ │ │ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘ ```
甘特图 Tag: `[gantt]` 输入: ``` [gantt] {style: unicode} timeline: Week 1|Week 2|Week 3|Week 4|Week 5 // 时间轴 task 1| 0 ~ 0.6 // 每个task的起止时间 task 2| 0.9 ~ 2.3 // task 2 开始于第0.9周,结束于第2.3周 task 3| 2.0 ~ 2.8 task 4| 2.8 ~ 3.5 task 5| 3.5 ~ 5.0 ``` 输出 (ascii): ``` | Week 1 | Week 2 | Week 3 | Week 4 | Week 5 --------+----------+----------+----------+----------+----------- task 1 |<=====> . . . . task 2 | <===============> . . task 3 | . .<=======> . . task 4 | . . <=======> . task 5 | . . . <================> | ``` 输出 (unicode): ``` Week 1 Week 2 Week 3 Week 4 Week 5 ──────────────────────────────────────────────────────────────── task 1 │[━━━━━] · · · · task 2 │ [━━━━━━━━━━━━━━━] · · task 3 │ · ·[━━━━━━━] · · task 4 │ · · [━━━━━━━] · task 5 │ · · · [━━━━━━━━━━━━━━━━] │ ```
时间轴 Tag: `[timeline]` 输入: ``` [timeline] {style: unicode} 2022.06|Some things happened in 2022 // 格式为
### 属性 属性用于设置图表的风格 格式为: ``` [] {, , ...} ... ``` 所有属性: - `style`: `ascii` / `unicode` 目前只有一个属性,未来会添加更多 ### 命令行参数 ``` 用法: mono-diagram [OPTIONS] 参数: 文件路径 选项: -p, --prefix 给输出的每行加一个前缀 可用于代码注释 -c, --copy 复制到剪贴板 -h, --help Print help (see a summary with '-h') -V, --version Print version ``` #### 示例命令 ```bash mono-diagram examples/test -c -p "# " ``` ## 安装 请先安装 [rust](https://www.rust-lang.org/tools/install) 然后运行命令: ~~~bash cargo install mono-diagram ~~~ ## TODO 1. dag 中的节点可以是表格 (这样就可以画类图) 2. 优化 dag 中边的绘制 3. 增加韦恩图 4. 增加时序图 5. 增加表格的单元格合并 ## 贡献和帮助 非常欢迎 contribution,就算只是 contribute idea 也很欢迎 如有 bug 请开 issue (dag 应该是有 bug 的)