Mercurial > hg > xemacs-beta
diff lisp/modes/linuxdoc-sgml.el @ 167:85ec50267440 r20-3b10
Import from CVS: tag r20-3b10
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:45:46 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/modes/linuxdoc-sgml.el Mon Aug 13 09:45:46 2007 +0200 @@ -0,0 +1,176 @@ +;;; linuxdoc-sgml.el --- sgml-mode enhancements for linuxdoc + +;; Copyright (C) 1996 by Free Software Foundation, Inc. + +;; Author: Arun Sharma <asharma@sco.com> +;; Keywords: docs, languages + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; Installation: +;; Make sure that this file is in your load-path and put this line +;; in your .emacs. +;; (autoload 'linuxdoc-sgml-mode "linuxdoc-sgml" t t) +;; (setq auto-mode-alist (cons '("\\.sgml$" . linuxdoc-sgml-mode) +;; auto-mode-alist)) +;; +;; Optionally: +;; (add-hook 'linuxdoc-sgml-mode-hook 'turn-on-font-lock) +;; +;; Caveat: I've had problems getting sgml/html code to work with +;; lazy-lock. Currently under investigation. +;;; Code: + +(require 'sgml-mode) + +(defvar linuxdoc-sgml-tag-alist + (let* ((htmlurl '(("ftp:") ("file:") ("finger:") + ("gopher:") ("http:") ("mailto:") ("news:") + ("rlogin:") ("telnet:") ("tn3270:") ("wais:") + ("/cgi-bin/"))) + (name '(str)) + (id '(str))) + `(("abstract" \n) + ("article" \n) + ("author" t) + ("bf") + ("date" t) + ("descrip" \n) + ("enum" \n) + ("footnote") + ("htmlurl" t ("url" ,@htmlurl) ("name" ,@name)) + ("item" t) + ("itemize" \n) + ("label" ("id" ,@id)) + ("p" t) + ("quote" \n) + ("ref" t ("id") ("name" ,@name)) + ("sect" (t (setq str (read-input "Sect: ")) "\n<p>\n")) + ("sect1" (t (setq str (read-input "Sect1: ")) "\n<p>\n")) + ("sect2" (t (setq str (read-input "Sect2: ")) "\n<p>\n")) + ("sect3" (t (setq str (read-input "Sect3: ")) "\n<p>\n")) + ("sect4" (t (setq str (read-input "Sect4: ")) "\n<p>\n")) + ("tag //" t) + ("title" (t (setq str (read-input "Title: ")) "\n")) + ("toc" t) + ("tscreen") + ("tt" (nil (setq str (read-input "Text: ")))) + ("url" t ("url" ,@htmlurl) ("name" ,@name)) + ("verb" \n))) + "Linuxdoc specific tags") + +(defvar linuxdoc-sgml-tag-help + '(("abstract" . "Abstract of the document") + ("article" . "Beginning of the article") + ("author" . "Name of the Author") + ("bf" . "Bold font") + ("date" . "Date") + ("descrip" . "Description environment") + ("enum" . "Enumerated items") + ("footnote" . "Footnotes") + ("htmlurl" . "Insert a URL that shows up only in the HTML version") + ("item" . "An enumerated or unordered item") + ("itemize" . "Unordered list") + ("label" . "A label for cross reference") + ("p" . "Marks the end of the sect* tag") + ("quote" . "Quote a piece of text") + ("ref" . "Cross reference") + ("sect" . "Main section heading") + ("sect1" . "Level 1 section heading") + ("sect2" . "Level 2 section heading") + ("sect3" . "Level 3 section heading") + ("sect4" . "Level 4 section heading") + ("tag //" . "A description tag") + ("title" . "Title of the document") + ("toc" . "The table of contents") + ("tscreen" . "Indents the text and uses tt font") + ("tt" . "Uses the tt font") + ("url" . "Insert a URL") + ("verb" . "The text will be typed verbatim")) + "Help for linuxdoc specific tags") + +(defvar linuxdoc-sgml-tag-face-alist + '(("abstract" . underline) + ("article" . italic) + ("author" . italic) + ("bf" . bold) + ("date" . italic) + ("descrip" . font-lock-reference-face) + ("enum" . font-lock-type-face) + ("footnote" . font-lock-keyword-face) + ("htmlurl" . font-lock-string-face) + ("item" . font-lock-function-name-face) + ("itemize" . font-lock-type-face) + ("label" . font-lock-comment-face) + ("p" . default) + ("quote" . underline) + ("ref" . font-lock-comment-face) + ("sect" . underline) + ("sect1" . underline) + ("sect2" . underline) + ("sect3" . underline) + ("sect4" . underline) + ("tag" . font-lock-function-name-face) + ("title" . underline) + ("toc" . default) + ("tscreen" . underline) + ("tt" . underline) + ("url" . font-lock-string-face) + ("verb" . underline)) + "Value of `sgml-tag-face-alist' for linuxdoc-sgml mode.") + +(defvar linuxdoc-sgml-font-lock-keywords + '(("<\\([^>]*\\)>" . font-lock-comment-face)) + "Patterns to highlight in LD-SGML buffers.") + +;;;###autoload +(defun linuxdoc-sgml-mode () + "Major mode based on SGML mode for editing linuxdoc-sgml documents. +See the documentation on sgml-mode for more info. This mode +understands the linuxdoc-sgml tags." + (interactive) + (sgml-mode-common linuxdoc-sgml-tag-face-alist nil) + (use-local-map sgml-mode-map) + (make-local-variable 'sgml-tag-alist) + (make-local-variable 'sgml-face-tag-alist) + (make-local-variable 'sgml-tag-help) + (make-local-variable 'outline-regexp) + (make-local-variable 'outline-heading-end-regexp) + (make-local-variable 'outline-level) + (make-local-variable 'sgml-font-lock-keywords) + (setq mode-name "LD-SGML" + major-mode 'linuxdoc-sgml-mode + sgml-tag-alist linuxdoc-sgml-tag-alist + sgml-face-tag-alist linuxdoc-sgml-tag-face-alist + sgml-tag-help linuxdoc-sgml-tag-help + outline-regexp "^.*<sect[1-4]\\>" + outline-heading-end-regexp "<p>" + sgml-font-lock-keywords-1 (append sgml-font-lock-keywords-1 + linuxdoc-sgml-font-lock-keywords + sgml-font-lock-keywords) + + outline-level (lambda () + (char-after (1- (match-end 0))))) + (run-hooks 'linuxdoc-sgml-mode-hook)) + + +(provide 'linuxdoc-sgml) + +;;; linuxdoc-sgml.el ends here