internal static Verse Create(Scripture.Version.ScriptureInfo scriptureInfo, BookInfo bookInfo, int chapter, int verse, string suffix, VersePosition position, RepositoryMode mode) { Verse result = new Verse(); result._scriptureInfo = scriptureInfo; result._bookInfo = bookInfo; // scriptureInfo.GetBookInfo(bookNumber); if (result._bookInfo == null) { result = null; } else { switch (position) { case VersePosition.First: if (chapter < 1) { if (chapter == -1 || mode == RepositoryMode.Optimistic) { chapter = 1; verse = -1; } else { result = null; } } if (result != null && verse < 1) { if (verse == -1 || mode == RepositoryMode.Optimistic) { verse = 1; } else { result = null; } } break; case VersePosition.Last: if (chapter < 1) { if (chapter == -1 || mode == RepositoryMode.Optimistic) { chapter = scriptureInfo.GetLastChapter(result._bookInfo.Number); verse = -1; } else { result = null; } } if (result != null && verse < 0) { if (verse == -1 || mode == RepositoryMode.Optimistic) { try { verse = scriptureInfo.GetLastVerse(result._bookInfo.Number, chapter); } catch (Exception) { if (mode == RepositoryMode.Optimistic) { chapter = scriptureInfo.GetLastChapter(result._bookInfo.Number); verse = scriptureInfo.GetLastVerse(result._bookInfo.Number, chapter); } else { result = null; } } } else { result = null; } } break; } int maxChapter = scriptureInfo.GetLastChapter(result._bookInfo.Number); if (chapter > maxChapter) { if (mode == RepositoryMode.Optimistic) { chapter = maxChapter; verse = int.MaxValue; } else { result = null; } } if (result != null) { int maxVerse = scriptureInfo.GetLastVerse(result._bookInfo.Number, chapter); if (verse > maxVerse) { if (mode == RepositoryMode.Optimistic) { verse = maxVerse; } else { result = null; } } } if (result != null) { int index = -1; int chapterResult = -1; int verseResult = -1; scriptureInfo.GetVerseData(result._bookInfo.Number, chapter, verse, out index, out chapterResult, out verseResult); result.Index = index; result.ChapterNumber = chapterResult; result.VerseNumber = verseResult; result.Suffix = string.IsNullOrWhiteSpace(suffix) ? null : suffix.Trim().ToLower(); } } return(result); }
internal static Verse Create(Scripture.Version.ScriptureInfo scriptureInfo, string book, int chapter, int verse, string suffix, VersePosition position, RepositoryMode mode) { BookInfo bookInfo = scriptureInfo.GetBookInfo(book); return(Create(scriptureInfo, bookInfo, chapter, verse, suffix, position, mode)); }