⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 namespacesupport.java

📁 gcc的组建
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    /**     * Return an enumeration of all prefixes for a given URI whose     * declarations are active in the current context.     * This includes declarations from parent contexts that have     * not been overridden.     *     * <p>This method returns prefixes mapped to a specific Namespace     * URI.  The xml: prefix will be included.  If you want only one     * prefix that's mapped to the Namespace URI, and you don't care      * which one you get, use the {@link #getPrefix getPrefix}     *  method instead.</p>     *     * <p><strong>Note:</strong> the empty (default) prefix is <em>never</em> included     * in this enumeration; to check for the presence of a default     * Namespace, use the {@link #getURI getURI} method with an     * argument of "".</p>     *     * @param uri The Namespace URI.     * @return An enumeration of prefixes (never empty).     * @see #getPrefix     * @see #getDeclaredPrefixes     * @see #getURI     */    public Enumeration getPrefixes (String uri)    {	Vector prefixes = new Vector();	Enumeration allPrefixes = getPrefixes();	while (allPrefixes.hasMoreElements()) {	    String prefix = (String)allPrefixes.nextElement();	    if (uri.equals(getURI(prefix))) {		prefixes.addElement(prefix);	    }	}	return prefixes.elements();    }    /**     * Return an enumeration of all prefixes declared in this context.     *     * <p>The empty (default) prefix will be included in this      * enumeration; note that this behaviour differs from that of     * {@link #getPrefix} and {@link #getPrefixes}.</p>     *     * @return An enumeration of all prefixes declared in this     *         context.     * @see #getPrefixes     * @see #getURI     */    public Enumeration getDeclaredPrefixes ()    {	return currentContext.getDeclaredPrefixes();    }    /**     * Controls whether namespace declaration attributes are placed     * into the {@link #NSDECL NSDECL} namespace     * by {@link #processName processName()}.  This may only be     * changed before any contexts have been pushed.     *     * @since SAX 2.1alpha     *     * @exception IllegalStateException when attempting to set this     *	after any context has been pushed.     */    public void setNamespaceDeclUris (boolean value)    {	if (contextPos != 0)	    throw new IllegalStateException ();	if (value == namespaceDeclUris)	    return;	namespaceDeclUris = value;	if (value)	    currentContext.declarePrefix ("xmlns", NSDECL);	else {	    contexts[contextPos] = currentContext = new Context();	    currentContext.declarePrefix("xml", XMLNS);	}    }    /**     * Returns true if namespace declaration attributes are placed into     * a namespace.  This behavior is not the default.     *     * @since SAX 2.1alpha     */    public boolean isNamespaceDeclUris ()	{ return namespaceDeclUris; }    ////////////////////////////////////////////////////////////////////    // Internal state.    ////////////////////////////////////////////////////////////////////    private Context contexts[];    private Context currentContext;    private int contextPos;    private boolean namespaceDeclUris;    ////////////////////////////////////////////////////////////////////    // Internal classes.    ////////////////////////////////////////////////////////////////////    /**     * Internal class for a single Namespace context.     *     * <p>This module caches and reuses Namespace contexts,     * so the number allocated     * will be equal to the element depth of the document, not to the total     * number of elements (i.e. 5-10 rather than tens of thousands).     * Also, data structures used to represent contexts are shared when     * possible (child contexts without declarations) to further reduce     * the amount of memory that's consumed.     * </p>     */    final class Context {	/**	 * Create the root-level Namespace context.	 */	Context ()	{	    copyTables();	}			/**	 * (Re)set the parent of this Namespace context.	 * The context must either have been freshly constructed,	 * or must have been cleared.	 *	 * @param context The parent Namespace context object.	 */	void setParent (Context parent)	{	    this.parent = parent;	    declarations = null;	    prefixTable = parent.prefixTable;	    uriTable = parent.uriTable;	    elementNameTable = parent.elementNameTable;	    attributeNameTable = parent.attributeNameTable;	    defaultNS = parent.defaultNS;	    declSeen = false;	    declsOK = true;	}	/**	 * Makes associated state become collectible,	 * invalidating this context.	 * {@link #setParent} must be called before	 * this context may be used again.	 */	void clear ()	{	    parent = null;	    prefixTable = null;	    uriTable = null;	    elementNameTable = null;	    attributeNameTable = null;	    defaultNS = null;	}			/**	 * Declare a Namespace prefix for this context.	 *	 * @param prefix The prefix to declare.	 * @param uri The associated Namespace URI.	 * @see org.xml.sax.helpers.NamespaceSupport#declarePrefix	 */	void declarePrefix (String prefix, String uri)	{				// Lazy processing...	    if (!declsOK)		throw new IllegalStateException (		    "can't declare any more prefixes in this context");	    if (!declSeen) {		copyTables();	    }	    if (declarations == null) {		declarations = new Vector();	    }	    	    prefix = prefix.intern();	    uri = uri.intern();	    if ("".equals(prefix)) {		if ("".equals(uri)) {		    defaultNS = null;		} else {		    defaultNS = uri;		}	    } else {		prefixTable.put(prefix, uri);		uriTable.put(uri, prefix); // may wipe out another prefix	    }	    declarations.addElement(prefix);	}	/**	 * Process an XML qualified name in this context.	 *	 * @param qName The XML qualified name.	 * @param isAttribute true if this is an attribute name.	 * @return An array of three strings containing the	 *         URI part (or empty string), the local part,	 *         and the raw name, all internalized, or null	 *         if there is an undeclared prefix.	 * @see org.xml.sax.helpers.NamespaceSupport#processName	 */	String [] processName (String qName, boolean isAttribute)	{	    String name[];	    Hashtable table;	    	    			// detect errors in call sequence	    declsOK = false;				// Select the appropriate table.	    if (isAttribute) {		table = attributeNameTable;	    } else {		table = elementNameTable;	    }	    				// Start by looking in the cache, and				// return immediately if the name				// is already known in this content	    name = (String[])table.get(qName);	    if (name != null) {		return name;	    }	    				// We haven't seen this name in this				// context before.  Maybe in the parent				// context, but we can't assume prefix				// bindings are the same.	    name = new String[3];	    name[2] = qName.intern();	    int index = qName.indexOf(':');	    	    				// No prefix.	    if (index == -1) {		if (isAttribute) {		    if (qName == "xmlns" && namespaceDeclUris)			name[0] = NSDECL;		    else			name[0] = "";		} else if (defaultNS == null) {		    name[0] = "";		} else {		    name[0] = defaultNS;		}		name[1] = name[2];	    }	    				// Prefix	    else {		String prefix = qName.substring(0, index);		String local = qName.substring(index+1);		String uri;		if ("".equals(prefix)) {		    uri = defaultNS;		} else {		    uri = (String)prefixTable.get(prefix);		}		if (uri == null			|| (!isAttribute && "xmlns".equals (prefix))) {		    return null;		}		name[0] = uri;		name[1] = local.intern();	    }	    				// Save in the cache for future use.				// (Could be shared with parent context...)	    table.put(name[2], name);	    return name;	}		/**	 * Look up the URI associated with a prefix in this context.	 *	 * @param prefix The prefix to look up.	 * @return The associated Namespace URI, or null if none is	 *         declared.		 * @see org.xml.sax.helpers.NamespaceSupport#getURI	 */	String getURI (String prefix)	{	    if ("".equals(prefix)) {		return defaultNS;	    } else if (prefixTable == null) {		return null;	    } else {		return (String)prefixTable.get(prefix);	    }	}	/**	 * Look up one of the prefixes associated with a URI in this context.	 *	 * <p>Since many prefixes may be mapped to the same URI,	 * the return value may be unreliable.</p>	 *	 * @param uri The URI to look up.	 * @return The associated prefix, or null if none is declared.	 * @see org.xml.sax.helpers.NamespaceSupport#getPrefix	 */	String getPrefix (String uri)	{	    if (uriTable == null) {		return null;	    } else {		return (String)uriTable.get(uri);	    }	}			/**	 * Return an enumeration of prefixes declared in this context.	 *	 * @return An enumeration of prefixes (possibly empty).	 * @see org.xml.sax.helpers.NamespaceSupport#getDeclaredPrefixes	 */	Enumeration getDeclaredPrefixes ()	{	    if (declarations == null) {		return EMPTY_ENUMERATION;	    } else {		return declarations.elements();	    }	}			/**	 * Return an enumeration of all prefixes currently in force.	 *	 * <p>The default prefix, if in force, is <em>not</em>	 * returned, and will have to be checked for separately.</p>	 *	 * @return An enumeration of prefixes (never empty).	 * @see org.xml.sax.helpers.NamespaceSupport#getPrefixes	 */	Enumeration getPrefixes ()	{	    if (prefixTable == null) {		return EMPTY_ENUMERATION;	    } else {		return prefixTable.keys();	    }	}			////////////////////////////////////////////////////////////////	// Internal methods.	////////////////////////////////////////////////////////////////	/**	 * Copy on write for the internal tables in this context.	 *	 * <p>This class is optimized for the normal case where most	 * elements do not contain Namespace declarations.</p>	 */		private void copyTables ()	{	    if (prefixTable != null) {		prefixTable = (Hashtable)prefixTable.clone();	    } else {		prefixTable = new Hashtable();	    }	    if (uriTable != null) {		uriTable = (Hashtable)uriTable.clone();	    } else {		uriTable = new Hashtable();	    }	    elementNameTable = new Hashtable();	    attributeNameTable = new Hashtable();	    declSeen = true;	}	////////////////////////////////////////////////////////////////	// Protected state.	////////////////////////////////////////////////////////////////		Hashtable prefixTable;	Hashtable uriTable;	Hashtable elementNameTable;	Hashtable attributeNameTable;	String defaultNS = null;	boolean declsOK = true;		////////////////////////////////////////////////////////////////	// Internal state.	////////////////////////////////////////////////////////////////		private Vector declarations = null;	private boolean declSeen = false;	private Context parent = null;    }}// end of NamespaceSupport.java

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -