Function: ebnf-iso-normalize
ebnf-iso-normalize is a byte-compiled function defined in
ebnf-iso.el.gz.
Signature
(ebnf-iso-normalize STR)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-iso.el.gz
(defun ebnf-iso-normalize (str)
(if (not ebnf-iso-normalize-p)
str
(let ((len (length str))
(stri 0)
(spaces 0))
;; count exceeding spaces
(while (< stri len)
(if (/= (aref str stri) ?\ )
(setq stri (1+ stri))
(setq stri (1+ stri))
(while (and (< stri len) (= (aref str stri) ?\ ))
(setq stri (1+ stri)
spaces (1+ spaces)))))
(if (zerop spaces)
;; no exceeding space
str
;; at least one exceeding space
(let ((new (make-string (- len spaces) ?\ ))
(newi 0))
;; eliminate exceeding spaces
(setq stri 0)
(while (> spaces 0)
(if (/= (aref str stri) ?\ )
(progn
(aset new newi (aref str stri))
(setq stri (1+ stri)
newi (1+ newi)))
(aset new newi (aref str stri))
(setq stri (1+ stri)
newi (1+ newi))
(while (and (> spaces 0) (= (aref str stri) ?\ ))
(setq stri (1+ stri)
spaces (1- spaces)))))
;; remaining is normalized
(while (< stri len)
(aset new newi (aref str stri))
(setq stri (1+ stri)
newi (1+ newi)))
new)))))