Re: Best way to work with Genbooks

"Klaus R. H. Walther" <[email protected]>
Newsgroups gmane.comp.literature.sword.devel
Message-ID <[email protected]>
Hi David,

I don't know the classes you are using, but maybe you have to do
something like this:

     if(treeKey->firstChild()) {
         do {
             this->toc += treeKey->getText();
             //Add a space around the new line for the tokenizer to
split on
             this->toc += "\n ";
             if(treeKey->hasChildren()) {
                 this->walkTree(treeKey);
             }
         }
         while(treeKey->nextSibling());

         treeKey->parent();
     }

Klaus

Am 04.04.2024 um 16:57 schrieb David "Judah's Shadow" Blue:
> On Tuesday, March 5, 2024 2:05:39 PM EDT Troy A. Griffitts wrote:
>> Hi David,
>>
>> Traversing a tree without recursion usually required keeping a stack you can
>> push onto and pop when you hit a leaf.  This is all handled for you in the
>> call stack when you use recursion.  If you really do want to avoid
>> recursion, I would recommend having a look at general strategies for tree
>> traversal without recursion. Something like:
>>
>> https://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/
>>
>> With recursion, our TreeIndexUtil printTree function serves as a great
>> example:
>>
>> https://crosswire.org/svn/sword/trunk/utilities/treeidxutil.cpp
> So between this example, and the example on the wiki, I've got a working
> function with recursion, however it seems to skip the first node of each
> branch. So, for instance, in ABS_Essay_GoodSam_SWB it misses the very first
> node in the module /About and goes straight into /Level1 /Level2 /Level3
> (that's how I found this problem to begin with). On other modules it misses
> that very first node (Usually an introduction of some sort) and then on the
> child nodes it skips, say, chapter 1 and starts with chapter 2. I am not
> certain what I'm doing wrong to miss that first node. Here's my code as it
> currently stands.
>
> void Genbook::walkTree(sword::TreeKey *treeKey) {
>
>      if(!treeKey) {
>          treeKey = dynamic_cast<sword::TreeKey*>(this->mod->getKey());
>      }
>
>      this->toc += treeKey->getText();
>
>      if(treeKey->firstChild()) {
>          while(treeKey->nextSibling()) {
>              this->toc += treeKey->getText();
>              //Add a space around the new line for the tokenizer to split on
>              this->toc += "\n ";
>              if(treeKey->hasChildren()) {
>                  this->walkTree(treeKey);
>              }
>          }
>          treeKey->parent();
>      }
> }
>
>
> _______________________________________________
> sword-devel mailing list: [email protected]
> http://crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
_______________________________________________
sword-devel mailing list: [email protected]
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.