graph-easy 绘制流程图

前几天安装了 slides 这个工具,它有个挺有趣的功能,可以展示简单的流程图,便进一步学习了下 graph-easy 这个工具的使用。

一些简易流程图,如果用visio等工具来作图比较麻烦。使用 graph-easy 会简单的多,例如:

image-20210713142245900

image-20210713142255964

一、背景

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]

参考资料


linux tc 流量控制备忘 kubernetes cpu绑核配置