-->

2010-02-28

mmm-mode でヒアドキュメントの色付け

この記事は emacs の mmm-mode で phpファイルのヒアドキュメントに色付けする際の例です。

ヒアドキュメントと、phpタグ以外の部分と、コンパイラ停止、を認識しやすくします。
背景色をつけるだけですので、インデントすると EOF; の部分などが破壊されます。
(始めの部分)<?php ... ?>(終わりの部分) は背景色は変わりません。
(require 'mmm-mode)
(setq mmm-global-mode 'maybe)
(setq mmm-submode-decoration-level 1)
(invert-face 'mmm-default-submode-face nil)
(set-face-background 'mmm-default-submode-face "navy")
(setq mmm-font-lock-available-p t)
(mmm-add-mode-ext-class nil "\\.php\\'" 'php-others)
(mmm-add-group
 'php-others
 '(
   (php-heredoc
    :include-front t
    :include-back t
    :front-offset 0
    :back-offset 0
    :front "<<<\\s-*[\"\']?\\([a-zA-Z_][a-zA-Z0-9_]+\\)"
    :back "^\\s-*~1;$"
    :save-matches 1
    :submode fundamental-mode
    :face mmm-code-submode-face
    :delimiter-mode nil
    )
   (php-outside
    :include-front nil
    :include-back nil
    :front-offset 0
    :back-offset 0
    :front "\\(\\?\\|%\\)>"
    :back "<\\(\\?\\|%\\)"
    :save-matches 1
    :submode fundamental-mode
    :face mmm-code-submode-face
    :delimiter-mode nil
    )
   (php-halt-compiler
    :include-front t
    :include-back t
    :front-offset 0
    :back-offset 0
    :front "__halt_compiler\\s-*("
    :back ")\\s-*;"
    :save-matches 1
    :submode fundamental-mode
    :face mmm-code-submode-face
    :delimiter-mode nil
    )
   ))

コメント部分にphpの開始タグ、終了タグがあると失敗します。
phpの開始タグ、終了タグの%,?の種類が違うと失敗します。
背景色が変化した部分をインデントすると失敗します。
xml宣言などのphpの開始タグ、終了タグと同じ文字があると失敗します。
phpの文字列に <?, ?> などがあると失敗します。

mmm-sample.el に perl, bash 用のヒアドキュメントと php-mode 用のサンプルがあります。
(例) /usr/share/emacs/site-lisp/mmm-mode/mmm-sample.el

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/31151
http://d.hatena.ne.jp/Tetsujin/20070808/1186582582
http://d.hatena.ne.jp/jimo1001/20071111/1194770814
http://www.bookshelf.jp/pukiwiki/pukiwiki.php?refer=MeadowMemo&cmd=read&page=MeadowMemo%2F%CA%A3%BF%F4%A4%CE%A5%E1%A5%B8%A5%E3%A1%BC%A5%E2%A1%BC%A5%C9%A4%F2%B6%A6%C2%B8%A1%BDmmm-mode
http://www.emacswiki.org/emacs/HtmlModeDeluxe

0 件のコメント: