@djot/djot

中文文档
0.3.2发布于 2024/12/19MITTypeScriptESM + CJS零依赖近 30 天下载 1.9万

Djot 光标语言转换库

中文使用文档
文档目录13 节
  1. 脚本 API
  2. 安装命令行工具
  3. 光盘N
  4. 图书馆 API
  5. 向 AST 狂欢
  6. 解析一串事件
  7. 漂亮地印着欢乐AST
  8. 将 djot AST 渲染到 HTML
  9. 欢乐
  10. Pandoc 互操作性
  11. 过滤器
  12. 获取版本
  13. 技术

djot.js (英语)

用于解析和 绘制光标格式 欢呼声。 。 。 .

这是重写 djot的原始卢瓦 执行。 。 。 . 它正在驱动 欢呼声 游乐场。 。 。 .

脚本 API

这些是运行后可用的 npm install,这将 安装库的构建依赖性 :

npm run ...说明
build编译和捆绑源到 lib 财务报告和审定财务报表 dist
test运行测试
bench运行基准

安装命令行工具

您可以安装命令行工具 djot 通过

npm install -g @djot/djot

djot --help 将概述各种备选办法。 为了更多 大量文档、使用 man djot 或见 在线的男性页面。 。 。 .

你用得着 djot 改为

  • 从 djot 转换为 HTML
  • 显示 djot 解析器生成的低等事件流
  • 以 JSON 或紧凑形式显示 djot 剖析器生成的 AST
  • 从 JSON 格式化 djot AST 转换为 djot 或 HTML
  • 使用过滤器修改 AST
  • 从 djot 转换为 pandoc JSON , 它可以通过 pandoc 读取
  • 将 pandoc JSON( 或 djot) 转换为 djot

例如,转换一个 gfm 文档 mydoc.md 欢乐,

pandoc mydoc.md -f gfm -t json | djot -f pandoc -t djot > mydoc.dj

并转换回 gfm, (中文(简体) ),

djot mydoc.dj -t pandoc | pandoc -f json -t gfm

光盘N

该图书馆可通过下列途径提供: unpkg CDN: (中文(简体) )

<script src="https://unpkg.com/@djot/[email protected]/dist/djot.js"></script>

(替换) 0.2.5 带有您想要使用的版本。 )

图书馆 API

向 AST 狂欢

parse(input : string, options : ParseOptions = {})

使用实例:

djot.parse("hello _there_", {sourcePositions: true});

options 可拥有下列(可选)字段:

  • sourcePositions : boolean: 在AST中包括来源位置
  • warn : (message : Warning) => void数字 : 函数用来处理来自 parser 的警告.

可用 render() 方法,所以 例如,向控制台发出警告时,您可以:

{ warn: (warning) => console.log(warning.render()) }

或者,您可以直接访问字段 message (弦声), offset (如果定义,数字), 财务报告和审定财务报表 pos (单位:千美元){ line: number, col: number, offset: number } 如果定义).

解析一串事件

parseEvents(input : string, options : Options = {})

展出一个活动显示器,每个显示形式 {startpos : number, endpos : number, annot : string}。 。 。 . 使用实例:

for (let event of parseEvents("Hi _there_")) {
  console.log(event)
}

这个 Options 对象有一个 warn 描述的属性 parse, (中文(简体) ), 见上文.

漂亮地印着欢乐AST

renderAST(doc : Doc) : string

使用实例:

console.log(djot.renderAST(djot.parse("hi _there_")));

将 djot AST 渲染到 HTML

renderHTML(ast : Doc, options : HTMLRenderOptions = {})

HTMLRenderOptions 扩展 Options 带有 overrides 字段,该字段将节点标记显示为其渲染器的覆盖.

使用实例:

console.log(djot.renderHTML(djot.parse("- _hi_",{sourcePositions:true})));

覆盖的简单示例 :

djot.renderHTML(
  djot.parse("_hi_", { sourcePositions: true }),
  { 
    overrides: {
      emph: (node, renderer) => {
        return `<span class="emphasized">${renderer.renderChildren(node)}</span>`;
      }
    } 
  });

该产量: <span class="emphasized">hi</span>。 。 。 .

欢乐

renderDjot(doc : Doc, options : DjotRenderOptions = {}) : string

DjotRenderOptions 扩展 Options 带有 wrapWidth : number 字段. 其影响如下:

  • wrapWidth > 0: 输出被包裹到宽度中, 并有 “ s软 break” 表现得像一个空间.
  • wrapWidth = 0: 输出没有被包; soft_break 调制 作为换行符.
  • wrapWidth = -1: 输出没有被包; soft_break 调制 作为一个空间.

使用实例:

console.log(djot.renderDjot(djot.parse("_Hello_ world"), {wrapWidth: 64}));

Pandoc 互操作性

toPandoc(doc : Doc, options : PandocRenderOptions) : Pandoc

PandocRenderOptions 扩展 Options 与 smartPunctuationMap,具有窗体和默认值:

{ non_breaking_space: " ",
  ellipses: "⋯",
  em_dash: "-",
  en_dash: "-",
  left_single_quote: "‘",
  right_single_quote: "’",
  left_double_quote: "“",
  right_double_quote: "”" };

使用实例:

