;;; hexcolour.el --- Highlight HTML-style colour specifications ;; Copyright (C) 2003 Free Software Foundation, Inc. ;; Author: Oliver Scholz ;; Keywords: ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; This package provides a minor mode for highlighting of HTML-style ;; colour specifications, a là #324f3a. "Fine," you say, "what's so ;; special about this?" Well, when this mode is turned on, Emacs ;; highlights the colour spec _in the specified_ colour (as ;; background). ;; To activate it, put it into a directory in you `load-path' and put ;; this into your .emacs: ;; (autoload 'hexcolour-mode "hexcolour" nil t nil) ;; (add-hook ;; (lambda () ;; (hexcolour-mode 1))) ;; This package was implemented as a minor mode in order to work ;; around some quirks in the implementation of font-lock in the ;; current (as of summer 2003) released version of GNU Emacs. If you ;; use a recent CVS version of Emacs (the one that will probably (!) ;; become 21.5), then you shouldn't use it. You can simply something ;; like this into your .emacs: ;; (defvar hexcolour-keywords ;; '(("#[abcdef[:digit:]]\\{6\\}" ;; (0 (put-text-property (match-beginning 0) ;; (match-end 0) ;; 'face (list :background ;; (match-string-no-properties 0))))))) ;; (defun hexcolour-add-to-font-lock () ;; (font-lock-add-keywords nil hexcolour-keywords)) ;; (add-hook 'hexcoulour-add-to-font-lock) ;;; Code: (defconst hexcolour-chunk-size 500) (defconst hexcolour-regexp "#[abcdef[:digit:]]\\{6\\}") (defvar hexcolour-old-fontify-region-function nil) (make-variable-buffer-local 'hexcolour-old-fontify-region-function) (defun hexcolour-fontification-function (beg end) (save-restriction (widen) (while (re-search-forward hexcolour-regexp end t) (put-text-property (match-beginning 0) (match-end 0) 'face (list :background (match-string-no-properties 0)))))) (defun hexcolour-fontify-region-function (beg end verbose) (funcall hexcolour-old-fontify-region-function beg end verbose) (hexcolour-fontification-function beg end)) (define-minor-mode hexcolour-mode "Toggle `hexcolour-mode'. With positive numeric prefix argument, turn mode on. With negative numeric prefix arg, turn it off. If `hexcolour-mode' is turned on, hexadecimal colour specifications like #3253ff are displayed with the specified colour as background." nil "hc" nil (cond (hexcolour-mode ;; Turn mode on. (setq hexcolour-old-fontify-region-function font-lock-fontify-region-function) (setq font-lock-fontify-region-function 'hexcolour-fontify-region-function) (font-lock-fontify-buffer)) (t ;; Turn mode off. (setq font-lock-fontify-region-function hexcolour-old-fontify-region-function) (setq hexcolour-old-fontify-region-function nil) (font-lock-fontify-buffer)))) (provide 'hexcolour) ;;; hexcolour.el ends here