emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Improving a part of the Emacs Lisp Ref Manual


From: Richard Stallman
Subject: Improving a part of the Emacs Lisp Ref Manual
Date: Wed, 15 Nov 2006 17:58:49 -0500

Would anyone like to work on part of these suggestions?
I don't know the font lock data structures very well myself.

------- Start of forwarded message -------
From: "Drew Adams" <address@hidden>
To: <address@hidden>
Subject: Survey of font-lock-keywords examples   (was: tutorial or guidebook 
text for some complex topics)
Date: Sat, 11 Nov 2006 15:59:56 -0800
MIME-Version: 1.0
Content-Type: multipart/mixed;
        boundary="----=_NextPart_000_0025_01C705AA.6EAD0340"
In-Reply-To: <address@hidden>
X-Spam-Status: No, score=0.2 required=5.0 tests=UPPERCASE_25_50 autolearn=no 
        version=3.0.4

This is a multi-part message in MIME format.

- ------=_NextPart_000_0025_01C705AA.6EAD0340
Content-Type: text/plain;
        charset="iso-8859-15"
Content-Transfer-Encoding: 7bit

>     I don't have the time to do that right now. I'm not sure
>     existing code should be used as is for such examples,
>     but it might not be a bad place to start to look for raw
>     material. I just don't have the time to dig for it now.
>
> Whenever you are ready to spend time on Emacs, this would be a good
> choice of task to work on.  It would directly lead to progress
> on something you asked for.

I spent some time on this; I don't have more time to spend on it - HTH.

[BTW - To me, the greater need is for a pedagogic treatment of keymaps
(including menus). But font-lock-keywords is also a fairly complex structure
to understand.]

The first thing I noticed is that the doc string for `font-lock-keywords' is
far better than the Elisp manual treatment of it. I don't even see
MATCH-HIGHLIGHT and MATCH-ANCHORED explained in the manual. I don't have the
very latest manual, but you can look at that and then judge for yourself.

The second thing I would say is that the harder patterns to understand are
precisely the ones that need illustrative examples. In the manual, for
instance, there is no example for (MATCHER HIGHLIGHTERS...). There should be
examples of forms that use eval to a face, functions, pre- and post-match
forms, and a list of face properties.

The doc (both doc string and manual) for this topic is pretty heavy going
for a reader, so showing and explaining concrete examples of each pattern
type would help understanding, IMO.

Below is a categorization of some of those occurrences in terms for the
different patterns found, as I understand it. Hopefully, this is a start; it
is not exhaustive, but I did look at a lot of code. I don't claim the
patterns below are 100% correct, but they should guide you toward existing
examples that might be of interest.

Attached is the example code from a survey of the existing libraries. The
patterns listed below are taken from that attached list, so you should be
able to understand what I wrote below by referring to the attached list of
real code.

I didn't understand the following pattern, from cperl-mode.el: (REGEXP (2
FACE t) (0 '(restart 2 t))). I couldn't find what `restart' was.

Patterns found:

add-log.el:

