IEnumerable<Range> SelectSplit(Range range, SelectSplitDialog.Result result) { var str = GetString(range); var start = 0; foreach (Match match in result.Regex.Matches(str)) { if (match.Index != start) yield return Range.FromIndex(range.Start + start, match.Index - start); if (result.IncludeResults) yield return Range.FromIndex(range.Start + match.Index, match.Length); start = match.Index + match.Length; } if (str.Length != start) yield return Range.FromIndex(range.Start + start, str.Length - start); }
static public Result Run(Window parent) { var dialog = new SelectSplitDialog() { Owner = parent }; return dialog.ShowDialog() ? dialog.result : null; }
void Command_Select_Split(SelectSplitDialog.Result result) => Selections.Replace(Selections.AsParallel().AsOrdered().SelectMany(range => SelectSplit(range, result)).ToList());