Bear Su's Blog

Draw ASCII Diagram with Graph-Easy

Table of Contents

因為想要用 ASCII 畫圖,上網搜尋了一番

需求是可以用指令產生,不依賴 java

最後找到了 graph-easy

這是 perl 的模組,可以用來繪製 ASCII Diagram,也能匯出成許多格式

Install

這模組依賴 graphviz 所以需要先安裝,在 OSX 可以用 Homebrew 安裝

brew install graphviz

再來要透過 cpan 安裝此模組,於指令列輸入

cpan

cpan 是 perl 的模組安裝工具, OSX 或是 Linux 上都有預設安裝

如果還沒有用過 cpan 的話,輸入後就一直 YES 下去,直到再次跳出輸入提示

cpan[1]> install Graph::Easy

如果沒有權限的話,就先輸入 exit 退出 cpan,用 sudo 轉成 root 身份執行 cpan 安裝

sudo cpan
cpan[1]> install Graph::Easy

Usage

詳細文件請參考:http://bloodgate.com/perl/graph/manual/

https://github.com/ironcamel/Graph-Easy/tree/master/t/txt 有許多範例

主要透過 graph-easy source.txt 指令來產生圖形

註解使用 # ,但記得要接個一個空白再寫內容

#不OK
# OK

node 用 [] 表示,預設裡面的內容是 label 的值

[A]

# 產生

+---+
| A |
+---+

如果要產生兩個同個標籤的 node,就需要用到 attribute 來指定標籤

{} 包起來的就是 attribute,跟在 node 與 edge 後面就能夠設定

node 是用 [] 包起來的內容來區分不同的 node

[0] { label: A; }
[1] { label: B; }

[0] -- [1]

# 產生

+---+     +---+
| A | --- | B |
+---+     +---+

你也可以讓 node 看起來長一點,不過這需要多一點關聯才會看到效果

[0] { label: A; rows: 3; }
[1] { label: B; }

[0] --> [1]
[1] --> [0]

# 產生

+---+     +---+
|   | --> | B |
| A |     +---+
|   |       |
|   | <-----+
+---+

edge 有很多種樣式

->
=>
.>
~>
- >
.->
..->
= >

選擇圖形的方向,預設是 east

[0] { label: A; flow: south; }
[1] { label: B; }

[0] -- [1]

# 產生

+---+
| A |
+---+
  |
  |
  |
+---+
| B |
+---+

如果想要預設所有 node 或是 edge 的屬性,可以用 graph {}edge {} 設定

graph {
  flow: south;
}

edge {
  label: go;
}

[0] { label: A; }
[1] { label: B; }

[0] -- [1]

# 產生

+-----+
|  A  |
+-----+
  |
  | go
  |
+-----+
|  B  |
+-----+

groups

( group name
  [A]
)

# 產生

+ - - - - - - -+
' group name   '
'              '
' +----------+ '
' |    A     | '
' +----------+ '
'              '
+ - - - - - - -+

Reference

ASCII Art:使用纯文本流程图

Graph-Easy

Graph::Easy - Manual


如果覺得這篇文章對您有所幫助,歡迎贊助我一杯咖啡 ☕️

祝您有美好的一天 ❤️