Mercurial > emacs
diff lisp/xml.el @ 49133:4d76986458e8
(xml-parse-tag, xml-parse-attlist, xml-skip-dtd, xml-parse-dtd,
xml-parse-elem-type): Be more flexible in recognizing empty elements.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Fri, 10 Jan 2003 08:33:41 +0000 |
parents | 265dc22fb2c0 |
children | 6269b5c10aec |
line wrap: on
line diff
--- a/lisp/xml.el Fri Jan 10 08:07:26 2003 +0000 +++ b/lisp/xml.el Fri Jan 10 08:33:41 2003 +0000 @@ -184,7 +184,7 @@ ;; beginning of a document) ((looking-at "<\\?") (search-forward "?>" end) - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) (xml-parse-tag end)) ;; Character data (CDATA) sections, in which no tag should be interpreted ((looking-at "<!\\[CDATA\\[") @@ -198,7 +198,7 @@ (if parse-dtd (setq dtd (xml-parse-dtd end)) (xml-skip-dtd end)) - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) (if dtd (cons dtd (xml-parse-tag end)) (xml-parse-tag end)))) @@ -210,7 +210,7 @@ ((looking-at "</") '()) ;; opening tag - ((looking-at "<\\([^/> \t\n]+\\)") + ((looking-at "<\\([^/>[:space:]]+\\)") (goto-char (match-end 1)) (let* ((case-fold-search nil) ;; XML is case-sensitive. (node-name (match-string 1)) @@ -219,7 +219,7 @@ pos) ;; is this an empty element ? - (if (looking-at "/[ \t\n]*>") + (if (looking-at "/[[:space:]]*>") (progn (forward-char 2) (nreverse (cons '("") children))) @@ -230,7 +230,7 @@ (forward-char 1) ;; Now check that we have the right end-tag. Note that this ;; one might contain spaces after the tag name - (while (not (looking-at (concat "</" node-name "[ \t\n]*>"))) + (while (not (looking-at (concat "</" node-name "[[:space:]]*>"))) (cond ((looking-at "</") (error (concat @@ -281,8 +281,8 @@ Leaves the point on the first non-blank character after the tag." (let ((attlist ()) name) - (skip-chars-forward " \t\n") - (while (looking-at "\\([a-zA-Z_:][-a-zA-Z0-9._:]*\\)[ \t\n]*=[ \t\n]*") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) + (while (looking-at "\\([a-zA-Z_:][-a-zA-Z0-9._:]*\\)[[:space:]]*=[[:space:]]*") (setq name (intern (match-string 1))) (goto-char (match-end 0)) @@ -298,7 +298,7 @@ (push (cons name (match-string-no-properties 1)) attlist) (goto-char (match-end 0)) - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) (if (> (point) end) (error "XML: end of attribute list not found before end of region")) ) @@ -318,14 +318,14 @@ The point must be just before the starting tag of the DTD. This follows the rule [28] in the XML specifications." (forward-char (length "<!DOCTYPE")) - (if (looking-at "[ \t\n]*>") + (if (looking-at "[[:space:]]*>") (error "XML: invalid DTD (excepting name of the document)")) (condition-case nil (progn (forward-word 1) ;; name of the document - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) (if (looking-at "\\[") - (re-search-forward "\\][ \t\n]*>" end) + (re-search-forward "\\][[:space:]]*>" end) (search-forward ">" end))) (error (error "XML: No end to the DTD")))) @@ -333,7 +333,7 @@ "Parse the DTD that point is looking at. The DTD must end before the position END in the current buffer." (forward-char (length "<!DOCTYPE")) - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) (if (looking-at ">") (error "XML: invalid DTD (excepting name of the document)")) @@ -343,7 +343,7 @@ type element end-pos) (goto-char (match-end 0)) - (skip-chars-forward " \t\n") + (goto-char (- (re-search-forward "[^[:space:]]") 1)) ;; External DTDs => don't know how to handle them yet (if (looking-at "SYSTEM") @@ -354,13 +354,13 @@ ;; Parse the rest of the DTD (forward-char 1) - (while (and (not (looking-at "[ \t\n]*\\]")) + (while (and (not (looking-at "[[:space:]]*\\]")) (<= (point) end)) (cond ;; Translation of rule [45] of XML specifications ((looking-at - "[\t \n]*<!ELEMENT[ \t\n]+\\([a-zA-Z0-9.%;]+\\)[ \t\n]+\\([^>]+\\)>") + "[[:space:]]*<!ELEMENT[[:space:]]+\\([a-zA-Z0-9.%;]+\\)[[:space:]]+\\([^>]+\\)>") (setq element (intern (match-string-no-properties 1)) type (match-string-no-properties 2)) @@ -368,13 +368,13 @@ ;; Translation of rule [46] of XML specifications (cond - ((string-match "^EMPTY[ \t\n]*$" type) ;; empty declaration + ((string-match "^EMPTY[[:space:]]*$" type) ;; empty declaration (setq type 'empty)) - ((string-match "^ANY[ \t\n]*$" type) ;; any type of contents + ((string-match "^ANY[[:space:]]*$" type) ;; any type of contents (setq type 'any)) - ((string-match "^(\\(.*\\))[ \t\n]*$" type) ;; children ([47]) + ((string-match "^(\\(.*\\))[[:space:]]*$" type) ;; children ([47]) (setq type (xml-parse-elem-type (match-string-no-properties 1 type)))) - ((string-match "^%[^;]+;[ \t\n]*$" type) ;; substitution + ((string-match "^%[^;]+;[[:space:]]*$" type) ;; substitution nil) (t (error "XML: Invalid element type in the DTD"))) @@ -416,7 +416,7 @@ (mapcar 'xml-parse-elem-type (split-string elem ",")))) ))) - (if (string-match "[ \t\n]*\\([^+*?]+\\)\\([+*?]?\\)" string) + (if (string-match "[[:space:]]*\\([^+*?]+\\)\\([+*?]?\\)" string) (setq elem (match-string 1 string) modifier (match-string 2 string))))