java - Jython - 在 Java 项目中使用 Pygments

标签 java python jython pygments

我正在尝试使用 Pygments在 Java 项目中包含 Jython.jar。在我的 Java 项目中,我有 src/main/python 源目录,我将 pygments 文件放入 pygments 文件夹中,以便它们最终位于类路径上。现在我在 src/main/python 中创建了highlighter.py 文件,内容如下:

import sys
sys.path.append('WEB-INF/classes')
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter

class Highlighter:
    def colorize(code, lexername):
        lexer = get_lexer_by_name(lexername, stripall=True)
        formatter = HtmlFormatter(linenos=True, cssclass="source")
        return highlight(code, lexer, formatter)

然后我定义了Java接口(interface)Highlighter.java

public interface Highlighter {
    String colorize(String rawText, String lexer);
}

最后,我创建了工厂类,它使用 PythonInterpreterhighlighter.py 公开为 Jython 对象 as described here

现在,当我运行这行代码时

Highlighter hl = (Highlighter) jf.getJythonObject(Highlighter.class.getName(), 
       "WEB-INF/classes/highlighter.py");

我得到 PyException 如下

Traceback (most recent call last):
File "WEB-INF/classes/highlighter.py", line 3, in 
  from pygments import highlight
LookupError: no codec search functions registered: can't find encoding

如果我使用 Jython v. 2.5.0,就会出现这种情况。在 2.1 中,我必须复制 src/main/python 下的 Jython/Lib 目录,但最终我丢失了 IOString 模块

或者也许有更好的方法来实现我想要实现的目标?我很好奇是否有人能够在 Java 项目中使用 Pygments。我将不胜感激任何建议

最佳答案

好吧。我想到了。犯了一些初学者错误,但如果您想知道如何让 Pygments 在您的 Java 项目中工作,这里是 full tutorial link

亮点:

  • 仅使用 jython.jar 是不够的。
  • 将 Jython/Lib 添加到类路径不起作用。我最终解压了 jython.jar 并将 Lib 目录 + 所有 pygments 文件添加到生成的结构中,然后再次将其加扰
  • 上面链接中的工厂示例很复杂。更好的方法是使用 Jython 书 chapter 10
  • 有关更改的highlighter.py、Highlighter.java 和HighlighterFactory.java 的示例,请参阅教程

关于java - Jython - 在 Java 项目中使用 Pygments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308434/

相关文章:

java - 在任何情况下,使用 ArrayList 实现的 Stack 或 Queue 是否比 Java 中实现的 LinkedList 提供更好、更快的性能?

java - Android Widget 未出现在 Widget 列表中

python - 使用python更改图像中的颜色范围

python - Django 和杰通

jython - 将 pytest 与 Jython 一起使用

java - 具有多个条目的属性的数据库表设计(例如 : Person -> Social Media)

java - 在 Eclipse RCP 中默认激活强制链接编辑器

python - 具有 Minimax 和 Alpha-beta 修剪的 3D Tic Tac Toe 选择次优移动

python - Jupyter Python3 内核安装 - 仅限离线

google-app-engine - Google App Engine 上的 Jython 开发