Update FSF's address.
[bpt/emacs.git] / lisp / hilit19.el
index 348b6c5..f6c5200 100644 (file)
@@ -1,23 +1,26 @@
-;; hilit19.el (Release 2.19) -- customizable highlighting for Emacs19.
-;; Copyright (c) 1993 Free Software Foundation, Inc.
-;;
-;; Author:   Jonathan Stigelman <Stig@netcom.com>
+;;; hilit19.el --- customizable highlighting for Emacs19
+
+;; Copyright (c) 1993, 1994 Free Software Foundation, Inc.
+
+;; Author:   Jonathan Stigelman <stig@hackvan.com>
 ;; Keywords: faces
-;; 
-;; This program is free software; you can redistribute it and/or modify
+
+;; 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 of the License, or
-;; (at your option) any later version.
-;; 
-;; This program is distributed in the hope that it will be useful,
+;; 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 this program; if not, write to the Free Software
-;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-;;
+;; 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:
 
@@ -29,7 +32,7 @@
 ;; WHERE TO GET THE LATEST VERSIONS OF HILIT19.EL (beta and release), 
 ;; PLUS LOTS OF OTHER *WAY COOL* STUFF VIA ANONYMOUS FTP:
 ;;
-;;      netcom.com:/pub/stig/src/{Beta,Release}/hilit19.el.gz
+;;      ftp.hackvan.com:/pub/stig/src/elisp/hilit19.el.gz
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -42,7 +45,7 @@
 ;; hilit19.el,v 2.19 1993/09/08 18:44:10 stig Release
 ;;
 ;; LCD Archive Entry:
-;; hilit19|Jonathan Stigelman|Stig@netcom.com|
+;; hilit19|Jonathan Stigelman|stig@hackvan.com|
 ;; Comprehensive (and comparatively fast) regex-based highlighting for Emacs 19|
 ;; 1993/09/08 18:44:10|Release 2.19|~/packages/hilit19.el.Z|
 ;;
 ;;
 ;; KNOWN BUGS/TO DO LIST/HELP WANTED/APPLY WITHIN
 ;;
-;; * When more than one size of font is used in different frames, only one
-;;   font size can have bold & italic properties.
-;;
 ;; * unbalanced, unescaped double quote characters can confuse hilit19.
 ;;   This will be fixed someday, so don't bug me about it.
 ;;
 ;; Revision 2.3  1993/07/27  02:15:49  stig
 ;; (hilit-lookup-face-create) incorporated patch which improves it's behavior
 ;; with more than one frame...  Still can't have bold on the same face in two
-;; differrent fonts sizes at the same time...
+;; different fonts sizes at the same time...
 ;;
 ;; Revision 2.2  1993/07/27  02:02:59  stig
 ;; vastly improved the makefile patterns
