Function: woman-parse-numeric-arg
woman-parse-numeric-arg is a byte-compiled function defined in
woman.el.gz.
Signature
(woman-parse-numeric-arg)
Documentation
Get the value of a numeric expression at or after point.
Unlike woman-get-numeric-arg, leaves point after the argument.
The expression may be an argument in quotes.
Source Code
;; Defined in /usr/src/emacs/lisp/woman.el.gz
(defun woman-parse-numeric-arg ()
"Get the value of a numeric expression at or after point.
Unlike `woman-get-numeric-arg', leaves point after the argument.
The expression may be an argument in quotes."
(if (= (following-char) ?\") (forward-char))
;; Allow leading +/-:
(let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
op)
(while (cond
((looking-at "[+/*%-]") ; arithmetic operators
(forward-char)
(setq op (intern-soft (match-string 0)))
(setq value (funcall op value (woman-parse-numeric-value))))
((looking-at "[<=>]=?") ; relational operators
(goto-char (match-end 0))
(setq op (intern-soft
(if (string-equal (match-string 0) "==")
"="
(match-string 0))))
(setq value (if (funcall op value (woman-parse-numeric-value))
1 0)))
((memq (setq op (following-char)) '(?& ?:)) ; Boolean and / or
(forward-char)
(setq value
;; and / or are special forms, not functions, in Elisp
(if (eq op ?&)
;; and
(if (> value 0)
(if (> (woman-parse-numeric-value) 0) 1 0)
;; skip second operand
(prog1 0 (woman-parse-numeric-value)))
;; or
(if (> value 0)
;; skip second operand
(prog1 1 (woman-parse-numeric-value))
(if (> (woman-parse-numeric-value) 0) 1 0))
)))
))
; (if (looking-at "[ \t\nRC)\"]") ; R, C are tab types
; ()
; (WoMan-warn "Unimplemented numerical operator `%c' in %s"
; (following-char)
; (buffer-substring
; (line-beginning-position)
; (line-end-position)))
; (skip-syntax-forward "^ "))
value
))