闲谈Monaco Editor-自定义语言之Monarch

什么是Monarch

Monarch 是 Monaco Editor 自带的一个语法高亮库,通过它,我们可以用类似 Json 的语法来实现自定义语言语法高亮功能。本文将通过编写一个简单的自定义日志语言(下文简称 log )来介绍 Monarch 的使用。

开始

初始化

首先,我们需要在 monaco 里注册一下我们的 log 语言。

monaco.languages.register({ id: 'log' });
复制代码

很简单,我们只需要传入语言的 id 即可,但是,现在这个语言除了有个名字,还空空如也,所以,接下来,我们就要开始给 log 语言加上我们的语法高亮功能。

monaco.languages.setMonarchTokensProvider('log', monarchObj);
复制代码

monaco 提供了setMonarchTokensProvider函数来让我定义语言的高亮功能,而monarchObj就是我们所需要填写的 Monarch 所规定的 Json 内容。

Monarch

Monarch 由一系列 Json 键值对组成,他有许多属性,其中最重要的就是 tokenizer 属性,我们描述语法的代码就写在这里面。先来看一个简单的例子:

monaco.languages.setMonarchTokensProvider('log', {
	tokenizer: {
		root:[
			[/\d+/,{
   token:"keyword"}],
			[/[a-z]+/,{
   token:"string"}]
		],
	}
});
复制代码

我们在 tokenizer 中定义了一个 root 属性,roottokenizer 中的一个 state , 这就是我们用来编写解析规则(rule)的地方,在 rule 中,我们可以编写匹配文本的正则表达式,然后再给匹配到的文本设置一个执行动作的 action ,在 action 中,我们可以给匹配到的文本设置 token class

在我们的例子中,我们在 root 中设置了两个 rule ,分别用来匹配数字字母,匹配成功后就接着执行对应的 action ,最后在 action 中,我们设置了匹配文本的 token class :keywordstring。最终效果如图:

这里有些人就会有疑问,token class 是 css class 吗?本质上,token class 其实就是设置 css 中的 class ,不过,keyword != .keyword ,Monarch 中会有一层 对应关系,keyword 对应着 css 中的 .mtk8,而 string 对应着 css 中的 .mtk5。Monarch 中内置了以下几种 token class:

identifier         entity           constructor
operators          tag              namespace
keyword            info-token       type
string             warn-token       predefined
string.escape      error-token      invalid
comment            debug-token
comment.doc        rege
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值