summaryrefslogtreecommitdiff
path: root/lisp/xml.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/xml.el')
-rw-r--r--lisp/xml.el24
1 files changed, 18 insertions, 6 deletions
diff --git a/lisp/xml.el b/lisp/xml.el
index cec1f8a4e16..09ec72f792f 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -2,7 +2,7 @@
;; Copyright (C) 2000-2019 Free Software Foundation, Inc.
-;; Author: Emmanuel Briot <briot@gnat.com>
+;; Author: Emmanuel Briot <briot@gnat.com>
;; Maintainer: Mark A. Hershberger <mah@everybody.org>
;; Keywords: xml, data
@@ -176,11 +176,11 @@ See also `xml-get-attribute-or-nil'."
;; [4] NameStartChar
;; See the definition of word syntax in `xml-syntax-table'.
-(defconst xml-name-start-char-re (concat "[[:word:]:_]"))
+(defconst xml-name-start-char-re "[[:word:]:_]")
;; [4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7
;; | [#x0300-#x036F] | [#x203F-#x2040]
-(defconst xml-name-char-re (concat "[-0-9.[:word:]:_·̀-ͯ‿-⁀]"))
+(defconst xml-name-char-re "[[:word:]:_.0-9\u00B7\u0300-\u036F\u203F\u2040-]")
;; [5] Name ::= NameStartChar (NameChar)*
(defconst xml-name-re (concat xml-name-start-char-re xml-name-char-re "*"))
@@ -245,7 +245,6 @@ See also `xml-get-attribute-or-nil'."
;; [54] AttType ::= StringType | TokenizedType | EnumeratedType
;; [55] StringType ::= 'CDATA'
(defconst xml-att-type-re (concat "\\(?:CDATA\\|" xml-tokenized-type-re
- "\\|" xml-notation-type-re
"\\|" xml-enumerated-type-re "\\)"))
;; [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
@@ -718,10 +717,10 @@ This follows the rule [28] in the XML specifications."
(cond ((looking-at "PUBLIC\\s-+")
(goto-char (match-end 0))
(unless (or (re-search-forward
- "\\=\"\\([[:space:][:alnum:]-'()+,./:=?;!*#@$_%]*\\)\""
+ "\\=\"\\([[:space:][:alnum:]'()+,./:=?;!*#@$_%-]*\\)\""
nil t)
(re-search-forward
- "\\='\\([[:space:][:alnum:]-()+,./:=?;!*#@$_%]*\\)'"
+ "\\='\\([[:space:][:alnum:]()+,./:=?;!*#@$_%-]*\\)'"
nil t))
(error "XML: Missing Public ID"))
(let ((pubid (match-string-no-properties 1)))
@@ -1073,6 +1072,19 @@ The first line is indented with INDENT-STRING."
(insert ?\n indent-string))
(insert ?< ?/ (symbol-name (xml-node-name xml)) ?>))))
+;;;###autoload
+(defun xml-remove-comments (beg end)
+ "Remove XML/HTML comments in the region between BEG and END.
+All text between the <!-- ... --> markers will be removed."
+ (save-excursion
+ (save-restriction
+ (narrow-to-region beg end)
+ (goto-char beg)
+ (while (search-forward "<!--" nil t)
+ (let ((start (match-beginning 0)))
+ (when (search-forward "-->" nil t)
+ (delete-region start (point))))))))
+
(provide 'xml)
;;; xml.el ends here