Function: rng-xsd-compile1
rng-xsd-compile1 is a byte-compiled function defined in rng-xsd.el.gz.
Signature
(rng-xsd-compile1 NAME PARAMS CONVERT)
Source Code
;; Defined in /usr/src/emacs/lisp/nxml/rng-xsd.el.gz
;;; Parameters
(defun rng-xsd-compile1 (name params convert)
(if (null params)
(cons (equal convert '(identity))
(cond ((eq name 'string) convert)
((eq name 'normalizedString)
(cons 'rng-xsd-replace-space convert))
((and (not (eq name 'string))
(or (memq 'identity convert)
(memq 'rng-xsd-convert-any-uri convert)
(memq 'rng-xsd-check-pattern convert)))
(cons 'rng-xsd-collapse-space convert))
(t convert)))
(let* ((param (car params))
(param-name (car param))
(param-value (cdr param)))
(cond ((memq param-name
'(minExclusive maxExclusive minInclusive maxInclusive))
(let ((limit (apply (car convert)
(cons param-value
(cdr convert))))
(less-than-fun (get name 'rng-xsd-less-than)))
(cond ((not limit)
(rng-dt-error "Minimum value %s is not valid"
param-value))
((not less-than-fun)
(rng-dt-error "Values of type %s are not ordered"
param-name))
(t
(rng-xsd-compile1 name
(cdr params)
(cons (get param-name
'rng-xsd-check)
(cons less-than-fun
(cons limit convert))))))))
((memq param-name '(length minLength maxLength))
(let ((limit (rng-xsd-string-to-non-negative-integer param-value))
(length-fun (get name 'rng-xsd-length)))
(cond ((not limit)
(rng-dt-error "Length %s is not valid" param-value))
((not length-fun)
(rng-dt-error "Values of type %s do not have a length"
param-name))
(t
(rng-xsd-compile1 name
(cdr params)
(cons (get param-name
'rng-xsd-check)
(cons length-fun
(cons limit convert))))))))
((memq param-name '(fractionDigits totalDigits))
(let ((n (rng-xsd-string-to-non-negative-integer param-value)))
(cond ((not n)
(rng-dt-error "Number of digits %s is not valid"
param-value))
(t
(rng-xsd-compile1 name
(cdr params)
(cons (get param-name
'rng-xsd-check)
(cons n convert)))))))
((eq param-name 'pattern)
(condition-case err
(rng-xsd-compile1 name
(cdr params)
(cons 'rng-xsd-check-pattern
(cons (concat
"\\`"
(xsdre-translate param-value)
"\\'")
convert)))
(xsdre-invalid-regexp
(rng-dt-error "Invalid regular expression (%s)"
(nth 1 err)))))
((memq param-name '(enumeration whiteSpace))
(rng-dt-error "Facet %s cannot be used in RELAX NG" param-name))
(t (rng-dt-error "Unknown facet %s" param-name))))))