` 之上。textarea 负责输入、光标、选区、IME 和可访问性。`` 则在其下方绘制相同的文本。
这种覆盖层模式已经相当成熟。Yace 保持了精简的实现,并将这两个扩展点转化为明确的流水线:
- 插件接收 textarea 状态和输入事件,然后返回下一个文本和选区
- 高亮器接收当前值并返回由 `` 渲染的 HTML;将它们串联起来可以先进行 token 化,然后再对结果进行装饰
核心库没有内置必需的高亮器或编辑行为。从原生 textarea 开始,仅添加编辑器所需的功能即可。
## 示例
从编辑器本身开始:
- [内置代码高亮器入门](https://codepen.io/petersolopov/pen/JoELdOr)
- [使用 highlight.js 作为高亮器](https://codepen.io/petersolopov/pen/dPNddwg)
- [使用 PrismJS 作为高亮器](https://codepen.io/petersolopov/pen/RNKQMaX)
- [添加撤销、Tab、缩进和剪切行插件](https://codepen.io/petersolopov/pen/GgrQxjg)
- [在 React 中使用 Yace](https://codepen.io/petersolopov/pen/XJpZEKq)
- [构建一个 Markdown 编辑器](https://codepen.io/petersolopov/pen/NPdyYrR)
进一步利用这些流水线:
- [编写一个插件](https://codepen.io/petersolopov/pen/OPWvyOM)
- [用大约 15 行代码编写一个高亮器](https://codepen.io/petersolopov/pen/dPNmYWr)
- [高亮 Markdown 和围栏代码块](https://codepen.io/petersolopov/pen/pvRaLbw)
- [在可编辑的 OpenAI 风格视图中可视化 LLM token](https://codepen.io/petersolopov/pen/emgMpMr)
- [在选定的单词上叠加微光和故障效果](https://codepen.io/petersolopov/pen/Qwdmjxg)
## 构造函数选项
`new Yace(target, options)` 接受一个 CSS 选择器或 DOM `Node`。所有选项都是可选的:
```
new Yace(target, {
value: "", // sets the initial text
highlighters: [], // defines the rendering pipeline
plugins: [], // defines the editing pipeline, reduced from left to right
lineNumbers: false, // adds a line-number gutter
styles: {}, // applies inline styles to the editor root, such as `{ fontSize: "20px" }`
});
```
## 实例 API
Yace 构建的 DOM 及驱动它的方法:
- `editor.value` 保存当前文本
- `editor.textarea` 暴露真实的 `