X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/4787a496a05fdc03241850b45911dd283d4b06b8..ba3189039adc8ec5eba5ed3e21d42019a4616b7c:/lisp/nxml/nxml-ns.el diff --git a/lisp/nxml/nxml-ns.el b/lisp/nxml/nxml-ns.el index 7fb6d0e487..8dee3e4634 100644 --- a/lisp/nxml/nxml-ns.el +++ b/lisp/nxml/nxml-ns.el @@ -1,6 +1,6 @@ -;;; nxml-ns.el --- XML namespace processing +;;; nxml-ns.el --- XML namespace processing -*- lexical-binding:t -*- -;; Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc. ;; Author: James Clark ;; Keywords: XML @@ -29,22 +29,22 @@ (require 'nxml-util) (defvar nxml-ns-state nil - "Contains the state of namespace processing. The state -is never modified destructively and so can be saved and restored -without copying. - -The value is a stack represented by a list. The list has length N + 1 -where N is the number of open elements. Each member of the list -represents the bindings in effect for a particular element. Each -member is itself a list whose car is the default namespace + "Contains the state of namespace processing. +The state is never modified destructively and so can be saved and +restored without copying. + +The value is a stack represented by a list. The list has length +N + 1 where N is the number of open elements. Each member of the +list represents the bindings in effect for a particular element. +Each member is itself a list whose car is the default namespace \(a symbol or nil) and whose cdr is an alist of (PREFIX . NS) pairs where PREFIX is a string (never nil) and NS is the namespace URI symbol.") (defconst nxml-ns-initial-state (list (list nil (cons "xml" nxml-xml-namespace-uri))) - "A list to be used as the initial value of nxml-ns-state. This -represents the state with no open elements and with the default + "A list to be used as the initial value of `nxml-ns-state'. +This represents the state with no open elements and with the default namespace bindings (no default namespace and only the xml prefix bound).") (defsubst nxml-ns-state () nxml-ns-state) @@ -56,35 +56,33 @@ namespace bindings (no default namespace and only the xml prefix bound).") (equal nxml-ns-state state)) (defmacro nxml-ns-save (&rest body) + (declare (indent 0) (debug t)) `(let ((nxml-ns-state nxml-ns-initial-state)) ,@body)) -(put 'nxml-ns-save 'lisp-indent-function 0) -(def-edebug-spec nxml-ns-save t) - (defun nxml-ns-init () (setq nxml-ns-state nxml-ns-initial-state)) (defun nxml-ns-push-state () - "Change the state by starting a new element. Namespace declarations -are inherited from the parent state." + "Change the state by starting a new element. +Namespace declarations are inherited from the parent state." (setq nxml-ns-state (cons (car nxml-ns-state) nxml-ns-state))) (defun nxml-ns-pop-state () - "Change the state by ending an element. The behaviour is undefined -if there is no open element." + "Change the state by ending an element. +The behavior is undefined if there is no open element." (setq nxml-ns-state (cdr nxml-ns-state))) (defun nxml-ns-get-prefix (prefix) - "Return the symbol for namespace bound to PREFIX, or nil if PREFIX -is unbound. PREFIX is a string, never nil." + "Return the symbol for namespace bound to PREFIX. +Return nil if PREFIX is unbound. PREFIX is a string, never nil." (let ((binding (assoc prefix (cdar nxml-ns-state)))) (and binding (cdr binding)))) (defun nxml-ns-set-prefix (prefix ns) - "Change the binding of PREFIX. PREFIX is a string (never nil). NS -is a symbol (never nil). The change will be in effect until the end of -the current element." + "Change the binding of PREFIX. +PREFIX is a string (never nil). NS is a symbol (never nil). +The change will be in effect until the end of the current element." (setq nxml-ns-state (let ((bindings (car nxml-ns-state))) (cons (cons (car bindings) @@ -92,13 +90,13 @@ the current element." (cdr nxml-ns-state))))) (defun nxml-ns-get-default () - "Return the current default namespace as a symbol, or nil -if there is no default namespace." + "Return the current default namespace as a symbol. +Return nil if there is no default namespace." (caar nxml-ns-state)) (defun nxml-ns-set-default (ns) - "Changes the current default namespace. The change -will be in effect until the end of the current element. + "Changes the current default namespace. +The change will be in effect until the end of the current element. NS is a symbol or nil." (setq nxml-ns-state (cons (cons ns (cdar nxml-ns-state)) @@ -117,11 +115,12 @@ NS is a symbol or nil." (setq current (cdr current)) (while (let ((binding (rassq ns current))) (when binding - (when (eq (nxml-ns-get-prefix (car binding)) ns) - (add-to-list 'prefixes - (car binding))) - (setq current - (cdr (member binding current)))))) + (let ((prefix (car binding))) + (when (eq (nxml-ns-get-prefix prefix) ns) + (unless (member prefix prefixes) + (push prefix prefixes)))) + (setq current + (cdr (member binding current)))))) prefixes)) (defun nxml-ns-prefix-for (ns) @@ -142,8 +141,7 @@ NS is a symbol or nil." (cons (caar new) changed)) (setq new (cdr new)))) changed)) - + (provide 'nxml-ns) -;; arch-tag: 5968e4b7-fb37-46ce-8621-c65db9793028 ;;; nxml-ns.el ends here