bananamark-codemirror

中文文档
0.2.1发布于 2026/11/03MITES Module零依赖

CodeMirror 6语言支持bananmark Markdown方言:高亮,折叠,补全和检查

中文使用文档
文档目录9 节
  1. 状态
  2. 一个最小的例子
  3. 一切同时进行
  4. 的语言
  5. 编辑公式
  6. 完成
  7. 正在检查
  8. 助手
  9. 贡献

bananamark-codemirror

CodeMirror 6语言支持 bananamark 标记方言:高亮,折叠,键,补全和检查。语法是bananark自己的。bananamark/grammar),其中公式和标签的结束来自bananark的扫描器(bananamark/scan),检查运行bananark的方言层,因此编辑器读取页面就像渲染器一样。补全取方言的规则 bananamark/rules (数据)。它在浏览器中运行(带捆绑器);检查也在Node中运行。

状态

版本0.2,发布于 bananamark (见其 状态):在1.0之前,小版本可能会改变接口。同行依赖性: bananamark 相同的次要版本,和codemmirror的 @codemirror/language, state, view, autocomplete, lint 和 lang-markdown (每个包都有一个副本:CodeMirror不能使用两个副本)。仅限ES模块;麻省理工学院的执照。

npm install bananamark bananamark-codemirror codemirror

一个最小的例子

import { EditorView, basicSetup } from 'codemirror';
import { bananamark } from 'bananamark-codemirror';
import { dialect } from './dialect.js';   // the site's, from bananamark's defineDialect

new EditorView({
  parent: document.querySelector('#editor'),
  extensions: [
    basicSetup,
    bananamark({ dialect, completion: { entries: async () => (await fetch('/names.json')).json() } }),
  ],
});

给编辑器提供渲染器的方言(bananark’s) defineDialect):它的语法、环境、数据块、标签、消息和开关(维基链接、书目、TikZ)都是渲染器的。高亮显示显示类(bm-hl-…(与bananark的代码块相同),所以一个样式表(bananamark/style.css)用于编辑器和页面中的代码块。

一切同时进行

bananamark(options) 返回一个扩展数组:语言、高亮显示、键、公式编辑、补全和检查,按照它们需要的顺序和优先级。

选项意义默认的
dialectbananamark的 defineDialectbananamark的违约
codeLanguages, wikiLinks没有方言:更多的隔离代码语言(codemmirror) LanguageS,通过名字)和是否 [[wiki links]] 读作 bananamarkLanguage 把他们(wikiLinks 用于完成和检查)没有一个; false
locale补全选项旁边的单词和错误的语言: 'en', 'zh-cn'或者是方言信息中的一个'en'
completioncompletionSources'选项(entries, languages, otherLabels, mathCommands…), sources (调用者的更多完成源)和 afterComposition(state) (输入法提交后补全是否打开);或 false{}
lintcheckFile的选择和 delay (女士);或 false{}
highlight这个 bm-hl-… 类(syntaxHighlighting(highlightClasses))true
keymapbananamarkKeymaptrue
formulaEditing\[ 和 \( 在键入时关闭(pairFormulaDelimiters)true

完成被注册为语言数据(EditorState.languageData),在每个位置,公式包括:CodeMirror's autocompletion() (在 basicSetup,或由 bananamark)与其他扩展的源代码一起使用它。输入法合成时不提供任何内容;当它提交时,补全将在输入名称的地方打开(afterComposition)。

每一件作品也会被导出,供编辑器自己把它们组合在一起(比如,有自己的编辑器)。

的语言

bananamarkLanguage({ dialect }) 返回CodeMirror的 LanguageSupport:

  • 香蕉的语法(bananamark/grammar):标题(YAML),公式(突出显示为TeX), wiki链接(当方言有它们时),参考文献,类定理环境的围栏,标记列表项,html样式的标签,图像” {width=…},用语言(方言)突出显示的代码块 codeLanguages 其中)。没有方言的: bananamarkLanguage({ codeLanguages, wikiLinks }) (CodeMirror Language年代;Wiki的链接默认是关闭的,就像bananark的一样)。
  • 折页:除标题外,前物之间的折页 --- 行)和类似定理的环境(从 ::: name 在它之前 :::嵌套的数, ::: 代码中没有)。
  • 退格删除列表标记和引号。

