【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> 改行がおかしくなっていたのを修正

コメント

  1. PHPDoc 形式のコメントを入れたソースを解析すると、コメントの先頭行が引っかかってしまいます。もし可能であれば、修正法歩を教えてください。

    返信削除
  2. > trickster さん
    こんにちは。
    私はPHPDoc形式でプログラミングしていますが、綺麗に表示してくれてます。
    いつの間にか記事中のサンプルコードの改行がおかしかったのを修正したので試してみてください。

    またはおかしくなるファイルのサンプルをコメントしてもらえれば解析して対応します。

    返信削除

コメントを投稿

このブログの人気の投稿

【.NET】DataGridViewを選択した際に背景色を変更しない

Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links

【PostgreSQL】ROWNUMのように行番号(現在行)を取得するROW_NUMBER