<< Prev | - Up - |
The PSGML package for emacs provides a very nice editing environment for SGML documents. You might put the following in your ~/.emacs
file:
(setq load-path (cons "
PSGML_DIR" load-path))
(autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t)
where PSGML_DIR is the directory in which PSGML is installed. At our lab, this directory is: /project/ps/emacs/lisp/psgml
To turn on fontification of SGML document, also add the following:
(setq sgml-set-face 't)
You may also specify what font faces to use for highlighting. Here is what I (Denys) am using today:
(setq sgml-markup-faces
'((start-tag . font-lock-reference-face)
(end-tag . font-lock-reference-face)
(comment . font-lock-comment-face )
(pi . font-lock-keyword-face )
(sgml . font-lock-type-face )
(doctype . font-lock-type-face )
(entity . font-lock-keyword-face )
(shortref . font-lock-reference-face)))
Strangely enough, when you open an SGML file for editing, the fontification process always waits for 6 seconds of idleness before it actually gets going. This is annoying, but hard coded.
For each document, psgml-mode
parses the DTD and uses this information to help editing (it knows what is legal, where). Normally it uses the <!DOCTYPE ...>
declaration at the top of the document to find theDTD. There are 2 common cases where that doesn't work well: when the DTD is in a location that PSGML cannot find and when editing part of a document in a separate file that doesn't have the DOCTYPE
declaration.
In such cases it is easier to load a ``parsed DTD''; it is also much faster. The easiest way to save a parsed DTD is to create, in the directory where the DTD is located, a file containing the following line:
<!DOCTYPE
ELEMSYSTEM "
DTD">
and to invoke ``Parse DTD'' and then ``Save Parsed DTD'' from the DTD menu. Then, when editing a partial document, you can manually invoke ``Load Parsed DTD'' from that same menu.
fill-mode
is also nice to get automatic line breaking, but, in my experience, it is better to turn adaptive-fill-mode
off, otherwise, due to the indentation of nested element, you'll soon be writing in a very narrow column at the right of the page. For example, you might add the following code at the end of and SGML document:
<!--
Local Variables:
mode: sgml
mode: auto-fill
adaptive-fill-mode: nil
End:
-->
as far as SGML is concerned, this is a comment, but is meaningful to emacs.
<< Prev | - Up - |