/// <summary>
        ///     Extracts the subtypes from the specified attribute name.
        ///     For example, if the attribute name is cn;lang-ja;phonetic,
        ///     this method returns an array containing lang-ja and phonetic.
        /// </summary>
        /// <param name="attrName">
        ///     Name of the attribute from which to extract
        ///     the subtypes.
        /// </param>
        /// <returns>
        ///     An array subtypes or null if the attribute has none.
        ///     @throws IllegalArgumentException if attrName is null.
        /// </returns>
        public static string[] GetSubtypes(string attrName)
        {
            if (attrName == null)
            {
                throw new ArgumentException("Attribute name cannot be null");
            }

            var st = new SupportClass.Tokenizer(attrName, ";");

            string[] subTypes = null;
            var      cnt      = st.Count;

            if (cnt > 0)
            {
                st.NextToken(); // skip over basename
                subTypes = new string[cnt - 1];
                var i = 0;
                while (st.HasMoreTokens())
                {
                    subTypes[i++] = st.NextToken();
                }
            }

            return(subTypes);
        }
        /// <summary> Extracts the subtypes from the specified attribute name.
        ///
        /// For example, if the attribute name is cn;lang-ja;phonetic,
        /// this method returns an array containing lang-ja and phonetic.
        ///
        /// </summary>
        /// <param name="attrName">  Name of the attribute from which to extract
        /// the subtypes.
        ///
        /// </param>
        /// <returns> An array subtypes or null if the attribute has none.
        ///
        /// @throws IllegalArgumentException if attrName is null
        /// </returns>
        public static System.String[] getSubtypes(System.String attrName)
        {
            if ((System.Object)attrName == null)
            {
                throw new System.ArgumentException("Attribute name cannot be null");
            }
            SupportClass.Tokenizer st       = new SupportClass.Tokenizer(attrName, ";");
            System.String[]        subTypes = null;
            int cnt = st.Count;

            if (cnt > 0)
            {
                st.NextToken();                 // skip over basename
                subTypes = new System.String[cnt - 1];
                int i = 0;
                while (st.HasMoreTokens())
                {
                    subTypes[i++] = st.NextToken();
                }
            }
            return(subTypes);
        }