Top-posting due to lateness... :)
DM,
Nice find! Glad you tracked it down. Count() is specific to only
ListKey and provides the number of subkey elements contained. This has
been optimized now and will only be > 1 if there is a non-contiguous
range, e.g. 'jn.1.1-6,8-10' (Count() == 2 // two VerseKey subkeys with
ranges set appropriately)
Can you use the following?
if (verseKeys++ == verseKeys) { /* then I have a single key */ }
Hope this can work.
-Troy.
DM Smith wrote:
I found the problem. SWORD reports the count of verses in a VerseList
differently. A range now counts as one. It used to count as many verses
as was in it.
Here is a demonstration of the problem that I quickly hacked together.
(Troy, tell me which testcase file to put it in and I'll add it.) It
should say (and used to say) that
"There are 5 verses that are in the range"
#include <iostream>
#include <swbuf.h>
#include <listkey.h>
#include <versekey.h>
#ifndef NO_SWORD_NAMESPACE
using namespace sword;
#endif
using namespace std;
int main(int argc, char **argv) {
VerseKey currentVerse;
SWBuf keyVal = "Matt.1.1-Matt.1.5";
ListKey verseKeys = currentVerse.ParseVerseList(keyVal,
"Gen.1.1", true);
int memberKeyCount = verseKeys.Count();
if (memberKeyCount) {
cout << "There are " << memberKeyCount << " verses that
are in the range: " << keyVal << endl;
for (verseKeys = TOP; !verseKeys.Error(); verseKeys++)
{
cout << verseKeys << endl;
}
}
else {
cout << "Error: Invalid reference/annotateRef: " <<
keyVal << endl;
}
}
I'll look into the testsuite. FYI, a sample xml is:
<?xml version="1.0" encoding="UTF-8"?>
<osis
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.bibletechnologies.net/2003/OSIS/namespace"
xmlns:osis="http://www.bibletechnologies.net/2003/OSIS/namespace"
xsi:schemaLocation="http://www.bibletechnologies.net/2003/OSIS/namespace
http://www.bibletechnologies.net/osisCore.2.1.1.xsd">
<osisText osisIDWork="Luther" osisRefWork="commentary"
xml:lang="en" canonical="false">
<header>
header.
</header>
<div type="bookGroup">
<title>New Testament</title>
<div type="book" osisID="Matt" canonical="false">
<title type="main" short="Matthew">Matthew</title>
<div type="section" annotateType="commentary"
annotateRef="Matt.1.1">
<p>
Blah blah...
This is a test!
</p>
</div>
<div type="section" annotateType="commentary"
annotateRef="Matt.22.1-Matt.22.9">
<title level="2">Sermon; Matthew 21:1-9</title>
<p>
This fails
</p>
</div>
</div>
</div>
</osisText>
</osis>
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
<mailto:sword-devel@crosswire.org>
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
------------------------------------------------------------------------
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page