internal static void Parse(String fmt, ITarget target) { int fmtLength = fmt.Length; StringBuilder sb = new StringBuilder(fmtLength); bool literalMode = false, wasQuote = false; for (int i = 0; i < fmtLength;) { char c = fmt[i++]; if ('\'' == c) { literalMode ^= true; if (false == (wasQuote ^= true)) { sb.Append('\''); } continue; } wasQuote = false; int maxLen; if (!literalMode && (maxLen = target.FieldLength(c)) > 0) { int n = i; for (; n < fmtLength && fmt[n] == c; ++n) { } n -= i; i += n++; if (n > maxLen) { char padding = target.PaddingForField(c); for (int j = 0; j < n - maxLen; j++) { sb.Append(padding); } n = maxLen; } if (sb.Length > 0) { target.AddString(sb.ToString()); sb.Length = 0; } target.AddField(c, n); } else { sb.Append(c); } } if (sb.Length > 0) { target.AddString(sb.ToString()); } }