Dhole
Dhole 是一種以文字編寫圖表和示意圖的小型語言。你在第一行寫明要畫什麼,在後續各行說明它展示的內容;Dhole 會負責佈局並將其繪製出來。
flowchart Making tea
Thirsty? [start] -> Boil the kettle -> Tea or coffee?
Tea or coffee? -> Steep the tea: tea
Tea or coffee? -> Brew the coffee: coffee
Steep the tea -> Enjoy [end, good]
Brew the coffee -> Enjoy

在互動演示中試一試 —— 在瀏覽器中編寫 Dhole,邊輸入邊檢視繪製結果。
以文字編寫的示意圖寫起來快、改起來容易 —— 加一行,圖中就會為它騰出位置 —— 而且它本身就可以閱讀,無論是在文件、訊息還是版本歷史中。Dhole 通過 Divooka 的繪圖框架進行繪製,因此 Dhole 示意圖和其他圖表並無二致:它可以在節點上預覽,可以應用主題,還可以儲存為任意解析度的圖片、SVG、PDF 或 PowerPoint 投影片。
它能畫什麼
| 種類 | 首個單詞 | 頁面 |
|---|---|---|
| 流程圖 | flowchart |
流程圖 |
| 時序圖 | sequence |
時序圖 |
| 狀態圖 | state |
狀態圖 |
| 類圖 | class |
類圖 |
| 實體圖 | entity |
實體圖 |
| 思維導圖和組織結構圖 | mindmap |
思維導圖 |
| 時間線 | timeline |
時間線 |
| 甘特圖 | gantt |
甘特圖 |
| 餅圖、環形圖、條形圖、折線圖、散點圖和雷達圖 | pie, donut, bar, line, xy, radar |
圖表 |
| 象限圖 | quadrant |
象限圖 |
| 桑基圖 | sankey |
桑基圖 |
| 表格和看板 | table, kanban |
表格和看板 |
閱讀順序
- 教程 —— 在 Divooka Compute 中繪製你的第一張示意圖,從示例開始,到寫出你自己的文字。
- 語言 —— 所有種類共通的內容:第一行、設定、名稱、標籤、特性、顏色、箭頭、縮排、在一段文字中編寫多張示意圖,以及主題。
- 上面每個種類各自的頁面,列出了它接受的所有詞。
- 問題 —— 當 Dhole 無法按所寫內容讀懂文字時會給出什麼提示,以及如何修正。
- 示例 —— Divooka Compute 附帶的 Dhole 示例。
- Dhole 與 Mermaid —— 寫給熟悉 Mermaid 的人:哪些相同、哪些不同,以及原因。
網頁上的 Dhole
- 互動演示 —— 編寫 Dhole,邊輸入邊檢視繪製結果,每個種類都提供一個示例作為起點。
- 在網頁上使用 Dhole —— 只需從 CDN 引入一個指令碼,即可在任意頁面上繪製 Dhole:使用
<dhole-diagram>元素、一次性繪製所有dhole程式碼塊,或通過 JavaScript。它以 MIT 許可證釋出在 MethodoxTech/MethodoxDhole 中。
Divooka 中的 Dhole
Plotting 工具箱中有三個節點,由 Data Analytics 工作負載提供:
- Draw Dhole,位於 Dhole 類別中,接受 Dhole 文字並輸出圖表,同時在其 Problems 輸出上將文字中的每個問題作為一行給出。執行之後選中它,即可在 Properties 中檢視圖片。
- Describe Dhole,位於 Dhole 類別中,接受 Dhole 文字並給出一句話,說明它畫的是什麼 —— A flowchart of 6 steps and 6 arrows. —— 這正是為看不見圖片的人所需的文字說明。
- Write Dhole,位於 Dhole 類別中、Draw Dhole 旁邊,把文字儲存在節點上。按兩下它會開啟卡片,左側是文字,右側是圖片,每次修改後稍等片刻即會重新繪製,文字中的任何錯誤都列在它們下方。

Draw Dhole 輸出的圖表可以用在任何能用圖表的地方:傳入 Save Chart 寫出 PNG、SVG、PDF 或 Office 文件,傳入 Set Theme 重新著色,或放進報告中。
程式碼中的 Dhole
包名為 Divooka.Visualization.Dhole,語言規範位於其旁邊的 Dhole Language.md 中。
using Divooka.Visualization.Dhole;
DholeResult result = Dhole.Read(text); // the figure, every problem, and a sentence of what was drawn
foreach (DholeProblem problem in result.Problems)
Console.WriteLine(problem); // Line 3, column 7: 'lots' is not a number. Write a number with a dot for its decimals, such as 12.5.
result.Figure?.SavePng("diagram.png", 192); // or SaveSvg, SavePdf, SavePptx, ToImage
Figure figure = Dhole.Draw(text); // throws DholeException only when nothing in the text can be drawn
同樣的文字在任何機器上總是得到同樣的圖片:Dhole 中沒有任何部分會讀取時鐘、區域性設定或隨機數。
參考資料
- Divooka 中的繪圖
- Mermaid,Dhole 曾借鑑於它