// Maps a token of alphanumeric characters to a numbering format ID and a
        // minimum length bound.  Tokens specify the character(s) that begins a Unicode
        // numbering sequence.  For example, "i" specifies lower case roman numeral
        // numbering.  Leading "zeros" specify a minimum length to be maintained by
        // padding, if necessary.
        public static TokenInfo CreateFormat(string formatString, int startIdx, int tokLen)
        {
            Debug.Assert(startIdx >= 0 && tokLen > 0);
            TokenInfo token = new TokenInfo();

            token.formatString = null;
            token.length       = 1;

            bool useDefault = false;
            char ch         = formatString[startIdx];

            switch (ch)
            {
            case '1':
            case 'A':
            case 'I':
            case 'a':
            case 'i':
                break;

            default:
                // NOTE: We do not support Tamil and Ethiopic numbering systems having no zeros
                if (CharUtil.IsDecimalDigitOne(ch))
                {
                    break;
                }
                if (CharUtil.IsDecimalDigitOne((char)(ch + 1)))
                {
                    // Leading zeros request padding.  Track how much.
                    int idx = startIdx;
                    do
                    {
                        token.length++;
                    } while (--tokLen > 0 && ch == formatString[++idx]);

                    // Recognize the token only if the next character is "one"
                    if (formatString[idx] == ++ch)
                    {
                        break;
                    }
                }
                useDefault = true;
                break;
            }

            if (tokLen != 1)
            {
                // If remaining token length is not 1, do not recognize the token
                useDefault = true;
            }

            if (useDefault)
            {
                // Default to Arabic numbering with no zero padding
                token.startChar = NumberFormatter.DefaultStartChar;
                token.length    = 1;
            }
            else
            {
                token.startChar = ch;
            }
            return(token);
        }