]> code.delx.au - gnu-emacs/blobdiff - lisp/lazy-lock.el
(sgml-tag-alist): Doc fix.
[gnu-emacs] / lisp / lazy-lock.el
index d5597d38a405427cd96c6b33d1bf6ddb8747f689..11303dfbd928ff771e8059163664fb845c158a5b 100644 (file)
@@ -1,4 +1,4 @@
-;;; lazy-lock.el --- Lazy demand-driven fontification for fast Font Lock mode.
+;;; lazy-lock.el --- lazy demand-driven fontification for fast Font Lock mode
 
 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 2001
 ;;   Free Software Foundation, Inc.
@@ -8,7 +8,7 @@
 ;; Keywords: faces files
 ;; Version: 2.11
 
-;;; This file is part of GNU Emacs.
+;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 (require 'font-lock)
 
 (eval-when-compile
-  ;; We don't do this at the top-level as we only use non-autoloaded macros.
-  (require 'cl)
-  ;;
-  ;; We use this to preserve or protect things when modifying text properties.
-  (defmacro save-buffer-state (varlist &rest body)
-    "Bind variables according to VARLIST and eval BODY restoring buffer state."
-    (` (let* ((,@ (append varlist
-                  '((modified (buffer-modified-p)) (buffer-undo-list t)
-                    (inhibit-read-only t) (inhibit-point-motion-hooks t)
-                    before-change-functions after-change-functions
-                    deactivate-mark buffer-file-name buffer-file-truename))))
-        (,@ body)
-        (when (and (not modified) (buffer-modified-p))
-          (set-buffer-modified-p nil)))))
-  (put 'save-buffer-state 'lisp-indent-function 1)
-  ;;
-  ;; We use this for clarity and speed.  Naughty but nice.
-  (defmacro do-while (test &rest body)
-    "(do-while TEST BODY...): eval BODY... and repeat if TEST yields non-nil.
+ ;; We don't do this at the top-level as we only use non-autoloaded macros.
+ (require 'cl)
+ ;;
+ ;; We use this to preserve or protect things when modifying text properties.
+ (defmacro save-buffer-state (varlist &rest body)
+   "Bind variables according to VARLIST and eval BODY restoring buffer state."
+   `(let* (,@(append varlist
+                  '((modified (buffer-modified-p))
+                    (buffer-undo-list t)
+                    (inhibit-read-only t)
+                    (inhibit-point-motion-hooks t)
+                    (inhibit-modification-hooks t)
+                    deactivate-mark
+                    buffer-file-name
+                    buffer-file-truename)))
+     ,@body
+     (when (and (not modified) (buffer-modified-p))
+       (restore-buffer-modified-p nil))))
+ (put 'save-buffer-state 'lisp-indent-function 1)
+ ;;
+ ;; We use this for clarity and speed.  Naughty but nice.
+ (defmacro do-while (test &rest body)
+   "(do-while TEST BODY...): eval BODY... and repeat if TEST yields non-nil.
 The order of execution is thus BODY, TEST, BODY, TEST and so on
 until TEST returns nil."
-    (` (while (progn (,@ body) (, test)))))
 (put 'do-while 'lisp-indent-function (get 'while 'lisp-indent-function)))
+   `(while (progn ,@body ,test)))
+ (put 'do-while 'lisp-indent-function (get 'while 'lisp-indent-function)))
 
 (defvar lazy-lock-mode nil)                    ; Whether we are turned on.
 (defvar lazy-lock-buffers nil)                 ; For deferral.
@@ -465,6 +469,10 @@ automatically in your `~/.emacs' by:
 
  (setq font-lock-support-mode 'lazy-lock-mode)
 
+For a newer font-lock support mode with similar functionality, see
+`jit-lock-mode'.  Eventually, Lazy Lock mode will be deprecated in
+JIT Lock's favor.
+
 When Lazy Lock mode is enabled, fontification can be lazy in a number of ways:
 
 - Demand-driven buffer fontification if `lazy-lock-minimum-size' is non-nil.
@@ -574,7 +582,6 @@ verbosity is controlled via the variable `lazy-lock-stealth-verbose'."
   ;;
   ;; Add hook if lazy-lock.el is fontifying on scrolling or is deferring.
   (when (or fontifying defer-change defer-scroll defer-context)
-    (make-local-hook 'window-scroll-functions)
     (add-hook 'window-scroll-functions (if defer-scroll
                                           'lazy-lock-defer-after-scroll
                                         'lazy-lock-fontify-after-scroll)
@@ -582,7 +589,6 @@ verbosity is controlled via the variable `lazy-lock-stealth-verbose'."
   ;;
   ;; Add hook if lazy-lock.el is fontifying and is not deferring changes.
   (when (and fontifying (not defer-change) (not defer-context))
-    (make-local-hook 'before-change-functions)
     (add-hook 'before-change-functions 'lazy-lock-arrange-before-change nil t))
   ;;
   ;; Replace Font Lock mode hook.
@@ -599,9 +605,7 @@ verbosity is controlled via the variable `lazy-lock-stealth-verbose'."
            nil t)
   ;;
   ;; Add package-specific hook.
-  (make-local-hook 'outline-view-change-hook)
   (add-hook 'outline-view-change-hook 'lazy-lock-fontify-after-visage nil t)
-  (make-local-hook 'hs-hide-hook)
   (add-hook 'hs-hide-hook 'lazy-lock-fontify-after-visage nil t))
 
 (defun lazy-lock-install-timers (dtime stime)
@@ -883,30 +887,32 @@ verbosity is controlled via the variable `lazy-lock-stealth-verbose'."
 ;; should use this function.  For an example, see ps-print.el.
 (defun lazy-lock-fontify-region (beg end)
   ;; Fontify between BEG and END, where necessary, in the current buffer.
-  (when (setq beg (text-property-any beg end 'lazy-lock nil))
-    (save-excursion
-      (save-match-data
-       (save-buffer-state
-           ;; Ensure syntactic fontification is always correct.
-           (font-lock-beginning-of-syntax-function next)
-         ;; Find successive unfontified regions between BEG and END.
-         (condition-case data
-             (do-while beg
-               (setq next (or (text-property-any beg end 'lazy-lock t) end))
-               ;; Make sure the region end points are at beginning of line.
-               (goto-char beg)
-               (unless (bolp)
-                 (beginning-of-line)
-                 (setq beg (point)))
-               (goto-char next)
-               (unless (bolp)
-                 (forward-line)
-                 (setq next (point)))
-               ;; Fontify the region, then flag it as fontified.
-               (font-lock-fontify-region beg next)
-               (add-text-properties beg next '(lazy-lock t))
-               (setq beg (text-property-any next end 'lazy-lock nil)))
-           ((error quit) (message "Fontifying region...%s" data))))))))
+  (save-restriction
+    (widen)
+    (when (setq beg (text-property-any beg end 'lazy-lock nil))
+      (save-excursion
+       (save-match-data
+         (save-buffer-state
+          ;; Ensure syntactic fontification is always correct.
+          (font-lock-beginning-of-syntax-function next)
+          ;; Find successive unfontified regions between BEG and END.
+          (condition-case data
+              (do-while beg
+                        (setq next (or (text-property-any beg end 'lazy-lock t) end))
+         ;; Make sure the region end points are at beginning of line.
+                        (goto-char beg)
+                        (unless (bolp)
+                          (beginning-of-line)
+                          (setq beg (point)))
+                        (goto-char next)
+                        (unless (bolp)
+                          (forward-line)
+                          (setq next (point)))
+                    ;; Fontify the region, then flag it as fontified.
+                        (font-lock-fontify-region beg next)
+                        (add-text-properties beg next '(lazy-lock t))
+                        (setq beg (text-property-any next end 'lazy-lock nil)))
+            ((error quit) (message "Fontifying region...%s" data)))))))))
 
 (defun lazy-lock-fontify-chunk ()
   ;; Fontify the nearest chunk, for stealth, in the current buffer.