Einige Module erleichtern die Arbeit mit SGML- und verwandten Dokumenten und damit zusammenhängenden Aufgaben: PSGML, tdtd.
In Kombination mit PSGML ist der Emacs ein mächtiger SGML/XML-Editor. Er ist so in der Lage, mit beliebigen DTDs zu arbeiten; zum schnellen Zugriff können die geparsten DTDs in compilierter Form abgelegt werden. SGML-Auszeichnungen können nach Bedarf ein- und ausgeblendet werden. PSGML parst und validiert SGML-Dokumente. Die Befehle zum Editieren von SGML-Dokumenten stehen über Menüs, über Eingaben im Minibuffer oder über Tastaturkürzel zur Verfügung. Eine Einschränkung, die aber im Grunde keine ist, muss genannt werden: es werden Dokumente vorausgesetzt, die der Reference Concrete Syntax folgen[1].
PSGML wird mit SuSE Linux als eigenständiges Paket mitgeliefert. Autor: Lenart Stafflin; URL: http://www.lysator.liu.se/projects/about_psgml.html. Es findet gerade ein Umzug nach http://psgml.sourceforge.net statt; Mailinglisten: http://lists.sourceforge.net/mailman/listinfo/psgml-user und http://lists.sourceforge.net/mailman/listinfo/psgml-devel. Mit der Version 1.2.1 ist nunmehr zudem möglich, XML-Dokumente zu editieren.
Ein ausführliches Manual zu PSGML ist vorhanden.
Vorschlag für die .emacs:
(eval-after-load "psgml-parse" '(modify-syntax-entry ?_ "_" sgml-parser-syntax)) (add-to-list 'load-path "/usr/share/emacs/site-lisp/psgml") (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t) (add-hook 'sgml-mode-hook #'(lambda () ;; (local-unset-key "\C-c\C-c") ;; (local-unset-key "\C-c\C-t") ;; (define-key sgml-mode-map "\C-c\C-c\C-c" 'sgml-show-context) ;; (define-key sgml-mode-map "\C-c\C-c\C-t" 'sgml-list-valid-tags) ;; (modify-face 'highlight "turquoise4" nil nil nil nil nil) ;; (modify-face 'italic "grey60" nil nil nil nil nil) ;; (modify-face 'bold-italic nil "grey80" nil nil nil nil) (auto-fill-mode t) (make-variable-buffer-local 'adaptive-fill-regexp) (setq adaptive-fill-regexp nil) (make-variable-buffer-local 'fill-column) (setq fill-column 79) ;; (require 'psgml-jade) )) (setq auto-mode-alist (append (list (cons "\\.xml\\'" 'xml-mode)) auto-mode-alist)) (autoload 'xml-mode "psgml" nil t) (setq sgml-xml-declaration "/usr/share/sgml/jade_dsl/xml.dcl") (setq sgml-markup-faces '((start-tag . italic) (end-tag . italic) (comment . font-lock-comment-face) ;; comment declaration ;; ignored - ignored marked section ;; ms-end - marked section start, if not ignored ;; ms-start - marked section end, if not ignored (pi . bold) ;; processing instruction (sgml . highlight) ;; SGML declaration (doctype . font-lock-string-face) ;; doctype declaration (entity . font-lock-reference-face) ;; general entity reference (shortref . font-lock-function-name-face)));; short reference (setq sgml-system-path '("/usr/share/sgml/gf" ;; "/usr/share/sgml/TEI/dtd" "/usr/share/sgml/ISO_8879:1986") sgml-public-map '("%S" "/usr/share/sgml/%o/%c/%d")) (setq sgml-catalog-files '("CATALOG" "~/sgml/CATALOG" "/usr/share/sgml/CATALOG") sgml-ecat-files '("ECAT" "~/sgml/ECAT" "/usr/share/sgml/ECAT")) (setq sgml-display-char-list-filename "/usr/share/emacs/site-lisp/psgml/iso88591.map") (setq sgml-validate-command "nsgmls -s %s %s") |
So können die DTDs entweder direkt über das Dateisystem oder über CATALOG-Dateien gefunden werden.
Beim Öffnen einer SGML-Datei wird die DTD eingelesen. Mit C-c C-p (sgml-parse-prolog
) erzwingt man das Parsen der DTD.
Die geparste DTD kann mit sgml-save-dtd
in
compilierter Form gespeichert werden; so geht dann in Zukunft das Einlesen
schneller von statten.
sgml-insert-element
—
Einfügen eines Elements; mit Completion können die am jeweiligen Punkt gültigen
Elemente angezeigt und dann ausgewählt werden.
sgml-change-element-name
—
Den eines Elements ändern; es werden nur die Namen angeboten, die am jeweiligen
Punkt gültigt sind.
sgml-edit-attributes
— In einem eigenen
Editierfenster können bei den Attributen die Werte eingegeben werden; mit
Tab zum nächsten Eingabefeld springen und mit
C-c C-c das Eingeben von Attributen beenden.
[1] | Die Reference Concrete Syntax hat sich bei vielen Projekten bewährt und wird deshalb üblicherweise bevorzugt. |
Zurück | Zum Anfang | Weiter |
Indirekte Puffer — indirect buffers | tdtd |