@@ -404,12 +404,12 @@ your init file.")
 (eval-when-compile (require 'reporter))        ; no compilation gripes
 
 (defun hilit-submit-feedback ()
-  "Submit feedback on hilit19 to the author: Stig@netcom.com"
+  "Submit feedback on hilit19 to the author: stig@hackvan.com"
   (interactive)
   (require 'reporter)
   (and (y-or-n-p "Do you really want to submit a report on hilit19? ")
        (reporter-submit-bug-report
-       "Jonathan Stigelman <Stig@netcom.com>"
+       "Jonathan Stigelman <stig@hackvan.com>"
        "hilit19.el (Release 2.19)"
        (and (y-or-n-p "Do you need to include a dump hilit variables? ")
             (append
@@ -441,11 +441,11 @@ your init file.")
          "  [ ] You're a RIGHTEOUS HACKER, what are your rates?\n"
          "  [ ] I've used the force and read the source, but I'M CONFUSED\n"
          "  [ ] a PATCH. (output of 'diff -uw old.el new.el' or 'diff -cw')\n"
-         "  [ ] a SERIOUS AND REPRODUCABLE BUG that is not an EMACS bug\n"
+         "  [ ] a SERIOUS AND REPRODUCIBLE BUG that is not an EMACS bug\n"
          "     - I *swear* that it's not already mentioned in the KNOWN BUGS\n"
-         "     - I HAVE CHECKED netcom.com:/pub/stig/src/Beta/hilit19.el.gz\n"
+         "     - I HAVE CHECKED ftp.hackvan.com:/pub/stig/src/elisp/hilit19.el.gz\n"
          "       for a newer release that fixes the problem.\n"
-         "    >> I HAVE ALSO CHECKED netcom.com:/pub/stig/src/Beta/hl319.el.gz\n"
+         "    >> I HAVE ALSO CHECKED ftp.hackvan.com:/pub/stig/src/elisp/hl319.el.gz\n"
          "       This is the alpha version...what will become hilit19 (Beta 3.0).\n"
          "\n"
          "Hey Stig, I *know* you're busy but...\n"))))
@@ -457,7 +457,7 @@ your init file.")
 
 (defconst hilit-default-face-table
   '(
-    ;; used for C/C++ and elisp and perl
+    ;; used for C/C++ and Emacs Lisp and perl
     (comment   firebrick-italic    moccasin           italic)
     (include   purple              Plum1              bold-italic)
     (define    ForestGreen-bold    green              bold)
@@ -473,7 +473,7 @@ your init file.")
     (glob-struct  magenta          Plum1              default-bold-underline)
     (named-param  DarkGoldenrod            Goldenrod          underline)
        
-    ;; and anotherone for LaTeX
+    ;; and another one for LaTeX
     (crossref    DarkGoldenrod     Goldenrod          underline)
     (formula     Goldenrod         DarkGoldenrod      underline)
  
@@ -562,7 +562,7 @@ See the documentation for hilit-lookup-face-create for names of valid faces."
 
 (defun hilit-lookup-face-create (face &optional force)
   "Get a FACE, or create it if it doesn't exist.  In order for it to
-properly create the face, the followwing naming convention must be used:
+properly create the face, the following naming convention must be used:
     [reverse-](fgcolor[/bgcolor])[-bold][-italic][-underline]
 Example: (hilit-lookup-face-create 'comment-face) might create and return 'red
 
@@ -637,17 +637,11 @@ See the documentation for hilit-translate and hilit-face-translation-table."
            (set-face-font face nil frame)
            (set-face-underline-p face (string-match "underline" fn))
            (if (string-match ".*bold" fn)
-               (progn
-                 ;; first, fix up this frame's face
-                 (make-face-bold face frame  'noerr)
-                 ;; now, fix up the face from the global list
-                 (set-face-font face (face-font face frame) t)))
+               ;; make face bold in all frames
+               (make-face-bold face nil 'noerr))
            (if (string-match ".*italic" fn)
-               (progn
-                 ;; first, fix up this frame's face
-                 (make-face-italic face frame 'noerr)
-                 ;; now, fix up the face from the global list
-                 (set-face-font face (face-font face frame) t)))
+               ;; make face italic in all frames
+               (make-face-italic face nil 'noerr))
            ))
       )))
   face)
@@ -824,9 +818,11 @@ non-nil."
         (if (> buffer-saved-size (car hilit-auto-rehighlight-fallback))
             (setq hilit-auto-rehighlight
                   (cdr hilit-auto-rehighlight-fallback)))
-        (if (> buffer-saved-size hilit-auto-highlight-maxout) nil
-          (hilit-rehighlight-buffer)
-          (set-buffer-modified-p nil)))))
+        (if (> buffer-saved-size hilit-auto-highlight-maxout)
+            nil
+          (let ((bm (buffer-modified-p)))
+            (hilit-rehighlight-buffer)
+            (set-buffer-modified-p bm))))))
 
 (defun hilit-repaint-command (arg)
   "Rehighlights according to the value of hilit-auto-rehighlight, or the
@@ -901,7 +897,7 @@ the entire buffer is forced."
 ;; ; For the Jargon-impaired, WYSIWYG === What You See Is What You Get
 ;; ; Sure, it sucks to type.  Oh, well.
 ;; (defun hilit-wysiwyg-replace ()
-;;   "Replace overstruck text with normal text that's been overlayed with the 
+;;   "Replace overstruck text with normal text that's been overlaid with the 
 ;; appropriate text attribute.  Suitable for a find-file hook."
 ;;   (save-excursion
 ;;     (goto-char (point-min))
@@ -979,35 +975,12 @@ the entire buffer is forced."
                     vm-preview-message-hook
                     vm-show-message-hook
 
-                    gnus-article-prepare-hook
-                    gnus-summary-prepare-hook
-                    gnus-group-prepare-hook
-
                     rmail-show-message-hook
                     mail-setup-hook 
                     mh-show-mode-hook
 
                     dired-after-readin-hook
                     ))
-
-          ;; rehighlight only visible part of summary buffer for speed.
-          (add-hook 'gnus-mark-article-hook
-                    (function
-                     (lambda ()
-                       (or (memq gnus-current-article gnus-newsgroup-marked)
-                           (gnus-summary-mark-as-read gnus-current-article))
-                       (gnus-summary-set-current-mark)
-                       (save-excursion
-                         (set-buffer gnus-summary-buffer)
-                         (hilit-rehighlight-region (window-start)
-                                                   (window-end) t)
-                         ))))
-          ;; only need prepare article hook
-          ;;
-          ;;   (add-hook 'gnus-select-article-hook
-          ;;             '(lambda () (save-excursion
-          ;;                           (set-buffer gnus-article-buffer)
-          ;;                           (hilit-rehighlight-buffer))))
           )
        (error (message "Error loading highlight hooks: %s" c)
              (ding) (sit-for 1))))
