Emacsen


1. Emacs

といいながら,最近は Meadow のみ.

1.1 XHTML with PSGML (00.10.29-)

PSGML を使って XHTML 文書を書くための設定について.

XHTML 文書を xml-mode に関連付ける

(setq auto-mode-alist
      (append '(("\\.html$" . xml-mode)
            ...
       )
 auto-mode-alist))

DTD の設定

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 を見つけられない).

CATALOG ファイル

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"

最後の項目がファイル名になっているので, サブディレクトリに分ける場合には上記のように相対パスにしてもよい.

Validate (00.11.13)

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 でした.

reference

PSGML で XML 文書を書く by 山本さん

1.2 自分で DTD を書く (00.11.13)

DTD-mode

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 をもとに XML 文書を作る

今度は DTD 宣言を以下のように書く.

<!DOCTYPE tabledef SYSTEM "tabledef.dtd">

"DOCTYPE" の後に来る最初の要素名 (この場合は"tabledef") は, XML 文書なので例によって小文字にする. こう設定すると PSGML や nsgmls がカレントディレクトリにある "tabledef.dtd" を参照してくれる. DTD を変更したときは "C-c C-p" (sgml-parse-prolog) で DTD を解析し直す.

1.3 xslide のメモ (2001.1.8)

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 (2001.1.21)

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."

1.4 Meadow-1.13b1 (2001.1.8)

Mule-UCS を入れたくなったので,バージョンを上げてみた.

variable/function value
emacs-version"20.6.1"
mule-version"4.1 (AOI)"
system-typewindows-nt
system-configuration"i386-*-nt5.0.2195"
window-systemw32
window-system-version1
Meadow-version"Meadow-1.13 Beta1 (TANAHASHI:61)"

Meadow 自体のバージョンがどうしてもわからないと思ったら, "Meadow-version" は関数だった.

1.5 elisp package の手抜きインストール (2001.1.21)

Emacs 20 あたりから site-lisp ディレクトリの下に subdirs.el があるので, 普通は site-lisp の下に展開したアーカイブを直接移してしまってもよい. C-u M-x byte-recompile-directory で作成したディレクトリを指定すれば, *.el を bytecompile してくれる (1ファイルごとに bytecompile するか聞いてくるが). *.elc ができていないときは,もう一度実行するとだいたい作ってくれる.

1.6 Meadow-1.14 (2001.7.15)

variable/functionvalue
emacs-version"20.7.1"
mule-version"4.1 (AOI)"
system-typewindows-nt
system-configuration"i386-*-nt5.0.2195"
window-systemw32
window-system-version1
Meadow-version"Meadow-1.14 (AWSAKA:62)"

1.7 小物 (2001.8.26)

quote-region

Resource


2. Ng

村松さんの Ng のページ

tips


$Id: emacsen.html,v 1.7 2001/07/15 14:04:58 aurora Exp $