0%

graph-easy使用简介

Graph::Easy 是一个处理图形DSL的Perl模块,它有如下功能:

  • 提供了一种易懂,可读性很强的图形描述语言
  • 一种支持 ASCII Art 的基于网格的布局器
  • 可以导出为 Graphviz, VCG (Visualizing Compiler Graphs), GDL (Graph Description LAnguages) 和 GraphML 格式。
  • 可以从 Graphviz, VCG 和 GDL 导入图像。

1. graph-easy 安装

1.1 安装perl

1
# yum install perl

1.2 安装Graph::Easy

1
2
3
4
5
# 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.

2. graph-easy 语法

graph-easy 语法都是基于 Graph::Easy::Parser

2.1 节点

  • 单节点:即单个节点,用[xx]表示,比如[a]那出来的就一个节点

    1
    2
    3
    +---+
    | a |
    +---+
  • 复合节点:由多个节点组成的一个符合节点,用[xx | xx | xx]表示,节点之间使用|分隔,比如[a | b | c | d]

    1
    2
    3
    +---+---+---+---+
    | a | b | c | d |
    +---+---+---+---+

2.2 连接线

  • 单向箭头:使用->表示,比如[a] -> [b](如果有多个节点):

    1
    2
    3
    +---+     +---+
    | a | --> | b |
    +---+ +---+
  • 无方向连接线:使用–表示,比如[a] – [b]:

    1
    2
    3
    +---+     +---+
    | a | --- | b |
    +---+ +---+
  • 双横线单向箭头:使用==>表示,比如[a] ==> [b]:

    1
    2
    3
    +---+     +---+
    | a | ==> | b |
    +---+ +---+
  • 点横线单向箭头:使用..>表示,比如[a] ..> [b]:

    1
    2
    3
    +---+     +---+
    | a | ..> | b |
    +---+ +---+
  • 波浪线单向箭头:使用>表示,比如[a] ~> [b]:

    1
    2
    3
    +---+     +---+
    | a | ~~> | b |
    +---+ +---+
  • 横线、点单向箭头:使用.->表示,比如[a] .-> [b]:

    1
    2
    3
    +---+     +---+
    | a | .-> | b |
    +---+ +---+
  • 双向箭头:使用<->表示,比如[a] <-> [b]:

    1
    2
    3
    +---+      +---+
    | a | <--> | b |
    +---+ +---+
  • 双横线双向箭头:使用<=>表示,比如[a] <=> [b]:

    1
    2
    3
    +---+      +---+
    | a | <==> | b |
    +---+ +---+

2.3 注释

  • 文档注释:在输入文件中同样支持注释(和普通配置文件的注释没啥区别),使用#开始:

    1
    2
    3
    # top
    [a] <=> [b] # mid
    # test
  • 连接线注解:通常在节点之间连线时会在上面加一些说明表示行为说明,可以在连接线标签后面追加{label: “说明”}(建议加上双引号,如果注解中有空格的话可能会造成阅读上的困难),比如[a] – {label: “this is test line”} [b]:

    1
    2
    3
    +---+  this is test line   +---+
    | a | -------------------- | b |
    +---+ +---+

3. 示例

3.1 画个分支

1
2
3
4
5
6
7
8
9
10
# graph-easy <<< '[a]->[b]->[c][b]->[d]->[e]'
+---+ +---+ +---+ +---+
| a | --> | b | --> | d | --> | e |
+---+ +---+ +---+ +---+
|
|
v
+---+
| c |
+---+

3.2 设置”宽度”

1
2
3
4
5
6
7
# graph-easy <<< '[a]{rows:3}->[b]->[c]->[a]'
+---+ +---+ +---+
| | --> | b | --> | c |
| a | +---+ +---+
| | |
| | <---------------+
+---+

3.3 环绕线框图

1
2
3
4
5
6
7
8
9
# graph-easy <<< '(backend: [a]->[b])[b]->[c]'
+ - - - - - - - - - - -+
' backend: '
' '
' +--------+ +---+ ' +---+
' | a | --> | b | ' --> | c |
' +--------+ +---+ ' +---+
' '
+ - - - - - - - - - - -+

3.4 graph文件方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# cat input.txt
[task] -> [Created] -> [Audit 1] -> [Audit 2] -> [Execute Task]
[Audit 1] ..> [Created]
[Audit 2] ..> [Created]

# graph-easy -i input.txt

.................
v :
+------+ +---------+ +---------+ +---------+ +--------------+
| task | --> | Created | --> | Audit 1 | --> | Audit 2 | --> | Execute Task |
+------+ +---------+ +---------+ +---------+ +--------------+
^ :
.................................

更多示例:https://github.com/ironcamel/Graph-Easy/tree/master/t/txt

参考:
Graph::Easy
man graph-easy
Github Graph-Easy
关于GraphEasy的简单捣腾
有趣的图制作工具graph-easy

欢迎关注我的其它发布渠道