Commit 45393801 authored by Juanma Barranquero's avatar Juanma Barranquero
Browse files

lisp/progmodes/hideif.el (hif-tokenize): Understand non-decimal floats.

parent 814e26fa
2014-03-20 Juanma Barranquero <lekktu@gmail.com>
 
* progmodes/hideif.el (hif-string-to-number): New function.
(hif-tokenize): Use it to understand non-decimal floats.
* emacs-lisp/cl-extra.el (cl--map-overlays): Remove obsolete code.
 
* skeleton.el (skeleton-autowrap): Mark as obsolete. Doc fix.
......
......@@ -407,6 +407,14 @@ that form should be displayed.")
(defconst hif-string-literal-regexp "\\(\"\\(?:[^\"\\]\\|\\\\.\\)*\"\\)")
(defun hif-string-to-number (string &optional base)
"Like `string-to-number', but it understands non-decimal floats."
(if (or (not base) (= base 10))
(string-to-number string base)
(let* ((parts (split-string string "\\." t "[ \t]+"))
(frac (cadr parts))
(quot (expt (* base 1.0) (length frac))))
(/ (string-to-number (concat (car parts) frac) base) quot))))
(defun hif-tokenize (start end)
"Separate string between START and END into a list of tokens."
......@@ -433,15 +441,12 @@ that form should be displayed.")
;; TODO:
;; 1. postfix 'l', 'll', 'ul' and 'ull'
;; 2. floating number formats
;; 3. hexadecimal/octal floats
;; 4. 098 is interpreted as octal conversion error
;; FIXME: string-to-number does not convert hex floats
;; 3. 098 is interpreted as octal conversion error
(if (string-match "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
token)
(string-to-number (match-string 1 token) 16)) ;; hex
;; FIXME: string-to-number does not convert octal floats
(hif-string-to-number (match-string 1 token) 16)) ;; hex
(if (string-match "\\`0[0-9]+\\(\\.[0-9]+\\)?\\'" token)
(string-to-number token 8)) ;; octal
(hif-string-to-number token 8)) ;; octal
(if (string-match "\\`[1-9][0-9]*\\(\\.[0-9]+\\)?\\'"
token)
(string-to-number token)) ;; decimal
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment