Function: woman0-if
woman0-if is a byte-compiled function defined in woman.el.gz.
Signature
(woman0-if REQUEST)
Documentation
.if/ie c anything -- Discard unless c evaluates to true.
Remember condition for use by a subsequent .el.
REQUEST is the invoking directive without the leading dot.
Source Code
;; Defined in /usr/src/emacs/lisp/woman.el.gz
;; request does not appear to be used dynamically by any callees.
(defun woman0-if (request)
".if/ie c anything -- Discard unless c evaluates to true.
Remember condition for use by a subsequent `.el'.
REQUEST is the invoking directive without the leading dot."
;; c evaluates to a one-character built-in condition name or
;; 'string1'string2' or a number > 0, prefix ! negates.
;; \{ ... \} for multi-line use.
;; Leaves point at start of new text.
(woman-delete-match 0)
;; (delete-horizontal-space)
;; Process escapes in condition:
(let ((from (point)) negated n (c 0))
(set-marker woman0-if-to
(save-excursion (skip-syntax-forward "^ ") (point)))
;; Process condition:
(if (setq negated (= (following-char) ?!)) (delete-char 1))
(cond
;; ((looking-at "[no]") (setq c t)) ; accept n(roff) and o(dd page)
;; ((looking-at "[te]") (setq c nil)) ; reject t(roff) and e(ven page)
;; Per groff ".if v" is recognized as false (it means -Tversatec).
((looking-at "[ntoev]")
(setq c (memq (following-char) woman-if-conditions-true)))
;; Unrecognized letter so reject:
((looking-at "[A-Za-z]") (setq c nil)
(WoMan-warn "%s %s -- unrecognized condition name rejected!"
request (match-string 0)))
;; Accept strings if identical:
((save-restriction
(narrow-to-region from woman0-if-to)
;; String delimiter can be any non-numeric character,
;; including a special character escape:
(looking-at "\\(\\\\(..\\|[^0-9]\\)\\(.*\\)\\1\\(.*\\)\\1\\'"))
(let ((end1 (copy-marker (match-end 2) t))) ; End of first string.
;; Delete 2nd and 3rd delimiters to avoid processing them:
(delete-region (match-end 3) woman0-if-to)
(delete-region (match-end 2) (match-beginning 3))
(goto-char (match-end 1))
(woman0-process-escapes (point) woman0-if-to)
(setq c (string= (buffer-substring (point) end1)
(buffer-substring end1 woman0-if-to)))
(set-marker end1 nil)
(goto-char from)))
;; Accept numeric value if > 0:
((numberp (setq n (progn
(woman0-process-escapes from woman0-if-to)
(woman-parse-numeric-arg))))
(setq c (> n 0))
(goto-char from)))
(if (eq c 0)
(woman-if-ignore woman0-if-to request) ; ERROR!
(woman-if-body request woman0-if-to (eq c negated)))))