Example #1
0
 // ---------------------------------------------------------------------------------------------
 // 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);
         }
     }
 }