重拾《 两周自制脚本语言 》- Eclipse插件实现语法高亮

简介: 为参考《 两周自制脚本语言 》进行中文化后的语言编写Eclipse插件, 实现基本语法高亮显示

2019_03_20_stone_Eclipse_

源码库: program-in-chinese/stone-editor-eclipse

参考:

续前文重拾《 两周自制脚本语言 》- 中文关键字与原生函数, 开始想在VS Code下实现, 通过添加TextMate语法文件也基本达到了上面的效果, 但看着vscode的Java语法需要上千行JSON代码: java.tmLanguage.json, TypeScript的更夸张有五千行, 难以想象如何维护, 于是考察Eclipse下的实现方式.

正好看到Eclipse 4.7版本之后改进了对新语言的插件开发的支持(Eclipse Project Oxygen (4.7) M3 News), 不用从头建一个定制编辑器, 而是对一个"通用文本编辑器"进行扩展, 来实现高亮, 悬浮提示, 辅助补全等等功能. 看了示例代码以Java为主, 应该比写JSON好维护一些.

刚实现了开头的图示中的高亮功能, 直接上源码.

下面定义了语法高亮的几个规则, 包括数字, 注释(StoneReconciler):

public class StoneReconciler extends PresentationReconciler {
  Token 深红 = 字号(SWT.COLOR_DARK_RED);
  Token 深绿 = 字号(SWT.COLOR_DARK_GREEN);
  Token 蓝色 = 字号(SWT.COLOR_BLUE);

  public StoneReconciler() {
    SingleLineRule 单引号 = new SingleLineRule("'", "'", 深红);
    SingleLineRule 双引号 = new SingleLineRule("\"", "\"", 深红);
    NumberRule 数字 = new NumberRule(蓝色);
    PatternRule 模式规则 = new PatternRule("//", null, 深绿, (char) 0, true);

    石头语言用词规则 用词规则 = new 石头语言用词规则();

    RuleBasedScanner 扫描器 = new RuleBasedScanner();
    扫描器.setRules(new IRule[] {单引号, 双引号, 用词规则, 模式规则, 数字});

    DefaultDamagerRepairer 修理器 = new DefaultDamagerRepairer(扫描器);
    this.setDamager(修理器, IDocument.DEFAULT_CONTENT_TYPE);
    this.setRepairer(修理器, IDocument.DEFAULT_CONTENT_TYPE);
  }

  private Token 字号(int 色号) {
    return new Token(new TextAttribute(Display.getCurrent().getSystemColor(色号)));
  }
}

关键词高亮规则:

public class 石头语言用词规则 extends WordRule {

  private static final ArrayList<String> 关键字 =
      new ArrayList<>(Arrays.asList("每当", "如果", "否则", "类别", "定义"));

  private static final Color 深紫红 = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_MAGENTA);

  public 石头语言用词规则() {
    super(new 探测器());

    for (String 词 : 关键字) {
      addWord(词, new Token(new TextAttribute(深紫红, null, SWT.BOLD)));
    }
  }
}

问题

新建的默认插件对XML进行校验, 因此石头语言的语法会导致文件开头报校验错误"Content is not allowed in prolog". 将ValidatorDocumentSetupParticipant中对XML解析的部分删去后不再报错. 但是, 老文件的错误不能自动消除, 应该与内容刷新或者自动校验有关. 之后对校验部分定制时进一步研究.

参考: Eclipse Content is not allowed in prolog

2019-03-20

相关文章
|
6月前
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
148 0
|
6月前
|
XML Java Maven
eclipse 、idea 安装activiti插件
eclipse 、idea 安装activiti插件
159 0
|
11月前
|
Java Android开发
eclipse安装SpringBoot插件的无敌办法
eclipse安装SpringBoot插件的无敌办法
130 0
|
11月前
|
Java Android开发 Spring
在 Eclipse 中安装 SpringTools 插件
在 Eclipse 中安装 SpringTools 插件
129 0
|
XML Java 应用服务中间件
Eclipse插件下载地址汇总
Eclipse插件下载地址汇总
307 0
|
存储 Android开发
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
Eclipse安装Flowable Eclipse Designer插件实现图形建模BPMN 2.0流程图
382 0
|
IDE NoSQL Java
Eclipse下载安装和JDK下载安装(环境配置)及下载C++插件CDT
Eclipse下载安装和JDK下载安装(环境配置)及下载C++插件CDT
374 0
|
存储 Java 应用服务中间件
Java开发 —— eclipse,myeclipse安装+Tomcat插件
Java开发 —— eclipse,myeclipse安装+Tomcat插件
Java开发 —— eclipse,myeclipse安装+Tomcat插件
|
Java Android开发
Eclipse安装反编译插件JD-Eclipse
Eclipse安装反编译插件JD-Eclipse
884 0
Eclipse安装反编译插件JD-Eclipse

推荐镜像

更多