1. (REGEXP (0 'FACE0) (REGEXP nil nil (1 'FACE) (2 'FACE)))

2. (REGEXP (2 FACE) (REGEXP nil nil (1 'FACE))
           (REGEXP nil nil (1 'FACE))
           (REGEXP nil nil (1 'FACE)))

bs.el:

1. (REGEXP (1 FACE append) (1 FACE append))

2. (REGEXP 1 FACE)

cvs-status.el:

1. (REGEXP (1 FACE) (2 FACE))

2. (REGEXP (REGEXP PRE-MATCH-FORM POST-MATCH-FORM (0 FACE))
           (REGEXP PRE-MATCH-FORM POST-MATCH-FORM (1 FACE)))

diff-mode.el:

(REGEXP . FACE)

dired.el:

1. (REGEXP (REGEXP #-OR-NIL nil (0 FACE)))

2. (eval list EVAL-TO-REGEXP '(REGEXP #-OR-NIL nil (0 FACE)))

font-lock.el:

1. (REGEXP 1 FACE prepend)

2. (REGEXP (1 FACE prepend) (FUNCTION nil nil (1 FACE prepend)))

3. (REGEXP (REGEXP nil nil (1 FACE prepend) (2 FACE prepend t)))

4. (REGEXP (1 FACE prepend) (# FACE nil t))

5. (REGEXP (1 FACE) (9 FACE nil t))

6. (REGEXP . 1)

7. (FUNCTION) [= (lambda (bound))]

hexl.el:

(REGEXP (1 FACE t t) (2 FACE t t))

log-view.el:

(REGEXP (1 FACE nil t) (2 FACE nil t) (0 FACE append))

outline.el:

(eval list EVAL-TO-REGEXP 0 EVAL-TO-FACE nil t)

shell.el:

(REGEXP . FACE)

smerge-mode.el

(FUNCTION (1 FACE prepend t) (2 FACE prepend t)
          (3 FACE t) (0 FACE keep) (4 nil t t) (5 nil t t))

diary-lib.el:

(REGEXP (0 FACE) (REGEXP . FACE)...)

message.el:

(FUNCTION (0 FACE))

sendmail.el:

1. (eval EVAL-TO-CONS-REGEXP . FACE)

2. (REGEXP (REGEXP PRE-MATCH-FORM POST-MATCH-FORM
                   (1 FACE nil t) (5 FACE nil t))

mh-folder.el:

1. (REGEXP (0 FACE))

2. (REGEXP (1 FACE nil t))

net-utils.el:

1. (REGEXP 0 FACE)

2. (REGEXP 1 FACE)

ada-mode.el:

REGEXP

asm-mode.el:

(REGEXP (1 FACE t) (8 FACE t t))

cc-awk.el:

1. (eval list REGEXP 0 FACE)

2. (REGEXP 0 FACE t)

cc-fonts.el:

1. (REGEXP 1 FACE prepend nil)

2. (FUNCTION)

compile.el:

(REGEXP (0 '(face nil message nil help-echo nil mouse-face nil) t))

cperl-mode.el:

1. (REGEXP . 2)

2. (REGEXP 0 FACE keep)

3. (REGEXP (2 FACE t) (0 '(restart 2 t))) ; ?

4. (REGEXP (2 FACE t) (REGEXP nil nil (1 FACE t)))

5. (REGEXP (3 FACE) (4 '(another 4 nil
                         (REGEXP (1 FACE) (2 '(restart 2 nil) nil t)))))

grep.el:

1. (REGEXP (0 '(face nil message nil help-echo nil mouse-face nil) t)
           (1 FACE) (2 FACE nil t))

2. (REGEXP (2 (FACE nil FACE match)))

3. (REGEXP (2 (face nil FACE match))
           (FUNCTION ; trivial: (lambda (bound))
            PRE-MATCH-FORM))

4. (REGEXP (FUNCTION PRE-MATCH-FORM))

icon.el:

(REGEXP (1 FACE) (FUNCTION PRE-MATCH-FORM nil (1 EVAL-TO-FACE)))

make-mode.el:

(REGEXP FUNCTION nil nil (1 FACE prepend t))

modula2.el:

1. (REGEXP (1 FACE) (FUNCTION nil POST-MATCH-FORM (1 FACE)))

2. (REGEXP (1 FACE) (FUNCTION nil POST-MATCH-FORM (1 FACE)))

perl-mode.el:

(REGEXP (2 EVAL-TO-FACESPEC))

ps-mode.el:

(FUNCTION (1 FACE nil t) (2 FACE nil t))

scheme.el:

(REGEXP (1 FACE) (6 EVAL-TO-FACE nil t))

simula.el:

1. (REGEXP (FUNCTION PRE-MATCH-FORM POST-MATCH-FORM (1 FACE)))

2. (REGEXP (3 FACE nil t) (FUNCTION nil nil (1 FACE)))

vhdl-mode.el:

(REGEXP (FUNCTION PRE-MATCH-FORM POST-MATCH-FORM (1 FACE)))

sgml-mode.el:

1. (REGEXP (1 EVAL-TO-FACE) (2 FACE nil t))

2. (REGEXP (3 EVAL-TO-FACE prepend))

tex-mode.el:

(REGEXP 2 EVAL-TO-FACE append)

 - Drew

- ------=_NextPart_000_0025_01C705AA.6EAD0340
Content-Type: application/octet-stream;
        name="font-lock-keyword-examples.el"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
        filename="font-lock-keyword-examples.el"

=0A=
;; add-log.el=0A=
(defvar change-log-font-lock-keywords=0A=
  '(;;=0A=
    ;; Date lines, new (2000-01-01) and old (Sat Jan  1 00:00:00 2000) =
styles.=0A=
    ;; Fixme: this regepx is just an approximate one and may match=0A=
    ;; wrongly with a non-date line existing as a random note.  In=0A=
    ;; addition, using any kind of fixed setting like this doesn't=0A=
    ;; work if a user customizes add-log-time-format.=0A=
    ("^[0-9-]+ +\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) =
[A-z][a-z][a-z] [0-9:+ ]+"=0A=
     (0 'change-log-date-face)=0A=
     ;; Name and e-mail; some people put e-mail in parens, not angles.=0A=
     ("\\([^<(]+?\\)[ =
\t]*[(<]\\(address@hidden)[>)]" nil nil=0A=
      (1 'change-log-name)=0A=
      (2 'change-log-email)))=0A=
    ;;=0A=
    ;; File names.=0A=
    ("^\\( +\\|\t\\)\\* \\([^ ,:([\n]+\\)"=0A=
     (2 'change-log-file)=0A=
     ;; Possibly further names in a list:=0A=
     ("\\=3D, \\([^ ,:([\n]+\\)" nil nil (1 'change-log-file))=0A=
     ;; Possibly a parenthesized list of names:=0A=
     ("\\=3D (\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"=0A=
      nil nil (1 'change-log-list))=0A=
     ("\\=3D, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"=0A=
      nil nil (1 'change-log-list)))=0A=
    ;;=0A=
    ;; Function or variable names.=0A=
    ("^\\( +\\|\t\\)(\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)"=0A=
     (2 'change-log-list)=0A=
     ("\\=3D, *\\([^(),\n]+\\|(\\(setf\\|SETF\\) [^() ,\n]+)\\)" nil nil=0A=
      (1 'change-log-list)))=0A=
    ;;=0A=
    ;; Conditionals.=0A=
    ("\\[!?\\([^]\n]+\\)\\]\\(:\\| (\\)" (1 'change-log-conditionals))=0A=
    ;;=0A=
    ;; Function of change.=0A=
    ("<\\([^>\n]+\\)>\\(:\\| (\\)" (1 'change-log-function))=0A=
    ;;=0A=
    ;; Acknowledgements.=0A=
    ;; Don't include plain "From" because that is vague;=0A=
    ;; we want to encourage people to say something more specific.=0A=
    ;; Note that the FSF does not use "Patches by"; our convention=0A=
    ;; is to put the name of the author of the changes at the top=0A=
    ;; of the change log entry.=0A=
    ("\\(^\\( +\\|\t\\)\\|  \\)\\(Patch\\(es\\)? by\\|Report\\(ed by\\| =
from\\)\=0A=
\\|Suggest\\(ed by\\|ion from\\)\\)"=0A=
     3 'change-log-acknowledgement))=0A=
  "Additional expressions to highlight in Change Log mode.")=0A=
=0A=
;; bs.el=0A=
(defvar bs-mode-font-lock-keywords=0A=
  (list ;; header in font-lock-type-face=0A=
   (list (bs--make-header-match-string)=0A=
         '(1 font-lock-type-face append) '(1 'bold append))=0A=
   ;; Buffername embedded by *=0A=
   (list "^\\(.*\\*.*\\*.*\\)$"=0A=
         1=0A=
         ;; problem in XEmacs with font-lock-constant-face=0A=
         (if (facep 'font-lock-constant-face)=0A=
             'font-lock-constant-face=0A=
           'font-lock-comment-face))=0A=
   ;; Dired-Buffers=0A=
   '("^..\\(.*Dired by .*\\)$" 1 font-lock-function-name-face)=0A=
   ;; the star for modified buffers=0A=
   '("^.\\(\\*\\) +[^\\*]"     1 font-lock-comment-face))=0A=
  "Default font lock expressions for Buffer Selection Menu.")=0A=
=0A=
;; cvs-status.el=0A=
(defconst cvs-status-font-lock-keywords=0A=
  `((,cvs-status-entry-leader-re=0A=
     (1 'cvs-filename)=0A=
     (2 'cvs-need-action))=0A=
    (,cvs-status-tags-leader-re=0A=
     (,cvs-status-rev-re=0A=
      (save-excursion (re-search-forward "^\n" nil 'move) (point))=0A=
      (progn (re-search-backward cvs-status-tags-leader-re nil t)=0A=
             (forward-line 1))=0A=
      (0 font-lock-comment-face))=0A=
     (,cvs-status-tag-re=0A=
      (save-excursion (re-search-forward "^\n" nil 'move) (point))=0A=
      (progn (re-search-backward cvs-status-tags-leader-re nil t)=0A=
             (forward-line 1))=0A=
      (1 font-lock-function-name-face)))))=0A=
=0A=
;; diff-mode.el=0A=
(defvar diff-font-lock-keywords=0A=
  `(("^\\(@@ -[0-9,]+ \\+[0-9,]+ @@\\)\\(.*\\)$"          ;unified=0A=
     (1 diff-hunk-header-face) (2 diff-function-face))=0A=
    ("^\\(\\*\\{15\\}\\)\\(.*\\)$"                        ;context=0A=
     (1 diff-hunk-header-face) (2 diff-function-face))=0A=
    ("^\\*\\*\\* .+ \\*\\*\\*\\*". diff-hunk-header-face) ;context=0A=
    ("^--- .+ ----$"             . diff-hunk-header-face) ;context=0A=
    ("^[0-9,]+[acd][0-9,]+$"     . diff-hunk-header-face) ;normal=0A=
    ("^---$"                     . diff-hunk-header-face) ;normal=0A=
    ("^\\(---\\|\\+\\+\\+\\|\\*\\*\\*\\) \\(\\S-+\\)\\(.*[^*-]\\)?\n"=0A=
     (0 diff-header-face) (2 diff-file-header-face prepend))=0A=
    ("^\\([-<]\\)\\(.*\n\\)"=0A=
     (1 diff-indicator-removed-face) (2 diff-removed-face))=0A=
    ("^\\([+>]\\)\\(.*\n\\)"=0A=
     (1 diff-indicator-added-face) (2 diff-added-face))=0A=
    ("^\\(!\\)\\(.*\n\\)"=0A=
     (1 diff-indicator-changed-face) (2 diff-changed-face))=0A=
    ("^Index: \\(.+\\).*\n"=0A=
     (0 diff-header-face) (1 diff-index-face prepend))=0A=
    ("^Only in .*\n" . diff-nonexistent-face)=0A=
    ("^\\(#\\)\\(.*\\)"=0A=
     (1 font-lock-comment-delimiter-face)=0A=
     (2 font-lock-comment-face))=0A=
    ("^[^-=3D+*!<>#].*\n" (0 diff-context-face))))=0A=
=0A=
;; dired.el=0A=
(defvar dired-font-lock-keywords=0A=
  (list=0A=
   ;;=0A=
   ;; Directory headers.=0A=
   (list dired-subdir-regexp '(1 dired-header-face))=0A=
   ;;=0A=
   ;; Dired marks.=0A=
   (list dired-re-mark '(0 dired-mark-face))=0A=
   ;;=0A=
   ;; We make heavy use of MATCH-ANCHORED, since the regexps don't =
identify the=0A=
   ;; file name itself.  We search for Dired defined regexps, and then =
use the=0A=
   ;; Dired defined function `dired-move-to-filename' before searching =
for the=0A=
   ;; simple regexp ".+".  It is that regexp which matches the file name.=0A=
   ;;=0A=
   ;; Marked files.=0A=
   (list (concat "^[" (char-to-string dired-marker-char) "]")=0A=
         '(".+" (dired-move-to-filename) nil (0 dired-marked-face)))=0A=
   ;;=0A=
   ;; Flagged files.=0A=
   (list (concat "^[" (char-to-string dired-del-marker) "]")=0A=
         '(".+" (dired-move-to-filename) nil (0 dired-flagged-face)))=0A=
   ;; People who are paranoid about security would consider this more=0A=
   ;; important than other things such as whether it is a directory.=0A=
   ;; But we don't want to encourage paranoia, so our default=0A=
   ;; should be what's most useful for non-paranoids. -- rms.=0A=
;;;   ;;=0A=
;;;   ;; Files that are group or world writable.=0A=
;;;   (list (concat dired-re-maybe-mark dired-re-inode-size=0A=
;;;              "\\([-d]\\(....w....\\|.......w.\\)\\)")=0A=
;;;      '(1 dired-warning-face)=0A=
;;;      '(".+" (dired-move-to-filename) nil (0 dired-warning-face)))=0A=
   ;; However, we don't need to highlight the file name, only the=0A=
   ;; permissions, to win generally.  -- fx.=0A=
   ;; Fixme: we could also put text properties on the permission=0A=
   ;; fields with keymaps to frob the permissions, somewhat a la XEmacs.=0A=
   (list (concat dired-re-maybe-mark dired-re-inode-size=0A=
                 "[-d]....\\(w\\)....") ; group writable=0A=
         '(1 dired-warning-face))=0A=
   (list (concat dired-re-maybe-mark dired-re-inode-size=0A=
                 "[-d].......\\(w\\).") ; world writable=0A=
         '(1 dired-warning-face))=0A=
   ;;=0A=
   ;; Subdirectories.=0A=
   (list dired-re-dir=0A=
         '(".+" (dired-move-to-filename) nil (0 dired-directory-face)))=0A=
   ;;=0A=
   ;; Symbolic links.=0A=
   (list dired-re-sym=0A=
         '(".+" (dired-move-to-filename) nil (0 dired-symlink-face)))=0A=
   ;;=0A=
   ;; Files suffixed with `completion-ignored-extensions'.=0A=
   '(eval .=0A=
     ;; It is quicker to first find just an extension, then go back to =
the=0A=
     ;; start of that file name.  So we do this complex MATCH-ANCHORED =
form.=0A=
     (list (concat "\\(" (regexp-opt completion-ignored-extensions) =
"\\|#\\)$")=0A=
           '(".+" (dired-move-to-filename) nil (0 dired-ignored-face))))=0A=
   ;;=0A=
   ;; Files suffixed with `completion-ignored-extensions'=0A=
   ;; plus a character put in by -F.=0A=
   '(eval .=0A=
     (list (concat "\\(" (regexp-opt completion-ignored-extensions)=0A=
                   "\\|#\\)[*=3D|]$")=0A=
           '(".+" (progn=0A=
                    (end-of-line)=0A=
                    ;; If the last character is not part of the filename,=0A=
                    ;; move back to the start of the filename=0A=
                    ;; so it can be fontified.=0A=
                    ;; Otherwise, leave point at the end of the line;=0A=
                    ;; that way, nothing is fontified.=0A=
                    (unless (get-text-property (1- (point)) 'mouse-face)=0A=
                      (dired-move-to-filename)))=0A=
             nil (0 dired-ignored-face))))=0A=
)=0A=
  "Additional expressions to highlight in Dired mode.")=0A=
=0A=
;; font-lock.el=0A=
(defconst cpp-font-lock-keywords=0A=
  (let* ((directives cpp-font-lock-keywords-source-directives)=0A=
         (directives-depth cpp-font-lock-keywords-source-depth))=0A=
    (list=0A=
     ;;=0A=
     ;; Fontify error directives.=0A=
     '("^#[ \t]*\\(?:error\\|warning\\)[ \t]+\\(.+\\)" 1 =
font-lock-warning-face prepend)=0A=
     ;;=0A=
     ;; Fontify filenames in #include <...> preprocessor directives as =
strings.=0A=
     '("^#[ \t]*\\(?:import\\|include\\)[ \t]*\\(<[^>\"\n]*>?\\)"=0A=
       1 font-lock-string-face prepend)=0A=
     ;;=0A=
     ;; Fontify function macro names.=0A=
     '("^#[ \t]*define[ \t]+\\([[:alpha:]_][[:alnum:]_$]*\\)(" =0A=
       (1 font-lock-function-name-face prepend)=0A=
       ;;=0A=
       ;; Macro arguments.=0A=
       ((lambda (limit)=0A=
          (re-search-forward=0A=
           "\\(?:\\([[:alpha:]_][[:alnum:]_]*\\)[,]?\\)" =0A=
           (or (save-excursion (re-search-forward ")" limit t)) =0A=
               limit)=0A=
           t)) =0A=
        nil nil (1 font-lock-variable-name-face prepend)))=0A=
     ;;=0A=
     ;; Fontify symbol names in #elif or #if ... defined preprocessor =
directives.=0A=
     '("^#[ \t]*\\(?:elif\\|if\\)\\>"=0A=
       ("\\<\\(defined\\)\\>[ \t]*(?\\([[:alpha:]_][[:alnum:]_]*\\)?" =
nil nil=0A=
        (1 font-lock-builtin-face prepend) (2 font-lock-variable-name-face =
prepend t)))=0A=
     ;;=0A=
     ;; Fontify otherwise as symbol names, and the preprocessor =
directive names.=0A=
     (list=0A=
      (concat "^\\(#[ \t]*\\(?:" directives=0A=
              "\\)\\)\\>[ \t!]*\\([[:alpha:]_][[:alnum:]_]*\\)?")=0A=
      '(1 font-lock-preprocessor-face prepend)=0A=
      (list (+ 2 directives-depth)=0A=
            'font-lock-variable-name-face nil t))))=0A=
    "Font lock keyords for C preprocessor directives.=0A=
`c-mode', `c++-mode' and `objc-mode' have their own =0A=
font lock keyords for C preprocessor directives. This definition is for =
the=0A=
other modes in which C preprocessor directives are used. e.g. `asm-mode' =
and=0A=
`ld-script-mode'.")=0A=
=0A=
;; font-lock.el=0A=
(defconst lisp-font-lock-keywords-1=0A=
  (eval-when-compile=0A=
    `(;; Definitions.=0A=
      (,(concat "(\\(def\\("=0A=
                ;; Function declarations.=0A=
                "\\(advice\\|alias\\|generic\\|macro\\*?\\|method\\|"=0A=
                "setf\\|subst\\*?\\|un\\*?\\|"=0A=
                "ine-\\(condition\\|"=0A=
                "\\(?:derived\\|\\(?:global-\\)?minor\\|generic\\)-mode\\|"=0A=
                "method-combination\\|setf-expander\\|skeleton\\|widget\\|"=0A=
                "function\\|\\(compiler\\|modify\\|symbol\\)-macro\\)\\)\\|"=0A=
                ;; Variable declarations.=0A=
                
"\\(const\\(ant\\)?\\|custom\\|varalias\\|face\\|parameter\\|var\\)\\|"=0A=
                ;; Structure declarations.=0A=
                "\\(class\\|group\\|theme\\|package\\|struct\\|type\\)"=0A=
                "\\)\\)\\>"=0A=
                ;; Any whitespace and defined object.=0A=
                "[ \t'\(]*"=0A=
                "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")=0A=
       (1 font-lock-keyword-face)=0A=
       (9 (cond ((match-beginning 3) font-lock-function-name-face)=0A=
                ((match-beginning 6) font-lock-variable-name-face)=0A=
                (t font-lock-type-face))=0A=
          nil t))=0A=
      ;; Emacs Lisp autoload cookies.=0A=
      ("^;;;###\\(autoload\\)" 1 font-lock-warning-face prepend)=0A=
      ;; Regexp negated char group.=0A=
      ("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)))=0A=
  "Subdued level highlighting for Lisp modes.")=0A=
=0A=
;; font-lock.el=0A=
(defconst lisp-font-lock-keywords-2=0A=
  (append lisp-font-lock-keywords-1=0A=
   (eval-when-compile=0A=
     `(;; Control structures.  Emacs Lisp forms.=0A=
       (,(concat=0A=
          "(" (regexp-opt=0A=
               '("cond" "if" "while" "while-no-input" "let" "let*"=0A=
                 "prog" "progn" "progv" "prog1" "prog2" "prog*"=0A=
                 "inline" "lambda" "save-restriction" "save-excursion"=0A=
                 "save-window-excursion" "save-selected-window"=0A=
                 "save-match-data" "save-current-buffer" "unwind-protect"=0A=
                 "condition-case" "track-mouse"=0A=
                 "eval-after-load" "eval-and-compile" "eval-when-compile"=0A=
                 "eval-when" "eval-at-startup" "eval-next-after-load"=0A=
                 "with-category-table"=0A=
                 "with-current-buffer" "with-electric-help"=0A=
                 "with-local-quit" "with-no-warnings"=0A=
                 "with-output-to-string" "with-output-to-temp-buffer"=0A=
                 "with-selected-window" "with-syntax-table"=0A=
                 "with-temp-buffer" "with-temp-file" "with-temp-message"=0A=
                 "with-timeout" "with-timeout-handler") t)=0A=
          "\\>")=0A=
          .  1)=0A=
       ;; Control structures.  Common Lisp forms.=0A=
       (,(concat=0A=
          "(" (regexp-opt=0A=
               '("when" "unless" "case" "ecase" "typecase" "etypecase"=0A=
                 "ccase" "ctypecase" "handler-case" "handler-bind"=0A=
                 "restart-bind" "restart-case" "in-package"=0A=
                 "break" "ignore-errors"=0A=
                 "loop" "do" "do*" "dotimes" "dolist" "the" "locally"=0A=
                 "proclaim" "declaim" "declare" "symbol-macrolet"=0A=
                 "lexical-let" "lexical-let*" "flet" "labels" "compiler-let"=0A=
                 "destructuring-bind" "macrolet" "tagbody" "block" "go"=0A=
                 "multiple-value-bind" "multiple-value-prog1"=0A=
                 "return" "return-from"=0A=
                 "with-accessors" "with-compilation-unit"=0A=
                 "with-condition-restarts" "with-hash-table-iterator"=0A=
                 "with-input-from-string" "with-open-file"=0A=
                 "with-open-stream" "with-output-to-string"=0A=
                 "with-package-iterator" "with-simple-restart"=0A=
                 "with-slots" "with-standard-io-syntax") t)=0A=
          "\\>")=0A=
          . 1)=0A=
       ;; Exit/Feature symbols as constants.=0A=
       (,(concat "(\\(catch\\|throw\\|featurep\\|provide\\|require\\)\\>"=0A=
                 "[ \t']*\\(\\sw+\\)?")=0A=
        (1 font-lock-keyword-face)=0A=
        (2 font-lock-constant-face nil t))=0A=
       ;; Erroneous structures.=0A=
       =
("(\\(abort\\|assert\\|warn\\|check-type\\|cerror\\|error\\|signal\\)\\>"=0A=
        1 font-lock-warning-face)=0A=
       ;; Words inside \\[] tend to be for `substitute-command-keys'.=0A=
       ("\\\\\\\\\\[\\(\\sw+\\)\\]" 1 font-lock-constant-face prepend)=0A=
       ;; Words inside `' tend to be symbol names.=0A=
       ("`\\(\\sw\\sw+\\)'" 1 font-lock-constant-face prepend)=0A=
       ;; Constant values.=0A=
       ("\\<:\\sw+\\>" 0 font-lock-builtin-face)=0A=
       ;; ELisp and CLisp `&' keywords as types.=0A=
       ("\\<\\&\\sw+\\>" . font-lock-type-face)=0A=
       ;; ELisp regexp grouping constructs=0A=
       ((lambda (bound)=0A=
          (catch 'found=0A=
            ;; The following loop is needed to continue searching after =
matches=0A=
            ;; that do not occur in strings.  The associated regexp =
matches one=0A=
            ;; of `\\\\' `\\(' `\\(?:' `\\|' `\\)'.  `\\\\' has been =
included to=0A=
            ;; avoid highlighting, for example, `\\(' in `\\\\('.=0A=
            (while (re-search-forward =
"\\(\\\\\\\\\\)\\(?:\\(\\\\\\\\\\)\\|\=0A=
\\((\\(?:\\?:\\)?\\|[|)]\\)\\)" bound t)=0A=
              (unless (match-beginning 2)=0A=
                (let ((face (get-text-property (1- (point)) 'face)))=0A=
                  (when (or (and (listp face)=0A=
                                 (memq 'font-lock-string-face face))=0A=
                            (eq 'font-lock-string-face face))=0A=
                    (throw 'found t)))))))=0A=
        (1 'font-lock-regexp-grouping-backslash prepend)=0A=
        (3 'font-lock-regexp-grouping-construct prepend))=0A=
;;;  This is too general -- rms.=0A=
;;;  A user complained that he has functions whose names start with `do'=0A=
;;;  and that they get the wrong color.=0A=
;;;      ;; CL `with-' and `do-' constructs=0A=
;;;      ("(\\(\\(do-\\|with-\\)\\(\\s_\\|\\w\\)*\\)" 1 =
font-lock-keyword-face)=0A=
      )))=0A=
  "Gaudy level highlighting for Lisp modes.")=0A=
=0A=
;; hexl.el=0A=
(defvar hexl-font-lock-keywords=0A=
  '(("^\\([0-9a-f]+:\\).\\{40\\}  \\(.+$\\)"=0A=
     ;; "^\\([0-9a-f]+:\\).+  \\(.+$\\)"=0A=
     (1 'hexl-address-region t t)=0A=
     (2 'hexl-ascii-region t t)))=0A=
  "Font lock keywords used in `hexl-mode'.")=0A=
=0A=
;; ielm.el=0A=
(defvar ielm-font-lock-keywords=0A=
  '(("\\(^\\*\\*\\*[^*]+\\*\\*\\*\\)\\(.*$\\)"=0A=
     (1 font-lock-comment-face)=0A=
     (2 font-lock-constant-face)))=0A=
  "Additional expressions to highlight in ielm buffers.")=0A=
=0A=
;; log-edit.el=0A=
(defvar log-edit-font-lock-keywords=0A=
  '(("\\`\\(Summary:\\)\\(.*\\)"=0A=
     (1 font-lock-keyword-face)=0A=
     (2 font-lock-function-name-face))))=0A=
=0A=
;; log-view.el=0A=
(defconst log-view-font-lock-keywords=0A=
  `((,log-view-file-re=0A=
     (1 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)=0A=
     (2 (if (boundp 'cvs-filename-face) cvs-filename-face) nil t)=0A=
     (0 log-view-file-face append))=0A=
    (,log-view-message-re . log-view-message-face)))=0A=
=0A=
;; outline.el=0A=
(defvar outline-font-lock-keywords=0A=
  '(;;=0A=
    ;; Highlight headings according to the level.=0A=
    (eval . (list (concat "^\\(?:" outline-regexp "\\).+")=0A=
                  0 '(outline-font-lock-face) nil t)))=0A=
  "Additional expressions to highlight in Outline mode.")=0A=
=0A=
;; shell.el=0A=
(defvar shell-font-lock-keywords=0A=
  '(("[ \t]\\([+-][^ \t\n]+\\)" 1 font-lock-comment-face)=0A=
    ("^[^ \t\n]+:.*" . font-lock-string-face)=0A=
    ("^\\[[1-9][0-9]*\\]" . font-lock-string-face))=0A=
  "Additional expressions to highlight in Shell mode.")=0A=
=0A=
;; smerge-mode.el=0A=
(defconst smerge-font-lock-keywords=0A=
  '((smerge-find-conflict=0A=
     (1 smerge-mine-face prepend t)=0A=
     (2 smerge-base-face prepend t)=0A=
     (3 smerge-other-face prepend t)=0A=
     ;; FIXME: `keep' doesn't work right with syntactic fontification.=0A=
     (0 smerge-markers-face keep)=0A=
     (4 nil t t)=0A=
     (5 nil t t)))=0A=
  "Font lock patterns for `smerge-mode'.")=0A=
=0A=
;; checkdoc.el=0A=
(defvar checkdoc-output-font-lock-keywords=0A=
  '(("^\\*\\*\\* \\(.+\\.el\\): \\([^ \n]+\\)"=0A=
     (1 font-lock-function-name-face)=0A=
     (2 font-lock-comment-face)))=0A=
  "Keywords used to highlight a checkdoc diagnostic buffer.")=0A=
=0A=
;; calendar.el=0A=
(defvar calendar-font-lock-keywords=0A=
  `((,(concat (regexp-opt (mapcar 'identity calendar-month-name-array) t)=0A=
              " -?[0-9]+")=0A=
     . font-lock-function-name-face) ; month and year=0A=
    (,(regexp-opt=0A=
       (list (substring (aref calendar-day-name-array 6) 0 2)=0A=
             (substring (aref calendar-day-name-array 0) 0 2)))=0A=
     ;; Saturdays and Sundays are hilited differently.=0A=
     . font-lock-comment-face)=0A=
    ;; First two chars of each day are used in the calendar.=0A=
    (,(regexp-opt (mapcar (lambda (x) (substring x 0 2)) =
calendar-day-name-array))=0A=
     . font-lock-reference-face))=0A=
  "Default keywords to highlight in Calendar mode.")=0A=
=0A=
;; diary-lib.el=0A=
(defvar fancy-diary-font-lock-keywords=0A=
  (list=0A=
   (list=0A=
    ;; Any number of " other holiday name" lines, followed by "=3D=3D" =
line.=0A=
    (concat diary-fancy-date-pattern "\\(\n +.*\\)*\n=3D+$")=0A=
    '(0 (progn (put-text-property (match-beginning 0) (match-end 0)=0A=
                                  'font-lock-multiline t)=0A=
               diary-face)))=0A=
   '("^.*\\([aA]nniversary\\|[bB]irthday\\).*$" . 'diary-anniversary)=0A=
   '("^.*Yahrzeit.*$" . font-lock-reference-face)=0A=
   '("^\\(Erev \\)?Rosh Hodesh.*" . font-lock-function-name-face)=0A=
   '("^Day.*omer.*$" . font-lock-builtin-face)=0A=
   '("^Parashat.*$" . font-lock-comment-face)=0A=
   `(,(format "\\(^\\|\\s-\\)%s\\(-%s\\)?" diary-time-regexp=0A=
              diary-time-regexp) . 'diary-time))=0A=
  "Keywords to highlight in fancy diary display")=0A=
=0A=
;; diary-lib.el=0A=
(defvar diary-font-lock-keywords=0A=
      (append=0A=
       (diary-font-lock-date-forms calendar-month-name-array=0A=
                                   nil calendar-month-abbrev-array)=0A=
       (when (or (memq 'mark-hebrew-diary-entries=0A=
                       nongregorian-diary-marking-hook)=0A=
                 (memq 'list-hebrew-diary-entries=0A=
                       nongregorian-diary-listing-hook))=0A=
         (require 'cal-hebrew)=0A=
         (diary-font-lock-date-forms=0A=
          calendar-hebrew-month-name-array-leap-year=0A=
          hebrew-diary-entry-symbol))=0A=
       (when (or (memq 'mark-islamic-diary-entries=0A=
                       nongregorian-diary-marking-hook)=0A=
                 (memq 'list-islamic-diary-entries=0A=
                       nongregorian-diary-listing-hook))=0A=
         (require 'cal-islam)=0A=
         (diary-font-lock-date-forms=0A=
          calendar-islamic-month-name-array=0A=
          islamic-diary-entry-symbol))=0A=
       (list=0A=
        (cons=0A=
         (concat "^" (regexp-quote diary-include-string) ".*$")=0A=
         'font-lock-keyword-face)=0A=
        (cons=0A=
         (concat "^" (regexp-quote diary-nonmarking-symbol)=0A=
                 "?\\(" (regexp-quote sexp-diary-entry-symbol) "\\)")=0A=
         '(1 font-lock-reference-face))=0A=
        (cons=0A=
         (concat "^" (regexp-quote diary-nonmarking-symbol))=0A=
         'font-lock-reference-face)=0A=
        (cons=0A=
         (concat "^" (regexp-quote diary-nonmarking-symbol)=0A=
                 "?\\(" (regexp-quote hebrew-diary-entry-symbol) "\\)")=0A=
         '(1 font-lock-reference-face))=0A=
        (cons=0A=
         (concat "^" (regexp-quote diary-nonmarking-symbol)=0A=
                 "?\\(" (regexp-quote islamic-diary-entry-symbol) "\\)")=0A=
         '(1 font-lock-reference-face))=0A=
        '(diary-font-lock-sexps . font-lock-keyword-face)=0A=
        `(,(concat "\\(^\\|\\s-\\)"=0A=
                   diary-time-regexp "\\(-" diary-time-regexp "\\)?")=0A=
          . 'diary-time)))=0A=
      "Forms to highlight in `diary-mode'.")=0A=
=0A=
;; dig.el=0A=
(defcustom dig-font-lock-keywords=0A=
  '(("^;; [A-Z]+ SECTION:" 0 font-lock-keyword-face)=0A=
    ("^;;.*" 0 font-lock-comment-face)=0A=
    ("^; <<>>.*" 0 font-lock-type-face)=0A=
    ("^;.*" 0 font-lock-function-name-face))=0A=
  "Default expressions to highlight in dig mode."=0A=
  :type 'sexp=0A=
  :group 'dig)=0A=
=0A=
;; gnus-srvr.el=0A=
(defvar gnus-server-font-lock-keywords=0A=
  (list=0A=
   '("(\\(agent\\))" 1 gnus-server-agent-face)=0A=
   '("(\\(opened\\))" 1 gnus-server-opened-face)=0A=
   '("(\\(closed\\))" 1 gnus-server-closed-face)=0A=
   '("(\\(offline\\))" 1 gnus-server-offline-face)=0A=
   '("(\\(denied\\))" 1 gnus-server-denied-face)))=0A=
=0A=
;; message.el=0A=
(defvar message-font-lock-keywords=0A=
  (let ((content "[ \t]*\\(.+\\(\n[ \t].*\\)*\\)\n?"))=0A=
    `((,(message-font-lock-make-header-matcher=0A=
         (concat "^\\([Tt]o:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-to nil t))=0A=
      (,(message-font-lock-make-header-matcher=0A=
         (concat "^\\(^[GBF]?[Cc][Cc]:\\|^[Rr]eply-[Tt]o:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-cc nil t))=0A=
      (,(message-font-lock-make-header-matcher=0A=
         (concat "^\\([Ss]ubject:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-subject nil t))=0A=
      (,(message-font-lock-make-header-matcher=0A=
         (concat "^\\([Nn]ewsgroups:\\|Followup-[Tt]o:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-newsgroups nil t))=0A=
      (,(message-font-lock-make-header-matcher=0A=
         (concat "^\\([A-Z][^: \n\t]+:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-other nil t))=0A=
      (,(message-font-lock-make-header-matcher=0A=
         (concat "^\\(X-[A-Za-z0-9-]+:\\|In-Reply-To:\\)" content))=0A=
       (1 'message-header-name)=0A=
       (2 'message-header-name))=0A=
      ,@(if (and mail-header-separator=0A=
                 (not (equal mail-header-separator "")))=0A=
            `((,(concat "^\\(" (regexp-quote mail-header-separator) "\\)$")=0A=
               1 'message-separator))=0A=
          nil)=0A=
      ((lambda (limit)=0A=
         (re-search-forward (concat "^\\("=0A=
                                    message-cite-prefix-regexp=0A=
                                    "\\).*")=0A=
                            limit t))=0A=
       (0 'message-cited-text))=0A=
      ("<#/?\\(multipart\\|part\\|external\\|mml\\|secure\\)[^>]*>"=0A=
       (0 'message-mml))))=0A=
  "Additional expressions to highlight in Message mode.")=0A=
=0A=
;; sieve-mode.el=0A=
(defconst sieve-font-lock-keywords=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;; control commands=0A=
     (cons (regexp-opt '("require" "if" "else" "elsif" "stop"))=0A=
           'sieve-control-commands-face)=0A=
     ;; action commands=0A=
     (cons (regexp-opt '("fileinto" "redirect" "reject" "keep" =
"discard"))=0A=
           'sieve-action-commands-face)=0A=
     ;; test commands=0A=
     (cons (regexp-opt '("address" "allof" "anyof" "exists" "false"=0A=
                         "true" "header" "not" "size" "envelope"))=0A=
           'sieve-test-commands-face)=0A=
     (cons "\\Sw+:\\sw+"=0A=
           'sieve-tagged-arguments-face))))=0A=
=0A=
;; rmail.el=0A=
(defvar rmail-font-lock-keywords=0A=
  ;; These are all matched case-insensitively.=0A=
  (eval-when-compile=0A=
    (let* ((cite-chars "[>|}]")=0A=
           (cite-prefix "a-z")=0A=
           (cite-suffix (concat cite-prefix "address@hidden'\"")))=0A=
      (list '("^\\(From\\|Sender\\|Resent-From\\):"=0A=
              . font-lock-function-name-face)=0A=
            '("^Reply-To:.*$" . font-lock-function-name-face)=0A=
            '("^Subject:" . font-lock-comment-face)=0A=
            '("^X-Spam-Status:" . font-lock-keyword-face)=0A=
            '("^\\(To\\|Apparently-To\\|Cc\\|Newsgroups\\):"=0A=
              . font-lock-keyword-face)=0A=
            ;; Use MATCH-ANCHORED to effectively anchor the regexp left 
side.=0A=
            `(,cite-chars=0A=
              (,(concat "\\=3D[ \t]*"=0A=
                        "\\(\\(\\([" cite-prefix "]+[" cite-suffix "]*\\)?"=0A=
                        "\\(" cite-chars "[ \t]*\\)\\)+\\)"=0A=
                        "\\(.*\\)")=0A=
               (beginning-of-line) (end-of-line)=0A=
               (1 font-lock-comment-delimiter-face nil t)=0A=
               (5 font-lock-comment-face nil t)))=0A=
            '("^\\(X-[a-z0-9-]+\\|In-reply-to\\|Date\\):.*\\(\n[ 
\t]+.*\\)*$"=0A=
              . font-lock-string-face))))=0A=
  "Additional expressions to highlight in Rmail mode.")=0A=
=0A=
;; rmail-sum.el=0A=
(defvar rmail-summary-font-lock-keywords=0A=
  '(("^.....D.*" . font-lock-string-face)                       ; Deleted.=0A=
    ("^.....-.*" . font-lock-type-face)                         ; Unread.=0A=
    ;; Neither of the below will be highlighted if either of the above =
are:=0A=
    ("^.....[^D-] \\(......\\)" 1 font-lock-keyword-face)       ; Date.=0A=
    ("{ \\([^\n}]+\\) }" 1 font-lock-comment-face))             ; Labels.=0A=
  "Additional expressions to highlight in Rmail Summary mode.")=0A=
=0A=
;; sendmail.el=0A=
(defvar mail-font-lock-keywords=0A=
  (eval-when-compile=0A=
    (let* ((cite-chars "[>|}]")=0A=
           (cite-prefix "[:alpha:]")=0A=
           (cite-suffix (concat cite-prefix "address@hidden'\"")))=0A=
      (list '("^\\(To\\|Newsgroups\\):" . font-lock-function-name-face)=0A=
            '("^\\(B?CC\\|Reply-to\\|Mail-\\(reply\\|\=0A=
followup\\)-to\\):" . font-lock-keyword-face)=0A=
            '("^\\(Subject:\\)[ \t]*\\(.+\\)?"=0A=
              (1 font-lock-comment-face)=0A=
;;            (2 font-lock-type-face nil t)=0A=
              )=0A=
            ;; Use EVAL to delay in case `mail-header-separator' gets 
changed.=0A=
            '(eval .=0A=
              (let ((separator (if (zerop (length mail-header-separator))=0A=
                                   " \\`\\' "=0A=
                                 (regexp-quote mail-header-separator))))=0A=
                (cons (concat "^" separator "$") 'font-lock-warning-face)))=0A=
            ;; Use MATCH-ANCHORED to effectively anchor the regexp left 
side.=0A=
            `(,cite-chars=0A=
              (,(concat "\\=3D[ \t]*"=0A=
                        "\\(\\(\\([" cite-prefix "]+[" cite-suffix "]*\\)?"=0A=
                        "\\(" cite-chars "[ \t]*\\)\\)+\\)"=0A=
                        "\\(.*\\)")=0A=
               (beginning-of-line) (end-of-line)=0A=
               (1 font-lock-comment-delimiter-face nil t)=0A=
               (5 font-lock-comment-face nil t)))=0A=
            '("^\\(X-[A-Za-z0-9-]+\\|In-reply-to\\):.*\\(\n[ \t]+.*\\)*$"=0A=
              . font-lock-string-face))))=0A=
  "Additional expressions to highlight in Mail mode.")=0A=
=0A=
;; mh-folder.el=0A=
(defvar mh-folder-font-lock-keywords=0A=
  (list=0A=
   ;; Folders when displaying index buffer=0A=
   (list "^\\+.*"=0A=
         '(0 'mh-search-folder))=0A=
   ;; Marked for deletion=0A=
   (list (concat mh-scan-deleted-msg-regexp ".*")=0A=
         '(0 'mh-folder-deleted))=0A=
   ;; Marked for refile=0A=
   (list (concat mh-scan-refiled-msg-regexp ".*")=0A=
         '(0 'mh-folder-refiled))=0A=
   ;; After subject=0A=
   (list mh-scan-body-regexp=0A=
         '(1 'mh-folder-body nil t))=0A=
   ;; Subject=0A=
   '(mh-folder-font-lock-subject=0A=
     (1 'mh-folder-followup append t)=0A=
     (2 'mh-folder-subject append t))=0A=
   ;; Current message number=0A=
   (list mh-scan-cur-msg-number-regexp=0A=
         '(1 'mh-folder-cur-msg-number))=0A=
   ;; Message number=0A=
   (list mh-scan-good-msg-regexp=0A=
         '(1 'mh-folder-msg-number))=0A=
   ;; Date=0A=
   (list mh-scan-date-regexp=0A=
         '(1 'mh-folder-date))=0A=
   ;; Messages from me (To:)=0A=
   (list mh-scan-rcpt-regexp=0A=
         '(1 'mh-folder-to)=0A=
         '(2 'mh-folder-address))=0A=
   ;; Messages to me=0A=
   (list mh-scan-sent-to-me-sender-regexp=0A=
         '(1 'mh-folder-sent-to-me-hint)=0A=
         '(2 'mh-folder-sent-to-me-sender)))=0A=
  "Keywords (regular expressions) used to fontify the MH-Folder buffer.")=0A=
=0A=
;; mh-letter.el=0A=
(defvar mh-letter-font-lock-keywords=0A=
  `(,@(mh-show-font-lock-keywords-with-cite)=0A=
    (mh-font-lock-field-data=0A=
     (1 'mh-letter-header-field prepend t)))=0A=
  "Additional expressions to highlight in MH-Letter buffers.")=0A=
=0A=
;; mh-show.el=0A=
(defvar mh-show-font-lock-keywords=0A=
  '(("^\\(From:\\|Sender:\\)\\(.*\\)"=0A=
     (1 'default)=0A=
     (2 'mh-show-from))=0A=
    (mh-header-to-font-lock=0A=
     (0 'default)=0A=
     (1 'mh-show-to))=0A=
    (mh-header-cc-font-lock=0A=
     (0 'default)=0A=
     (1 'mh-show-cc))=0A=
    ("^\\(Reply-To:\\|Return-Path:\\)\\(.*\\)$"=0A=
     (1 'default)=0A=
     (2 'mh-show-from))=0A=
    (mh-header-subject-font-lock=0A=
     (0 'default)=0A=
     (1 'mh-show-subject))=0A=
    ("^\\(Apparently-To:\\|Newsgroups:\\)\\(.*\\)"=0A=
     (1 'default)=0A=
     (2 'mh-show-cc))=0A=
    ("^\\(In-reply-to\\|Date\\):\\(.*\\)$"=0A=
     (1 'default)=0A=
     (2 'mh-show-date))=0A=
    (mh-letter-header-font-lock=0A=
     (0 'mh-show-header append t)))=0A=
  "Additional expressions to highlight in MH-Show buffers.")=0A=
=0A=
;; mh-show.el=0A=
(defvar mh-show-font-lock-keywords-with-cite=0A=
  (let* ((cite-chars "[>|}]")=0A=
         (cite-prefix "A-Za-z")=0A=
         (cite-suffix (concat cite-prefix "address@hidden'\"")))=0A=
    (append=0A=
     mh-show-font-lock-keywords=0A=
     (list=0A=
      ;; Use MATCH-ANCHORED to effectively anchor the regexp left side.=0A=
      `(,cite-chars=0A=
        (,(concat "\\=3D[ \t]*"=0A=
                  "\\(\\([" cite-prefix "]+[" cite-suffix "]*\\)?"=0A=
                  "\\(" cite-chars "[ \t]*\\)\\)+"=0A=
                  "\\(.*\\)")=0A=
         (beginning-of-line) (end-of-line)=0A=
         (2 font-lock-constant-face nil t)=0A=
         (4 font-lock-comment-face nil t))))))=0A=
  "Additional expressions to highlight in MH-Show buffers.")=0A=
=0A=
;; net-utils.el=0A=
(defconst nslookup-font-lock-keywords=0A=
  (progn=0A=
    (defvar font-lock-type-face)=0A=
    (defvar font-lock-keyword-face)=0A=
    (defvar font-lock-variable-name-face)=0A=
    (require 'font-lock)=0A=
    (list=0A=
     (list "^[A-Za-z0-9 _]+:"     0 font-lock-type-face)=0A=
     (list "\\<\\(SOA\\|NS\\|MX\\|A\\|CNAME\\)\\>"=0A=
           1 font-lock-keyword-face)=0A=
     ;; Dotted quads=0A=
     (list=0A=
      (mapconcat 'identity=0A=
                 (make-list 4 "[0-9]+")=0A=
                 "\\.")=0A=
      0 font-lock-variable-name-face)=0A=
     ;; Host names=0A=
     (list=0A=
      (let ((host-expression "[-A-Za-z0-9]+"))=0A=
        (concat=0A=
         (mapconcat 'identity=0A=
                    (make-list 2 host-expression)=0A=
                    "\\.")=0A=
         "\\(\\." host-expression "\\)*"))=0A=
      0 font-lock-variable-name-face)))=0A=
  "Expressions to font-lock for nslookup.")=0A=
=0A=
;; snmp-mode.el=0A=
(defvar snmp-font-lock-keywords-1=0A=
  (list=0A=
   ;; OBJECT-TYPE, TRAP-TYPE, and OBJECT-IDENTIFIER macros=0A=
   '("^[ \t]*\\([a-z][-a-zA-Z0-9]+\\)[ =
\t]+\\(\\(MODULE-\\(COMPLIANCE\\|IDENTITY\\)\\|\=0A=
OBJECT-\\(COMPLIANCE\\|GROUP\\|IDENTITY\\|TYPE\\)\\|TRAP-\\(GROUP\\|TYPE\=
\)\\)\\|\=0A=
\\(OBJECT\\)[ \t]+\\(IDENTIFIER\\)[ \t]*::=3D\\)"=0A=
     (1 font-lock-variable-name-face) (3 font-lock-keyword-face nil t)=0A=
     (7 font-lock-keyword-face nil t) (8 font-lock-keyword-face nil t))=0A=
=0A=
   ;; DEFINITIONS clause=0A=
   '("^[ \t]*\\([A-Z][-a-zA-Z0-9]+\\)[ \t]+\\(DEFINITIONS\\)[ \t]*::=3D"=0A=
     (1 font-lock-function-name-face) (2 font-lock-keyword-face))=0A=
   )=0A=
  "Basic SNMP MIB mode expression highlighting.")=0A=
=0A=
;; snmp-mode.el=0A=
(defvar snmp-font-lock-keywords-2=0A=
  (append=0A=
   =
'(("ACCESS\\|BEGIN\\|DE\\(FVAL\\|SCRIPTION\\)\\|END\\|FROM\\|I\\(MPORTS\\=
|NDEX\\)\\|\=0A=
S\\(TATUS\\|YNTAX\\)"=0A=
      (0 font-lock-keyword-face)))=0A=
   snmp-font-lock-keywords-1)=0A=
  "Medium SNMP MIB mode expression highlighting.")=0A=
=0A=
;; snmp-mode.el=0A=
(defvar snmp-font-lock-keywords-3=0A=
  (append=0A=
   '(("\\([^\n]+\\)[ \t]+::=3D[ \t]+\\(SEQUENCE\\)[ \t]+{"=0A=
      (1 font-lock-reference-face) (2 font-lock-keyword-face))=0A=
     ("::=3D[ \t]*{[ \t]*\\([a-z0-9].*[ \t]+\\)?\\([0-9]+\\)[ \t]*}"=0A=
      (1 font-lock-reference-face nil t) (2 =
font-lock-variable-name-face)))=0A=
   snmp-font-lock-keywords-2)=0A=
  "Gaudy SNMP MIB mode expression highlighting.")=0A=
=0A=
;; decipher.el=0A=
(defvar decipher-font-lock-keywords=0A=
  '(("^:.*"  . font-lock-keyword-face)=0A=
    ("^>.*"  . font-lock-string-face)=0A=
    ("^%!.*" . font-lock-constant-face)=0A=
    ("^%.*"  . font-lock-comment-face)=0A=
    ("\\`(\\([a-z]+\\) +\\([A-Z]+\\)"=0A=
     (1 font-lock-string-face)=0A=
     (2 font-lock-keyword-face))=0A=
    ("^)\\([A-Z ]+\\)\\([a-z ]+\\)"=0A=
     (1 font-lock-keyword-face)=0A=
     (2 font-lock-string-face)))=0A=
  "Expressions to fontify in Decipher mode.=0A=
=0A=
Ciphertext uses `font-lock-keyword-face', plaintext uses=0A=
`font-lock-string-face', comments use `font-lock-comment-face', and=0A=
checkpoints use `font-lock-constant-face'.  You can customize the=0A=
display by changing these variables.  For best results, I recommend=0A=
that all faces use the same background color.=0A=
=0A=
For example, to display ciphertext in the `bold' face, use=0A=
  (add-hook 'decipher-mode-hook=0A=
            (lambda () (set (make-local-variable 'font-lock-keyword-face)=0A=
                            'bold)))=0A=
in your `.emacs' file.")=0A=
=0A=
;; gomoku.el=0A=
(defvar gomoku-font-lock-keywords=0A=
  '(("O" . 'gomoku-O)=0A=
    ("X" . 'gomoku-X)=0A=
    ("[-|/\\]" 0 (if gomoku-emacs-won 'gomoku-O 'gomoku-X)))=0A=
  "*Font lock rules for Gomoku.")=0A=
=0A=
;; landmark.el=0A=
(defvar lm-font-lock-keywords=0A=
  '(("O" . 'lm-font-lock-face-O)=0A=
    ("X" . 'lm-font-lock-face-X)=0A=
    ("[-|/\\]" 0 (if lm-emacs-won=0A=
                     'lm-font-lock-face-O=0A=
                   'lm-font-lock-face-X)))=0A=
  "*Font lock rules for Lm.")=0A=
=0A=
;; ada-mode.el=0A=
(defvar ada-font-lock-keywords=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;;=0A=
     ;; handle "type T is access function return S;"=0A=
     (list "\\<\\(function[ \t]+return\\)\\>" '(1 =
font-lock-keyword-face) )=0A=
=0A=
     ;;  preprocessor line=0A=
     (list "^[ \t]*\\(#.*\n\\)"  '(1 font-lock-type-face t))=0A=
=0A=
     ;;=0A=
     ;; accept, entry, function, package (body), protected (body|type),=0A=
     ;; pragma, procedure, task (body) plus name.=0A=
     (list (concat=0A=
            "\\<\\("=0A=
            "accept\\|"=0A=
            "entry\\|"=0A=
            "function\\|"=0A=
            "package[ \t]+body\\|"=0A=
            "package\\|"=0A=
            "pragma\\|"=0A=
            "procedure\\|"=0A=
            "protected[ \t]+body\\|"=0A=
            "protected[ \t]+type\\|"=0A=
            "protected\\|"=0A=
            "task[ \t]+body\\|"=0A=
            "task[ \t]+type\\|"=0A=
            "task"=0A=
            "\\)\\>[ \t]*"=0A=
            "\\(\\sw+\\(\\.\\sw*\\)*\\)?")=0A=
           '(1 font-lock-keyword-face) '(2 font-lock-function-name-face =
nil t))=0A=
     ;;=0A=
     ;; Optional keywords followed by a type name.=0A=
     (list (concat                      ; ":[ \t]*"=0A=
            "\\<\\(access[ \t]+all\\|access[ =
\t]+constant\\|access\\|constant\\|\=0A=
in[ \t]+reverse\\|\\|in[ \t]+out\\|in\\|out\\)\\>"=0A=
            "[ \t]*"=0A=
            "\\(\\sw+\\(\\.\\sw*\\)*\\)?")=0A=
           '(1 font-lock-keyword-face nil t) '(2 font-lock-type-face nil =
t))=0A=
=0A=
     ;;=0A=
     ;; Main keywords, except those treated specially below.=0A=
     (concat "\\<"=0A=
             (regexp-opt=0A=
              '("abort" "abs" "abstract" "accept" "access" "aliased" =
"all"=0A=
                "and" "array" "at" "begin" "case" "declare" "delay" =
"delta"=0A=
                "digits" "do" "else" "elsif" "entry" "exception" "exit" =
"for"=0A=
                "generic" "if" "in" "is" "limited" "loop" "mod" "not"=0A=
                "null" "or" "others" "private" "protected" "raise"=0A=
                "range" "record" "rem" "renames" "requeue" "return" =
"reverse"=0A=
                "select" "separate" "tagged" "task" "terminate" "then" =
"until"=0A=
                "when" "while" "with" "xor") t)=0A=
             "\\>")=0A=
     ;;=0A=
     ;; Anything following end and not already fontified is a body name.=0A=
     '("\\<\\(end\\)\\>\\([ \t]+\\)?\\(\\(\\sw\\|[_.]\\)+\\)?"=0A=
       (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))=0A=
     ;;=0A=
     ;; Keywords followed by a type or function name.=0A=
     (list (concat "\\<\\("=0A=
                   "new\\|of\\|subtype\\|type"=0A=
                   "\\)\\>[ \t]*\\(\\sw+\\(\\.\\sw*\\)*\\)?[ =
\t]*\\((\\)?")=0A=
           '(1 font-lock-keyword-face)=0A=
           '(2 (if (match-beginning 4)=0A=
                   font-lock-function-name-face=0A=
                 font-lock-type-face) nil t))=0A=
     ;;=0A=
     ;; Keywords followed by a (comma separated list of) reference.=0A=
     ;; Note that font-lock only works on single lines, thus we can not=0A=
     ;; correctly highlight a with_clause that spans multiple lines.=0A=
     (list (concat "\\<\\(goto\\|raise\\|use\\|with\\)"=0A=
                   "[ \t]+\\([a-zA-Z0-9_., \t]+\\)\\W")=0A=
           '(1 font-lock-keyword-face) '(2 font-lock-reference-face nil =
t))=0A=
=0A=
     ;;=0A=
     ;; Goto tags.=0A=
     '("<<\\(\\sw+\\)>>" 1 font-lock-reference-face)=0A=
=0A=
     ;; Highlight based-numbers (R. Reagan <address@hidden>)=0A=
     (list "\\([0-9]+#[0-9a-fA-F_]+#\\)" '(1 font-lock-constant-face t))=0A=
=0A=
     ;; Ada unnamed numerical constants=0A=
     (list "\\W\\([-+]?[0-9._]+\\)\\>" '(1 font-lock-constant-face))=0A=
=0A=
     ))=0A=
  "Default expressions to highlight in Ada mode.")=0A=
=0A=
;; asm-mode.el=0A=
(defconst asm-font-lock-keywords=0A=
  (append =0A=
   '(("^\\(\\(\\sw\\|\\s_\\)+\\)\\>:?[ \t]*\\(\\sw+\\(\\.\\sw+\\)*\\)?"=0A=
      (1 font-lock-function-name-face) (3 font-lock-keyword-face nil t))=0A=
     ;; label started from ".".=0A=
     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>:"=0A=
      1 font-lock-function-name-face)=0A=
     ("^\\((\\sw+)\\)?\\s +\\(\\(\\.?\\sw\\|\\s_\\)+\\(\\.\\sw+\\)*\\)"=0A=
      2 font-lock-keyword-face)=0A=
     ;; directive started from ".".=0A=
     ("^\\(\\.\\(\\sw\\|\\s_\\)+\\)\\>[^:]?"=0A=
      1 font-lock-keyword-face)=0A=
     ;; %register=0A=
     ("%\\sw+" . font-lock-variable-name-face))=0A=
   cpp-font-lock-keywords)=0A=
  "Additional expressions to highlight in Assembler mode.")=0A=
=0A=
;; autoconf.el=0A=
(defvar autoconf-font-lock-keywords=0A=
  `(("\\_<A[CHMS]_\\sw+" . font-lock-keyword-face)=0A=
    (,autoconf-definition-regexp=0A=
     3 font-lock-function-name-face)=0A=
    ;; Are any other M4 keywords really appropriate for configure.in,=0A=
    ;; given that we do `dnl'?=0A=
    ("changequote" . font-lock-keyword-face)))=0A=
=0A=
;; cc-awk.el=0A=
(defconst awk-font-lock-keywords=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;; Function names.=0A=
     '("^\\s *\\(func\\(tion\\)?\\)\\>\\s *\\(\\sw+\\)?"=0A=
       (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))=0A=
     ;;=0A=
     ;; Variable names.=0A=
     (cons=0A=
      (concat "\\<"=0A=
              (regexp-opt=0A=
               '("ARGC" "ARGIND" "ARGV" "BINMODE" "CONVFMT" "ENVIRON"=0A=
                 "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR" "FS" "IGNORECASE"=0A=
                 "LINT" "NF" "NR" "OFMT" "OFS" "ORS" "PROCINFO" "RLENGTH"=0A=
                 "RS" "RSTART" "RT" "SUBSEP" "TEXTDOMAIN") t) "\\>")=0A=
      'font-lock-variable-name-face)=0A=
=0A=
     ;; Special file names.  (acm, 2002/7/22)=0A=
     ;; The following regexp was created by first evaluating this in GNU =
Emacs 21.1:=0A=
     ;; (regexp-opt '("/dev/stdin" "/dev/stdout" "/dev/stderr" =
"/dev/fd/n" "/dev/pid"=0A=
     ;;                 "/dev/ppid" "/dev/pgrpid" "/dev/user") 'words)=0A=
     ;; , removing the "?:" from each "\\(?:" (for backward =
compatibility with older Emacsen)=0A=
     ;; , replacing the "n" in "dev/fd/n" with "[0-9]+"=0A=
     ;; , removing the unwanted \\< at the beginning, and finally =
filling out the=0A=
     ;; regexp so that a " must come before, and either a " or heuristic =
stuff after.=0A=
     ;; The surrounding quotes are fontified along with the filename, =
since, semantically,=0A=
     ;; they are an indivisible unit.=0A=
     '("\\(\"/dev/\\(fd/[0-9]+\\|p\\(\\(\\(gr\\)?p\\)?id\\)\\|\=0A=
std\\(err\\|in\\|out\\)\\|user\\)\\)\\>\=0A=
\\(\\(\"\\)\\|\\([^\"/\n\r][^\"\n\r]*\\)?$\\)"=0A=
       (1 font-lock-variable-name-face t)=0A=
       (8 font-lock-variable-name-face t t))=0A=
     ;; Do the same (almost) with=0A=
     ;; (regexp-opt '("/inet/tcp/lport/rhost/rport" =
"/inet/udp/lport/rhost/rport"=0A=
     ;;                 "/inet/raw/lport/rhost/rport") 'words)=0A=
     ;; This cannot be combined with the above pattern, because the =
match number=0A=
     ;; for the (optional) closing \" would then exceed 9.=0A=
     =
'("\\(\"/inet/\\(\\(raw\\|\\(tc\\|ud\\)p\\)/lport/rhost/rport\\)\\)\\>\=0A=
\\(\\(\"\\)\\|\\([^\"/\n\r][^\"\n\r]*\\)?$\\)"=0A=
       (1 font-lock-variable-name-face t)=0A=
       (6 font-lock-variable-name-face t t))=0A=
=0A=
     ;; Keywords.=0A=
     (concat "\\<"=0A=
             (regexp-opt=0A=
              '("BEGIN" "END" "break" "continue" "delete" "do" "else"=0A=
                "exit" "for" "getline" "if" "in" "next" "nextfile"=0A=
                "return" "while")=0A=
              t) "\\>")=0A=
=0A=
     ;; Builtins.=0A=
     `(eval . (list=0A=
               ,(concat=0A=
                 "\\<"=0A=
                 (regexp-opt=0A=
                  '("adump" "and" "asort" "atan2" "bindtextdomain" "close"=0A=
                    "compl" "cos" "dcgettext" "exp" "extension" "fflush"=0A=
                    "gensub" "gsub" "index" "int" "length" "log" "lshift"=0A=
                    "match" "mktime" "or" "print" "printf" "rand" "rshift"=0A=
                    "sin" "split" "sprintf" "sqrt" "srand" "stopme"=0A=
                    "strftime" "strtonum" "sub" "substr"  "system"=0A=
                    "systime" "tolower" "toupper" "xor") t)=0A=
                 "\\>")=0A=
               0 c-preprocessor-face-name))=0A=
=0A=
     ;; gawk debugging keywords.  (acm, 2002/7/21)=0A=
     ;; (Removed, 2003/6/6.  These functions are now fontified as =
built-ins)=0A=
     ;; (list (concat "\\<" (regexp-opt '("adump" "stopme") t) "\\>")=0A=
     ;;    0 'font-lock-warning-face)=0A=
=0A=
     ;; User defined functions with an apparent spurious space before the=0A=
     ;; opening parenthesis.  acm, 2002/5/30.=0A=
     `(,(concat "\\(\\w\\|_\\)" c-awk-escaped-nls* "\\s "=0A=
                c-awk-escaped-nls*-with-space* "(")=0A=
       (0 'font-lock-warning-face))=0A=
=0A=
     ;; Space after \ in what looks like an escaped newline.  2002/5/31=0A=
     '("\\\\\\s +$" 0 font-lock-warning-face t)=0A=
=0A=
     ;; Unbalanced string (") or regexp (/) delimiters.  2002/02/16.=0A=
     '("\\s|" 0 font-lock-warning-face t nil)=0A=
     ;; gawk 3.1 localizable strings ( _"translate me!").  2002/5/21=0A=
     '("\\(_\\)\\s|" 1 font-lock-warning-face)=0A=
     '("\\(_\\)\\s\"" 1 font-lock-string-face) ; FIXME! not for XEmacs. =
2002/10/6=0A=
     ))=0A=
  "Default expressions to highlight in AWK mode.")=0A=
=0A=
;; cc-fonts.el=0A=
(defconst gtkdoc-font-lock-doc-comments=0A=
  (let ((symbol "[a-zA-Z0-9_]+")=0A=
        (header "^ \\* "))=0A=
    `((,(concat header "\\("     symbol "\\):[ \t]*$") =0A=
       1 ,c-doc-markup-face-name prepend nil)=0A=
      (,(concat                  symbol     "()")=0A=
       0 ,c-doc-markup-face-name prepend nil)=0A=
      (,(concat header "\\(" "@" symbol "\\):")=0A=
       1 ,c-doc-markup-face-name prepend nil)=0A=
      (,(concat "[#%]" symbol)=0A=
       0 ,c-doc-markup-face-name prepend nil))=0A=
    ))=0A=
=0A=
(defconst gtkdoc-font-lock-doc-protection=0A=
  `(("< \\(public\\|private\\|protected\\) >"=0A=
     1 ,c-doc-markup-face-name prepend nil)))=0A=
=0A=
(defconst gtkdoc-font-lock-keywords=0A=
  `((,(lambda (limit)=0A=
        (c-font-lock-doc-comments "/\\*\\*$" limit=0A=
          gtkdoc-font-lock-doc-comments)=0A=
        (c-font-lock-doc-comments "/\\*< " limit=0A=
          gtkdoc-font-lock-doc-protection)=0A=
        ))))=0A=
=0A=
;; cc-fonts.el=0A=
(defconst javadoc-font-lock-doc-comments=0A=
  `(("address@hidden"           ; "address@hidden ...}" markup.=0A=
     0 ,c-doc-markup-face-name prepend nil)=0A=
    ("^\\(/\\*\\)?\\(\\s \\|\\*\\)*\\(@[a-z]+\\)" ; "@foo ..." markup.=0A=
     3 ,c-doc-markup-face-name prepend nil)=0A=
    (,(concat "</?\\sw"                 ; HTML tags.=0A=
              "\\("=0A=
              (concat "\\sw\\|\\s \\|[=3D\n\r*.:]\\|"=0A=
                      "\"[^\"]*\"\\|'[^']*'")=0A=
              "\\)*>")=0A=
     0 ,c-doc-markup-face-name prepend nil)=0A=
    ("&\\(\\sw\\|[.:]\\)+;"             ; HTML entities.=0A=
     0 ,c-doc-markup-face-name prepend nil)=0A=
    ;; Fontify remaining markup characters as invalid.  Note=0A=
    ;; that the Javadoc spec is hazy about when "@" is=0A=
    ;; allowed in non-markup use.=0A=
    (,(lambda (limit)=0A=
        (c-find-invalid-doc-markup "[<>&]\\|{@" limit))=0A=
     0 'font-lock-warning-face prepend nil)))=0A=
=0A=
(defconst javadoc-font-lock-keywords=0A=
  `((,(lambda (limit)=0A=
        (c-font-lock-doc-comments "/\\*\\*" limit=0A=
          javadoc-font-lock-doc-comments)))))=0A=
=0A=
;; cfengine.el=0A=
(defvar cfengine-font-lock-keywords=0A=
  `(;; Actions.=0A=
    ;; List the allowed actions explicitly, so that errors are more =
obvious.=0A=
    (,(concat "^[ \t]*" (eval-when-compile=0A=
                          (regexp-opt cfengine-actions t))=0A=
              ":")=0A=
     1 font-lock-keyword-face)=0A=
    ;; Classes.=0A=
    ("^[ \t]*\\([[:alnum:]_().|!]+\\)::" 1 font-lock-function-name-face)=0A=
    ;; Variables.=0A=
    ("$(\\([[:alnum:]_]+\\))" 1 font-lock-variable-name-face)=0A=
    ("${\\([[:alnum:]_]+\\)}" 1 font-lock-variable-name-face)=0A=
    ;; Variable definitions.=0A=
    ("\\<\\([[:alnum:]_]+\\)[ \t]*=3D[ \t]*(" 1 =
font-lock-variable-name-face)=0A=
    ;; File, acl &c in group:   { token ... }=0A=
    ("{[ \t]*\\([^ \t\n]+\\)" 1 font-lock-constant-face)))=0A=
=0A=
;; compile.el=0A=
(defvar compilation-mode-font-lock-keywords=0A=
   '(;; Don't highlight this as a compilation message.=0A=
     ("^Compilation started at.*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t))=0A=
     ("^Compiling file .*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t))=0A=
     ;; configure output lines.=0A=
     ("^[Cc]hecking \\(?:[Ff]or \\|[Ii]f \\|[Ww]hether \\(?:to =
\\)?\\)?\\(.+\\)\=0A=
\\.\\.\\. *\\(?:(cached) *\\)?\\(\\(yes\\(?: =
.+\\)?\\)\\|no\\|\\(.*\\)\\)$"=0A=
      (1 font-lock-variable-name-face)=0A=
      (2 (compilation-face '(4 . 3))))=0A=
     ;; Command output lines.  Recognize `make[n]:' lines too.=0A=
     ("^\\([[:alnum:]_/.+-]+\\)\\(\\[\\([0-9]+\\)\\]\\)?[ \t]*:"=0A=
      (1 font-lock-function-name-face) (3 compilation-line-face nil t))=0A=
     (" --?o\\(?:utfile\\|utput\\)?[=3D ]?\\(\\S +\\)" . 1)=0A=
     ("^Compilation \\(finished\\).*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t)=0A=
      (1 compilation-info-face))=0A=
     ("^Compilation \\(exited =
abnormally\\|interrupt\\|killed\\|terminated\\)\=0A=
\\(?:.*with code \\([0-9]+\\)\\)?.*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t)=0A=
      (1 compilation-error-face)=0A=
      (2 compilation-error-face nil t)))=0A=
   "Additional things to highlight in Compilation mode.=0A=
This gets tacked on the end of the generated expressions.")=0A=
=0A=
;; cperl-mode.el=0A=
(defun cperl-init-faces ()=0A=
  (condition-case errs=0A=
      (progn=0A=
        (require 'font-lock)=0A=
        (and (fboundp 'font-lock-fontify-anchored-keywords)=0A=
             (featurep 'font-lock-extra)=0A=
             (message "You have an obsolete package `font-lock-extra'.  \=0A=
Install `choose-color'."))=0A=
        (let (t-font-lock-keywords t-font-lock-keywords-1 
font-lock-anchored)=0A=
          (if (fboundp 'font-lock-fontify-anchored-keywords)=0A=
              (setq font-lock-anchored t))=0A=
          (setq=0A=
           t-font-lock-keywords=0A=
           (list=0A=
            `("[ \t]+$" 0 ',cperl-invalid-face t)=0A=
            (cons=0A=
             (concat=0A=
              "\\(^\\|address@hidden&\\]\\)\\<\\("=0A=
              (mapconcat=0A=
               'identity=0A=
               '("if" "until" "while" "elsif" "else" "unless" "for"=0A=
                 "foreach" "continue" "exit" "die" "last" "goto" "next"=0A=
                 "redo" "return" "local" "exec" "sub" "do" "dump" "use"=0A=
                 "require" "package" "eval" "my" "BEGIN" "END" "CHECK" 
"INIT")=0A=
               "\\|")                   ; Flow control=0A=
              "\\)\\>") 2)              ; was "\\)[ \n\t;():,\|&]"=0A=
                                        ; In what follows we use `type' 
style=0A=
                                        ; for overwritable builtins=0A=
            (list=0A=
             (concat=0A=
              "\\(^\\|address@hidden&\\]\\)\\<\\("=0A=
              ;; "CORE" "__FILE__" "__LINE__" "abs" "accept" "alarm"=0A=
              ;; "and" "atan2" "bind" "binmode" "bless" "caller"=0A=
              ;; "chdir" "chmod" "chown" "chr" "chroot" "close"=0A=
              ;; "closedir" "cmp" "connect" "continue" "cos" "crypt"=0A=
              ;; "dbmclose" "dbmopen" "die" "dump" "endgrent"=0A=
              ;; "endhostent" "endnetent" "endprotoent" "endpwent"=0A=
              ;; "endservent" "eof" "eq" "exec" "exit" "exp" "fcntl"=0A=
              ;; "fileno" "flock" "fork" "formline" "ge" "getc"=0A=
              ;; "getgrent" "getgrgid" "getgrnam" "gethostbyaddr"=0A=
              ;; "gethostbyname" "gethostent" "getlogin"=0A=
              ;; "getnetbyaddr" "getnetbyname" "getnetent"=0A=
              ;; "getpeername" "getpgrp" "getppid" "getpriority"=0A=
              ;; "getprotobyname" "getprotobynumber" "getprotoent"=0A=
              ;; "getpwent" "getpwnam" "getpwuid" "getservbyname"=0A=
              ;; "getservbyport" "getservent" "getsockname"=0A=
              ;; "getsockopt" "glob" "gmtime" "gt" "hex" "index" "int"=0A=
              ;; "ioctl" "join" "kill" "lc" "lcfirst" "le" "length"=0A=
              ;; "link" "listen" "localtime" "lock" "log" "lstat" "lt"=0A=
              ;; "mkdir" "msgctl" "msgget" "msgrcv" "msgsnd" "ne"=0A=
              ;; "not" "oct" "open" "opendir" "or" "ord" "pack" "pipe"=0A=
              ;; "quotemeta" "rand" "read" "readdir" "readline"=0A=
              ;; "readlink" "readpipe" "recv" "ref" "rename" "require"=0A=
              ;; "reset" "reverse" "rewinddir" "rindex" "rmdir" "seek"=0A=
              ;; "seekdir" "select" "semctl" "semget" "semop" "send"=0A=
              ;; "setgrent" "sethostent" "setnetent" "setpgrp"=0A=
              ;; "setpriority" "setprotoent" "setpwent" "setservent"=0A=
              ;; "setsockopt" "shmctl" "shmget" "shmread" "shmwrite"=0A=
              ;; "shutdown" "sin" "sleep" "socket" "socketpair"=0A=
              ;; "sprintf" "sqrt" "srand" "stat" "substr" "symlink"=0A=
              ;; "syscall" "sysopen" "sysread" "system" "syswrite" "tell"=0A=
              ;; "telldir" "time" "times" "truncate" "uc" "ucfirst"=0A=
              ;; "umask" "unlink" "unpack" "utime" "values" "vec"=0A=
              ;; "wait" "waitpid" "wantarray" "warn" "write" "x" "xor"=0A=
              "a\\(bs\\|ccept\\|tan2\\|larm\\|nd\\)\\|"=0A=
              "b\\(in\\(d\\|mode\\)\\|less\\)\\|"=0A=
              "c\\(h\\(r\\(\\|oot\\)\\|dir\\|mod\\|own\\)\\|aller\\|rypt\\|"=0A=
              "lose\\(\\|dir\\)\\|mp\\|o\\(s\\|n\\(tinue\\|nect\\)\\)\\)\\|"=0A=
              "CORE\\|d\\(ie\\|bm\\(close\\|open\\)\\|ump\\)\\|"=0A=
              "e\\(x\\(p\\|it\\|ec\\)\\|q\\|nd\\(p\\(rotoent\\|went\\)\\|"=0A=
              "hostent\\|servent\\|netent\\|grent\\)\\|of\\)\\|"=0A=
              "f\\(ileno\\|cntl\\|lock\\|or\\(k\\|mline\\)\\)\\|"=0A=
              "g\\(t\\|lob\\|mtime\\|e\\(\\|t\\(p\\(pid\\|r\\(iority\\|"=0A=
              "oto\\(byn\\(ame\\|umber\\)\\|ent\\)\\)\\|eername\\|w"=0A=
              
"\\(uid\\|ent\\|nam\\)\\|grp\\)\\|host\\(by\\(addr\\|name\\)\\|"=0A=
              "ent\\)\\|s\\(erv\\(by\\(port\\|name\\)\\|ent\\)\\|"=0A=
              =
"ock\\(name\\|opt\\)\\)\\|c\\|login\\|net\\(by\\(addr\\|name\\)\\|"=0A=
              "ent\\)\\|gr\\(ent\\|nam\\|gid\\)\\)\\)\\)\\|"=0A=
              "hex\\|i\\(n\\(t\\|dex\\)\\|octl\\)\\|join\\|kill\\|"=0A=
              "l\\(i\\(sten\\|nk\\)\\|stat\\|c\\(\\|first\\)\\|t\\|e"=0A=
              =
"\\(\\|ngth\\)\\|o\\(c\\(altime\\|k\\)\\|g\\)\\)\\|m\\(sg\\(rcv\\|snd\\|"=0A=
              
"ctl\\|get\\)\\|kdir\\)\\|n\\(e\\|ot\\)\\|o\\(pen\\(\\|dir\\)\\|"=0A=
              "r\\(\\|d\\)\\|ct\\)\\|p\\(ipe\\|ack\\)\\|quotemeta\\|"=0A=
              "r\\(index\\|and\\|mdir\\|e\\(quire\\|ad\\(pipe\\|\\|lin"=0A=
              "\\(k\\|e\\)\\|dir\\)\\|set\\|cv\\|verse\\|f\\|winddir\\|name"=0A=
              
"\\)\\)\\|s\\(printf\\|qrt\\|rand\\|tat\\|ubstr\\|e\\(t\\(p\\(r"=0A=
              
"\\(iority\\|otoent\\)\\|went\\|grp\\)\\|hostent\\|s\\(ervent\\|"=0A=
              "ockopt\\)\\|netent\\|grent\\)\\|ek\\(\\|dir\\)\\|lect\\|"=0A=
              
"m\\(ctl\\|op\\|get\\)\\|nd\\)\\|h\\(utdown\\|m\\(read\\|ctl\\|"=0A=
              =
"write\\|get\\)\\)\\|y\\(s\\(read\\|call\\|open\\|tem\\|write\\)\\|"=0A=
              
"mlink\\)\\|in\\|leep\\|ocket\\(pair\\|\\)\\)\\|t\\(runcate\\|"=0A=
              "ell\\(\\|dir\\)\\|ime\\(\\|s\\)\\)\\|u\\(c\\(\\|first\\)\\|"=0A=
              "time\\|mask\\|n\\(pack\\|link\\)\\)\\|v\\(alues\\|ec\\)\\|"=0A=
              "w\\(a\\(rn\\|it\\(pid\\|\\)\\|ntarray\\)\\|rite\\)\\|"=0A=
              "x\\(\\|or\\)\\|__\\(FILE__\\|LINE__\\|PACKAGE__\\)"=0A=
              "\\)\\>") 2 'font-lock-type-face)=0A=
            ;; In what follows we use `other' style=0A=
            ;; for nonoverwritable builtins=0A=
            ;; Somehow 's', 'm' are not auto-generated???=0A=
            (list=0A=
             (concat=0A=
              "\\(^\\|address@hidden&\\]\\)\\<\\("=0A=
              ;; "AUTOLOAD" "BEGIN" "CHECK" "DESTROY" "END" "INIT" "__END__" =
"chomp"=0A=
              ;; "chop" "defined" "delete" "do" "each" "else" "elsif"=0A=
              ;; "eval" "exists" "for" "foreach" "format" "goto"=0A=
              ;; "grep" "if" "keys" "last" "local" "map" "my" "next"=0A=
              ;; "no" "package" "pop" "pos" "print" "printf" "push"=0A=
              ;; "q" "qq" "qw" "qx" "redo" "return" "scalar" "shift"=0A=
              ;; "sort" "splice" "split" "study" "sub" "tie" "tr"=0A=
              ;; "undef" "unless" "unshift" "untie" "until" "use"=0A=
              ;; "while" "y"=0A=
              =
"AUTOLOAD\\|BEGIN\\|CHECK\\|cho\\(p\\|mp\\)\\|d\\(e\\(fined\\|lete\\)\\|"=0A=
              
"o\\)\\|DESTROY\\|e\\(ach\\|val\\|xists\\|ls\\(e\\|if\\)\\)\\|"=0A=
              =
"END\\|for\\(\\|each\\|mat\\)\\|g\\(rep\\|oto\\)\\|INIT\\|if\\|keys\\|"=0A=
              "l\\(ast\\|ocal\\)\\|m\\(ap\\|y\\)\\|n\\(ext\\|o\\)\\|our\\|"=0A=
              "p\\(ackage\\|rint\\(\\|f\\)\\|ush\\|o\\(p\\|s\\)\\)\\|"=0A=
              =
"q\\(\\|q\\|w\\|x\\|r\\)\\|re\\(turn\\|do\\)\\|s\\(pli\\(ce\\|t\\)\\|"=0A=
              "calar\\|tudy\\|ub\\|hift\\|ort\\)\\|t\\(r\\|ie\\)\\|"=0A=
              "u\\(se\\|n\\(shift\\|ti\\(l\\|e\\)\\|def\\|less\\)\\)\\|"=0A=
              "while\\|y\\|__\\(END\\|DATA\\)__" ;__DATA__ added manually=0A=
              "\\|[sm]"                 ; Added manually=0A=
              "\\)\\>") 2 'cperl-nonoverridable)=0A=
            ;;          (mapconcat 'identity=0A=
            ;;                     '("#endif" "#else" "#ifdef" "#ifndef" 
"#if"=0A=
            ;;                       "#include" "#define" "#undef")=0A=
            ;;                     "\\|")=0A=
            '("-[rwxoRWXOezsfdlpSbctugkTBMAC]\\>\\([ \t]+_\\>\\)?" 0=0A=
              font-lock-function-name-face keep) ; Not very good, triggers at =
"[a-z]"=0A=
            '("\\<sub[ \t]+\\([^ \t{;()]+\\)[ \t]*\\(([^()]*)[ \t]*\\)?[#{\n]" 
1=0A=
              font-lock-function-name-face)=0A=
            '("\\<\\(package\\|require\\|use\\|import\\|no\\|bootstrap\\)[ 
\t]+\=0A=
\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t;]" ; require A if B;=0A=
              2 font-lock-function-name-face)=0A=
            '("^[ \t]*format[ \t]+\\([a-zA-z_][a-zA-z_0-9:]*\\)[ \t]*=3D[ 
\t]*$"=0A=
              1 font-lock-function-name-face)=0A=
            (cond ((featurep 'font-lock-extra)=0A=
                   '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\=0A=
\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"=0A=
                     (2 font-lock-string-face t)=0A=
                     (0 '(restart 2 t)))) ; To highlight $a{bc}{ef}=0A=
                  (font-lock-anchored=0A=
                   '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ \t]*\=0A=
\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"=0A=
                     (2 font-lock-string-face t)=0A=
                     ("\\=3D[ \t]*{[ \t]*\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"=0A=
                      nil nil=0A=
                      (1 font-lock-string-face t))))=0A=
                  (t '("\\([]}\\\\%@>*&]\\|\\$[a-zA-Z0-9_:]*\\)[ \t]*{[ 
\t]*\=0A=
\\(-?[a-zA-Z0-9_:]+\\)[ \t]*}"=0A=
                       2 font-lock-string-face t)))=0A=
            '("[\[ \t{,(]\\(-?[a-zA-Z0-9_:]+\\)[ \t]*=3D>" 1=0A=
              font-lock-string-face t)=0A=
            '("^[ \t]*\\([a-zA-Z0-9_]+[ \t]*:\\)[ =
\t]*\\($\\|{\\|\\<\\(until\\|while\\|\=0A=
for\\(each\\)?\\|do\\)\\>\\)" 1=0A=
              font-lock-constant-face)  ; labels=0A=
            '("\\<\\(continue\\|next\\|last\\|redo\\|goto\\)\\>[ \t]+\=0A=
\\([a-zA-Z0-9_:]+\\)" ; labels as targets=0A=
              2 font-lock-constant-face)=0A=
            ;; Uncomment to get perl-mode-like vars=0A=
            ;;; '("[$*]{?\\(\\sw+\\)" 1 font-lock-variable-name-face)=0A=
            ;;; '("\\(address@hidden|\\$#\\)\\(\\sw+\\)"=0A=
            ;;;  (2 (cons font-lock-variable-name-face '(underline))))=0A=
            (cond ((featurep 'font-lock-extra)=0A=
                   '("^[ \t]*\\(my\\|local\\|our\\)[ \t]*\\(([ \t]*\\)?\=0A=
\\(address@hidden:]+\\)\\([ \t]*,\\)?"=0A=
                     (3 font-lock-variable-name-face)=0A=
                     (4 '(another 4 nil=0A=
                                  ("\\=3D[ \t]*,[ \t]*\\(address@hidden:]+\=0A=
\\)\\([ \t]*,\\)?"=0A=
                                   (1 font-lock-variable-name-face)=0A=
                                   (2 '(restart 2 nil) nil t)))=0A=
                        nil t)))        ; local variables, multiple=0A=
                  (font-lock-anchored=0A=
                   '("^[ \t{}]*\\(my\\|local\\|our\\)[ \t]*\\(([ \t]*\\)?\=0A=
\\(address@hidden:]+\\)"=0A=
                     (3 font-lock-variable-name-face)=0A=
                     ("\\=3D[ \t]*,[ \t]*\\(address@hidden:]+\\)"=0A=
                      nil nil=0A=
                      (1 font-lock-variable-name-face))))=0A=
                  (t '("^[ \t{}]*\\(my\\|local\\our\\)[ \t]*\\(([ \t]*\\)?\=0A=
\\(address@hidden:]+\\)"=0A=
                       3 font-lock-variable-name-face)))=0A=
            '("\\<for\\(each\\)?\\([ \t]+\\(my\\|local\\|our\\)\\)?[ \t]*\=0A=
\\(\\$[a-zA-Z_][a-zA-Z_0-9]*\\)[ \t]*("=0A=
              4 font-lock-variable-name-face)=0A=
            ;; Avoid $!, and s!!, qq!! etc. when not fontifying syntaxically=0A=
            '("\\(?:^\\|[^smywqrx$]\\)\\(!\\)" 1 
font-lock-negation-char-face)=0A=
            '("\\[\\(\\^\\)" 1 font-lock-negation-char-face prepend)))=0A=
          (setq=0A=
           t-font-lock-keywords-1=0A=
           (and (fboundp 'turn-on-font-lock) ; Check for newer font-lock=0A=
                (not cperl-xemacs-p)    ; not yet as of XEmacs 19.12=0A=
                '(=0A=
                  ("\\(\\(address@hidden|\$#\\)[a-zA-Z_:][a-zA-Z0-9_:]*\\)" 
1=0A=
                   (if (eq (char-after (match-beginning 2)) ?%)=0A=
                       'cperl-hash=0A=
                     'cperl-array)=0A=
                   t)                   ; arrays and hashes=0A=
                  ("\\(\\(address@hidden)[a-zA-Z_:][a-zA-Z0-9_:]*\\)[ 
\t]*\\([[{]\\)"=0A=
                   1=0A=
                   (if (=3D (- (match-end 2) (match-beginning 2)) 1)=0A=
                       (if (eq (char-after (match-beginning 3)) ?{)=0A=
                           'cperl-hash=0A=
                         'cperl-array) ; arrays and hashes=0A=
                     font-lock-variable-name-face) ; Just to put something=0A=
                   t)=0A=
                  
;;("\\([smy]\\|tr\\)\\([^a-z_A-Z0-9]\\)\\(\\([^\n\\]*||\\)\\)\\2")=0A=
                       ;;; Too much noise from \s* @s[ and friends=0A=
                  ;;("\\(\\<\\([msy]\\|tr\\)[ \t]*\\([^ =
\t\na-zA-Z0-9_]\\)\\|\\(/\\)\\)"=0A=
                  ;;(3 font-lock-function-name-face t t)=0A=
                  ;;(4=0A=
                  ;; (if (cperl-slash-is-regexp)=0A=
                  ;;    font-lock-function-name-face 'default) nil t))=0A=
                  )))=0A=
          (if cperl-highlight-variables-indiscriminately=0A=
              (setq t-font-lock-keywords-1=0A=
                    (append t-font-lock-keywords-1=0A=
                            (list '("[$*]{?\\(\\sw+\\)" 1=0A=
                                    font-lock-variable-name-face)))))=0A=
          (setq cperl-font-lock-keywords-1=0A=
                (if cperl-syntaxify-by-font-lock=0A=
                    (cons 'cperl-fontify-update=0A=
                          t-font-lock-keywords)=0A=
                  t-font-lock-keywords)=0A=
                cperl-font-lock-keywords cperl-font-lock-keywords-1=0A=
                cperl-font-lock-keywords-2 (append=0A=
                                           cperl-font-lock-keywords-1=0A=
                                           t-font-lock-keywords-1)))=0A=
        (if (fboundp 'ps-print-buffer) (cperl-ps-print-init))=0A=
        (if (or (featurep 'choose-color) (featurep 'font-lock-extra))=0A=
            (eval                       ; Avoid a warning=0A=
             '(font-lock-require-faces=0A=
               (list=0A=
                ;; Color-light    Color-dark      Gray-light      Gray-dark 
Mono=0A=
                (list 'font-lock-comment-face=0A=
                      ["Firebrick"      "OrangeRed"     "DimGray"       
"Gray80"]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t]=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil)=0A=
                (list 'font-lock-string-face=0A=
                      ["RosyBrown"      "LightSalmon"   "Gray50"        
"LightGray"]=0A=
                      nil=0A=
                      nil=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil)=0A=
                (list 'font-lock-function-name-face=0A=
                      (vector=0A=
                       "Blue"           "LightSkyBlue"  "Gray50"        
"LightGray"=0A=
                       (cdr (assq 'background-color ; if mono=0A=
                                  (frame-parameters))))=0A=
                      (vector=0A=
                       nil              nil             nil             nil=0A=
                       (cdr (assq 'foreground-color ; if mono=0A=
                                  (frame-parameters))))=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil=0A=
                      nil)=0A=
                (list 'font-lock-variable-name-face=0A=
                      ["DarkGoldenrod"  "LightGoldenrod" "DimGray"      
"Gray90"]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t]=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil)=0A=
                (list 'font-lock-type-face=0A=
                      ["DarkOliveGreen" "PaleGreen"     "DimGray"       
"Gray80"]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t])=0A=
                (list 'font-lock-constant-face=0A=
                      ["CadetBlue"      "Aquamarine"    "Gray50"        
"LightGray"]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t]=0A=
                      nil=0A=
                      [nil              nil             t               t       
t])=0A=
                (list 'cperl-nonoverridable=0A=
                      ["chartreuse3"    ("orchid1" "orange")=0A=
                       nil              "Gray80"]=0A=
                      [nil              nil             "gray90"]=0A=
                      [nil              nil             nil             t       
t]=0A=
                      [nil              nil             t               t]=0A=
                      [nil              nil             t               t       
t])=0A=
                (list 'cperl-array=0A=
                      ["blue"           "yellow"        nil             
"Gray80"]=0A=
                      ["lightyellow2"   ("navy" "os2blue" "darkgreen")=0A=
                       "gray90"]=0A=
                      t=0A=
                      nil=0A=
                      nil)=0A=
                (list 'cperl-hash=0A=
                      ["red"            "red"           nil             
"Gray80"]=0A=
                      ["lightyellow2"   ("navy" "os2blue" "darkgreen")=0A=
                       "gray90"]=0A=
                      t=0A=
                      t=0A=
                      nil))))=0A=
          ;; Do it the dull way, without choose-color=0A=
          (defvar cperl-guessed-background nil=0A=
            "Display characteristics as guessed by cperl.")=0A=
          ;;      (or (fboundp 'x-color-defined-p)=0A=
          ;;          (defalias 'x-color-defined-p=0A=
          ;;            (cond ((fboundp 'color-defined-p) 'color-defined-p)=0A=
          ;;                  ;; XEmacs >=3D 19.12=0A=
          ;;                  ((fboundp 'valid-color-name-p) 
'valid-color-name-p)=0A=
          ;;                  ;; XEmacs 19.11=0A=
          ;;                  (t 'x-valid-color-name-p))))=0A=
          (cperl-force-face font-lock-constant-face=0A=
                            "Face for constant and label names")=0A=
          (cperl-force-face font-lock-variable-name-face=0A=
                            "Face for variable names")=0A=
          (cperl-force-face font-lock-type-face=0A=
                            "Face for data types")=0A=
          (cperl-force-face cperl-nonoverridable=0A=
                            "Face for data types from another group")=0A=
          (cperl-force-face font-lock-comment-face=0A=
                            "Face for comments")=0A=
          (cperl-force-face font-lock-function-name-face=0A=
                            "Face for function names")=0A=
          (cperl-force-face cperl-hash=0A=
                            "Face for hashes")=0A=
          (cperl-force-face cperl-array=0A=
                            "Face for arrays")=0A=
          ;;(defvar font-lock-constant-face 'font-lock-constant-face)=0A=
          ;;(defvar font-lock-variable-name-face 
'font-lock-variable-name-face)=0A=
          ;;(or (boundp 'font-lock-type-face)=0A=
          ;;    (defconst font-lock-type-face=0A=
          ;;    'font-lock-type-face=0A=
          ;;    "Face to use for data types."))=0A=
          ;;(or (boundp 'cperl-nonoverridable-face)=0A=
          ;;    (defconst cperl-nonoverridable-face=0A=
          ;;    'cperl-nonoverridable=0A=
          ;;    "Face to use for data types from another group."))=0A=
          ;;(if (not cperl-xemacs-p) nil=0A=
          ;;  (or (boundp 'font-lock-comment-face)=0A=
          ;;    (defconst font-lock-comment-face=0A=
          ;;      'font-lock-comment-face=0A=
          ;;      "Face to use for comments."))=0A=
          ;;  (or (boundp 'font-lock-keyword-face)=0A=
          ;;    (defconst font-lock-keyword-face=0A=
          ;;      'font-lock-keyword-face=0A=
          ;;      "Face to use for keywords."))=0A=
          ;;  (or (boundp 'font-lock-function-name-face)=0A=
          ;;    (defconst font-lock-function-name-face=0A=
          ;;      'font-lock-function-name-face=0A=
          ;;      "Face to use for function names.")))=0A=
          (if (and=0A=
               (not (cperl-is-face 'cperl-array))=0A=
               (cperl-is-face 'font-lock-emphasized-face))=0A=
              (copy-face 'font-lock-emphasized-face 'cperl-array))=0A=
          (if (and=0A=
               (not (cperl-is-face 'cperl-hash))=0A=
               (cperl-is-face 'font-lock-other-emphasized-face))=0A=
              (copy-face 'font-lock-other-emphasized-face 'cperl-hash))=0A=
          (if (and=0A=
               (not (cperl-is-face 'cperl-nonoverridable))=0A=
               (cperl-is-face 'font-lock-other-type-face))=0A=
              (copy-face 'font-lock-other-type-face 'cperl-nonoverridable))=0A=
          ;;(or (boundp 'cperl-hash-face)=0A=
          ;;    (defconst cperl-hash-face=0A=
          ;;    'cperl-hash=0A=
          ;;    "Face to use for hashes."))=0A=
          ;;(or (boundp 'cperl-array-face)=0A=
          ;;    (defconst cperl-array-face=0A=
          ;;    'cperl-array=0A=
          ;;    "Face to use for arrays."))=0A=
          ;; Here we try to guess background=0A=
          (let ((background=0A=
                 (if (boundp 'font-lock-background-mode)=0A=
                     font-lock-background-mode=0A=
                   'light))=0A=
                (face-list (and (fboundp 'face-list) (face-list))))=0A=
;;;;        (fset 'cperl-is-face=0A=
;;;;              (cond ((fboundp 'find-face)=0A=
;;;;                     (symbol-function 'find-face))=0A=
;;;;                    (face-list=0A=
;;;;                     (function (lambda (face) (member face face-list))))=0A=
;;;;                    (t=0A=
;;;;                     (function (lambda (face) (boundp face))))))=0A=
            (defvar cperl-guessed-background=0A=
              (if (and (boundp 'font-lock-display-type)=0A=
                       (eq font-lock-display-type 'grayscale))=0A=
                  'gray=0A=
                background)=0A=
              "Background as guessed by CPerl mode")=0A=
            (and (not (cperl-is-face 'font-lock-constant-face))=0A=
                 (cperl-is-face 'font-lock-reference-face)=0A=
                 (copy-face 'font-lock-reference-face 
'font-lock-constant-face))=0A=
            (if (cperl-is-face 'font-lock-type-face) nil=0A=
              (copy-face 'default 'font-lock-type-face)=0A=
              (cond=0A=
               ((eq background 'light)=0A=
                (set-face-foreground 'font-lock-type-face=0A=
                                     (if (x-color-defined-p "seagreen")=0A=
                                         "seagreen"=0A=
                                       "sea green")))=0A=
               ((eq background 'dark)=0A=
                (set-face-foreground 'font-lock-type-face=0A=
                                     (if (x-color-defined-p "os2pink")=0A=
                                         "os2pink"=0A=
                                       "pink")))=0A=
               (t=0A=
                (set-face-background 'font-lock-type-face "gray90"))))=0A=
            (if (cperl-is-face 'cperl-nonoverridable)=0A=
                nil=0A=
              (copy-face 'font-lock-type-face 'cperl-nonoverridable)=0A=
              (cond=0A=
               ((eq background 'light)=0A=
                (set-face-foreground 'cperl-nonoverridable=0A=
                                     (if (x-color-defined-p "chartreuse3")=0A=
                                         "chartreuse3"=0A=
                                       "chartreuse")))=0A=
               ((eq background 'dark)=0A=
                (set-face-foreground 'cperl-nonoverridable=0A=
                                     (if (x-color-defined-p "orchid1")=0A=
                                         "orchid1"=0A=
                                       "orange")))))=0A=
;;;         (if (cperl-is-face 'font-lock-other-emphasized-face) nil=0A=
;;;           (copy-face 'bold-italic 'font-lock-other-emphasized-face)=0A=
;;;           (cond=0A=
;;;            ((eq background 'light)=0A=
;;;             (set-face-background 'font-lock-other-emphasized-face=0A=
;;;                                  (if (x-color-defined-p "lightyellow2")=0A=
;;;                                      "lightyellow2"=0A=
;;;                                    (if (x-color-defined-p "lightyellow")=0A=
;;;                                        "lightyellow"=0A=
;;;                                      "light yellow"))))=0A=
;;;            ((eq background 'dark)=0A=
;;;             (set-face-background 'font-lock-other-emphasized-face=0A=
;;;                                  (if (x-color-defined-p "navy")=0A=
;;;                                      "navy"=0A=
;;;                                    (if (x-color-defined-p "darkgreen")=0A=
;;;                                        "darkgreen"=0A=
;;;                                      "dark green"))))=0A=
;;;            (t (set-face-background 'font-lock-other-emphasized-face =
"gray90"))))=0A=
;;;         (if (cperl-is-face 'font-lock-emphasized-face) nil=0A=
;;;           (copy-face 'bold 'font-lock-emphasized-face)=0A=
;;;           (cond=0A=
;;;            ((eq background 'light)=0A=
;;;             (set-face-background 'font-lock-emphasized-face=0A=
;;;                                  (if (x-color-defined-p "lightyellow2")=0A=
;;;                                      "lightyellow2"=0A=
;;;                                    "lightyellow")))=0A=
;;;            ((eq background 'dark)=0A=
;;;             (set-face-background 'font-lock-emphasized-face=0A=
;;;                                  (if (x-color-defined-p "navy")=0A=
;;;                                      "navy"=0A=
;;;                                    (if (x-color-defined-p "darkgreen")=0A=
;;;                                        "darkgreen"=0A=
;;;                                      "dark green"))))=0A=
;;;            (t (set-face-background 'font-lock-emphasized-face =
"gray90"))))=0A=
            (if (cperl-is-face 'font-lock-variable-name-face) nil=0A=
              (copy-face 'italic 'font-lock-variable-name-face))=0A=
            (if (cperl-is-face 'font-lock-constant-face) nil=0A=
              (copy-face 'italic 'font-lock-constant-face))))=0A=
        (setq cperl-faces-init t))=0A=
    (error (message "cperl-init-faces (ignored): %s" errs))))=0A=
=0A=
;; dcl-mode.el=0A=
(defvar dcl-font-lock-keywords=0A=
  '(("\\<\\(if\\|then\\|else\\|endif\\)\\>"=0A=
     1 font-lock-keyword-face)=0A=
    ("\\<f[$][a-z_]+\\>"=0A=
     0 font-lock-builtin-face)=0A=
    ("[.]\\(eq\\|not\\|or\\|and\\|lt\\|gt\\|le\\|ge\\|eqs\\|nes\\)[.]"=0A=
     0 font-lock-builtin-face))=0A=
  "Font lock keyword specification for DCL mode.=0A=
Presently this includes some syntax, .OP.erators, and \"f$\" lexicals.")=0A=
=0A=
;; executable.el=0A=
(defvar executable-font-lock-keywords=0A=
  '(("\\`#!.*/\\([^ \t\n]+\\)" 1 font-lock-keyword-face t))=0A=
  "*Rules for highlighting executable scripts' magic number.=0A=
This can be included in `font-lock-keywords' by modes that call =
`executable'.")=0A=
=0A=
;; f90.el=0A=
(defvar f90-font-lock-keywords-1=0A=
  (list=0A=
   ;; Special highlighting of "module procedure".=0A=
   '("\\<\\(module[ \t]*procedure\\)\\>" (1 font-lock-keyword-face))=0A=
   ;; Highlight definition of derived type.=0A=
   '("\\<\\(\\(?:end[ \t]*\\)?type\\)\\>\\([^()\n]*::\\)?[ =
\t]*\\(\\sw+\\)"=0A=
     (1 font-lock-keyword-face) (3 font-lock-function-name-face))=0A=
   ;; Other functions and declarations.=0A=
   '("\\<\\(\\(?:end[ \t]*\\)?\\(program\\|module\\|function\\|\=0A=
subroutine\\)\\|use\\|call\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face) (3 font-lock-function-name-face nil t))=0A=
   "\\<\\(\\(end[ \t]*\\)?\\(interface\\|block[ =
\t]*data\\)\\|contains\\)\\>")=0A=
  "This does fairly subdued highlighting of comments and function =
calls.")=0A=
=0A=
;; f90.el=0A=
(defvar f90-font-lock-keywords-2=0A=
  (append=0A=
   f90-font-lock-keywords-1=0A=
   (list=0A=
    ;; Variable declarations (avoid the real function call).=0A=
    '("^[ \t0-9]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\\|\=0A=
logical\\|double[ \t]*precision\\|*type[ \t]*(\\sw+)\\)\=0A=
\\(.*::\\|[ \t]*(.*)\\)?\\([^&!\n]*\\)"=0A=
      (1 font-lock-type-face t) (4 font-lock-variable-name-face t))=0A=
    ;; do, if, select, where, and forall constructs.=0A=
    '("\\<\\(end[ \t]*\\(do\\|if\\|select\\|forall\\|where\\)\\)\\>\=0A=
\\([ \t]+\\(\\sw+\\)\\)?"=0A=
      (1 font-lock-keyword-face) (3 font-lock-constant-face nil t))=0A=
    '("^[ \t0-9]*\\(\\(\\sw+\\)[ \t]*:[ \t]*\\)?\\(\\(if\\|\=0A=
do\\([ \t]*while\\)?\\|select[ \t]*case\\|where\\|forall\\)\\)\\>"=0A=
      (2 font-lock-constant-face nil t) (3 font-lock-keyword-face))=0A=
    ;; Implicit declaration.=0A=
    '("\\<\\(implicit\\)[ =
\t]*\\(real\\|integer\\|c\\(haracter\\|omplex\\)\=0A=
\\|logical\\|double[ \t]*precision\\|type[ \t]*(\\sw+)\\|none\\)[ \t]*"=0A=
      (1 font-lock-keyword-face) (2 font-lock-type-face))=0A=
    '("\\<\\(namelist\\|common\\)[ \t]*\/\\(\\sw+\\)?\/"=0A=
      (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))=0A=
    "\\<else\\([ \t]*if\\|where\\)?\\>"=0A=
    '("\\(&\\)[ \t]*\\(!\\|$\\)"  (1 font-lock-keyword-face))=0A=
    "\\<\\(then\\|continue\\|format\\|include\\|stop\\|return\\)\\>"=0A=
    '("\\<\\(exit\\|cycle\\)[ \t]*\\(\\sw+\\)?\\>"=0A=
      (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))=0A=
    '("\\<\\(case\\)[ \t]*\\(default\\|(\\)" . 1)=0A=
    '("\\<\\(do\\|go *to\\)\\>[ \t]*\\([0-9]+\\)"=0A=
      (1 font-lock-keyword-face) (2 font-lock-constant-face))=0A=
    ;; Line numbers (lines whose first character after number is letter).=0A=
    '("^[ \t]*\\([0-9]+\\)[ \t]*[a-z]+" (1 font-lock-constant-face t))))=0A=
  "Highlights declarations, do-loops and other constructs.")=0A=
=0A=
;; f90.el=0A=
(defconst f90-hpf-keywords-re=0A=
  (regexp-opt=0A=
   ;; Intrinsic procedures.=0A=
   '("all_prefix" "all_scatter" "all_suffix" "any_prefix"=0A=
     "any_scatter" "any_suffix" "copy_prefix" "copy_scatter"=0A=
     "copy_suffix" "count_prefix" "count_scatter" "count_suffix"=0A=
     "grade_down" "grade_up"=0A=
     "hpf_alignment" "hpf_distribution" "hpf_template" "iall" =
"iall_prefix"=0A=
     "iall_scatter" "iall_suffix" "iany" "iany_prefix" "iany_scatter"=0A=
     "iany_suffix" "ilen" "iparity" "iparity_prefix"=0A=
     "iparity_scatter" "iparity_suffix" "leadz" "maxval_prefix"=0A=
     "maxval_scatter" "maxval_suffix" "minval_prefix" "minval_scatter"=0A=
     "minval_suffix" "number_of_processors" "parity"=0A=
     "parity_prefix" "parity_scatter" "parity_suffix" "popcnt" "poppar"=0A=
     "processors_shape" "product_prefix" "product_scatter"=0A=
     "product_suffix" "sum_prefix" "sum_scatter" "sum_suffix"=0A=
     ;; Directives.=0A=
     "align" "distribute" "dynamic" "independent" "inherit" "processors"=0A=
     "realign" "redistribute" "template"=0A=
     ;; Keywords.=0A=
     "block" "cyclic" "extrinsic" "new" "onto" "pure" "with") 'words)=0A=
  "Regexp for all HPF keywords, procedures and directives.")=0A=
=0A=
(defvar f90-font-lock-keywords-3=0A=
  (append f90-font-lock-keywords-2=0A=
          (list=0A=
           f90-keywords-level-3-re=0A=
           f90-operators-re=0A=
           (list f90-procedures-re '(1 font-lock-keyword-face keep))=0A=
           "\\<real\\>"                 ; avoid overwriting real defs=0A=
           ))=0A=
  "Highlights all F90 keywords and intrinsic procedures.")=0A=
=0A=
;; fortran.el=0A=
(defvar fortran-font-lock-keywords-1=0A=
  ;; Program, subroutine and function declarations, plus calls.=0A=
  '(("\\<\\(block[ \t]*data\\|call\\|entry\\|function\\|\=0A=
program\\|subroutine\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face)=0A=
     (2 font-lock-function-name-face nil t)))=0A=
  "Subdued level highlighting for Fortran mode.")=0A=
=0A=
;; fortran.el=0A=
(defvar fortran-font-lock-keywords-2=0A=
  (append fortran-font-lock-keywords-1=0A=
          (list=0A=
           ;; Fontify all type specifiers (must be first - see below).=0A=
           (cons fortran-type-types 'font-lock-type-face)=0A=
           ;; Builtin keywords (except logical, do and goto - see below).=0A=
           (concat "\\<" (regexp-opt=0A=
                          '("continue" "format" "end" "enddo"=0A=
                            "if" "then" "else" "endif" "elseif"=0A=
                            "while" "inquire" "stop" "return"=0A=
                            "include" "open" "close" "read"=0A=
                            "write" "format" "print" "select" "case"=0A=
                            "cycle" "exit" "rewind" "backspace"=0A=
                            "where" "elsewhere")=0A=
                          'paren) "\\>")=0A=
           ;; Builtin operators.=0A=
           (concat "\\." (regexp-opt=0A=
                          '("and" "or" "not" "lt" "le" "eq" "ge"=0A=
                            "gt" "ne" "true" "false")=0A=
                          'paren) "\\.")=0A=
           ;; do/goto keywords and targets, and goto tags.=0A=
           '("\\<\\(do\\|go *to\\)\\>[ \t]*\\([0-9]+\\)?"=0A=
             (1 font-lock-keyword-face)=0A=
             (2 font-lock-constant-face nil t))=0A=
           '("^ *\\([0-9]+\\)" . font-lock-constant-face)))=0A=
  "Medium level highlighting for Fortran mode.")=0A=
=0A=
;; fortran.el=0A=
(defvar fortran-font-lock-keywords-3=0A=
  (append=0A=
   fortran-font-lock-keywords-1=0A=
   ;; All type specifiers plus their declared items.=0A=
   (list=0A=
    (list (concat fortran-type-types "[ \t(/]*\\(*\\)?")=0A=
          ;; Type specifier.=0A=
          '(1 font-lock-type-face)=0A=
          ;; Declaration item (or just /.../ block name).=0A=
          `(font-lock-match-c-style-declaration-item-and-skip-to-next=0A=
            ;; Start after any *(...) expression.=0A=
            (condition-case nil=0A=
                (and (match-beginning ,(1+ (regexp-opt-depth=0A=
                                            fortran-type-types)))=0A=
                     (forward-sexp)=0A=
                     (forward-sexp))=0A=
              (error nil))=0A=
            ;; No need to clean up.=0A=
            nil=0A=
            ;; Fontify as a variable name, functions fontified elsewhere.=0A=
            (1 font-lock-variable-name-face nil t))))=0A=
   ;; Things extra to `fortran-font-lock-keywords-3' (must be done =
first).=0A=
   (list=0A=
    ;; Goto-like `err=3Dlabel'/`end=3Dlabel' in read/write statements.=0A=
    '(", *\\(e\\(nd\\|rr\\)\\)\\> *\\(=3D *\\([0-9]+\\)\\)?"=0A=
      (1 font-lock-keyword-face) (4 font-lock-constant-face nil t))=0A=
    ;; Standard continuation character and in a TAB-formatted line.=0A=
    '("^ \\{5\\}\\([^ 0\n]\\)" 1 font-lock-string-face)=0A=
    '("^\t\\([1-9]\\)"         1 font-lock-string-face))=0A=
   `((,fortran-directive-re (0 font-lock-keyword-face t)))=0A=
   ;; `fortran-font-lock-keywords-2' without types (see above).=0A=
   (cdr (nthcdr (length fortran-font-lock-keywords-1)=0A=
                fortran-font-lock-keywords-2)))=0A=
  "Gaudy level highlighting for Fortran mode.")=0A=
=0A=
;; fortran.el=0A=
(defvar fortran-font-lock-keywords-4=0A=
  (append fortran-font-lock-keywords-3=0A=
          (list (list=0A=
                 (concat "\\<"=0A=
                         (regexp-opt=0A=
                          '("int" "ifix" "idint" "real" "float" "sngl"=0A=
                            "dble" "cmplx" "ichar" "char" "aint" "dint"=0A=
                            "anint" "dnint" "nint" "idnint" "iabs" "abs"=0A=
                            "dabs" "cabs" "mod" "amod" "dmod" "isign"=0A=
                            "sign" "dsign" "idim" "dim" "ddim" "dprod"=0A=
                            "max" "max0" "amax1" "dmax1" "amax0" "max1"=0A=
                            "min0" "amin1" "dmin1" "amin0" "min1" "len"=0A=
                            "index" "lge" "lgt" "lle" "llt" "aimag"=0A=
                            "conjg" "sqrt" "dsqrt" "csqrt" "exp" "dexp"=0A=
                            "cexp" "log" "alog" "dlog" "clog" "log10"=0A=
                            "alog10" "dlog10" "sin" "dsin" "csin" "cos"=0A=
                            "dcos" "ccos" "tan" "dtan" "asin" "dasin"=0A=
                            "acos" "dacos" "atan" "datan" "atan2" =
"datan2"=0A=
                            "sinh" "dsinh" "cosh" "dcosh" "tanh" "dtanh")=0A=
                          'paren) "[ \t]*(") '(1 =
font-lock-builtin-face))))=0A=
  "Maximum highlighting for Fortran mode.=0A=
Consists of level 3 plus all other intrinsics not already highlighted.")=0A=
=0A=
;; gdb-ui.el=0A=
(defvar gdb-locals-font-lock-keywords-1=0A=
  '(=0A=
    ;; var =3D (struct struct_tag) value=0A=
    ( "\\(^\\(\\sw\\|[_.]\\)+\\) +=3D +(\\(struct\\) =
\\(\\(\\sw\\|[_.]\\)+\\)"=0A=
      (1 font-lock-variable-name-face)=0A=
      (3 font-lock-keyword-face)=0A=
      (4 font-lock-type-face))=0A=
    ;; var =3D (type) value=0A=
    ( "\\(^\\(\\sw\\|[_.]\\)+\\) +=3D +(\\(\\(\\sw\\|[_.]\\)+\\)"=0A=
      (1 font-lock-variable-name-face)=0A=
      (3 font-lock-type-face))=0A=
    ;; var =3D val=0A=
    ( "\\(^\\(\\sw\\|[_.]\\)+\\) +=3D +[^(]"=0A=
      (1 font-lock-variable-name-face))=0A=
    )=0A=
  "Font lock keywords used in `gdb-local-mode'.")=0A=
=0A=
;; gdb-ui.el=0A=
(defvar gdb-locals-font-lock-keywords-2=0A=
  '(=0A=
    ;; var =3D type value=0A=
    ( "\\(^\\(\\sw\\|[_.]\\)+\\)\t+\\(\\(\\sw\\|[_.]\\)+\\)"=0A=
      (1 font-lock-variable-name-face)=0A=
      (3 font-lock-type-face))=0A=
    )=0A=
  "Font lock keywords used in `gdb-local-mode'.")=0A=
=0A=
;; grep.el=0A=
(defvar grep-mode-font-lock-keywords=0A=
   '(;; Command output lines.=0A=
     ("^\\([A-Za-z_0-9/\.+-]+\\)[ \t]*:" 1 font-lock-function-name-face)=0A=
     (": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or =
directory\\|\=0A=
device or address\\)\\)$"=0A=
      1 grep-error-face)=0A=
     ;; remove match from grep-regexp-alist before fontifying=0A=
     ("^Grep[/a-zA-z]* started.*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t))=0A=
     ("^Grep[/a-zA-z]* finished \\(?:(\\(matches found\\))\\|with \\(\=0A=
no matches found\\)\\).*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t)=0A=
      (1 compilation-info-face nil t)=0A=
      (2 compilation-warning-face nil t))=0A=
     ("^Grep[/a-zA-z]* \\(exited =
abnormally\\|interrupt\\|killed\\|terminated\\)\=0A=
\\(?:.*with code \\([0-9]+\\)\\)?.*"=0A=
      (0 '(face nil message nil help-echo nil mouse-face nil) t)=0A=
      (1 grep-error-face)=0A=
      (2 grep-error-face nil t))=0A=
     ("^.+?-[0-9]+-.*\n" (0 grep-context-face))=0A=
     ;; Highlight grep matches and delete markers=0A=
     ("\\(\033\\[01;31m\\)\\(.*?\\)\\(\033\\[[0-9]*m\\)"=0A=
      ;; Refontification does not work after the markers have been=0A=
      ;; deleted.  So we use the font-lock-face property here as Font=0A=
      ;; Lock does not clear that.=0A=
      (2 (list 'face nil 'font-lock-face grep-match-face))=0A=
      ((lambda (bound))=0A=
       (progn=0A=
         ;; Delete markers with `replace-match' because it updates=0A=
         ;; the match-data, whereas `delete-region' would render it 
obsolete.=0A=
         (replace-match "" t t nil 3)=0A=
         (replace-match "" t t nil 1))))=0A=
     ("\\(\033\\[[0-9;]*[mK]\\)"=0A=
      ;; Delete all remaining escape sequences=0A=
      ((lambda (bound))=0A=
       (replace-match "" t t nil 1))))=0A=
   "Additional things to highlight in grep output.=0A=
This gets tacked on the end of the generated expressions.")=0A=
=0A=
;; gud.el=0A=
(defvar gdb-script-font-lock-keywords=0A=
  '(("^define\\s-+\\(\\(\\w\\|\\s_\\)+\\)" (1 =
font-lock-function-name-face))=0A=
    ("\\$\\(\\w+\\)" (1 font-lock-variable-name-face))=0A=
    ("^\\s-*\\(\\w\\(\\w\\|\\s_\\)*\\)" (1 font-lock-keyword-face))))=0A=
=0A=
;; icon.el=0A=
(defconst icon-font-lock-keywords-1=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;; Fontify procedure name definitions.=0A=
       '("^[ \t]*\\(procedure\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
       (1 font-lock-builtin-face) (2 font-lock-function-name-face nil =
t))))=0A=
  "Subdued level highlighting for Icon mode.")=0A=
=0A=
;; icon.el=0A=
(defconst icon-font-lock-keywords-2=0A=
  (append=0A=
   icon-font-lock-keywords-1=0A=
   (eval-when-compile=0A=
     (list=0A=
      ;; Fontify all type specifiers.=0A=
      (cons=0A=
       (regexp-opt  '("null" "string" "co-expression" "table" "integer"=0A=
                      "cset"  "set" "real" "file" "list") 'words)=0A=
       'font-lock-type-face)=0A=
      ;; Fontify all keywords.=0A=
      ;;=0A=
      (cons=0A=
       (regexp-opt=0A=
        '("break" "do" "next" "repeat" "to" "by" "else" "if" "not" "return"=0A=
          "until" "case" "of" "while" "create" "every" "suspend" "default"=0A=
          "fail" "record" "then") 'words)=0A=
       'font-lock-keyword-face)=0A=
      ;; "end" "initial"=0A=
      (cons (regexp-opt '("end" "initial") 'words)=0A=
            'font-lock-builtin-face)=0A=
      ;; Fontify all system variables.=0A=
      (cons=0A=
       (regexp-opt=0A=
        '("&allocated" "&ascii" "&clock" "&col" "&collections" "&column"=0A=
          "&control" "&cset" "&current" "&date" "&dateline" "&digits" 
"&dump"=0A=
          "&e" "&error" "&errornumber" "&errortext" "&errorvalue" "&errout"=0A=
          "&eventcode" "&eventsource" "&eventvalue" "&fail" "&features"=0A=
          "&file" "&host" "&input" "&interval" "&lcase" "&ldrag" "&letters"=0A=
          "&level" "&line" "&lpress" "&lrelease" "&main" "&mdrag" "&meta"=0A=
          "&mpress" "&mrelease" "&null" "&output" "&phi" "&pi" "&pos"=0A=
          "&progname" "&random" "&rdrag" "&regions" "&resize" "&row"=0A=
          "&rpress" "&rrelease" "&shift" "&source" "&storage" "&subject"=0A=
          "&time" "&trace" "&ucase" "&version" "&window" "&x" "&y") t)=0A=
       'font-lock-constant-face)=0A=
      (cons      ;; global local static declarations and link files=0A=
       (concat=0A=
        "^[ \t]*"=0A=
        (regexp-opt '("global" "link" "local" "static") t)=0A=
        "\\(\\sw+\\>\\)*")=0A=
       '((1 font-lock-builtin-face)=0A=
         (font-lock-match-c-style-declaration-item-and-skip-to-next=0A=
          (goto-char (or (match-beginning 2) (match-end 1))) nil=0A=
          (1 (if (match-beginning 2)=0A=
                 font-lock-function-name-face=0A=
               font-lock-variable-name-face)))))=0A=
=0A=
      (cons      ;; $define $elif $ifdef $ifndef $undef=0A=
       (concat "^"=0A=
               (regexp-opt'("$define" "$elif" "$ifdef" "$ifndef" "$undef") 
t)=0A=
               "\\>[ \t]*\\([^ \t\n]+\\)?")=0A=
            '((1 font-lock-builtin-face)=0A=
              (4 font-lock-variable-name-face nil t)))=0A=
      (cons      ;; $dump $endif $else $include=0A=
       (concat=0A=
        "^" (regexp-opt'("$dump" "$endif" "$else" "$include") t) "\\>" )=0A=
       'font-lock-builtin-face)=0A=
      (cons      ;; $warning $error=0A=
       (concat "^" (regexp-opt '("$warning" "$error") t)=0A=
               "\\>[ \t]*\\(.+\\)?")=0A=
       '((1 font-lock-builtin-face) (3 font-lock-warning-face nil t))))))=0A=
  "Gaudy level highlighting for Icon mode.")=0A=
=0A=
;; ld-script.el=0A=
(defvar ld-script-font-lock-keywords=0A=
  (append=0A=
   `((,(regexp-opt ld-script-keywords 'words)=0A=
      1 font-lock-keyword-face)=0A=
     (,(regexp-opt ld-script-builtins 'words)=0A=
      1 font-lock-builtin-face)=0A=
     ("/DISCARD/" . font-lock-warning-face)=0A=
     ("\\W\\(\\.\\)\\W" 1 ld-script-location-counter-face)=0A=
     )=0A=
   cpp-font-lock-keywords)=0A=
  "Default font-lock-keywords for `ld-script-mode'.")=0A=
=0A=
;; md4-mode.el=0A=
(defvar m4-font-lock-keywords=0A=
  `(=0A=
    ("\\(\\b\\(m4_\\)?dnl\\b\\|^\\#\\).*$" . font-lock-comment-face)=0A=
;    ("\\(\\bdnl\\b\\|\\bm4_dnl\\b\\|^\\#\\).*$" . =
font-lock-comment-face)=0A=
    ("address@hidden" . font-lock-variable-name-face)=0A=
    ("\\\$\\\@" . font-lock-variable-name-face)=0A=
    ("\\\$\\\*" . font-lock-variable-name-face)=0A=
    =
("\\b\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(file\\|\=0A=
mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef\\)\\|\=0A=
e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|gnu\\|i\\(f\\(def\\|=
\=0A=
else\\)\\|n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|=
\=0A=
m\\(4\\(exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)\\|\=0A=
regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(=
\=0A=
ff\\|n\\)\\|nslit\\)\\|un\\(d\\(efine\\|ivert\\)\\|ix\\)\\)\\b" . =
font-lock-keyword-face)=0A=
    =
("\\b\\(m4_\\(builtin\\|change\\(com\\|quote\\|word\\)\\|d\\(e\\(bug\\(\=0A=
file\\|mode\\)\\|cr\\|f\\(ine\\|n\\)\\)\\|iv\\(ert\\|num\\)\\|nl\\|umpdef=
\\)\\|\=0A=
e\\(rrprint\\|syscmd\\|val\\)\\|f\\(ile\\|ormat\\)\\|i\\(f\\(def\\|else\\=
)\\|\=0A=
n\\(c\\(lude\\|r\\)\\|d\\(ex\\|ir\\)\\)\\)\\|l\\(en\\|ine\\)\\|m\\(4\\(\=0A=
_undefine\\|exit\\|wrap\\)\\|aketemp\\)\\|p\\(atsubst\\|opdef\\|ushdef\\)=
\\|\=0A=
regexp\\|s\\(hift\\|include\\|ubstr\\|ys\\(cmd\\|val\\)\\)\\|tra\\(ceo\\(=
\=0A=
ff\\|n\\)\\|nslit\\)\\|undivert\\)\\)\\b" . font-lock-keyword-face))=0A=
  "Default font-lock-keywords for `m4 mode'.")=0A=
=0A=
;; make-mode.el=0A=
(defun makefile-make-font-lock-keywords (var keywords space=0A=
                                             &optional negation=0A=
                                             &rest font-lock-keywords)=0A=
  `(;; Do macro assignments.  These get the "variable-name" face.=0A=
    (,makefile-macroassign-regex=0A=
     (1 font-lock-variable-name-face)=0A=
     ;; This is for after !=3D=0A=
     (2 'makefile-shell prepend t)=0A=
     ;; This is for after normal assignment=0A=
     (3 'font-lock-string-face prepend t))=0A=
=0A=
    ;; Rule actions.=0A=
    (makefile-match-action=0A=
     (1 font-lock-type-face)=0A=
     (2 'makefile-shell prepend)=0A=
     ;; Only makepp has builtin commands.=0A=
     (3 font-lock-builtin-face prepend t))=0A=
=0A=
    ;; Variable references even in targets/strings/comments.=0A=
    (,var 1 font-lock-variable-name-face prepend)=0A=
=0A=
    ;; Automatic variable references and single character variable =
references,=0A=
    ;; but not shell variables references.=0A=
    ("[^$]\\$\\(address@hidden<?^+*_]\\|[a-zA-Z0-9]\\>\\)"=0A=
     1 font-lock-constant-face prepend)=0A=
    ("[^$]\\(address@hidden)"=0A=
     1 'makefile-targets append)=0A=
=0A=
    ;; Fontify conditionals and includes.=0A=
    (,(concat "^\\(?: [ \t]*\\)?"=0A=
              (regexp-opt keywords t)=0A=
              "\\>[ \t]*\\([^: \t\n#]*\\)")=0A=
     (1 font-lock-keyword-face) (2 font-lock-variable-name-face))=0A=
=0A=
    ,@(if negation=0A=
          `((,negation (1 font-lock-negation-char-face prepend)=0A=
                       (2 font-lock-negation-char-face prepend t))))=0A=
=0A=
    ,@(if space=0A=
          '(;; Highlight lines that contain just whitespace.=0A=
            ;; They can cause trouble, especially if they start with a tab.=0A=
            ("^[ \t]+$" . makefile-space)=0A=
=0A=
            ;; Highlight shell comments that Make treats as commands,=0A=
            ;; since these can fool people.=0A=
            ("^\t+#" 0 makefile-space t)=0A=
=0A=
            ;; Highlight spaces that precede tabs.=0A=
            ;; They can make a tab fail to be effective.=0A=
            ("^\\( +\\)\t" 1 makefile-space)))=0A=
=0A=
    ,@font-lock-keywords=0A=
=0A=
    ;; Do dependencies.=0A=
    (makefile-match-dependency=0A=
     (1 'makefile-targets prepend)=0A=
     (3 'makefile-shell prepend t))))=0A=
=0A=
;; make-mode.el=0A=
(defconst makefile-gmake-font-lock-keywords=0A=
  (makefile-make-font-lock-keywords=0A=
   makefile-var-use-regex=0A=
   makefile-gmake-statements=0A=
   t=0A=
   "^\\(?: [ \t]*\\)?if\\(n\\)\\(?:def\\|eq\\)\\>"=0A=
=0A=
   '("[^$]\\(\\$[(address@hidden)]\\)"=0A=
     1 'makefile-targets append)=0A=
=0A=
   ;; $(function ...) ${function ...}=0A=
   '("[^$]\\$[({]\\([-a-zA-Z0-9_.]+\\s \\)"=0A=
     1 font-lock-function-name-face prepend)=0A=
=0A=
   ;; $(shell ...) ${shell ...}=0A=
   '("[^$]\\$\\([({]\\)shell[ \t]+"=0A=
     makefile-match-function-end nil nil=0A=
     (1 'makefile-shell prepend t))))=0A=
=0A=
;; make-mode.el=0A=
(defconst makefile-makepp-font-lock-keywords=0A=
  (makefile-make-font-lock-keywords=0A=
   makefile-var-use-regex=0A=
   makefile-makepp-statements=0A=
   nil=0A=
   "^\\(?: [ \t]*\\)?\\(?:and[ \t]+\\|else[ \t]+\\|or[ \t]+\\)?if\\(\=0A=
n\\)\\(?:def\\|eq\\|sys\\)\\>"=0A=
=0A=
   '("[^$]\\(\\$[({]\\(?:output\\|stem\\|target\\)s?\\_>.*?[})]\\)"=0A=
     1 'makefile-targets append)=0A=
=0A=
   ;; Colon modifier keywords.=0A=
   '("\\(:\\s =
*\\)\\(build_c\\(?:ache\\|heck\\)\\|env\\(?:ironment\\)?\\|\=0A=
foreach\\|signature\\|scanner\\|quickscan\\|smartscan\\)\\>\\([^:\n]*\\)"=0A=
     (1 font-lock-type-face t)=0A=
     (2 font-lock-keyword-face t)=0A=
     (3 font-lock-variable-name-face t))=0A=
=0A=
   ;; $(function ...) $((function ...)) ${function ...} ${{function ...}}=0A=
   '("[^$]\\$\\(?:((?\\|{{?\\)\\([-a-zA-Z0-9_.]+\\s \\)"=0A=
     1 font-lock-function-name-face prepend)=0A=
=0A=
   ;; $(shell ...) $((shell ...)) ${shell ...} ${{shell ...}}=0A=
   '("[^$]\\$\\(((?\\|{{?\\)shell\\(?:[-_]\\(?:global[-_]\\)?once\\)?[ =
\t]+"=0A=
     makefile-match-function-end nil nil=0A=
     (1 'makefile-shell prepend t))=0A=
=0A=
   ;; $(perl ...) $((perl ...)) ${perl ...} ${{perl ...}}=0A=
   '("[^$]\\$\\(((?\\|{{?\\)makeperl[ \t]+"=0A=
     makefile-match-function-end nil nil=0A=
     (1 'makefile-makepp-perl prepend t))=0A=
   '("[^$]\\$\\(((?\\|{{?\\)perl[ \t]+"=0A=
     makefile-match-function-end nil nil=0A=
     (1 'makefile-makepp-perl t t))=0A=
=0A=
   ;; Can we unify these with (if (match-end 1) 'prepend t)?=0A=
   '("ifmakeperl\\s +\\(.*\\)" 1 'makefile-makepp-perl prepend)=0A=
   '("ifperl\\s +\\(.*\\)" 1 'makefile-makepp-perl t)=0A=
=0A=
   ;; Perl block single- or multiline, as statement or rule action.=0A=
   ;; Don't know why the initial newline in 2nd variant of group 2 =
doesn't get skipped.=0A=
   '("\\<make\\(?:perl\\|sub\\s +\\S +\\)\\s *\n?\\s *{\\(?:{\\s =
*\n?\\(\\(?:.*\n\\)+?\=0A=
\\)\\s *}\\|\\s *\\(\\(?:.*?\\|\n?\\(?:.*\n\\)+?\\)\\)\\)}"=0A=
     (1 'makefile-makepp-perl prepend t)=0A=
     (2 'makefile-makepp-perl prepend t))=0A=
   '("\\<\\(?:perl\\|sub\\s +\\S +\\)\\s *\n?\\s *{\\(?:{\\s =
*\n?\\(\\(?:.*\n\\)+?\\)\=0A=
\\s *}\\|\\s *\\(\\(?:.*?\\|\n?\\(?:.*\n\\)+?\\)\\)\\)}"=0A=
     (1 'makefile-makepp-perl t t)=0A=
     (2 'makefile-makepp-perl t t))=0A=
=0A=
   ;; Statement style perl block.=0A=
   '("perl[-_]begin\\s *\\(?:\\s #.*\\)?\n\\(\\(?:.*\n\\)+?\\)\\s =
*perl[-_]end\\>"=0A=
     1 'makefile-makepp-perl t)))=0A=
=0A=
;; make-mode.el=0A=
(defconst makefile-bsdmake-font-lock-keywords=0A=
  (makefile-make-font-lock-keywords=0A=
   ;; A lot more could be done for variables here:=0A=
   makefile-var-use-regex=0A=
   makefile-bsdmake-statements=0A=
   t=0A=
   "^\\(?: [ \t]*\\)?\\.\\(?:el\\)?if\\(n?\\)\\(?:def\\|make\\)?\\>[ =
\t]*\\(!?\\)"=0A=
   '("^[ \t]*\\.for[ \t].+[ \t]\\(in\\)\\>" 1 font-lock-keyword-face)))=0A=
=0A=
;; make-mode.el=0A=
(defconst makefile-imake-font-lock-keywords=0A=
  (append =0A=
   (makefile-make-font-lock-keywords=0A=
    makefile-var-use-regex=0A=
    makefile-statements=0A=
    t=0A=
    nil=0A=
    '("^XCOMM.*$" . font-lock-comment-face)=0A=
    '("XVAR\\(?:use\\|def\\)[0-9]" 0 font-lock-keyword-face prepend)=0A=
    '("@@" . font-lock-preprocessor-face)=0A=
    )=0A=
   cpp-font-lock-keywords))=0A=
=0A=
;; mixal-mode.el=0A=
(defvar mixal-font-lock-keywords=0A=
  `(("^\\([A-Z0-9a-z]+\\)"=0A=
     (1 mixal-font-lock-label-face))=0A=
    (,(regexp-opt (mapcar (lambda (x) (symbol-name (car x)))=0A=
                          mixal-operation-codes-alist) 'words)=0A=
     . mixal-font-lock-operation-code-face)=0A=
    (,(regexp-opt mixal-assembly-pseudoinstructions 'words)=0A=
     . mixal-font-lock-assembly-pseudoinstruction-face)=0A=
    ("^[A-Z0-9a-z]*[ \t]+[A-ZO-9a-z]+[ \t]+\\(=3D.*=3D\\)"=0A=
     (1 font-lock-constant-face)))=0A=
  "Keyword highlighting specification for `mixal-mode'.")=0A=
=0A=
;; modula2.el=0A=
(defconst m3-font-lock-keywords-1=0A=
  '(=0A=
    ;;=0A=
    ;; Module definitions.=0A=
    ("\\<\\(INTERFACE\\|MODULE\\|PROCEDURE\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))=0A=
    ;;=0A=
    ;; Import directives.=0A=
    ("\\<\\(EXPORTS\\|FROM\\|IMPORT\\)\\>"=0A=
     (1 font-lock-keyword-face)=0A=
     (font-lock-match-c-style-declaration-item-and-skip-to-next=0A=
      nil (goto-char (match-end 0))=0A=
      (1 font-lock-constant-face)))=0A=
    ;;=0A=
    ;; Pragmas as warnings.=0A=
    ;; Spencer Allain <address@hidden> says do them as =
comments...=0A=
    ;; ("<\\*.*\\*>" . font-lock-warning-face)=0A=
    ;; ... but instead we fontify the first word.=0A=
    ("<\\*[ \t]*\\(\\sw+\\)" 1 font-lock-warning-face prepend)=0A=
    )=0A=
  "Subdued level highlighting for Modula-3 modes.")=0A=
=0A=
;; modula2.el=0A=
(defconst m3-font-lock-keywords-2=0A=
  (append m3-font-lock-keywords-1=0A=
   (eval-when-compile=0A=
     (let ((m3-types=0A=
            (regexp-opt=0A=
             '("INTEGER" "BITS" "BOOLEAN" "CARDINAL" "CHAR" "FLOAT" "REAL"=0A=
               "LONGREAL" "REFANY" "ADDRESS" "ARRAY" "SET" "TEXT"=0A=
               "MUTEX" "ROOT" "EXTENDED")))=0A=
           (m3-keywords=0A=
            (regexp-opt=0A=
             '("AND" "ANY" "AS" "BEGIN" "BRANDED" "BY" "CASE" "CONST" "DIV"=0A=
               "DO" "ELSE" "ELSIF" "EVAL" "EXCEPT" "EXIT" "FINALLY"=0A=
               "FOR" "GENERIC" "IF" "IN" "LOCK" "LOOP" "METHODS" "MOD" "NOT"=0A=
               "OBJECT" "OF" "OR" "OVERRIDES" "READONLY" "RECORD" "REF"=0A=
               "REPEAT" "RETURN" "REVEAL" "THEN" "TO" "TRY"=0A=
               "TYPE" "TYPECASE" "UNSAFE" "UNTIL" "UNTRACED" "VAR" "VALUE"=0A=
               "WHILE" "WITH")))=0A=
           (m3-builtins=0A=
            (regexp-opt=0A=
             '("ABS" "ADR" "ADRSIZE" "BITSIZE" "BYTESIZE" "CEILING"=0A=
               "DEC" "DISPOSE" "FIRST" "FLOOR" "INC" "ISTYPE" "LAST"=0A=
               "LOOPHOLE" "MAX" "MIN" "NARROW" "NEW" "NUMBER" "ORD"=0A=
               "ROUND" "SUBARRAY" "TRUNC" "TYPECODE" "VAL")))=0A=
           )=0A=
       (list=0A=
        ;;=0A=
        ;; Keywords except those fontified elsewhere.=0A=
        (concat "\\<\\(" m3-keywords "\\)\\>")=0A=
        ;;=0A=
        ;; Builtins.=0A=
        (cons (concat "\\<\\(" m3-builtins "\\)\\>") 
'font-lock-builtin-face)=0A=
        ;;=0A=
        ;; Type names.=0A=
        (cons (concat "\\<\\(" m3-types "\\)\\>") 'font-lock-type-face)=0A=
        ;;=0A=
        ;; Fontify tokens as function names.=0A=
        '("\\<\\(END\\|EXCEPTION\\|RAISES?\\)\\>[ \t{]*"=0A=
          (1 font-lock-keyword-face)=0A=
          (font-lock-match-c-style-declaration-item-and-skip-to-next=0A=
           nil (goto-char (match-end 0))=0A=
           (1 font-lock-function-name-face)))=0A=
        ;;=0A=
        ;; Fontify constants as references.=0A=
        '("\\<\\(FALSE\\|NIL\\|NULL\\|TRUE\\)\\>" . font-lock-constant-face)=0A=
        ))))=0A=
  "Gaudy level highlighting for Modula-3 modes.")=0A=
=0A=
;; pascal.el=0A=
(defconst pascal-font-lock-keywords (purecopy=0A=
  (list=0A=
   '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ \t]*\\([a-z]\\)"=0A=
     1 font-lock-keyword-face)=0A=
   '("^[ \t]*\\(function\\|pro\\(cedure\\|gram\\)\\)\\>[ =
\t]*\\([a-z][a-z0-9_]*\\)"=0A=
     3 font-lock-function-name-face t)=0A=
;   ("type" "const" "real" "integer" "char" "boolean" "var"=0A=
;    "record" "array" "file")=0A=
   (cons (concat "\\<\\(array\\|boolean\\|c\\(har\\|onst\\)\\|file\\|"=0A=
                 "integer\\|re\\(al\\|cord\\)\\|type\\|var\\)\\>")=0A=
         'font-lock-type-face)=0A=
   '("\\<\\(label\\|external\\|forward\\)\\>" . font-lock-constant-face)=0A=
   '("\\<\\([0-9]+\\)[ \t]*:" 1 font-lock-function-name-face)=0A=
;   ("of" "to" "for" "if" "then" "else" "case" "while"=0A=
;    "do" "until" "and" "or" "not" "in" "with" "repeat" "begin" "end")=0A=
   (concat "\\<\\("=0A=
           "and\\|begin\\|case\\|do\\|e\\(lse\\|nd\\)\\|for\\|i[fn]\\|"=0A=
           
"not\\|o[fr]\\|repeat\\|t\\(hen\\|o\\)\\|until\\|w\\(hile\\|ith\\)"=0A=
           "\\)\\>")=0A=
   '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"=0A=
     1 font-lock-keyword-face)=0A=
   '("\\<\\(goto\\)\\>[ \t]*\\([0-9]+\\)?"=0A=
     2 font-lock-keyword-face t)))=0A=
  "Additional expressions to highlight in Pascal mode.")=0A=
=0A=
;; perl-mode.el=0A=
(defconst perl-font-lock-keywords-1=0A=
  '(;; What is this for?=0A=
    ;;("\\(--- .* ---\\|=3D=3D=3D .* =3D=3D=3D\\)" . =
font-lock-string-face)=0A=
    ;;=0A=
    ;; Fontify preprocessor statements as we do in =
`c-font-lock-keywords'.=0A=
    ;; Ilya Zakharevich <address@hidden> thinks this is a bad =
idea.=0A=
    ;; ("^#[ \t]*include[ \t]+\\(<[^>\"\n]+>\\)" 1 font-lock-string-face)=0A=
    ;; ("^#[ \t]*define[ \t]+\\(\\sw+\\)(" 1 =
font-lock-function-name-face)=0A=
    ;; ("^#[ \t]*if\\>"=0A=
    ;;  ("\\<\\(defined\\)\\>[ \t]*(?\\(\\sw+\\)?" nil nil=0A=
    ;;   (1 font-lock-constant-face) (2 font-lock-variable-name-face nil =
t)))=0A=
    ;; ("^#[ \t]*\\(\\sw+\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
    ;;  (1 font-lock-constant-face) (2 font-lock-variable-name-face nil =
t))=0A=
    ;;=0A=
    ;; Fontify function and package names in declarations.=0A=
    ("\\<\\(package\\|sub\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t))=0A=
    ("\\<\\(import\\|no\\|require\\|use\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face) (2 font-lock-constant-face nil t)))=0A=
  "Subdued level highlighting for Perl mode.")=0A=
=0A=
;; perl-mode.el=0A=
(defconst perl-font-lock-keywords-2=0A=
  (append perl-font-lock-keywords-1=0A=
   (list=0A=
    ;;=0A=
    ;; Fontify keywords, except those fontified otherwise.=0A=
    (concat "\\<"=0A=
            (regexp-opt '("if" "until" "while" "elsif" "else" "unless"=0A=
                          "do" "dump" "for" "foreach" "exit" "die"=0A=
                          "BEGIN" "END" "return" "exec" "eval") t)=0A=
            "\\>")=0A=
    ;;=0A=
    ;; Fontify local and my keywords as types.=0A=
    '("\\<\\(local\\|my\\)\\>" . font-lock-type-face)=0A=
    ;;=0A=
    ;; Fontify function, variable and file name references.=0A=
    '("&\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-function-name-face)=0A=
    ;; Additionally underline non-scalar variables.  Maybe this is a bad =
idea.=0A=
    ;;'("address@hidden(\\sw+\\)" 1 font-lock-variable-name-face)=0A=
    '("[$*]{?\\(\\sw+\\(::\\sw+\\)*\\)" 1 font-lock-variable-name-face)=0A=
    '("\\(address@hidden|\\$#\\)\\(\\sw+\\(::\\sw+\\)*\\)"=0A=
      (2 (cons font-lock-variable-name-face '(underline))))=0A=
    '("<\\(\\sw+\\)>" 1 font-lock-constant-face)=0A=
    ;;=0A=
    ;; Fontify keywords with/and labels as we do in =
`c++-font-lock-keywords'.=0A=
    '("\\<\\(continue\\|goto\\|last\\|next\\|redo\\)\\>[ =
\t]*\\(\\sw+\\)?"=0A=
      (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))=0A=
    '("^[ \t]*\\(\\sw+\\)[ \t]*:[^:]" 1 font-lock-constant-face)))=0A=
  "Gaudy level highlighting for Perl mode.")=0A=
=0A=
;; prolog.el=0A=
(defvar prolog-font-lock-keywords=0A=
  '(("\\(#[<=3D]=3D>\\|:-\\)\\|\\(#=3D\\)\\|\\(#[#<>\\/][=3D\\/]*\\|!\\)"=0A=
     0 font-lock-keyword-face)=0A=
    ("\\<\\(is\\|write\\|nl\\|read_\\sw+\\)\\>"=0A=
     1 font-lock-keyword-face)=0A=
    ("^\\(\\sw+\\)\\s-*\\((\\(.+\\))\\)*"=0A=
     (1 font-lock-function-name-face)=0A=
     (3 font-lock-variable-name-face)))=0A=
  "Font-lock keywords for Prolog mode.")=0A=
=0A=
;; ps-mode.el=0A=
(defcustom ps-run-font-lock-keywords-2=0A=
  (append (unless (string=3D ps-run-prompt "")=0A=
            (list (list (if (=3D ?^ (string-to-char ps-run-prompt))=0A=
                            ps-run-prompt=0A=
                          (concat "^" ps-run-prompt))=0A=
                        '(0 font-lock-function-name-face nil nil))))=0A=
          '((">>showpage, press <return> to continue<<"=0A=
             (0 font-lock-keyword-face nil nil))=0A=
            ("^\\(Error\\|Can't\\).*"=0A=
             (0 font-lock-warning-face nil nil))=0A=
            ("^\\(Current file position is\\) \\([0-9]+\\)"=0A=
             (1 font-lock-comment-face nil nil)=0A=
             (2 font-lock-warning-face nil nil))))=0A=
  "*Medium level highlighting of messages from the PostScript =
interpreter.=0A=
=0A=
See documentation on font-lock for details."=0A=
  :group 'PostScript-interaction=0A=
  :type '(repeat (list :tag "Expression with one or more highlighters"=0A=
                       :value ("" (0 default nil t))=0A=
                       (regexp :tag "Expression")=0A=
                       (repeat :tag "Highlighters"=0A=
                               :inline regexp=0A=
                               (list :tag "Highlighter"=0A=
                                     (integer :tag "Subexp")=0A=
                                     face=0A=
                                     (boolean :tag "Override")=0A=
                                     (boolean :tag "Laxmatch" :value t))))))=0A=
=0A=
;; ps-mode.el=0A=
(defconst ps-mode-font-lock-keywords-1=0A=
  '(("\\`%!PS.*" . font-lock-reference-face)=0A=
    ("^%%BoundingBox:[ \t]+-?[0-9]+[ \t]+-?[0-9]+[ \t]+-?[0-9]+[ =
\t]+-?[0-9]+[ \t]*$"=0A=
     . font-lock-reference-face)=0A=
    (ps-mode-match-string-or-comment=0A=
     (1 font-lock-comment-face nil t)=0A=
     (2 font-lock-string-face nil t))=0A=
    ("([^()\n%]*\\|[^()\n]*)" . font-lock-warning-face)=0A=
    ("[\200-\377]+" (0 font-lock-warning-face prepend nil)))=0A=
  "Subdued level highlighting for PostScript mode.")=0A=
=0A=
;; ps-mode.el=0A=
(defconst ps-mode-font-lock-keywords-2=0A=
  (append=0A=
   ps-mode-font-lock-keywords-1=0A=
   (list=0A=
    (cons=0A=
     ;; exclude names prepended by `/'=0A=
     (concat "\\(^\\|[^/\n]\\)" ps-mode-operators)=0A=
     '(2 font-lock-keyword-face))))=0A=
  "Medium level highlighting for PostScript mode.")=0A=
=0A=
;; ps-mode.el=0A=
(defconst ps-mode-font-lock-keywords-3=0A=
  (append=0A=
   ps-mode-font-lock-keywords-1=0A=
   (list=0A=
    '("//\\w+" . font-lock-type-face)=0A=
    `(,(concat=0A=
        "^\\(/\\w+\\)\\>"=0A=
        "\\([[ \t]*\\(%.*\\)?\r?$"      ; Nothing but `[' or comment after the 
name.=0A=
        "\\|[ \t]*\\({\\|<<\\)"         ; `{' or `<<' following the name.=0A=
        "\\|[ \t]+[0-9]+[ \t]+dict\\>"  ; `[0-9]+ dict' following the name.=0A=
        "\\|.*\\<def\\>\\)")            ; `def' somewhere on the same line.=0A=
      . (1 font-lock-function-name-face))=0A=
    '("/\\w+" . font-lock-variable-name-face)=0A=
    (cons ps-mode-operators 'font-lock-keyword-face)))=0A=
  "High level highliting for PostScript mode.")=0A=
=0A=
;; python.el=0A=
(defvar python-font-lock-keywords=0A=
  `(,(rx (and word-start=0A=
              ;; From v 2.3 reference.=0A=
              ;; def and class dealt with separately below=0A=
              (or "and" "assert" "break" "continue" "del" "elif" "else"=0A=
                  "except" "exec" "finally" "for" "from" "global" "if"=0A=
                  "import" "in" "is" "lambda" "not" "or" "pass" "print"=0A=
                  "raise" "return" "try" "while" "yield"=0A=
                  ;; Future keywords=0A=
                  "as" "None")=0A=
              word-end))=0A=
   (,(rx (and word-start (group "class") (1+ space) (group (1+ word))))=0A=
    (1 font-lock-keyword-face) (2 font-lock-type-face))=0A=
   (,(rx (and word-start (group "def") (1+ space) (group (1+ word))))=0A=
    (1 font-lock-keyword-face) (2 font-lock-function-name-face))))=0A=
=0A=
;; scheme.el=0A=
(defconst scheme-font-lock-keywords-1=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;;=0A=
     ;; Declarations.  Hannes Haug =
<address@hidden> says=0A=
     ;; this works for SOS, STklos, SCOOPS, Meroon and Tiny CLOS.=0A=
     (list (concat "(\\(define\\*?\\("=0A=
                   ;; Function names.=0A=
                   
"\\(\\|-public\\|-method\\|-generic\\(-procedure\\)?\\)\\|"=0A=
                   ;; Macro names, as variable names.  A bit dubious, this.=0A=
                   "\\(-syntax\\|-macro\\)\\|"=0A=
                   ;; Class names.=0A=
                   "-class"=0A=
                   ;; Guile modules.=0A=
                   "\\|-module"=0A=
                   "\\)\\)\\>"=0A=
                   ;; Any whitespace and declared object.=0A=
                   "[ \t]*(?"=0A=
                   "\\(\\sw+\\)?")=0A=
           '(1 font-lock-keyword-face)=0A=
           '(6 (cond ((match-beginning 3) font-lock-function-name-face)=0A=
                     ((match-beginning 5) font-lock-variable-name-face)=0A=
                     (t font-lock-type-face))=0A=
               nil t))=0A=
     ))=0A=
  "Subdued expressions to highlight in Scheme modes.")=0A=
=0A=
;; scheme.el=0A=
(defconst scheme-font-lock-keywords-2=0A=
  (append scheme-font-lock-keywords-1=0A=
   (eval-when-compile=0A=
     (list=0A=
      ;;=0A=
      ;; Control structures.=0A=
      (cons=0A=
       (concat=0A=
        "(" (regexp-opt=0A=
             '("begin" "call-with-current-continuation" "call/cc"=0A=
               "call-with-input-file" "call-with-output-file" "case" "cond"=0A=
               "do" "else" "for-each" "if" "lambda"=0A=
               "let" "let*" "let-syntax" "letrec" "letrec-syntax"=0A=
               ;; Hannes Haug <address@hidden> wants:=0A=
               "and" "or" "delay" "force"=0A=
               ;; Stefan Monnier <address@hidden> says don't bother:=0A=
               ;;"quasiquote" "quote" "unquote" "unquote-splicing"=0A=
               "map" "syntax" "syntax-rules") t)=0A=
        "\\>") 1)=0A=
      ;;=0A=
      ;; It wouldn't be Scheme w/o named-let.=0A=
      '("(let\\s-+\\(\\sw+\\)"=0A=
        (1 font-lock-function-name-face))=0A=
      ;;=0A=
      ;; David Fox <address@hidden> for SOS/STklos class =
specifiers.=0A=
      '("\\<<\\sw+>\\>" . font-lock-type-face)=0A=
      ;;=0A=
      ;; Scheme `:' and `#:' keywords as builtins.=0A=
      '("\\<#?:\\sw+\\>" . font-lock-builtin-face)=0A=
      )))=0A=
  "Gaudy expressions to highlight in Scheme modes.")=0A=
=0A=
;; scheme.el=0A=
(defvar dsssl-font-lock-keywords=0A=
  (eval-when-compile=0A=
    (list=0A=
     ;; Similar to Scheme=0A=
     (list "(\\(define\\(-\\w+\\)?\\)\\>[       ]*\\\((?\\)\\(\\sw+\\)\\>"=0A=
           '(1 font-lock-keyword-face)=0A=
           '(4 font-lock-function-name-face))=0A=
     (cons=0A=
      (concat "(\\("=0A=
              ;; (make-regexp '("case" "cond" "else" "if" "lambda"=0A=
              ;; "let" "let*" "letrec" "and" "or" "map" "with-mode"))=0A=
              "and\\|c\\(ase\\|ond\\)\\|else\\|if\\|"=0A=
              "l\\(ambda\\|et\\(\\|*\\|rec\\)\\)\\|map\\|or\\|with-mode"=0A=
              "\\)\\>")=0A=
      1)=0A=
     ;; DSSSL syntax=0A=
     '("(\\(element\\|mode\\|declare-\\w+\\)\\>[        ]*\\(\\sw+\\)"=0A=
       (1 font-lock-keyword-face)=0A=
       (2 font-lock-type-face))=0A=
     '("(\\(element\\)\\>[      ]*(\\(\\S)+\\))"=0A=
       (1 font-lock-keyword-face)=0A=
       (2 font-lock-type-face))=0A=
     '("\\<\\sw+:\\>" . font-lock-constant-face) ; trailing `:' c.f. =
scheme=0A=
     ;; SGML markup (from sgml-mode) :=0A=
     '("<\\([!?][-a-z0-9]+\\)" 1 font-lock-keyword-face)=0A=
     '("<\\(/?[-a-z0-9]+\\)" 1 font-lock-function-name-face)))=0A=
  "Default expressions to highlight in DSSSL mode.")=0A=
=0A=
;; simula.el=0A=
(defconst simula-font-lock-keywords-1=0A=
  '(;;=0A=
    ;; Compiler directives.=0A=
    ("^%\\([^ \t\n].*\\)" 1 font-lock-constant-face t)=0A=
    ;;=0A=
    ;; Class and procedure names.=0A=
    ("\\<\\(class\\|procedure\\)\\>[ \t]*\\(\\sw+\\)?"=0A=
     (1 font-lock-keyword-face) (2 font-lock-function-name-face nil t)))=0A=
  "Subdued level highlighting for Simula mode.")=0A=
=0A=
;; simula.el=0A=
(defconst simula-font-lock-keywords-2=0A=
  (append simula-font-lock-keywords-1=0A=
   (list=0A=
    ;;=0A=
    ;; Constants.=0A=
    '("\\<\\(false\\|none\\|notext\\|true\\)\\>" . =
font-lock-constant-face)=0A=
    ;;=0A=
    ;; Keywords.=0A=
    (regexp-opt=0A=
     '("activate" "after" "and" "at" "before" "begin" "delay" "do"=0A=
       "else" "end" "eq" "eqv" "external" "for" "ge" "go" "goto" "gt"=0A=
       "hidden" "if" "imp" "in" "inner" "inspect" "is" "label" "le"=0A=
       "lt" "ne" "new" "not" "or" "otherwise" "prior" "protected"=0A=
       "qua" "reactivate" "step" "switch" "then" "this" "to" "until"=0A=
       "virtual" "when" "while") 'words)=0A=
    ;;=0A=
    ;; Types.=0A=
    (cons (regexp-opt=0A=
           '("array" "boolean" "character" "integer"=0A=
             "long" "name" "real" "short" "text" "value" "ref") 'words)=0A=
          'font-lock-type-face)))=0A=
  "Medium level highlighting for Simula mode.")=0A=
=0A=
;; simula.el=0A=
(defconst simula-font-lock-keywords-3=0A=
  (append simula-font-lock-keywords-2=0A=
   (list=0A=
    ;;=0A=
    ;; Super-class names and super-slow.=0A=
    '("\\<\\(\\sw+\\)[ \t]+class\\>" 1 font-lock-function-name-face)=0A=
    ;;=0A=
    ;; Types and their declarations.=0A=
    (list (concat "\\<\\(array\\|boolean\\|character\\|integer\\|"=0A=
                  "long\\|name\\|real\\|short\\|text\\|value\\)\\>"=0A=
                  "\\([ \t]+\\sw+\\>\\)*")=0A=
          '(font-lock-match-c-style-declaration-item-and-skip-to-next=0A=
            ;; Start with point after all type specifiers.=0A=
            (goto-char (or (match-beginning 2) (match-end 1)))=0A=
            ;; Finish with point after first type specifier.=0A=
            (goto-char (match-end 1))=0A=
            ;; Fontify as a variable name.=0A=
            (1 font-lock-variable-name-face)))=0A=
    ;;=0A=
    ;; Object references and their declarations.=0A=
    '("\\<\\(ref\\)\\>[ \t]*\\((\\(\\sw+\\))\\)?"=0A=
      (3 font-lock-function-name-face nil t)=0A=
      (font-lock-match-c-style-declaration-item-and-skip-to-next nil nil=0A=
       (1 font-lock-variable-name-face)))=0A=
    ))=0A=
  "Gaudy level highlighting for Simula mode.")=0A=
=0A=
;; tcl.el=0A=
(defun tcl-set-font-lock-keywords ()=0A=
  "Set `tcl-font-lock-keywords'.=0A=
Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."=0A=
  (setq tcl-font-lock-keywords=0A=
        (list=0A=
         ;; Names of functions (and other "defining things").=0A=
         (list (concat tcl-proc-regexp "\\([^ \t\n]+\\)")=0A=
               2 'font-lock-function-name-face)=0A=
=0A=
         ;; Names of type-defining things.=0A=
         (list (concat "\\(\\s-\\|^\\)"=0A=
                       (regexp-opt tcl-typeword-list t)=0A=
                       "\\(\\s-\\|$\\)")=0A=
               2 'font-lock-type-face)=0A=
=0A=
         (list (concat "\\_<" (regexp-opt tcl-builtin-list t) "\\_>")=0A=
               1 'font-lock-builtin-face)=0A=
=0A=
         ;; When variable names are enclosed in {} braces, any=0A=
         ;; character can be used. Otherwise just letters, digits,=0A=
         ;; underscores.  Variable names can be prefixed with any=0A=
         ;; number of "namespace::" qualifiers.  A leading "::" refers=0A=
         ;; to the global namespace.=0A=
         '("\\${\\([^}]+\\)}" 1 font-lock-variable-name-face)=0A=
         '("\\$\\(\\(?:::\\)?\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"=0A=
           1 font-lock-variable-name-face)=0A=
         '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+{\\([^}]+\\)}"=0A=
           1 font-lock-variable-name-face keep)=0A=
         '("\\(?:\\s-\\|^\\|\\[\\)set\\s-+\\(\\(?:::\\)?\=0A=
\\(?:[[:alnum:]_]+::\\)*[[:alnum:]_]+\\)"=0A=
           1 font-lock-variable-name-face keep)=0A=
=0A=
         '("\\(^\\|[^\\]\\)\\(\\\\\\\\\\)*\\(\\\\\\)$" 3 =
'tcl-escaped-newline)=0A=
=0A=
         ;; Keywords.  Only recognized if surrounded by whitespace.=0A=
         ;; FIXME consider using "not word or symbol", not=0A=
         ;; "whitespace".=0A=
         (cons (concat "\\_<" (regexp-opt tcl-keyword-list t) "\\_>")=0A=
               1))))=0A=
=0A=
;; vhdl-mode.el=0A=
(defconst vhdl-font-lock-keywords-2=0A=
  (list=0A=
   ;; highlight names of units, subprograms, and components when declared=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\("=0A=
     "architecture\\|configuration\\|entity\\|package\\(\\s-+body\\)?\\|"=0A=
     "\\(\\(impure\\|pure\\)\\s-+\\)?function\\|procedure\\|component"=0A=
     "\\)\\s-+\\(\\w+\\)")=0A=
    5 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight entity names of architectures and configurations=0A=
   (list=0A=
    =
"^\\s-*\\(architecture\\|configuration\\)\\s-+\\w+\\s-+of\\s-+\\(\\w+\\)"=0A=
    2 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight labels of common constructs=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\(\\w+\\)\\s-*:[ \t\n]*\\(\\("=0A=
     "assert\\|block\\|case\\|exit\\|for\\|if\\|loop\\|next\\|null\\|"=0A=
     "postponed\\|process\\|"=0A=
     (when (vhdl-standard-p 'ams) "procedural\\|")=0A=
     "with\\|while"=0A=
     "\\)\\>\\|\\w+\\s-*\\(([^\n]*)\\|\\.\\w+\\)*\\s-*<=3D\\)")=0A=
    1 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight label and component name of component instantiations=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\(\\w+\\)\\s-*:[ \t\n]*\\(\\w+\\)"=0A=
     =
"\\(\\s-*\\(--[^\n]*\\)?$\\|\\s-+\\(generic\\|port\\)\\s-+map\\>\\)")=0A=
    '(1 font-lock-function-name-face) '(2 font-lock-function-name-face))=0A=
=0A=
   ;; highlight label and instantiated unit of component instantiations=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\(\\w+\\)\\s-*:[ \t\n]*"=0A=
     "\\(component\\|configuration\\|entity\\)\\s-+"=0A=
     "\\(\\w+\\)\\(\\.\\(\\w+\\)\\)?\\(\\s-*(\\(\\w+\\))\\)?")=0A=
    '(1 font-lock-function-name-face) '(3 font-lock-function-name-face)=0A=
    '(5 font-lock-function-name-face nil t)=0A=
    '(7 font-lock-function-name-face nil t))=0A=
=0A=
   ;; highlight names and labels at end of constructs=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*end\\s-+\\(\\("=0A=
     =
"architecture\\|block\\|case\\|component\\|configuration\\|entity\\|"=0A=
     "for\\|function\\|generate\\|if\\|loop\\|package\\(\\s-+body\\)?\\|"=0A=
     "procedure\\|\\(postponed\\s-+\\)?process\\|"=0A=
     (when (vhdl-standard-p 'ams) "procedural\\|")=0A=
     "units"=0A=
     "\\)\\s-+\\)?\\(\\w*\\)")=0A=
    5 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight labels in exit and next statements=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\(\\w+\\s-*:\\s-*\\)?\\(exit\\|next\\)\\s-+\\(\\w*\\)")=0A=
    3 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight entity name in attribute specifications=0A=
   (list=0A=
    (concat=0A=
     =
"^\\s-*attribute\\s-+\\w+\\s-+of\\s-+\\(\\w+\\(,\\s-*\\w+\\)*\\)\\s-*:")=0A=
    1 'font-lock-function-name-face)=0A=
=0A=
   ;; highlight labels in block and component specifications=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*for\\s-+\\(\\w+\\(,\\s-*\\w+\\)*\\)\\>\\s-*"=0A=
     "\\(:[ \t\n]*\\(\\w+\\)\\|[^i \t]\\)")=0A=
    '(1 font-lock-function-name-face) '(4 font-lock-function-name-face =
nil t))=0A=
=0A=
   ;; highlight names in library clauses=0A=
   (list "^\\s-*library\\>"=0A=
         '(vhdl-font-lock-match-item nil nil (1 
font-lock-function-name-face)))=0A=
=0A=
   ;; highlight names in use clauses=0A=
   (list=0A=
    (concat=0A=
     "\\<use\\s-+\\(\\(entity\\|configuration\\)\\s-+\\)?"=0A=
     "\\(\\w+\\)\\(\\.\\(\\w+\\)\\)?\\((\\(\\w+\\))\\)?")=0A=
    '(3 font-lock-function-name-face) '(5 font-lock-function-name-face =
nil t)=0A=
    '(7 font-lock-function-name-face nil t))=0A=
=0A=
   ;; highlight attribute name in attribute declarations/specifications=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*attribute\\s-+\\(\\w+\\)")=0A=
    1 'vhdl-font-lock-attribute-face)=0A=
=0A=
   ;; highlight type/nature name in (sub)type/(sub)nature declarations=0A=
   (list=0A=
    (concat=0A=
     "^\\s-*\\(sub\\)?\\(nature\\|type\\)\\s-+\\(\\w+\\)")=0A=
    3 'font-lock-type-face)=0A=
=0A=
   ;; highlight signal/variable/constant declaration names=0A=
   (list "\\(:[^=3D]\\)"=0A=
         '(vhdl-font-lock-match-item=0A=
           (progn (goto-char (match-beginning 1))=0A=
                  (skip-syntax-backward " ")=0A=
                  (skip-syntax-backward "w_")=0A=
                  (skip-syntax-backward " ")=0A=
                  (while (=3D (preceding-char) ?,)=0A=
                    (backward-char 1)=0A=
                    (skip-syntax-backward " ")=0A=
                    (skip-syntax-backward "w_")=0A=
                    (skip-syntax-backward " ")))=0A=
;                 (skip-chars-backward "^-(\n\";")=0A=
           (goto-char (match-end 1)) (1 font-lock-variable-name-face)))=0A=
=0A=
   ;; highlight formal parameters in component instantiations and =
subprogram=0A=
   ;; calls=0A=
   (list "\\(=3D>\\)"=0A=
         '(vhdl-font-lock-match-item=0A=
           (progn (goto-char (match-beginning 1))=0A=
                  (skip-syntax-backward " ")=0A=
                  (while (=3D (preceding-char) ?\)) (backward-sexp))=0A=
                  (skip-syntax-backward "w_")=0A=
                  (skip-syntax-backward " ")=0A=
                  (when (memq (preceding-char) '(?n ?N ?|))=0A=
                    (goto-char (point-max))))=0A=
           (goto-char (match-end 1)) (1 font-lock-variable-name-face)))=0A=
=0A=
   ;; highlight alias/group/quantity declaration names and =
for-loop/-generate=0A=
   ;; variables=0A=
   (list =
"\\<\\(alias\\|for\\|group\\|quantity\\)\\s-+\\w+\\s-+\\(across\\|in\\|is=
\\)\\>"=0A=
         '(vhdl-font-lock-match-item=0A=
           (progn (goto-char (match-end 1)) (match-beginning 2))=0A=
           nil (1 font-lock-variable-name-face)))=0A=
   )=0A=
  "For consideration as a value of `vhdl-font-lock-keywords'.=0A=
This does context sensitive highlighting of names and labels.")=0A=
=0A=
;; bibtex.el=0A=
(defvar bibtex-font-lock-keywords=0A=
  ;; entry type and reference key=0A=
  `((,bibtex-any-entry-maybe-empty-head=0A=
     (,bibtex-type-in-head font-lock-function-name-face)=0A=
     (,bibtex-key-in-head font-lock-constant-face nil t))=0A=
    ;; optional field names (treated as comments)=0A=
    (,(concat "^[ \t]*\\(OPT" bibtex-field-name "\\)[ \t]*=3D")=0A=
     1 font-lock-comment-face)=0A=
    ;; field names=0A=
    (,(concat "^[ \t]*\\(" bibtex-field-name "\\)[ \t]*=3D")=0A=
     1 font-lock-variable-name-face)=0A=
    ;; url=0A=
    (bibtex-font-lock-url) (bibtex-font-lock-crossref))=0A=
  "*Default expressions to highlight in BibTeX mode.")=0A=
=0A=
;; conf-mode.el=0A=
(defvar conf-font-lock-keywords=0A=
  `(;; [section] (do this first because it may look like a parameter)=0A=
    ("^[ \t]*\\[\\(.+\\)\\]" 1 'font-lock-type-face)=0A=
    ;; var=3Dval or var[index]=3Dval=0A=
    ("^[ \t]*\\(.+?\\)\\(?:\\[\\(.*?\\)\\]\\)?[ \t]*=3D"=0A=
     (1 'font-lock-variable-name-face)=0A=
     (2 'font-lock-constant-face nil t))=0A=
    ;; section { ... } (do this last because some assign ...{...)=0A=
    ("^[ \t]*\\([^=3D:\n]+?\\)[ \t\n]*{[^{}]*?$" 1 'font-lock-type-face =
prepend))=0A=
  "Keywords to hilight in Conf mode.")=0A=
=0A=
;; conf-mode.el=0A=
(defvar conf-colon-font-lock-keywords=0A=
  `(;; [section] (do this first because it may look like a parameter)=0A=
    ("^[ \t]*\\[\\(.+\\)\\]" 1 'font-lock-type-face)=0A=
    ;; var: val=0A=
    ("^[ \t]*\\(.+?\\)[ \t]*:"=0A=
     (1 'font-lock-variable-name-face))=0A=
    ;; section { ... } (do this last because some assign ...{...)=0A=
    ("^[ \t]*\\([^:\n]+\\)[ \t\n]*{[^{}]*?$" 1 'font-lock-type-face =
prepend))=0A=
  "Keywords to hilight in Conf Colon mode.")=0A=
=0A=
;; dns-mode.el=0A=
(defcustom dns-mode-font-lock-keywords=0A=
  `(("^$ORIGIN" 0 ,dns-mode-control-entity-face)=0A=
    ("^$INCLUDE" 0 ,dns-mode-control-entity-face)=0A=
    ("^$[a-z0-9A-Z]+" 0 ,dns-mode-bad-control-entity-face)=0A=
    (,(regexp-opt dns-mode-classes) 0 ,dns-mode-class-face)=0A=
    (,(regexp-opt dns-mode-types) 0 ,dns-mode-type-face))=0A=
  "Font lock keywords used to highlight text in DNS master file mode."=0A=
  :type 'sexp=0A=
  :group 'dns-mode)=0A=
=0A=
;; nroff-mode.el=0A=
(defcustom nroff-font-lock-keywords=0A=
  (list=0A=
   ;; Directives are . or ' at start of line, followed by=0A=
   ;; optional whitespace, then command (which my be longer than=0A=
   ;; 2 characters in groff).  Perhaps the arguments should be=0A=
   ;; fontified as well.=0A=
   "^[.']\\s-*\\sw+"=0A=
   ;; There are numerous groff escapes; the following get things=0A=
   ;; like \-, \(em (standard troff) and \f[bar] (groff=0A=
   ;; variants).  This won't currently do groff's \A'foo' and=0A=
   ;; the like properly.  One might expect it to highlight an escape's=0A=
   ;; arguments in common cases, like \f.=0A=
   (concat "\\\\"                     ; backslash=0A=
         "\\("                        ; followed by various possibilities=0A=
         (mapconcat 'identity=0A=
                    '("[f*n]*\\[.+?]" ; some groff extensions=0A=
                      "(.."           ; two chars after (=0A=
                      "[^(\"]"        ; single char escape=0A=
                      ) "\\|")=0A=
         "\\)")=0A=
   )=0A=
  "Font-lock highlighting control in `nroff-mode'."=0A=
  :group 'nroff=0A=
  :type '(repeat regexp))=0A=
=0A=
;; org.el=0A=
(defun org-set-font-lock-defaults ()=0A=
  (let* ((em org-fontify-emphasized-text)=0A=
         (lk org-activate-links)=0A=
         (org-font-lock-extra-keywords=0A=
          ;; Headlines=0A=
          (list=0A=
           '("^\\(\\**\\)\\(\\*\\)\\(.*\\)" (1 (org-get-level-face 1))=0A=
             (2 (org-get-level-face 2)) (3 (org-get-level-face 3)))=0A=
           '("^[ \t]*\\(\\(|\\|\\+-[-+]\\).*\\S-\\)"=0A=
             (1 'org-table))=0A=
           ;; Links=0A=
           (if (memq 'angle lk) '(org-activate-angle-links (0 'org-link t)))=0A=
           (if (memq 'plain lk) '(org-activate-plain-links (0 'org-link t)))=0A=
           (if (memq 'bracket lk) '(org-activate-bracket-links (0 'org-link 
t)))=0A=
           (if (memq 'radio lk) '(org-activate-target-links (0 'org-link 
t)))=0A=
           (if (memq 'date lk) '(org-activate-dates (0 'org-date t)))=0A=
           (if (memq 'camel lk) '(org-activate-camels (0 'org-link t)))=0A=
           (if (memq 'tag lk) '(org-activate-tags (1 'org-tag prepend)))=0A=
           (if org-table-limit-column-width=0A=
               '(org-hide-wide-columns (0 nil append)))=0A=
           ;; TODO lines=0A=
           (list (concat "^\\*+[ \t]*" org-not-done-regexp)=0A=
                 '(1 'org-todo t))=0A=
           ;; Priorities=0A=
           (list (concat "\\[#[A-Z]\\]") '(0 'org-special-keyword t))=0A=
           ;; Special keywords=0A=
           (list (concat "\\<" org-deadline-string) '(0 'org-special-keyword 
t))=0A=
           (list (concat "\\<" org-scheduled-string) '(0 'org-special-keyword =
t))=0A=
           (list (concat "\\<" org-closed-string) '(0 'org-special-keyword 
t))=0A=
           (list (concat "\\<" org-clock-string) '(0 'org-special-keyword 
t))=0A=
           ;; Emphasis=0A=
           (if em '(org-do-emphasis-faces))=0A=
           ;; Checkboxes, similar to Frank Ruell's org-checklet.el=0A=
           '("^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[ X]\\]\\)"=0A=
             2 'bold prepend)=0A=
           ;; COMMENT=0A=
           (list (concat "^\\*+[ \t]*\\<\\(" org-comment-string=0A=
                         "\\|" org-quote-string "\\)\\>")=0A=
                 '(1 'org-special-keyword t))=0A=
           '("^#.*" (0 'font-lock-comment-face t))=0A=
           ;; DONE=0A=
           (if org-fontify-done-headline=0A=
               (list (concat "^[*]+ +\\<\\(" org-done-string 
"\\)\\(.*\\)\\>")=0A=
                     '(1 'org-done t) '(2 'org-headline-done t))=0A=
             (list (concat "^[*]+ +\\<\\(" org-done-string "\\)\\>")=0A=
                   '(1 'org-done t)))=0A=
           ;; Table stuff=0A=
           '("^[ \t]*\\(:.*\\)" (1 'org-table t))=0A=
           '("| *\\(:?=3D[^|\n]*\\)" (1 'org-formula t))=0A=
           '("^[ \t]*| *\\([#!$*_^]\\) *|" (1 'org-formula t))=0A=
           (if org-format-transports-properties-p=0A=
               '("| *\\(<[0-9]+>\\) *" (1 'org-formula t)))=0A=
           '("^\\*+ \\(.*:ARCHIVE:.*\\)" (1 'org-archived prepend))=0A=
           )))=0A=
    (setq org-font-lock-extra-keywords (delq nil =
org-font-lock-extra-keywords))=0A=
    ;; Now set the full font-lock-keywords=0A=
    (set (make-local-variable 'org-font-lock-keywords)=0A=
         org-font-lock-extra-keywords)=0A=
    (set (make-local-variable 'font-lock-defaults)=0A=
         '(org-font-lock-keywords t nil nil backward-paragraph))=0A=
    (kill-local-variable 'font-lock-keywords) nil))=0A=
=0A=
;; sgml-mode.el=0A=
(defconst sgml-font-lock-keywords-1=0A=
  `((,(concat "<\\([!?]" sgml-name-re "\\)") 1 font-lock-keyword-face)=0A=
    ;; We could use the simpler "\\(" sgml-namespace-re ":\\)?" instead,=0A=
    ;; but it would cause a bit more backtracking in the re-matcher.=0A=
    (,(concat "</?\\(" sgml-namespace-re "\\)\\(?::\\(" sgml-name-re =
"\\)\\)?")=0A=
     (1 (if (match-end 2) sgml-namespace-face =
font-lock-function-name-face))=0A=
     (2 font-lock-function-name-face nil t))=0A=
    ;; FIXME: this doesn't cover the variables using a default value.=0A=
    (,(concat "\\(" sgml-namespace-re "\\)\\(?::\\("=0A=
              sgml-name-re "\\)\\)?=3D[\"']")=0A=
     (1 (if (match-end 2) sgml-namespace-face =
font-lock-variable-name-face))=0A=
     (2 font-lock-variable-name-face nil t))=0A=
    (,(concat "[&%]" sgml-name-re ";?") . font-lock-variable-name-face)))=0A=
=0A=
;; sgml-mode.el=0A=
(defconst sgml-font-lock-keywords-2=0A=
  (append=0A=
   sgml-font-lock-keywords-1=0A=
   '((eval=0A=
      . (cons (concat "<"=0A=
                      (regexp-opt (mapcar 'car sgml-tag-face-alist) t)=0A=
                      "\\([ \t][^>]*\\)?>\\([^<]+\\)</\\1>")=0A=
              '(3 (cdr (assoc (downcase (match-string 1))=0A=
                              sgml-tag-face-alist)) prepend))))))=0A=
=0A=
;; tex-mode.el=0A=
(defconst tex-font-lock-keywords-1=0A=
  (eval-when-compile=0A=
    (let* (;; Names of commands whose arg should be fontified as =
heading, etc.=0A=
           (headings (regexp-opt=0A=
                      '("title"  "begin" "end" "chapter" "part"=0A=
                        "section" "subsection" "subsubsection"=0A=
                        "paragraph" "subparagraph" "subsubparagraph"=0A=
                        "newcommand" "renewcommand" "providecommand"=0A=
                        "newenvironment" "renewenvironment"=0A=
                        "newtheorem" "renewtheorem")=0A=
                      t))=0A=
           (variables (regexp-opt=0A=
                       '("newcounter" "newcounter*" "setcounter" 
"addtocounter"=0A=
                         "setlength" "addtolength" "settowidth")=0A=
                       t))=0A=
           (includes (regexp-opt=0A=
                      '("input" "include" "includeonly" "bibliography"=0A=
                        "epsfig" "psfig" "epsf" "nofiles" "usepackage"=0A=
                        "documentstyle" "documentclass" "verbatiminput"=0A=
                        "includegraphics" "includegraphics*"=0A=
                        "url" "nolinkurl")=0A=
                      t))=0A=
           ;; Miscellany.=0A=
           (slash "\\\\")=0A=
           (opt " *\\(\\[[^]]*\\] *\\)*")=0A=
           ;; This would allow highlighting \newcommand\CMD but requires=0A=
           ;; adapting subgroup numbers below.=0A=
           ;; (arg =
"\\(?:{\\(\\(?:[^{}\\]+\\|\\\\.\\|{[^}]*}\\)+\\)\\|\\\\[a-z*]+\\)"))=0A=
           (arg "{\\(\\(?:[^{}\\]+\\|\\\\.\\|{[^}]*}\\)+\\)"))=0A=
      (list=0A=
       ;; font-lock-syntactic-keywords causes the \ of \end{verbatim} to =
be=0A=
       ;; highlighted as tex-verbatim face.  Let's undo that.=0A=
       ;; This is ugly and brittle :-(  --Stef=0A=
       '("^\\(\\\\\\)end" (1 (get-text-property (match-end 1) 'face) t))=0A=
       ;; display $$ math $$=0A=
       ;; We only mark the match between $$ and $$ because the $$ =
delimiters=0A=
       ;; themselves have already been marked (along with $..$) by =
syntactic=0A=
       ;; fontification.  Also this is done at the very beginning so as =
to=0A=
       ;; interact with the other keywords in the same way as $...$ does.=0A=
       (list "\\$\\$\\([^$]+\\)\\$\\$" 1 'tex-math-face)=0A=
       ;; Heading args.=0A=
       (list (concat slash headings "\\*?" opt arg)=0A=
             ;; If ARG ends up matching too much (if the {} don't match, 
f.ex)=0A=
             ;; jit-lock will do funny things: when updating the buffer=0A=
             ;; the re-highlighting is only done locally so it will just=0A=
             ;; match the local line, but defer-contextually will=0A=
             ;; match more lines at a time, so ARG will end up matching=0A=
             ;; a lot more, which might suddenly include a comment=0A=
             ;; so you get things highlighted bold when you type them=0A=
             ;; but they get turned back to normal a little while later=0A=
             ;; because "there's already a face there".=0A=
             ;; Using `keep' works around this un-intuitive behavior as well=0A=
             ;; as improves the behavior in the very rare case where you do=0A=
             ;; have a comment in ARG.=0A=
             3 'font-lock-function-name-face 'keep)=0A=
       (list (concat slash "\\(?:provide\\|\\(?:re\\)?new\\)command\\** =
*\\(\=0A=
address@hidden)")=0A=
             1 'font-lock-function-name-face 'keep)=0A=
       ;; Variable args.=0A=
       (list (concat slash variables " *" arg) 2 =
'font-lock-variable-name-face)=0A=
       ;; Include args.=0A=
       (list (concat slash includes opt arg) 3 'font-lock-builtin-face)=0A=
       ;; Definitions.  I think.=0A=
       '("^[ \t]*\\\\def *\\\\\\(\\(\\w\\|@\\)+\\)"=0A=
         1 font-lock-function-name-face))))=0A=
  "Subdued expressions to highlight in TeX modes.")=0A=
=0A=
;; tex-mode.el=0A=
(defconst tex-font-lock-keywords-2=0A=
  (append tex-font-lock-keywords-1=0A=
   (eval-when-compile=0A=
     (let* (;;=0A=
            ;; Names of commands whose arg should be fontified with fonts.=0A=
            (bold (regexp-opt '("textbf" "textsc" "textup"=0A=
                                "boldsymbol" "pmb") t))=0A=
            (italic (regexp-opt '("textit" "textsl" "emph") t))=0A=
            ;; FIXME: unimplemented yet.=0A=
            ;; (type (regexp-opt '("texttt" "textmd" "textrm" "textsf") t))=0A=
            ;;=0A=
            ;; Names of commands whose arg should be fontified as a 
citation.=0A=
            (citations (regexp-opt=0A=
                        '("label" "ref" "pageref" "vref" "eqref"=0A=
                          "cite" "nocite" "index" "glossary" "bibitem"=0A=
                          ;; These are text, rather than citations.=0A=
                          ;; "caption" "footnote" "footnotemark" 
"footnotetext"=0A=
                          )=0A=
                        t))=0A=
            ;;=0A=
            ;; Names of commands that should be fontified.=0A=
            (specials-1 (regexp-opt '("\\" "\\*") t)) ;; "-"=0A=
            (specials-2 (regexp-opt=0A=
                         '("linebreak" "nolinebreak" "pagebreak" 
"nopagebreak"=0A=
                           "newline" "newpage" "clearpage" "cleardoublepage"=0A=
                           "displaybreak" "allowdisplaybreaks"=0A=
                           "enlargethispage") t))=0A=
            (general "\\(address@hidden|[^ \t\n]\\)")=0A=
            ;;=0A=
            ;; Miscellany.=0A=
            (slash "\\\\")=0A=
            (opt " *\\(\\[[^]]*\\] *\\)*")=0A=
            (args "\\(\\(?:[^{}&\\]+\\|\\\\.\\|{[^}]*}\\)+\\)")=0A=
            (arg "{\\(\\(?:[^{}\\]+\\|\\\\.\\|{[^}]*}\\)+\\)"))=0A=
       (list=0A=
        ;;=0A=
        ;; Citation args.=0A=
        (list (concat slash citations opt arg) 3 'font-lock-constant-face)=0A=
        ;;=0A=
        ;; Text between `` quotes ''.=0A=
        (cons (concat (regexp-opt `("``" "\"<" "\"`" "<<" "=AB") t)=0A=
                      "[^'\">{]+"       ;a bit pessimistic=0A=
                      (regexp-opt `("''" "\">" "\"'" ">>" "=BB") t))=0A=
              'font-lock-string-face)=0A=
        ;;=0A=
        ;; Command names, special and general.=0A=
        (cons (concat slash specials-1) 'font-lock-warning-face)=0A=
        (list (concat "\\(" slash specials-2 "\\)\\(address@hidden|\\'\\)")=0A=
              1 'font-lock-warning-face)=0A=
        (concat slash general)=0A=
        ;;=0A=
        ;; Font environments.  It seems a bit dubious to use `bold' etc. 
faces=0A=
        ;; since we might not be able to display those fonts.=0A=
        (list (concat slash bold " *" arg) 2=0A=
              '(tex-font-lock-append-prop 'bold) 'append)=0A=
        (list (concat slash italic " *" arg) 2=0A=
              '(tex-font-lock-append-prop 'italic) 'append)=0A=
        ;; (list (concat slash type arg) 2 '(quote bold-italic) 'append)=0A=
        ;;=0A=
        ;; Old-style bf/em/it/sl.  Stop at `\\' and un-escaped `&', for 
tables.=0A=
        (list (concat "\\\\\\(em\\|it\\|sl\\)\\>" args)=0A=
              2 '(tex-font-lock-append-prop 'italic) 'append)=0A=
        ;; This is separate from the previous one because of cases like=0A=
        ;; {\em foo {\bf bar} bla} where both match.=0A=
        (list (concat "\\\\\\(bf\\(series\\)?\\)\\>" args)=0A=
              3 '(tex-font-lock-append-prop 'bold) 'append)))))=0A=
   "Gaudy expressions to highlight in TeX modes.")=0A=
=0A=
;; texinfo.el=0A=
(defvar texinfo-font-lock-keywords=0A=
  `(;; All but the first had an OVERRIDE of t.=0A=
    ;; It didn't seem to be any better, and it's slower--simon.=0A=
    ;; Robert J. Chassell <address@hidden> says remove this line.=0A=
    ;;("\\$\\([^$]*\\)\\$" 1 font-lock-string-face t)=0A=
    ("@\\([a-zA-Z]+\\|[^ \t\n]\\)" 1 font-lock-keyword-face) ;commands=0A=
    ("^\\*\\([^\n:]*\\)" 1 font-lock-function-name-face t) ;menu items=0A=
    ("@\\(emph\\|i\\|sc\\){\\([^}]+\\)" 2 'italic)=0A=
    ("@\\(strong\\|b\\){\\([^}]+\\)" 2 'bold)=0A=
    ("@\\(kbd\\|key\\|url\\|uref\\){\\([^}]+\\)" 2 font-lock-string-face)=0A=
    ;; The following two groups have an OVERRIDE of `keep' because=0A=
    ;; their arguments frequently include a @@, and we don't want that=0A=
    ;; to overwrite the normal fontification of the argument.=0A=
    ("@\\(file\\|email\\){\\([^}]+\\)" 2 font-lock-string-face keep)=0A=
    =
("@\\(samp\\|code\\|var\\|math\\|env\\|command\\|option\\){\\([^}]+\\)"=0A=
     2 font-lock-variable-name-face keep)=0A=
    ("@\\(cite\\|x?ref\\|pxref\\|dfn\\|inforef\\){\\([^}]+\\)"=0A=
     2 font-lock-constant-face)=0A=
    ("@\\(anchor\\){\\([^}]+\\)" 2 font-lock-type-face)=0A=
    ("@\\(dmn\\|acronym\\|value\\){\\([^}]+\\)" 2 font-lock-builtin-face)=0A=
    ("@\\(end\\|itemx?\\) +\\(.+\\)" 2 font-lock-keyword-face keep)=0A=
    ;; (,texinfo-environment-regexp=0A=
    ;;  1 (texinfo-clone-environment (match-beginning 1) (match-end 1)) =
keep)=0A=
    (,(concat "^@" (regexp-opt (mapcar 'car texinfo-section-list) t)=0A=
               ".*\n") 0 texinfo-heading-face t))=0A=
  "Additional expressions to highlight in Texinfo mode.")=0A=
=0A=
=0A=

- ------=_NextPart_000_0025_01C705AA.6EAD0340--
------- End of forwarded message -------




reply via email to

[Prev in Thread] Current Thread [Next in Thread]