From 878c1d73d048d949dbace5688929d2d7701706cd Mon Sep 17 00:00:00 2001 From: "Richard M. Stallman" Date: Tue, 18 Jul 1995 21:43:16 +0000 Subject: [PATCH] (font-lock-defaults): New variable. (nroff-mode-syntax-table): New variable to provide comment syntax for font-lock; I'm not sure if this is (or should be) necessary in 19.29 with font-lock-defaults. (nroff-font-lock-keywords): New variable. (nroff-mode): Install nroff syntax table and font lock keywords. Comment about comments in filling and line-counting. --- lisp/textmodes/nroff-mode.el | 45 ++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/lisp/textmodes/nroff-mode.el b/lisp/textmodes/nroff-mode.el index b3258f38e11..15d5fd32c24 100644 --- a/lisp/textmodes/nroff-mode.el +++ b/lisp/textmodes/nroff-mode.el @@ -1,6 +1,6 @@ ;;; nroff-mode.el --- GNU Emacs major mode for editing nroff source -;; Copyright (C) 1985, 1986, 1994 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1994, 1995 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: wp @@ -29,6 +29,9 @@ ;; a command to count text lines (excluding nroff constructs), a command ;; to center a line, and movement commands that know how to skip macros. +;; Paragraph filling and line-counting currently don't respect comments, +;; as they should. + ;;; Code: (defvar nroff-mode-abbrev-table nil @@ -47,6 +50,32 @@ (define-key nroff-mode-map "\en" 'forward-text-line) (define-key nroff-mode-map "\ep" 'backward-text-line))) +(defvar nroff-mode-syntax-table nil + "Syntax table used while in nroff mode.") + +(defvar nroff-font-lock-keywords + (list + ;; Directives are . or ' at start of line, followed by + ;; optional whitespace, then command (which my be longer than + ;; 2 characters in groff). Perhaps the arguments should be + ;; fontified as well. + "^[.']\\s-*\\sw+" + ;; There are numerous groff escapes; the following get things + ;; like \-, \(em (standard troff) and \f[bar] (groff + ;; variants). This won't currently do groff's \A'foo' and + ;; the like properly. One might expect it to highlight an escape's + ;; arguments in common cases, like \f. + (concat "\\\\" ; backslash + "\\(" ; followed by various possibilities + (mapconcat 'identity + '("[f*n]*\\[.+]" ; some groff extensions + "(.." ; two chars after ( + "[^(\"]" ; single char escape + ) "\\|") + "\\)") + ) + "Font-lock highlighting control in nroff-mode.") + ;;;###autoload (defun nroff-mode () "Major mode for editing text intended for nroff to format. @@ -59,7 +88,19 @@ closing requests for requests that are used in matched pairs." (use-local-map nroff-mode-map) (setq mode-name "Nroff") (setq major-mode 'nroff-mode) - (set-syntax-table text-mode-syntax-table) + (if nroff-mode-syntax-table + () + (setq nroff-mode-syntax-table (copy-syntax-table text-mode-syntax-table)) + ;; " isn't given string quote syntax in text-mode but it + ;; (arguably) should be for use round nroff arguments (with ` and + ;; ' used otherwise). + (modify-syntax-entry ?\" "\" 2" nroff-mode-syntax-table) + ;; Comments are delimited by \" and newline. + (modify-syntax-entry ?\\ "\\ 1" nroff-mode-syntax-table) + (modify-syntax-entry ?\n "> 1" nroff-mode-syntax-table)) + (set-syntax-table nroff-mode-syntax-table) + (make-local-variable 'font-lock-defaults) + (setq font-lock-defaults '(nroff-font-lock-keywords nil t)) (setq local-abbrev-table nroff-mode-abbrev-table) (make-local-variable 'nroff-electric-mode) (setq nroff-electric-mode nil) -- 2.39.2