Swing/SyntaxHighlightingEditorPane のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/SyntaxHighlightingEditorPane へ行く。
- category: swing
folder: SyntaxHighlightingEditorPane
title: JEditorPaneにソースコードをシンタックスハイライトして表示する
tags: [JEditorPane, HTMLEditorKit, StyleSheet]
author: aterai
pubdate: 2018-07-30T03:56:00+09:00
description: JEditorPaneのHTMLEditorKitにStyleSheetを設定して、ソースコードをシンタックスハイライト表示します。
image: https://drive.google.com/uc?id=1b_texG1scFcKnOIcUNUHQPdquKal_Fu6OQ
hreflang:
href: https://java-swing-tips.blogspot.com/2018/07/syntax-highlighting-source-code-in.html lang: en
概要
JEditorPane
のHTMLEditorKit
にStyleSheet
を設定して、ソースコードをシンタックスハイライト表示します。
Screenshot
Advertisement
サンプルコード
private void loadFile(String path) {
try (Stream<String> lines = Files.lines(
Paths.get(path), StandardCharsets.UTF_8)) {
String txt = lines.map(s -> s.replace("&", "&")
.replace("<", "<")
.replace(">", ">"))
.collect(Collectors.joining("\n"));
editor.setText("<pre>" + prettify(engine, txt) + "\n</pre>");
} catch (IOException ex) {
ex.printStackTrace();
}
}
private static String prettify(ScriptEngine engine, String src) {
try {
Object w = engine.get("window");
return (String) ((Invocable) engine).invokeMethod(
w, "prettyPrintOne", src);
} catch (ScriptException | NoSuchMethodException ex) {
ex.printStackTrace();
return "";
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、ScriptEngine
でgoogle-prettify.js
を実行し、Open
ボタンで選択したソースコードをハイライト済みのHTML
テキストに変換してJEditorPane
で表示しています。
ScriptEngine
でHTML
テキストに変換する前に、ソースコード中の&
、<
、>
を文字実体参照に変換する必要があるHTMLEditorKit
のCSS
で色は3
桁表記(color:#RGB
) には対応していないため、6
桁表記(color:#RRGGBB
)に変換して使用- First pass at a way to dodge newline issues in IE.の修正以降の
prettify.js
では、prettyPrintOne
の内部でDocument
型のオブジェクトが使用されるようになったのでScriptEngine
(Nashorn
)のみでは実行不可- このため、このサンプルでは古いバージョンの
prettify.js
(Fixed prettyPrintOne by removing requirement that a job have a source node. Fixes issues 133 and 134.)を添付して利用している - prettify.js(r120)
- このため、このサンプルでは古いバージョンの
参考リンク
- google/code-prettify: Automatically exported from code.google.com/p/google-code-prettify
- Rhinoでgoogle-code-prettifyを実行する
- Java access files in jar causes java.nio.file.FileSystemNotFoundException - Stack Overflow