[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r108813: Fix use of eval-and-compile
From: |
Chong Yidong |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r108813: Fix use of eval-and-compile in regexps in xml.el. |
Date: |
Sat, 30 Jun 2012 22:21:24 +0800 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 108813
committer: Chong Yidong <address@hidden>
branch nick: trunk
timestamp: Sat 2012-06-30 22:21:24 +0800
message:
Fix use of eval-and-compile in regexps in xml.el.
* xml.el (xml-*-re): Convert defvars into defconsts, and
eval-and-compile them so eval-and-compile works on derivatives.
(xml--entity-replacement-text): Use eval-and-comple.
modified:
lisp/ChangeLog
lisp/xml.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2012-06-30 13:18:16 +0000
+++ b/lisp/ChangeLog 2012-06-30 14:21:24 +0000
@@ -1,3 +1,9 @@
+2012-06-30 Chong Yidong <address@hidden>
+
+ * xml.el (xml-*-re): Convert defvars into defconsts, and
+ eval-and-compile them so eval-and-compile works on derivatives.
+ (xml--entity-replacement-text): Use eval-and-comple.
+
2012-06-30 Michael Albinus <address@hidden>
* vc/vc-git.el (vc-git-registered): Use cache property
=== modified file 'lisp/xml.el'
--- a/lisp/xml.el 2012-06-30 13:57:55 +0000
+++ b/lisp/xml.el 2012-06-30 14:21:24 +0000
@@ -183,79 +183,90 @@
(current-buffer)
parse-dtd parse-ns))))
-
-(defvar xml-name-re)
-(defvar xml-entity-value-re)
-(defvar xml-att-def-re)
+(eval-and-compile
(let* ((start-chars (concat "[:alpha:]:_"))
(name-chars (concat "-[:digit:]." start-chars))
- ;;[3] S ::= (#x20 | #x9 | #xD | #xA)+
+ ;;[3] S ::= (#x20 | #x9 | #xD | #xA)+
(whitespace "[ \t\n\r]"))
- ;;[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6]
- ;; | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] |
[#x37F-#x1FFF]
- ;; | [#x200C-#x200D] | [#x2070-#x218F] |
[#x2C00-#x2FEF] | [#x3001-#xD7FF]
- ;; | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
[#x10000-#xEFFFF]
- (defvar xml-name-start-char-re (concat "[" start-chars "]"))
- ;;[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 |
[#x0300-#x036F] | [#x203F-#x2040]
- (defvar xml-name-char-re (concat "[" name-chars "]"))
- ;;[5] Name ::= NameStartChar (NameChar)*
- (defvar xml-name-re (concat xml-name-start-char-re
xml-name-char-re "*"))
- ;;[6] Names ::= Name (#x20 Name)*
- (defvar xml-names-re (concat xml-name-re "\\(?: " xml-name-re
"\\)*"))
- ;;[7] Nmtoken ::= (NameChar)+
- (defvar xml-nmtoken-re (concat xml-name-char-re "+"))
- ;;[8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
- (defvar xml-nmtokens-re (concat xml-nmtoken-re "\\(?: " xml-name-re
"\\)*"))
- ;;[66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
- (defvar xml-char-ref-re "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)")
- ;;[68] EntityRef ::= '&' Name ';'
- (defvar xml-entity-ref (concat "&" xml-name-re ";"))
- ;;[69] PEReference ::= '%' Name ';'
- (defvar xml-pe-reference-re (concat "%" xml-name-re ";"))
- ;;[67] Reference ::= EntityRef | CharRef
- (defvar xml-reference-re (concat "\\(?:" xml-entity-ref "\\|"
xml-char-ref-re "\\)"))
- ;;[10] AttValue ::= '"' ([^<&"] | Reference)* '"' |
"'" ([^<&'] | Reference)* "'"
- (defvar xml-att-value-re (concat "\\(?:\"\\(?:[^&\"]\\|" xml-reference-re
"\\)*\"\\|"
- "'\\(?:[^&']\\|" xml-reference-re
"\\)*'\\)"))
- ;;[56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID
per Element Type] [VC: ID Attribute Default]
- ;; | 'IDREF' [VC: IDREF]
- ;; | 'IDREFS' [VC: IDREF]
- ;; | 'ENTITY' [VC: Entity Name]
- ;; | 'ENTITIES' [VC: Entity Name]
- ;; | 'NMTOKEN' [VC: Name Token]
- ;; | 'NMTOKENS' [VC: Name Token]
- (defvar xml-tokenized-type-re
"\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|ENTITIES\\|NMTOKEN\\|NMTOKENS\\)")
- ;;[58] NotationType ::= 'NOTATION' S '(' S? Name (S?
'|' S? Name)* S? ')'
- (defvar xml-notation-type-re (concat "\\(?:NOTATION" whitespace "("
whitespace "*" xml-name-re
- "\\(?:" whitespace "*|" whitespace "*"
xml-name-re "\\)*" whitespace "*)\\)"))
- ;;[59] Enumeration ::= '(' S? Nmtoken (S? '|' S?
Nmtoken)* S? ')' [VC: Enumeration] [VC: No Duplicate Tokens]
- (defvar xml-enumeration-re (concat "\\(?:(" whitespace "*" xml-nmtoken-re
- "\\(?:" whitespace "*|" whitespace "*"
xml-nmtoken-re "\\)*"
+ ;; [4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6]
+ ;; | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] |
[#x37F-#x1FFF]
+ ;; | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF]
+ ;; | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD]
+ ;; | [#x10000-#xEFFFF]
+ (defconst xml-name-start-char-re (concat "[" start-chars "]"))
+ ;; [4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7
+ ;; | [#x0300-#x036F] | [#x203F-#x2040]
+ (defconst xml-name-char-re (concat "[" name-chars "]"))
+ ;; [5] Name ::= NameStartChar (NameChar)*
+ (defconst xml-name-re (concat xml-name-start-char-re xml-name-char-re
"*"))
+ ;; [6] Names ::= Name (#x20 Name)*
+ (defconst xml-names-re (concat xml-name-re "\\(?: " xml-name-re "\\)*"))
+ ;; [7] Nmtoken ::= (NameChar)+
+ (defconst xml-nmtoken-re (concat xml-name-char-re "+"))
+ ;; [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
+ (defconst xml-nmtokens-re (concat xml-nmtoken-re "\\(?: " xml-name-re
"\\)*"))
+ ;; [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
+ (defconst xml-char-ref-re "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)")
+ ;; [68] EntityRef ::= '&' Name ';'
+ (defconst xml-entity-ref (concat "&" xml-name-re ";"))
+ ;; [69] PEReference ::= '%' Name ';'
+ (defconst xml-pe-reference-re (concat "%" xml-name-re ";"))
+ ;; [67] Reference ::= EntityRef | CharRef
+ (defconst xml-reference-re (concat "\\(?:" xml-entity-ref "\\|"
xml-char-ref-re "\\)"))
+ ;; [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] |
Reference)* "'"
+ (defconst xml-att-value-re (concat "\\(?:\"\\(?:[^&\"]\\|" xml-reference-re
"\\)*\"\\|"
+ "'\\(?:[^&']\\|" xml-reference-re
"\\)*'\\)"))
+ ;; [56] TokenizedType ::= 'ID' [VC: ID] [VC: One ID / Element Type] [VC: ID
Attribute Default]
+ ;; | 'IDREF' [VC: IDREF]
+ ;; | 'IDREFS' [VC: IDREF]
+ ;; | 'ENTITY' [VC: Entity Name]
+ ;; | 'ENTITIES' [VC: Entity Name]
+ ;; | 'NMTOKEN' [VC: Name Token]
+ ;; | 'NMTOKENS' [VC: Name Token]
+ (defconst xml-tokenized-type-re (concat
"\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|"
+ "ENTITIES\\|NMTOKEN\\|NMTOKENS\\)"))
+ ;; [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
+ (defconst xml-notation-type-re
+ (concat "\\(?:NOTATION" whitespace "(" whitespace "*" xml-name-re
+ "\\(?:" whitespace "*|" whitespace "*" xml-name-re "\\)*"
+ whitespace "*)\\)"))
+ ;; [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
+ ;; [VC: Enumeration] [VC: No Duplicate Tokens]
+ (defconst xml-enumeration-re (concat "\\(?:(" whitespace "*" xml-nmtoken-re
+ "\\(?:" whitespace "*|" whitespace "*"
+ xml-nmtoken-re "\\)*"
whitespace ")\\)"))
- ;;[57] EnumeratedType ::= NotationType | Enumeration
- (defvar xml-enumerated-type-re (concat "\\(?:" xml-notation-type-re "\\|"
xml-enumeration-re "\\)"))
- ;;[54] AttType ::= StringType | TokenizedType |
EnumeratedType
- ;;[55] StringType ::= 'CDATA'
- (defvar 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)
- (defvar xml-default-decl-re (concat
"\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED" whitespace "\\)*" xml-att-value-re
"\\)"))
- ;;[53] AttDef ::= S Name S AttType S DefaultDecl
- (defvar xml-att-def-re (concat "\\(?:" whitespace "*" xml-name-re
- whitespace "*" xml-att-type-re
- whitespace "*" xml-default-decl-re
"\\)"))
- ;;[9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"'
- ;; | "'" ([^%&'] | PEReference | Reference)* "'"
- (defvar xml-entity-value-re (concat "\\(?:\"\\(?:[^%&\"]\\|"
xml-pe-reference-re
- "\\|" xml-reference-re
"\\)*\"\\|'\\(?:[^%&']\\|"
- xml-pe-reference-re "\\|"
xml-reference-re "\\)*'\\)")))
-;;[75] ExternalID ::= 'SYSTEM' S SystemLiteral
-;; | 'PUBLIC' S PubidLiteral S SystemLiteral
-;;[76] NDataDecl ::= S 'NDATA' S
-;;[73] EntityDef ::= EntityValue| (ExternalID NDataDecl?)
-;;[71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
-;;[74] PEDef ::= EntityValue | ExternalID
-;;[72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
-;;[70] EntityDecl ::= GEDecl | PEDecl
+ ;; [57] EnumeratedType ::= NotationType | Enumeration
+ (defconst xml-enumerated-type-re (concat "\\(?:" xml-notation-type-re
+ "\\|" xml-enumeration-re "\\)"))
+ ;; [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)
+ (defconst xml-default-decl-re (concat
"\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED"
+ whitespace "\\)*" xml-att-value-re
"\\)"))
+ ;; [53] AttDef ::= S Name S AttType S DefaultDecl
+ (defconst xml-att-def-re (concat "\\(?:" whitespace "*" xml-name-re
+ whitespace "*" xml-att-type-re
+ whitespace "*" xml-default-decl-re "\\)"))
+ ;; [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"'
+ ;; | "'" ([^%&'] | PEReference | Reference)* "'"
+ (defconst xml-entity-value-re (concat "\\(?:\"\\(?:[^%&\"]\\|"
xml-pe-reference-re
+ "\\|" xml-reference-re
+ "\\)*\"\\|'\\(?:[^%&']\\|"
+ xml-pe-reference-re "\\|"
+ xml-reference-re "\\)*'\\)"))))
+
+;; [75] ExternalID ::= 'SYSTEM' S SystemLiteral
+;; | 'PUBLIC' S PubidLiteral S SystemLiteral
+;; [76] NDataDecl ::= S 'NDATA' S
+;; [73] EntityDef ::= EntityValue| (ExternalID NDataDecl?)
+;; [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
+;; [74] PEDef ::= EntityValue | ExternalID
+;; [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
+;; [70] EntityDecl ::= GEDecl | PEDecl
;; Note that this is setup so that we can do whitespace-skipping with
;; `(skip-syntax-forward " ")', inter alia. Previously this was slow
@@ -722,8 +733,9 @@
"Return the replacement text for the entity value STRING.
The replacement text is obtained by replacing character
references and parameter-entity references."
- (let ((ref-re (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([0-9a-fA-F]+\\)\\|%\\("
- xml-name-re "\\)\\);"))
+ (let ((ref-re (eval-when-compile
+ (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([0-9a-fA-F]+\\)\\|%\\("
+ xml-name-re "\\)\\);")))
children)
(while (string-match ref-re string)
(push (substring string 0 (match-beginning 0)) children)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r108813: Fix use of eval-and-compile in regexps in xml.el.,
Chong Yidong <=