Function: footnote--roman-common
footnote--roman-common is a byte-compiled function defined in
footnote.el.gz.
Signature
(footnote--roman-common N FOOTNOTE-ROMAN-LIST)
Documentation
Lower case Roman footnoting.
Source Code
;; Defined in /usr/src/emacs/lisp/mail/footnote.el.gz
(defun footnote--roman-common (n footnote-roman-list)
"Lower case Roman footnoting."
(let* ((our-list footnote-roman-list)
(rom-lngth (length our-list))
(rom-high 0)
(rom-low 0)
(rom-div -1)
(count-high 0)
(count-low 0))
;; find surrounding numbers
(while (and (<= count-high (1- rom-lngth))
(>= n (car (nth count-high our-list))))
;; (message "Checking %d" (car (nth count-high our-list)))
(setq count-high (1+ count-high)))
(setq rom-high count-high)
(setq rom-low (1- count-high))
;; find the appropriate divisor (if it exists)
(while (and (= rom-div -1)
(< count-low rom-high))
(when (or (> n (- (car (nth rom-high our-list))
(/ (car (nth count-low our-list))
2)))
(= n (- (car (nth rom-high our-list))
(car (nth count-low our-list)))))
(setq rom-div count-low))
;; (message "Checking %d and %d in div loop" rom-high count-low)
(setq count-low (1+ count-low)))
;;(message "We now have high: %d, low: %d, div: %d, n: %d"
;; rom-high rom-low (if rom-div rom-div -1) n)
(let ((rom-low-pair (nth rom-low our-list))
(rom-high-pair (nth rom-high our-list))
(rom-div-pair (if (not (= rom-div -1)) (nth rom-div our-list) nil)))
;; (message "pairs are: rom-low: %S, rom-high: %S, rom-div: %S"
;; rom-low-pair rom-high-pair rom-div-pair)
(cond
((< n 0) (error "footnote--roman-common called with n < 0"))
((= n 0) "")
((= n (car rom-low-pair)) (cdr rom-low-pair))
((= n (car rom-high-pair)) (cdr rom-high-pair))
((= (car rom-low-pair) (car rom-high-pair))
(concat (cdr rom-low-pair)
(footnote--roman-common
(- n (car rom-low-pair))
footnote-roman-list)))
((>= rom-div 0) (concat (cdr rom-div-pair) (cdr rom-high-pair)
(footnote--roman-common
(- n (- (car rom-high-pair)
(car rom-div-pair)))
footnote-roman-list)))
(t (concat (cdr rom-low-pair)
(footnote--roman-common
(- n (car rom-low-pair))
footnote-roman-list)))))))