PSGMLモードはSGMLを編集するためのモードだが、XML、HTMLに特化した XMLモード、HTMLモードも含まれています。PSGMLモードではDTDがある と幸せになれます。逆に言うとDTDが無いときは使ってもあまり嬉しく ありません。
(autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
;;; RELAX、RELAX NGもxml-modeで開く
(setq auto-mode-alist
(append
'(("\\.\\(xml\\|rlx\\|rng\\)$" . xml-mode))
auto-mode-alist))
;;; XHTMLはhoge.xhtml.jaのように.xhtmlの後に拡張子がついてもいい
(setq auto-mode-alist
(append
'(("\\.xhtml\\([.]?\\w+\\)*$" . xml-mode))
auto-mode-alist))
(setq auto-insert-alist
;; XHTML文書はDOCTYPE宣言もいれる
(append '((("\\.xhtml\\([.]?\\w+\\)*\\'" . "XHTML Document")
nil "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
\"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd\">\n")
;; 普通のXML文書はXML宣言だけいれる
(("\\.xml'" . "XML Document")
nil "<?xml version='1.0' encoding='UTF-8'?>"))
auto-insert-alist))
(add-hook 'xml-mode-hook
(function
(lambda ()
;; タブは使わない
(make-variable-buffer-local 'indent-tabs-mode)
(setq indent-tabs-mode nil)
;; タイムスタンプ
;; Last modified:の後に空白かタブが入っていると
;; タイムスタンプを挿入
(make-local-variable 'time-stamp-start)
(setq time-stamp-start "Last modified:[ \t]")
(make-local-variable 'time-stamp-end)
(setq time-stamp-end "$")
(make-local-variable 'time-stamp-line-limit)
(setq time-stamp-line-limit 3000)
;; sgml-validate-commandでは環境変数を
;; 定義されるのでenvを使う
;; だってtcsh使ってるんだもん
(make-local-variable 'sgml-validate-command)
(setq sgml-validate-command
(concat "env " sgml-validate-command))
;; カタログのある場所を指定
(setq sgml-catalog-files
(append '("catalog" "~/sgml/catalog")
sgml-catalog-files)))))
設定例のようにsgml-catalog-filesのリストの中に~
/sgml/catalogのように自分で編集できるカタログファイルを指定して
おくと、このファイルを設定することでシステムで用意されていない
DTDも利用できるようになります。なんかうまくいかないけど。
例えば、~/sgml/catalogに以下のように書いて、~/sgml/以下にW3CからXHTMLのDTDをもってくると DOCTYPE宣言にPUBLIC識別子で使用するDTDを認識してくれます。
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" xhtml1-strict.dtd PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" xhtml1-transitional.dtd PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" xhtml1-frameset.dtd
うまくいかないので以下のようにして~/sgml/catalogを読みこませるよ うにします。
# upgrade-catalog --super --add ~hoge/sgml/catalog
/usr/share/sgml/html/dtd/catalogでDOCTYPE htmlとなっているものは HTML 4.01/looseに解釈されてしまうので以下のようにコメントアウト します。
-- DOCTYPE html 4.01/loose.dtd -- DOCTYPE HTML 4.01/loose.dtd