【xyzzy】【outline-tree2】PHP用マクロ
PHPでの開発をするようになって、outline-tree2にクラスや関数の一覧を表示させたいのですが、デフォルトでは表示してくれません。
絶対どっかの誰かがマクロを公開してくれていると思って検索しましたが見つからず。しょうがないので自分で対応しました。javaの正規表現を参考に記述。
まずはoutline-tree2の機能でアウトライン自動生成の機能でファイルを生成。
アウトライン関数名:outline-php
メニュー表示名:PHP
アウトラインの説明:なし
そうすると.outline-tree/autoload/cr-user-regexp-outline-php.lが生成されるので、それを以下に置き換え
そのあと.outline-tree/config.lを作成して以下を記述してPHPモードのときは作成した関数を実行するように指定。
<2008/06/26> class とか function はいらないので正規表現を修正。
<2010/04/20> 改行がおかしくなっていたのを修正
絶対どっかの誰かがマクロを公開してくれていると思って検索しましたが見つからず。しょうがないので自分で対応しました。javaの正規表現を参考に記述。
まずはoutline-tree2の機能でアウトライン自動生成の機能でファイルを生成。
アウトライン関数名:outline-php
メニュー表示名:PHP
アウトラインの説明:なし
そうすると.outline-tree/autoload/cr-user-regexp-outline-php.lが生成されるので、それを以下に置き換え
↑「/」になっているのは「¥」です。クリップボードにコピーすれば大丈夫。
(require "outline-tree/outline-tree")
(require "outline-tree/cr-regexp-internal")
(in-package "outline-tree2")
;; PHP 解析
(defun outline-tree-create-outline-user-regexp-outline-php (root-node)
(outline-tree-create-outline-regexp-internal
:root-node root-node
:layer-regexp-list
'("^[ \t]*\\(function\\|class\\)[ \t]+\\([&_a-zA-Z]+(.*)\\|[_a-zA-Z]+\\).*[{\n]"
"^[ \t]*\\([^{\n()/]*?\\(public\\|private\\|function\\)[^{\n()]*?\\)\\([_a-zA-Z]+[\t]*(.*)[^(){}]*\\)[ \t]*{")
:layer-regexp-list-case-fold nil
:layer-regexp-list-order :non-miss))
(outline-tree-add-create-outline-function
'outline-tree-create-outline-user-regexp-outline-php "PHP" '(:language :line-oriented :sequential)
"PHP 言語を非常に簡易的な方法でアウトライン表示します。
実用に耐える実装には至っていません。")
そのあと.outline-tree/config.lを作成して以下を記述してPHPモードのときは作成した関数を実行するように指定。
(in-package "outline-tree2")以上です。
;; PHPモードのとき
(add-hook 'ed::*php-mode-hook* #'(lambda () (setq outline-tree-create-outline-function 'outline-tree-create-outline-user-regexp-outline-php)))
<2008/06/26> class とか function はいらないので正規表現を修正。
<2010/04/20> 改行がおかしくなっていたのを修正