2012.4.9更新
psgml はSGMLファイルやXMLファイルを編集するためのEmacs メジャーモードです。
Meadow でも使用できます。
SGML の使用機会は今ではほとんどない(少なくとも筆者には)ので、ここではXMLだけを扱うことにします。
GNU Emacs23 では psgml をインストールしただけでは、 psgml は使えません。 xml-mode は nxml-mode のエイリアス(別名)になっているから、 M-x xml-mode とやっても nxml-mode が立ちあがるだけです。 psgml モードを立ちあげるためには、 以下の設定を ~/.emacs など(~/.emacs.d/init.el のほうがいい)にかいておく必要があります。 (Yahoo知恵袋である人に教えていただきました。)
;; 以下は nxml-mode を無効にし psgml の xml-mode を有効にするための設定 (require 'nxml-mode) (require 'psgml) ;; *.xml 文書は xml-mode で (setq auto-mode-alist (cons (cons "\\.xml" 'xml-mode) auto-mode-alist)) (autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
以下は昔かいた記事です。
以下では Meadow と Cygwin での使用を前提に話を進めます。
Linux でも同様にうまく行くはずです。
e:\Meadow に Meadow がインストールされていると仮定します。
上のサイトからダウンロードできます。
ここでは psgml-1.2.5.tar.gz をダウンロードすることにします。
psgml-1.2.5.tar.gz をダウンロードしたら、これを e:\Meadow\site-lisp に置きます。
$ cd e:\Meadow\site-lisp $ tar -zxvf psgml-1.2.5.tar.gz
とやって psgml-1.2.5.tar.gz を解凍展開します。 psgml-1.2.5 ディレクトリができるので
$ cd psgml-1.2.5
します。 ここで *.el をコンパイルします。
$ meadow -batch -q -l ./psgml-maint.el -f psgml-compile-files
コンパイルが成功すれば下のように表示されるはずです。
Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-parse.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-edit.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-dtd.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-info.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-charent.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-api.elc Wrote e:/Meadow/site-lisp/psgml-1.2.5/psgml-other.elc Done compiling
インストール作業はこれで完了です。
次を .emacs または .emacs.el 等に付け加えておきます。
(setq auto-mode-alist (cons (cons "\\.xml" 'xml-mode) auto-mode-alist)) (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t) (autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
あるいは *.xhtml も扱いたいなら、下のようにするとよいでしょう。
(setq auto-mode-alist (append (list '("\\.xml" . xml-mode) '("\\.xhtml" . xml-mode)) auto-mode-alist)) (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t) (autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
必要なら
(setq load-path (cons "e:/Meadow/site-lisp" load-path))
も付けます。
XHTML とは簡単に言うと、XML規格に準拠したHTMLです。XHTMLのDTDを読み込みさえすれば、PSGMLでXHTML文書を自由に編集することができます。
XHTMLにはいくつかのバージョンがありますが XHTML 1.0 Strict で十分でしょう。 以下ではXHTML 1.0 Strictを扱います。
まず下の4つのファイルをダウンロードします(ここにあるリンクを使えばよい)。
xhtml1-strict.dtd がXHTML 1.0 Strict のDTD で、残りの三つは xhtml1-strict.dtd でインポートされるエンティティ宣言をあつめたファイルです。
ダウンロードしたファイルはローカルの適当なディレクトリに置きます。
以下では /home/hiro/work/dtd に置いたものと仮定します。
また編集するXML文書は /home/hiro/work/xml にあるものとします(下図参照)。
home | +--hiro | +--work | +--dtd <--- ここに *.dtd *.ent を置く | +--xml <--- ここに *.xml *.xhtml を置く
Emacs(Meadow) を起動して、バッファに次の文を書き込みます。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html SYSTEM "/home/hiro/work/dtd/xhtml1-strict.dtd">
または
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html SYSTEM "file:///home/hiro/work/dtd/xhtml1-strict.dtd">
このようにDTDへの絶対パスを入れておけば、システムのどの場所からもDTDを読み取ることができます。
ただし Windows で Cygwin を使っている場合は上の書き方ではうまく行かないようです。 そこで下のように書きます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html SYSTEM "/cygwin/home/hiro/work/dtd/xhtml1-strict.dtd">
書いたら、C-x C-s で保存しておきましょう。 ここでは /home/hiro/work/xml に hello.xml という名前をつけて保存したものと仮定します。
バッファで C-c C-e と打つと、ミニバッファに Element: html というメッセージが現れます。 ここではそのままリターンを押します。するとバッファには自動で
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html SYSTEM "/cygwin/home/hiro/work/dtd/xhtml1-strict.dtd"> <html> <head> <!-- one of (title base) -->■ </head> <body> </body> </html>
という文字が入力されます。■はカーソルの位置を示します。
カーソルの位置をそのままに、続けてまた C-c C-e と打つと、ミニバッファに Element: というメッセージが現れます。これはユーザに要素名の入力を促すプロンプトです。 スペースキーを打つと、下のように次に入力すべき要素名の候補を示してくれます。
Click <mouse-2> on a completion to select it. In this buffer, type RET to select the completion near point. Possible completions are: base link meta object script style title
まず title 要素を入力することにします。 ミニバッファの Element: の後に title と入れてリターンします。するとバッファは
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html SYSTEM "/cygwin/home/hiro/work/dtd/xhtml1-strict.dtd"> <html> <head> <!-- one of (title base) --> <title>■</title> </head> <body> </body> </html>
というように title 要素を自動で入力してくれます。
あとは■の場所に適当なタイトル名を入力するだけです。
以下、こんな感じでXHTMLを編集していきます。PSGMLのより詳しい使い方は下記のリンクを参考にしてください。