上一篇:使用Theia——创建插件

Theia——添加语言支持

Theia中TextMate的支持

  使用TextMate语法可以为大部分源文件提供精准的着色修饰,虽然这只是在语法级别上(没有语言本身的深度解析)。语义着色可以由语言服务器提供。
  TextMate语法主要有两种格式:.plist和.tmLanguage.json,这两种Theia都支持。
  更多有关TextMate语法的内容可以查看这里
  注意:特定语言的语法应该包含在该语言的专用扩展包中。@theia/textmate-grammars中只注册了当前没有任何特定扩展包的语言。

添加新语法

  要提供一种新语法,通常的做法是在扩展包的根目录下创建一个data目录,在其中保存不同的语法。
extension/
data/
grammars go here
lib/
...
src/
...
package.json
...

  然后,在package.json文件中声明以下属性,这样新提供的语法可以与源代码和编译的文件一同发布。

"files": [
"data",
"lib",
"src"
],

  在扩展包中,我们可以通过LanguageGrammarDefinitionContribution的contribution point来提供这一特性。

@injectable()
export class YourContribution implements LanguageGrammarDefinitionContribution { readonly id = 'languageId';
readonly scopeName = 'source.yourLanguage'; registerTextmateLanguage(registry: TextmateRegisty) {
registry.registerTextmateGrammarScope(this.scopeName, {
async getGrammarDefinition() {
return {
format: 'json',
content: require('../data/yourGrammar.tmLanguage.json'),
}
}
});
registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName);
}
}

  如果使用.plist语法,则不能使用require来直接获取内容,因为Webpack将返回从服务器获取的文件的名称。这种情况下,可以使用下面的模式来获取文件的内容:

@injectable()
export class YourContribution implements LanguageGrammarDefinitionContribution { readonly id = 'languageId';
readonly scopeName = 'source.yourLanguage'; registerTextmateLanguage(registry: TextmateRegisty) {
registry.registerTextmateGrammarScope(this.scopeName, {
async getGrammarDefinition() {
const response = await fetch(require('../data/yourGrammar.plist'));
return {
format: 'plist',
content: await response.text(),
}
}
});
registry.mapLanguageIdToTextmateGrammar(this.id, this.scopeName);
}
}

原文地址:https://theia-ide.org/docs/textmate

使用Theia——添加语言支持的更多相关文章

  1. iOS-生成国际化包-配置App多语言支持

      标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识   如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...

  2. Pyqt 国际化多语言支持

    国际化是指在代码设计上加入能方便的移植到其他国家和地区的特性, 给Pyqt 添加国际化支持需要五步 一.编写GUI.py 在要被翻译的text上用tr方法括起来 # -*- coding: utf-8 ...

  3. ios调用系统相册、相机 显示中文标题、本地化多语言支持

    因为调用系统相册.相机需要显示中文,所以搞了半天才知道是在Project->info->Custom ios Target Properties 添加 Localizations 并加入C ...

  4. DDD开发框架ABP之本地化/多语言支持

    本地化(Localization)也就是多语言功能,借此用户能够选择他的母语或熟悉的语言来使用系统,这显然非常有利于软件系统推向国际化.一个应用程序的UI界面至少有一种语言,DDD开发框架ABP就提供 ...

  5. (视频)《快速创建网站》 3.3 国际化高大上 - WordPress多语言支持

    本文是<快速创建网站>系列的第7篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...

  6. tp 多语言支持

    tp支持多语言 通过get来改变语言的 http://localhost/tp/index.php/Admin/User/add/hl/zh-cn http://localhost/tp/index. ...

  7. Windows Phone 8本地化多语言支持

    原文 Windows Phone 8本地化多语言支持 在WP8平台处理本地化多语言的支持还是比较容易的,大部分工作都有VS IDE处理,开发者只需简单操作,并翻译本地资源即可实现. 无论您目前的应用是 ...

  8. Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)

    Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...

  9. Windows 8本地化多语言支持

    原文:Windows 8本地化多语言支持 在Win8平台处理本地化多语言的支持相对比较容易的,但比WP8稍微复杂一点,并不像WP8平台那样大部分工作都有VS IDE处理,Win8平台的操作基本需要开发 ...

随机推荐

  1. 设置 Tomcat 的JVM运行内存

    win7,64位: Tomcat7.0.5:jdk1.7: 情况一:Tomcat注册成系统服务,如何修改JVM运行内存? WINDOW 64位 , cmd打开注册表(regedit) HKEY_LOC ...

  2. Uniapp使用iconfont

    看别人的项目有各种各样的图标既好看占用内存还小 后来才知道原来有icon图标这个东西,原谅我真的一直处于混沌的状态. 刚好最近项目使用了uniapp框架,引入iconfont的方式和之前有些不太一样 ...

  3. hdu 1532 Drainage Ditches(最大流模板题)

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. H3C ISDN DCC基本配置示例

  5. Python--day62--ORM的使用

    4.Django里ORM的使用 1,手动创建数据库 2,在settings.py里面,配置数据库的连接信息 3,在项目/__init__.py告诉Django用pymysql模块代替MySQLdb(不 ...

  6. hsqldb使用

    1 hsqldb介绍 HyperSQL DataBase 是一个现代的关系数据库管理软件,比较彻底遵从SQL:2008标准和JDBC4规范.支持SQL:2008标准所以的核心特性和很多的可选特性. H ...

  7. 《Netty权威指南》(一)简单的时间服务器P69

    由于该书是基于Netty5编写的样例代码,而Netty5已经被官方废弃. 目前基于推荐版的4.1.12.Final在学习过程中,可能会出现个别接口不一致的情况.所以记录可在4.1.12下编译通过的代码 ...

  8. [转]在ASP.NET WebAPI 中使用缓存【Redis】

    初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutpu ...

  9. js三大框架出现的意义

    解决了原始html,css,js的UI与数据状态之间同步的难题,避免了大量的操作DOM代码. 使用了React,Angular和Vue,我们只需要定义一次 UI 界面,不再需要为每个操作编写特定的 U ...

  10. dotnet 控制台 Hangfire 后台定时任务

    本文告诉大家如何在 dotnet core 的控制台通过 Hangfire 开启后台定时任务 首先需要安装 HangFire 这个 Nuget 库,通过这个库可以用来做定时任务,虽然很多时候都是在 A ...