(python-font-lock-keywords): Pick up block introducing keywords with

immediately following colons.  Sjoerd noticed this one too.  Here's a
nonsense.py file that flexes all the font-lock keyword combinations.

class A:
    class B(A):
	pass
    def __init__(self):
	if i == 2 and j == 3 or k == 4:
	    import stuff
	    from otherstuff import cool
	    for i in range(cool.count):
		if i == j:
		    break
		elif j == 1:
		    continue
		print i
	    else:
		return not i
	elif q is not i:
	    return lambda x: x + 1
	else:
	    try:
		try:
		    raise stuff.error
		except stuff.error, v:
		    print v
		except:
		    global q
	    finally:
		while q > 0:
		    q = q - 1
		assert q == 0

def make():
    a = A()
    exec "nonsense"
    del a
This commit is contained in:
Barry Warsaw 1997-11-06 14:35:15 +00:00
parent ef3c891773
commit b8f1166922

View file

@ -246,19 +246,26 @@ There are many flavors of Emacs out there, each with different
features supporting those needed by CC Mode.")
(defvar python-font-lock-keywords
(let* ((keywords '("and" "assert" "break" "class"
"continue" "def" "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 "\\|")))
(let ((kw1 (mapconcat 'identity
'("and" "assert" "break" "class"
"continue" "def" "del" "elif"
"else" "except" "exec" "for"
"from" "global" "if" "import"
"in" "is" "lambda" "not"
"or" "pass" "print" "raise"
"return" "while"
)
"\\|"))
(kw2 (mapconcat 'identity
'("else:" "except:" "finally:" "try:")
"\\|"))
)
(list
;; keywords
(cons (concat "\\b\\(" kwregex "\\)\\b[ \n\t(]") 1)
(cons (concat "\\b\\(" kw1 "\\)\\b[ \n\t(]") 1)
;; block introducing keywords with immediately following colons.
;; Yes "except" is in both lists.
(cons (concat "\\b\\(" kw2 "\\)[ \n\t(]") 1)
;; classes
'("\\bclass[ \t]+\\([a-zA-Z_]+[a-zA-Z0-9_]*\\)"
1 font-lock-type-face)