[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#679: 23.0.60; Function json-read-number does not handle complete Jav
From: |
Kevin Rodgers |
Subject: |
bug#679: 23.0.60; Function json-read-number does not handle complete Javascript spec |
Date: |
Wed, 13 Aug 2008 20:25:05 -0600 |
User-agent: |
Thunderbird 2.0.0.16 (Macintosh/20080707) |
Edward O'Connor wrote:
Hi,
Could you take a look at this bug report?
Sure. I'll have a fix to you in the next few days.
Here's an improved version: Besides recognizing the D. and .D number
forms mentioned in the original bug report, and the positive signed
forms mentioned in my first response, it also
(a) recognizes hexadecimal and octal integers per
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Literals#Integers
(b) correctly fails to recognize more than 1 leading sign (e.g. --, ++,
+-, -+)
(c) correctly fails to recognize exponent forms without a preceding number.
I hope you'll use it.
(defun json-read-number (&optional sign base)
"Read the JSON number following point.
The optional SIGN and BASE arguments are for internal use.
N.B.: Only numbers which can fit in Emacs Lisp's native number
representation will be parsed correctly."
;; If SIGN is non-nil, the number is explicitly signed.
;; If BASE is null, read a decimal integer or floating point;
;; if BASE is 16, read a hexadecimal integer;
;; if BASE is 8, read an octal integer.
(let ((number-regexp
(cond ((null base)
"\\([0-9]+\\)?\\(\\.[0-9]+\\)?\\([Ee][+-]?[0-9]+\\)?")
((equal base 8) "[0-7]+")
((equal base 16) "[0-9A-Fa-f]+"))))
(cond ((and (null sign) (char-equal (json-peek) ?-))
(json-advance)
(- (json-read-number t base)))
((and (null sign) (char-equal (json-peek) ?+))
(json-advance)
(json-read-number t base))
((and (null base) (looking-at "0[Xx]"))
(json-advance 2)
(json-read-number t 16))
((and (null base) (looking-at "0[0-7]"))
(json-advance 1)
(json-read-number t 8))
((and (looking-at number-regexp)
(or base
(match-beginning 1)
(match-beginning 2)))
(goto-char (match-end 0))
(string-to-number (match-string 0) base))
(t (signal 'json-number-format (list (point)))))))
Thanks,
--
Kevin Rodgers
Denver, Colorado, USA
bug#679: 23.0.60; Function json-read-number does not handle complete Javascript spec, OFFICE ZERO, 2008/08/09
bug#679: 23.0.60; Function json-read-number does not handle complete Javascript spec, Kevin Rodgers, 2008/08/12
bug#679: marked as done (23.0.60; Function json-read-number does not handle complete Javascript spec), Emacs bug Tracking System, 2008/08/28