/* * ---------------------------------------------------------------------------- * 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); }