 
 ;; Font lock
 
+(defun haml-nested-regexp (re)
+  (concat "^\\( *\\)" re "\n\\(?:\\(?:\\1 .*\\| *\\)\n\\)*"))
+
 (defconst haml-font-lock-keywords
-  '(("^ *\\(\t\\)"               1 'haml-tab-face)
+  `((,(haml-nested-regexp "-#.*")  0 font-lock-comment-face)
+    (,(haml-nested-regexp ":\\w+") 0 font-lock-string-face)
+    ("^ *\\(\t\\)"               1 'haml-tab-face)
     ("^!!!.*"                    0 font-lock-constant-face)
     ("\\('[^']*'\\)"             1 font-lock-string-face append)
     ("\\(\"[^\"]*\"\\)"          1 font-lock-string-face append)
-    ("&?:\\w+"                   0 font-lock-constant-face append)
     ("@[a-z0-9_]+"               0 font-lock-variable-name-face append)
     ("| *$"                      0 font-lock-string-face)
     ("^[ \t]*\\(/.*\\)$"         1 font-lock-comment-face append)

    ("^ *[\\.#%a-z0-9_]+\\({[^}]+}\\)"      1 font-lock-preprocessor-face prepend)
    ("^ *[\\.#%a-z0-9_]+\\(\\[[^]]+\\]\\)"  1 font-lock-preprocessor-face prepend)))

;; Mode setup

(defvar haml-mode-syntax-table


\\{haml-mode-map}"
  (set-syntax-table haml-mode-syntax-table)
  (add-to-list 'font-lock-extend-region-functions 'haml-extend-region)
  (set (make-local-variable 'font-lock-multiline) t)
  (set (make-local-variable 'indent-line-function) 'haml-indent-line)
  (set (make-local-variable 'indent-region-function) 'haml-indent-region)
  (set (make-local-variable 'parse-sexp-lookup-properties) t)
  (setq indent-tabs-mode nil)
  (setq font-lock-defaults '((haml-font-lock-keywords) nil t)))

