Function: soap-xs-add-restriction
soap-xs-add-restriction is a byte-compiled function defined in
soap-client.el.gz.
Signature
(soap-xs-add-restriction NODE TYPE)
Documentation
Add restrictions defined in XML NODE to TYPE, an soap-xs-simple-type.
Source Code
;; Defined in /usr/src/emacs/lisp/net/soap-client.el.gz
(defun soap-xs-add-restriction (node type)
"Add restrictions defined in XML NODE to TYPE, an `soap-xs-simple-type'."
(cl-assert (eq (soap-l2wk (xml-node-name node)) 'xsd:restriction)
nil
"expecting xsd:restriction node, got %s"
(soap-l2wk (xml-node-name node)))
(setf (soap-xs-simple-type-base type)
(soap-l2fq (xml-get-attribute node 'base)))
(dolist (r (xml-node-children node))
(unless (stringp r) ; skip the white space
(let ((value (xml-get-attribute r 'value)))
(cl-case (soap-l2wk (xml-node-name r))
(xsd:enumeration
(push value (soap-xs-simple-type-enumeration type)))
(xsd:pattern
(setf (soap-xs-simple-type-pattern type)
(concat "\\`" (xsdre-translate value) "\\'")))
(xsd:length
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-length-range type)
(cons value value))))
(xsd:minLength
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-length-range type)
(if (soap-xs-simple-type-length-range type)
(cons value
(cdr (soap-xs-simple-type-length-range type)))
;; else
(cons value nil)))))
(xsd:maxLength
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-length-range type)
(if (soap-xs-simple-type-length-range type)
(cons (car (soap-xs-simple-type-length-range type))
value)
;; else
(cons nil value)))))
(xsd:minExclusive
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-integer-range type)
(if (soap-xs-simple-type-integer-range type)
(cons (1+ value)
(cdr (soap-xs-simple-type-integer-range type)))
;; else
(cons (1+ value) nil)))))
(xsd:maxExclusive
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-integer-range type)
(if (soap-xs-simple-type-integer-range type)
(cons (car (soap-xs-simple-type-integer-range type))
(1- value))
;; else
(cons nil (1- value))))))
(xsd:minInclusive
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-integer-range type)
(if (soap-xs-simple-type-integer-range type)
(cons value
(cdr (soap-xs-simple-type-integer-range type)))
;; else
(cons value nil)))))
(xsd:maxInclusive
(let ((value (string-to-number value)))
(setf (soap-xs-simple-type-integer-range type)
(if (soap-xs-simple-type-integer-range type)
(cons (car (soap-xs-simple-type-integer-range type))
value)
;; else
(cons nil value))))))))))