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)))