【问题标题】:Jython - using Pygments in Java projectJython - 在 Java 项目中使用 Pygments
【发布时间】:2010-11-29 21:49:19
【问题描述】:

我正在尝试通过包含 Jython.jar 在 Java 项目中使用 Pygments。在我的 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接口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。我将不胜感激任何建议

【问题讨论】:

  • sys.path 包含什么?
  • 现在当你提到它时,我已将 sys.path.append('WEB-INF/classes') 添加到 highlighter.py。测试
  • 现在我有一个不同的问题 - 我编辑了原始帖子

标签: java python jython pygments


【解决方案1】:

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

亮点:

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

【讨论】:

  • 它的表现就像地狱一样。已废弃,但该教程适用于 Java webapp 中 Jython 的一般设置
  • 您好,仅针对 10-20 行的代码 sn-ps 的性能如何?
猜你喜欢
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 2011-09-30
  • 2016-11-06
  • 2011-04-05
相关资源
最近更新 更多