跳至内容

添加新图表/图 📊

示例

请参考以下 PR,了解如何使用 Langium 添加新图表语法。

警告

以下步骤仍在进行中,将很快更新。

步骤 1:语法和解析

步骤 2:渲染

编写一个渲染器,在解析期间找到数据后,渲染图表。要查看示例,请查看 sequenceRenderer.js 而不是流程图渲染器,因为这是一个更通用的示例。

将渲染器放在 diagram 文件夹中。

步骤 3:检测新图表类型

下一步是添加检测新图表类型到 diagram-api/detectType.ts 中的 detectType 的功能。检测应返回新图表类型的一个键。 此键将用作 aria roledescription,因此它应该是一个清晰描述图表类型的词语。例如,如果您的新图表使用 UML 部署图,则一个好的键将是 "UMLDeploymentDiagram",因为辅助技术(如屏幕阅读器)会将其语音化为 "U-M-L Deployment diagram"。另一个好的键是 "deploymentDiagram",因为它将被语音化为 "Deployment Diagram"。一个不好的键是 "deployment",因为它不足以描述图表。

请注意,图表类型键不必与为 语法 选择的图表关键字相同,但如果它们相同,则会有所帮助。

图表的通用部分

不同类型的图表之间有一些共同的功能。我们尝试将图表标准化,以便最终用户尽可能相似地使用。共性是

  • 指令,一种从图表代码内部修改图表配置的方法。
  • 无障碍,作者向使用屏幕阅读器访问带图表文本的人提供附加信息(如标题和描述)的方法。
  • 主题,Mermaid 中有一种修改图表样式的通用方法。
  • 评论应遵循 Mermaid 标准

以下是一些有关如何处理这些不同区域的提示。

无障碍

Mermaid 会自动为图表 SVG HTML 元素添加以下无障碍信息

  • aria-roledescription
  • 无障碍标题
  • 无障碍描述

aria-roledescription

aria-roledescription 会自动设置为 图表类型 并插入到 SVG 元素中。

请参阅 aria-roledescription 的定义,位于 可访问富互联网应用程序 W3 标准中

无障碍标题和描述

无障碍标题和描述的语法在 无障碍文档部分 中描述。

用于设置标题和描述的函数由一个公共模块提供。这是 flowDb.js 中的导入

import {
  setAccTitle,
  getAccTitle,
  getAccDescription,
  setAccDescription,
  clear as commonClear,
} from '../../commonDb';

无障碍标题和描述在 mermaidAPI 中的 render 函数中插入到 SVG 元素中。

主题

Mermaid 支持主题并拥有一个集成的主题引擎。您可以阅读有关如何使用主题的更多信息 在文档中

将主题添加到图表时,它归结为代码中的几个重要位置。

样式引擎的入口点在 src/styles.js 中。当样式应用于图表时,Mermaid 会调用 getStyles 函数。

此函数将依次调用 您的图表应提供的 函数,返回新图表的 css。图表特定的,这也称为 getStyles,位于您图表下的 src/diagrams 文件夹中,并且应该命名为 styles.js。getStyles 函数将使用主题选项作为参数调用,如以下示例所示

js
const getStyles = (options) =>
  `
    .line {
      stroke-width: 1;
      stroke: ${options.lineColor};
      stroke-dasharray: 2;
    }
    // ...
    `;

请注意,您需要将您的函数提供给主 getStyles,方法是将其添加到 src/styles.js 中的 themes 对象中,如提供的示例中的 xyzDiagram

js
const themes = {
  flowchart,
  'flowchart-v2': flowchart,
  sequence,
  xyzDiagram,
  //...
};

颜色选项和值的实际定义在 src/theme/theme-[xyz].js 中。如果您在现有主题文件中提供图表所需的选项,那么主题将顺利运行,不会出现问题。