console.log(JSON.stringify(djot.toPandoc(djot.parse("- one\n- two\n"))));

fromPandoc(pandoc : Pandoc, options : Options) : Doc

使用实例:

let ast = djot.fromPandoc(JSON.parse(pandocJSON));

过滤器

applyFilter(node : Doc, filter : Filter)

使用实例:

const capitalizeFilter = () => {
  return {
           str: (e) => {
             e.text = e.text.toUpperCase();
           }
  };
};
let ast = djot.parse("Hi there `verbatim`");
djot.applyFilter(ast, capitalizeFilter);

过滤器是更改 AST 之间的 JavaScript 程序 解析和渲染。 它们可用于定制.

以下是过滤器的例子 使用文档中的全部内容文本 :

// This filter capitalizes regular text, leaving code and URLs unaffected
return {
  str: (el) => {
    el.text = el.text.toUpperCase();
  }
}

这是打印您所有 URL 列表的过滤器 链接到文档中。 这个过滤器不会改变 文档;它只是将列表打印为 stderr.

return {
  link: (el) => {
    process.stderr:write(el.destination + "\n")
  }
}

默认过滤器进行自下而上倒转;即 节点过滤器在孩子处理完毕后运行 . 不过,可以进行自上而下的旅行,甚至 在输入节点时运行单独的动作(处理前) (在处理儿童后)离开。 来 ,将节点的标记与含有 enter 和(或) exit 函数。 这个 enter 函数在我们穿越时运行 输入 结点,在我们穿过它的子孙之前 exit 函数在我们穿越了节点的孩子之后运行. 对于一个自上而下转弯, 你会只是使用 enter 函数. 如果标签与函数直接相关, 如 第一个例子,它被视为一种“退出”功能.

以下过滤器将使用文本 内嵌着强调,但不是其他文字:

// This filter capitalizes the contents of emph
// nodes instead of italicizing them.
let capitalize = 0;
return {
   emph: {
     enter: (e) => {
       capitalize = capitalize + 1;
     },
     exit: (e) => {
       capitalize = capitalize - 1;
       e.tag = "span";
     },
   },
   str: (e) => {
     if (capitalize > 0) {
       e.text = e.text.toUpperCase();
      }
   }
}

单个过滤器可能返回一个有多个表格的表格,这些表格将是 按顺序应用:

// This filter includes two sub-filters, run in sequence
return [
  { // first filter changes (TM) to trademark symbol
    str: (e) => {
      e.text = e.text.replace(/\\(TM\\)/, "™");
    }
  },
  { // second filter changes '[]' to '()' in text
    str: (e) => {
      e.text = e.text.replace(/\\(/,"[").replace(/\\)/,"]");
    }
  }
]

目前为止我们所看到的过滤器 正在修改节点 改变其一种属性(text) (中文(简体) ). 有时我们想用另一种 节点,或有多个节点,或删除一个节点. 在这些 我们可以以 return。 。 。 . 如果返回一个 AST 节点, 它将替换元素 过滤器正在处理。 如果返回 AST 节点数组, 它们将被分解出来,以替换元素。 如果一个空 数组返回,该元素将被删除.

// This filter replaces certain Symb nodes with
// formatted text.
const substitutions = {
  mycorp: [ { tag: "str", text: "My Corp" },
            { tag: "superscript",
              [ { tag: "str", text: "(TM)" } ] } ],
  myloc: { tag: "str", text: "Coyote, NM" }
  };
return {
  symb: (e) => {
    const found = substitutions[e.alias];
    if (found) {
      return found;
    }
  }
}
// This filter replaces all Image nodes with their descriptions.
return {
  image: (e) => {
    return e.children;
  }
}

有可能阻止向一个节点的孩子转来转去, 拥有 enter 函数返回带有 属性 stop。内容 stop 将用作常规 返回值。 例如,这可用于防止 正在处理的脚注的内容:

return {
 footnote: {
   enter: (e) => {
     return {stop: [e]};
    }
  }
}

获取版本

djot.version : string

返回版本编号.

技术

Djot AST 格式最人能读取的文件 这是 类型 定义。 。 。 .

还有一个 贾森 计划 用于验证是否符合AST程序.

版本与发布记录

@djot/djot 共发布 9 个版本,首次发布于 2023/01/12;过去 12 个月发布了 0 个版本。

版本发布日期距今
0.3.2latest2024/12/191.9 年前
0.3.12024/02/142 年前
0.3.02024/02/142 年前
0.2.52023/10/283 年前
0.2.42023/09/123 年前
0.2.32023/05/213 年前

关于 @djot/djot 的常见问题

@djot/djot 是什么?

Djot 光标语言转换库

如何安装 @djot/djot?

在项目目录运行 npm install @djot/djot,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 djot,可以用 npx djot 直接运行。

@djot/djot 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@djot/djot 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@djot/djot 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=17.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@djot/djot 可以商用吗?

@djot/djot 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@djot/djot 的下载量有多少?

根据 npm 官方下载统计,@djot/djot 在 2026/10/13 – 2026/11/11 这 30 天内被下载 19,459 次,日均约 649 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@djot/djot 还在维护吗?

最新版本 0.3.2 发布于 2024/12/19(1.9 年前);至今共发布 9 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/01/12。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。