emacs でxslt - XSLT-process

emacsxslt 変換ができるマイナーモード

XSLT-process
http://xslt-process.sourceforge.net/

デバッガもついていて、xslt 変換をステップ実行できる模様。
xslt編集用のメジャーモードではないので、必要な人は、別途 Lennart Staflin の PSGMLや、James Clark の sgml-mode.el major mode (GNU Emacsに同梱)、又は Tony Grahamのxslide XSLT modeを使うようにとのこと。

インストール

XEmacs を使っている場合は既にデフォルトでインストール済みの様子。XEmacsを使っていないので、ドキュメントに従ってインストール。

依存パッケージ
Elib
ftp://ftp.lysator.liu.se/pub/emacs/elib-1.0.tar.gz

Speedbar
http://cedet.sourceforge.net/speedbar.shtml
依存パッケージ Elib のインストール

Elib が無い場合は、まずこれをインストール。XEmacsではこれもインストール済みらしい。
Elib を上記リンクからダウンロードしてsite-lispディレクトリにtarで展開。
INSTALL ファイルによると、make でelファイルとinfoファイルがインストールされるとのこと。elはインストール中にバイトコンパイルも行われる。
まずMakefileを編集する。ファイルの上部にあるlocallisppathとinfodirの値を環境に応じて設定する。
Meadow を使っている場合は、Emacs = Meadowとする。

続いて

make install

これでel, elc, info がそれぞれのディレクトリにコピーされる。

INSTALLファイルによると、さらに続いてelib-startup.elをdefault.el(.emacsファイルの事か?)に追加とあるが、elib-startup.elの中身を見てみるとelibのインストールされたフォルダをload-pathに追加するスクリプトがあるだけなので、このステップは省略。elibがsite-lispの下にコピーされているので、load-pathに追加しなくとも既にこれらのファイルはemacsから見える状態に有る。昔のバージョンのEmacsではこれが必要だった模様。

依存パッケージ Speedbar のインストール

インストール済みだったので説明は割愛。

XSLT-process 自体のインストール

XSLT-process をダウンロードしてsite-lispディレクトリにtarで展開。
.emacs に以下を追加

  (require 'cl)                                     
                                                    
  (mapc (lambda (x)                                 
          (pushnew (expand-file-name x) load-path)) 
        (list "~/emacs"                             
              "~/emacs/xslt-process-2.2/lisp"       
              "~/emacs/elib-1.0"                    
              "~/emacs/speedbar-0.14beta4"))        

必要に応じて最後の2行は削除できる。今回はSpeedbarをインストールしてないので最後の行を削除した。それから、elibのインストーラはelibディレクトリを作成してそこに自分をコピーしたので、上のelib-1.0もelibに変更。結局以下のようになった。

  (require 'cl)                                     
                                                    
  (mapc (lambda (x)                                 
          (pushnew (expand-file-name x) load-path)) 
        (list "~/emacs"                             
              "~/emacs/xslt-process-2.2/lisp"       
              "~/emacs/elib"))        

続いて以下の自動起動の設定も.emacs に追加。

  (autoload 'xslt-process-mode "xslt-process" "Emacs XSLT processing" t) 
  (autoload 'xslt-process-install-docbook "xslt-process"                 
    "Register the DocBook package with XSLT-process" t)                  
  (add-hook 'sgml-mode-hook 'xslt-process-mode)                          
  (add-hook 'xml-mode-hook 'xslt-process-mode)                           
  (add-hook 'xsl-mode-hook 'xslt-process-mode)                           
                                                                         
  (defadvice xml-mode (after run-xml-mode-hooks act)                     
    "Invoke `xml-mode-hook' hooks in the XML mode."                      
    (run-hooks 'xml-mode-hook))                                          

Windows を使っている場合は以下も便利だから.emacsに追加しておけとの事。

  ; emulate three button mouse   
  (setq w32-num-mouse-buttons 2) 

使い方

必要なコマンドはとりあえず以下の3つ。

C-c C-x a	xslt-process-associate-stylesheet
C-c C-x b	xslt-process-register-buffer
C-c C-x v	xslt-process-invoke-buffer-view

まずスタイルシート(.xslファイル)をで登録する。登録したスタイルシートしか変換に使えないのでまず登録。(xslを開いたバッファでC-c C-x b)
そして、変換元のxmlファイルをでスタイルシートと関連づける。(xmlを開いたバッファでC-c C-x a)
そして最後にxmlを開いたバッファでC-c C-x vとすると変換が実行される。

以下で変換結果をブラウザやPDF viewerとして表示する事もできる。

C-c C-x n	xslt-process-invoke-browser-view
C-c C-x p	xslt-process-invoke-pdf-viewer

スタイルシートの登録やxmlとxslの関連付けは、以下の操作をしないと保存されない。

C-c C-x h	xslt-process-manage-associations
C-c C-x m	xslt-process-manage-stylesheets

C-c C-x h のSave for future session で保存する。
C-c C-x m はスタイルシートの登録状況を確認できる。

XSLTデバッガはそのうち試す。

問題

.xmlの拡張子を持ったファイルを開くと何故か読み取り専用になってしまう。新規に作成してもダメ。何故だ??