GNU bug report logs - #16834
24.3.50; num3-mode detects long hex numbers as decimal

Previous Next

Package: emacs;

Reported by: Alex Bennée <kernel-hacker <at> bennee.com>

Date: Fri, 21 Feb 2014 17:13:02 UTC

Severity: minor

Found in version 24.3.50

Done: Glenn Morris <rgm <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #11 received at 16834 <at> debbugs.gnu.org (full text, mbox):

From: Michal Nazarewicz <mina86 <at> mina86.com>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>, Alex Bennée
 <kernel-hacker <at> bennee.com>
Cc: 16834 <at> debbugs.gnu.org
Subject: Re: bug#16834: 24.3.50; num3-mode detects long hex numbers as decimal
Date: Fri, 21 Feb 2014 20:49:26 +0100
[Message part 1 (text/plain, inline)]
On Fri, Feb 21 2014, Stefan Monnier <monnier <at> iro.umontreal.ca> wrote:
>> When dealing with large hex numbers the default regex of num3-mode can
>> detect them as decimals.  For example given:
>> V28   : 00000000000000000007fc0000000000 vs 0000000000000000000bfc000000000
>> the follow is high-lighted
>> V28   : __xxx___xxx___xxx_____x___xxx___ vs _xxx___xxx___xxx_________xxx___
>> which is obviously wrong.
>
> I guess we could use the patch below.  Michal, what do you think?

Looks good in general, but this leads to some interesting results:

  “Aaaaaaa” he screamed as the dentist pulled his teeth out.

And if someone sets num3-threshold to 1 and changes num3-face-odd, all
the hexadecimal digits will get highlighted in a regular text even when
they are inside of a word.

I also hope engineers won't get mad when 1000A starts being treated as
a hexadecimal number.  (They should know to put a non-break space
between the number an the unit anyway).

Perhaps this would be better:

(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

So there would have to be at least one decimal digit and the whole
sequence would have to be a complete word (i.e. 1000Ah, which would be
a pretty big battery, won't be highlighted as a hexadecimal number).

>> It wouldn't hurt to have customisable faces as well as the default can
>> look quite harsh depending on the theme.
>
> Hmmm... they are, AFAICT (faces num3-face-odd and num3-face-even).

Yep, I have this in my custom.el:

 '(num3-face-even ((t (:foreground "#CFF" :underline nil :weight normal))))

I don't particularly like the defaults myself, but that was what Felix
used in his original code, so I kept it.

> diff --git a/packages/num3-mode/num3-mode.el b/packages/num3-mode/num3-mode.el
> index b890c89..ae3289a 100644
> --- a/packages/num3-mode/num3-mode.el
> +++ b/packages/num3-mode/num3-mode.el
> @@ -1,6 +1,6 @@
>  ;;; 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 <at> gmail.com>, Michal Nazarewicz <mina86 <at> mina86.com>
>  ;; Maintainer: Michal Nazarewicz <mina86 <at> mina86.com>
> @@ -98,7 +98,10 @@ where) decimal point (would be) is."
>  (define-globalized-minor-mode global-num3-mode num3-mode num3-mode)
>  
>  (defconst num3--number-re
> -  (concat    "\\(?:0[xX]\\|#\\)\\([0-9a-fA-F]+\\)"  ; 1 = hexadecimal
> +  ;; Recognize "0x" and "#x" as prefixes announcing hexadecimal (from C and
> +  ;; Elisp, respectively).
> +  (concat    "[0#][xX]\\([[:xdigit:]]+\\)"  ; 1 = hexadecimal
> +          "\\|\\(?1:[[:xdigit:]]*[a-fA-F][[:xdigit:]]*\\)" ; 1 = hexadecimal
>            "\\|\\([0-9]+\\)"                         ; 2 = decimal
>            "\\|\\.\\([0-9]+\\)"))                    ; 3 = fraction
>  

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +--<mpn <at> google.com>--<xmpp:mina86 <at> jabber.org>--ooO--(_)--Ooo--
[Message part 2 (text/plain, inline)]

[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 11 years and 152 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.