介绍

Markalbe 是一个 npm 库,能让我们用任何语言编写 markdown 文档。Markdoan 将非英语的与 Markdown 语法 相关的符号翻译成英文,以便任何 markdown 解析器都可以解析它们(即是“markable”)。如果一个编辑器使用了markable,我们就不需要在编辑md文档的时候频繁切换输入法了。

查看演示以查看实际效果,点击下载可以获得相关符号翻译后的结果。

在功能实现方面,Markable 用了正则表达式、出于性能和可读性考虑使用rollup打包。还进行了良好的开源实践,包括规范的git勾子、commit检查、严谨的单元测试。

使用

Node

1
2
var markable = require('markable');
console.log(markable('》 青山一道同云雨,明月何曾是两乡。')); // > 青山一道同云雨,明月何曾是两乡。

浏览器

你可以将 markable 与 marked 一起使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!doctype html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Marked Markable in the browser</title>
</head>
<body>
  <div id="content"></div>
  <script src="https://cdn.jsdelivr.net/npm/markable@0.0.7/markable.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  <script>
    var text = '》 青山一道同云雨,明月何曾是两乡。\n\n···js\n Hello World\n···';
    document.getElementById('content').innerHTML =
      marked(markable(text));
  </script>
</body>
</html>

后记

Markable 是一年前写的第一个 npm 库,当时想着 markable 和 marked 这样的库一起组合使用能让非英文 markdown 文档的编写过程变得更简洁高效,markdown 编辑器使用它应该能提升用户体验。但一年过去了,现在 markable 周下载量大概在 10 左右,一方面是因为实现不够完备,无法应对一些复杂场景,所以也许导致用户无法信任;一方面是因为没有多少用户的同时也没有任何反馈(没有推广自然也是促成这一结果的原因,但我是在也不知道如何推广),这也导致我不再花时间优化。

后来到了字节实习,才发现飞书云文档能够自动做 markable 想做的事,把出现在恰当地方的 》 转化为 > ,把 【】 转化为 [] 。再后来发现 wolai 也能做到,他们称之为“ Markdown 输入兼容全角”,作为中文输入体验优化的一部分。他们做的工作固然并非受到无名的 markable 的影响,但还是让我深受感动,认识到有人与我心意相通,自己所做的工作也并非没有价值。与飞书和 wolai 的工作不同的是,markable 的应用场景更加广阔,它可以应用于所有语言,可以很方便地用于所有 markdown 编辑器,因为它是独立的插件式的一层。