/*
         * ----------------------------------------------------------------------------
         *  parseFormat()
         *
         *  Parse format string into format tokens (alphanumeric) and separators
         *  (non-alphanumeric).
         *
         */
        private static List <FormatInfo> ParseFormat(string formatString)
        {
            if (formatString == null || formatString.Length == 0)
            {
                return(null);
            }
            int  length              = 0;
            bool lastAlphaNumeric    = CharUtil.IsAlphaNumeric(formatString[length]);
            List <FormatInfo> tokens = new List <FormatInfo>();
            int count = 0;

            if (lastAlphaNumeric)
            {
                // If the first one is alpha num add empty separator as a prefix.
                tokens.Add(null);
            }

            while (length <= formatString.Length)
            {
                // Loop until a switch from format token to separator is detected (or vice-versa)
                bool currentchar = length < formatString.Length ? CharUtil.IsAlphaNumeric(formatString[length]) : !lastAlphaNumeric;
                if (lastAlphaNumeric != currentchar)
                {
                    FormatInfo formatInfo = new FormatInfo();
                    if (lastAlphaNumeric)
                    {
                        // We just finished a format token.  Map it to a numbering format ID and a min-length bound.
                        mapFormatToken(formatString, count, length - count, out formatInfo.numSequence, out formatInfo.length);
                    }
                    else
                    {
                        formatInfo.isSeparator = true;
                        // We just finished a separator.  Save its length and a pointer to it.
                        formatInfo.formatString = formatString.Substring(count, length - count);
                    }
                    count = length;
                    length++;
                    // Begin parsing the next format token or separator

                    tokens.Add(formatInfo);
                    // Flip flag from format token to separator (or vice-versa)
                    lastAlphaNumeric = currentchar;
                }
                else
                {
                    length++;
                }
            }

            return(tokens);
        }