// --------------------------------------------------------------------------------------------- // Namespace Functions /// <seealso cref="iText.Kernel.XMP.XMPSchemaRegistry.RegisterNamespace(System.String, System.String) /// "/> /// <exception cref="iText.Kernel.XMP.XMPException"/> public String RegisterNamespace(String namespaceURI, String suggestedPrefix) { lock (this) { ParameterAsserts.AssertSchemaNS(namespaceURI); ParameterAsserts.AssertPrefix(suggestedPrefix); if (suggestedPrefix[suggestedPrefix.Length - 1] != ':') { suggestedPrefix += ':'; } if (!Utils.IsXMLNameNS(suggestedPrefix.JSubstring(0, suggestedPrefix.Length - 1))) { throw new XMPException("The prefix is a bad XML name", XMPError.BADXML); } String registeredPrefix = (String)namespaceToPrefixMap[namespaceURI]; String registeredNS = (String)prefixToNamespaceMap[suggestedPrefix]; if (registeredPrefix != null) { // Return the actual prefix return(registeredPrefix); } else { if (registeredNS != null) { // the namespace is new, but the prefix is already engaged, // we generate a new prefix out of the suggested String generatedPrefix = suggestedPrefix; for (int i = 1; prefixToNamespaceMap.Contains(generatedPrefix); i++) { generatedPrefix = suggestedPrefix.JSubstring(0, suggestedPrefix.Length - 1) + "_" + i + "_:"; } suggestedPrefix = generatedPrefix; } prefixToNamespaceMap[suggestedPrefix] = namespaceURI; namespaceToPrefixMap[namespaceURI] = suggestedPrefix; // Return the suggested prefix return(suggestedPrefix); } } }