private IList <VerseItem> TryGetChapters(string book, string text) { var items = new List <VerseItem>(); var groups = this.chapterRegex.Match(text).Groups; ExceptionUtilities.ThrowInvalidOperationExceptionIfFalse(groups.Count >= 4, "At least 4 groups."); ExceptionUtilities.ThrowInvalidOperationExceptionIfFalse(groups[1].Captures.Count == 1, "Must 1 capture."); var last = groups[1].Captures[0].Value; var loop = 0; while (loop < groups[2].Captures.Count) { var capture2 = groups[2].Captures[loop].Value; var capture3 = groups[3].Captures[loop].Value; var difference = capture2.Substring(0, capture2.Length - capture3.Length).Trim(); if (this.chapterConnectors.Contains(difference)) { var item = new VerseItem { Book = book, Verse = this.MapChapter(last) + ":1-" + this.MapChapter(capture3) + ":999", }; items.Add(item); loop++; if (loop < groups[2].Captures.Count) { last = groups[3].Captures[loop].Value; } loop++; } else { var item = new VerseItem { Book = book, Verse = this.MapChapter(last) + ":1-999", }; items.Add(item); last = capture3; loop++; } } if (loop == groups[2].Captures.Count) { var item = new VerseItem { Book = book, Verse = this.MapChapter(last) + ":1-999", }; items.Add(item); } return(items); }
public IList <VerseItem> GetVerses(Match match) { ExceptionUtilities.ThrowArgumentNullExceptionIfNull(match, nameof(match)); var book = match.Groups[1].Value.Trim(); var verses = match.Groups[2].Value; if (!this.verseRegex.IsMatch(verses)) { return(this.TryGetChapters(book, verses)); } var items = new List <VerseItem>(); var groups = verses.Replace(" ", string.Empty).Split(this.groupSeparators.ToCharArray()); var chapterSeparatorSet = new HashSet <char>(this.chapterSeparators.ToArray()); foreach (var group in groups) { if (group.Count(chapterSeparatorSet.Contains) > 1) { var item = new VerseItem { Book = book, Verse = group, }; items.Add(item); } else { var parts = group.Split(chapterSeparatorSet.ToArray()); var chapter = parts[0]; var sections = parts[1].Split(this.verseSeparators.ToCharArray()); foreach (var section in sections) { var item = new VerseItem { Book = book, Verse = chapter + ":" + section, }; items.Add(item); } } } return(items); }