예제 #1
0
 public VersePointer(
     BibleBookInfo bookInfo,
     string moduleShortName,
     string originalVerseName,
     VerseNumber verseNumber,
     VerseNumber?topVerseNumber = null)
     : base(bookInfo != null ? bookInfo.Index : 0, verseNumber, topVerseNumber)
 {
     Book              = bookInfo;
     ModuleShortName   = moduleShortName;
     OriginalVerseName = originalVerseName;
     SubVerses         = new VersesListInfo <ModuleVersePointer>();
 }
예제 #2
0
        private VerseNumberEntry TryGetTopVerseNumber(string text, int startIndex, VerseNumber verseNumber)
        {
            var cursorIndex   = startIndex;
            var dashWasFound  = false;
            var digitWasFound = false;
            var indexOfDigit  = 0;
            var maxSpaceBetweenVerseNumbers = 3;

            while (cursorIndex - startIndex <= maxSpaceBetweenVerseNumbers)
            {
                var c = StringUtils.GetChar(text, cursorIndex);

                if (VerseUtils.IsDash(c) && !dashWasFound)
                {
                    dashWasFound = true;
                }
                else if (char.IsDigit(c) && dashWasFound)
                {
                    digitWasFound = true;
                    indexOfDigit  = cursorIndex;
                    break;
                }
                else if (c != ' ')
                {
                    break;
                }

                cursorIndex++;
            }

            if (!dashWasFound || !digitWasFound)
            {
                return(null);
            }

            var result = TryGetVerseNumber(text, indexOfDigit, false);

            if (result.VerseNumber.IsChapter && !verseNumber.IsChapter)
            {
                result.VerseNumber = new VerseNumber(verseNumber.Chapter, result.VerseNumber.Chapter);
            }

            if (result.VerseNumber.Chapter < verseNumber.Chapter ||
                (result.VerseNumber.IsChapter && result.VerseNumber.Chapter == verseNumber.Chapter) ||
                (result.VerseNumber.Chapter == verseNumber.Chapter && result.VerseNumber.Verse <= verseNumber.Verse))
            {
                return(null);
            }

            return(result);
        }