Function: xsdre-make-range-list
xsdre-make-range-list is a byte-compiled function defined in
xsd-regexp.el.gz.
Signature
(xsdre-make-range-list LIST)
Documentation
Make a range-list from a list of ranges.
A range-list represents a set of integers by a list of ranges in a canonical form, in which ranges are in increasing order, and adjacent ranges are merged wherever possible.
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/xsd-regexp.el.gz
(defun xsdre-make-range-list (list)
"Make a range-list from a list of ranges.
A range-list represents a set of integers by a list of ranges in a
canonical form, in which ranges are in increasing order, and adjacent
ranges are merged wherever possible."
(when list
(setq list
(sort list 'xsdre-range-less-than))
(let* ((next (cdr list))
(tail list)
(head (car list))
(first (xsdre-range-first head))
(last (xsdre-range-last head)))
(while next
(setq head (car next))
(when (> (xsdre-range-last head) last)
(if (<= (xsdre-range-first head) (1+ last))
(setq last (xsdre-range-last head))
(setcar tail (xsdre-make-range first last))
(setcdr tail next)
(setq tail next)
(setq first (xsdre-range-first head))
(setq last (xsdre-range-last head))))
(setq next (cdr next)))
(setcar tail (xsdre-make-range first last))
(setcdr tail nil)
list)))