Skip to content

Renderer

这是一个用于将Markdown抽象语法树(AST)渲染为HTML的Markdown渲染器。

安装

bash
npm install @versakit/markdown-renderer

使用

首先需要安装@versakit/parser

可用方法

  • Renderer:这是默认的渲染器,用于将Markdown的抽象语法树(AST)转换为HTML。它还提供了一种差异算法,可以高效处理AST中的变化。
  • RendererText:该方法将AST转换为纯HTML文本。当你需要生成不进行额外处理的HTML内容时,它非常有用。

示例

我们提供了一个简单的示例来展示如何使用渲染器:

html
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <title>Markdown 编辑器</title>
  </head>
  <body>
    <div class="editor-container">
      <div class="input-section">
        <textarea class="markdown-input" spellcheck="false">
        </textarea>
      </div>
      <div class="preview-section">
        <div id="preview"></div>
      </div>
    </div>

    <script src="./parser.js"></script>
    <script src="./renderer.js"></script>
    <script>
      // 创建 parser 实例
      const parser = new Parser();
      let renderer = null;

      // 获取 textarea
      const textarea = document.querySelector(".markdown-input");

      // 初始 markdown 内容
      const initialMarkdown = textarea.value;
      const initialAst = parser.parseMarkdown(initialMarkdown);

      // 创建 renderer 实例
      renderer = new Renderer({
        ast: initialAst,
        container: "#preview",
      });

      // 监听输入框变化
      textarea.addEventListener("input", (e) => {
        const markdown = e.target.value;
        const ast = parser.parseMarkdown(markdown);
        if (renderer) {
          renderer.update(ast);
        }
      });

      // 检查链接有效性
      function checkLinkValidity(url) {
        try {
          new URL(url);
          return true;
        } catch (error) {
          return false;
        }
      }

      // 为无效链接添加样式并绑定事件监听
      const links = document.querySelectorAll("a");
      links.forEach((link) => {
        const href = link.getAttribute("href");
        if (!checkLinkValidity(href)) {
          link.classList.add("invalid-link");
          link.title = "链接无效,请重新检查";
          link.addEventListener("click", (e) => {
            e.preventDefault();
            alert("链接无效,请重新检查");
          });
        }
      });
    </script>
  </body>
</html>
ts
import { MarkdownParser } from '@versakit/parser'
import { Renderer } from '@versakit/markdown-renderer'

const md = "# Hello World"
const parser = new MarkdownParser.Parser()
const ast = parser.parse(md)

// 使用 Renderer 渲染
const html = Renderer.render(ast)
console.log(html) // 输出: <h1>Hello World</h1>

这样,您就可以使用VersakitMarkdown-Renderer来渲染Markdown内容了。