xyzzyでHTMLの実体参照トグル

HTMLの中でサンプル的にHTMLソースを書く場合、「<b>強調</b>」てな感じで実体参照で書いてやる必要があります。この変換がなかなか面倒で、フォームにHTMLを入力したら実体参照に変換してくれるWebアプリなんかを自作してたんですが、やっぱりテキストエディタで直接やりたいと思ってました。

で、ちょうどいい感じで見付かったのが、chez sugiさんで公開されているHTML入力サポートのライブラリ。HTMLを実体参照文字に変換したり、逆に実体参照をHTMLに変換したりという機能が備わっています。

デフォルトだと"""、"&"、">"、"<"の4文字は変換対象にならなかったり(オプションで設定可能)、キーバインドが振られているのが文書全体の変換だったり(リージョンの変換はコマンドのみ提供)します。自分の用途だと、むしろこの4文字をリージョンで操作したいので、html-support.l を少し変更して組み込みました。

391|  (or flag (not (member key '("quot" "amp" "lt" "gt") :test 'equal))))
   ↓
391|  (or flag (member key '("quot" "amp" "lt" "gt") :test 'equal)))
411|  (or flag (not (member key '(34 38 60 62)))))
   ↓
411|  (or flag (member key '(34 38 60 62))))
420|  (define-key keymap '(#\C-c #\e) #'character-to-entity)
421|  (define-key keymap '(#\C-c #\c) #'entity-to-character)
   ↓
420|  (define-key keymap '(#\C-c #\e) #'character-to-entity-region)
421|  (define-key keymap '(#\C-c #\c) #'entity-to-character-region)

こんな設定に変更して、バリバリHTML書いておりますです。めっちゃ快適っすわ。