graph-easy 绘制流程图
2021-07-12 tech linux perl 8 mins 2 图 3001 字
前几天安装了 slides 这个工具,它有个挺有趣的功能,可以展示简单的流程图,便进一步学习了下 graph-easy 这个工具的使用。
一些简易流程图,如果用visio等工具来作图比较麻烦。使用 graph-easy 会简单的多,例如:
一、背景
Graph::Easy 是一个处理图形DSL的Perl模块,它有如下功能:
- 提供了一种易懂,可读性很强的图形描述语言
- 一种支持 ASCII Art 的基于网格的布局器
- 可以导出为 Graphviz, VCG (Visualizing Compiler Graphs), GDL (Graph Description LAnguages) 和 GraphML 格式。
- 可以从 Graphviz, VCG 和 GDL 导入图像。
二、安装
2.1 源码安装
这里以centos 7为例进行安装。可以从graph-easy 官网 进行下载包。
//下载安装包
wget https://cpan.metacpan.org/authors/id/S/SH/SHLOMIF/Graph-Easy-0.76.tar.gz
//解决依赖与编译安装
yum install perl perl-ExtUtils-MakeMaker graphviz
Makefile.PL
make test
make install
2.2 软件包安装
# centos
yum install perl
yum install graphviz
# debian
apt-get install perl
apt-get install graphviz
# 安装上述软件后安装 Graph::Easy
perl -MCPAN -e shell
cpan[1]> install Graph::Easy
graph-easy -version
Graph::Easy v0.76 (c) by Tels 2004-2008. Released under the GPL 2.0 or later.
三、使用
第三章内容转载原文:graph easy绘制ascii简易流程图 - Xinkun Blog, 有修改。
3.1 hello world
先来一个入门的hello world。
[root@host /]# echo '[hello]->[world]' | graph-easy
+-------+ +-------+
| hello | --> | world |
+-------+ +-------+
graph-easy 的语法相对来说比较宽松,[hello]->[world]
,[hello]-->[world]
,[ hello ]-->[ world ]
都是可以的。这里可以根据个人的风格。我比较喜欢紧凑的风格。所以后面都是使用紧凑的方式来做。
3.2 线上加个上标
有时候要在连接线上加一个标志说明,比如我想要表明从上海坐车到北京,则可以使用下面的方式:
[root@host /]# echo "[shanghai]-- car -->[beijing]" | graph-easy
+----------+ car +---------+
| shanghai | -----> | beijing |
+----------+ +---------+
3.3 画一个环
[root@host /]# echo "[a]->[b]->[a]" | graph-easy
+---------+
v |
+---+ +---+
| a | --> | b |
+---+ +---+
[root@host /]# echo "[a]->[a]" | graph-easy
+--+
v |
+------+
| a |
+------+
3.4 多个目标或者多个源
[root@host /]# echo "[a],[b]->[c]" | graph-easy
+---+ +---+ +---+
| a | --> | c | <-- | b |
+---+ +---+ +---+
[root@host /]# echo "[a]->[b],[c]" | graph-easy
+---+ +---+
| a | --> | b |
+---+ +---+
|
|
v
+---+
| c |
+---+
3.5 多个流程在一个图内
[root@host /]# echo "[a]->[b] [c]->[d]" | graph-easy
+---+ +---+
| a | --> | b |
+---+ +---+
+---+ +---+
| c | --> | d |
+---+ +---+
3.6 改变图方向
默认图方向是从左到右的。有时候想要从上向下的流程图。可以用标签来调整
[root@host /]# echo "graph{flow:south} [a]->[b]" | graph-easy
+---+
| a |
+---+
|
|
v
+---+
| b |
+---+
更多示例:https://github.com/ironcamel/Graph-Easy/tree/master/t/txt
四、语法
graph-easy 语法都是基于 Graph::Easy::Parser
4.1 节点
-
单节点:即单个节点,用[xx]表示,比如[a]那出来的就一个节点
-
复合节点:由多个节点组成的一个复合节点。
用[xx | xx | xx]表示,节点之间使用|分隔,比如[a | b | c | d]
4.2 连接线
- 单向箭头:使用->表示,比如[a] -> [b]
- 无方向连接线:使用–表示,比如[a] – [b]
- 双横线单向箭头:使用==>表示,比如[a] ==> [b]
- 点横线单向箭头:使用…>表示,比如[a] …> [b]
- 波浪线单向箭头:使用~~>表示,比如[a] ~~> [b]
- 横线、点单向箭头:使用.->表示,比如[a] .-> [b]
- 双向箭头:使用<->表示,比如[a] <-> [b]
- 双横线双向箭头:使用<=>表示,比如[a] <=> [b]