@@ -1140,7 +1113,24 @@ number of backslashes."
       ("[ \n\t({]\\(\\(const\\|register\\|volatile\\|unsigned\\|extern\\|static\\)\\s +\\)*\\(\\(\\w\\|[$_]\\)+_t\\|float\\|double\\|void\\|char\\|short\\|int\\|long\\|FILE\\|\\(\\(struct\\|union\\|enum\\|class\\)\\([ \t]+\\(\\w\\|[$_]\\)*\\)\\)\\)\\(\\s +\\*+)?\\|[ \n\t;()]\\)" nil type)
       ;; key words
       ("[^_]\\<\\(return\\|goto\\|if\\|else\\|case\\|default\\|switch\\|break\\|continue\\|while\\|do\\|for\\|public\\|protected\\|private\\|delete\\|new\\)\\>[^_]"
-       1 keyword)))))
+       1 keyword))))
+
+  (hilit-set-mode-patterns
+   '(objc-mode objective-C-mode)
+   (append
+    comments c++-comments strings preprocessor
+    '(
+      ;; function decls are expected to have types on the previous line
+      ("^\\(\\(\\w\\|[$_]\\)+::\\)?\\(\\w\\|[$_]\\)+\\s *\\(\\(\\w\\|[$_]\\)+\\s *((\\|(\\)[^)]*)+" nil defun)
+      ("^\\(\\(\\w\\|[$_]\\)+[ \t]*::[ \t]*\\)?\\(\\(\\w\\|[$_]\\)+\\|operator.*\\)\\s *\\(\\(\\w\\|[$_]\\)+\\s *((\\|(\\)[^)]*)+" nil defun)
+
+      ("^\\(template\\|typedef\\|struct\\|union\\|class\\|enum\\|public\\|private\\|protected\\).*$" nil decl)
+      ;; datatype -- black magic regular expression
+      ("[ \n\t({]\\(\\(const\\|register\\|volatile\\|unsigned\\|extern\\|static\\)\\s +\\)*\\(\\(\\w\\|[$_]\\)+_t\\|float\\|double\\|void\\|char\\|short\\|int\\|long\\|FILE\\|\\(\\(struct\\|union\\|enum\\|class\\)\\([ \t]+\\(\\w\\|[$_]\\)*\\)\\)\\)\\(\\s +\\*+)?\\|[ \n\t;()]\\)" nil type)
+      ;; key words
+      ("[^_]\\<\\(return\\|goto\\|if\\|else\\|case\\|default\\|switch\\|break\\|continue\\|while\\|do\\|for\\|public\\|protected\\|private\\|interface\\|implementation\\|end\\|super\\|self\\)\\>[^_]"
+       1 keyword))))
+  )
 
 (hilit-set-mode-patterns
  'perl-mode
@@ -1318,21 +1308,11 @@ number of backslashes."
 
 (hilit-set-mode-patterns
  'gnus-group-mode
- '(("^U.*$" nil gnus-group-unsubscribed)
-   ("^ +[01]?[0-9]:.*$" nil gnus-group-empty)
+ '(("^ U.*$" nil gnus-group-unsubscribed)
+   ("^\\*? +[01]?[0-9]:.*$" nil gnus-group-empty)
    ("^ +[2-9][0-9]:.*$" nil gnus-group-full)
    ("^ +[0-9][0-9][0-9]+:.*$" nil gnus-group-overflowing)))
 
