1 ;;; rng-util.el --- utility functions for RELAX NG library
3 ;; Copyright (C) 2003, 2007-2018 Free Software Foundation, Inc.
6 ;; Keywords: wp, hypermedia, languages, XML, RelaxNG
8 ;; This file is part of GNU Emacs.
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation, either version 3 of the License, or
13 ;; (at your option) any later version.
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
27 (defun rng-make-datatypes-uri (uri)
28 (if (string-equal uri
"")
29 ;; The spec doesn't say to do this, but it's perfectly conformant
30 ;; and better than using nil, I think.
31 'http
://relaxng.org
/ns
/structure
/1.0
34 (defconst rng-xsd-datatypes-uri
35 (rng-make-datatypes-uri "http://www.w3.org/2001/XMLSchema-datatypes"))
37 (defconst rng-builtin-datatypes-uri
(rng-make-datatypes-uri ""))
39 (defun rng-uniquify-eq (list)
40 "Destructively remove `eq' duplicates from LIST."
44 (if (eq (car head
) (cadr head
))
45 (setcdr head
(cddr head
)))
46 (setq head
(cdr head
)))
49 (defun rng-uniquify-equal (list)
50 "Destructively remove `equal' duplicates from LIST."
54 (if (equal (car head
) (cadr head
))
55 (setcdr head
(cddr head
)))
56 (setq head
(cdr head
)))
59 (defun rng-blank-p (str) (string-match "\\`[ \t\n\r]*\\'" str
))
61 (defun rng-substq (new old list
)
62 "Replace first member of LIST (if any) that is `eq' to OLD by NEW.
63 LIST is not modified."
64 (cond ((null list
) nil
)
66 (cons new
(cdr list
)))
68 (let ((tail (cons (car list
)
73 (let ((item (car rest
)))
74 (setq rest
(cdr rest
))
82 (cons item nil
))))))))
85 (defun rng-escape-string (s)
86 (replace-regexp-in-string "[&\"<>]"
96 (defun rng-collapse-space (string)
98 (replace-regexp-in-string "[ \t\r\n]+" " " string t t
))
99 (when (string-match "\\` " string
)
100 (setq string
(substring string
1)))
101 (when (string-match " \\'" string
)
102 (setq string
(substring string
0 -
1)))
105 (define-error 'rng-error nil
)
109 ;;; rng-util.el ends here