Tips/GooglePrettifyRhino のバックアップ差分(No.4)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Tips/GooglePrettifyRhino へ行く。
- 1 (2011-01-25 (火) 23:52:05)
- 2 (2012-03-09 (金) 16:15:15)
- 3 (2012-03-09 (金) 17:15:19)
- 4 (2012-05-28 (月) 17:41:58)
- 5 (2012-06-24 (日) 04:30:37)
- 6 (2012-06-25 (月) 20:22:34)
- 7 (2012-06-30 (土) 04:44:14)
- 8 (2012-10-02 (火) 21:18:52)
- 9 (2012-10-03 (水) 15:10:49)
- 10 (2012-10-03 (水) 18:08:57)
- 11 (2012-10-03 (水) 19:19:15)
- 12 (2012-10-03 (水) 20:54:28)
- 13 (2012-10-04 (木) 15:26:38)
- 14 (2012-10-04 (木) 22:05:16)
- 15 (2012-10-06 (土) 23:15:41)
- 16 (2012-12-04 (火) 12:12:12)
- 17 (2013-03-29 (金) 03:23:06)
- 18 (2013-07-21 (日) 00:19:15)
- 19 (2013-08-01 (木) 19:20:09)
- 20 (2014-09-03 (水) 18:13:53)
- 21 (2014-09-14 (日) 01:52:25)
- 22 (2014-10-02 (木) 15:20:03)
- 23 (2014-12-20 (土) 13:27:48)
- 24 (2015-12-18 (金) 16:20:25)
- 25 (2017-03-30 (木) 14:21:32)
- 26 (2018-01-22 (月) 18:42:56)
- 27 (2018-02-27 (火) 15:59:24)
- 28 (2018-07-30 (月) 04:06:43)
- 29 (2018-08-30 (木) 18:03:51)
- 30 (2018-12-10 (月) 16:47:38)
- 31 (2019-05-22 (水) 19:35:38)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:Rhinoでgoogle-prettify.jsを実行する #navi(../) *Rhinoでgoogle-prettify.jsを実行する [#x16c66db] #adsense2 >編集者:[[Terai Atsuhiro>aterai]]~ 作成日:2011-01-25~ 更新日:&lastmod; #contents(none) **概要 [#w0e0eebc] Rhinoでgoogle-prettify.jsを実行し、ソースコードをハイライトされたHtml(google sites用)に変換します。 **サンプルコード [#s4b99359] #code{{ import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import javax.script.*; import javax.swing.*; public class GooglePrettifyRhinoTest { private final JTextArea src = new JTextArea(); private final JTextArea dst = new JTextArea(); private final ScriptEngine engine = createEngine(); public JComponent makeUI() { // ScriptEngineManager manager = new ScriptEngineManager(); // java.util.List<ScriptEngineFactory> list = manager.getEngineFactories(); // for (ScriptEngineFactory f:list) { // System.out.format("%s %s", f.getEngineName(), f.getEngineVersion()); // } // InputStream is = getClass().getResourceAsStream("Test.java"); // try { // Reader reader = new InputStreamReader(is); // src.read(reader, null); // } catch (Exception ex) { // ex.printStackTrace(); // } JButton b = new JButton((new AbstractAction("Convert to google sites") { String pre = "<pre style=\"color:#0;background:#f0fff8;margin:8px;padding:8px\">"; @Override public void actionPerformed(ActionEvent e) { String str = prettify(engine, src.getText()); str = str.replace("class=\"str\"", "style=\"color:#080\""); str = str.replace("class=\"kwd\"", "style=\"color:#008\""); str = str.replace("class=\"com\"", "style=\"color:#800\""); str = str.replace("class=\"typ\"", "style=\"color:#606\""); str = str.replace("class=\"lit\"", "style=\"color:#066\""); str = str.replace("class=\"pun\"", "style=\"color:#660\""); str = str.replace("class=\"pln\"", "style=\"color:#000\""); str = str.replace("class=\"tag\"", "style=\"color:#008\""); str = str.replace("class=\"atn\"", "style=\"color:#606\""); str = str.replace("class=\"atv\"", "style=\"color:#080\""); str = str.replace("class=\"dec\"", "style=\"color:#606\""); dst.setText(pre+str+"\n</pre>"); } })); JSplitPane sp = new JSplitPane(JSplitPane.VERTICAL_SPLIT); sp.setResizeWeight(.5); sp.setTopComponent(new JScrollPane(src)); sp.setBottomComponent(new JScrollPane(dst)); JPanel p = new JPanel(new BorderLayout()); p.add(b, BorderLayout.SOUTH); p.add(sp); return p; } public static ScriptEngine createEngine() { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); // ScriptEngineFactory factory = engine.getFactory(); // String name = factory.getEngineName(); // String version = factory.getEngineVersion(); // System.out.printf("\tScript Engine: %s (%s)\n", name, version); Reader reader = null; try { // reader = new InputStreamReader( // GooglePrettifyRhinoTest.class.getResourceAsStream("prettify.js")); URL url = new URL( //"http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"); "http://terai.xrea.jp/skin/irid/prettify.js"); reader = new BufferedReader(new InputStreamReader(url.openStream())); engine.eval("var window={};var navigator=null;"); engine.eval(reader); return engine; } catch (Exception ex) { ex.printStackTrace(); } finally { if (reader!=null) { try { reader.close(); } catch (Exception exx) { exx.printStackTrace(); } } } return null; } public static String prettify(ScriptEngine engine, String src) { try { Object w = engine.get("window"); return (String) ((Invocable)engine).invokeMethod( w, "prettyPrintOne", src, "java"); //, Boolean.TRUE ); } catch (Exception e) { e.printStackTrace(); return ""; } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new GooglePrettifyRhinoTest().makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } } }} **解説 [#n146353c] 上記のサンプルでは、new ScriptEngineManager().getEngineByName("JavaScript"); で取得したJavaScriptエンジン(Rhino)に、[http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js prettify.js]を読み込んで、prettify.jsのprettyPrintOneメソッドを実行しています。 google sitesでは、cssファイルも使用できないので、replace("class=\"kwd\"", "style=\"color:#008\"");のように、クラスをスタイルの色に全部置換しています。 **参考リンク [#z6fe58b9] -[http://code.google.com/p/google-code-prettify/ google-code-prettify - Project Hosting on Google Code] -[http://www.mozilla.org/rhino/ Rhino - JavaScript for Java] **コメント [#q5757df6] - prettyPrintOneの内部で、Document型のオブジェクトが使用されるようになっているので、上記のサンプルでは古いprettify.js(このサイトで使用中)を参照するように変更。 -- [[aterai]] &new{2012-03-09 (金) 16:58:03}; - 新しいprettify.js(prettify-1-Jun-2011.tar.bz2)では、prettyPrintOneの内部でDocument型のオブジェクトが使用されるようになっているのでRhinoだけ(Envjsとか使えば良さそうなんだけど…)では実行できない。このため上記のサンプルでは古いprettify.js(このサイトで使用中のprettify-21-Jul-2010.zip)を参照するように変更。 -- [[aterai]] &new{2012-03-09 (金) 16:58:03}; #comment