newlineAndIndent:输入,将新行缩进到该行文本开始的位置(列表项的文本从其第一行开始;引号保持其位置) >),无需添加列表标记;光标两侧的空格被删除,一行空格留空。首先,代码块和显示它返回的公式 false (codemmirror自己的Enter then)。

bananamarkKeymap在方言中按顺序输入和退格键: closeDisplayFormula, newlineAndIndent,然后 deleteFormulaDelimiters (下图)。

highlightClasses, highlightTags:高亮类,以及方言自身的高亮标签(来自 bananamark/grammar)。

编辑公式

  • pairFormulaDelimiters(view, from, to, text):输入 [ 或者 ( 后 \ 给这对(\[|\]). 一个 EditorView.inputHandler,括号结束前(Prec.high)。
  • deleteFormulaDelimiters(view)空格之间的退格 \[ 和 \] 删除两个。退格命令。
  • closeDisplayFormula(view):只能在线保持输入 \[ (其 \](也许)给予 \[,空行和 \],缩进相同。输入命令,在 newlineAndIndent.

完成

completionSources(options) 返回补全源(bananamark() 寄存器;或者把它们送给 autocompletion({ override })),提供:

  • ::: 在一行的开始和一个环境的名称:类似定理的环境,与他们的打开和关闭围栏(只有当页面的围栏已经平衡的行);标题和标签的简写可以在名称(:::th Title @label 变成了 ::: theorem [Title] {@label})。
  • ``` 在一行的开头: math, tikz (还开着TikZ),来电者的数据块和 bibliography 块(带参考书目)。
  • 后 [[ 还有一个角色不是 $ (带有wiki链接):文章的标题和别名,以 ]].
  • @, {@:页面声明的标签(标题、环境、列表项、 math 块,并与参考书目,它的参考书目条目的键和版本的键,与条目的标题),然后是书的其他页面的标签。
  • \ 和公式中的字母:KaTeX的命令(加上所需的大括号)和环境(\begin{…}开头、空行和结尾;当它们已经配对时重命名)。
  • < 和字母:html样式的标签(开始和结束标签,光标文本的下一个位置); </ 关闭仍然打开的标签;在标签中,它的参数名称、语言代码和参数值。

选项,都是可选的;除了 dialect, otherLabels, locale, messages 而开关,每个都是一个值或一个函数给它(一个承诺),第一次需要时被请求:

选项意义默认的
dialectbananamark的 defineDialect:其环境,数据块,标签,消息和开关,在下面的选项无
tikz, wikiLinks, bibliography是否 ```tikz 和 ```bibliography 块和 [[links]] 提供方言是,或者 false
environments类似定理的环境,如香蕉的(kind→) { name, … },或者 false),围绕着香蕉的违约;名字 localebananamark的
dataBlocks数据块,如bananark的数据块(只使用它们的名称),或名称数组无
tags调用者的html样式的标签,如bananark的(no render 需要); completion: { snippet, then, values } 说明如何完成(${}:光标所在位置; then:插入后再次打开列表; values(裸参数的值),否则从其参数中计算出来无
entries文章: [{ title, aliases }]无(无文章)
languages语言代码→名称,对于接受语言的参数(<lang …> 诸如此类)无
mathCommands{ commands: [[name, arguments, glyph?]], environments: [[name, arguments]] }包的 katex-commands.json
otherLabels()书中其他书页的标签: [{ name, text, page }] (text:参考文献如何显示它; page:页面名称;bananamark的 book.labels() 给它们,页的键为 page)无
locale选项旁边单词的语言: 'en', 'zh-cn',或一分之一 messages'en'
messages选项旁边的词,按语言如香蕉的({ en: { key: text } }); 键 completion_<block>, completion_tag_<tag>, completion_parameter_<parameter>, completion_<tag>_<value>;来电者的标签和数据块在这里有他们的文字包裹是英文和中文的

afterComposition(state):输入法提交文本后是否打开补全(在 [[link]]的目标);开始吧 compositionend. 在编写文本时,补全不提供任何功能。

katex-commands.json (也 import可以作为 bananamark-codemirror/katex-commands.json)是由KaTeX自己的定义生成的:KaTeX呈现的命令,除了那些定义宏、链接和HTML的命令,以及公式不能在方言中使用的环境(align), tikzcd 和 tikzpicture,由TeX编译。遵循KaTeX版本 bananamark 取决于。

正在检查

  • checkDocument(source, options):用bananark的方言层检查页面主体,给出它的问题, [{ line, column, message, code, params }] (从1; column 当已知; code 和 params错误的,如香蕉的 BananamarkError 他们)。层在第一个错误处停止,所以最多有一个错误。 options 是方言层的(dialect, lang, locale, allowH1, lineOffset 等等;另一个是错误);使用KaTeX (checkMath: false:不是)。 labels:在书的一页上,书的其他页的标签([{ name, text, page }], page 页面的键;bananamark的 book.labels() 给出它们):对它们的引用不是错误。链接是否存在,以及一本书的页码是否共享,都取决于整个网站,而不会被检查。页面中不是错误的东西(错误的选项、bug)被抛出,而不是作为问题报告。
  • checkFile(text, options)对整个文件都是一样的:在文件的开头(between . --- 行)被跳过,并从文件的第一个行开始计数。在Node中也可以检查编辑器外的文件。
  • problemRange(doc, line, column)在编辑的文档中标记出问题的地方:从它的一栏中,一个字(a [[link]] 整),或者没有列时的行。
  • bananamarkLinter({ delay, ...options }): codemmirror将整个文档作为文件(checkFile的选项; delay 以毫秒为单位,默认300); bananamark() 它补充道。

助手

  • declaredLabels(text, { bibliography }):页面声明的标签,按顺序, [{ name, text }] (与 bibliography: true(它的书目条目也是键)。从每页的字里行间读起,当它被键入时(方言层在每页的第一个错误处停止)。
  • fencesBalance(text):页面的环境栅栏是否平衡(外部代码块)。
  • inFormula(state, pos):某个位置是否在公式中(还在输入的位置)。
  • matchingEnd(state, from, to): \end 匹配一个 \begin 在 [from, to), { from, to },或者 null.
  • messages包装上自己的话; { en, 'zh-cn' }.

贡献

测试和再生 katex-commands.json KaTeX更新后:参见 CONTRIBUTING.md.

版本与发布记录

bananamark-codemirror 共发布 4 个版本,首次发布于 2026/10/28;过去 12 个月发布了 4 个版本。

版本发布日期距今
0.2.1latest2026/11/03今天
0.2.02026/11/012 天前
0.1.02026/10/286 天前
0.0.0-stage2026/10/286 天前

关于 bananamark-codemirror 的常见问题

bananamark-codemirror 是什么?

CodeMirror 6语言支持bananmark Markdown方言:高亮,折叠,补全和检查

如何安装 bananamark-codemirror?

在项目目录运行 npm install bananamark-codemirror,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:bananamark(~0.2.0)、@codemirror/lint(^6.9.7)、@codemirror/view(^6.43.14)、@codemirror/state(^6.7.6)、@codemirror/language(^6.13.1)、@codemirror/autocomplete(^6.20.3)、@codemirror/lang-markdown(^6.5.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

bananamark-codemirror 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bananamark-codemirror 是否存在。

bananamark-codemirror 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

bananamark-codemirror 需要什么版本的 Node.js?

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

bananamark-codemirror 可以商用吗?

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

bananamark-codemirror 还在维护吗?

最新版本 0.2.1 发布于 2026/11/03(今天);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/10/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。