2012-10-18

Emacs24でpsgmlを動かす

Emacs24にしてからpsgmlが動かなくなったので何とかした。nxml-modeだとhtmlのvalidationにやや難があるため。

PSGML | Free Development software downloads at SourceForge.net

変更したのは次の三点。

  • make-local-hookを使わないようにする
  • old-style backquotesを新しい書き方に直す
  • sgml-reduce-,をsgml-reduce-,にする

make-local-hookを使わないようにする

File mode specification error: (void-function make-local-hook)

というエラーが出るので修正する。単純に呼び出しを削除すれば良いみたい。

次のページにあるパッチでは、XEmacsのときだけmake-local-hookを呼び出すようにしている。修正箇所の参考になる。

#669280 - psgml: 'local automatically makes hook buffer-local in Emacs, make-local-hook is only for XEmacs - Debian Bug report logs:

old-style backquotesを直す

Loading `psgml-parse': old-style backquotes detected!
cons: Invalid function: (` (defmacro ((, (intern (format "sgml-eltype-%s" n)))) (et) (list (quote get) et (quote (quote ((, n)))))))

というようなエラーが出るので修正する。

(`で始まる部分が問題。

psgml-1.3.2からであれば、1.3.3開発中にコミットされていた次の差分を適用すれば良い。

change old style backquote

1.2.5からだといくつか適用できない部分がある。特にdefsubstの部分が無いとパッチが当たらない。

最低限、Merging Dave Loves patch from 1.2.4 branch.のdefun、define-compiler-macroをdefsubstへ置き換えている部分が必要。手作業でediffでもかけて修正すると良いかも。

私は1.3.2だとハイライトが正常に動作しなかったので以前から使っていた1.2.5をベースに修正をした。

sgml-reduce-,をsgml-reduce-,にする。

load-with-code-conversion: Invalid read syntax: ")"

というエラーが出るので修正する。

psgml-dtd.el内のsgml-reduce-,をsgml-reduce-,へ置換すれば良い。