输出

阅读本章之前,请先阅读概论

本章说明了Graph::Easy支持的输出格式以及各种格式的限制,优点以及缺点。

格式

Graph::Easy可以产生如下几种输出格式:

  • ASCII:使用ASCII art绘制图形
  • Box Art: 使用Unicode的"box drawing" 字符创建文本图形
  • HTML: 使用HTML+CSS代码来渲染图形
  • SVG: 产生可伸缩矢量图形输出

另外,可以用以下几种描述语言来描述图形:

  • txt: Graph::Easy自定义的文本描述语言,用Graph::Easy的解析起解析
  • graphviz : 使用graphviz语言,可以通过某些外部程序比如dot 生成PNG, SVG等输出
  • GraphML : GraphML语言
  • yED : yED语言

ASCII

ASCII格式的输出只能有两种颜色,一个是前景色,一个是背景色。

  1. #============================================#
  2. H v
  3. +---------+ ........ +---------+ +--------+ +--------+
  4. | Bautzen | --> : Bonn : --> | Koblenz | --> | Berlin | --> | Kassel |
  5. +---------+ :......: +---------+ +--------+ +--------+
  6. ^ | ^ ^
  7. : +------------+---------------+
  8. : |
  9. : +------+ |
  10. ............. | Ulm | ------+
  11. +------+

这种格式有如下限制:

  • 不论真实的边的箭头如何,这种格式的箭头永远是打开的
  • 节点的形状不支持多边形或者圆角
  • 以下几种边bold, broadwide都用#渲染,因此看起来是一样的.

Box Art

这种方式和ASCII原理差不多,但是使用它Unicode的box art字符;这种方式边角之间的空隙更小,因此看起来效果好很多。Box ArtASCII的限制差不多,但是有以下不同:

  • 边角看起来更好
  • 支持圆角
  • 支持不同的箭头风格
  • 边的几种风格bold, broadwide可以正常使用
  1. My sample graph
  2. Test
  3. label
  4. ┌···············································┐
  5. : v
  6. ┌─────────────┐ label ▛▀▀▀▀▀▀▜ ┌───────┐
  7. One ───────> Two ▬▬▬▬▬▬▬▬▬▬▬▬> Four ··· None
  8. └─────────────┘ ▙▄▄▄▄▄▄▟ └───────┘
  9. Test label
  10. ┌╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴╴┐
  11. v v
  12. ┌−−−−−−−−−−−−−┐ ████████ ┏━━━━━━━┓ ┌───────┐
  13. ┌·······╎ Three <══════> Five ────────────> Seven ─── Eight
  14. : └−−−−−−−−−−−−−┘ ████████ ┗━━━━━━━┛ └───────┘
  15. : ^ ^
  16. :
  17. : Test Test label └────────────────────────────────────┘
  18. : label v
  19. : ┌─────────────┐
  20. : Sixty
  21. : Six
  22. : and
  23. └······>│ six
  24. └─────────────┘

HTML

HTML效果看起来如下:

输出 - 图1

SVG/GraphML/yED