-(hilit-set-mode-patterns
- 'gnus-summary-mode
- '(("^D +[0-9]+: \\[.*$" nil summary-seen)
-   ("^K +[0-9]+: \\[.*$" nil summary-killed)
-   ("^X +[0-9]+: \\[.*$" nil summary-Xed)
-   ("^- +[0-9]+: \\[.*$" nil summary-unread)
-   ("^. +[0-9]+:\\+\\[.*$" nil summary-current)
-   ("^  +[0-9]+: \\[.*$" nil summary-new)
-   ))
-
 (hilit-set-mode-patterns
  'vm-summary-mode
  '(("^   .*$" nil summary-seen)
@@ -1380,10 +1360,10 @@ number of backslashes."
    ("^\\s *(def\\(un\\|macro\\|advice\\|subst\\|method\\)\\s " "\\()\\|nil\\)" defun)
 
    ("^\\s *(\\(def\\(var\\|type\\|parameter\\)\\|declare\\)\\s +\\S +" nil decl)
-   ("^\\s *(def\\(const\\(ant\\)?\\|class\\|struct\\)\\s \\S +[ \t\n]+\\((\\(([^()]*)\\|[^()]+\\)*)\\)?" nil define)
+   ("^\\s *(def\\(const\\(ant\\)?\\|class\\|struct\\)\\s \\S +[ \t\n]+" nil define)
    ("^\\s *(\\(provide\\|require\\|\\(auto\\)?load\\).*$" nil include)
    ("[ \t]\\&\\(key\\|rest\\|optional\\|aux\\)\\s *" nil keyword)
-   ("(\\(let\\*?\\|locally\\|cond\\|if\\*?\\|or\\|and\\|map\\(car\\|c[ao]n\\)?\\|prog[nv1*]?\\|while\\|when\\|unless\\|do\\(\\*\\|list\\|times\\)\\|lambda\\|function\\|values\\|set\\([qf]\\|car\\|cdr\\)?\\|rplac[ad]\\|nconc\\|block\\|go\\|return\\(-from\\)?\\|[ec]?\\(type\\)?case\\|multiple-value-\\(bind\\|setq\\|list\\|call\\|prog1\\)\\|unwind-protect\\|handler-case\\|catch\\|throw\\|eval-when\\(-compile\\)?\\)[ \t\n]" 1 keyword)
+   ("(\\(let\\*?\\|locally\\|cond\\|if\\*?\\|or\\|and\\|map\\(car\\|c[ao]n\\)?\\|prog[nv1*]?\\|while\\|when\\|unless\\|do\\(\\*\\|list\\|times\\)\\|list\\|lambda\\|function\\|values\\|set\\([qf]\\|car\\|cdr\\)?\\|rplac[ad]\\|nconc\\|block\\|go\\|return\\(-from\\)?\\|[ec]?\\(type\\)?case\\|multiple-value-\\(bind\\|setq\\|list\\|call\\|prog1\\)\\|unwind-protect\\|handler-case\\|catch\\|throw\\|eval-when\\(-compile\\)?\\)[ \t\n]" 1 keyword)
    ))
 
 
@@ -1459,10 +1439,21 @@ number of backslashes."
 (hilit-set-mode-patterns
  'calendar-mode
  '(("[A-Z][a-z]+ [0-9]+" nil define)   ; month and year
-   ("S  M Tu  W Th  F  S" nil label)   ; week days
-   ("[0-9]+\\*" nil defun)             ; holidays
-   ("[0-9]+\\+" nil comment)           ; diary days
-   ))
+   ("S  M Tu  W Th  F  S" nil label))) ; week days
+
+(hilit-set-mode-patterns
+ 'asm-mode
+ '(("/\\*" "\\*/" comment)
+   ("^#[ \t]*\\(undef\\|define\\).*$" "[^\\]$" define)
+   ("^#.*$" nil include)
+   ;; labels
+   ("^.+:" nil defun)
+   ;; assembler directives
+   ("^[ \t]*\\..*$" nil decl)
+   ;; register names
+   ("\\$[a-z0-9]+" nil string)
+   ;; mnemonics
+   ("^[ \t]*[a-z]+" nil struct)))
 
 (hilit-set-mode-patterns
  'pascal-mode
@@ -1509,7 +1500,7 @@ number of backslashes."
 ;; this:
 ;;         "This is a somewhat long -
 ;;          string, written on three -
-;;          succesive lines"
+;;          successive lines"
 ;; in order to insert a double quote in a string, you have to escape it
 ;; with a \), bu also a character set constant (named a charset), which
 ;; uses single quotes instead of double ones. It would seem intuitive to
@@ -1519,10 +1510,3 @@ number of backslashes."
 (provide 'hilit19)
 
 ;;; hilit19 ends here.
-
-
-;; __________________________________________________________________________
-;; Stig@netcom.com                            netcom.com:/pub/stig/00-PGP-KEY
-;; It's hard to be cutting-edge at your own pace...   32 DF B9 19 AE 28 D1 7A
-;; Bullet-proof code cannot stand up to teflon bugs.  A3 9D 0B 1A 33 13 4D 7F
-