private void StoreNote(IReadOnlyList <string> lines, BibleNotesVerseSpecification currentVerseSpec) { if (currentVerseSpec == null) { return; } var titleAndContent = ParseTitleAndContent(lines); if (titleAndContent == null) { return; } _notes.Add(new BibleNote { BookChapterAndVerse = new BibleBookChapterAndVerse { BookNumber = currentVerseSpec.BookNumber, ChapterNumber = currentVerseSpec.ChapterNumber, VerseNumber = currentVerseSpec.VerseNumber }, NoteTitle = titleAndContent.Title, NoteContent = titleAndContent.Content, ColourIndex = currentVerseSpec.ColourIndex, StartTokenInVerse = currentVerseSpec.StartWordIndex, EndTokenInVerse = currentVerseSpec.EndWordIndex }); }
private BibleNotesVerseSpecification GetVerseSpecification(string line) { var trimmed = line.Trim(); if (!trimmed.StartsWith("[") || !trimmed.EndsWith("]")) { return(null); } var digits = trimmed.TrimStart('[').TrimEnd(']').Split(new [] { ':' }, StringSplitOptions.RemoveEmptyEntries); if (digits.Length < 3 || digits.Length > 6) { return(null); } if (!int.TryParse(digits[0], out var bibleBook)) { return(null); } if (!int.TryParse(digits[1], out var chapter)) { return(null); } if (!int.TryParse(digits[2], out var verse)) { return(null); } var result = new BibleNotesVerseSpecification { BookNumber = bibleBook, ChapterNumber = chapter, VerseNumber = verse }; if (digits.Length > 4) { if (int.TryParse(digits[3], out var startWord) && int.TryParse(digits[4], out var endWord) && endWord >= startWord && startWord >= 0) { result.StartWordIndex = startWord; result.EndWordIndex = endWord; if (digits.Length > 5) { if (int.TryParse(digits[5], out var colourIndex) && colourIndex >= 0) { result.ColourIndex = colourIndex; } } } } return(result); }
private void ParseNotes(string[] lines) { var linesInNote = new List <string>(); BibleNotesVerseSpecification currentVerseSpec = null; foreach (var line in lines) { var verseSpec = GetVerseSpecification(line); if (verseSpec == null) { if (linesInNote.Count > 0 || !string.IsNullOrWhiteSpace(line)) { linesInNote.Add(line); } } else { // start of a new verse note StoreNote(linesInNote, currentVerseSpec); currentVerseSpec = verseSpec; linesInNote.Clear(); } } StoreNote(linesInNote, currentVerseSpec); }