Graph-Easy动画支持与MediaWiki集成:在Wiki页面嵌入动态流程图
【免费下载链接】Graph-EasyConvert or render graphs (as ASCII, HTML, SVG or via Graphviz)项目地址: https://gitcode.com/gh_mirrors/gr/Graph-Easy
Graph-Easy是一款 Perl 图渲染引擎,能将简单的文本描述转换为 HTML、SVG、ASCII 等多种格式,并通过内置的output属性与MediaWiki深度集成,让 Wiki 页面直接展示可交互的动态流程图。本文带你快速完成从零到"在 Wiki 里画出流程图"的全过程。
📌 Graph-Easy 能做什么?
Graph-Easy 用极简语法描述图结构,例如:
[ Bonn ] -> [ Berlin ] [ Berlin ] -> [ Frankfurt ] { border: 1px dotted black; } [ Frankfurt ] -> [ Dresden ]经过自动布局引擎处理后,可输出为HTML 表格 + CSS、SVG 矢量图、ASCII 字符画或Graphviz DOT四种形式。其中 HTML 和 SVG 输出天然运行在浏览器中,支持 CSS 悬停、过渡、缩放等动态效果——这就是"动态流程图"的核心来源。
核心渲染逻辑位于 lib/Graph/Easy.pm,output()方法会根据图中声明的格式自动调用对应的渲染器。
🔗 MediaWiki 集成:output属性是关键
Graph-Easy 为 MediaWiki 环境预留了一个专用属性output,它在图定义中声明期望的输出格式:
graph { output: html; } [ 需求分析 ] -> [ 架构设计 ] -> [ 编码实现 ]在 lib/Graph/Easy/Attributes.pm 中可以看到,output支持以下格式:
| 格式值 | 说明 | 适用场景 |
|---|---|---|
html | 生成 HTML 表格 + CSS | Wiki 页面内嵌(推荐) |
svg | 生成 SVG 矢量图 | 需要无损缩放时 |
ascii | 字符画 | 终端 / 纯文本 |
graphviz | DOT 格式 | 交给dot二次渲染 |
boxart | 增强字符画 | 终端美化 |
debug | 调试信息 | 开发排错 |
MediaWiki 端的mediawiki-graph扩展在解析模板时,会读取该属性并调用Graph::Easy::output(),将结果直接插入页面——无需手动导出图片。
🚀 三步在 Wiki 中嵌入动态流程图
第 1 步:安装 Graph-Easy
git clone https://gitcode.com/gh_mirrors/gr/Graph-Easy cd Graph-Easy perl Makefile.PL && make && make install第 2 步:编写图文本
创建一个.txt文件,使用 Graph-Easy 文本语法:
graph { label: 部署流水线; output: html; node { shape: rounded; } edge { arrowstyle: filled; } } [ 代码提交 ] --> { border: 1px solid #4CAF50; } [ CI 构建 ] [ CI 构建 ] --> [ 自动化测试 ] [ 自动化测试 ] --> [ 部署到生产 ]第 3 步:渲染并嵌入 Wiki
方式 A:命令行直接生成 HTML 片段
perl -Ilib examples/as_html my_graph.txt将输出的 HTML 代码粘贴到 Wiki 页面的<pre>或源码模式即可。完整示例可参考 examples/as_html 脚本。
方式 B:通过 MediaWiki 模板(推荐)
在 Wiki 页面中使用模板调用:
{{#invoke:graph-easy|render| [ 代码提交 ] --> [ CI 构建 ] [ CI 构建 ] --> [ 部署到生产 ] }}模板内部调用Graph::Easy::Parser解析文本,再经output()方法按output属性渲染。解析器实现在 lib/Graph/Easy/Parser.pm。
🎨 让流程图"动"起来:CSS 与 SVG 技巧
HTML 输出本质是<table>+<style>组合,你可以在此基础上追加 CSS 动画:
table.graph td { transition: background-color 0.3s, transform 0.2s; } table.graph td:hover { background-color: #e3f2fd; transform: scale(1.05); }SVG 输出则支持<animate>和<animateTransform>等原生 SMIL 动画标签,可实现箭头流动、节点脉冲等效果。SVG 渲染器位于 lib/Graph/Easy/As_graphviz.pm(经 Graphviz 后端)或直接通过as_svg方法生成。
💡提示:
examples/as_svg演示了完整的 SVG 输出流程,可作为动画改造的起点。
🕷️ 进阶:用 wikicrawl 从 Wiki 自动生成关系图
项目附带了一个极具创意的示例脚本 examples/wikicrawl.pl,它能:
- 抓取指定 Wikipedia 页面及其链接
- 将"文章 → 被链接文章"关系转化为 Graph-Easy 图
- 按链接深度着色(越深层颜色越暖)
- 输出
.txt图描述 +.png渲染结果
perl examples/wikicrawl.pl --lang=de --root=Berlin --maxdepth=3这展示了 Graph-Easy 在"从 Wiki 提取图 → 渲染回 Wiki"闭环中的完整能力。
📁 关键文件速查
| 文件 | 作用 |
|---|---|
| lib/Graph/Easy.pm | 核心模块,output()总入口 |
| lib/Graph/Easy/Attributes.pm | output属性定义与文档 |
| lib/Graph/Easy/Parser.pm | 文本语法解析器 |
| examples/as_html | HTML 输出示例脚本 |
| examples/as_svg | SVG 输出示例脚本 |
| examples/wikicrawl.pl | Wiki 爬取生成图 |
| examples/html.pl | 完整 HTML 页面生成示例 |
| README | 项目总览与安装说明 |
✅ 常见问题
Q:Wiki 页面里 HTML 被过滤了怎么办?A:MediaWiki 默认会转义<table>等标签。需在LocalSettings.php中注册mediawiki-graph扩展,或在模板层通过wfLoadExtension允许内联 HTML。
Q:节点太多导致布局缓慢?A:在graph {}中设置timeout: 120;限制布局时间,或减少边数量。布局引擎在 lib/Graph/Easy/Layout/ 下提供 Grid、Force、Path 等多种策略可选。
Q:能否输出 Boxart 风格的字符动画?A:可以。output: boxart;生成带 Unicode 框线字符的增强 ASCII 图,配合 Wiki 的<pre>标签展示,适合纯文本环境。
Graph-Easy 让"画流程图"这件事从打开绘图软件退化为写一行文本。而output属性 + MediaWiki 模板的组合,则让这份文本直接在 Wiki 页面中"活"起来——无需图片文件,无需额外依赖,一条命令,一个模板,流程图就嵌好了。
【免费下载链接】Graph-EasyConvert or render graphs (as ASCII, HTML, SVG or via Graphviz)项目地址: https://gitcode.com/gh_mirrors/gr/Graph-Easy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考