(python-font-lock-keywords): Much improved descrimination between
keywords and names with keywords in them.
diff --git a/Misc/python-mode.el b/Misc/python-mode.el
index 3dd533b..5ac7982 100644
--- a/Misc/python-mode.el
+++ b/Misc/python-mode.el
@@ -204,29 +204,29 @@
;; well.
;;
(defvar python-font-lock-keywords
- (list
- (cons (concat
- "\\b\\("
- (mapconcat
- 'identity
- '("access" "and" "break" "continue"
- "del" "elif" "else:" "except"
- "except:" "exec" "finally:" "for"
- "from" "global" "if" "import"
- "in" "is" "lambda" "not"
- "or" "pass" "print" "raise"
- "return" "try:" "while"
- )
- "\\|")
- "\\)[ \n\t(]")
- 1)
- ;; classes
- '("\\bclass[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
- 1 font-lock-type-face)
- ;; functions
- '("\\bdef[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
- 1 font-lock-function-name-face)
- )
+ (let* ((keywords '("access" "and" "break" "continue"
+ "del" "elif" "else:" "except"
+ "except:" "exec" "finally:" "for"
+ "from" "global" "if" "import"
+ "in" "is" "lambda" "not"
+ "or" "pass" "print" "raise"
+ "return" "try:" "while"
+ ))
+ (kwregex (mapconcat 'identity keywords "\\|")))
+ (list
+ ;; keywords not at beginning of line
+ (cons (concat "\\s-\\(" kwregex "\\)[ \n\t(]") 1)
+ ;; keywords at beginning of line. i don't think regexps are
+ ;; powerful enough to handle these two cases in one regexp.
+ ;; prove me wrong!
+ (cons (concat "^\\(" kwregex "\\)[ \n\t(]") 1)
+ ;; classes
+ '("\\bclass[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
+ 1 font-lock-type-face)
+ ;; functions
+ '("\\bdef[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
+ 1 font-lock-function-name-face)
+ ))
"*Additional expressions to highlight in Python mode.")
;; R Lindsay Todd <toddr@rpi.edu> suggests these changes to the