Exemple #1
0
        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);
        }
Exemple #2
0
        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));
        }