【xyzzy】【outline-tree2】PHP用マクロ

PHPでの開発をするようになって、outline-tree2にクラスや関数の一覧を表示させたいのですが、デフォルトでは表示してくれません。

絶対どっかの誰かがマクロを公開してくれていると思って検索しましたが見つからず。しょうがないので自分で対応しました。javaの正規表現を参考に記述。

まずはoutline-tree2の機能でアウトライン自動生成の機能でファイルを生成。
image
アウトライン関数名: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)))
以上です。
image
<2008/06/26> class とか function はいらないので正規表現を修正。

<2010/04/20> 改行がおかしくなっていたのを修正