[HOME]: [Mac OS X]: [MacPython]: [Emacs]: [生存報告記]: [MacEmacs JP Project]: [NTEmacs JP Project]:

sf.net:PSGML(開発元)

PSGML で XML 文書を書く

PSGML(HTML 文書作成支援)

Emacs Major Mode for SGML and XML DTDs

psgml-html.el

設定例

部分抜粋です。

CATALOG(DTD指定ファイル、カタログファイル)、とECAT(DTDにアクセス向上)のテキストファイルを用意します。 ECATファイルは速度をあまり気にしないなら中身は空でもかまいません。

CATALOG

        -- Oasis entity catalog for Extensible HTML 1.0 --
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"

        -- Ant DTD --
PUBLIC  "-//ANT//DTD project//EN"                 "ant.dtd"

ECAT

PUBLIC  "-//W3C//DTD XHTML 1.0 Strict//EN"        cdtd/xhtml1-strict.dtd
PUBLIC  "-//W3C//DTD XHTML 1.0 Transitional//EN"  cdtd/xhtml1-transitional.dtd
PUBLIC  "-//W3C//DTD XHTML 1.0 Frameset//EN"      cdtd/xhtml1-frameset.dtd
PUBLIC  "-//ANT//DTD project//EN"                 cdtd/ant.dtd

設置場所は/usr/local/lib/psqml/以下などがありますが~/etc/psgml/などでもいいです。.emacs.elで指定可能なので設定しやすい場所におきます。

psgmlディレクトリの直下にdtdファイル、CATALOGファイル、ECATファイルを設置します。またcdtdディレクトリを作成します。

.emacs.el設定例

(autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t)
(autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
(setq auto-mode-alist
      (append (list (cons "\\.xml\\'" 'xml-mode))
              auto-mode-alist)
      )
(setq auto-mode-alist
      (append (list (cons "\\.html\\'" 'xml-mode))
              auto-mode-alist)
      )

;; CATALOGとECATの位置設定
(setq sgml-catalog-files '("CATALOG" "/usr/local/lib/psgml/CATALOG"))
(setq sgml-ecat-files '("ECAT" "/usr/local/lib/psgml/ECAT"))

;; C-c C-u C-dで挿入可能なDTDの設定
(setq sgml-custom-dtd
 '(
   ("XHTML 1.0 Strict"
    "<!DOCTYPE html
  PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n")
   ("XHTML 1.0 Transitonal"
   "<!DOCTYPE html
  PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"
    \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n")
   ("Ant 1.4.1 DTD"
   "<!DOCTYPE project
  PUBLIC \"-//ANT//DTD project//EN\"
    \"ant.dtd\">\n")
   ))

;; 色付け
(add-hook 'xml-mode-hook
          (function (lambda()
                      (make-face 'sgml-comment-face)
                      (make-face 'sgml-start-tag-face)
                      (make-face 'sgml-end-tag-face)
                      (make-face 'sgml-doctype-face)

                      (set-face-foreground 'sgml-comment-face "dark slate grey")
                      (set-face-foreground 'sgml-start-tag-face "SkyBlue1")
                      (set-face-foreground 'sgml-end-tag-face "SkyBlue1")
                      (set-face-foreground 'sgml-doctype-face "DodgerBlue3")

                      (setq sgml-set-face t)
                      (setq sgml-markup-faces
                            '(
                              (comment   . sgml-comment-face)
                              (start-tag . sgml-start-tag-face)
                              (end-tag   . sgml-end-tag-face)
                              (doctype   . sgml-doctype-face)
                              )))))

簡易マニュアル

PSGML mod Latest manuallの抜粋

要素操作

C-c C-e

タグ挿入。<tag></tag>形式

C-c C-<

開始タグ挿入。<tag>形式

C-c C-/

終了タグ挿入。</tag>形式

C-c C-i

< tag />形式タグ挿入。

C-c C-r

選択領域を囲むタグ挿入。<tag></tag>形式

C-c -

開始終了タグを消す

C-c <RET>

ポイントのある部分からタグを分割

C-c C-t

現在の要素を表示に挿入可能な要素を表示する

属性操作

C-c +

属性の挿入

C-c =

属性の名称変更

C-c C-a

属性編集画面表示

Tab

次の属性へ移動

DTD

C-c C-u C-d

DOCTYPEの挿入

C-c C-p

DTDのパース

構文チェック

C-c C-v

構文チェクをする

C-c C-o

構文チェクで誤りがあったらそこにjump

PSGMLの構文チェンクは標準ではnsgmlsを利用します。がぼくはonsgmlsを利用しています。

fink install  opensp

にてインストール可能です。関連してopenjadeもインストールしておくのもよいかもしれません。

ブラウザでの確認

記述しな物をブラウザ上に表示する必要が生じる場合はよくあります。

(define-key xml-mode-map "\C-c\C-zv" 'browse-url-of-file)

などを設定します。

そのうち解説よう

key             binding
---             -------

<S-mouse-3>     sgml-tags-menu
ESC             Prefix Command
/               sgml-slash
>               sgml-close-angle
TAB             sgml-indent-or-tab
C-c             Prefix Command

ESC C-SPC       sgml-mark-element
ESC TAB         sgml-complete
ESC C-t         sgml-transpose-element
ESC C-h         sgml-mark-current-element
ESC C-@         sgml-mark-element
ESC C-k         sgml-kill-element
ESC C-u         sgml-backward-up-element
ESC C-d         sgml-down-element
ESC C-b         sgml-backward-element
ESC C-f         sgml-forward-element
ESC C-e         sgml-end-of-element
ESC C-a         sgml-beginning-of-element

C-c C-y         sgml-position
C-c C-z         sgml-trim-and-leave-element
C-c C-w         sgml-what-element
C-c C-v         sgml-validate
C-c C-t         sgml-list-valid-tags
C-c C-s         sgml-unfold-line
C-c C-r         sgml-tag-region
C-c C-q         sgml-fill-element
C-c C-p         sgml-parse-prolog
C-c C-o         sgml-next-trouble-spot
C-c C-n         sgml-up-element
C-c RET         sgml-split-element
C-c C-l         sgml-show-or-clear-log
C-c C-k         sgml-kill-markup
C-c TAB         sgml-add-element-to-element
C-c C-e         sgml-insert-element
C-c C-d         sgml-next-data-field
C-c C-c         sgml-show-context
C-c C-a         sgml-edit-attributes
C-c =           sgml-change-element-name
C-c <           sgml-insert-tag
C-c /           sgml-insert-end-tag
C-c +           sgml-insert-attribute
C-c -           sgml-untag-element
C-c #           sgml-make-character-reference
C-c C-u         Prefix Command
C-c C-f         Prefix Command

C-c C-u RET     sgml-custom-markup
C-c C-u C-l     sgml-unfold-line
C-c C-u C-e     sgml-unfold-element
C-c C-u C-d     sgml-custom-dtd
C-c C-u C-a     sgml-unfold-all

C-c C-f C-x     sgml-expand-element
C-c C-f C-s     sgml-fold-subelement
C-c C-f C-r     sgml-fold-region
C-c C-f C-e     sgml-fold-element

追加設定実験中

;; バッファが .html の場合 の設定
(add-hook 'sgml-mode-hook
          (lambda ()
            (if (or (string-match "\\.html$" (buffer-name))
                    (string-match "\\.htm$" (buffer-name)))
                (setq sgml-shorttag nil    ;タグの短縮は無効
                      sgml-indent-data nil ;自動インデントなし
                      sgml-general-insert-case 'lower ;要素名は小文字
                      sgml-auto-activate-dtd nil ;構文解析しない
                      ))
              ))


CategoryDatabase CategoryEmacs CategoryJava JDEE Ant