;;; num3-mode.el --- highlight groups of digits in long numbers -*- lexical-binding: t -*-
-;; Copyright (C) 2012 Free Software Foundation, Inc.
+;; Copyright (C) 2012, 2014 Free Software Foundation, Inc.
;; Author: Felix Lee <felix8a@gmail.com>, Michal Nazarewicz <mina86@mina86.com>
;; Maintainer: Michal Nazarewicz <mina86@mina86.com>
-;; Keywoards: faces, minor-mode
-;; Version: 1.0
+;; Keywords: faces, minor-mode
+;; Version: 1.2
;; 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
where) decimal point (would be) is."
nil " num3" nil
(if num3-mode
- (unless (assoc '-num3-matcher font-lock-keywords)
- (font-lock-add-keywords nil '(-num3-matcher) 'append))
- (font-lock-remove-keywords nil '(-num3-matcher)))
- (when font-lock-mode
- (font-lock-fontify-buffer)))
+ (unless (assoc 'num3--matcher font-lock-keywords)
+ (font-lock-add-keywords nil '(num3--matcher) 'append))
+ (font-lock-remove-keywords nil '(num3--matcher)))
+ (if (fboundp 'font-lock-flush) (font-lock-flush)
+ (when font-lock-mode (font-lock-fontify-buffer))))
;;;###autoload
(define-globalized-minor-mode global-num3-mode num3-mode num3-mode)
-(defconst -num3-number-re
- (concat "\\(?:0[xX]\\|#\\)\\([0-9a-fA-F]+\\)" ; 1 = hexadecimal
- "\\|\\([0-9]+\\)" ; 2 = decimal
- "\\|\\.\\([0-9]+\\)")) ; 3 = fraction
+(defconst num3--number-re
+ (concat "[0#][xX]\\([[:xdigit:]]+\\)" ; 1 = hexadecimal
+ "\\|\\(?1:\\b\\(?:[0-9]+[a-fA-F]\\|" ; 1 = hexadecimal
+ "[a-fA-F]+[0-9]\\)[[:xdigit:]]*\\b\\)"
+ "\\|\\([0-9]+\\)" ; 2 = decimal
+ "\\|\\.\\([0-9]+\\)")) ; 3 = fraction
-(defun -num3-matcher (lim)
+(defun num3--matcher (lim)
"Function used as a font-lock-keywoard handler used in `num3-mode'.
Performs fontification of numbers from point to LIM."
(save-excursion
- (while (re-search-forward -num3-number-re lim t)
- (-num3-int (match-beginning 1) (match-end 1) 4)
- (-num3-int (match-beginning 2) (match-end 2) num3-group-size)
- (-num3-frac (match-beginning 3) (match-end 3) num3-group-size)))
+ (while (re-search-forward num3--number-re lim t)
+ (num3--int (match-beginning 1) (match-end 1) 4)
+ (num3--int (match-beginning 2) (match-end 2) num3-group-size)
+ (num3--frac (match-beginning 3) (match-end 3) num3-group-size)))
nil)
-(defun -num3-int (lo hi n)
+(defun num3--int (lo hi n)
"Highlight groups of digits in a long number.
LO and HI arguments specify the range where the number is
located. If the length of that region exceeds `num3-threshold',
(when (and lo (>= (- hi lo) num3-threshold))
(let (even)
(while (< lo hi)
- (-num3-put even (max lo (- hi n)) hi)
+ (num3--put even (max lo (- hi n)) hi)
(setq hi (- hi n) even (not even))))))
-(defun -num3-frac (lo hi n)
+(defun num3--frac (lo hi n)
"Highlight groups of digits in a long number.
LO and HI arguments specify the range where the number is
located. If the length of that region exceeds `num3-threshold',
(when (and lo (>= (- hi lo) num3-threshold))
(let (even)
(while (< lo hi)
- (-num3-put even lo (min hi (+ lo n)))
+ (num3--put even lo (min hi (+ lo n)))
(setq lo (+ lo n) even (not even))))))
-(defun -num3-put (even lo hi)
+(defun num3--put (even lo hi)
"Add font lock text property to highlight a single group of digit.
Use `num3-face-odd' if EVEN is nil and `num3-face-even' if EVEN is
non-nil. The region the face is set to is from LO to HI."
(font-lock-append-text-property lo hi 'face
(if even 'num3-face-even 'num3-face-odd)))
-(provide 'num3)
-
-;;; num3.el ends here
+(provide 'num3-mode)
+;;; num3-mode.el ends here