Sublime Highlighter插件添加java支持

Sublime Highlighter插件添加java支持

Highlighter给复制富文本编码添加了很好的支持,最近使用时发现针对Java语言会出现找不到Lexer的错误。

Traceback (most recent call last):
  File "D:\software\Sublime Text Build 3176 x64\sublime_plugin.py", line 1066, in run_
    return self.run(edit, **args)
  File "D:\software\Sublime Text Build 3176 x64\Data\Packages\SublimeHighlight\SublimeHighlight.py", line 131, in run
    pygmented = self.highlight(output_type, full)
  File "D:\software\Sublime Text Build 3176 x64\Data\Packages\SublimeHighlight\SublimeHighlight.py", line 119, in highlight
    return pygments.highlight(self.code, self.get_lexer(),
  File "D:\software\Sublime Text Build 3176 x64\Data\Packages\SublimeHighlight\SublimeHighlight.py", line 102, in get_lexer
    lexer = pygments.lexers.guess_lexer(code)
  File "D:\software\Sublime Text Build 3176 x64\Data\Packages\pygments\all\pygments\lexers\__init__.py", line 252, in guess_lexer
    raise ClassNotFound('no lexer matching the text found')
pygments.util.ClassNotFound: no lexer matching the text found

发现原作者在查找高亮语法时,通过guess_lexer_from_syntaxpygments.lexers.guess_lexer,在markdown文本中,
无法正确的找到Java的语法支持,是pygments是有Java语法支持的。通过打印scope_name,确认markdown文本中是有
source.java的语法高亮。添加get_lexer_from_scope,通过source.java查找语法高亮。

+    def get_lexer_from_scope(self):
+        view = self.view
+        pt = view.sel()[0].a
+        scope_name = view.scope_name(pt)
+        for sn in scope_name.split(' '):
+            if 'source.' in sn:
+                sourcename = sn[7:]
+                print("get lexer from scope: %r" % sourcename)
+                return pygments.lexers.get_lexer_by_name(sourcename)
+        return 

    def get_lexer(self, code=None):
        # ...
        if not lexer:
            lexer = self.guess_lexer_from_syntax()
+        if not lexer:
+            lexer = self.get_lexer_from_scope()
+            print("try get_lexer_from_scope %r" % lexer)
        if not lexer:
            lexer = pygments.lexers.guess_lexer(code)
        # ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值