JavaScript/JavaFileName のバックアップソース(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- JavaScript/JavaFileName へ行く。
- 1 (2012-09-11 (火) 10:45:12)
- 2 (2012-09-11 (火) 11:55:01)
- 3 (2012-09-19 (水) 08:47:06)
- 4 (2012-09-19 (水) 11:44:12)
- 5 (2012-09-19 (水) 14:30:22)
- 6 (2012-09-20 (木) 12:44:30)
- 7 (2012-09-20 (木) 18:53:10)
- 8 (2014-06-04 (水) 00:54:09)
- 9 (2014-09-04 (木) 01:31:30)
- 10 (2014-09-26 (金) 19:16:59)
- 11 (2014-11-08 (土) 01:41:12)
- 12 (2014-12-10 (水) 17:19:14)
- 13 (2017-10-27 (金) 16:26:13)
- 14 (2019-03-12 (火) 18:14:04)
- 15 (2019-04-02 (火) 17:31:03)
- 16 (2024-02-21 (水) 02:08:40)
TITLE:JavaScriptでソースコードからJavaのファイル名を取得する #navi(../) RIGHT:Posted by [[aterai]] at 2012-09-11 * JavaScriptでソースコードからJavaのファイル名を取得する [#b6c86e5c] #contents ** 概要 [#ve7c744d] preタグで囲まれたソースコードなどから、public classなどを検索して、Javaのファイル名を取得するテスト。 - ユーザーJavaScriptフォルダにコピー [http://terai.xrea.jp/data/javascript/java_file_name.user.js java_file_name.user.js] - pre要素をダブルクリックすると、検索したJava名を表示 ** ソースコード [#d2ebc1c2] #code{{ (function() { function getFileName(code) { var ext = '.java'; //class, interface, or enum if(code.match(/public\s*[\r\n]*class\s*[\r\n]*([^{\s\n\r]+)/m) || code.match(/public\s*[\r\n]*interface\s*[\r\n]*([^{\s\n\r]+)/m) || code.match(/public\s*[\r\n]*enum\s*[\r\n]*([^{\s\n\r]+)/m)) { return RegExp.$1+ext; }else{ return 'Unknown'+ext; } } function pre2text(pre) { var div = document.createElement('div'); div.innerHTML = pre.innerHTML.replace(/<br[ \/]*>/ig, '\n').replace(/<.*?>/mg, ''); return div.childNodes[0].nodeValue.replace(/\xA0/g, ' '); } var listener = function(e) { alert(getFileName(pre2text(this))); }, pre = document.getElementsByTagName('pre'), i = 0, len = pre.length; for(; i<len; i++) { pre[i].addEventListener('dblclick', listener, false); } }()); }} ** Bookmarklet版 [#g50b36cd] - 名前 -- java_file_name - アドレス(YUI Compressor で圧縮) javascript:(function(){function c(h){var g=".java";if(h.match(/public\s*[\r\n]*class\s*[\r\n]*([^{\s\n\r]+)/m)||h.match(/public\s*[\r\n]*interface\s*[\r\n]*([^{\s\n\r]+)/m)||h.match(/public\s*[\r\n]*enum\s*[\r\n]*([^{\s\n\r]+)/m)){return RegExp.$1+g}else{return"Unknown"+g}}function d(g){var h=document.createElement("div");h.innerHTML=g.innerHTML.replace(/<br[ \/]*>/ig,"\n").replace(/<.*?>/mg,"");return h.childNodes[0].nodeValue.replace(/\xA0/g," ")}var e=function(g){alert(c(d(this)))},f=document.getElementsByTagName("pre"),b=0,a=f.length;for(;b<a;b++){f[b].addEventListener("dblclick",e,false)}}()); ** 制限 [#db6ab432] -Javaのみ、字句解析しない -publicなクラスなどが存在しない場合には未対応 - %%interface, enum に未対応%% -- %%public enum Test {A, B, C}%% - %%改行に未対応%% - コメントを考慮していない -- public /*comment*/ class Main {...} - finalに未対応 -- public final class Main {...} #code{{ function getFileName(code) { var ext = '.java'; code.match(/public\s*[\r\n]*([^{\s\n\r]+)\s*[\r\n]*([^{\s\n\r]+)/m); switch(RegExp.$1) { //class, interface, or enum case 'class': case 'interface': case 'enum': return RegExp.$2+ext; case 'final': return 'final'+ext; //XXX default: return 'Unknown'+ext; } } }} ** テスト用 [#oa0a9909] #code{{ import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.Position; import javax.swing.tree.*; public class JTreeNextMatchTest { public JComponent makeUI() { JTree tree = new JTree() { @Override public TreePath getNextMatch( String prefix, int startingRow, Position.Bias bias) { return null; } }; JPanel p = new JPanel(new BorderLayout()); p.add(new JScrollPane(tree)); return p; } 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 JTreeNextMatchTest().makeUI()); f.setSize(320, 240); f.setLocationRelativeTo(null); f.setVisible(true); } } }} #code{{ public interface CloseableTabbedPaneListener extends EventListener { /** * Informs all CloseableTabbedPaneListeners when a tab should be * closed * @param tabIndexToClose the index of the tab which should be closed * @return true if the tab can be closed, false otherwise */ boolean closeTab(int tabIndexToClose); } }} #code{{ //aaaaaaaaaaa //bbbbbbb public enum Flip { NONE, VERTICAL, HORIZONTAL } }} #code{{ public final enum Flip { NONE, VERTICAL, HORIZONTAL } }} #code{{ public /* comment */ enum Flip { NONE, VERTICAL, HORIZONTAL } }} #code{{ public enum テスト { NONE, VERTICAL, HORIZONTAL } }} //** 参考リンク ** コメント [#af6e4bf0] #comment