Index: versemgr.cpp =================================================================== --- versemgr.cpp (Revision 2206) +++ versemgr.cpp (Arbeitskopie) @@ -175,7 +175,62 @@ // TODO: build offset speed array } +void VerseMgr::System::loadFromTreeKey(const TreeKey *tk) { + int verses = 0; + int chap = 0; + int book = 0; + vector vpc; + // loop over first level nodes (which are books) + if(tk->hasChildren()) { + // get first child + tk->firstChild(); + do { + // TODO: remove trailing "/" ? + const char *bookName = tk->getText(); + const char *bookOsis = ""; + const char *bookAbbrev = ""; + book++; + // loop chapters, level 2 + chap = 0; + // init verses per chapter list + vpc.clear(); + if(tk->hasChildren()) { + // get first chapter + tk->firstChild(); + do { + chap++; + // loop verses, level 3 + verses = 0; + if(tk->hasChildren()) { + tk->firstChild(); + do { + verses++; + } + while(tk->nextSibling()); + // push number of verses to chapter + vpc.push_back(verses); + tk->parent(); + } + } + while(tk->nextSibling()); + // finished, go back tp book + tk->parent(); + } + + // add book + p->books.push_back(Book(bookName, bookOsis, bookAbbrev, chap)); + Book &b = p->books[p->books.size()-1]; + // loop over vpc list + for(int i = 0;i < vpc.size();i++) { + // set max verses + b.p->verseMax.push_back(vpc[i]); + } + } + while(tk->nextSibling()); + } +} + VerseMgr::Book::Book(const Book &other) { longName = other.longName; osisName = other.osisName; @@ -336,6 +391,9 @@ void VerseMgr::registerVersificationSystem(const char *name, const TreeKey *tk) { + p->systems[name] = System(name); + System &s = p->systems[name]; + s.loadFromTreeKey(tk); } // --------------- end statics --------------