diff options
Diffstat (limited to 'src/keys/versekey.cpp')
-rw-r--r-- | src/keys/versekey.cpp | 75 |
1 files changed, 48 insertions, 27 deletions
diff --git a/src/keys/versekey.cpp b/src/keys/versekey.cpp index 484e5ce..8773298 100644 --- a/src/keys/versekey.cpp +++ b/src/keys/versekey.cpp @@ -310,34 +310,39 @@ void VerseKey::freshtext() const int VerseKey::getBookAbbrev(const char *iabbr) { - int loop, diff, abLen, min, max, target, retVal = -1; - - char *abbr = 0; - - stdstr(&abbr, iabbr); - strstrip(abbr); - toupperstr(abbr); - abLen = strlen(abbr); - - if (abLen) { - min = 0; -// max = abbrevsCnt - 1; - max = abbrevsCnt; - while(1) { - target = min + ((max - min) / 2); - diff = strncmp(abbr, abbrevs[target].ab, abLen); - if ((!diff)||(target >= max)||(target <= min)) - break; - if (diff > 0) - min = target; - else max = target; - } - for (; target > 0; target--) { - if (strncmp(abbr, abbrevs[target-1].ab, abLen)) - break; + int loop, diff, abLen, min, max, target, retVal = -1; + + char *abbr = 0; + + for (int i = 0; i < 2; i++) { + stdstr(&abbr, iabbr); + strstrip(abbr); + if (!i) + toupperstr(abbr); + abLen = strlen(abbr); + + if (abLen) { + min = 0; +// max = abbrevsCnt - 1; + max = abbrevsCnt; + while(1) { + target = min + ((max - min) / 2); + diff = strncmp(abbr, abbrevs[target].ab, abLen); + if ((!diff)||(target >= max)||(target <= min)) + break; + if (diff > 0) + min = target; + else max = target; + } + for (; target > 0; target--) { + if (strncmp(abbr, abbrevs[target-1].ab, abLen)) + break; + } + + retVal = (!diff) ? abbrevs[target].book : -1; } - - retVal = (!diff) ? abbrevs[target].book : -1; + if (retVal > 0) + break; } delete [] abbr; return retVal; @@ -1454,3 +1459,19 @@ const char *VerseKey::getOSISRef() const { else sprintf(buf[loop], ""); return buf[loop++]; } + + +/****************************************************************************** + * VerseKey::getRangeText - returns parsable range text for this key + */ + +const char *VerseKey::getRangeText() const { + if ((upperBound) && (lowerBound)) { + char buf[1023]; + sprintf(buf, "%s-%s", (const char *)lowerBound, (const char *)upperBound); + stdstr(&rangeText, buf); + } + else stdstr(&rangeText, getText()); + return rangeText; +} + |