public string GetText(SplitItem item) { StringBuilder sb = StringBuilderCache.GetInstance(); sb.Append((item.IsGroup) ? Captions.ShortGroup : Captions.ShortSplit); sb.Append(PrefixSeparator); if (item.IsGroup) { sb.Append(item.Name); } else { sb.Append(item.Number); } sb.Append(' ', SplitWidth - item.Name.Length); sb.Append(" "); sb.Append(Captions.ShortIndex); sb.Append(PrefixSeparator); sb.Append(' ', IndexWidth - item.Index.GetDigitCount()); sb.Append(item.Index); sb.Append(" "); sb.Append(Captions.ShortLength); sb.Append(PrefixSeparator); sb.Append(' ', LengthWidth - item.Length.GetDigitCount()); sb.Append(item.Length); sb.Append(" "); return(StringBuilderCache.GetStringAndFree(sb)); }
private static List <SplitItem> GetItems(Regex regex, string input, int maxCount, GroupDefinitionCollection groupDefinitions, bool omitGroups, CancellationToken cancellationToken) { var splits = new List <SplitItem>(); if (maxCount == 1) { splits.Add(SplitItem.Create(input)); return(splits); } Match firstMatch = regex.Match(input); if (!firstMatch.Success) { splits.Add(SplitItem.Create(input)); return(splits); } int prevIndex = 0; int count = 0; int splitNumber = 1; foreach (Match match in EnumerateMatches(regex, firstMatch, maxCount, cancellationToken)) { splits.Add(SplitItem.Create(input.Substring(prevIndex, match.Index - prevIndex), prevIndex, splitNumber)); count++; splitNumber++; prevIndex = match.Index + match.Length; if (!omitGroups) { if (regex.RightToLeft) { for (int i = (groupDefinitions.Count - 1); i >= 0; i--) { if (groupDefinitions[i].Number != 0) { Group group = match.Groups[groupDefinitions[i].Number]; if (group.Success) { splits.Add(SplitItem.Create(group, groupDefinitions[i])); count++; } } } } else { foreach (GroupDefinition groupDefinition in groupDefinitions) { if (groupDefinition.Number != 0) { Group group = match.Groups[groupDefinition.Number]; if (group.Success) { splits.Add(SplitItem.Create(group, groupDefinition)); count++; } } } } } } splits.Add(SplitItem.Create(input.Substring(prevIndex, input.Length - prevIndex), prevIndex, splitNumber)); return(splits); }