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) 返回一个扩展数组:语言、高亮显示、键、公式编辑、补全和检查,按照它们需要的顺序和优先级。
| 选项 | 意义 | 默认的 |
|---|---|---|
dialect | bananamark的 defineDialect | bananamark的违约 |
codeLanguages, wikiLinks | 没有方言:更多的隔离代码语言(codemmirror) LanguageS,通过名字)和是否 [[wiki links]] 读作 bananamarkLanguage 把他们(wikiLinks 用于完成和检查) | 没有一个; false |
locale | 补全选项旁边的单词和错误的语言: 'en', 'zh-cn'或者是方言信息中的一个 | 'en' |
completion | completionSources'选项(entries, languages, otherLabels, mathCommands…), sources (调用者的更多完成源)和 afterComposition(state) (输入法提交后补全是否打开);或 false | {} |
lint | checkFile的选择和 delay (女士);或 false | {} |
highlight | 这个 bm-hl-… 类(syntaxHighlighting(highlightClasses)) | true |
keymap | bananamarkKeymap | true |
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 })(CodeMirrorLanguage年代;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 而开关,每个都是一个值或一个函数给它(一个承诺),第一次需要时被请求:
| 选项 | 意义 | 默认的 |
|---|---|---|
dialect | bananamark的 defineDialect:其环境,数据块,标签,消息和开关,在下面的选项 | 无 |
tikz, wikiLinks, bibliography | 是否 ```tikz 和 ```bibliography 块和 [[links]] 提供 | 方言是,或者 false |
environments | 类似定理的环境,如香蕉的(kind→) { name, … },或者 false),围绕着香蕉的违约;名字 locale | bananamark的 |
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.