といいながら,最近は Meadow のみ.
PSGML を使って XHTML 文書を書くための設定について.
(setq auto-mode-alist
(append '(("\\.html$" . xml-mode)
...
)
auto-mode-alist))
sgml-custom-dtd に使用する DTD のリストを設定する.
(setq sgml-custom-dtd
'(("XHTML 1.0"
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"xhtml/xhtml1-strict.dtd\">\n")
("XHTML 1.0 transitional"
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"xhtml/xhtml1-transitional.dtd\">\n")))
PSGML で使用する DTD 名と DOCTYPE 宣言のリストを並べる. DOCTYPE 宣言の root 要素を示す "html" は,XML 文書なので小文字にする. Public Identifier と System Identifier は CATALOG ファイルに合わせる (合わせないと DTD を見つけられない).
Public Identifier(DTD の名前) と Sysmte Identifier(DTD の実体) のマッピングを記述する. W3C の XHTML のページから DTD のアーカイブを取ってくると, "xhtml.soc" というファイルが含まれているので, /usr/local/lib/sgml に "CATALOG" というファイル名で置いておく (すでにあるならファイルの後のほうにでも追加する).
-- Oasis entity catalog for Extensible HTML 1.0 --
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "xhtml/xhtml1-strict.dtd"
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml/xhtml1-transitional.dtd"
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "xhtml1-frameset.dtd"
-- ISO latin 1 entity set for Extensible HTML (XML 1.0 format) --
PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "xhtml/xhtml-lat1.ent"
PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "xhtml/xhtml-symbol.ent"
PUBLIC "-//W3C//ENTITIES Special for XHTML//EN" "xhtml/xhtml-special.ent"
SGMLDECL "xhtml/xhtml1.dcl"
最後の項目がファイル名になっているので, サブディレクトリに分ける場合には上記のように相対パスにしてもよい.
SP を使って psgml から XHTML 文書を検証する.
| CATALOG, DTD のの場所 | SGML_SEARCH_PATH | c:\usr\local\lib\sgml |
| 文字コードの指定 (BTCF を使うとき) | SP_CHARSET_FIXED | 0 |
| SP_BCTF | sjis | |
| 文字コードの指定 (fixed character set mode のとき) | SP_CHARSET_FIXED | 1 |
| SP_ENCODING | sjis |
nsgmls をパスの通ったところに置いて C-c C-v で OK. まあ PSGML 使っていれば変な文書を作ってしまうこともあまりなさそうだけど.
2001.1.8 訂正: SGML_CATALOG_FILES じゃなくて,SGML_SEARCH_PATH でした.
PSGML で XML 文書を書く by 山本さん
tdtd を使って DTD を作る."C-c C-e" で要素宣言 (<!ELEMENT>) , "C-c C-a" で属性リスト宣言 (<!ATTLIST>) , "C-c C-%" で実体宣言 (<!ENTITY>) を挿入できる.
また,要素名や要素の内容を入力するところでは, 次に入力すべきものを表示したり, 選択可能なものを履歴風に M-p/M-n で選択できたりするようになっている.
注意: tdtd.el は dtd-autodetect-type() で DTD の先頭に XML 宣言が見つからないと dtd-xml-flag を nil にするようになっているので,XML 宣言を入れないと
<!ELEMENT body - - hoge >
のような要素型宣言になってしまう. XML は OMITTAG NO なので,パーサにかけるとエラーになってしまう.
今度は DTD 宣言を以下のように書く.
<!DOCTYPE tabledef SYSTEM "tabledef.dtd">
"DOCTYPE" の後に来る最初の要素名 (この場合は"tabledef") は, XML 文書なので例によって小文字にする. こう設定すると PSGML や nsgmls がカレントディレクトリにある "tabledef.dtd" を参照してくれる. DTD を変更したときは "C-c C-p" (sgml-parse-prolog) で DTD を解析し直す.
XSLT スタイルシートを手で書くのは面倒だなと思っていたら, xslide という elisp を発見.
| bind | 関数名 | 内容 |
|---|---|---|
| C-c< | xsl-insert-tag | xsl:xx と fo:xx を補完して入力する |
| C-cC-p | xsl-process | xsl プロセッサを起動する |
| / | xsl-electric-slash | < の後でスラッシュを押すと自動的にタグを閉じる |
| M-tab | xsl-complete | カーソルの直前の文字から文脈を判断して要素・属性を補完する. |
デフォルトでは,xsl-process で xt と saxon しか使えないので, Xalan-Java を使いたい場合には次のように xsl-process-commad を設定する. xt は UTF-8/16 しか受け付けないようなので,Xalan(+Xerces) を用意すると便利.
(setq xsl-process-command
(append
'("java org.apache.xalan.xslt.Process -IN %i -XSL %s -OUT %o")
xsl-process-command))
xsl-complete は補完候補が一意に決まらない場合, 別バッファに候補の一覧を表示するだけでいまいち使いにくいので, minibuffer で補完できるようにしてみた.
--- xslide.el.org Thu Sep 21 11:31:04 2000 +++ xslide.el Sun Jan 21 18:07:26 2001 @@ -491,11 +491,10 @@ (insert completion)) (t (goto-char here) - (message "Making completion list...") - (let ((list (all-completions pattern tab))) - (with-output-to-temp-buffer " *Completions*" - (display-completion-list list))) - (message "Making completion list...%s" "done"))))))) + (setq res (completing-read "xsl-complete: " tab nil t pattern)) + (insert + ;; insert completed strings(res) after pattern + (substring res (length pattern))))))))) (defun xsl-insert-tag (tag) "Insert a tag, reading tag name in minibuffer with completion."
Mule-UCS を入れたくなったので,バージョンを上げてみた.
| variable/function | value |
|---|---|
| emacs-version | "20.6.1" |
| mule-version | "4.1 (AOI)" |
| system-type | windows-nt |
| system-configuration | "i386-*-nt5.0.2195" |
| window-system | w32 |
| window-system-version | 1 |
| Meadow-version | "Meadow-1.13 Beta1 (TANAHASHI:61)" |
Meadow 自体のバージョンがどうしてもわからないと思ったら, "Meadow-version" は関数だった.
Emacs 20 あたりから site-lisp ディレクトリの下に subdirs.el があるので, 普通は site-lisp の下に展開したアーカイブを直接移してしまってもよい. C-u M-x byte-recompile-directory で作成したディレクトリを指定すれば, *.el を bytecompile してくれる (1ファイルごとに bytecompile するか聞いてくるが). *.elc ができていないときは,もう一度実行するとだいたい作ってくれる.
| variable/function | value |
|---|---|
| emacs-version | "20.7.1" |
| mule-version | "4.1 (AOI)" |
| system-type | windows-nt |
| system-configuration | "i386-*-nt5.0.2195" |
| window-system | w32 |
| window-system-version | 1 |
| Meadow-version | "Meadow-1.14 (AWSAKA:62)" |
$Id: emacsen.html,v 1.7 2001/07/15 14:04:58 aurora Exp $