[sword-devel] BibleTime indexing problem

scribe777@gmail.com scribe at crosswire.org
Fri Mar 2 03:31:34 MST 2012


Gary, if you add this line to your test program (which I suspect Bibletime did similarly at some point) you should get similar values in tmpKey at that point:

 >                 return -1;
>         }

 ((VerseKey *)book->getKey())->Headings(true);

>         book->setPosition(TOP);
>         return 0; 


Gary Holmlund <gary.holmlund at gmail.com> wrote:

>On 02/28/2012 08:21 AM, Troy A. Griffitts wrote:
>> So, a little background.
>>
>> SWORD keys handle versification + 4 special slots:
>>
>> chapter intro
>> book intro
>> testament intro
>> module intro
>>
>> These are positioned respectively using, for example starting with 
>> John 3:16
>>
>> VerseKey k("John 3:16");
>>
>> k.setVerse(0);    // chapter intro
>> k.setChapter(0); // book intro
>> k.setBook(0); // testament intro
>> k.setTestament(0); module intro
>>
>> If you try to output the key when positioned to any of these 4
>special 
>> locations, you will get:
>>
>> John 3:0
>> John 0:0
>> [ Testament 2 Heading ]
>> [ Module Heading ]
>>
>>
>> It is important for our verse parser to be able to parse anything 
>> which it outputs.  Thus the special cases for the magic strings which
>
>> you note below.
>>
>> I don't think the module having any special text/absence or presence 
>> of headers has anything to do with the problem; the key itself
>doesn't 
>> know about the module content.
>>
>>
>> Can you show a simple snippet which fails that I might try to debug?
>>
>> I have created a small test program, and have added it to the
>examples 
>> folder, which tests the functionality and it seems to work for me,
>but 
>> I am using SVN HEAD.  Maybe you could try this program in your 
>> environment:
>>
>>
>http://crosswire.org/svn/sword/trunk/examples/classes/verseposition.cpp
>>
>> Hope we can get this fixed for you,
>>
>> Troy
>Troy
>
>The closest program that does what BibleTime does at the beginning of 
>the indexing is this:
>#include <iostream>
>#include <swmgr.h>
>#include <swmodule.h>
>#include <versekey.h>
>
>using namespace sword;
>using namespace std;
>
>int main(int argc, char **argv) {
>
>         const char *modName = "HunKar";
>         SWMgr library;
>         SWModule *book = library.getModule(modName);
>         if (!book) {
>                 cerr << "Can't find module: " << modName << endl;
>                 return -1;
>         }
>         book->setPosition(TOP);
>         return 0;
>}
>
>However, this program does not have the problem BibleTime is having. It
>
>seems that some other condition about the module is different between 
>the two cases, but I have not been able to discover what it is.
>
>I have debugged down into the setPosition function until I see a 
>difference. Perhaps if I explain that difference it will mean something
>
>to you.
>
>call stack
>1    sword::zText::increment    ztext.cpp    178    0xb7f001a5
>2    sword::zText::decrement    ztext.h    65    0xb7f004f1
>3    sword::SWModule::operator-=    swmodule.h    674    0x815299f
>4    sword::SWModule::operator--    swmodule.h    674    0x81529ff
>5    sword::SWModule::setPosition    swmodule.cpp    368    0xb7ea81c9
>6    CSwordModuleInfo::buildIndex    cswordmoduleinfo.cpp 262 0x813aa07
>
>I get down to the increment function when I see the difference. The 
>function begins like this:
>
>void zText::increment(int steps) {
>     long start;
>     unsigned short size;
>     unsigned long buffnum;
>     VerseKey *tmpkey = &getVerseKey();
>
>The values for tmpkey are different and in BibleTime we hit the error 
>condition a little farther into the function:
>
>         if ((error = key->Error())) {
>             *key = lastgood;
>             break;
>
>For the test program tmpkey looks like this:
>
>         thisKey         sword::VerseKey
>                 sword::SWKey            sword::SWKey
>                 BMAX    @0x8116e24      int [2]
>                 autonorm        1       char
>                 book    1       signed char
>                 chapter 1       int
>                 headings        0 '\0'  char
>                 internalListKey         sword::ListKey
>                 lowerBound      0       long
>                 lowerBoundComponents            
>sword::VerseKey::VerseComponents
>                 refSys   @0x806a7fc     sword::VerseMgr::System
>                 suffix  0 '\0'  signed char
>                 testament       1       signed char
>                 tmpClone         @0x8129db8     sword::VerseKey
>                 upperBound      32359   long
>                 upperBoundComponents            
>sword::VerseKey::VerseComponents
>                 verse   2       int
>
>For BibleTime tmpkey looks like this:
>
>         tmpkey   @0x843cc40     sword::VerseKey
>                 sword::SWKey            sword::SWKey
>                 BMAX    @0x843cce4      int [2]
>                 autonorm        1       char
>                 book    0 '\0'  signed char
>                 chapter 0       int
>                 headings        1       char
>                 internalListKey         sword::ListKey
>                 lowerBound      0       long
>                 lowerBoundComponents            
>sword::VerseKey::VerseComponents
>                 refSys   @0x843c08c     sword::VerseMgr::System
>                 suffix  0 '\0'  signed char
>                 testament       1       signed char
>                 tmpClone         @0x863a790     sword::VerseKey
>                 upperBound      32359   long
>                 upperBoundComponents            
>sword::VerseKey::VerseComponents
>                 verse   0       int
>
>
>I suspect that the book, chapter, and headings values being different 
>are causing the problem. Do you have any thoughts on this?
>
>Gary
>
>
>
>_______________________________________________
>sword-devel mailing list: sword-devel at crosswire.org
>http://www.crosswire.org/mailman/listinfo/sword-devel
>Instructions to unsubscribe/change your settings at above page

-- 
Sent from my Android phone with K-9 Mail. Please excuse my brevity.



More information about the sword-devel mailing list